New Upstream Release - hwloc

Ready changes

Summary

Merged new upstream version: 2.9.1 (was: 2.9.0).

Resulting package

Built on 2023-05-13T00:56 (took 14m10s)

The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:

apt install -t fresh-releases hwloc-dbgsymapt install -t fresh-releases hwloc-nox-dbgsymapt install -t fresh-releases hwloc-noxapt install -t fresh-releases hwlocapt install -t fresh-releases libhwloc-commonapt install -t fresh-releases libhwloc-devapt install -t fresh-releases libhwloc-docapt install -t fresh-releases libhwloc-plugins-dbgsymapt install -t fresh-releases libhwloc-pluginsapt install -t fresh-releases libhwloc15-dbgsymapt install -t fresh-releases libhwloc15

Diff

diff --git a/NEWS b/NEWS
index 4ddcbf44..7c74d836 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,5 @@
 Copyright © 2009 CNRS
-Copyright © 2009-2022 Inria.  All rights reserved.
+Copyright © 2009-2023 Inria.  All rights reserved.
 Copyright © 2009-2013 Université Bordeaux
 Copyright © 2009-2011 Cisco Systems, Inc.  All rights reserved.
 Copyright © 2020 Hewlett Packard Enterprise.  All rights reserved.
@@ -17,6 +17,16 @@ bug fixes (and other actions) for each version of hwloc since version
 0.9.
 
 
+Version 2.9.1
+-------------
+* Don't forget to apply object type filters to "perflevel" caches detected
+  on recent Mac OS X releases, thanks to Michel Lesoinne for the report.
+* Fix a failed assertion in hwloc_topology_restrict() when some NUMA nodes
+  are removed because of HWLOC_RESTRICT_FLAG_REMOVE_CPULESS but no PUs are.
+  Thanks to Mark Grondona for reporting the issue.
+* Mark HPE Cray Slingshot NICs with subtype "Slingshot".
+
+
 Version 2.9.0
 -------------
 * Backends
@@ -61,6 +71,14 @@ Version 2.8.0
     file from the documentation.
 
 
+Version 2.7.2
+-------------
+* Fix a crash when LevelZero devices have multiple subdevices,
+  e.g. on PonteVecchio GPUs, thanks to Jonathan Peyton.
+* Fix a leak when importing cpukinds from XML,
+  thanks to Hui Zhou.
+
+
 Version 2.7.1
 -------------
 * Workaround crashes when virtual machines report incoherent x86 CPUID
diff --git a/VERSION b/VERSION
index af3c4889..38f9a69a 100644
--- a/VERSION
+++ b/VERSION
@@ -9,7 +9,7 @@
 
 major=2
 minor=9
-release=0
+release=1
 
 # greek is used for alpha or beta release tags.  If it is non-empty,
 # it will be appended to the version number.  It does not have to be
@@ -22,7 +22,7 @@ greek=
 
 # The date when this release was created
 
-date="Dec 14, 2022"
+date="Mar 28, 2023"
 
 # If snapshot=1, then use the value from snapshot_version as the
 # entire hwloc version (i.e., ignore major, minor, release, and
@@ -41,7 +41,7 @@ snapshot_version=${major}.${minor}.${release}${greek}-git
 # 2. Version numbers are described in the Libtool current:revision:age
 # format.
 
-libhwloc_so_version=21:1:6
+libhwloc_so_version=21:2:6
 libnetloc_so_version=0:0:0
 
 # Please also update the <TargetName> lines in contrib/windows/libhwloc.vcxproj
diff --git a/config/hwloc.m4 b/config/hwloc.m4
index 8f568ea1..7feeb857 100644
--- a/config/hwloc.m4
+++ b/config/hwloc.m4
@@ -1,6 +1,6 @@
 dnl -*- Autoconf -*-
 dnl
-dnl Copyright © 2009-2022 Inria.  All rights reserved.
+dnl Copyright © 2009-2023 Inria.  All rights reserved.
 dnl Copyright © 2009-2012, 2015-2017, 2020 Université Bordeaux
 dnl Copyright © 2004-2005 The Trustees of Indiana University and Indiana
 dnl                         University Research and Technology
@@ -1277,8 +1277,14 @@ char nvmlInit ();
         AC_MSG_NOTICE([assuming ROCm is installed in standard directories ...])
       fi fi fi
       if test "x$rocm_dir" != x; then
-         HWLOC_RSMI_CPPFLAGS="-I$rocm_dir/rocm_smi/include/"
-         HWLOC_RSMI_LDFLAGS="-L$rocm_dir/rocm_smi/lib/"
+         if test -d "$rocm_dir/include/rocm_smi"; then
+           HWLOC_RSMI_CPPFLAGS="-I$rocm_dir/include/"
+           HWLOC_RSMI_LDFLAGS="-L$rocm_dir/lib/"
+         else
+           # ROCm <5.2 only used its own rocm_smi/{include,lib} directories
+           HWLOC_RSMI_CPPFLAGS="-I$rocm_dir/rocm_smi/include/"
+           HWLOC_RSMI_LDFLAGS="-L$rocm_dir/rocm_smi/lib/"
+	 fi
       fi
 
       hwloc_rsmi_happy=yes
@@ -1364,8 +1370,14 @@ return clGetDeviceIDs(0, 0, 0, NULL, NULL);
         HWLOC_OPENCL_CPPFLAGS="$HWLOC_CUDA_COMMON_CPPFLAGS"
         HWLOC_OPENCL_LDFLAGS="$HWLOC_CUDA_COMMON_LDFLAGS"
         if test "x$rocm_dir" != x; then
-           HWLOC_OPENCL_CPPFLAGS="$HWLOC_OPENCL_CPPFLAGS -I$rocm_dir/opencl/include/"
-           HWLOC_OPENCL_LDFLAGS="$HWLOC_OPENCL_LDFLAGS -L$rocm_dir/opencl/lib/"
+	   if test -d "$rocm_dir/include/CL"; then
+             HWLOC_OPENCL_CPPFLAGS="$HWLOC_OPENCL_CPPFLAGS -I$rocm_dir/include/"
+             HWLOC_OPENCL_LDFLAGS="$HWLOC_OPENCL_LDFLAGS -L$rocm_dir/lib/"
+	   else
+             # ROCm <5.2 only used its own opencl/{include,lib} directories
+	     HWLOC_OPENCL_CPPFLAGS="$HWLOC_OPENCL_CPPFLAGS -I$rocm_dir/opencl/include/"
+             HWLOC_OPENCL_LDFLAGS="$HWLOC_OPENCL_LDFLAGS -L$rocm_dir/opencl/lib/"
+	   fi
         fi
         tmp_save_CPPFLAGS="$CPPFLAGS"
         CPPFLAGS="$CPPFLAGS $HWLOC_OPENCL_CPPFLAGS"
diff --git a/configure b/configure
index f9185983..59ba0ef6 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for hwloc 2.9.0.
+# Generated by GNU Autoconf 2.71 for hwloc 2.9.1.
 #
 # Report bugs to <https://github.com/open-mpi/hwloc/issues>.
 #
@@ -621,8 +621,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='hwloc'
 PACKAGE_TARNAME='hwloc'
-PACKAGE_VERSION='2.9.0'
-PACKAGE_STRING='hwloc 2.9.0'
+PACKAGE_VERSION='2.9.1'
+PACKAGE_STRING='hwloc 2.9.1'
 PACKAGE_BUGREPORT='https://github.com/open-mpi/hwloc/issues'
 PACKAGE_URL=''
 
@@ -1637,7 +1637,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures hwloc 2.9.0 to adapt to many kinds of systems.
+\`configure' configures hwloc 2.9.1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1713,7 +1713,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of hwloc 2.9.0:";;
+     short | recursive ) echo "Configuration of hwloc 2.9.1:";;
    esac
   cat <<\_ACEOF
 
@@ -1963,7 +1963,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-hwloc configure 2.9.0
+hwloc configure 2.9.1
 generated by GNU Autoconf 2.71
 
 Copyright (C) 2021 Free Software Foundation, Inc.
@@ -2684,7 +2684,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by hwloc $as_me 2.9.0, which was
+It was created by hwloc $as_me 2.9.1, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   $ $0$ac_configure_args_raw
@@ -4303,7 +4303,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='hwloc'
- VERSION='2.9.0'
+ VERSION='2.9.1'
 
 
 printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -27994,8 +27994,14 @@ printf "%s\n" "$as_me: using standard ROCm install path $rocm_dir ..." >&6;}
 printf "%s\n" "$as_me: assuming ROCm is installed in standard directories ..." >&6;}
       fi fi fi
       if test "x$rocm_dir" != x; then
-         HWLOC_RSMI_CPPFLAGS="-I$rocm_dir/rocm_smi/include/"
-         HWLOC_RSMI_LDFLAGS="-L$rocm_dir/rocm_smi/lib/"
+         if test -d "$rocm_dir/include/rocm_smi"; then
+           HWLOC_RSMI_CPPFLAGS="-I$rocm_dir/include/"
+           HWLOC_RSMI_LDFLAGS="-L$rocm_dir/lib/"
+         else
+           # ROCm <5.2 only used its own rocm_smi/{include,lib} directories
+           HWLOC_RSMI_CPPFLAGS="-I$rocm_dir/rocm_smi/include/"
+           HWLOC_RSMI_LDFLAGS="-L$rocm_dir/rocm_smi/lib/"
+	 fi
       fi
 
       hwloc_rsmi_happy=yes
@@ -28193,8 +28199,14 @@ done
         HWLOC_OPENCL_CPPFLAGS="$HWLOC_CUDA_COMMON_CPPFLAGS"
         HWLOC_OPENCL_LDFLAGS="$HWLOC_CUDA_COMMON_LDFLAGS"
         if test "x$rocm_dir" != x; then
-           HWLOC_OPENCL_CPPFLAGS="$HWLOC_OPENCL_CPPFLAGS -I$rocm_dir/opencl/include/"
-           HWLOC_OPENCL_LDFLAGS="$HWLOC_OPENCL_LDFLAGS -L$rocm_dir/opencl/lib/"
+	   if test -d "$rocm_dir/include/CL"; then
+             HWLOC_OPENCL_CPPFLAGS="$HWLOC_OPENCL_CPPFLAGS -I$rocm_dir/include/"
+             HWLOC_OPENCL_LDFLAGS="$HWLOC_OPENCL_LDFLAGS -L$rocm_dir/lib/"
+	   else
+             # ROCm <5.2 only used its own opencl/{include,lib} directories
+	     HWLOC_OPENCL_CPPFLAGS="$HWLOC_OPENCL_CPPFLAGS -I$rocm_dir/opencl/include/"
+             HWLOC_OPENCL_LDFLAGS="$HWLOC_OPENCL_LDFLAGS -L$rocm_dir/opencl/lib/"
+	   fi
         fi
         tmp_save_CPPFLAGS="$CPPFLAGS"
         CPPFLAGS="$CPPFLAGS $HWLOC_OPENCL_CPPFLAGS"
@@ -34503,7 +34515,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by hwloc $as_me 2.9.0, which was
+This file was extended by hwloc $as_me 2.9.1, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -34575,7 +34587,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-hwloc config.status 2.9.0
+hwloc config.status 2.9.1
 configured by $0, generated by GNU Autoconf 2.71,
   with options \\"\$ac_cs_config\\"
 
diff --git a/contrib/windows-cmake/CMakeLists.txt b/contrib/windows-cmake/CMakeLists.txt
index 83e08664..8c384950 100644
--- a/contrib/windows-cmake/CMakeLists.txt
+++ b/contrib/windows-cmake/CMakeLists.txt
@@ -1,7 +1,7 @@
 cmake_minimum_required(VERSION 3.15)
 project(hwloc
     LANGUAGES C
-    VERSION 2.9.0)
+    VERSION 2.9.1)
 
 enable_testing()
 
diff --git a/contrib/windows-cmake/check-versions.sh b/contrib/windows-cmake/check-versions.sh
index c3d426fe..9bee924a 100755
--- a/contrib/windows-cmake/check-versions.sh
+++ b/contrib/windows-cmake/check-versions.sh
@@ -1,6 +1,6 @@
 #!/bin/bash
 #
-# Copyright © 2018-2021 Inria.  All rights reserved.
+# Copyright © 2018-2023 Inria.  All rights reserved.
 # $COPYRIGHT$
 #
 
@@ -10,7 +10,7 @@ function die() {
 }
 
 if test "x$1" = "x-h" -o "x$1" = "x--help"; then
-  echo "$0 [--quiet] [git root directory]"
+  echo "$0 [--quiet] [--update] [git root directory]"
   exit 0
 fi
 
diff --git a/contrib/windows/check-versions.sh b/contrib/windows/check-versions.sh
index 2fdacfc0..32105ab9 100755
--- a/contrib/windows/check-versions.sh
+++ b/contrib/windows/check-versions.sh
@@ -1,6 +1,6 @@
 #!/bin/bash
 #
-# Copyright © 2018-2021 Inria.  All rights reserved.
+# Copyright © 2018-2023 Inria.  All rights reserved.
 # $COPYRIGHT$
 #
 
@@ -10,7 +10,7 @@ function die() {
 }
 
 if test "x$1" = "x-h" -o "x$1" = "x--help"; then
-  echo "$0 [--quiet] [git root directory]"
+  echo "$0 [--quiet] [--update] [git root directory]"
   exit 0
 fi
 
diff --git a/contrib/windows/hwloc_config.h b/contrib/windows/hwloc_config.h
index 904a7b72..8fc39468 100644
--- a/contrib/windows/hwloc_config.h
+++ b/contrib/windows/hwloc_config.h
@@ -11,11 +11,11 @@
 #ifndef HWLOC_CONFIG_H
 #define HWLOC_CONFIG_H
 
-#define HWLOC_VERSION "2.9.0rc2"
+#define HWLOC_VERSION "2.9.1"
 #define HWLOC_VERSION_MAJOR 2
 #define HWLOC_VERSION_MINOR 9
-#define HWLOC_VERSION_RELEASE 0
-#define HWLOC_VERSION_GREEK "rc2"
+#define HWLOC_VERSION_RELEASE 1
+#define HWLOC_VERSION_GREEK ""
 
 #define __hwloc_restrict
 #define __hwloc_inline __inline
diff --git a/debian/changelog b/debian/changelog
index a7925386..3bd4e572 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,8 +1,12 @@
-hwloc (2.9.0-2) UNRELEASED; urgency=medium
+hwloc (2.9.1-1) UNRELEASED; urgency=medium
 
+  [ Samuel Thibault ]
   * control: Generalize pattern to support hurd-amd64.
 
- -- Samuel Thibault <sthibault@debian.org>  Sat, 06 May 2023 17:52:46 +0200
+  [ Debian Janitor ]
+  * New upstream release.
+
+ -- Samuel Thibault <sthibault@debian.org>  Sat, 13 May 2023 00:45:09 -0000
 
 hwloc (2.9.0-1) unstable; urgency=medium
 
diff --git a/debian/patches/doc-nopdf b/debian/patches/doc-nopdf
index b5d90277..bc78db80 100644
--- a/debian/patches/doc-nopdf
+++ b/debian/patches/doc-nopdf
@@ -2,9 +2,11 @@
  doc/Makefile.am |    6 +++---
  1 file changed, 3 insertions(+), 3 deletions(-)
 
---- a/doc/Makefile.am
-+++ b/doc/Makefile.am
-@@ -184,7 +184,7 @@ $(DOX_LETTERPDF): $(DOX_TAG)
+Index: hwloc.git/doc/Makefile.am
+===================================================================
+--- hwloc.git.orig/doc/Makefile.am
++++ hwloc.git/doc/Makefile.am
+@@ -198,7 +198,7 @@ $(DOX_LETTERPDF): $(DOX_TAG)
  	done; \
  	mv letter-refman.pdf $(DOCDIR)/$(DOX_LETTERPDF)
  
@@ -13,7 +15,7 @@
  
  else !HWLOC_BUILD_DOXYGEN
  
-@@ -219,7 +219,7 @@ if HWLOC_INSTALL_DOXYGEN
+@@ -233,7 +233,7 @@ if HWLOC_INSTALL_DOXYGEN
  # standalone mode).
  #
  
diff --git a/doc/doxygen-doc/html/a00125_source.html b/doc/doxygen-doc/html/a00125_source.html
new file mode 100644
index 00000000..8c184359
--- /dev/null
+++ b/doc/doxygen-doc/html/a00125_source.html
@@ -0,0 +1,947 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">hwloc.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright © 2009 CNRS</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * Copyright © 2009-2022 Inria.  All rights reserved.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Copyright © 2009-2012 Université Bordeaux</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * Copyright © 2009-2020 Cisco Systems, Inc.  All rights reserved.</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160; </div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">/*=====================================================================</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> *                 PLEASE GO READ THE DOCUMENTATION!</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> *         ------------------------------------------------</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> *               $tarball_directory/doc/doxygen-doc/</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> *                                or</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> *           https://www.open-mpi.org/projects/hwloc/doc/</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> *=====================================================================</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="comment"> * FAIR WARNING: Do NOT expect to be able to figure out all the</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment"> * subtleties of hwloc by simply reading function prototypes and</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment"> * constant descrptions here in this file.</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="comment"> * Hwloc has wonderful documentation in both PDF and HTML formats for</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="comment"> * your reading pleasure.  The formal documentation explains a LOT of</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="comment"> * hwloc-specific concepts, provides definitions, and discusses the</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="comment"> * &quot;big picture&quot; for many of the things that you&#39;ll find here in this</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="comment"> * header file.</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="comment"> * The PDF/HTML documentation was generated via Doxygen; much of what</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="comment"> * you&#39;ll see in there is also here in this file.  BUT THERE IS A LOT</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="comment"> * THAT IS IN THE PDF/HTML THAT IS ***NOT*** IN hwloc.h!</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment"> * There are entire paragraph-length descriptions, discussions, and</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment"> * pretty pictures to explain subtle corner cases, provide concrete</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment"> * examples, etc.</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="comment"> * Please, go read the documentation.  :-)</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="comment"> * Moreover there are several examples of hwloc use under doc/examples</span></div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="comment"> * in the source tree.</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="comment"> *=====================================================================*/</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160; </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="preprocessor">#ifndef HWLOC_H</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="preprocessor">#define HWLOC_H</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160; </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="preprocessor">#include &quot;hwloc/autogen/config.h&quot;</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160; </div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="preprocessor">#include &lt;sys/types.h&gt;</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="preprocessor">#include &lt;stdio.h&gt;</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="preprocessor">#include &lt;limits.h&gt;</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160; </div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="comment"> * Symbol transforms</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="preprocessor">#include &quot;hwloc/rename.h&quot;</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160; </div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;<span class="comment"> * Bitmap definitions</span></div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160; </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;<span class="preprocessor">#include &quot;hwloc/bitmap.h&quot;</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160; </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160; </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160; </div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160; </div>
+<div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="a00194.html#ga8f4dfb8eef138af55dd1a0fa802e5476">   96</a></span>&#160;<span class="preprocessor">#define HWLOC_API_VERSION 0x00020800</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160; </div>
+<div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="a00194.html#ga9c0b50c98add1adf57ed1ce85bb5190d">  102</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">unsigned</span> <a class="code" href="a00194.html#ga9c0b50c98add1adf57ed1ce85bb5190d">hwloc_get_api_version</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160; </div>
+<div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="a00194.html#gaac5bc1f46f55e10ef0141a68ce70e21f">  105</a></span>&#160;<span class="preprocessor">#define HWLOC_COMPONENT_ABI 7</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160; </div>
+<div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">  140</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> <a class="code" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">  142</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160; </div>
+<div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="a00195.html#ga37e35730fa7e775b5bb0afe893d6d508">  157</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> <a class="code" href="a00195.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a>;</div>
+<div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="a00195.html#ga2f5276235841ad66a79bedad16a5a10c">  160</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> <a class="code" href="a00195.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a>;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160; </div>
+<div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">  176</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160; </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;<span class="preprocessor">#define HWLOC_OBJ_TYPE_MIN HWLOC_OBJ_MACHINE </span><span class="comment">/* Sentinel value */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;  <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a3f4e83ffc4a259354959ae8a9eaa2a80">HWLOC_OBJ_MACHINE</a>,    </div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;  <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55ab16ab8c0dbffc234921d86f3dfb63129">HWLOC_OBJ_PACKAGE</a>,    </div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;  <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55ac793958f330bca371aa1535de8aff45f">HWLOC_OBJ_CORE</a>,       </div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;  <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661">HWLOC_OBJ_PU</a>,         </div>
+<div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a56389b8eb2e2f74f288bb657c4e72140">  213</a></span>&#160;  <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a56389b8eb2e2f74f288bb657c4e72140">HWLOC_OBJ_L1CACHE</a>,    </div>
+<div class="line"><a name="l00214"></a><span class="lineno"><a class="line" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a18f61d19fe9f4bcea978fcc68bc078fb">  214</a></span>&#160;  <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a18f61d19fe9f4bcea978fcc68bc078fb">HWLOC_OBJ_L2CACHE</a>,    </div>
+<div class="line"><a name="l00215"></a><span class="lineno"><a class="line" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a25fae0e0514c90e3973a29866a5a837d">  215</a></span>&#160;  <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a25fae0e0514c90e3973a29866a5a837d">HWLOC_OBJ_L3CACHE</a>,    </div>
+<div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a54923bfa13df9d7e6d6dd0d5baff5f72">  216</a></span>&#160;  <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a54923bfa13df9d7e6d6dd0d5baff5f72">HWLOC_OBJ_L4CACHE</a>,    </div>
+<div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a67194c9de5e3e581c64c11d2eb1c109d">  217</a></span>&#160;  <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a67194c9de5e3e581c64c11d2eb1c109d">HWLOC_OBJ_L5CACHE</a>,    </div>
+<div class="line"><a name="l00219"></a><span class="lineno"><a class="line" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55afa834a85d9e53836cf0db6d0bd8329b4">  219</a></span>&#160;  <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55afa834a85d9e53836cf0db6d0bd8329b4">HWLOC_OBJ_L1ICACHE</a>,   </div>
+<div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a10713b7e561b8cc32544cd31b1c17f8d">  220</a></span>&#160;  <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a10713b7e561b8cc32544cd31b1c17f8d">HWLOC_OBJ_L2ICACHE</a>,   </div>
+<div class="line"><a name="l00221"></a><span class="lineno"><a class="line" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55ac22850c717f07bf7ffb316fadd08d218">  221</a></span>&#160;  <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55ac22850c717f07bf7ffb316fadd08d218">HWLOC_OBJ_L3ICACHE</a>,   </div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;  <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56">HWLOC_OBJ_GROUP</a>,      </div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;  <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>,   </div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;  <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0">HWLOC_OBJ_BRIDGE</a>,     </div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;  <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a>, </div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;  <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075">HWLOC_OBJ_OS_DEVICE</a>,  </div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;  <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d">HWLOC_OBJ_MISC</a>,       </div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;  <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a0ed5bd98974729a0c476c39e917dabd6">HWLOC_OBJ_MEMCACHE</a>,   </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;  <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55af78bb6cde53aaaaa162a7dc420c409da">HWLOC_OBJ_DIE</a>,        </div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;  HWLOC_OBJ_TYPE_MAX    </div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;} <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>;</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160; </div>
+<div class="line"><a name="l00326"></a><span class="lineno"><a class="line" href="a00196.html#ga791c9875c8fe20f3e1e5871e0657e59b">  326</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="a00196.html#ga791c9875c8fe20f3e1e5871e0657e59b">hwloc_obj_cache_type_e</a> {</div>
+<div class="line"><a name="l00327"></a><span class="lineno"><a class="line" href="a00196.html#gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a">  327</a></span>&#160;  <a class="code" href="a00196.html#gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a">HWLOC_OBJ_CACHE_UNIFIED</a>,      </div>
+<div class="line"><a name="l00328"></a><span class="lineno"><a class="line" href="a00196.html#gga791c9875c8fe20f3e1e5871e0657e59bacac60ecad4206f85aeb79bef1604b488">  328</a></span>&#160;  <a class="code" href="a00196.html#gga791c9875c8fe20f3e1e5871e0657e59bacac60ecad4206f85aeb79bef1604b488">HWLOC_OBJ_CACHE_DATA</a>,         </div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;  <a class="code" href="a00196.html#gga791c9875c8fe20f3e1e5871e0657e59ba6f98b0d422b38ba90c5f5c79a11b0658">HWLOC_OBJ_CACHE_INSTRUCTION</a>   </div>
+<div class="line"><a name="l00330"></a><span class="lineno"><a class="line" href="a00196.html#gga791c9875c8fe20f3e1e5871e0657e59ba6f98b0d422b38ba90c5f5c79a11b0658">  330</a></span>&#160;} <a class="code" href="a00196.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a>;</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160; </div>
+<div class="line"><a name="l00333"></a><span class="lineno"><a class="line" href="a00196.html#ga48a4803c72574191d7ead1c62aaf9860">  333</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="a00196.html#ga48a4803c72574191d7ead1c62aaf9860">hwloc_obj_bridge_type_e</a> {</div>
+<div class="line"><a name="l00334"></a><span class="lineno"><a class="line" href="a00196.html#gga48a4803c72574191d7ead1c62aaf9860a2c7660f3864ad2810c1e72aad285e574">  334</a></span>&#160;  <a class="code" href="a00196.html#gga48a4803c72574191d7ead1c62aaf9860a2c7660f3864ad2810c1e72aad285e574">HWLOC_OBJ_BRIDGE_HOST</a>,        </div>
+<div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;  <a class="code" href="a00196.html#gga48a4803c72574191d7ead1c62aaf9860a8f3b4cecf3dab6073d74696d10863c60">HWLOC_OBJ_BRIDGE_PCI</a>          </div>
+<div class="line"><a name="l00336"></a><span class="lineno"><a class="line" href="a00196.html#gga48a4803c72574191d7ead1c62aaf9860a8f3b4cecf3dab6073d74696d10863c60">  336</a></span>&#160;} <a class="code" href="a00196.html#gab34362c7a23296c3f12c5756747abda3">hwloc_obj_bridge_type_t</a>;</div>
+<div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160; </div>
+<div class="line"><a name="l00339"></a><span class="lineno"><a class="line" href="a00196.html#ga64f5d539df299c97ae80ce53fc4b56c0">  339</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="a00196.html#ga64f5d539df299c97ae80ce53fc4b56c0">hwloc_obj_osdev_type_e</a> {</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;  <a class="code" href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0a689b0488c3c0d08d116751c6b9cb8871">HWLOC_OBJ_OSDEV_BLOCK</a>,        </div>
+<div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;  <a class="code" href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a>,          </div>
+<div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;  <a class="code" href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0ab715d81155f771573c8682dffc65021b">HWLOC_OBJ_OSDEV_NETWORK</a>,      </div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;  <a class="code" href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0a52157d03694fdae82dddd57ca8c973b6">HWLOC_OBJ_OSDEV_OPENFABRICS</a>,  </div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;  <a class="code" href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0a827ad1643360711a8b6c6af671366791">HWLOC_OBJ_OSDEV_DMA</a>,          </div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;  <a class="code" href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83">HWLOC_OBJ_OSDEV_COPROC</a>        </div>
+<div class="line"><a name="l00356"></a><span class="lineno"><a class="line" href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83">  356</a></span>&#160;} <a class="code" href="a00196.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a>;</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160; </div>
+<div class="line"><a name="l00377"></a><span class="lineno"><a class="line" href="a00196.html#ga1820ea0dfd8e9dca28f9ea7624df5ae2">  377</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00196.html#ga1820ea0dfd8e9dca28f9ea7624df5ae2">hwloc_compare_types</a> (<a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type1, <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type2) __hwloc_attribute_const;</div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160; </div>
+<div class="line"><a name="l00380"></a><span class="lineno"><a class="line" href="a00196.html#ga3b6e4128e9fe773863b123fa6e4a080b">  380</a></span>&#160;<span class="preprocessor">#define HWLOC_TYPE_UNORDERED INT_MAX</span></div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160; </div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;<span class="keyword">union </span><a class="code" href="a00257.html">hwloc_obj_attr_u</a>;</div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160; </div>
+<div class="line"><a name="l00396"></a><span class="lineno"><a class="line" href="a00253.html">  396</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00253.html">hwloc_obj</a> {</div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;  <span class="comment">/* physical information */</span></div>
+<div class="line"><a name="l00398"></a><span class="lineno"><a class="line" href="a00253.html#acc4f0803f244867e68fe0036800be5de">  398</a></span>&#160;  <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a>;                </div>
+<div class="line"><a name="l00399"></a><span class="lineno"><a class="line" href="a00253.html#a5d4f97e76723a9ec8d38046f19e00d33">  399</a></span>&#160;  <span class="keywordtype">char</span> *<a class="code" href="a00253.html#a5d4f97e76723a9ec8d38046f19e00d33">subtype</a>;                        </div>
+<div class="line"><a name="l00401"></a><span class="lineno"><a class="line" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">  401</a></span>&#160;  <span class="keywordtype">unsigned</span> <a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>;                    </div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;<span class="preprocessor">#define HWLOC_UNKNOWN_INDEX (unsigned)-1</span></div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160; </div>
+<div class="line"><a name="l00408"></a><span class="lineno"><a class="line" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">  408</a></span>&#160;  <span class="keywordtype">char</span> *<a class="code" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">name</a>;                           </div>
+<div class="line"><a name="l00413"></a><span class="lineno"><a class="line" href="a00253.html#a75603fc36c9284ba48ce814b772a58b6">  413</a></span>&#160;  hwloc_uint64_t <a class="code" href="a00253.html#a75603fc36c9284ba48ce814b772a58b6">total_memory</a>; </div>
+<div class="line"><a name="l00415"></a><span class="lineno"><a class="line" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">  415</a></span>&#160;  <span class="keyword">union </span><a class="code" href="a00257.html">hwloc_obj_attr_u</a> *<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>;         </div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;  <span class="comment">/* global position */</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno"><a class="line" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">  419</a></span>&#160;  <span class="keywordtype">int</span> <a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>;                            </div>
+<div class="line"><a name="l00434"></a><span class="lineno"><a class="line" href="a00253.html#a0d07fb7b8935e137c94d75a3eb492ae9">  434</a></span>&#160;  <span class="keywordtype">unsigned</span> <a class="code" href="a00253.html#a0d07fb7b8935e137c94d75a3eb492ae9">logical_index</a>;               </div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;  <span class="comment">/* cousins are all objects of the same type (and depth) across the entire topology */</span></div>
+<div class="line"><a name="l00442"></a><span class="lineno"><a class="line" href="a00253.html#a85a788017457129589318b6c39451acf">  442</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="a00253.html">hwloc_obj</a> *<a class="code" href="a00253.html#a85a788017457129589318b6c39451acf">next_cousin</a>;        </div>
+<div class="line"><a name="l00443"></a><span class="lineno"><a class="line" href="a00253.html#ac715989f55ff5a0eb6be2969ee477ec0">  443</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="a00253.html">hwloc_obj</a> *<a class="code" href="a00253.html#ac715989f55ff5a0eb6be2969ee477ec0">prev_cousin</a>;        </div>
+<div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;  <span class="comment">/* children of the same parent are siblings, even if they may have different type and depth */</span></div>
+<div class="line"><a name="l00446"></a><span class="lineno"><a class="line" href="a00253.html#adc494f6aed939992be1c55cca5822900">  446</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="a00253.html">hwloc_obj</a> *<a class="code" href="a00253.html#adc494f6aed939992be1c55cca5822900">parent</a>;             </div>
+<div class="line"><a name="l00447"></a><span class="lineno"><a class="line" href="a00253.html#aaa6043eee6f55869933c1d974efd9acd">  447</a></span>&#160;  <span class="keywordtype">unsigned</span> <a class="code" href="a00253.html#aaa6043eee6f55869933c1d974efd9acd">sibling_rank</a>;                </div>
+<div class="line"><a name="l00448"></a><span class="lineno"><a class="line" href="a00253.html#a7f2343ed476fe4942e6fffd4cade1b40">  448</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="a00253.html">hwloc_obj</a> *<a class="code" href="a00253.html#a7f2343ed476fe4942e6fffd4cade1b40">next_sibling</a>;       </div>
+<div class="line"><a name="l00449"></a><span class="lineno"><a class="line" href="a00253.html#a7b89e8c189876c0158a9282aaaf17f50">  449</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="a00253.html">hwloc_obj</a> *<a class="code" href="a00253.html#a7b89e8c189876c0158a9282aaaf17f50">prev_sibling</a>;       </div>
+<div class="line"><a name="l00452"></a><span class="lineno"><a class="line" href="a00253.html#aac3f6da35c9b57599909a44ce2b716c1">  452</a></span>&#160;  <span class="keywordtype">unsigned</span> <a class="code" href="a00253.html#aac3f6da35c9b57599909a44ce2b716c1">arity</a>;                       </div>
+<div class="line"><a name="l00456"></a><span class="lineno"><a class="line" href="a00253.html#a04d05403da37bfe17cd63b7c7dd07b1f">  456</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="a00253.html">hwloc_obj</a> **<a class="code" href="a00253.html#a04d05403da37bfe17cd63b7c7dd07b1f">children</a>;          </div>
+<div class="line"><a name="l00457"></a><span class="lineno"><a class="line" href="a00253.html#af51d08a0a79dba517c06c5afedc8d2dc">  457</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="a00253.html">hwloc_obj</a> *<a class="code" href="a00253.html#af51d08a0a79dba517c06c5afedc8d2dc">first_child</a>;        </div>
+<div class="line"><a name="l00458"></a><span class="lineno"><a class="line" href="a00253.html#a84bd65634dbc55f4158b74443a9bd04f">  458</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="a00253.html">hwloc_obj</a> *<a class="code" href="a00253.html#a84bd65634dbc55f4158b74443a9bd04f">last_child</a>;         </div>
+<div class="line"><a name="l00461"></a><span class="lineno"><a class="line" href="a00253.html#a0f41a1d67dc6b661906f2217563637f3">  461</a></span>&#160;  <span class="keywordtype">int</span> <a class="code" href="a00253.html#a0f41a1d67dc6b661906f2217563637f3">symmetric_subtree</a>;                </div>
+<div class="line"><a name="l00472"></a><span class="lineno"><a class="line" href="a00253.html#a6f834ea4dd26553cdea601d2fae6d3b7">  472</a></span>&#160;  <span class="keywordtype">unsigned</span> <a class="code" href="a00253.html#a6f834ea4dd26553cdea601d2fae6d3b7">memory_arity</a>;                </div>
+<div class="line"><a name="l00475"></a><span class="lineno"><a class="line" href="a00253.html#ac0e8200dba25b90d5954bd4ec61f97d3">  475</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="a00253.html">hwloc_obj</a> *<a class="code" href="a00253.html#ac0e8200dba25b90d5954bd4ec61f97d3">memory_first_child</a>; </div>
+<div class="line"><a name="l00490"></a><span class="lineno"><a class="line" href="a00253.html#a7b3b29f0be377c7d2d52262019fc7d11">  490</a></span>&#160;  <span class="keywordtype">unsigned</span> <a class="code" href="a00253.html#a7b3b29f0be377c7d2d52262019fc7d11">io_arity</a>;                    </div>
+<div class="line"><a name="l00493"></a><span class="lineno"><a class="line" href="a00253.html#a8d14c88e1ebc4ae67cc69f9e928558b3">  493</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="a00253.html">hwloc_obj</a> *<a class="code" href="a00253.html#a8d14c88e1ebc4ae67cc69f9e928558b3">io_first_child</a>;     </div>
+<div class="line"><a name="l00502"></a><span class="lineno"><a class="line" href="a00253.html#a2bb7862ce722d7ceda23cfa153da165a">  502</a></span>&#160;  <span class="keywordtype">unsigned</span> <a class="code" href="a00253.html#a2bb7862ce722d7ceda23cfa153da165a">misc_arity</a>;                  </div>
+<div class="line"><a name="l00505"></a><span class="lineno"><a class="line" href="a00253.html#a57812a313fe9b1a9500489f47c3011cc">  505</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="a00253.html">hwloc_obj</a> *<a class="code" href="a00253.html#a57812a313fe9b1a9500489f47c3011cc">misc_first_child</a>;   </div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;  <span class="comment">/* cpusets and nodesets */</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno"><a class="line" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">  512</a></span>&#160;  <a class="code" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> <a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>;                </div>
+<div class="line"><a name="l00527"></a><span class="lineno"><a class="line" href="a00253.html#a91788a9da687beb7224cc1fd7b75208c">  527</a></span>&#160;  <a class="code" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> <a class="code" href="a00253.html#a91788a9da687beb7224cc1fd7b75208c">complete_cpuset</a>;       </div>
+<div class="line"><a name="l00540"></a><span class="lineno"><a class="line" href="a00253.html#a08f0d0e16c619a6e653526cbee4ffea3">  540</a></span>&#160;  <a class="code" href="a00195.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a> <a class="code" href="a00253.html#a08f0d0e16c619a6e653526cbee4ffea3">nodeset</a>;              </div>
+<div class="line"><a name="l00562"></a><span class="lineno"><a class="line" href="a00253.html#ac38c4012127525ef74c5615c526f4c2e">  562</a></span>&#160;  <a class="code" href="a00195.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a> <a class="code" href="a00253.html#ac38c4012127525ef74c5615c526f4c2e">complete_nodeset</a>;     </div>
+<div class="line"><a name="l00578"></a><span class="lineno"><a class="line" href="a00253.html#a8604654c38b7a720efae5025d3a96ee6">  578</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="a00301.html">hwloc_info_s</a> *<a class="code" href="a00253.html#a8604654c38b7a720efae5025d3a96ee6">infos</a>;           </div>
+<div class="line"><a name="l00579"></a><span class="lineno"><a class="line" href="a00253.html#a9843acc28cfbba903b63ea14b137ff70">  579</a></span>&#160;  <span class="keywordtype">unsigned</span> <a class="code" href="a00253.html#a9843acc28cfbba903b63ea14b137ff70">infos_count</a>;                 </div>
+<div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;  <span class="comment">/* misc */</span></div>
+<div class="line"><a name="l00582"></a><span class="lineno"><a class="line" href="a00253.html#a76fd3ac94401cf32dfccc3a3a8de68a5">  582</a></span>&#160;  <span class="keywordtype">void</span> *<a class="code" href="a00253.html#a76fd3ac94401cf32dfccc3a3a8de68a5">userdata</a>;                       </div>
+<div class="line"><a name="l00587"></a><span class="lineno"><a class="line" href="a00253.html#a957984a355fa61c85f46605c336e7551">  587</a></span>&#160;  hwloc_uint64_t <a class="code" href="a00253.html#a957984a355fa61c85f46605c336e7551">gp_index</a>;                      </div>
+<div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;};</div>
+<div class="line"><a name="l00596"></a><span class="lineno"><a class="line" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">  596</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="a00253.html">hwloc_obj</a> * <a class="code" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>;</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160; </div>
+<div class="line"><a name="l00599"></a><span class="lineno"><a class="line" href="a00257.html">  599</a></span>&#160;<span class="keyword">union </span><a class="code" href="a00257.html">hwloc_obj_attr_u</a> {</div>
+<div class="line"><a name="l00601"></a><span class="lineno"><a class="line" href="a00261.html">  601</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="a00261.html">hwloc_numanode_attr_s</a> {</div>
+<div class="line"><a name="l00602"></a><span class="lineno"><a class="line" href="a00261.html#a6703cbf2afbf63c9d60c5ff4dc0c73aa">  602</a></span>&#160;    hwloc_uint64_t <a class="code" href="a00261.html#a6703cbf2afbf63c9d60c5ff4dc0c73aa">local_memory</a>; </div>
+<div class="line"><a name="l00603"></a><span class="lineno"><a class="line" href="a00261.html#a513078122d403904e16723d30f583cb2">  603</a></span>&#160;    <span class="keywordtype">unsigned</span> <a class="code" href="a00261.html#a513078122d403904e16723d30f583cb2">page_types_len</a>; </div>
+<div class="line"><a name="l00609"></a><span class="lineno"><a class="line" href="a00265.html">  609</a></span>&#160;    <span class="keyword">struct </span><a class="code" href="a00265.html">hwloc_memory_page_type_s</a> {</div>
+<div class="line"><a name="l00610"></a><span class="lineno"><a class="line" href="a00265.html#a8ea7ebe9d91c7378bba03da57efc25cb">  610</a></span>&#160;      hwloc_uint64_t <a class="code" href="a00265.html#a8ea7ebe9d91c7378bba03da57efc25cb">size</a>;      </div>
+<div class="line"><a name="l00611"></a><span class="lineno"><a class="line" href="a00265.html#a98514e37d57a325b78e21ffd8d7419e0">  611</a></span>&#160;      hwloc_uint64_t <a class="code" href="a00265.html#a98514e37d57a325b78e21ffd8d7419e0">count</a>;     </div>
+<div class="line"><a name="l00612"></a><span class="lineno"><a class="line" href="a00261.html#a7e53c5024da2d7741a5cc1e7016bb8d2">  612</a></span>&#160;    } * <a class="code" href="a00261.html#a7e53c5024da2d7741a5cc1e7016bb8d2">page_types</a>;</div>
+<div class="line"><a name="l00613"></a><span class="lineno"><a class="line" href="a00257.html#ad066b9612802ffa01e132dc3a8e6cc86">  613</a></span>&#160;  } <a class="code" href="a00257.html#ad066b9612802ffa01e132dc3a8e6cc86">numanode</a>;</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160; </div>
+<div class="line"><a name="l00616"></a><span class="lineno"><a class="line" href="a00269.html">  616</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="a00269.html">hwloc_cache_attr_s</a> {</div>
+<div class="line"><a name="l00617"></a><span class="lineno"><a class="line" href="a00269.html#abe5e788943ed04302976740c829674c0">  617</a></span>&#160;    hwloc_uint64_t <a class="code" href="a00269.html#abe5e788943ed04302976740c829674c0">size</a>;                  </div>
+<div class="line"><a name="l00618"></a><span class="lineno"><a class="line" href="a00269.html#a5c8f7f39193736c2187ed626940835d5">  618</a></span>&#160;    <span class="keywordtype">unsigned</span> <a class="code" href="a00269.html#a5c8f7f39193736c2187ed626940835d5">depth</a>;                       </div>
+<div class="line"><a name="l00619"></a><span class="lineno"><a class="line" href="a00269.html#a801e8a668e28caf06c8b88e9ae5c10db">  619</a></span>&#160;    <span class="keywordtype">unsigned</span> <a class="code" href="a00269.html#a801e8a668e28caf06c8b88e9ae5c10db">linesize</a>;                    </div>
+<div class="line"><a name="l00620"></a><span class="lineno"><a class="line" href="a00269.html#ad06525e474d1e2d1423ed71bb998592d">  620</a></span>&#160;    <span class="keywordtype">int</span> <a class="code" href="a00269.html#ad06525e474d1e2d1423ed71bb998592d">associativity</a>;                    </div>
+<div class="line"><a name="l00622"></a><span class="lineno"><a class="line" href="a00269.html#ad8edc8ded2b7a70d6abbc874801930f4">  622</a></span>&#160;    <a class="code" href="a00196.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a> <a class="code" href="a00269.html#ad8edc8ded2b7a70d6abbc874801930f4">type</a>;          </div>
+<div class="line"><a name="l00623"></a><span class="lineno"><a class="line" href="a00257.html#a23f553f3252c9d13f2338231cd354ea9">  623</a></span>&#160;  } <a class="code" href="a00257.html#a23f553f3252c9d13f2338231cd354ea9">cache</a>;</div>
+<div class="line"><a name="l00625"></a><span class="lineno"><a class="line" href="a00273.html">  625</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="a00273.html">hwloc_group_attr_s</a> {</div>
+<div class="line"><a name="l00626"></a><span class="lineno"><a class="line" href="a00273.html#ad914eac61c77481e1b7037877bcc5579">  626</a></span>&#160;    <span class="keywordtype">unsigned</span> <a class="code" href="a00273.html#ad914eac61c77481e1b7037877bcc5579">depth</a>;                       </div>
+<div class="line"><a name="l00628"></a><span class="lineno"><a class="line" href="a00273.html#a3229f269c4cc7e63492c168535e4f0c1">  628</a></span>&#160;    <span class="keywordtype">unsigned</span> <a class="code" href="a00273.html#a3229f269c4cc7e63492c168535e4f0c1">kind</a>;                        </div>
+<div class="line"><a name="l00629"></a><span class="lineno"><a class="line" href="a00273.html#ad514d943960a4036ed5e44dc187c74ed">  629</a></span>&#160;    <span class="keywordtype">unsigned</span> <a class="code" href="a00273.html#ad514d943960a4036ed5e44dc187c74ed">subkind</a>;                     </div>
+<div class="line"><a name="l00630"></a><span class="lineno"><a class="line" href="a00273.html#afa253d4b70f92e940c226d61f192054f">  630</a></span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00273.html#afa253d4b70f92e940c226d61f192054f">dont_merge</a>;             </div>
+<div class="line"><a name="l00631"></a><span class="lineno"><a class="line" href="a00257.html#a9eddbd69e34cd2ef6af6d2ac31b6eff3">  631</a></span>&#160;  } <a class="code" href="a00257.html#a9eddbd69e34cd2ef6af6d2ac31b6eff3">group</a>;</div>
+<div class="line"><a name="l00633"></a><span class="lineno"><a class="line" href="a00277.html">  633</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="a00277.html">hwloc_pcidev_attr_s</a> {</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;<span class="preprocessor">#ifndef HWLOC_HAVE_32BITS_PCI_DOMAIN</span></div>
+<div class="line"><a name="l00635"></a><span class="lineno"><a class="line" href="a00277.html#a8fba44988deb98613c1505a4019a34dc">  635</a></span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="a00277.html#a8fba44988deb98613c1505a4019a34dc">domain</a>; <span class="comment">/* Only 16bits PCI domains are supported by default */</span></div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="a00277.html#a8fba44988deb98613c1505a4019a34dc">domain</a>; <span class="comment">/* 32bits PCI domain support break the library ABI, hence it&#39;s disabled by default */</span></div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00639"></a><span class="lineno"><a class="line" href="a00277.html#aae99e035e8d1387d7b8768aaa8eceb0a">  639</a></span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00277.html#aae99e035e8d1387d7b8768aaa8eceb0a">bus</a>, <a class="code" href="a00277.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">dev</a>, <a class="code" href="a00277.html#a695f32df53f4ef728670bfcf31b74e0f">func</a>;</div>
+<div class="line"><a name="l00640"></a><span class="lineno"><a class="line" href="a00277.html#aee735352d9f1686fd290fc6d6397c334">  640</a></span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="a00277.html#aee735352d9f1686fd290fc6d6397c334">class_id</a>;</div>
+<div class="line"><a name="l00641"></a><span class="lineno"><a class="line" href="a00277.html#a35b66064ab7d768caf7154e410caf0fa">  641</a></span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="a00277.html#aad970ad19b62eb2d5df30e4802da4f4c">vendor_id</a>, <a class="code" href="a00277.html#a35b66064ab7d768caf7154e410caf0fa">device_id</a>, <a class="code" href="a00277.html#a499db3d8cc89eaba04fcaef3df1cba97">subvendor_id</a>, <a class="code" href="a00277.html#acac741aecd7a6db64f33409427e3971f">subdevice_id</a>;</div>
+<div class="line"><a name="l00642"></a><span class="lineno"><a class="line" href="a00277.html#a13ad54c93d08d8ac808e4de9674c5ee7">  642</a></span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00277.html#a13ad54c93d08d8ac808e4de9674c5ee7">revision</a>;</div>
+<div class="line"><a name="l00643"></a><span class="lineno"><a class="line" href="a00277.html#a59b2fce35f7cbde86c4fd305d0ccda5f">  643</a></span>&#160;    <span class="keywordtype">float</span> <a class="code" href="a00277.html#a59b2fce35f7cbde86c4fd305d0ccda5f">linkspeed</a>; <span class="comment">/* in GB/s */</span></div>
+<div class="line"><a name="l00644"></a><span class="lineno"><a class="line" href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">  644</a></span>&#160;  } <a class="code" href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>;</div>
+<div class="line"><a name="l00646"></a><span class="lineno"><a class="line" href="a00281.html">  646</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="a00281.html">hwloc_bridge_attr_s</a> {</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;    <span class="keyword">union </span>{</div>
+<div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;      <span class="keyword">struct </span><a class="code" href="a00277.html">hwloc_pcidev_attr_s</a> <a class="code" href="a00281.html#ab5c564e7c95b747dae9eb84ec0a2c31e">pci</a>;</div>
+<div class="line"><a name="l00649"></a><span class="lineno"><a class="line" href="a00281.html#ab62888c880f8bb730292722f5811958d">  649</a></span>&#160;    } <a class="code" href="a00281.html#ab62888c880f8bb730292722f5811958d">upstream</a>;</div>
+<div class="line"><a name="l00650"></a><span class="lineno"><a class="line" href="a00281.html#a265dd2164aa2df4972e25a029da72125">  650</a></span>&#160;    <a class="code" href="a00196.html#gab34362c7a23296c3f12c5756747abda3">hwloc_obj_bridge_type_t</a> <a class="code" href="a00281.html#a265dd2164aa2df4972e25a029da72125">upstream_type</a>;</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;    <span class="keyword">union </span>{</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;      <span class="keyword">struct </span>{</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;<span class="preprocessor">#ifndef HWLOC_HAVE_32BITS_PCI_DOMAIN</span></div>
+<div class="line"><a name="l00654"></a><span class="lineno"><a class="line" href="a00281.html#a2c31e565a5f0d23d0a0a3dd3ec8f4b17">  654</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="a00281.html#a2c31e565a5f0d23d0a0a3dd3ec8f4b17">domain</a>; <span class="comment">/* Only 16bits PCI domains are supported by default */</span></div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="a00281.html#a2c31e565a5f0d23d0a0a3dd3ec8f4b17">domain</a>; <span class="comment">/* 32bits PCI domain support break the library ABI, hence it&#39;s disabled by default */</span></div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00658"></a><span class="lineno"><a class="line" href="a00281.html#ae2d9dd73ef1d32045c584a8e66d2f83f">  658</a></span>&#160;        <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00281.html#ae2d9dd73ef1d32045c584a8e66d2f83f">secondary_bus</a>, <a class="code" href="a00281.html#af3f3f7d76bf03e8d2afa721c2b8d6771">subordinate_bus</a>;</div>
+<div class="line"><a name="l00659"></a><span class="lineno"><a class="line" href="a00281.html#a2fdc40034b915d504724b35cc776a4ec">  659</a></span>&#160;      } <a class="code" href="a00281.html#ab5c564e7c95b747dae9eb84ec0a2c31e">pci</a>;</div>
+<div class="line"><a name="l00660"></a><span class="lineno"><a class="line" href="a00281.html#a7d5db91d655ba23ffe9bda7a2cbcb9a8">  660</a></span>&#160;    } <a class="code" href="a00281.html#a7d5db91d655ba23ffe9bda7a2cbcb9a8">downstream</a>;</div>
+<div class="line"><a name="l00661"></a><span class="lineno"><a class="line" href="a00281.html#ac6a169b672d0e9f75756fd5665828b93">  661</a></span>&#160;    <a class="code" href="a00196.html#gab34362c7a23296c3f12c5756747abda3">hwloc_obj_bridge_type_t</a> <a class="code" href="a00281.html#ac6a169b672d0e9f75756fd5665828b93">downstream_type</a>;</div>
+<div class="line"><a name="l00662"></a><span class="lineno"><a class="line" href="a00281.html#a336c8b22893d5d734d8c9dfca4066b46">  662</a></span>&#160;    <span class="keywordtype">unsigned</span> <a class="code" href="a00281.html#a336c8b22893d5d734d8c9dfca4066b46">depth</a>;</div>
+<div class="line"><a name="l00663"></a><span class="lineno"><a class="line" href="a00257.html#a207e6359497b7116d6f4baa9e8bbeb43">  663</a></span>&#160;  } <a class="code" href="a00257.html#a207e6359497b7116d6f4baa9e8bbeb43">bridge</a>;</div>
+<div class="line"><a name="l00665"></a><span class="lineno"><a class="line" href="a00297.html">  665</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="a00297.html">hwloc_osdev_attr_s</a> {</div>
+<div class="line"><a name="l00666"></a><span class="lineno"><a class="line" href="a00297.html#a31e019e27e54ac6138d04be639bb96f9">  666</a></span>&#160;    <a class="code" href="a00196.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a> <a class="code" href="a00297.html#a31e019e27e54ac6138d04be639bb96f9">type</a>;</div>
+<div class="line"><a name="l00667"></a><span class="lineno"><a class="line" href="a00257.html#aaf7a5c38b5185703ff18c46ad2761dcf">  667</a></span>&#160;  } <a class="code" href="a00257.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>;</div>
+<div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;};</div>
+<div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160; </div>
+<div class="line"><a name="l00674"></a><span class="lineno"><a class="line" href="a00301.html">  674</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00301.html">hwloc_info_s</a> {</div>
+<div class="line"><a name="l00675"></a><span class="lineno"><a class="line" href="a00301.html#a12ce1309e4381ae38b5c15d242a47124">  675</a></span>&#160;  <span class="keywordtype">char</span> *<a class="code" href="a00301.html#a12ce1309e4381ae38b5c15d242a47124">name</a>;   </div>
+<div class="line"><a name="l00676"></a><span class="lineno"><a class="line" href="a00301.html#a788a0073bafe660645e7b69f31a43bbb">  676</a></span>&#160;  <span class="keywordtype">char</span> *<a class="code" href="a00301.html#a788a0073bafe660645e7b69f31a43bbb">value</a>;  </div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;};</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160; </div>
+<div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;<span class="keyword">struct </span>hwloc_topology;</div>
+<div class="line"><a name="l00692"></a><span class="lineno"><a class="line" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">  692</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>hwloc_topology * <a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>;</div>
+<div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160; </div>
+<div class="line"><a name="l00700"></a><span class="lineno"><a class="line" href="a00198.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa">  700</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00198.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa">hwloc_topology_init</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> *topologyp);</div>
+<div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160; </div>
+<div class="line"><a name="l00722"></a><span class="lineno"><a class="line" href="a00198.html#gabdf58d87ad77f6615fccdfe0535ff826">  722</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00198.html#gabdf58d87ad77f6615fccdfe0535ff826">hwloc_topology_load</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology);</div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160; </div>
+<div class="line"><a name="l00728"></a><span class="lineno"><a class="line" href="a00198.html#ga9f34a640b6fd28d23699d4d084667b15">  728</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00198.html#ga9f34a640b6fd28d23699d4d084667b15">hwloc_topology_destroy</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology);</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160; </div>
+<div class="line"><a name="l00740"></a><span class="lineno"><a class="line" href="a00198.html#ga62a161fc5e6f120344dc69a7bee4e587">  740</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00198.html#ga62a161fc5e6f120344dc69a7bee4e587">hwloc_topology_dup</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> *newtopology, <a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> oldtopology);</div>
+<div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160; </div>
+<div class="line"><a name="l00759"></a><span class="lineno"><a class="line" href="a00198.html#ga0647ae66458fe68172eb5a320042f870">  759</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00198.html#ga0647ae66458fe68172eb5a320042f870">hwloc_topology_abi_check</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology);</div>
+<div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160; </div>
+<div class="line"><a name="l00772"></a><span class="lineno"><a class="line" href="a00198.html#gaf6746bc3a558ef1ac8348b4491d091b5">  772</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00198.html#gaf6746bc3a558ef1ac8348b4491d091b5">hwloc_topology_check</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology);</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160; </div>
+<div class="line"><a name="l00794"></a><span class="lineno"><a class="line" href="a00199.html#gae54d1782ca9b54bea915f5c18a9158fa">  794</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00199.html#gae54d1782ca9b54bea915f5c18a9158fa">hwloc_topology_get_depth</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> __hwloc_restrict topology) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160; </div>
+<div class="line"><a name="l00819"></a><span class="lineno"><a class="line" href="a00199.html#ga8bec782e21be313750da70cf7428b374">  819</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00199.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type);</div>
+<div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160; </div>
+<div class="line"><a name="l00821"></a><span class="lineno"><a class="line" href="a00199.html#gaf4e663cf42bbe20756b849c6293ef575">  821</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00199.html#gaf4e663cf42bbe20756b849c6293ef575">hwloc_get_type_depth_e</a> {</div>
+<div class="line"><a name="l00822"></a><span class="lineno"><a class="line" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">  822</a></span>&#160;    <a class="code" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a> = -1,    </div>
+<div class="line"><a name="l00823"></a><span class="lineno"><a class="line" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">  823</a></span>&#160;    <a class="code" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a> = -2,   </div>
+<div class="line"><a name="l00824"></a><span class="lineno"><a class="line" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a245c34ec9884c2cf5de5049b2153ed9c">  824</a></span>&#160;    <a class="code" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a245c34ec9884c2cf5de5049b2153ed9c">HWLOC_TYPE_DEPTH_NUMANODE</a> = -3,   </div>
+<div class="line"><a name="l00825"></a><span class="lineno"><a class="line" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575af93b50182973e4a718d9d4db9e253a90">  825</a></span>&#160;    <a class="code" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575af93b50182973e4a718d9d4db9e253a90">HWLOC_TYPE_DEPTH_BRIDGE</a> = -4,     </div>
+<div class="line"><a name="l00826"></a><span class="lineno"><a class="line" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575ad8b1516e699b57ce1c8d107fbd2f674c">  826</a></span>&#160;    <a class="code" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575ad8b1516e699b57ce1c8d107fbd2f674c">HWLOC_TYPE_DEPTH_PCI_DEVICE</a> = -5, </div>
+<div class="line"><a name="l00827"></a><span class="lineno"><a class="line" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575afe9a2131073eebbe129d4aa2928d3f46">  827</a></span>&#160;    <a class="code" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575afe9a2131073eebbe129d4aa2928d3f46">HWLOC_TYPE_DEPTH_OS_DEVICE</a> = -6,  </div>
+<div class="line"><a name="l00828"></a><span class="lineno"><a class="line" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a96436a392b4cdcaa1a29bc65351b373f">  828</a></span>&#160;    <a class="code" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a96436a392b4cdcaa1a29bc65351b373f">HWLOC_TYPE_DEPTH_MISC</a> = -7,       </div>
+<div class="line"><a name="l00829"></a><span class="lineno">  829</span>&#160;    <a class="code" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a8b8d7d300c018c0eb65e6c9a9f162101">HWLOC_TYPE_DEPTH_MEMCACHE</a> = -8    </div>
+<div class="line"><a name="l00830"></a><span class="lineno"><a class="line" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a8b8d7d300c018c0eb65e6c9a9f162101">  830</a></span>&#160;};</div>
+<div class="line"><a name="l00831"></a><span class="lineno">  831</span>&#160; </div>
+<div class="line"><a name="l00851"></a><span class="lineno"><a class="line" href="a00199.html#gae85786340b88e24835f8c403a1e2e54b">  851</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00199.html#gae85786340b88e24835f8c403a1e2e54b">hwloc_get_memory_parents_depth</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology);</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>&#160; </div>
+<div class="line"><a name="l00866"></a><span class="lineno">  866</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00867"></a><span class="lineno"><a class="line" href="a00199.html#ga8125328e69eba709c33ea8055c12589b">  867</a></span>&#160;<a class="code" href="a00199.html#ga8125328e69eba709c33ea8055c12589b">hwloc_get_type_or_below_depth</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00868"></a><span class="lineno">  868</span>&#160; </div>
+<div class="line"><a name="l00882"></a><span class="lineno">  882</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00883"></a><span class="lineno"><a class="line" href="a00199.html#ga8a9ee573b7d2190272095d10712a7cca">  883</a></span>&#160;<a class="code" href="a00199.html#ga8a9ee573b7d2190272095d10712a7cca">hwloc_get_type_or_above_depth</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00884"></a><span class="lineno">  884</span>&#160; </div>
+<div class="line"><a name="l00892"></a><span class="lineno"><a class="line" href="a00199.html#ga506b0682b98aa264d53e934d2e9badb0">  892</a></span>&#160;HWLOC_DECLSPEC <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00199.html#ga506b0682b98aa264d53e934d2e9badb0">hwloc_get_depth_type</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">int</span> depth) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>&#160; </div>
+<div class="line"><a name="l00896"></a><span class="lineno"><a class="line" href="a00199.html#ga1d5ceafe8130fe6e8657bf0bc666ba50">  896</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">unsigned</span> <a class="code" href="a00199.html#ga1d5ceafe8130fe6e8657bf0bc666ba50">hwloc_get_nbobjs_by_depth</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">int</span> depth) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>&#160; </div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00904"></a><span class="lineno"><a class="line" href="a00199.html#ga789a3f65aedff644be64a18526a03065">  904</a></span>&#160;<a class="code" href="a00199.html#ga789a3f65aedff644be64a18526a03065">hwloc_get_nbobjs_by_type</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>&#160; </div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00911"></a><span class="lineno"><a class="line" href="a00199.html#ga2d4b12fc187dfc53b35f2fa21d21044d">  911</a></span>&#160;<a class="code" href="a00199.html#ga2d4b12fc187dfc53b35f2fa21d21044d">hwloc_get_root_obj</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>&#160; </div>
+<div class="line"><a name="l00914"></a><span class="lineno"><a class="line" href="a00199.html#ga391f6b2613f0065673eaa4069b93d4e0">  914</a></span>&#160;HWLOC_DECLSPEC <a class="code" href="a00253.html">hwloc_obj_t</a> <a class="code" href="a00199.html#ga391f6b2613f0065673eaa4069b93d4e0">hwloc_get_obj_by_depth</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">int</span> depth, <span class="keywordtype">unsigned</span> idx) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>&#160; </div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00923"></a><span class="lineno"><a class="line" href="a00199.html#ga6f414dd80a2b943967a0ac92da3181a2">  923</a></span>&#160;<a class="code" href="a00199.html#ga6f414dd80a2b943967a0ac92da3181a2">hwloc_get_obj_by_type</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <span class="keywordtype">unsigned</span> idx) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span>&#160; </div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00930"></a><span class="lineno"><a class="line" href="a00199.html#gac140a9b939d9fa0b30c4a910efcb0656">  930</a></span>&#160;<a class="code" href="a00199.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">int</span> depth, <a class="code" href="a00253.html">hwloc_obj_t</a> prev);</div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>&#160; </div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00939"></a><span class="lineno"><a class="line" href="a00199.html#ga759e88eaf5a230ad283e9d4c42486735">  939</a></span>&#160;<a class="code" href="a00199.html#ga759e88eaf5a230ad283e9d4c42486735">hwloc_get_next_obj_by_type</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type,</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>&#160;                            <a class="code" href="a00253.html">hwloc_obj_t</a> prev);</div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>&#160; </div>
+<div class="line"><a name="l00958"></a><span class="lineno"><a class="line" href="a00200.html#ga5ca0bf94bbbb080d0eff17a57bd90422">  958</a></span>&#160;HWLOC_DECLSPEC <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="a00200.html#ga5ca0bf94bbbb080d0eff17a57bd90422">hwloc_obj_type_string</a> (<a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type) __hwloc_attribute_const;</div>
+<div class="line"><a name="l00959"></a><span class="lineno">  959</span>&#160; </div>
+<div class="line"><a name="l00977"></a><span class="lineno"><a class="line" href="a00200.html#gadb8765c260edea80c52cd06a76639ba4">  977</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00200.html#gadb8765c260edea80c52cd06a76639ba4">hwloc_obj_type_snprintf</a>(<span class="keywordtype">char</span> * __hwloc_restrict <span class="keywordtype">string</span>, <span class="keywordtype">size_t</span> size,</div>
+<div class="line"><a name="l00978"></a><span class="lineno">  978</span>&#160;                                           <a class="code" href="a00253.html">hwloc_obj_t</a> obj,</div>
+<div class="line"><a name="l00979"></a><span class="lineno">  979</span>&#160;                                           <span class="keywordtype">int</span> verbose);</div>
+<div class="line"><a name="l00980"></a><span class="lineno">  980</span>&#160; </div>
+<div class="line"><a name="l00992"></a><span class="lineno"><a class="line" href="a00200.html#ga870e876931c282a1c7aee2f031912ce3">  992</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00200.html#ga870e876931c282a1c7aee2f031912ce3">hwloc_obj_attr_snprintf</a>(<span class="keywordtype">char</span> * __hwloc_restrict <span class="keywordtype">string</span>, <span class="keywordtype">size_t</span> size,</div>
+<div class="line"><a name="l00993"></a><span class="lineno">  993</span>&#160;                                           <a class="code" href="a00253.html">hwloc_obj_t</a> obj, <span class="keyword">const</span> <span class="keywordtype">char</span> * __hwloc_restrict separator,</div>
+<div class="line"><a name="l00994"></a><span class="lineno">  994</span>&#160;                                           <span class="keywordtype">int</span> verbose);</div>
+<div class="line"><a name="l00995"></a><span class="lineno">  995</span>&#160; </div>
+<div class="line"><a name="l01019"></a><span class="lineno"><a class="line" href="a00200.html#ga510f21b066fba2dab12b8c9b173b1dfd"> 1019</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00200.html#ga510f21b066fba2dab12b8c9b173b1dfd">hwloc_type_sscanf</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keywordtype">string</span>,</div>
+<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;                                     <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> *typep,</div>
+<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;                                     <span class="keyword">union</span> <a class="code" href="a00257.html">hwloc_obj_attr_u</a> *attrp, <span class="keywordtype">size_t</span> attrsize);</div>
+<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; </div>
+<div class="line"><a name="l01044"></a><span class="lineno"><a class="line" href="a00200.html#ga52c63cd7203e55b804c1314affc9bd12"> 1044</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00200.html#ga52c63cd7203e55b804c1314affc9bd12">hwloc_type_sscanf_as_depth</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keywordtype">string</span>,</div>
+<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;                                              <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> *typep,</div>
+<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160;                                              <a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">int</span> *depthp);</div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; </div>
+<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keyword">const</span> <span class="keywordtype">char</span> *</div>
+<div class="line"><a name="l01064"></a><span class="lineno"><a class="line" href="a00201.html#gab358661a92bb27d8542b255cc9f6f25e"> 1064</a></span>&#160;<a class="code" href="a00201.html#gab358661a92bb27d8542b255cc9f6f25e">hwloc_obj_get_info_by_name</a>(<a class="code" href="a00253.html">hwloc_obj_t</a> obj, <span class="keyword">const</span> <span class="keywordtype">char</span> *name) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; </div>
+<div class="line"><a name="l01082"></a><span class="lineno"><a class="line" href="a00201.html#gace7654bb8a9002caae1a4b8a59e7452e"> 1082</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00201.html#gace7654bb8a9002caae1a4b8a59e7452e">hwloc_obj_add_info</a>(<a class="code" href="a00253.html">hwloc_obj_t</a> obj, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> <span class="keywordtype">char</span> *value);</div>
+<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; </div>
+<div class="line"><a name="l01155"></a><span class="lineno"><a class="line" href="a00202.html#ga217dc8d373f8958cc93c154ebce1c71c"> 1155</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
+<div class="line"><a name="l01158"></a><span class="lineno"><a class="line" href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71ca2e0dd0128dac6b03408c7dd170477fdc"> 1158</a></span>&#160;  <a class="code" href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71ca2e0dd0128dac6b03408c7dd170477fdc">HWLOC_CPUBIND_PROCESS</a> = (1&lt;&lt;0),</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; </div>
+<div class="line"><a name="l01162"></a><span class="lineno"><a class="line" href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421"> 1162</a></span>&#160;  <a class="code" href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421">HWLOC_CPUBIND_THREAD</a> = (1&lt;&lt;1),</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; </div>
+<div class="line"><a name="l01187"></a><span class="lineno"><a class="line" href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71ca679a7e0f0c7ee06b123565f90d98e7fa"> 1187</a></span>&#160;  <a class="code" href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71ca679a7e0f0c7ee06b123565f90d98e7fa">HWLOC_CPUBIND_STRICT</a> = (1&lt;&lt;2),</div>
+<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; </div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;  <a class="code" href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71ca41ce440443cc3087caed95ab60edcad6">HWLOC_CPUBIND_NOMEMBIND</a> = (1&lt;&lt;3)</div>
+<div class="line"><a name="l01205"></a><span class="lineno"><a class="line" href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71ca41ce440443cc3087caed95ab60edcad6"> 1205</a></span>&#160;} <a class="code" href="a00202.html#ga217dc8d373f8958cc93c154ebce1c71c">hwloc_cpubind_flags_t</a>;</div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; </div>
+<div class="line"><a name="l01212"></a><span class="lineno"><a class="line" href="a00202.html#ga80bc07473a8edf840cae17bd7ec21d48"> 1212</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00202.html#ga80bc07473a8edf840cae17bd7ec21d48">hwloc_set_cpubind</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, <span class="keywordtype">int</span> flags);</div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; </div>
+<div class="line"><a name="l01220"></a><span class="lineno"><a class="line" href="a00202.html#gacba7ecb979baf824d5240fa2cb2a8be6"> 1220</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00202.html#gacba7ecb979baf824d5240fa2cb2a8be6">hwloc_get_cpubind</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set, <span class="keywordtype">int</span> flags);</div>
+<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; </div>
+<div class="line"><a name="l01233"></a><span class="lineno"><a class="line" href="a00202.html#ga296db8a3c6d49b51fb83d6f3e45c02a6"> 1233</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00202.html#ga296db8a3c6d49b51fb83d6f3e45c02a6">hwloc_set_proc_cpubind</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_pid_t pid, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, <span class="keywordtype">int</span> flags);</div>
+<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; </div>
+<div class="line"><a name="l01250"></a><span class="lineno"><a class="line" href="a00202.html#gac82de91f788fa82dacf99c6e0d4b7158"> 1250</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00202.html#gac82de91f788fa82dacf99c6e0d4b7158">hwloc_get_proc_cpubind</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_pid_t pid, <a class="code" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set, <span class="keywordtype">int</span> flags);</div>
+<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; </div>
+<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160;<span class="preprocessor">#ifdef hwloc_thread_t</span></div>
+<div class="line"><a name="l01260"></a><span class="lineno"><a class="line" href="a00202.html#gae42c01b2addcfbf6048b9a516dd7a906"> 1260</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00202.html#gae42c01b2addcfbf6048b9a516dd7a906">hwloc_set_thread_cpubind</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_thread_t thread, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, <span class="keywordtype">int</span> flags);</div>
+<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; </div>
+<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160;<span class="preprocessor">#ifdef hwloc_thread_t</span></div>
+<div class="line"><a name="l01275"></a><span class="lineno"><a class="line" href="a00202.html#gaf13f765642b5d0d9a9813e6bb043671b"> 1275</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00202.html#gaf13f765642b5d0d9a9813e6bb043671b">hwloc_get_thread_cpubind</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_thread_t thread, <a class="code" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set, <span class="keywordtype">int</span> flags);</div>
+<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; </div>
+<div class="line"><a name="l01295"></a><span class="lineno"><a class="line" href="a00202.html#gafdb374627358bf09203b5a4215b13032"> 1295</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00202.html#gafdb374627358bf09203b5a4215b13032">hwloc_get_last_cpu_location</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set, <span class="keywordtype">int</span> flags);</div>
+<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; </div>
+<div class="line"><a name="l01317"></a><span class="lineno"><a class="line" href="a00202.html#ga910a05c2d47f68a3155bf176b50fa555"> 1317</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00202.html#ga910a05c2d47f68a3155bf176b50fa555">hwloc_get_proc_last_cpu_location</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_pid_t pid, <a class="code" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set, <span class="keywordtype">int</span> flags);</div>
+<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160; </div>
+<div class="line"><a name="l01398"></a><span class="lineno"><a class="line" href="a00203.html#gac9764f79505775d06407b40f5e4661e8"> 1398</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
+<div class="line"><a name="l01406"></a><span class="lineno"><a class="line" href="a00203.html#ggac9764f79505775d06407b40f5e4661e8a18675bb80ebc1bce5b652e9de8f3998c"> 1406</a></span>&#160;  <a class="code" href="a00203.html#ggac9764f79505775d06407b40f5e4661e8a18675bb80ebc1bce5b652e9de8f3998c">HWLOC_MEMBIND_DEFAULT</a> =       0,</div>
+<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160; </div>
+<div class="line"><a name="l01417"></a><span class="lineno"><a class="line" href="a00203.html#ggac9764f79505775d06407b40f5e4661e8a979c7aa78dd32780858f30f47a72cca0"> 1417</a></span>&#160;  <a class="code" href="a00203.html#ggac9764f79505775d06407b40f5e4661e8a979c7aa78dd32780858f30f47a72cca0">HWLOC_MEMBIND_FIRSTTOUCH</a> =    1,</div>
+<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160; </div>
+<div class="line"><a name="l01421"></a><span class="lineno"><a class="line" href="a00203.html#ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c"> 1421</a></span>&#160;  <a class="code" href="a00203.html#ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c">HWLOC_MEMBIND_BIND</a> =          2,</div>
+<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160; </div>
+<div class="line"><a name="l01430"></a><span class="lineno"><a class="line" href="a00203.html#ggac9764f79505775d06407b40f5e4661e8ae370075e5af016d42310f87ea5af236b"> 1430</a></span>&#160;  <a class="code" href="a00203.html#ggac9764f79505775d06407b40f5e4661e8ae370075e5af016d42310f87ea5af236b">HWLOC_MEMBIND_INTERLEAVE</a> =    3,</div>
+<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160; </div>
+<div class="line"><a name="l01437"></a><span class="lineno"><a class="line" href="a00203.html#ggac9764f79505775d06407b40f5e4661e8aecdd4164d647708fbb51a00d98dbb138"> 1437</a></span>&#160;  <a class="code" href="a00203.html#ggac9764f79505775d06407b40f5e4661e8aecdd4164d647708fbb51a00d98dbb138">HWLOC_MEMBIND_NEXTTOUCH</a> =     4,</div>
+<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160; </div>
+<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160;  <a class="code" href="a00203.html#ggac9764f79505775d06407b40f5e4661e8a3185bd869b67817fb2bd5164bf360402">HWLOC_MEMBIND_MIXED</a> = -1</div>
+<div class="line"><a name="l01446"></a><span class="lineno"><a class="line" href="a00203.html#ggac9764f79505775d06407b40f5e4661e8a3185bd869b67817fb2bd5164bf360402"> 1446</a></span>&#160;} <a class="code" href="a00203.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a>;</div>
+<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160; </div>
+<div class="line"><a name="l01461"></a><span class="lineno"><a class="line" href="a00203.html#gab00475fd98815bf4fb9aaf752030e7d2"> 1461</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
+<div class="line"><a name="l01466"></a><span class="lineno"><a class="line" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4"> 1466</a></span>&#160;  <a class="code" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4">HWLOC_MEMBIND_PROCESS</a> =       (1&lt;&lt;0),</div>
+<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160; </div>
+<div class="line"><a name="l01471"></a><span class="lineno"><a class="line" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298"> 1471</a></span>&#160;  <a class="code" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298">HWLOC_MEMBIND_THREAD</a> =        (1&lt;&lt;1),</div>
+<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160; </div>
+<div class="line"><a name="l01479"></a><span class="lineno"><a class="line" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6"> 1479</a></span>&#160;  <a class="code" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> =        (1&lt;&lt;2),</div>
+<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160; </div>
+<div class="line"><a name="l01485"></a><span class="lineno"><a class="line" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2aa6e49e54f52827cb143cc869cfd748af"> 1485</a></span>&#160;  <a class="code" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2aa6e49e54f52827cb143cc869cfd748af">HWLOC_MEMBIND_MIGRATE</a> =       (1&lt;&lt;3),</div>
+<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160; </div>
+<div class="line"><a name="l01498"></a><span class="lineno"><a class="line" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2aad6b9eaf2ee324ca58dc8f58094b9997"> 1498</a></span>&#160;  <a class="code" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2aad6b9eaf2ee324ca58dc8f58094b9997">HWLOC_MEMBIND_NOCPUBIND</a> =     (1&lt;&lt;4),</div>
+<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160; </div>
+<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160;  <a class="code" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256">HWLOC_MEMBIND_BYNODESET</a> =     (1&lt;&lt;5)</div>
+<div class="line"><a name="l01510"></a><span class="lineno"><a class="line" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256"> 1510</a></span>&#160;} <a class="code" href="a00203.html#gab00475fd98815bf4fb9aaf752030e7d2">hwloc_membind_flags_t</a>;</div>
+<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160; </div>
+<div class="line"><a name="l01527"></a><span class="lineno"><a class="line" href="a00203.html#ga020951efa0ce3862bd4faec295501a7f"> 1527</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00203.html#ga020951efa0ce3862bd4faec295501a7f">hwloc_set_membind</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <a class="code" href="a00203.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> policy, <span class="keywordtype">int</span> flags);</div>
+<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160; </div>
+<div class="line"><a name="l01576"></a><span class="lineno"><a class="line" href="a00203.html#gae21f0a1a884929c784bebf070252aa56"> 1576</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00203.html#gae21f0a1a884929c784bebf070252aa56">hwloc_get_membind</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set, <a class="code" href="a00203.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> * policy, <span class="keywordtype">int</span> flags);</div>
+<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160; </div>
+<div class="line"><a name="l01590"></a><span class="lineno"><a class="line" href="a00203.html#gabc91ff16f7e41047924e3a4ae6d9da7e"> 1590</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00203.html#gabc91ff16f7e41047924e3a4ae6d9da7e">hwloc_set_proc_membind</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_pid_t pid, <a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <a class="code" href="a00203.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> policy, <span class="keywordtype">int</span> flags);</div>
+<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160; </div>
+<div class="line"><a name="l01634"></a><span class="lineno"><a class="line" href="a00203.html#ga1730ceb18ec6ee3b7bd3d0db81f07dc8"> 1634</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00203.html#ga1730ceb18ec6ee3b7bd3d0db81f07dc8">hwloc_get_proc_membind</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_pid_t pid, <a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set, <a class="code" href="a00203.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> * policy, <span class="keywordtype">int</span> flags);</div>
+<div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160; </div>
+<div class="line"><a name="l01646"></a><span class="lineno"><a class="line" href="a00203.html#gaf881faefe20701229f07dd7dbd0125ed"> 1646</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00203.html#gaf881faefe20701229f07dd7dbd0125ed">hwloc_set_area_membind</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">const</span> <span class="keywordtype">void</span> *addr, <span class="keywordtype">size_t</span> len, <a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <a class="code" href="a00203.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> policy, <span class="keywordtype">int</span> flags);</div>
+<div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160; </div>
+<div class="line"><a name="l01678"></a><span class="lineno"><a class="line" href="a00203.html#gaa87e0a6946ff145914fdf0b1c60567f8"> 1678</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00203.html#gaa87e0a6946ff145914fdf0b1c60567f8">hwloc_get_area_membind</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">const</span> <span class="keywordtype">void</span> *addr, <span class="keywordtype">size_t</span> len, <a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set, <a class="code" href="a00203.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> * policy, <span class="keywordtype">int</span> flags);</div>
+<div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160; </div>
+<div class="line"><a name="l01700"></a><span class="lineno"><a class="line" href="a00203.html#ga537c7508a4e2d1db05673ec5be6e805c"> 1700</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00203.html#ga537c7508a4e2d1db05673ec5be6e805c">hwloc_get_area_memlocation</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">const</span> <span class="keywordtype">void</span> *addr, <span class="keywordtype">size_t</span> len, <a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set, <span class="keywordtype">int</span> flags);</div>
+<div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160; </div>
+<div class="line"><a name="l01709"></a><span class="lineno"><a class="line" href="a00203.html#ga972b335a86a7d5e7b34bce2b243c41bc"> 1709</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> *<a class="code" href="a00203.html#ga972b335a86a7d5e7b34bce2b243c41bc">hwloc_alloc</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">size_t</span> len);</div>
+<div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160; </div>
+<div class="line"><a name="l01725"></a><span class="lineno"><a class="line" href="a00203.html#ga04736461780fadcf193af218c0122273"> 1725</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> *<a class="code" href="a00203.html#ga04736461780fadcf193af218c0122273">hwloc_alloc_membind</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">size_t</span> len, <a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <a class="code" href="a00203.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> policy, <span class="keywordtype">int</span> flags) __hwloc_attribute_malloc;</div>
+<div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160; </div>
+<div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">void</span> *</div>
+<div class="line"><a name="l01740"></a><span class="lineno"><a class="line" href="a00203.html#gab1b77b8408bacaf03c7e8878f7577922"> 1740</a></span>&#160;<a class="code" href="a00203.html#gab1b77b8408bacaf03c7e8878f7577922">hwloc_alloc_membind_policy</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">size_t</span> len, <a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <a class="code" href="a00203.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> policy, <span class="keywordtype">int</span> flags) __hwloc_attribute_malloc;</div>
+<div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160; </div>
+<div class="line"><a name="l01745"></a><span class="lineno"><a class="line" href="a00203.html#ga32dbd4f54e9e4a7179f2dde37ffe6ad7"> 1745</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00203.html#ga32dbd4f54e9e4a7179f2dde37ffe6ad7">hwloc_free</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">void</span> *addr, <span class="keywordtype">size_t</span> len);</div>
+<div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160; </div>
+<div class="line"><a name="l01783"></a><span class="lineno"><a class="line" href="a00204.html#ga341fc17b5867a4715570baab131f68cd"> 1783</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00204.html#ga341fc17b5867a4715570baab131f68cd">hwloc_topology_set_pid</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> __hwloc_restrict topology, hwloc_pid_t pid);</div>
+<div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160; </div>
+<div class="line"><a name="l01813"></a><span class="lineno"><a class="line" href="a00204.html#ga4fab186bb6181a00bcf585825fddd38d"> 1813</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00204.html#ga4fab186bb6181a00bcf585825fddd38d">hwloc_topology_set_synthetic</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> __hwloc_restrict topology, <span class="keyword">const</span> <span class="keywordtype">char</span> * __hwloc_restrict description);</div>
+<div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160; </div>
+<div class="line"><a name="l01841"></a><span class="lineno"><a class="line" href="a00204.html#ga879439b7ee99407ee911b3ac64e9a25e"> 1841</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00204.html#ga879439b7ee99407ee911b3ac64e9a25e">hwloc_topology_set_xml</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> __hwloc_restrict topology, <span class="keyword">const</span> <span class="keywordtype">char</span> * __hwloc_restrict xmlpath);</div>
+<div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>&#160; </div>
+<div class="line"><a name="l01869"></a><span class="lineno"><a class="line" href="a00204.html#ga2745616b65595e1c1e579ecc7e461fa8"> 1869</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00204.html#ga2745616b65595e1c1e579ecc7e461fa8">hwloc_topology_set_xmlbuffer</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> __hwloc_restrict topology, <span class="keyword">const</span> <span class="keywordtype">char</span> * __hwloc_restrict buffer, <span class="keywordtype">int</span> size);</div>
+<div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>&#160; </div>
+<div class="line"><a name="l01873"></a><span class="lineno"><a class="line" href="a00204.html#ga949f656c779208a36790feba24048b7e"> 1873</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00204.html#ga949f656c779208a36790feba24048b7e">hwloc_topology_components_flag_e</a> {</div>
+<div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>&#160;  <a class="code" href="a00204.html#gga949f656c779208a36790feba24048b7ea33eec25d29253a2aba21dd3c731b416e">HWLOC_TOPOLOGY_COMPONENTS_FLAG_BLACKLIST</a> = (1UL&lt;&lt;0)</div>
+<div class="line"><a name="l01878"></a><span class="lineno"><a class="line" href="a00204.html#gga949f656c779208a36790feba24048b7ea33eec25d29253a2aba21dd3c731b416e"> 1878</a></span>&#160;};</div>
+<div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>&#160; </div>
+<div class="line"><a name="l01894"></a><span class="lineno"><a class="line" href="a00204.html#ga9ad41adf418cee1c0ee32ba9bd4a3d36"> 1894</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00204.html#ga9ad41adf418cee1c0ee32ba9bd4a3d36">hwloc_topology_set_components</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> __hwloc_restrict topology, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags, <span class="keyword">const</span> <span class="keywordtype">char</span> * __hwloc_restrict name);</div>
+<div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>&#160; </div>
+<div class="line"><a name="l01914"></a><span class="lineno"><a class="line" href="a00205.html#gada025d3ec20b4b420f8038d23d6e7bde"> 1914</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00205.html#gada025d3ec20b4b420f8038d23d6e7bde">hwloc_topology_flags_e</a> {</div>
+<div class="line"><a name="l01936"></a><span class="lineno"><a class="line" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258"> 1936</a></span>&#160;  <a class="code" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a> = (1UL&lt;&lt;0),</div>
+<div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>&#160; </div>
+<div class="line"><a name="l01956"></a><span class="lineno"><a class="line" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b"> 1956</a></span>&#160;  <a class="code" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a> = (1UL&lt;&lt;1),</div>
+<div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>&#160; </div>
+<div class="line"><a name="l01977"></a><span class="lineno"><a class="line" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea1b66bbd66e900e5c837f71defb32ad89"> 1977</a></span>&#160;  <a class="code" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea1b66bbd66e900e5c837f71defb32ad89">HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES</a> = (1UL&lt;&lt;2),</div>
+<div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>&#160; </div>
+<div class="line"><a name="l02001"></a><span class="lineno"><a class="line" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdead93e82b8668ee90e4f9354e201a2ed9c"> 2001</a></span>&#160;  <a class="code" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdead93e82b8668ee90e4f9354e201a2ed9c">HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT</a> = (1UL&lt;&lt;3),</div>
+<div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>&#160; </div>
+<div class="line"><a name="l02026"></a><span class="lineno"><a class="line" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdeaa595aed197779012acf43e8ca4a2658d"> 2026</a></span>&#160;  <a class="code" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdeaa595aed197779012acf43e8ca4a2658d">HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING</a> = (1UL&lt;&lt;4),</div>
+<div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>&#160; </div>
+<div class="line"><a name="l02048"></a><span class="lineno"><a class="line" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea368d7741135fe309f3782c59644d3caa"> 2048</a></span>&#160;  <a class="code" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea368d7741135fe309f3782c59644d3caa">HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_MEMBINDING</a> = (1UL&lt;&lt;5),</div>
+<div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160; </div>
+<div class="line"><a name="l02063"></a><span class="lineno"><a class="line" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdeae7a792e3db4360360a10f9160b10e631"> 2063</a></span>&#160;  <a class="code" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdeae7a792e3db4360360a10f9160b10e631">HWLOC_TOPOLOGY_FLAG_DONT_CHANGE_BINDING</a> = (1UL&lt;&lt;6),</div>
+<div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160; </div>
+<div class="line"><a name="l02070"></a><span class="lineno"><a class="line" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea5796b4909eba80f9727b66d07d3a7a05"> 2070</a></span>&#160;  <a class="code" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea5796b4909eba80f9727b66d07d3a7a05">HWLOC_TOPOLOGY_FLAG_NO_DISTANCES</a> = (1UL&lt;&lt;7),</div>
+<div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160; </div>
+<div class="line"><a name="l02076"></a><span class="lineno"><a class="line" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdead5636766a6603f24486f79c48899c1c3"> 2076</a></span>&#160;  <a class="code" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdead5636766a6603f24486f79c48899c1c3">HWLOC_TOPOLOGY_FLAG_NO_MEMATTRS</a> = (1UL&lt;&lt;8),</div>
+<div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160; </div>
+<div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>&#160;  <a class="code" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea3497cd4c2f8b1d842dd49b3aaae56a24">HWLOC_TOPOLOGY_FLAG_NO_CPUKINDS</a> = (1UL&lt;&lt;9)</div>
+<div class="line"><a name="l02083"></a><span class="lineno"><a class="line" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea3497cd4c2f8b1d842dd49b3aaae56a24"> 2083</a></span>&#160;};</div>
+<div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160; </div>
+<div class="line"><a name="l02096"></a><span class="lineno"><a class="line" href="a00205.html#gaaeed4df656979e5f16befea9d29b814b"> 2096</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00205.html#gaaeed4df656979e5f16befea9d29b814b">hwloc_topology_set_flags</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
+<div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160; </div>
+<div class="line"><a name="l02107"></a><span class="lineno"><a class="line" href="a00205.html#ga09318f81c1d4713be907d64748a6f93c"> 2107</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="a00205.html#ga09318f81c1d4713be907d64748a6f93c">hwloc_topology_get_flags</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology);</div>
+<div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160; </div>
+<div class="line"><a name="l02116"></a><span class="lineno"><a class="line" href="a00205.html#ga68ffdcfd9175cdf40709801092f18017"> 2116</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00205.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>  __hwloc_restrict topology) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>&#160; </div>
+<div class="line"><a name="l02119"></a><span class="lineno"><a class="line" href="a00305.html"> 2119</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00305.html">hwloc_topology_discovery_support</a> {</div>
+<div class="line"><a name="l02121"></a><span class="lineno"><a class="line" href="a00305.html#ad7bb4ecf7a82f5a04fc632e9592ad3ab"> 2121</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00305.html#ad7bb4ecf7a82f5a04fc632e9592ad3ab">pu</a>;</div>
+<div class="line"><a name="l02123"></a><span class="lineno"><a class="line" href="a00305.html#a955f96066cb9e4cd34e2a3710ad43e80"> 2123</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00305.html#a955f96066cb9e4cd34e2a3710ad43e80">numa</a>;</div>
+<div class="line"><a name="l02125"></a><span class="lineno"><a class="line" href="a00305.html#af193eb858e40e12ef4923f5ed0e1f11a"> 2125</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00305.html#af193eb858e40e12ef4923f5ed0e1f11a">numa_memory</a>;</div>
+<div class="line"><a name="l02127"></a><span class="lineno"><a class="line" href="a00305.html#af3c97b28781a2972cf8eaaf94a6617da"> 2127</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00305.html#af3c97b28781a2972cf8eaaf94a6617da">disallowed_pu</a>;</div>
+<div class="line"><a name="l02129"></a><span class="lineno"><a class="line" href="a00305.html#a970e65235873bcdb9669a9805161ce03"> 2129</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00305.html#a970e65235873bcdb9669a9805161ce03">disallowed_numa</a>;</div>
+<div class="line"><a name="l02131"></a><span class="lineno"><a class="line" href="a00305.html#aba80d6f9c15e2395f9ed61db9ff3b75d"> 2131</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00305.html#aba80d6f9c15e2395f9ed61db9ff3b75d">cpukind_efficiency</a>;</div>
+<div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>&#160;};</div>
+<div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160; </div>
+<div class="line"><a name="l02139"></a><span class="lineno"><a class="line" href="a00309.html"> 2139</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00309.html">hwloc_topology_cpubind_support</a> {</div>
+<div class="line"><a name="l02141"></a><span class="lineno"><a class="line" href="a00309.html#a9403d51657a4d546b3ea9553a2973a27"> 2141</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00309.html#a9403d51657a4d546b3ea9553a2973a27">set_thisproc_cpubind</a>;</div>
+<div class="line"><a name="l02143"></a><span class="lineno"><a class="line" href="a00309.html#a77a09ddd78ee3e9ff5f532a6ac74f7eb"> 2143</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00309.html#a77a09ddd78ee3e9ff5f532a6ac74f7eb">get_thisproc_cpubind</a>;</div>
+<div class="line"><a name="l02145"></a><span class="lineno"><a class="line" href="a00309.html#aa166223d1c2a6de7256ab2d8b675a87e"> 2145</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00309.html#aa166223d1c2a6de7256ab2d8b675a87e">set_proc_cpubind</a>;</div>
+<div class="line"><a name="l02147"></a><span class="lineno"><a class="line" href="a00309.html#aae705bc447adc163ead377362c4dfe9f"> 2147</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00309.html#aae705bc447adc163ead377362c4dfe9f">get_proc_cpubind</a>;</div>
+<div class="line"><a name="l02149"></a><span class="lineno"><a class="line" href="a00309.html#a57a89a4b5f1f74fa6cfe176f1e8b0798"> 2149</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00309.html#a57a89a4b5f1f74fa6cfe176f1e8b0798">set_thisthread_cpubind</a>;</div>
+<div class="line"><a name="l02151"></a><span class="lineno"><a class="line" href="a00309.html#a80d762e532d677dff262d83cc7bb1c60"> 2151</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00309.html#a80d762e532d677dff262d83cc7bb1c60">get_thisthread_cpubind</a>;</div>
+<div class="line"><a name="l02153"></a><span class="lineno"><a class="line" href="a00309.html#a46fba33e307909ce256624687799dd6d"> 2153</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00309.html#a46fba33e307909ce256624687799dd6d">set_thread_cpubind</a>;</div>
+<div class="line"><a name="l02155"></a><span class="lineno"><a class="line" href="a00309.html#a8dd4d8531ed2eebdce1507e7d104154e"> 2155</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00309.html#a8dd4d8531ed2eebdce1507e7d104154e">get_thread_cpubind</a>;</div>
+<div class="line"><a name="l02157"></a><span class="lineno"><a class="line" href="a00309.html#ad2d5c94b738d92b7d2ede87e4e96321d"> 2157</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00309.html#ad2d5c94b738d92b7d2ede87e4e96321d">get_thisproc_last_cpu_location</a>;</div>
+<div class="line"><a name="l02159"></a><span class="lineno"><a class="line" href="a00309.html#a2554620148b7992a5093f338f5ae254f"> 2159</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00309.html#a2554620148b7992a5093f338f5ae254f">get_proc_last_cpu_location</a>;</div>
+<div class="line"><a name="l02161"></a><span class="lineno"><a class="line" href="a00309.html#a6be1f042fdce6bf41b4ea39f6f193808"> 2161</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00309.html#a6be1f042fdce6bf41b4ea39f6f193808">get_thisthread_last_cpu_location</a>;</div>
+<div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>&#160;};</div>
+<div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>&#160; </div>
+<div class="line"><a name="l02169"></a><span class="lineno"><a class="line" href="a00313.html"> 2169</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00313.html">hwloc_topology_membind_support</a> {</div>
+<div class="line"><a name="l02171"></a><span class="lineno"><a class="line" href="a00313.html#a36b3e388df9c6a249427cab7e3724749"> 2171</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00313.html#a36b3e388df9c6a249427cab7e3724749">set_thisproc_membind</a>;</div>
+<div class="line"><a name="l02173"></a><span class="lineno"><a class="line" href="a00313.html#a3fd51e6fa5f0dd800322301b46b08559"> 2173</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00313.html#a3fd51e6fa5f0dd800322301b46b08559">get_thisproc_membind</a>;</div>
+<div class="line"><a name="l02175"></a><span class="lineno"><a class="line" href="a00313.html#a756f44912894b176bf979a1b65f12aac"> 2175</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00313.html#a756f44912894b176bf979a1b65f12aac">set_proc_membind</a>;</div>
+<div class="line"><a name="l02177"></a><span class="lineno"><a class="line" href="a00313.html#a9880cd2d605e316fc020167c49ca69ad"> 2177</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00313.html#a9880cd2d605e316fc020167c49ca69ad">get_proc_membind</a>;</div>
+<div class="line"><a name="l02179"></a><span class="lineno"><a class="line" href="a00313.html#a0697af2e41f2e82b8ce71e3cc13f7eac"> 2179</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00313.html#a0697af2e41f2e82b8ce71e3cc13f7eac">set_thisthread_membind</a>;</div>
+<div class="line"><a name="l02181"></a><span class="lineno"><a class="line" href="a00313.html#a63b0b2e26157b472f5717ee93cc7c535"> 2181</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00313.html#a63b0b2e26157b472f5717ee93cc7c535">get_thisthread_membind</a>;</div>
+<div class="line"><a name="l02183"></a><span class="lineno"><a class="line" href="a00313.html#a476c06f96b65c08b287cf2369966123b"> 2183</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00313.html#a476c06f96b65c08b287cf2369966123b">set_area_membind</a>;</div>
+<div class="line"><a name="l02185"></a><span class="lineno"><a class="line" href="a00313.html#a0a84e24a06f2fa487fe8c9605c6f68b3"> 2185</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00313.html#a0a84e24a06f2fa487fe8c9605c6f68b3">get_area_membind</a>;</div>
+<div class="line"><a name="l02187"></a><span class="lineno"><a class="line" href="a00313.html#ae551abb27d2aa9ce008583488b845b98"> 2187</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00313.html#ae551abb27d2aa9ce008583488b845b98">alloc_membind</a>;</div>
+<div class="line"><a name="l02189"></a><span class="lineno"><a class="line" href="a00313.html#a221098c339dbfab27bd2c9f5d32f123b"> 2189</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00313.html#a221098c339dbfab27bd2c9f5d32f123b">firsttouch_membind</a>;</div>
+<div class="line"><a name="l02191"></a><span class="lineno"><a class="line" href="a00313.html#ae7cdb1f1b5f0242a69f85b5a5538c764"> 2191</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00313.html#ae7cdb1f1b5f0242a69f85b5a5538c764">bind_membind</a>;</div>
+<div class="line"><a name="l02193"></a><span class="lineno"><a class="line" href="a00313.html#a3c44c6012860bbeba8a0f4c19710858d"> 2193</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00313.html#a3c44c6012860bbeba8a0f4c19710858d">interleave_membind</a>;</div>
+<div class="line"><a name="l02195"></a><span class="lineno"><a class="line" href="a00313.html#ab0921af6e0cd6975812a80b8e5c7435c"> 2195</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00313.html#ab0921af6e0cd6975812a80b8e5c7435c">nexttouch_membind</a>;</div>
+<div class="line"><a name="l02197"></a><span class="lineno"><a class="line" href="a00313.html#aafa7683871a6a760246f9b35209caec5"> 2197</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00313.html#aafa7683871a6a760246f9b35209caec5">migrate_membind</a>;</div>
+<div class="line"><a name="l02199"></a><span class="lineno"><a class="line" href="a00313.html#a30173553a68e0a4dd1672d26f8e892b1"> 2199</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00313.html#a30173553a68e0a4dd1672d26f8e892b1">get_area_memlocation</a>;</div>
+<div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>&#160;};</div>
+<div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>&#160; </div>
+<div class="line"><a name="l02204"></a><span class="lineno"><a class="line" href="a00317.html"> 2204</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00317.html">hwloc_topology_misc_support</a> {</div>
+<div class="line"><a name="l02206"></a><span class="lineno"><a class="line" href="a00317.html#adf54a6dbe8e9dd5033dfe9c93df726c4"> 2206</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00317.html#adf54a6dbe8e9dd5033dfe9c93df726c4">imported_support</a>;</div>
+<div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>&#160;};</div>
+<div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>&#160; </div>
+<div class="line"><a name="l02215"></a><span class="lineno"><a class="line" href="a00321.html"> 2215</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00321.html">hwloc_topology_support</a> {</div>
+<div class="line"><a name="l02216"></a><span class="lineno"><a class="line" href="a00321.html#aea3fbd7653d987d81f848636c420504d"> 2216</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="a00305.html">hwloc_topology_discovery_support</a> *<a class="code" href="a00321.html#aea3fbd7653d987d81f848636c420504d">discovery</a>;</div>
+<div class="line"><a name="l02217"></a><span class="lineno"><a class="line" href="a00321.html#adef2bb91f74c3e70a2a071393caf5f56"> 2217</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="a00309.html">hwloc_topology_cpubind_support</a> *<a class="code" href="a00321.html#adef2bb91f74c3e70a2a071393caf5f56">cpubind</a>;</div>
+<div class="line"><a name="l02218"></a><span class="lineno"><a class="line" href="a00321.html#ac6eb62ae8bc0a68dce679a7107a36194"> 2218</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="a00313.html">hwloc_topology_membind_support</a> *<a class="code" href="a00321.html#ac6eb62ae8bc0a68dce679a7107a36194">membind</a>;</div>
+<div class="line"><a name="l02219"></a><span class="lineno"><a class="line" href="a00321.html#ab9d08df4b0b03994f21b893ece826e78"> 2219</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="a00317.html">hwloc_topology_misc_support</a> *<a class="code" href="a00321.html#ab9d08df4b0b03994f21b893ece826e78">misc</a>;</div>
+<div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>&#160;};</div>
+<div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>&#160; </div>
+<div class="line"><a name="l02243"></a><span class="lineno"><a class="line" href="a00205.html#gab8c76173c4a8ce1a9a9366012b1388e6"> 2243</a></span>&#160;HWLOC_DECLSPEC <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="a00321.html">hwloc_topology_support</a> *<a class="code" href="a00205.html#gab8c76173c4a8ce1a9a9366012b1388e6">hwloc_topology_get_support</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> __hwloc_restrict topology);</div>
+<div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>&#160; </div>
+<div class="line"><a name="l02254"></a><span class="lineno"><a class="line" href="a00205.html#ga9a5a1f0140cd1952544477833733195b"> 2254</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00205.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> {</div>
+<div class="line"><a name="l02260"></a><span class="lineno"><a class="line" href="a00205.html#gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e"> 2260</a></span>&#160;  <a class="code" href="a00205.html#gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e">HWLOC_TYPE_FILTER_KEEP_ALL</a> = 0,</div>
+<div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>&#160; </div>
+<div class="line"><a name="l02268"></a><span class="lineno"><a class="line" href="a00205.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a"> 2268</a></span>&#160;  <a class="code" href="a00205.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a">HWLOC_TYPE_FILTER_KEEP_NONE</a> = 1,</div>
+<div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>&#160; </div>
+<div class="line"><a name="l02282"></a><span class="lineno"><a class="line" href="a00205.html#gga9a5a1f0140cd1952544477833733195ba7664716643bf1db83e631eed34f659e4"> 2282</a></span>&#160;  <a class="code" href="a00205.html#gga9a5a1f0140cd1952544477833733195ba7664716643bf1db83e631eed34f659e4">HWLOC_TYPE_FILTER_KEEP_STRUCTURE</a> = 2,</div>
+<div class="line"><a name="l02283"></a><span class="lineno"> 2283</span>&#160; </div>
+<div class="line"><a name="l02297"></a><span class="lineno"> 2297</span>&#160;  <a class="code" href="a00205.html#gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5">HWLOC_TYPE_FILTER_KEEP_IMPORTANT</a> = 3</div>
+<div class="line"><a name="l02298"></a><span class="lineno"><a class="line" href="a00205.html#gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5"> 2298</a></span>&#160;};</div>
+<div class="line"><a name="l02299"></a><span class="lineno"> 2299</span>&#160; </div>
+<div class="line"><a name="l02302"></a><span class="lineno"><a class="line" href="a00205.html#gad894e70f15f8d4aada7be8d1aba38b7e"> 2302</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00205.html#gad894e70f15f8d4aada7be8d1aba38b7e">hwloc_topology_set_type_filter</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <span class="keyword">enum</span> <a class="code" href="a00205.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter);</div>
+<div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>&#160; </div>
+<div class="line"><a name="l02306"></a><span class="lineno"><a class="line" href="a00205.html#ga137ad1178f7a79f2383974d983083401"> 2306</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00205.html#ga137ad1178f7a79f2383974d983083401">hwloc_topology_get_type_filter</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <span class="keyword">enum</span> <a class="code" href="a00205.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> *filter);</div>
+<div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>&#160; </div>
+<div class="line"><a name="l02312"></a><span class="lineno"><a class="line" href="a00205.html#ga9eb8dc3b106f84921bf5789101e97e24"> 2312</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00205.html#ga9eb8dc3b106f84921bf5789101e97e24">hwloc_topology_set_all_types_filter</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">enum</span> <a class="code" href="a00205.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter);</div>
+<div class="line"><a name="l02313"></a><span class="lineno"> 2313</span>&#160; </div>
+<div class="line"><a name="l02318"></a><span class="lineno"><a class="line" href="a00205.html#ga30bd6d330fe3c8f0cbaad724d114ee20"> 2318</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00205.html#ga30bd6d330fe3c8f0cbaad724d114ee20">hwloc_topology_set_cache_types_filter</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">enum</span> <a class="code" href="a00205.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter);</div>
+<div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>&#160; </div>
+<div class="line"><a name="l02324"></a><span class="lineno"><a class="line" href="a00205.html#ga37c7b2e599ed3cd76ad9164630024f30"> 2324</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00205.html#ga37c7b2e599ed3cd76ad9164630024f30">hwloc_topology_set_icache_types_filter</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">enum</span> <a class="code" href="a00205.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter);</div>
+<div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>&#160; </div>
+<div class="line"><a name="l02328"></a><span class="lineno"><a class="line" href="a00205.html#ga0ab38705357bc1203abe829da8a12ad3"> 2328</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00205.html#ga0ab38705357bc1203abe829da8a12ad3">hwloc_topology_set_io_types_filter</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">enum</span> <a class="code" href="a00205.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter);</div>
+<div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>&#160; </div>
+<div class="line"><a name="l02340"></a><span class="lineno"><a class="line" href="a00205.html#ga2cc7b7b155cba58dda203e54f1637b9c"> 2340</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00205.html#ga2cc7b7b155cba58dda203e54f1637b9c">hwloc_topology_set_userdata</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">const</span> <span class="keywordtype">void</span> *userdata);</div>
+<div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>&#160; </div>
+<div class="line"><a name="l02347"></a><span class="lineno"><a class="line" href="a00205.html#ga91f992f8d6c4905b2d3c4f43e509c2a3"> 2347</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> * <a class="code" href="a00205.html#ga91f992f8d6c4905b2d3c4f43e509c2a3">hwloc_topology_get_userdata</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology);</div>
+<div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>&#160; </div>
+<div class="line"><a name="l02358"></a><span class="lineno"><a class="line" href="a00206.html#ga9d80f08eb25b7ac22f1b998dc8bf521f"> 2358</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00206.html#ga9d80f08eb25b7ac22f1b998dc8bf521f">hwloc_restrict_flags_e</a> {</div>
+<div class="line"><a name="l02364"></a><span class="lineno"><a class="line" href="a00206.html#gga9d80f08eb25b7ac22f1b998dc8bf521fa80eeb9cbba401ab050f8fb4573725891"> 2364</a></span>&#160;  <a class="code" href="a00206.html#gga9d80f08eb25b7ac22f1b998dc8bf521fa80eeb9cbba401ab050f8fb4573725891">HWLOC_RESTRICT_FLAG_REMOVE_CPULESS</a> = (1UL&lt;&lt;0),</div>
+<div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>&#160; </div>
+<div class="line"><a name="l02370"></a><span class="lineno"><a class="line" href="a00206.html#gga9d80f08eb25b7ac22f1b998dc8bf521fae4c5b1b87232f2d8a60559e77ac65a68"> 2370</a></span>&#160;  <a class="code" href="a00206.html#gga9d80f08eb25b7ac22f1b998dc8bf521fae4c5b1b87232f2d8a60559e77ac65a68">HWLOC_RESTRICT_FLAG_BYNODESET</a> =  (1UL&lt;&lt;3),</div>
+<div class="line"><a name="l02371"></a><span class="lineno"> 2371</span>&#160; </div>
+<div class="line"><a name="l02377"></a><span class="lineno"><a class="line" href="a00206.html#gga9d80f08eb25b7ac22f1b998dc8bf521faf5ba49808855704bfe9cb9fe7347f93b"> 2377</a></span>&#160;  <a class="code" href="a00206.html#gga9d80f08eb25b7ac22f1b998dc8bf521faf5ba49808855704bfe9cb9fe7347f93b">HWLOC_RESTRICT_FLAG_REMOVE_MEMLESS</a> = (1UL&lt;&lt;4),</div>
+<div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>&#160; </div>
+<div class="line"><a name="l02383"></a><span class="lineno"><a class="line" href="a00206.html#gga9d80f08eb25b7ac22f1b998dc8bf521fa699969227a09bbc1a7de51dc9fb7be4b"> 2383</a></span>&#160;  <a class="code" href="a00206.html#gga9d80f08eb25b7ac22f1b998dc8bf521fa699969227a09bbc1a7de51dc9fb7be4b">HWLOC_RESTRICT_FLAG_ADAPT_MISC</a> = (1UL&lt;&lt;1),</div>
+<div class="line"><a name="l02384"></a><span class="lineno"> 2384</span>&#160; </div>
+<div class="line"><a name="l02389"></a><span class="lineno"> 2389</span>&#160;  <a class="code" href="a00206.html#gga9d80f08eb25b7ac22f1b998dc8bf521faa95d6985e36ec1e55f68b210297a85cb">HWLOC_RESTRICT_FLAG_ADAPT_IO</a> = (1UL&lt;&lt;2)</div>
+<div class="line"><a name="l02390"></a><span class="lineno"><a class="line" href="a00206.html#gga9d80f08eb25b7ac22f1b998dc8bf521faa95d6985e36ec1e55f68b210297a85cb"> 2390</a></span>&#160;};</div>
+<div class="line"><a name="l02391"></a><span class="lineno"> 2391</span>&#160; </div>
+<div class="line"><a name="l02416"></a><span class="lineno"><a class="line" href="a00206.html#ga6db81ed13ac0a9d70cc80372ab537815"> 2416</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00206.html#ga6db81ed13ac0a9d70cc80372ab537815">hwloc_topology_restrict</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> __hwloc_restrict topology, <a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
+<div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>&#160; </div>
+<div class="line"><a name="l02419"></a><span class="lineno"><a class="line" href="a00206.html#ga38b1be3922094d880f6e76bf56c973d6"> 2419</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00206.html#ga38b1be3922094d880f6e76bf56c973d6">hwloc_allow_flags_e</a> {</div>
+<div class="line"><a name="l02424"></a><span class="lineno"><a class="line" href="a00206.html#gga38b1be3922094d880f6e76bf56c973d6aca107692455774f9d323d21b8abfce72"> 2424</a></span>&#160;  <a class="code" href="a00206.html#gga38b1be3922094d880f6e76bf56c973d6aca107692455774f9d323d21b8abfce72">HWLOC_ALLOW_FLAG_ALL</a> = (1UL&lt;&lt;0),</div>
+<div class="line"><a name="l02425"></a><span class="lineno"> 2425</span>&#160; </div>
+<div class="line"><a name="l02433"></a><span class="lineno"><a class="line" href="a00206.html#gga38b1be3922094d880f6e76bf56c973d6a88c50088c09dcf1e1a496c0817556fb9"> 2433</a></span>&#160;  <a class="code" href="a00206.html#gga38b1be3922094d880f6e76bf56c973d6a88c50088c09dcf1e1a496c0817556fb9">HWLOC_ALLOW_FLAG_LOCAL_RESTRICTIONS</a> = (1UL&lt;&lt;1),</div>
+<div class="line"><a name="l02434"></a><span class="lineno"> 2434</span>&#160; </div>
+<div class="line"><a name="l02437"></a><span class="lineno"> 2437</span>&#160;  <a class="code" href="a00206.html#gga38b1be3922094d880f6e76bf56c973d6a489c8c1b67ce7e0b8cf7a665852760e1">HWLOC_ALLOW_FLAG_CUSTOM</a> = (1UL&lt;&lt;2)</div>
+<div class="line"><a name="l02438"></a><span class="lineno"><a class="line" href="a00206.html#gga38b1be3922094d880f6e76bf56c973d6a489c8c1b67ce7e0b8cf7a665852760e1"> 2438</a></span>&#160;};</div>
+<div class="line"><a name="l02439"></a><span class="lineno"> 2439</span>&#160; </div>
+<div class="line"><a name="l02455"></a><span class="lineno"><a class="line" href="a00206.html#gaf955b190c0299dcfb5bc985d777f92a1"> 2455</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00206.html#gaf955b190c0299dcfb5bc985d777f92a1">hwloc_topology_allow</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> __hwloc_restrict topology, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> cpuset, <a class="code" href="a00195.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> nodeset, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
+<div class="line"><a name="l02456"></a><span class="lineno"> 2456</span>&#160; </div>
+<div class="line"><a name="l02478"></a><span class="lineno"><a class="line" href="a00206.html#gad980782ade737900c5cf208946768c30"> 2478</a></span>&#160;HWLOC_DECLSPEC <a class="code" href="a00253.html">hwloc_obj_t</a> <a class="code" href="a00206.html#gad980782ade737900c5cf208946768c30">hwloc_topology_insert_misc_object</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00253.html">hwloc_obj_t</a> parent, <span class="keyword">const</span> <span class="keywordtype">char</span> *name);</div>
+<div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>&#160; </div>
+<div class="line"><a name="l02487"></a><span class="lineno"><a class="line" href="a00206.html#ga4cea4741165faf5323931a9ed8786ef7"> 2487</a></span>&#160;HWLOC_DECLSPEC <a class="code" href="a00253.html">hwloc_obj_t</a> <a class="code" href="a00206.html#ga4cea4741165faf5323931a9ed8786ef7">hwloc_topology_alloc_group_object</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology);</div>
+<div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>&#160; </div>
+<div class="line"><a name="l02535"></a><span class="lineno"><a class="line" href="a00206.html#ga1fc6012b3e1c249b83f48cb7bcacaa5b"> 2535</a></span>&#160;HWLOC_DECLSPEC <a class="code" href="a00253.html">hwloc_obj_t</a> <a class="code" href="a00206.html#ga1fc6012b3e1c249b83f48cb7bcacaa5b">hwloc_topology_insert_group_object</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00253.html">hwloc_obj_t</a> group);</div>
+<div class="line"><a name="l02536"></a><span class="lineno"> 2536</span>&#160; </div>
+<div class="line"><a name="l02546"></a><span class="lineno"><a class="line" href="a00206.html#gad458715d3335df44849216cc123d1055"> 2546</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00206.html#gad458715d3335df44849216cc123d1055">hwloc_obj_add_other_obj_sets</a>(<a class="code" href="a00253.html">hwloc_obj_t</a> dst, <a class="code" href="a00253.html">hwloc_obj_t</a> src);</div>
+<div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>&#160; </div>
+<div class="line"><a name="l02562"></a><span class="lineno"><a class="line" href="a00206.html#ga698ecd640d2b76742bba3829a145cd9a"> 2562</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00206.html#ga698ecd640d2b76742bba3829a145cd9a">hwloc_topology_refresh</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology);</div>
+<div class="line"><a name="l02563"></a><span class="lineno"> 2563</span>&#160; </div>
+<div class="line"><a name="l02568"></a><span class="lineno"> 2568</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
+<div class="line"><a name="l02570"></a><span class="lineno"> 2570</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l02571"></a><span class="lineno"> 2571</span>&#160; </div>
+<div class="line"><a name="l02572"></a><span class="lineno"> 2572</span>&#160; </div>
+<div class="line"><a name="l02573"></a><span class="lineno"> 2573</span>&#160;<span class="comment">/* high-level helpers */</span></div>
+<div class="line"><a name="l02574"></a><span class="lineno"> 2574</span>&#160;<span class="preprocessor">#include &quot;hwloc/helper.h&quot;</span></div>
+<div class="line"><a name="l02575"></a><span class="lineno"> 2575</span>&#160; </div>
+<div class="line"><a name="l02576"></a><span class="lineno"> 2576</span>&#160;<span class="comment">/* inline code of some functions above */</span></div>
+<div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>&#160;<span class="preprocessor">#include &quot;hwloc/inlines.h&quot;</span></div>
+<div class="line"><a name="l02578"></a><span class="lineno"> 2578</span>&#160; </div>
+<div class="line"><a name="l02579"></a><span class="lineno"> 2579</span>&#160;<span class="comment">/* memory attributes */</span></div>
+<div class="line"><a name="l02580"></a><span class="lineno"> 2580</span>&#160;<span class="preprocessor">#include &quot;hwloc/memattrs.h&quot;</span></div>
+<div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>&#160; </div>
+<div class="line"><a name="l02582"></a><span class="lineno"> 2582</span>&#160;<span class="comment">/* kinds of CPU cores */</span></div>
+<div class="line"><a name="l02583"></a><span class="lineno"> 2583</span>&#160;<span class="preprocessor">#include &quot;hwloc/cpukinds.h&quot;</span></div>
+<div class="line"><a name="l02584"></a><span class="lineno"> 2584</span>&#160; </div>
+<div class="line"><a name="l02585"></a><span class="lineno"> 2585</span>&#160;<span class="comment">/* exporting to XML or synthetic */</span></div>
+<div class="line"><a name="l02586"></a><span class="lineno"> 2586</span>&#160;<span class="preprocessor">#include &quot;hwloc/export.h&quot;</span></div>
+<div class="line"><a name="l02587"></a><span class="lineno"> 2587</span>&#160; </div>
+<div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>&#160;<span class="comment">/* distances */</span></div>
+<div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>&#160;<span class="preprocessor">#include &quot;hwloc/distances.h&quot;</span></div>
+<div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>&#160; </div>
+<div class="line"><a name="l02591"></a><span class="lineno"> 2591</span>&#160;<span class="comment">/* topology diffs */</span></div>
+<div class="line"><a name="l02592"></a><span class="lineno"> 2592</span>&#160;<span class="preprocessor">#include &quot;hwloc/diff.h&quot;</span></div>
+<div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>&#160; </div>
+<div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>&#160;<span class="comment">/* deprecated headers */</span></div>
+<div class="line"><a name="l02595"></a><span class="lineno"> 2595</span>&#160;<span class="preprocessor">#include &quot;hwloc/deprecated.h&quot;</span></div>
+<div class="line"><a name="l02596"></a><span class="lineno"> 2596</span>&#160; </div>
+<div class="line"><a name="l02597"></a><span class="lineno"> 2597</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_H */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="aa00194_html_ga9c0b50c98add1adf57ed1ce85bb5190d"><div class="ttname"><a href="a00194.html#ga9c0b50c98add1adf57ed1ce85bb5190d">hwloc_get_api_version</a></div><div class="ttdeci">unsigned hwloc_get_api_version(void)</div><div class="ttdoc">Indicate at runtime which hwloc API version was used at build time.</div></div>
+<div class="ttc" id="aa00195_html_ga1f784433e9b606261f62d1134f6a3b25"><div class="ttname"><a href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a></div><div class="ttdeci">hwloc_const_bitmap_t hwloc_const_cpuset_t</div><div class="ttdoc">A non-modifiable hwloc_cpuset_t.</div><div class="ttdef"><b>Definition:</b> hwloc.h:142</div></div>
+<div class="ttc" id="aa00195_html_ga2f5276235841ad66a79bedad16a5a10c"><div class="ttname"><a href="a00195.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a></div><div class="ttdeci">hwloc_const_bitmap_t hwloc_const_nodeset_t</div><div class="ttdoc">A non-modifiable hwloc_nodeset_t.</div><div class="ttdef"><b>Definition:</b> hwloc.h:160</div></div>
+<div class="ttc" id="aa00195_html_ga37e35730fa7e775b5bb0afe893d6d508"><div class="ttname"><a href="a00195.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_nodeset_t</div><div class="ttdoc">A node set is a bitmap whose bits are set according to NUMA memory node physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:157</div></div>
+<div class="ttc" id="aa00195_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
+<div class="ttc" id="aa00196_html_ga1820ea0dfd8e9dca28f9ea7624df5ae2"><div class="ttname"><a href="a00196.html#ga1820ea0dfd8e9dca28f9ea7624df5ae2">hwloc_compare_types</a></div><div class="ttdeci">int hwloc_compare_types(hwloc_obj_type_t type1, hwloc_obj_type_t type2)</div><div class="ttdoc">Compare the depth of two object types.</div></div>
+<div class="ttc" id="aa00196_html_ga48a4803c72574191d7ead1c62aaf9860"><div class="ttname"><a href="a00196.html#ga48a4803c72574191d7ead1c62aaf9860">hwloc_obj_bridge_type_e</a></div><div class="ttdeci">hwloc_obj_bridge_type_e</div><div class="ttdoc">Type of one side (upstream or downstream) of an I/O bridge.</div><div class="ttdef"><b>Definition:</b> hwloc.h:333</div></div>
+<div class="ttc" id="aa00196_html_ga552ec74296a024237f474acec98694c0"><div class="ttname"><a href="a00196.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a></div><div class="ttdeci">enum hwloc_obj_cache_type_e hwloc_obj_cache_type_t</div><div class="ttdoc">Cache type.</div></div>
+<div class="ttc" id="aa00196_html_ga64f5d539df299c97ae80ce53fc4b56c0"><div class="ttname"><a href="a00196.html#ga64f5d539df299c97ae80ce53fc4b56c0">hwloc_obj_osdev_type_e</a></div><div class="ttdeci">hwloc_obj_osdev_type_e</div><div class="ttdoc">Type of a OS device.</div><div class="ttdef"><b>Definition:</b> hwloc.h:339</div></div>
+<div class="ttc" id="aa00196_html_ga791c9875c8fe20f3e1e5871e0657e59b"><div class="ttname"><a href="a00196.html#ga791c9875c8fe20f3e1e5871e0657e59b">hwloc_obj_cache_type_e</a></div><div class="ttdeci">hwloc_obj_cache_type_e</div><div class="ttdoc">Cache type.</div><div class="ttdef"><b>Definition:</b> hwloc.h:326</div></div>
+<div class="ttc" id="aa00196_html_gaa9a6941ef7b1c169412518d7ef71b3d2"><div class="ttname"><a href="a00196.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a></div><div class="ttdeci">enum hwloc_obj_osdev_type_e hwloc_obj_osdev_type_t</div><div class="ttdoc">Type of a OS device.</div></div>
+<div class="ttc" id="aa00196_html_gab34362c7a23296c3f12c5756747abda3"><div class="ttname"><a href="a00196.html#gab34362c7a23296c3f12c5756747abda3">hwloc_obj_bridge_type_t</a></div><div class="ttdeci">enum hwloc_obj_bridge_type_e hwloc_obj_bridge_type_t</div><div class="ttdoc">Type of one side (upstream or downstream) of an I/O bridge.</div></div>
+<div class="ttc" id="aa00196_html_gacd37bb612667dc437d66bfb175a8dc55"><div class="ttname"><a href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a></div><div class="ttdeci">hwloc_obj_type_t</div><div class="ttdoc">Type of topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:176</div></div>
+<div class="ttc" id="aa00196_html_gga48a4803c72574191d7ead1c62aaf9860a2c7660f3864ad2810c1e72aad285e574"><div class="ttname"><a href="a00196.html#gga48a4803c72574191d7ead1c62aaf9860a2c7660f3864ad2810c1e72aad285e574">HWLOC_OBJ_BRIDGE_HOST</a></div><div class="ttdeci">@ HWLOC_OBJ_BRIDGE_HOST</div><div class="ttdoc">Host-side of a bridge, only possible upstream.</div><div class="ttdef"><b>Definition:</b> hwloc.h:334</div></div>
+<div class="ttc" id="aa00196_html_gga48a4803c72574191d7ead1c62aaf9860a8f3b4cecf3dab6073d74696d10863c60"><div class="ttname"><a href="a00196.html#gga48a4803c72574191d7ead1c62aaf9860a8f3b4cecf3dab6073d74696d10863c60">HWLOC_OBJ_BRIDGE_PCI</a></div><div class="ttdeci">@ HWLOC_OBJ_BRIDGE_PCI</div><div class="ttdoc">PCI-side of a bridge.</div><div class="ttdef"><b>Definition:</b> hwloc.h:335</div></div>
+<div class="ttc" id="aa00196_html_gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83"><div class="ttname"><a href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83">HWLOC_OBJ_OSDEV_COPROC</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_COPROC</div><div class="ttdoc">Operating system co-processor device. For instance &quot;opencl0d0&quot; for a OpenCL device,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:353</div></div>
+<div class="ttc" id="aa00196_html_gga64f5d539df299c97ae80ce53fc4b56c0a52157d03694fdae82dddd57ca8c973b6"><div class="ttname"><a href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0a52157d03694fdae82dddd57ca8c973b6">HWLOC_OBJ_OSDEV_OPENFABRICS</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_OPENFABRICS</div><div class="ttdoc">Operating system openfabrics device. For instance the &quot;mlx4_0&quot; InfiniBand HCA, &quot;hfi1_0&quot; Omni-Path int...</div><div class="ttdef"><b>Definition:</b> hwloc.h:347</div></div>
+<div class="ttc" id="aa00196_html_gga64f5d539df299c97ae80ce53fc4b56c0a689b0488c3c0d08d116751c6b9cb8871"><div class="ttname"><a href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0a689b0488c3c0d08d116751c6b9cb8871">HWLOC_OBJ_OSDEV_BLOCK</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_BLOCK</div><div class="ttdoc">Operating system block device, or non-volatile memory device. For instance &quot;sda&quot; or &quot;dax2....</div><div class="ttdef"><b>Definition:</b> hwloc.h:340</div></div>
+<div class="ttc" id="aa00196_html_gga64f5d539df299c97ae80ce53fc4b56c0a827ad1643360711a8b6c6af671366791"><div class="ttname"><a href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0a827ad1643360711a8b6c6af671366791">HWLOC_OBJ_OSDEV_DMA</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_DMA</div><div class="ttdoc">Operating system dma engine device. For instance the &quot;dma0chan0&quot; DMA channel on Linux.</div><div class="ttdef"><b>Definition:</b> hwloc.h:351</div></div>
+<div class="ttc" id="aa00196_html_gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90"><div class="ttname"><a href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_GPU</div><div class="ttdoc">Operating system GPU device. For instance &quot;:0.0&quot; for a GL display, &quot;card0&quot; for a Linux DRM device.</div><div class="ttdef"><b>Definition:</b> hwloc.h:342</div></div>
+<div class="ttc" id="aa00196_html_gga64f5d539df299c97ae80ce53fc4b56c0ab715d81155f771573c8682dffc65021b"><div class="ttname"><a href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0ab715d81155f771573c8682dffc65021b">HWLOC_OBJ_OSDEV_NETWORK</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_NETWORK</div><div class="ttdoc">Operating system network device. For instance the &quot;eth0&quot; interface on Linux.</div><div class="ttdef"><b>Definition:</b> hwloc.h:345</div></div>
+<div class="ttc" id="aa00196_html_gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a"><div class="ttname"><a href="a00196.html#gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a">HWLOC_OBJ_CACHE_UNIFIED</a></div><div class="ttdeci">@ HWLOC_OBJ_CACHE_UNIFIED</div><div class="ttdoc">Unified cache.</div><div class="ttdef"><b>Definition:</b> hwloc.h:327</div></div>
+<div class="ttc" id="aa00196_html_gga791c9875c8fe20f3e1e5871e0657e59ba6f98b0d422b38ba90c5f5c79a11b0658"><div class="ttname"><a href="a00196.html#gga791c9875c8fe20f3e1e5871e0657e59ba6f98b0d422b38ba90c5f5c79a11b0658">HWLOC_OBJ_CACHE_INSTRUCTION</a></div><div class="ttdeci">@ HWLOC_OBJ_CACHE_INSTRUCTION</div><div class="ttdoc">Instruction cache (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:329</div></div>
+<div class="ttc" id="aa00196_html_gga791c9875c8fe20f3e1e5871e0657e59bacac60ecad4206f85aeb79bef1604b488"><div class="ttname"><a href="a00196.html#gga791c9875c8fe20f3e1e5871e0657e59bacac60ecad4206f85aeb79bef1604b488">HWLOC_OBJ_CACHE_DATA</a></div><div class="ttdeci">@ HWLOC_OBJ_CACHE_DATA</div><div class="ttdoc">Data cache.</div><div class="ttdef"><b>Definition:</b> hwloc.h:328</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55a0ed5bd98974729a0c476c39e917dabd6"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a0ed5bd98974729a0c476c39e917dabd6">HWLOC_OBJ_MEMCACHE</a></div><div class="ttdeci">@ HWLOC_OBJ_MEMCACHE</div><div class="ttdoc">Memory-side cache (filtered out by default). A cache in front of a specific NUMA node.</div><div class="ttdef"><b>Definition:</b> hwloc.h:305</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55a10713b7e561b8cc32544cd31b1c17f8d"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a10713b7e561b8cc32544cd31b1c17f8d">HWLOC_OBJ_L2ICACHE</a></div><div class="ttdeci">@ HWLOC_OBJ_L2ICACHE</div><div class="ttdoc">Level 2 instruction Cache (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:220</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55a18f61d19fe9f4bcea978fcc68bc078fb"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a18f61d19fe9f4bcea978fcc68bc078fb">HWLOC_OBJ_L2CACHE</a></div><div class="ttdeci">@ HWLOC_OBJ_L2CACHE</div><div class="ttdoc">Level 2 Data (or Unified) Cache.</div><div class="ttdef"><b>Definition:</b> hwloc.h:214</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d">HWLOC_OBJ_MISC</a></div><div class="ttdeci">@ HWLOC_OBJ_MISC</div><div class="ttdoc">Miscellaneous objects (filtered out by default). Objects without particular meaning,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:290</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55a25fae0e0514c90e3973a29866a5a837d"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a25fae0e0514c90e3973a29866a5a837d">HWLOC_OBJ_L3CACHE</a></div><div class="ttdeci">@ HWLOC_OBJ_L3CACHE</div><div class="ttdoc">Level 3 Data (or Unified) Cache.</div><div class="ttdef"><b>Definition:</b> hwloc.h:215</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55a3f4e83ffc4a259354959ae8a9eaa2a80"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a3f4e83ffc4a259354959ae8a9eaa2a80">HWLOC_OBJ_MACHINE</a></div><div class="ttdeci">@ HWLOC_OBJ_MACHINE</div><div class="ttdoc">Machine. A set of processors and memory with cache coherency.</div><div class="ttdef"><b>Definition:</b> hwloc.h:182</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075">HWLOC_OBJ_OS_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_OS_DEVICE</div><div class="ttdoc">Operating system device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:279</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56">HWLOC_OBJ_GROUP</a></div><div class="ttdeci">@ HWLOC_OBJ_GROUP</div><div class="ttdoc">Group objects. Objects which do not fit in the above but are detected by hwloc and are useful to take...</div><div class="ttdef"><b>Definition:</b> hwloc.h:223</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55a54923bfa13df9d7e6d6dd0d5baff5f72"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a54923bfa13df9d7e6d6dd0d5baff5f72">HWLOC_OBJ_L4CACHE</a></div><div class="ttdeci">@ HWLOC_OBJ_L4CACHE</div><div class="ttdoc">Level 4 Data (or Unified) Cache.</div><div class="ttdef"><b>Definition:</b> hwloc.h:216</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55a56389b8eb2e2f74f288bb657c4e72140"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a56389b8eb2e2f74f288bb657c4e72140">HWLOC_OBJ_L1CACHE</a></div><div class="ttdeci">@ HWLOC_OBJ_L1CACHE</div><div class="ttdoc">Level 1 Data (or Unified) Cache.</div><div class="ttdef"><b>Definition:</b> hwloc.h:213</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_PCI_DEVICE</div><div class="ttdoc">PCI device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:269</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55a67194c9de5e3e581c64c11d2eb1c109d"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a67194c9de5e3e581c64c11d2eb1c109d">HWLOC_OBJ_L5CACHE</a></div><div class="ttdeci">@ HWLOC_OBJ_L5CACHE</div><div class="ttdoc">Level 5 Data (or Unified) Cache.</div><div class="ttdef"><b>Definition:</b> hwloc.h:217</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0">HWLOC_OBJ_BRIDGE</a></div><div class="ttdeci">@ HWLOC_OBJ_BRIDGE</div><div class="ttdoc">Bridge (filtered out by default). Any bridge (or PCI switch) that connects the host or an I/O bus,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:257</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a></div><div class="ttdeci">@ HWLOC_OBJ_NUMANODE</div><div class="ttdoc">NUMA node. An object that contains memory that is directly and byte-accessible to the host processors...</div><div class="ttdef"><b>Definition:</b> hwloc.h:236</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55ab16ab8c0dbffc234921d86f3dfb63129"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55ab16ab8c0dbffc234921d86f3dfb63129">HWLOC_OBJ_PACKAGE</a></div><div class="ttdeci">@ HWLOC_OBJ_PACKAGE</div><div class="ttdoc">Physical package. The physical package that usually gets inserted into a socket on the motherboard....</div><div class="ttdef"><b>Definition:</b> hwloc.h:191</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661">HWLOC_OBJ_PU</a></div><div class="ttdeci">@ HWLOC_OBJ_PU</div><div class="ttdoc">Processing Unit, or (Logical) Processor. An execution unit (may share a core with some other logical ...</div><div class="ttdef"><b>Definition:</b> hwloc.h:201</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55ac22850c717f07bf7ffb316fadd08d218"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55ac22850c717f07bf7ffb316fadd08d218">HWLOC_OBJ_L3ICACHE</a></div><div class="ttdeci">@ HWLOC_OBJ_L3ICACHE</div><div class="ttdoc">Level 3 instruction Cache (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:221</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55ac793958f330bca371aa1535de8aff45f"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55ac793958f330bca371aa1535de8aff45f">HWLOC_OBJ_CORE</a></div><div class="ttdeci">@ HWLOC_OBJ_CORE</div><div class="ttdoc">Core. A computation unit (may be shared by several PUs, aka logical processors).</div><div class="ttdef"><b>Definition:</b> hwloc.h:197</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55af78bb6cde53aaaaa162a7dc420c409da"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55af78bb6cde53aaaaa162a7dc420c409da">HWLOC_OBJ_DIE</a></div><div class="ttdeci">@ HWLOC_OBJ_DIE</div><div class="ttdoc">Die within a physical package. A subpart of the physical package, that contains multiple cores.</div><div class="ttdef"><b>Definition:</b> hwloc.h:318</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55afa834a85d9e53836cf0db6d0bd8329b4"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55afa834a85d9e53836cf0db6d0bd8329b4">HWLOC_OBJ_L1ICACHE</a></div><div class="ttdeci">@ HWLOC_OBJ_L1ICACHE</div><div class="ttdoc">Level 1 instruction Cache (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:219</div></div>
+<div class="ttc" id="aa00197_html_ga79b8ab56877ef99ac59b833203391c7d"><div class="ttname"><a href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a></div><div class="ttdeci">struct hwloc_obj * hwloc_obj_t</div><div class="ttdoc">Convenience typedef; a pointer to a struct hwloc_obj.</div><div class="ttdef"><b>Definition:</b> hwloc.h:596</div></div>
+<div class="ttc" id="aa00198_html_ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa"><div class="ttname"><a href="a00198.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa">hwloc_topology_init</a></div><div class="ttdeci">int hwloc_topology_init(hwloc_topology_t *topologyp)</div><div class="ttdoc">Allocate a topology context.</div></div>
+<div class="ttc" id="aa00198_html_ga0647ae66458fe68172eb5a320042f870"><div class="ttname"><a href="a00198.html#ga0647ae66458fe68172eb5a320042f870">hwloc_topology_abi_check</a></div><div class="ttdeci">int hwloc_topology_abi_check(hwloc_topology_t topology)</div><div class="ttdoc">Verify that the topology is compatible with the current hwloc library.</div></div>
+<div class="ttc" id="aa00198_html_ga62a161fc5e6f120344dc69a7bee4e587"><div class="ttname"><a href="a00198.html#ga62a161fc5e6f120344dc69a7bee4e587">hwloc_topology_dup</a></div><div class="ttdeci">int hwloc_topology_dup(hwloc_topology_t *newtopology, hwloc_topology_t oldtopology)</div><div class="ttdoc">Duplicate a topology.</div></div>
+<div class="ttc" id="aa00198_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:692</div></div>
+<div class="ttc" id="aa00198_html_ga9f34a640b6fd28d23699d4d084667b15"><div class="ttname"><a href="a00198.html#ga9f34a640b6fd28d23699d4d084667b15">hwloc_topology_destroy</a></div><div class="ttdeci">void hwloc_topology_destroy(hwloc_topology_t topology)</div><div class="ttdoc">Terminate and free a topology context.</div></div>
+<div class="ttc" id="aa00198_html_gabdf58d87ad77f6615fccdfe0535ff826"><div class="ttname"><a href="a00198.html#gabdf58d87ad77f6615fccdfe0535ff826">hwloc_topology_load</a></div><div class="ttdeci">int hwloc_topology_load(hwloc_topology_t topology)</div><div class="ttdoc">Build the actual topology.</div></div>
+<div class="ttc" id="aa00198_html_gaf6746bc3a558ef1ac8348b4491d091b5"><div class="ttname"><a href="a00198.html#gaf6746bc3a558ef1ac8348b4491d091b5">hwloc_topology_check</a></div><div class="ttdeci">void hwloc_topology_check(hwloc_topology_t topology)</div><div class="ttdoc">Run internal checks on a topology structure.</div></div>
+<div class="ttc" id="aa00199_html_ga1d5ceafe8130fe6e8657bf0bc666ba50"><div class="ttname"><a href="a00199.html#ga1d5ceafe8130fe6e8657bf0bc666ba50">hwloc_get_nbobjs_by_depth</a></div><div class="ttdeci">unsigned hwloc_get_nbobjs_by_depth(hwloc_topology_t topology, int depth)</div><div class="ttdoc">Returns the width of level at depth depth.</div></div>
+<div class="ttc" id="aa00199_html_ga2d4b12fc187dfc53b35f2fa21d21044d"><div class="ttname"><a href="a00199.html#ga2d4b12fc187dfc53b35f2fa21d21044d">hwloc_get_root_obj</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_root_obj(hwloc_topology_t topology)</div><div class="ttdoc">Returns the top-object of the topology-tree.</div></div>
+<div class="ttc" id="aa00199_html_ga391f6b2613f0065673eaa4069b93d4e0"><div class="ttname"><a href="a00199.html#ga391f6b2613f0065673eaa4069b93d4e0">hwloc_get_obj_by_depth</a></div><div class="ttdeci">hwloc_obj_t hwloc_get_obj_by_depth(hwloc_topology_t topology, int depth, unsigned idx)</div><div class="ttdoc">Returns the topology object at logical index idx from depth depth.</div></div>
+<div class="ttc" id="aa00199_html_ga506b0682b98aa264d53e934d2e9badb0"><div class="ttname"><a href="a00199.html#ga506b0682b98aa264d53e934d2e9badb0">hwloc_get_depth_type</a></div><div class="ttdeci">hwloc_obj_type_t hwloc_get_depth_type(hwloc_topology_t topology, int depth)</div><div class="ttdoc">Returns the type of objects at depth depth.</div></div>
+<div class="ttc" id="aa00199_html_ga6f414dd80a2b943967a0ac92da3181a2"><div class="ttname"><a href="a00199.html#ga6f414dd80a2b943967a0ac92da3181a2">hwloc_get_obj_by_type</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_obj_by_type(hwloc_topology_t topology, hwloc_obj_type_t type, unsigned idx)</div><div class="ttdoc">Returns the topology object at logical index idx with type type.</div></div>
+<div class="ttc" id="aa00199_html_ga759e88eaf5a230ad283e9d4c42486735"><div class="ttname"><a href="a00199.html#ga759e88eaf5a230ad283e9d4c42486735">hwloc_get_next_obj_by_type</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_obj_by_type(hwloc_topology_t topology, hwloc_obj_type_t type, hwloc_obj_t prev)</div><div class="ttdoc">Returns the next object of type type.</div></div>
+<div class="ttc" id="aa00199_html_ga789a3f65aedff644be64a18526a03065"><div class="ttname"><a href="a00199.html#ga789a3f65aedff644be64a18526a03065">hwloc_get_nbobjs_by_type</a></div><div class="ttdeci">static int hwloc_get_nbobjs_by_type(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Returns the width of level type type.</div></div>
+<div class="ttc" id="aa00199_html_ga8125328e69eba709c33ea8055c12589b"><div class="ttname"><a href="a00199.html#ga8125328e69eba709c33ea8055c12589b">hwloc_get_type_or_below_depth</a></div><div class="ttdeci">static int hwloc_get_type_or_below_depth(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Returns the depth of objects of type type or below.</div></div>
+<div class="ttc" id="aa00199_html_ga8a9ee573b7d2190272095d10712a7cca"><div class="ttname"><a href="a00199.html#ga8a9ee573b7d2190272095d10712a7cca">hwloc_get_type_or_above_depth</a></div><div class="ttdeci">static int hwloc_get_type_or_above_depth(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Returns the depth of objects of type type or above.</div></div>
+<div class="ttc" id="aa00199_html_ga8bec782e21be313750da70cf7428b374"><div class="ttname"><a href="a00199.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a></div><div class="ttdeci">int hwloc_get_type_depth(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Returns the depth of objects of type type.</div></div>
+<div class="ttc" id="aa00199_html_gac140a9b939d9fa0b30c4a910efcb0656"><div class="ttname"><a href="a00199.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_obj_by_depth(hwloc_topology_t topology, int depth, hwloc_obj_t prev)</div><div class="ttdoc">Returns the next object at depth depth.</div></div>
+<div class="ttc" id="aa00199_html_gae54d1782ca9b54bea915f5c18a9158fa"><div class="ttname"><a href="a00199.html#gae54d1782ca9b54bea915f5c18a9158fa">hwloc_topology_get_depth</a></div><div class="ttdeci">int hwloc_topology_get_depth(hwloc_topology_t restrict topology)</div><div class="ttdoc">Get the depth of the hierarchical tree of objects.</div></div>
+<div class="ttc" id="aa00199_html_gae85786340b88e24835f8c403a1e2e54b"><div class="ttname"><a href="a00199.html#gae85786340b88e24835f8c403a1e2e54b">hwloc_get_memory_parents_depth</a></div><div class="ttdeci">int hwloc_get_memory_parents_depth(hwloc_topology_t topology)</div><div class="ttdoc">Return the depth of parents where memory objects are attached.</div></div>
+<div class="ttc" id="aa00199_html_gaf4e663cf42bbe20756b849c6293ef575"><div class="ttname"><a href="a00199.html#gaf4e663cf42bbe20756b849c6293ef575">hwloc_get_type_depth_e</a></div><div class="ttdeci">hwloc_get_type_depth_e</div><div class="ttdef"><b>Definition:</b> hwloc.h:821</div></div>
+<div class="ttc" id="aa00199_html_ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad"><div class="ttname"><a href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_UNKNOWN</div><div class="ttdoc">No object of given type exists in the topology.</div><div class="ttdef"><b>Definition:</b> hwloc.h:822</div></div>
+<div class="ttc" id="aa00199_html_ggaf4e663cf42bbe20756b849c6293ef575a245c34ec9884c2cf5de5049b2153ed9c"><div class="ttname"><a href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a245c34ec9884c2cf5de5049b2153ed9c">HWLOC_TYPE_DEPTH_NUMANODE</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_NUMANODE</div><div class="ttdoc">Virtual depth for NUMA nodes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:824</div></div>
+<div class="ttc" id="aa00199_html_ggaf4e663cf42bbe20756b849c6293ef575a8b8d7d300c018c0eb65e6c9a9f162101"><div class="ttname"><a href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a8b8d7d300c018c0eb65e6c9a9f162101">HWLOC_TYPE_DEPTH_MEMCACHE</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_MEMCACHE</div><div class="ttdoc">Virtual depth for MemCache object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:829</div></div>
+<div class="ttc" id="aa00199_html_ggaf4e663cf42bbe20756b849c6293ef575a96436a392b4cdcaa1a29bc65351b373f"><div class="ttname"><a href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a96436a392b4cdcaa1a29bc65351b373f">HWLOC_TYPE_DEPTH_MISC</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_MISC</div><div class="ttdoc">Virtual depth for Misc object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:828</div></div>
+<div class="ttc" id="aa00199_html_ggaf4e663cf42bbe20756b849c6293ef575ad8b1516e699b57ce1c8d107fbd2f674c"><div class="ttname"><a href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575ad8b1516e699b57ce1c8d107fbd2f674c">HWLOC_TYPE_DEPTH_PCI_DEVICE</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_PCI_DEVICE</div><div class="ttdoc">Virtual depth for PCI device object level.</div><div class="ttdef"><b>Definition:</b> hwloc.h:826</div></div>
+<div class="ttc" id="aa00199_html_ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c"><div class="ttname"><a href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_MULTIPLE</div><div class="ttdoc">Objects of given type exist at different depth in the topology (only for Groups).</div><div class="ttdef"><b>Definition:</b> hwloc.h:823</div></div>
+<div class="ttc" id="aa00199_html_ggaf4e663cf42bbe20756b849c6293ef575af93b50182973e4a718d9d4db9e253a90"><div class="ttname"><a href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575af93b50182973e4a718d9d4db9e253a90">HWLOC_TYPE_DEPTH_BRIDGE</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_BRIDGE</div><div class="ttdoc">Virtual depth for bridge object level.</div><div class="ttdef"><b>Definition:</b> hwloc.h:825</div></div>
+<div class="ttc" id="aa00199_html_ggaf4e663cf42bbe20756b849c6293ef575afe9a2131073eebbe129d4aa2928d3f46"><div class="ttname"><a href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575afe9a2131073eebbe129d4aa2928d3f46">HWLOC_TYPE_DEPTH_OS_DEVICE</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_OS_DEVICE</div><div class="ttdoc">Virtual depth for software device object level.</div><div class="ttdef"><b>Definition:</b> hwloc.h:827</div></div>
+<div class="ttc" id="aa00200_html_ga510f21b066fba2dab12b8c9b173b1dfd"><div class="ttname"><a href="a00200.html#ga510f21b066fba2dab12b8c9b173b1dfd">hwloc_type_sscanf</a></div><div class="ttdeci">int hwloc_type_sscanf(const char *string, hwloc_obj_type_t *typep, union hwloc_obj_attr_u *attrp, size_t attrsize)</div><div class="ttdoc">Return an object type and attributes from a type string.</div></div>
+<div class="ttc" id="aa00200_html_ga52c63cd7203e55b804c1314affc9bd12"><div class="ttname"><a href="a00200.html#ga52c63cd7203e55b804c1314affc9bd12">hwloc_type_sscanf_as_depth</a></div><div class="ttdeci">int hwloc_type_sscanf_as_depth(const char *string, hwloc_obj_type_t *typep, hwloc_topology_t topology, int *depthp)</div><div class="ttdoc">Return an object type and its level depth from a type string.</div></div>
+<div class="ttc" id="aa00200_html_ga5ca0bf94bbbb080d0eff17a57bd90422"><div class="ttname"><a href="a00200.html#ga5ca0bf94bbbb080d0eff17a57bd90422">hwloc_obj_type_string</a></div><div class="ttdeci">const char * hwloc_obj_type_string(hwloc_obj_type_t type)</div><div class="ttdoc">Return a constant stringified object type.</div></div>
+<div class="ttc" id="aa00200_html_ga870e876931c282a1c7aee2f031912ce3"><div class="ttname"><a href="a00200.html#ga870e876931c282a1c7aee2f031912ce3">hwloc_obj_attr_snprintf</a></div><div class="ttdeci">int hwloc_obj_attr_snprintf(char *restrict string, size_t size, hwloc_obj_t obj, const char *restrict separator, int verbose)</div><div class="ttdoc">Stringify the attributes of a given topology object into a human-readable form.</div></div>
+<div class="ttc" id="aa00200_html_gadb8765c260edea80c52cd06a76639ba4"><div class="ttname"><a href="a00200.html#gadb8765c260edea80c52cd06a76639ba4">hwloc_obj_type_snprintf</a></div><div class="ttdeci">int hwloc_obj_type_snprintf(char *restrict string, size_t size, hwloc_obj_t obj, int verbose)</div><div class="ttdoc">Stringify the type of a given topology object into a human-readable form.</div></div>
+<div class="ttc" id="aa00201_html_gab358661a92bb27d8542b255cc9f6f25e"><div class="ttname"><a href="a00201.html#gab358661a92bb27d8542b255cc9f6f25e">hwloc_obj_get_info_by_name</a></div><div class="ttdeci">static const char * hwloc_obj_get_info_by_name(hwloc_obj_t obj, const char *name)</div><div class="ttdoc">Search the given key name in object infos and return the corresponding value.</div></div>
+<div class="ttc" id="aa00201_html_gace7654bb8a9002caae1a4b8a59e7452e"><div class="ttname"><a href="a00201.html#gace7654bb8a9002caae1a4b8a59e7452e">hwloc_obj_add_info</a></div><div class="ttdeci">int hwloc_obj_add_info(hwloc_obj_t obj, const char *name, const char *value)</div><div class="ttdoc">Add the given info name and value pair to the given object.</div></div>
+<div class="ttc" id="aa00202_html_ga217dc8d373f8958cc93c154ebce1c71c"><div class="ttname"><a href="a00202.html#ga217dc8d373f8958cc93c154ebce1c71c">hwloc_cpubind_flags_t</a></div><div class="ttdeci">hwloc_cpubind_flags_t</div><div class="ttdoc">Process/Thread binding flags.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1155</div></div>
+<div class="ttc" id="aa00202_html_ga296db8a3c6d49b51fb83d6f3e45c02a6"><div class="ttname"><a href="a00202.html#ga296db8a3c6d49b51fb83d6f3e45c02a6">hwloc_set_proc_cpubind</a></div><div class="ttdeci">int hwloc_set_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t set, int flags)</div><div class="ttdoc">Bind a process pid on CPUs given in physical bitmap set.</div></div>
+<div class="ttc" id="aa00202_html_ga80bc07473a8edf840cae17bd7ec21d48"><div class="ttname"><a href="a00202.html#ga80bc07473a8edf840cae17bd7ec21d48">hwloc_set_cpubind</a></div><div class="ttdeci">int hwloc_set_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t set, int flags)</div><div class="ttdoc">Bind current process or thread on CPUs given in physical bitmap set.</div></div>
+<div class="ttc" id="aa00202_html_ga910a05c2d47f68a3155bf176b50fa555"><div class="ttname"><a href="a00202.html#ga910a05c2d47f68a3155bf176b50fa555">hwloc_get_proc_last_cpu_location</a></div><div class="ttdeci">int hwloc_get_proc_last_cpu_location(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int flags)</div><div class="ttdoc">Get the last physical CPU where a process ran.</div></div>
+<div class="ttc" id="aa00202_html_gac82de91f788fa82dacf99c6e0d4b7158"><div class="ttname"><a href="a00202.html#gac82de91f788fa82dacf99c6e0d4b7158">hwloc_get_proc_cpubind</a></div><div class="ttdeci">int hwloc_get_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int flags)</div><div class="ttdoc">Get the current physical binding of process pid.</div></div>
+<div class="ttc" id="aa00202_html_gacba7ecb979baf824d5240fa2cb2a8be6"><div class="ttname"><a href="a00202.html#gacba7ecb979baf824d5240fa2cb2a8be6">hwloc_get_cpubind</a></div><div class="ttdeci">int hwloc_get_cpubind(hwloc_topology_t topology, hwloc_cpuset_t set, int flags)</div><div class="ttdoc">Get current process or thread binding.</div></div>
+<div class="ttc" id="aa00202_html_gae42c01b2addcfbf6048b9a516dd7a906"><div class="ttname"><a href="a00202.html#gae42c01b2addcfbf6048b9a516dd7a906">hwloc_set_thread_cpubind</a></div><div class="ttdeci">int hwloc_set_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t thread, hwloc_const_cpuset_t set, int flags)</div><div class="ttdoc">Bind a thread thread on CPUs given in physical bitmap set.</div></div>
+<div class="ttc" id="aa00202_html_gaf13f765642b5d0d9a9813e6bb043671b"><div class="ttname"><a href="a00202.html#gaf13f765642b5d0d9a9813e6bb043671b">hwloc_get_thread_cpubind</a></div><div class="ttdeci">int hwloc_get_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t thread, hwloc_cpuset_t set, int flags)</div><div class="ttdoc">Get the current physical binding of thread tid.</div></div>
+<div class="ttc" id="aa00202_html_gafdb374627358bf09203b5a4215b13032"><div class="ttname"><a href="a00202.html#gafdb374627358bf09203b5a4215b13032">hwloc_get_last_cpu_location</a></div><div class="ttdeci">int hwloc_get_last_cpu_location(hwloc_topology_t topology, hwloc_cpuset_t set, int flags)</div><div class="ttdoc">Get the last physical CPU where the current process or thread ran.</div></div>
+<div class="ttc" id="aa00202_html_gga217dc8d373f8958cc93c154ebce1c71ca2e0dd0128dac6b03408c7dd170477fdc"><div class="ttname"><a href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71ca2e0dd0128dac6b03408c7dd170477fdc">HWLOC_CPUBIND_PROCESS</a></div><div class="ttdeci">@ HWLOC_CPUBIND_PROCESS</div><div class="ttdoc">Bind all threads of the current (possibly) multithreaded process.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1158</div></div>
+<div class="ttc" id="aa00202_html_gga217dc8d373f8958cc93c154ebce1c71ca41ce440443cc3087caed95ab60edcad6"><div class="ttname"><a href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71ca41ce440443cc3087caed95ab60edcad6">HWLOC_CPUBIND_NOMEMBIND</a></div><div class="ttdeci">@ HWLOC_CPUBIND_NOMEMBIND</div><div class="ttdoc">Avoid any effect on memory binding.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1204</div></div>
+<div class="ttc" id="aa00202_html_gga217dc8d373f8958cc93c154ebce1c71ca679a7e0f0c7ee06b123565f90d98e7fa"><div class="ttname"><a href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71ca679a7e0f0c7ee06b123565f90d98e7fa">HWLOC_CPUBIND_STRICT</a></div><div class="ttdeci">@ HWLOC_CPUBIND_STRICT</div><div class="ttdoc">Request for strict binding from the OS.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1187</div></div>
+<div class="ttc" id="aa00202_html_gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421"><div class="ttname"><a href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421">HWLOC_CPUBIND_THREAD</a></div><div class="ttdeci">@ HWLOC_CPUBIND_THREAD</div><div class="ttdoc">Bind current thread of current process.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1162</div></div>
+<div class="ttc" id="aa00203_html_ga020951efa0ce3862bd4faec295501a7f"><div class="ttname"><a href="a00203.html#ga020951efa0ce3862bd4faec295501a7f">hwloc_set_membind</a></div><div class="ttdeci">int hwloc_set_membind(hwloc_topology_t topology, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</div><div class="ttdoc">Set the default memory binding policy of the current process or thread to prefer the NUMA node(s) spe...</div></div>
+<div class="ttc" id="aa00203_html_ga04736461780fadcf193af218c0122273"><div class="ttname"><a href="a00203.html#ga04736461780fadcf193af218c0122273">hwloc_alloc_membind</a></div><div class="ttdeci">void * hwloc_alloc_membind(hwloc_topology_t topology, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</div><div class="ttdoc">Allocate some memory on NUMA memory nodes specified by set.</div></div>
+<div class="ttc" id="aa00203_html_ga1730ceb18ec6ee3b7bd3d0db81f07dc8"><div class="ttname"><a href="a00203.html#ga1730ceb18ec6ee3b7bd3d0db81f07dc8">hwloc_get_proc_membind</a></div><div class="ttdeci">int hwloc_get_proc_membind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_bitmap_t set, hwloc_membind_policy_t *policy, int flags)</div><div class="ttdoc">Query the default memory binding policy and physical locality of the specified process.</div></div>
+<div class="ttc" id="aa00203_html_ga32dbd4f54e9e4a7179f2dde37ffe6ad7"><div class="ttname"><a href="a00203.html#ga32dbd4f54e9e4a7179f2dde37ffe6ad7">hwloc_free</a></div><div class="ttdeci">int hwloc_free(hwloc_topology_t topology, void *addr, size_t len)</div><div class="ttdoc">Free memory that was previously allocated by hwloc_alloc() or hwloc_alloc_membind().</div></div>
+<div class="ttc" id="aa00203_html_ga537c7508a4e2d1db05673ec5be6e805c"><div class="ttname"><a href="a00203.html#ga537c7508a4e2d1db05673ec5be6e805c">hwloc_get_area_memlocation</a></div><div class="ttdeci">int hwloc_get_area_memlocation(hwloc_topology_t topology, const void *addr, size_t len, hwloc_bitmap_t set, int flags)</div><div class="ttdoc">Get the NUMA nodes where memory identified by (addr, len ) is physically allocated.</div></div>
+<div class="ttc" id="aa00203_html_ga972b335a86a7d5e7b34bce2b243c41bc"><div class="ttname"><a href="a00203.html#ga972b335a86a7d5e7b34bce2b243c41bc">hwloc_alloc</a></div><div class="ttdeci">void * hwloc_alloc(hwloc_topology_t topology, size_t len)</div><div class="ttdoc">Allocate some memory.</div></div>
+<div class="ttc" id="aa00203_html_gaa87e0a6946ff145914fdf0b1c60567f8"><div class="ttname"><a href="a00203.html#gaa87e0a6946ff145914fdf0b1c60567f8">hwloc_get_area_membind</a></div><div class="ttdeci">int hwloc_get_area_membind(hwloc_topology_t topology, const void *addr, size_t len, hwloc_bitmap_t set, hwloc_membind_policy_t *policy, int flags)</div><div class="ttdoc">Query the CPUs near the physical NUMA node(s) and binding policy of the memory identified by (addr,...</div></div>
+<div class="ttc" id="aa00203_html_gab00475fd98815bf4fb9aaf752030e7d2"><div class="ttname"><a href="a00203.html#gab00475fd98815bf4fb9aaf752030e7d2">hwloc_membind_flags_t</a></div><div class="ttdeci">hwloc_membind_flags_t</div><div class="ttdoc">Memory binding flags.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1461</div></div>
+<div class="ttc" id="aa00203_html_gab1b77b8408bacaf03c7e8878f7577922"><div class="ttname"><a href="a00203.html#gab1b77b8408bacaf03c7e8878f7577922">hwloc_alloc_membind_policy</a></div><div class="ttdeci">static void * hwloc_alloc_membind_policy(hwloc_topology_t topology, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</div><div class="ttdoc">Allocate some memory on NUMA memory nodes specified by set.</div></div>
+<div class="ttc" id="aa00203_html_gabc91ff16f7e41047924e3a4ae6d9da7e"><div class="ttname"><a href="a00203.html#gabc91ff16f7e41047924e3a4ae6d9da7e">hwloc_set_proc_membind</a></div><div class="ttdeci">int hwloc_set_proc_membind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</div><div class="ttdoc">Set the default memory binding policy of the specified process to prefer the NUMA node(s) specified b...</div></div>
+<div class="ttc" id="aa00203_html_gac9764f79505775d06407b40f5e4661e8"><div class="ttname"><a href="a00203.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a></div><div class="ttdeci">hwloc_membind_policy_t</div><div class="ttdoc">Memory binding policy.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1398</div></div>
+<div class="ttc" id="aa00203_html_gae21f0a1a884929c784bebf070252aa56"><div class="ttname"><a href="a00203.html#gae21f0a1a884929c784bebf070252aa56">hwloc_get_membind</a></div><div class="ttdeci">int hwloc_get_membind(hwloc_topology_t topology, hwloc_bitmap_t set, hwloc_membind_policy_t *policy, int flags)</div><div class="ttdoc">Query the default memory binding policy and physical locality of the current process or thread.</div></div>
+<div class="ttc" id="aa00203_html_gaf881faefe20701229f07dd7dbd0125ed"><div class="ttname"><a href="a00203.html#gaf881faefe20701229f07dd7dbd0125ed">hwloc_set_area_membind</a></div><div class="ttdeci">int hwloc_set_area_membind(hwloc_topology_t topology, const void *addr, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</div><div class="ttdoc">Bind the already-allocated memory identified by (addr, len) to the NUMA node(s) specified by set.</div></div>
+<div class="ttc" id="aa00203_html_ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6"><div class="ttname"><a href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a></div><div class="ttdeci">@ HWLOC_MEMBIND_STRICT</div><div class="ttdef"><b>Definition:</b> hwloc.h:1479</div></div>
+<div class="ttc" id="aa00203_html_ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4"><div class="ttname"><a href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4">HWLOC_MEMBIND_PROCESS</a></div><div class="ttdeci">@ HWLOC_MEMBIND_PROCESS</div><div class="ttdoc">Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually e...</div><div class="ttdef"><b>Definition:</b> hwloc.h:1466</div></div>
+<div class="ttc" id="aa00203_html_ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298"><div class="ttname"><a href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298">HWLOC_MEMBIND_THREAD</a></div><div class="ttdeci">@ HWLOC_MEMBIND_THREAD</div><div class="ttdoc">Set policy for a specific thread of the current process. This flag is mutually exclusive with HWLOC_M...</div><div class="ttdef"><b>Definition:</b> hwloc.h:1471</div></div>
+<div class="ttc" id="aa00203_html_ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256"><div class="ttname"><a href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256">HWLOC_MEMBIND_BYNODESET</a></div><div class="ttdeci">@ HWLOC_MEMBIND_BYNODESET</div><div class="ttdoc">Consider the bitmap argument as a nodeset.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1509</div></div>
+<div class="ttc" id="aa00203_html_ggab00475fd98815bf4fb9aaf752030e7d2aa6e49e54f52827cb143cc869cfd748af"><div class="ttname"><a href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2aa6e49e54f52827cb143cc869cfd748af">HWLOC_MEMBIND_MIGRATE</a></div><div class="ttdeci">@ HWLOC_MEMBIND_MIGRATE</div><div class="ttdoc">Migrate existing allocated memory. If the memory cannot be migrated and the HWLOC_MEMBIND_STRICT flag...</div><div class="ttdef"><b>Definition:</b> hwloc.h:1485</div></div>
+<div class="ttc" id="aa00203_html_ggab00475fd98815bf4fb9aaf752030e7d2aad6b9eaf2ee324ca58dc8f58094b9997"><div class="ttname"><a href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2aad6b9eaf2ee324ca58dc8f58094b9997">HWLOC_MEMBIND_NOCPUBIND</a></div><div class="ttdeci">@ HWLOC_MEMBIND_NOCPUBIND</div><div class="ttdoc">Avoid any effect on CPU binding.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1498</div></div>
+<div class="ttc" id="aa00203_html_ggac9764f79505775d06407b40f5e4661e8a18675bb80ebc1bce5b652e9de8f3998c"><div class="ttname"><a href="a00203.html#ggac9764f79505775d06407b40f5e4661e8a18675bb80ebc1bce5b652e9de8f3998c">HWLOC_MEMBIND_DEFAULT</a></div><div class="ttdeci">@ HWLOC_MEMBIND_DEFAULT</div><div class="ttdoc">Reset the memory allocation policy to the system default. Depending on the operating system,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:1406</div></div>
+<div class="ttc" id="aa00203_html_ggac9764f79505775d06407b40f5e4661e8a3185bd869b67817fb2bd5164bf360402"><div class="ttname"><a href="a00203.html#ggac9764f79505775d06407b40f5e4661e8a3185bd869b67817fb2bd5164bf360402">HWLOC_MEMBIND_MIXED</a></div><div class="ttdeci">@ HWLOC_MEMBIND_MIXED</div><div class="ttdoc">Returned by get_membind() functions when multiple threads or parts of a memory area have differing me...</div><div class="ttdef"><b>Definition:</b> hwloc.h:1445</div></div>
+<div class="ttc" id="aa00203_html_ggac9764f79505775d06407b40f5e4661e8a979c7aa78dd32780858f30f47a72cca0"><div class="ttname"><a href="a00203.html#ggac9764f79505775d06407b40f5e4661e8a979c7aa78dd32780858f30f47a72cca0">HWLOC_MEMBIND_FIRSTTOUCH</a></div><div class="ttdeci">@ HWLOC_MEMBIND_FIRSTTOUCH</div><div class="ttdoc">Allocate each memory page individually on the local NUMA node of the thread that touches it.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1417</div></div>
+<div class="ttc" id="aa00203_html_ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c"><div class="ttname"><a href="a00203.html#ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c">HWLOC_MEMBIND_BIND</a></div><div class="ttdeci">@ HWLOC_MEMBIND_BIND</div><div class="ttdoc">Allocate memory on the specified nodes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1421</div></div>
+<div class="ttc" id="aa00203_html_ggac9764f79505775d06407b40f5e4661e8ae370075e5af016d42310f87ea5af236b"><div class="ttname"><a href="a00203.html#ggac9764f79505775d06407b40f5e4661e8ae370075e5af016d42310f87ea5af236b">HWLOC_MEMBIND_INTERLEAVE</a></div><div class="ttdeci">@ HWLOC_MEMBIND_INTERLEAVE</div><div class="ttdoc">Allocate memory on the given nodes in an interleaved / round-robin manner. The precise layout of the ...</div><div class="ttdef"><b>Definition:</b> hwloc.h:1430</div></div>
+<div class="ttc" id="aa00203_html_ggac9764f79505775d06407b40f5e4661e8aecdd4164d647708fbb51a00d98dbb138"><div class="ttname"><a href="a00203.html#ggac9764f79505775d06407b40f5e4661e8aecdd4164d647708fbb51a00d98dbb138">HWLOC_MEMBIND_NEXTTOUCH</a></div><div class="ttdeci">@ HWLOC_MEMBIND_NEXTTOUCH</div><div class="ttdoc">For each page bound with this policy, by next time it is touched (and next time only),...</div><div class="ttdef"><b>Definition:</b> hwloc.h:1437</div></div>
+<div class="ttc" id="aa00204_html_ga2745616b65595e1c1e579ecc7e461fa8"><div class="ttname"><a href="a00204.html#ga2745616b65595e1c1e579ecc7e461fa8">hwloc_topology_set_xmlbuffer</a></div><div class="ttdeci">int hwloc_topology_set_xmlbuffer(hwloc_topology_t restrict topology, const char *restrict buffer, int size)</div><div class="ttdoc">Enable XML based topology using a memory buffer (instead of a file, as with hwloc_topology_set_xml())...</div></div>
+<div class="ttc" id="aa00204_html_ga341fc17b5867a4715570baab131f68cd"><div class="ttname"><a href="a00204.html#ga341fc17b5867a4715570baab131f68cd">hwloc_topology_set_pid</a></div><div class="ttdeci">int hwloc_topology_set_pid(hwloc_topology_t restrict topology, hwloc_pid_t pid)</div><div class="ttdoc">Change which process the topology is viewed from.</div></div>
+<div class="ttc" id="aa00204_html_ga4fab186bb6181a00bcf585825fddd38d"><div class="ttname"><a href="a00204.html#ga4fab186bb6181a00bcf585825fddd38d">hwloc_topology_set_synthetic</a></div><div class="ttdeci">int hwloc_topology_set_synthetic(hwloc_topology_t restrict topology, const char *restrict description)</div><div class="ttdoc">Enable synthetic topology.</div></div>
+<div class="ttc" id="aa00204_html_ga879439b7ee99407ee911b3ac64e9a25e"><div class="ttname"><a href="a00204.html#ga879439b7ee99407ee911b3ac64e9a25e">hwloc_topology_set_xml</a></div><div class="ttdeci">int hwloc_topology_set_xml(hwloc_topology_t restrict topology, const char *restrict xmlpath)</div><div class="ttdoc">Enable XML-file based topology.</div></div>
+<div class="ttc" id="aa00204_html_ga949f656c779208a36790feba24048b7e"><div class="ttname"><a href="a00204.html#ga949f656c779208a36790feba24048b7e">hwloc_topology_components_flag_e</a></div><div class="ttdeci">hwloc_topology_components_flag_e</div><div class="ttdoc">Flags to be passed to hwloc_topology_set_components()</div><div class="ttdef"><b>Definition:</b> hwloc.h:1873</div></div>
+<div class="ttc" id="aa00204_html_ga9ad41adf418cee1c0ee32ba9bd4a3d36"><div class="ttname"><a href="a00204.html#ga9ad41adf418cee1c0ee32ba9bd4a3d36">hwloc_topology_set_components</a></div><div class="ttdeci">int hwloc_topology_set_components(hwloc_topology_t restrict topology, unsigned long flags, const char *restrict name)</div><div class="ttdoc">Prevent a discovery component from being used for a topology.</div></div>
+<div class="ttc" id="aa00204_html_gga949f656c779208a36790feba24048b7ea33eec25d29253a2aba21dd3c731b416e"><div class="ttname"><a href="a00204.html#gga949f656c779208a36790feba24048b7ea33eec25d29253a2aba21dd3c731b416e">HWLOC_TOPOLOGY_COMPONENTS_FLAG_BLACKLIST</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_COMPONENTS_FLAG_BLACKLIST</div><div class="ttdoc">Blacklist the target component from being used.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1877</div></div>
+<div class="ttc" id="aa00205_html_ga09318f81c1d4713be907d64748a6f93c"><div class="ttname"><a href="a00205.html#ga09318f81c1d4713be907d64748a6f93c">hwloc_topology_get_flags</a></div><div class="ttdeci">unsigned long hwloc_topology_get_flags(hwloc_topology_t topology)</div><div class="ttdoc">Get OR'ed flags of a topology.</div></div>
+<div class="ttc" id="aa00205_html_ga0ab38705357bc1203abe829da8a12ad3"><div class="ttname"><a href="a00205.html#ga0ab38705357bc1203abe829da8a12ad3">hwloc_topology_set_io_types_filter</a></div><div class="ttdeci">int hwloc_topology_set_io_types_filter(hwloc_topology_t topology, enum hwloc_type_filter_e filter)</div><div class="ttdoc">Set the filtering for all I/O object types.</div></div>
+<div class="ttc" id="aa00205_html_ga137ad1178f7a79f2383974d983083401"><div class="ttname"><a href="a00205.html#ga137ad1178f7a79f2383974d983083401">hwloc_topology_get_type_filter</a></div><div class="ttdeci">int hwloc_topology_get_type_filter(hwloc_topology_t topology, hwloc_obj_type_t type, enum hwloc_type_filter_e *filter)</div><div class="ttdoc">Get the current filtering for the given object type.</div></div>
+<div class="ttc" id="aa00205_html_ga2cc7b7b155cba58dda203e54f1637b9c"><div class="ttname"><a href="a00205.html#ga2cc7b7b155cba58dda203e54f1637b9c">hwloc_topology_set_userdata</a></div><div class="ttdeci">void hwloc_topology_set_userdata(hwloc_topology_t topology, const void *userdata)</div><div class="ttdoc">Set the topology-specific userdata pointer.</div></div>
+<div class="ttc" id="aa00205_html_ga30bd6d330fe3c8f0cbaad724d114ee20"><div class="ttname"><a href="a00205.html#ga30bd6d330fe3c8f0cbaad724d114ee20">hwloc_topology_set_cache_types_filter</a></div><div class="ttdeci">int hwloc_topology_set_cache_types_filter(hwloc_topology_t topology, enum hwloc_type_filter_e filter)</div><div class="ttdoc">Set the filtering for all CPU cache object types.</div></div>
+<div class="ttc" id="aa00205_html_ga37c7b2e599ed3cd76ad9164630024f30"><div class="ttname"><a href="a00205.html#ga37c7b2e599ed3cd76ad9164630024f30">hwloc_topology_set_icache_types_filter</a></div><div class="ttdeci">int hwloc_topology_set_icache_types_filter(hwloc_topology_t topology, enum hwloc_type_filter_e filter)</div><div class="ttdoc">Set the filtering for all CPU instruction cache object types.</div></div>
+<div class="ttc" id="aa00205_html_ga68ffdcfd9175cdf40709801092f18017"><div class="ttname"><a href="a00205.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a></div><div class="ttdeci">int hwloc_topology_is_thissystem(hwloc_topology_t restrict topology)</div><div class="ttdoc">Does the topology context come from this system?</div></div>
+<div class="ttc" id="aa00205_html_ga91f992f8d6c4905b2d3c4f43e509c2a3"><div class="ttname"><a href="a00205.html#ga91f992f8d6c4905b2d3c4f43e509c2a3">hwloc_topology_get_userdata</a></div><div class="ttdeci">void * hwloc_topology_get_userdata(hwloc_topology_t topology)</div><div class="ttdoc">Retrieve the topology-specific userdata pointer.</div></div>
+<div class="ttc" id="aa00205_html_ga9a5a1f0140cd1952544477833733195b"><div class="ttname"><a href="a00205.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a></div><div class="ttdeci">hwloc_type_filter_e</div><div class="ttdoc">Type filtering flags.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2254</div></div>
+<div class="ttc" id="aa00205_html_ga9eb8dc3b106f84921bf5789101e97e24"><div class="ttname"><a href="a00205.html#ga9eb8dc3b106f84921bf5789101e97e24">hwloc_topology_set_all_types_filter</a></div><div class="ttdeci">int hwloc_topology_set_all_types_filter(hwloc_topology_t topology, enum hwloc_type_filter_e filter)</div><div class="ttdoc">Set the filtering for all object types.</div></div>
+<div class="ttc" id="aa00205_html_gaaeed4df656979e5f16befea9d29b814b"><div class="ttname"><a href="a00205.html#gaaeed4df656979e5f16befea9d29b814b">hwloc_topology_set_flags</a></div><div class="ttdeci">int hwloc_topology_set_flags(hwloc_topology_t topology, unsigned long flags)</div><div class="ttdoc">Set OR'ed flags to non-yet-loaded topology.</div></div>
+<div class="ttc" id="aa00205_html_gab8c76173c4a8ce1a9a9366012b1388e6"><div class="ttname"><a href="a00205.html#gab8c76173c4a8ce1a9a9366012b1388e6">hwloc_topology_get_support</a></div><div class="ttdeci">const struct hwloc_topology_support * hwloc_topology_get_support(hwloc_topology_t restrict topology)</div><div class="ttdoc">Retrieve the topology support.</div></div>
+<div class="ttc" id="aa00205_html_gad894e70f15f8d4aada7be8d1aba38b7e"><div class="ttname"><a href="a00205.html#gad894e70f15f8d4aada7be8d1aba38b7e">hwloc_topology_set_type_filter</a></div><div class="ttdeci">int hwloc_topology_set_type_filter(hwloc_topology_t topology, hwloc_obj_type_t type, enum hwloc_type_filter_e filter)</div><div class="ttdoc">Set the filtering for the given object type.</div></div>
+<div class="ttc" id="aa00205_html_gada025d3ec20b4b420f8038d23d6e7bde"><div class="ttname"><a href="a00205.html#gada025d3ec20b4b420f8038d23d6e7bde">hwloc_topology_flags_e</a></div><div class="ttdeci">hwloc_topology_flags_e</div><div class="ttdoc">Flags to be set onto a topology context before load.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1914</div></div>
+<div class="ttc" id="aa00205_html_gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a"><div class="ttname"><a href="a00205.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a">HWLOC_TYPE_FILTER_KEEP_NONE</a></div><div class="ttdeci">@ HWLOC_TYPE_FILTER_KEEP_NONE</div><div class="ttdoc">Ignore all objects of this type.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2268</div></div>
+<div class="ttc" id="aa00205_html_gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5"><div class="ttname"><a href="a00205.html#gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5">HWLOC_TYPE_FILTER_KEEP_IMPORTANT</a></div><div class="ttdeci">@ HWLOC_TYPE_FILTER_KEEP_IMPORTANT</div><div class="ttdoc">Only keep likely-important objects of the given type.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2297</div></div>
+<div class="ttc" id="aa00205_html_gga9a5a1f0140cd1952544477833733195ba7664716643bf1db83e631eed34f659e4"><div class="ttname"><a href="a00205.html#gga9a5a1f0140cd1952544477833733195ba7664716643bf1db83e631eed34f659e4">HWLOC_TYPE_FILTER_KEEP_STRUCTURE</a></div><div class="ttdeci">@ HWLOC_TYPE_FILTER_KEEP_STRUCTURE</div><div class="ttdoc">Only ignore objects if their entire level does not bring any structure.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2282</div></div>
+<div class="ttc" id="aa00205_html_gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e"><div class="ttname"><a href="a00205.html#gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e">HWLOC_TYPE_FILTER_KEEP_ALL</a></div><div class="ttdeci">@ HWLOC_TYPE_FILTER_KEEP_ALL</div><div class="ttdoc">Keep all objects of this type.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2260</div></div>
+<div class="ttc" id="aa00205_html_ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258"><div class="ttname"><a href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</div><div class="ttdoc">Detect the whole system, ignore reservations, include disallowed objects.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1936</div></div>
+<div class="ttc" id="aa00205_html_ggada025d3ec20b4b420f8038d23d6e7bdea1b66bbd66e900e5c837f71defb32ad89"><div class="ttname"><a href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea1b66bbd66e900e5c837f71defb32ad89">HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES</div><div class="ttdoc">Get the set of allowed resources from the local operating system even if the topology was loaded from...</div><div class="ttdef"><b>Definition:</b> hwloc.h:1977</div></div>
+<div class="ttc" id="aa00205_html_ggada025d3ec20b4b420f8038d23d6e7bdea3497cd4c2f8b1d842dd49b3aaae56a24"><div class="ttname"><a href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea3497cd4c2f8b1d842dd49b3aaae56a24">HWLOC_TOPOLOGY_FLAG_NO_CPUKINDS</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_FLAG_NO_CPUKINDS</div><div class="ttdoc">Ignore CPU Kinds.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2082</div></div>
+<div class="ttc" id="aa00205_html_ggada025d3ec20b4b420f8038d23d6e7bdea368d7741135fe309f3782c59644d3caa"><div class="ttname"><a href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea368d7741135fe309f3782c59644d3caa">HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_MEMBINDING</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_MEMBINDING</div><div class="ttdoc">Do not consider resources outside of the process memory binding.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2048</div></div>
+<div class="ttc" id="aa00205_html_ggada025d3ec20b4b420f8038d23d6e7bdea5796b4909eba80f9727b66d07d3a7a05"><div class="ttname"><a href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea5796b4909eba80f9727b66d07d3a7a05">HWLOC_TOPOLOGY_FLAG_NO_DISTANCES</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_FLAG_NO_DISTANCES</div><div class="ttdoc">Ignore distances.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2070</div></div>
+<div class="ttc" id="aa00205_html_ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b"><div class="ttname"><a href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</div><div class="ttdoc">Assume that the selected backend provides the topology for the system on which we are running.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1956</div></div>
+<div class="ttc" id="aa00205_html_ggada025d3ec20b4b420f8038d23d6e7bdeaa595aed197779012acf43e8ca4a2658d"><div class="ttname"><a href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdeaa595aed197779012acf43e8ca4a2658d">HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING</div><div class="ttdoc">Do not consider resources outside of the process CPU binding.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2026</div></div>
+<div class="ttc" id="aa00205_html_ggada025d3ec20b4b420f8038d23d6e7bdead5636766a6603f24486f79c48899c1c3"><div class="ttname"><a href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdead5636766a6603f24486f79c48899c1c3">HWLOC_TOPOLOGY_FLAG_NO_MEMATTRS</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_FLAG_NO_MEMATTRS</div><div class="ttdoc">Ignore memory attributes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2076</div></div>
+<div class="ttc" id="aa00205_html_ggada025d3ec20b4b420f8038d23d6e7bdead93e82b8668ee90e4f9354e201a2ed9c"><div class="ttname"><a href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdead93e82b8668ee90e4f9354e201a2ed9c">HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT</div><div class="ttdoc">Import support from the imported topology.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2001</div></div>
+<div class="ttc" id="aa00205_html_ggada025d3ec20b4b420f8038d23d6e7bdeae7a792e3db4360360a10f9160b10e631"><div class="ttname"><a href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdeae7a792e3db4360360a10f9160b10e631">HWLOC_TOPOLOGY_FLAG_DONT_CHANGE_BINDING</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_FLAG_DONT_CHANGE_BINDING</div><div class="ttdoc">Do not ever modify the process or thread binding during discovery.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2063</div></div>
+<div class="ttc" id="aa00206_html_ga1fc6012b3e1c249b83f48cb7bcacaa5b"><div class="ttname"><a href="a00206.html#ga1fc6012b3e1c249b83f48cb7bcacaa5b">hwloc_topology_insert_group_object</a></div><div class="ttdeci">hwloc_obj_t hwloc_topology_insert_group_object(hwloc_topology_t topology, hwloc_obj_t group)</div><div class="ttdoc">Add more structure to the topology by adding an intermediate Group.</div></div>
+<div class="ttc" id="aa00206_html_ga38b1be3922094d880f6e76bf56c973d6"><div class="ttname"><a href="a00206.html#ga38b1be3922094d880f6e76bf56c973d6">hwloc_allow_flags_e</a></div><div class="ttdeci">hwloc_allow_flags_e</div><div class="ttdoc">Flags to be given to hwloc_topology_allow().</div><div class="ttdef"><b>Definition:</b> hwloc.h:2419</div></div>
+<div class="ttc" id="aa00206_html_ga4cea4741165faf5323931a9ed8786ef7"><div class="ttname"><a href="a00206.html#ga4cea4741165faf5323931a9ed8786ef7">hwloc_topology_alloc_group_object</a></div><div class="ttdeci">hwloc_obj_t hwloc_topology_alloc_group_object(hwloc_topology_t topology)</div><div class="ttdoc">Allocate a Group object to insert later with hwloc_topology_insert_group_object().</div></div>
+<div class="ttc" id="aa00206_html_ga698ecd640d2b76742bba3829a145cd9a"><div class="ttname"><a href="a00206.html#ga698ecd640d2b76742bba3829a145cd9a">hwloc_topology_refresh</a></div><div class="ttdeci">int hwloc_topology_refresh(hwloc_topology_t topology)</div><div class="ttdoc">Refresh internal structures after topology modification.</div></div>
+<div class="ttc" id="aa00206_html_ga6db81ed13ac0a9d70cc80372ab537815"><div class="ttname"><a href="a00206.html#ga6db81ed13ac0a9d70cc80372ab537815">hwloc_topology_restrict</a></div><div class="ttdeci">int hwloc_topology_restrict(hwloc_topology_t restrict topology, hwloc_const_bitmap_t set, unsigned long flags)</div><div class="ttdoc">Restrict the topology to the given CPU set or nodeset.</div></div>
+<div class="ttc" id="aa00206_html_ga9d80f08eb25b7ac22f1b998dc8bf521f"><div class="ttname"><a href="a00206.html#ga9d80f08eb25b7ac22f1b998dc8bf521f">hwloc_restrict_flags_e</a></div><div class="ttdeci">hwloc_restrict_flags_e</div><div class="ttdoc">Flags to be given to hwloc_topology_restrict().</div><div class="ttdef"><b>Definition:</b> hwloc.h:2358</div></div>
+<div class="ttc" id="aa00206_html_gad458715d3335df44849216cc123d1055"><div class="ttname"><a href="a00206.html#gad458715d3335df44849216cc123d1055">hwloc_obj_add_other_obj_sets</a></div><div class="ttdeci">int hwloc_obj_add_other_obj_sets(hwloc_obj_t dst, hwloc_obj_t src)</div><div class="ttdoc">Setup object cpusets/nodesets by OR'ing another object's sets.</div></div>
+<div class="ttc" id="aa00206_html_gad980782ade737900c5cf208946768c30"><div class="ttname"><a href="a00206.html#gad980782ade737900c5cf208946768c30">hwloc_topology_insert_misc_object</a></div><div class="ttdeci">hwloc_obj_t hwloc_topology_insert_misc_object(hwloc_topology_t topology, hwloc_obj_t parent, const char *name)</div><div class="ttdoc">Add a MISC object as a leaf of the topology.</div></div>
+<div class="ttc" id="aa00206_html_gaf955b190c0299dcfb5bc985d777f92a1"><div class="ttname"><a href="a00206.html#gaf955b190c0299dcfb5bc985d777f92a1">hwloc_topology_allow</a></div><div class="ttdeci">int hwloc_topology_allow(hwloc_topology_t restrict topology, hwloc_const_cpuset_t cpuset, hwloc_const_nodeset_t nodeset, unsigned long flags)</div><div class="ttdoc">Change the sets of allowed PUs and NUMA nodes in the topology.</div></div>
+<div class="ttc" id="aa00206_html_gga38b1be3922094d880f6e76bf56c973d6a489c8c1b67ce7e0b8cf7a665852760e1"><div class="ttname"><a href="a00206.html#gga38b1be3922094d880f6e76bf56c973d6a489c8c1b67ce7e0b8cf7a665852760e1">HWLOC_ALLOW_FLAG_CUSTOM</a></div><div class="ttdeci">@ HWLOC_ALLOW_FLAG_CUSTOM</div><div class="ttdoc">Allow a custom set of objects, given to hwloc_topology_allow() as cpuset and/or nodeset parameters.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2437</div></div>
+<div class="ttc" id="aa00206_html_gga38b1be3922094d880f6e76bf56c973d6a88c50088c09dcf1e1a496c0817556fb9"><div class="ttname"><a href="a00206.html#gga38b1be3922094d880f6e76bf56c973d6a88c50088c09dcf1e1a496c0817556fb9">HWLOC_ALLOW_FLAG_LOCAL_RESTRICTIONS</a></div><div class="ttdeci">@ HWLOC_ALLOW_FLAG_LOCAL_RESTRICTIONS</div><div class="ttdoc">Only allow objects that are available to the current process.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2433</div></div>
+<div class="ttc" id="aa00206_html_gga38b1be3922094d880f6e76bf56c973d6aca107692455774f9d323d21b8abfce72"><div class="ttname"><a href="a00206.html#gga38b1be3922094d880f6e76bf56c973d6aca107692455774f9d323d21b8abfce72">HWLOC_ALLOW_FLAG_ALL</a></div><div class="ttdeci">@ HWLOC_ALLOW_FLAG_ALL</div><div class="ttdoc">Mark all objects as allowed in the topology.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2424</div></div>
+<div class="ttc" id="aa00206_html_gga9d80f08eb25b7ac22f1b998dc8bf521fa699969227a09bbc1a7de51dc9fb7be4b"><div class="ttname"><a href="a00206.html#gga9d80f08eb25b7ac22f1b998dc8bf521fa699969227a09bbc1a7de51dc9fb7be4b">HWLOC_RESTRICT_FLAG_ADAPT_MISC</a></div><div class="ttdeci">@ HWLOC_RESTRICT_FLAG_ADAPT_MISC</div><div class="ttdoc">Move Misc objects to ancestors if their parents are removed during restriction. If this flag is not s...</div><div class="ttdef"><b>Definition:</b> hwloc.h:2383</div></div>
+<div class="ttc" id="aa00206_html_gga9d80f08eb25b7ac22f1b998dc8bf521fa80eeb9cbba401ab050f8fb4573725891"><div class="ttname"><a href="a00206.html#gga9d80f08eb25b7ac22f1b998dc8bf521fa80eeb9cbba401ab050f8fb4573725891">HWLOC_RESTRICT_FLAG_REMOVE_CPULESS</a></div><div class="ttdeci">@ HWLOC_RESTRICT_FLAG_REMOVE_CPULESS</div><div class="ttdoc">Remove all objects that became CPU-less. By default, only objects that contain no PU and no memory ar...</div><div class="ttdef"><b>Definition:</b> hwloc.h:2364</div></div>
+<div class="ttc" id="aa00206_html_gga9d80f08eb25b7ac22f1b998dc8bf521faa95d6985e36ec1e55f68b210297a85cb"><div class="ttname"><a href="a00206.html#gga9d80f08eb25b7ac22f1b998dc8bf521faa95d6985e36ec1e55f68b210297a85cb">HWLOC_RESTRICT_FLAG_ADAPT_IO</a></div><div class="ttdeci">@ HWLOC_RESTRICT_FLAG_ADAPT_IO</div><div class="ttdoc">Move I/O objects to ancestors if their parents are removed during restriction. If this flag is not se...</div><div class="ttdef"><b>Definition:</b> hwloc.h:2389</div></div>
+<div class="ttc" id="aa00206_html_gga9d80f08eb25b7ac22f1b998dc8bf521fae4c5b1b87232f2d8a60559e77ac65a68"><div class="ttname"><a href="a00206.html#gga9d80f08eb25b7ac22f1b998dc8bf521fae4c5b1b87232f2d8a60559e77ac65a68">HWLOC_RESTRICT_FLAG_BYNODESET</a></div><div class="ttdeci">@ HWLOC_RESTRICT_FLAG_BYNODESET</div><div class="ttdoc">Restrict by nodeset instead of CPU set. Only keep objects whose nodeset is included or partially incl...</div><div class="ttdef"><b>Definition:</b> hwloc.h:2370</div></div>
+<div class="ttc" id="aa00206_html_gga9d80f08eb25b7ac22f1b998dc8bf521faf5ba49808855704bfe9cb9fe7347f93b"><div class="ttname"><a href="a00206.html#gga9d80f08eb25b7ac22f1b998dc8bf521faf5ba49808855704bfe9cb9fe7347f93b">HWLOC_RESTRICT_FLAG_REMOVE_MEMLESS</a></div><div class="ttdeci">@ HWLOC_RESTRICT_FLAG_REMOVE_MEMLESS</div><div class="ttdoc">Remove all objects that became Memory-less. By default, only objects that contain no PU and no memory...</div><div class="ttdef"><b>Definition:</b> hwloc.h:2377</div></div>
+<div class="ttc" id="aa00217_html_gaa3c2bf4c776d603dcebbb61b0c923d84"><div class="ttname"><a href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a></div><div class="ttdeci">struct hwloc_bitmap_s * hwloc_bitmap_t</div><div class="ttdoc">Set of bits represented as an opaque pointer to an internal bitmap.</div><div class="ttdef"><b>Definition:</b> bitmap.h:68</div></div>
+<div class="ttc" id="aa00217_html_gae991a108af01d408be2776c5b2c467b2"><div class="ttname"><a href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a></div><div class="ttdeci">const struct hwloc_bitmap_s * hwloc_const_bitmap_t</div><div class="ttdoc">a non-modifiable hwloc_bitmap_t</div><div class="ttdef"><b>Definition:</b> bitmap.h:70</div></div>
+<div class="ttc" id="aa00253_html"><div class="ttname"><a href="a00253.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:396</div></div>
+<div class="ttc" id="aa00253_html_a04d05403da37bfe17cd63b7c7dd07b1f"><div class="ttname"><a href="a00253.html#a04d05403da37bfe17cd63b7c7dd07b1f">hwloc_obj::children</a></div><div class="ttdeci">struct hwloc_obj ** children</div><div class="ttdoc">Normal children, children[0 .. arity -1].</div><div class="ttdef"><b>Definition:</b> hwloc.h:456</div></div>
+<div class="ttc" id="aa00253_html_a08f0d0e16c619a6e653526cbee4ffea3"><div class="ttname"><a href="a00253.html#a08f0d0e16c619a6e653526cbee4ffea3">hwloc_obj::nodeset</a></div><div class="ttdeci">hwloc_nodeset_t nodeset</div><div class="ttdoc">NUMA nodes covered by this object or containing this object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:540</div></div>
+<div class="ttc" id="aa00253_html_a0d07fb7b8935e137c94d75a3eb492ae9"><div class="ttname"><a href="a00253.html#a0d07fb7b8935e137c94d75a3eb492ae9">hwloc_obj::logical_index</a></div><div class="ttdeci">unsigned logical_index</div><div class="ttdoc">Horizontal index in the whole list of similar objects, hence guaranteed unique across the entire mach...</div><div class="ttdef"><b>Definition:</b> hwloc.h:434</div></div>
+<div class="ttc" id="aa00253_html_a0f41a1d67dc6b661906f2217563637f3"><div class="ttname"><a href="a00253.html#a0f41a1d67dc6b661906f2217563637f3">hwloc_obj::symmetric_subtree</a></div><div class="ttdeci">int symmetric_subtree</div><div class="ttdoc">Set if the subtree of normal objects below this object is symmetric, which means all normal children ...</div><div class="ttdef"><b>Definition:</b> hwloc.h:461</div></div>
+<div class="ttc" id="aa00253_html_a2bb7862ce722d7ceda23cfa153da165a"><div class="ttname"><a href="a00253.html#a2bb7862ce722d7ceda23cfa153da165a">hwloc_obj::misc_arity</a></div><div class="ttdeci">unsigned misc_arity</div><div class="ttdoc">Number of Misc children. These children are listed in misc_first_child.</div><div class="ttdef"><b>Definition:</b> hwloc.h:502</div></div>
+<div class="ttc" id="aa00253_html_a4876fd165b4fff35521f07ebd85355ed"><div class="ttname"><a href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">hwloc_obj::depth</a></div><div class="ttdeci">int depth</div><div class="ttdoc">Vertical index in the hierarchy.</div><div class="ttdef"><b>Definition:</b> hwloc.h:419</div></div>
+<div class="ttc" id="aa00253_html_a57812a313fe9b1a9500489f47c3011cc"><div class="ttname"><a href="a00253.html#a57812a313fe9b1a9500489f47c3011cc">hwloc_obj::misc_first_child</a></div><div class="ttdeci">struct hwloc_obj * misc_first_child</div><div class="ttdoc">First Misc child. Misc objects are listed here (misc_arity and misc_first_child) instead of in the no...</div><div class="ttdef"><b>Definition:</b> hwloc.h:505</div></div>
+<div class="ttc" id="aa00253_html_a5d4f97e76723a9ec8d38046f19e00d33"><div class="ttname"><a href="a00253.html#a5d4f97e76723a9ec8d38046f19e00d33">hwloc_obj::subtype</a></div><div class="ttdeci">char * subtype</div><div class="ttdoc">Subtype string to better describe the type field.</div><div class="ttdef"><b>Definition:</b> hwloc.h:399</div></div>
+<div class="ttc" id="aa00253_html_a61a7a80a68eaccbaaa28269e678c81a9"><div class="ttname"><a href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">hwloc_obj::os_index</a></div><div class="ttdeci">unsigned os_index</div><div class="ttdoc">OS-provided physical index number. It is not guaranteed unique across the entire machine,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:401</div></div>
+<div class="ttc" id="aa00253_html_a67925e0f2c47f50408fbdb9bddd0790f"><div class="ttname"><a href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">hwloc_obj::cpuset</a></div><div class="ttdeci">hwloc_cpuset_t cpuset</div><div class="ttdoc">CPUs covered by this object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:512</div></div>
+<div class="ttc" id="aa00253_html_a6f834ea4dd26553cdea601d2fae6d3b7"><div class="ttname"><a href="a00253.html#a6f834ea4dd26553cdea601d2fae6d3b7">hwloc_obj::memory_arity</a></div><div class="ttdeci">unsigned memory_arity</div><div class="ttdoc">Number of Memory children. These children are listed in memory_first_child.</div><div class="ttdef"><b>Definition:</b> hwloc.h:472</div></div>
+<div class="ttc" id="aa00253_html_a75603fc36c9284ba48ce814b772a58b6"><div class="ttname"><a href="a00253.html#a75603fc36c9284ba48ce814b772a58b6">hwloc_obj::total_memory</a></div><div class="ttdeci">hwloc_uint64_t total_memory</div><div class="ttdoc">Total memory (in bytes) in NUMA nodes below this object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:413</div></div>
+<div class="ttc" id="aa00253_html_a76fd3ac94401cf32dfccc3a3a8de68a5"><div class="ttname"><a href="a00253.html#a76fd3ac94401cf32dfccc3a3a8de68a5">hwloc_obj::userdata</a></div><div class="ttdeci">void * userdata</div><div class="ttdoc">Application-given private data pointer, initialized to NULL, use it as you wish. See hwloc_topology_s...</div><div class="ttdef"><b>Definition:</b> hwloc.h:582</div></div>
+<div class="ttc" id="aa00253_html_a7b3b29f0be377c7d2d52262019fc7d11"><div class="ttname"><a href="a00253.html#a7b3b29f0be377c7d2d52262019fc7d11">hwloc_obj::io_arity</a></div><div class="ttdeci">unsigned io_arity</div><div class="ttdoc">Number of I/O children. These children are listed in io_first_child.</div><div class="ttdef"><b>Definition:</b> hwloc.h:490</div></div>
+<div class="ttc" id="aa00253_html_a7b89e8c189876c0158a9282aaaf17f50"><div class="ttname"><a href="a00253.html#a7b89e8c189876c0158a9282aaaf17f50">hwloc_obj::prev_sibling</a></div><div class="ttdeci">struct hwloc_obj * prev_sibling</div><div class="ttdoc">Previous object below the same parent (inside the same list of children).</div><div class="ttdef"><b>Definition:</b> hwloc.h:449</div></div>
+<div class="ttc" id="aa00253_html_a7f2343ed476fe4942e6fffd4cade1b40"><div class="ttname"><a href="a00253.html#a7f2343ed476fe4942e6fffd4cade1b40">hwloc_obj::next_sibling</a></div><div class="ttdeci">struct hwloc_obj * next_sibling</div><div class="ttdoc">Next object below the same parent (inside the same list of children).</div><div class="ttdef"><b>Definition:</b> hwloc.h:448</div></div>
+<div class="ttc" id="aa00253_html_a84bd65634dbc55f4158b74443a9bd04f"><div class="ttname"><a href="a00253.html#a84bd65634dbc55f4158b74443a9bd04f">hwloc_obj::last_child</a></div><div class="ttdeci">struct hwloc_obj * last_child</div><div class="ttdoc">Last normal child.</div><div class="ttdef"><b>Definition:</b> hwloc.h:458</div></div>
+<div class="ttc" id="aa00253_html_a85a788017457129589318b6c39451acf"><div class="ttname"><a href="a00253.html#a85a788017457129589318b6c39451acf">hwloc_obj::next_cousin</a></div><div class="ttdeci">struct hwloc_obj * next_cousin</div><div class="ttdoc">Next object of same type and depth.</div><div class="ttdef"><b>Definition:</b> hwloc.h:442</div></div>
+<div class="ttc" id="aa00253_html_a8604654c38b7a720efae5025d3a96ee6"><div class="ttname"><a href="a00253.html#a8604654c38b7a720efae5025d3a96ee6">hwloc_obj::infos</a></div><div class="ttdeci">struct hwloc_info_s * infos</div><div class="ttdoc">Array of stringified info type=name.</div><div class="ttdef"><b>Definition:</b> hwloc.h:578</div></div>
+<div class="ttc" id="aa00253_html_a8d14c88e1ebc4ae67cc69f9e928558b3"><div class="ttname"><a href="a00253.html#a8d14c88e1ebc4ae67cc69f9e928558b3">hwloc_obj::io_first_child</a></div><div class="ttdeci">struct hwloc_obj * io_first_child</div><div class="ttdoc">First I/O child. Bridges, PCI and OS devices are listed here (io_arity and io_first_child) instead of...</div><div class="ttdef"><b>Definition:</b> hwloc.h:493</div></div>
+<div class="ttc" id="aa00253_html_a91788a9da687beb7224cc1fd7b75208c"><div class="ttname"><a href="a00253.html#a91788a9da687beb7224cc1fd7b75208c">hwloc_obj::complete_cpuset</a></div><div class="ttdeci">hwloc_cpuset_t complete_cpuset</div><div class="ttdoc">The complete CPU set of processors of this object,.</div><div class="ttdef"><b>Definition:</b> hwloc.h:527</div></div>
+<div class="ttc" id="aa00253_html_a957984a355fa61c85f46605c336e7551"><div class="ttname"><a href="a00253.html#a957984a355fa61c85f46605c336e7551">hwloc_obj::gp_index</a></div><div class="ttdeci">hwloc_uint64_t gp_index</div><div class="ttdoc">Global persistent index. Generated by hwloc, unique across the topology (contrary to os_index) and pe...</div><div class="ttdef"><b>Definition:</b> hwloc.h:587</div></div>
+<div class="ttc" id="aa00253_html_a9843acc28cfbba903b63ea14b137ff70"><div class="ttname"><a href="a00253.html#a9843acc28cfbba903b63ea14b137ff70">hwloc_obj::infos_count</a></div><div class="ttdeci">unsigned infos_count</div><div class="ttdoc">Size of infos array.</div><div class="ttdef"><b>Definition:</b> hwloc.h:579</div></div>
+<div class="ttc" id="aa00253_html_aaa6043eee6f55869933c1d974efd9acd"><div class="ttname"><a href="a00253.html#aaa6043eee6f55869933c1d974efd9acd">hwloc_obj::sibling_rank</a></div><div class="ttdeci">unsigned sibling_rank</div><div class="ttdoc">Index in parent's children[] array. Or the index in parent's Memory, I/O or Misc children list.</div><div class="ttdef"><b>Definition:</b> hwloc.h:447</div></div>
+<div class="ttc" id="aa00253_html_aac3f6da35c9b57599909a44ce2b716c1"><div class="ttname"><a href="a00253.html#aac3f6da35c9b57599909a44ce2b716c1">hwloc_obj::arity</a></div><div class="ttdeci">unsigned arity</div><div class="ttdoc">Number of normal children. Memory, Misc and I/O children are not listed here but rather in their dedi...</div><div class="ttdef"><b>Definition:</b> hwloc.h:452</div></div>
+<div class="ttc" id="aa00253_html_abb709ec38f2970677e4e57d1d30be96d"><div class="ttname"><a href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name str...</div><div class="ttdef"><b>Definition:</b> hwloc.h:408</div></div>
+<div class="ttc" id="aa00253_html_ac0e8200dba25b90d5954bd4ec61f97d3"><div class="ttname"><a href="a00253.html#ac0e8200dba25b90d5954bd4ec61f97d3">hwloc_obj::memory_first_child</a></div><div class="ttdeci">struct hwloc_obj * memory_first_child</div><div class="ttdoc">First Memory child. NUMA nodes and Memory-side caches are listed here (memory_arity and memory_first_...</div><div class="ttdef"><b>Definition:</b> hwloc.h:475</div></div>
+<div class="ttc" id="aa00253_html_ac38c4012127525ef74c5615c526f4c2e"><div class="ttname"><a href="a00253.html#ac38c4012127525ef74c5615c526f4c2e">hwloc_obj::complete_nodeset</a></div><div class="ttdeci">hwloc_nodeset_t complete_nodeset</div><div class="ttdoc">The complete NUMA node set of this object,.</div><div class="ttdef"><b>Definition:</b> hwloc.h:562</div></div>
+<div class="ttc" id="aa00253_html_ac715989f55ff5a0eb6be2969ee477ec0"><div class="ttname"><a href="a00253.html#ac715989f55ff5a0eb6be2969ee477ec0">hwloc_obj::prev_cousin</a></div><div class="ttdeci">struct hwloc_obj * prev_cousin</div><div class="ttdoc">Previous object of same type and depth.</div><div class="ttdef"><b>Definition:</b> hwloc.h:443</div></div>
+<div class="ttc" id="aa00253_html_acc4f0803f244867e68fe0036800be5de"><div class="ttname"><a href="a00253.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj::type</a></div><div class="ttdeci">hwloc_obj_type_t type</div><div class="ttdoc">Type of object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:398</div></div>
+<div class="ttc" id="aa00253_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:415</div></div>
+<div class="ttc" id="aa00253_html_adc494f6aed939992be1c55cca5822900"><div class="ttname"><a href="a00253.html#adc494f6aed939992be1c55cca5822900">hwloc_obj::parent</a></div><div class="ttdeci">struct hwloc_obj * parent</div><div class="ttdoc">Parent, NULL if root (Machine object)</div><div class="ttdef"><b>Definition:</b> hwloc.h:446</div></div>
+<div class="ttc" id="aa00253_html_af51d08a0a79dba517c06c5afedc8d2dc"><div class="ttname"><a href="a00253.html#af51d08a0a79dba517c06c5afedc8d2dc">hwloc_obj::first_child</a></div><div class="ttdeci">struct hwloc_obj * first_child</div><div class="ttdoc">First normal child.</div><div class="ttdef"><b>Definition:</b> hwloc.h:457</div></div>
+<div class="ttc" id="aa00257_html"><div class="ttname"><a href="a00257.html">hwloc_obj_attr_u</a></div><div class="ttdoc">Object type-specific Attributes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:599</div></div>
+<div class="ttc" id="aa00257_html_a0b66da7ab072f7c016f8ed86701f5a7c"><div class="ttname"><a href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">hwloc_obj_attr_u::pcidev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_pcidev_attr_s pcidev</div></div>
+<div class="ttc" id="aa00257_html_a207e6359497b7116d6f4baa9e8bbeb43"><div class="ttname"><a href="a00257.html#a207e6359497b7116d6f4baa9e8bbeb43">hwloc_obj_attr_u::bridge</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_bridge_attr_s bridge</div></div>
+<div class="ttc" id="aa00257_html_a23f553f3252c9d13f2338231cd354ea9"><div class="ttname"><a href="a00257.html#a23f553f3252c9d13f2338231cd354ea9">hwloc_obj_attr_u::cache</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_cache_attr_s cache</div></div>
+<div class="ttc" id="aa00257_html_a9eddbd69e34cd2ef6af6d2ac31b6eff3"><div class="ttname"><a href="a00257.html#a9eddbd69e34cd2ef6af6d2ac31b6eff3">hwloc_obj_attr_u::group</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_group_attr_s group</div></div>
+<div class="ttc" id="aa00257_html_aaf7a5c38b5185703ff18c46ad2761dcf"><div class="ttname"><a href="a00257.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u::osdev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_osdev_attr_s osdev</div></div>
+<div class="ttc" id="aa00257_html_ad066b9612802ffa01e132dc3a8e6cc86"><div class="ttname"><a href="a00257.html#ad066b9612802ffa01e132dc3a8e6cc86">hwloc_obj_attr_u::numanode</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_numanode_attr_s numanode</div></div>
+<div class="ttc" id="aa00261_html"><div class="ttname"><a href="a00261.html">hwloc_obj_attr_u::hwloc_numanode_attr_s</a></div><div class="ttdoc">NUMA node-specific Object Attributes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:601</div></div>
+<div class="ttc" id="aa00261_html_a513078122d403904e16723d30f583cb2"><div class="ttname"><a href="a00261.html#a513078122d403904e16723d30f583cb2">hwloc_obj_attr_u::hwloc_numanode_attr_s::page_types_len</a></div><div class="ttdeci">unsigned page_types_len</div><div class="ttdoc">Size of array page_types.</div><div class="ttdef"><b>Definition:</b> hwloc.h:603</div></div>
+<div class="ttc" id="aa00261_html_a6703cbf2afbf63c9d60c5ff4dc0c73aa"><div class="ttname"><a href="a00261.html#a6703cbf2afbf63c9d60c5ff4dc0c73aa">hwloc_obj_attr_u::hwloc_numanode_attr_s::local_memory</a></div><div class="ttdeci">hwloc_uint64_t local_memory</div><div class="ttdoc">Local memory (in bytes)</div><div class="ttdef"><b>Definition:</b> hwloc.h:602</div></div>
+<div class="ttc" id="aa00261_html_a7e53c5024da2d7741a5cc1e7016bb8d2"><div class="ttname"><a href="a00261.html#a7e53c5024da2d7741a5cc1e7016bb8d2">hwloc_obj_attr_u::hwloc_numanode_attr_s::page_types</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s * page_types</div></div>
+<div class="ttc" id="aa00265_html"><div class="ttname"><a href="a00265.html">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s</a></div><div class="ttdoc">Array of local memory page types, NULL if no local memory and page_types is 0.</div><div class="ttdef"><b>Definition:</b> hwloc.h:609</div></div>
+<div class="ttc" id="aa00265_html_a8ea7ebe9d91c7378bba03da57efc25cb"><div class="ttname"><a href="a00265.html#a8ea7ebe9d91c7378bba03da57efc25cb">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s::size</a></div><div class="ttdeci">hwloc_uint64_t size</div><div class="ttdoc">Size of pages.</div><div class="ttdef"><b>Definition:</b> hwloc.h:610</div></div>
+<div class="ttc" id="aa00265_html_a98514e37d57a325b78e21ffd8d7419e0"><div class="ttname"><a href="a00265.html#a98514e37d57a325b78e21ffd8d7419e0">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s::count</a></div><div class="ttdeci">hwloc_uint64_t count</div><div class="ttdoc">Number of pages of this size.</div><div class="ttdef"><b>Definition:</b> hwloc.h:611</div></div>
+<div class="ttc" id="aa00269_html"><div class="ttname"><a href="a00269.html">hwloc_obj_attr_u::hwloc_cache_attr_s</a></div><div class="ttdoc">Cache-specific Object Attributes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:616</div></div>
+<div class="ttc" id="aa00269_html_a5c8f7f39193736c2187ed626940835d5"><div class="ttname"><a href="a00269.html#a5c8f7f39193736c2187ed626940835d5">hwloc_obj_attr_u::hwloc_cache_attr_s::depth</a></div><div class="ttdeci">unsigned depth</div><div class="ttdoc">Depth of cache (e.g., L1, L2, ...etc.)</div><div class="ttdef"><b>Definition:</b> hwloc.h:618</div></div>
+<div class="ttc" id="aa00269_html_a801e8a668e28caf06c8b88e9ae5c10db"><div class="ttname"><a href="a00269.html#a801e8a668e28caf06c8b88e9ae5c10db">hwloc_obj_attr_u::hwloc_cache_attr_s::linesize</a></div><div class="ttdeci">unsigned linesize</div><div class="ttdoc">Cache-line size in bytes. 0 if unknown.</div><div class="ttdef"><b>Definition:</b> hwloc.h:619</div></div>
+<div class="ttc" id="aa00269_html_abe5e788943ed04302976740c829674c0"><div class="ttname"><a href="a00269.html#abe5e788943ed04302976740c829674c0">hwloc_obj_attr_u::hwloc_cache_attr_s::size</a></div><div class="ttdeci">hwloc_uint64_t size</div><div class="ttdoc">Size of cache in bytes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:617</div></div>
+<div class="ttc" id="aa00269_html_ad06525e474d1e2d1423ed71bb998592d"><div class="ttname"><a href="a00269.html#ad06525e474d1e2d1423ed71bb998592d">hwloc_obj_attr_u::hwloc_cache_attr_s::associativity</a></div><div class="ttdeci">int associativity</div><div class="ttdoc">Ways of associativity, -1 if fully associative, 0 if unknown.</div><div class="ttdef"><b>Definition:</b> hwloc.h:620</div></div>
+<div class="ttc" id="aa00269_html_ad8edc8ded2b7a70d6abbc874801930f4"><div class="ttname"><a href="a00269.html#ad8edc8ded2b7a70d6abbc874801930f4">hwloc_obj_attr_u::hwloc_cache_attr_s::type</a></div><div class="ttdeci">hwloc_obj_cache_type_t type</div><div class="ttdoc">Cache type.</div><div class="ttdef"><b>Definition:</b> hwloc.h:622</div></div>
+<div class="ttc" id="aa00273_html"><div class="ttname"><a href="a00273.html">hwloc_obj_attr_u::hwloc_group_attr_s</a></div><div class="ttdoc">Group-specific Object Attributes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:625</div></div>
+<div class="ttc" id="aa00273_html_a3229f269c4cc7e63492c168535e4f0c1"><div class="ttname"><a href="a00273.html#a3229f269c4cc7e63492c168535e4f0c1">hwloc_obj_attr_u::hwloc_group_attr_s::kind</a></div><div class="ttdeci">unsigned kind</div><div class="ttdoc">Internally-used kind of group.</div><div class="ttdef"><b>Definition:</b> hwloc.h:628</div></div>
+<div class="ttc" id="aa00273_html_ad514d943960a4036ed5e44dc187c74ed"><div class="ttname"><a href="a00273.html#ad514d943960a4036ed5e44dc187c74ed">hwloc_obj_attr_u::hwloc_group_attr_s::subkind</a></div><div class="ttdeci">unsigned subkind</div><div class="ttdoc">Internally-used subkind to distinguish different levels of groups with same kind.</div><div class="ttdef"><b>Definition:</b> hwloc.h:629</div></div>
+<div class="ttc" id="aa00273_html_ad914eac61c77481e1b7037877bcc5579"><div class="ttname"><a href="a00273.html#ad914eac61c77481e1b7037877bcc5579">hwloc_obj_attr_u::hwloc_group_attr_s::depth</a></div><div class="ttdeci">unsigned depth</div><div class="ttdoc">Depth of group object. It may change if intermediate Group objects are added.</div><div class="ttdef"><b>Definition:</b> hwloc.h:626</div></div>
+<div class="ttc" id="aa00273_html_afa253d4b70f92e940c226d61f192054f"><div class="ttname"><a href="a00273.html#afa253d4b70f92e940c226d61f192054f">hwloc_obj_attr_u::hwloc_group_attr_s::dont_merge</a></div><div class="ttdeci">unsigned char dont_merge</div><div class="ttdoc">Flag preventing groups from being automatically merged with identical parent or children.</div><div class="ttdef"><b>Definition:</b> hwloc.h:630</div></div>
+<div class="ttc" id="aa00277_html"><div class="ttname"><a href="a00277.html">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a></div><div class="ttdoc">PCI Device specific Object Attributes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:633</div></div>
+<div class="ttc" id="aa00277_html_a13ad54c93d08d8ac808e4de9674c5ee7"><div class="ttname"><a href="a00277.html#a13ad54c93d08d8ac808e4de9674c5ee7">hwloc_obj_attr_u::hwloc_pcidev_attr_s::revision</a></div><div class="ttdeci">unsigned char revision</div><div class="ttdef"><b>Definition:</b> hwloc.h:642</div></div>
+<div class="ttc" id="aa00277_html_a35b66064ab7d768caf7154e410caf0fa"><div class="ttname"><a href="a00277.html#a35b66064ab7d768caf7154e410caf0fa">hwloc_obj_attr_u::hwloc_pcidev_attr_s::device_id</a></div><div class="ttdeci">unsigned short device_id</div><div class="ttdef"><b>Definition:</b> hwloc.h:641</div></div>
+<div class="ttc" id="aa00277_html_a3d70c84a12f7e93d14c8d47bf4fd9dc5"><div class="ttname"><a href="a00277.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">hwloc_obj_attr_u::hwloc_pcidev_attr_s::dev</a></div><div class="ttdeci">unsigned char dev</div><div class="ttdef"><b>Definition:</b> hwloc.h:639</div></div>
+<div class="ttc" id="aa00277_html_a499db3d8cc89eaba04fcaef3df1cba97"><div class="ttname"><a href="a00277.html#a499db3d8cc89eaba04fcaef3df1cba97">hwloc_obj_attr_u::hwloc_pcidev_attr_s::subvendor_id</a></div><div class="ttdeci">unsigned short subvendor_id</div><div class="ttdef"><b>Definition:</b> hwloc.h:641</div></div>
+<div class="ttc" id="aa00277_html_a59b2fce35f7cbde86c4fd305d0ccda5f"><div class="ttname"><a href="a00277.html#a59b2fce35f7cbde86c4fd305d0ccda5f">hwloc_obj_attr_u::hwloc_pcidev_attr_s::linkspeed</a></div><div class="ttdeci">float linkspeed</div><div class="ttdef"><b>Definition:</b> hwloc.h:643</div></div>
+<div class="ttc" id="aa00277_html_a695f32df53f4ef728670bfcf31b74e0f"><div class="ttname"><a href="a00277.html#a695f32df53f4ef728670bfcf31b74e0f">hwloc_obj_attr_u::hwloc_pcidev_attr_s::func</a></div><div class="ttdeci">unsigned char func</div><div class="ttdef"><b>Definition:</b> hwloc.h:639</div></div>
+<div class="ttc" id="aa00277_html_a8fba44988deb98613c1505a4019a34dc"><div class="ttname"><a href="a00277.html#a8fba44988deb98613c1505a4019a34dc">hwloc_obj_attr_u::hwloc_pcidev_attr_s::domain</a></div><div class="ttdeci">unsigned short domain</div><div class="ttdef"><b>Definition:</b> hwloc.h:635</div></div>
+<div class="ttc" id="aa00277_html_aad970ad19b62eb2d5df30e4802da4f4c"><div class="ttname"><a href="a00277.html#aad970ad19b62eb2d5df30e4802da4f4c">hwloc_obj_attr_u::hwloc_pcidev_attr_s::vendor_id</a></div><div class="ttdeci">unsigned short vendor_id</div><div class="ttdef"><b>Definition:</b> hwloc.h:641</div></div>
+<div class="ttc" id="aa00277_html_aae99e035e8d1387d7b8768aaa8eceb0a"><div class="ttname"><a href="a00277.html#aae99e035e8d1387d7b8768aaa8eceb0a">hwloc_obj_attr_u::hwloc_pcidev_attr_s::bus</a></div><div class="ttdeci">unsigned char bus</div><div class="ttdef"><b>Definition:</b> hwloc.h:639</div></div>
+<div class="ttc" id="aa00277_html_acac741aecd7a6db64f33409427e3971f"><div class="ttname"><a href="a00277.html#acac741aecd7a6db64f33409427e3971f">hwloc_obj_attr_u::hwloc_pcidev_attr_s::subdevice_id</a></div><div class="ttdeci">unsigned short subdevice_id</div><div class="ttdef"><b>Definition:</b> hwloc.h:641</div></div>
+<div class="ttc" id="aa00277_html_aee735352d9f1686fd290fc6d6397c334"><div class="ttname"><a href="a00277.html#aee735352d9f1686fd290fc6d6397c334">hwloc_obj_attr_u::hwloc_pcidev_attr_s::class_id</a></div><div class="ttdeci">unsigned short class_id</div><div class="ttdef"><b>Definition:</b> hwloc.h:640</div></div>
+<div class="ttc" id="aa00281_html"><div class="ttname"><a href="a00281.html">hwloc_obj_attr_u::hwloc_bridge_attr_s</a></div><div class="ttdoc">Bridge specific Object Attributes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:646</div></div>
+<div class="ttc" id="aa00281_html_a265dd2164aa2df4972e25a029da72125"><div class="ttname"><a href="a00281.html#a265dd2164aa2df4972e25a029da72125">hwloc_obj_attr_u::hwloc_bridge_attr_s::upstream_type</a></div><div class="ttdeci">hwloc_obj_bridge_type_t upstream_type</div><div class="ttdef"><b>Definition:</b> hwloc.h:650</div></div>
+<div class="ttc" id="aa00281_html_a2c31e565a5f0d23d0a0a3dd3ec8f4b17"><div class="ttname"><a href="a00281.html#a2c31e565a5f0d23d0a0a3dd3ec8f4b17">hwloc_obj_attr_u::hwloc_bridge_attr_s::domain</a></div><div class="ttdeci">unsigned short domain</div><div class="ttdef"><b>Definition:</b> hwloc.h:654</div></div>
+<div class="ttc" id="aa00281_html_a336c8b22893d5d734d8c9dfca4066b46"><div class="ttname"><a href="a00281.html#a336c8b22893d5d734d8c9dfca4066b46">hwloc_obj_attr_u::hwloc_bridge_attr_s::depth</a></div><div class="ttdeci">unsigned depth</div><div class="ttdef"><b>Definition:</b> hwloc.h:662</div></div>
+<div class="ttc" id="aa00281_html_a7d5db91d655ba23ffe9bda7a2cbcb9a8"><div class="ttname"><a href="a00281.html#a7d5db91d655ba23ffe9bda7a2cbcb9a8">hwloc_obj_attr_u::hwloc_bridge_attr_s::downstream</a></div><div class="ttdeci">union hwloc_obj_attr_u::hwloc_bridge_attr_s::@1 downstream</div></div>
+<div class="ttc" id="aa00281_html_ab5c564e7c95b747dae9eb84ec0a2c31e"><div class="ttname"><a href="a00281.html#ab5c564e7c95b747dae9eb84ec0a2c31e">hwloc_obj_attr_u::hwloc_bridge_attr_s::pci</a></div><div class="ttdeci">struct hwloc_pcidev_attr_s pci</div><div class="ttdef"><b>Definition:</b> hwloc.h:648</div></div>
+<div class="ttc" id="aa00281_html_ab62888c880f8bb730292722f5811958d"><div class="ttname"><a href="a00281.html#ab62888c880f8bb730292722f5811958d">hwloc_obj_attr_u::hwloc_bridge_attr_s::upstream</a></div><div class="ttdeci">union hwloc_obj_attr_u::hwloc_bridge_attr_s::@0 upstream</div></div>
+<div class="ttc" id="aa00281_html_ac6a169b672d0e9f75756fd5665828b93"><div class="ttname"><a href="a00281.html#ac6a169b672d0e9f75756fd5665828b93">hwloc_obj_attr_u::hwloc_bridge_attr_s::downstream_type</a></div><div class="ttdeci">hwloc_obj_bridge_type_t downstream_type</div><div class="ttdef"><b>Definition:</b> hwloc.h:661</div></div>
+<div class="ttc" id="aa00281_html_ae2d9dd73ef1d32045c584a8e66d2f83f"><div class="ttname"><a href="a00281.html#ae2d9dd73ef1d32045c584a8e66d2f83f">hwloc_obj_attr_u::hwloc_bridge_attr_s::secondary_bus</a></div><div class="ttdeci">unsigned char secondary_bus</div><div class="ttdef"><b>Definition:</b> hwloc.h:658</div></div>
+<div class="ttc" id="aa00281_html_af3f3f7d76bf03e8d2afa721c2b8d6771"><div class="ttname"><a href="a00281.html#af3f3f7d76bf03e8d2afa721c2b8d6771">hwloc_obj_attr_u::hwloc_bridge_attr_s::subordinate_bus</a></div><div class="ttdeci">unsigned char subordinate_bus</div><div class="ttdef"><b>Definition:</b> hwloc.h:658</div></div>
+<div class="ttc" id="aa00297_html"><div class="ttname"><a href="a00297.html">hwloc_obj_attr_u::hwloc_osdev_attr_s</a></div><div class="ttdoc">OS Device specific Object Attributes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:665</div></div>
+<div class="ttc" id="aa00297_html_a31e019e27e54ac6138d04be639bb96f9"><div class="ttname"><a href="a00297.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s::type</a></div><div class="ttdeci">hwloc_obj_osdev_type_t type</div><div class="ttdef"><b>Definition:</b> hwloc.h:666</div></div>
+<div class="ttc" id="aa00301_html"><div class="ttname"><a href="a00301.html">hwloc_info_s</a></div><div class="ttdoc">Object info.</div><div class="ttdef"><b>Definition:</b> hwloc.h:674</div></div>
+<div class="ttc" id="aa00301_html_a12ce1309e4381ae38b5c15d242a47124"><div class="ttname"><a href="a00301.html#a12ce1309e4381ae38b5c15d242a47124">hwloc_info_s::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Info name.</div><div class="ttdef"><b>Definition:</b> hwloc.h:675</div></div>
+<div class="ttc" id="aa00301_html_a788a0073bafe660645e7b69f31a43bbb"><div class="ttname"><a href="a00301.html#a788a0073bafe660645e7b69f31a43bbb">hwloc_info_s::value</a></div><div class="ttdeci">char * value</div><div class="ttdoc">Info value.</div><div class="ttdef"><b>Definition:</b> hwloc.h:676</div></div>
+<div class="ttc" id="aa00305_html"><div class="ttname"><a href="a00305.html">hwloc_topology_discovery_support</a></div><div class="ttdoc">Flags describing actual discovery support for this topology.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2119</div></div>
+<div class="ttc" id="aa00305_html_a955f96066cb9e4cd34e2a3710ad43e80"><div class="ttname"><a href="a00305.html#a955f96066cb9e4cd34e2a3710ad43e80">hwloc_topology_discovery_support::numa</a></div><div class="ttdeci">unsigned char numa</div><div class="ttdoc">Detecting the number of NUMA nodes is supported.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2123</div></div>
+<div class="ttc" id="aa00305_html_a970e65235873bcdb9669a9805161ce03"><div class="ttname"><a href="a00305.html#a970e65235873bcdb9669a9805161ce03">hwloc_topology_discovery_support::disallowed_numa</a></div><div class="ttdeci">unsigned char disallowed_numa</div><div class="ttdoc">Detecting and identifying NUMA nodes that are not available to the current process is supported.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2129</div></div>
+<div class="ttc" id="aa00305_html_aba80d6f9c15e2395f9ed61db9ff3b75d"><div class="ttname"><a href="a00305.html#aba80d6f9c15e2395f9ed61db9ff3b75d">hwloc_topology_discovery_support::cpukind_efficiency</a></div><div class="ttdeci">unsigned char cpukind_efficiency</div><div class="ttdoc">Detecting the efficiency of CPU kinds is supported, see Kinds of CPU cores.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2131</div></div>
+<div class="ttc" id="aa00305_html_ad7bb4ecf7a82f5a04fc632e9592ad3ab"><div class="ttname"><a href="a00305.html#ad7bb4ecf7a82f5a04fc632e9592ad3ab">hwloc_topology_discovery_support::pu</a></div><div class="ttdeci">unsigned char pu</div><div class="ttdoc">Detecting the number of PU objects is supported.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2121</div></div>
+<div class="ttc" id="aa00305_html_af193eb858e40e12ef4923f5ed0e1f11a"><div class="ttname"><a href="a00305.html#af193eb858e40e12ef4923f5ed0e1f11a">hwloc_topology_discovery_support::numa_memory</a></div><div class="ttdeci">unsigned char numa_memory</div><div class="ttdoc">Detecting the amount of memory in NUMA nodes is supported.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2125</div></div>
+<div class="ttc" id="aa00305_html_af3c97b28781a2972cf8eaaf94a6617da"><div class="ttname"><a href="a00305.html#af3c97b28781a2972cf8eaaf94a6617da">hwloc_topology_discovery_support::disallowed_pu</a></div><div class="ttdeci">unsigned char disallowed_pu</div><div class="ttdoc">Detecting and identifying PU objects that are not available to the current process is supported.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2127</div></div>
+<div class="ttc" id="aa00309_html"><div class="ttname"><a href="a00309.html">hwloc_topology_cpubind_support</a></div><div class="ttdoc">Flags describing actual PU binding support for this topology.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2139</div></div>
+<div class="ttc" id="aa00309_html_a2554620148b7992a5093f338f5ae254f"><div class="ttname"><a href="a00309.html#a2554620148b7992a5093f338f5ae254f">hwloc_topology_cpubind_support::get_proc_last_cpu_location</a></div><div class="ttdeci">unsigned char get_proc_last_cpu_location</div><div class="ttdef"><b>Definition:</b> hwloc.h:2159</div></div>
+<div class="ttc" id="aa00309_html_a46fba33e307909ce256624687799dd6d"><div class="ttname"><a href="a00309.html#a46fba33e307909ce256624687799dd6d">hwloc_topology_cpubind_support::set_thread_cpubind</a></div><div class="ttdeci">unsigned char set_thread_cpubind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2153</div></div>
+<div class="ttc" id="aa00309_html_a57a89a4b5f1f74fa6cfe176f1e8b0798"><div class="ttname"><a href="a00309.html#a57a89a4b5f1f74fa6cfe176f1e8b0798">hwloc_topology_cpubind_support::set_thisthread_cpubind</a></div><div class="ttdeci">unsigned char set_thisthread_cpubind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2149</div></div>
+<div class="ttc" id="aa00309_html_a6be1f042fdce6bf41b4ea39f6f193808"><div class="ttname"><a href="a00309.html#a6be1f042fdce6bf41b4ea39f6f193808">hwloc_topology_cpubind_support::get_thisthread_last_cpu_location</a></div><div class="ttdeci">unsigned char get_thisthread_last_cpu_location</div><div class="ttdef"><b>Definition:</b> hwloc.h:2161</div></div>
+<div class="ttc" id="aa00309_html_a77a09ddd78ee3e9ff5f532a6ac74f7eb"><div class="ttname"><a href="a00309.html#a77a09ddd78ee3e9ff5f532a6ac74f7eb">hwloc_topology_cpubind_support::get_thisproc_cpubind</a></div><div class="ttdeci">unsigned char get_thisproc_cpubind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2143</div></div>
+<div class="ttc" id="aa00309_html_a80d762e532d677dff262d83cc7bb1c60"><div class="ttname"><a href="a00309.html#a80d762e532d677dff262d83cc7bb1c60">hwloc_topology_cpubind_support::get_thisthread_cpubind</a></div><div class="ttdeci">unsigned char get_thisthread_cpubind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2151</div></div>
+<div class="ttc" id="aa00309_html_a8dd4d8531ed2eebdce1507e7d104154e"><div class="ttname"><a href="a00309.html#a8dd4d8531ed2eebdce1507e7d104154e">hwloc_topology_cpubind_support::get_thread_cpubind</a></div><div class="ttdeci">unsigned char get_thread_cpubind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2155</div></div>
+<div class="ttc" id="aa00309_html_a9403d51657a4d546b3ea9553a2973a27"><div class="ttname"><a href="a00309.html#a9403d51657a4d546b3ea9553a2973a27">hwloc_topology_cpubind_support::set_thisproc_cpubind</a></div><div class="ttdeci">unsigned char set_thisproc_cpubind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2141</div></div>
+<div class="ttc" id="aa00309_html_aa166223d1c2a6de7256ab2d8b675a87e"><div class="ttname"><a href="a00309.html#aa166223d1c2a6de7256ab2d8b675a87e">hwloc_topology_cpubind_support::set_proc_cpubind</a></div><div class="ttdeci">unsigned char set_proc_cpubind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2145</div></div>
+<div class="ttc" id="aa00309_html_aae705bc447adc163ead377362c4dfe9f"><div class="ttname"><a href="a00309.html#aae705bc447adc163ead377362c4dfe9f">hwloc_topology_cpubind_support::get_proc_cpubind</a></div><div class="ttdeci">unsigned char get_proc_cpubind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2147</div></div>
+<div class="ttc" id="aa00309_html_ad2d5c94b738d92b7d2ede87e4e96321d"><div class="ttname"><a href="a00309.html#ad2d5c94b738d92b7d2ede87e4e96321d">hwloc_topology_cpubind_support::get_thisproc_last_cpu_location</a></div><div class="ttdeci">unsigned char get_thisproc_last_cpu_location</div><div class="ttdef"><b>Definition:</b> hwloc.h:2157</div></div>
+<div class="ttc" id="aa00313_html"><div class="ttname"><a href="a00313.html">hwloc_topology_membind_support</a></div><div class="ttdoc">Flags describing actual memory binding support for this topology.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2169</div></div>
+<div class="ttc" id="aa00313_html_a0697af2e41f2e82b8ce71e3cc13f7eac"><div class="ttname"><a href="a00313.html#a0697af2e41f2e82b8ce71e3cc13f7eac">hwloc_topology_membind_support::set_thisthread_membind</a></div><div class="ttdeci">unsigned char set_thisthread_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2179</div></div>
+<div class="ttc" id="aa00313_html_a0a84e24a06f2fa487fe8c9605c6f68b3"><div class="ttname"><a href="a00313.html#a0a84e24a06f2fa487fe8c9605c6f68b3">hwloc_topology_membind_support::get_area_membind</a></div><div class="ttdeci">unsigned char get_area_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2185</div></div>
+<div class="ttc" id="aa00313_html_a221098c339dbfab27bd2c9f5d32f123b"><div class="ttname"><a href="a00313.html#a221098c339dbfab27bd2c9f5d32f123b">hwloc_topology_membind_support::firsttouch_membind</a></div><div class="ttdeci">unsigned char firsttouch_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2189</div></div>
+<div class="ttc" id="aa00313_html_a30173553a68e0a4dd1672d26f8e892b1"><div class="ttname"><a href="a00313.html#a30173553a68e0a4dd1672d26f8e892b1">hwloc_topology_membind_support::get_area_memlocation</a></div><div class="ttdeci">unsigned char get_area_memlocation</div><div class="ttdef"><b>Definition:</b> hwloc.h:2199</div></div>
+<div class="ttc" id="aa00313_html_a36b3e388df9c6a249427cab7e3724749"><div class="ttname"><a href="a00313.html#a36b3e388df9c6a249427cab7e3724749">hwloc_topology_membind_support::set_thisproc_membind</a></div><div class="ttdeci">unsigned char set_thisproc_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2171</div></div>
+<div class="ttc" id="aa00313_html_a3c44c6012860bbeba8a0f4c19710858d"><div class="ttname"><a href="a00313.html#a3c44c6012860bbeba8a0f4c19710858d">hwloc_topology_membind_support::interleave_membind</a></div><div class="ttdeci">unsigned char interleave_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2193</div></div>
+<div class="ttc" id="aa00313_html_a3fd51e6fa5f0dd800322301b46b08559"><div class="ttname"><a href="a00313.html#a3fd51e6fa5f0dd800322301b46b08559">hwloc_topology_membind_support::get_thisproc_membind</a></div><div class="ttdeci">unsigned char get_thisproc_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2173</div></div>
+<div class="ttc" id="aa00313_html_a476c06f96b65c08b287cf2369966123b"><div class="ttname"><a href="a00313.html#a476c06f96b65c08b287cf2369966123b">hwloc_topology_membind_support::set_area_membind</a></div><div class="ttdeci">unsigned char set_area_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2183</div></div>
+<div class="ttc" id="aa00313_html_a63b0b2e26157b472f5717ee93cc7c535"><div class="ttname"><a href="a00313.html#a63b0b2e26157b472f5717ee93cc7c535">hwloc_topology_membind_support::get_thisthread_membind</a></div><div class="ttdeci">unsigned char get_thisthread_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2181</div></div>
+<div class="ttc" id="aa00313_html_a756f44912894b176bf979a1b65f12aac"><div class="ttname"><a href="a00313.html#a756f44912894b176bf979a1b65f12aac">hwloc_topology_membind_support::set_proc_membind</a></div><div class="ttdeci">unsigned char set_proc_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2175</div></div>
+<div class="ttc" id="aa00313_html_a9880cd2d605e316fc020167c49ca69ad"><div class="ttname"><a href="a00313.html#a9880cd2d605e316fc020167c49ca69ad">hwloc_topology_membind_support::get_proc_membind</a></div><div class="ttdeci">unsigned char get_proc_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2177</div></div>
+<div class="ttc" id="aa00313_html_aafa7683871a6a760246f9b35209caec5"><div class="ttname"><a href="a00313.html#aafa7683871a6a760246f9b35209caec5">hwloc_topology_membind_support::migrate_membind</a></div><div class="ttdeci">unsigned char migrate_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2197</div></div>
+<div class="ttc" id="aa00313_html_ab0921af6e0cd6975812a80b8e5c7435c"><div class="ttname"><a href="a00313.html#ab0921af6e0cd6975812a80b8e5c7435c">hwloc_topology_membind_support::nexttouch_membind</a></div><div class="ttdeci">unsigned char nexttouch_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2195</div></div>
+<div class="ttc" id="aa00313_html_ae551abb27d2aa9ce008583488b845b98"><div class="ttname"><a href="a00313.html#ae551abb27d2aa9ce008583488b845b98">hwloc_topology_membind_support::alloc_membind</a></div><div class="ttdeci">unsigned char alloc_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2187</div></div>
+<div class="ttc" id="aa00313_html_ae7cdb1f1b5f0242a69f85b5a5538c764"><div class="ttname"><a href="a00313.html#ae7cdb1f1b5f0242a69f85b5a5538c764">hwloc_topology_membind_support::bind_membind</a></div><div class="ttdeci">unsigned char bind_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2191</div></div>
+<div class="ttc" id="aa00317_html"><div class="ttname"><a href="a00317.html">hwloc_topology_misc_support</a></div><div class="ttdoc">Flags describing miscellaneous features.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2204</div></div>
+<div class="ttc" id="aa00317_html_adf54a6dbe8e9dd5033dfe9c93df726c4"><div class="ttname"><a href="a00317.html#adf54a6dbe8e9dd5033dfe9c93df726c4">hwloc_topology_misc_support::imported_support</a></div><div class="ttdeci">unsigned char imported_support</div><div class="ttdef"><b>Definition:</b> hwloc.h:2206</div></div>
+<div class="ttc" id="aa00321_html"><div class="ttname"><a href="a00321.html">hwloc_topology_support</a></div><div class="ttdoc">Set of flags describing actual support for this topology.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2215</div></div>
+<div class="ttc" id="aa00321_html_ab9d08df4b0b03994f21b893ece826e78"><div class="ttname"><a href="a00321.html#ab9d08df4b0b03994f21b893ece826e78">hwloc_topology_support::misc</a></div><div class="ttdeci">struct hwloc_topology_misc_support * misc</div><div class="ttdef"><b>Definition:</b> hwloc.h:2219</div></div>
+<div class="ttc" id="aa00321_html_ac6eb62ae8bc0a68dce679a7107a36194"><div class="ttname"><a href="a00321.html#ac6eb62ae8bc0a68dce679a7107a36194">hwloc_topology_support::membind</a></div><div class="ttdeci">struct hwloc_topology_membind_support * membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2218</div></div>
+<div class="ttc" id="aa00321_html_adef2bb91f74c3e70a2a071393caf5f56"><div class="ttname"><a href="a00321.html#adef2bb91f74c3e70a2a071393caf5f56">hwloc_topology_support::cpubind</a></div><div class="ttdeci">struct hwloc_topology_cpubind_support * cpubind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2217</div></div>
+<div class="ttc" id="aa00321_html_aea3fbd7653d987d81f848636c420504d"><div class="ttname"><a href="a00321.html#aea3fbd7653d987d81f848636c420504d">hwloc_topology_support::discovery</a></div><div class="ttdeci">struct hwloc_topology_discovery_support * discovery</div><div class="ttdef"><b>Definition:</b> hwloc.h:2216</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00128_source.html b/doc/doxygen-doc/html/a00128_source.html
new file mode 100644
index 00000000..585d84ae
--- /dev/null
+++ b/doc/doxygen-doc/html/a00128_source.html
@@ -0,0 +1,809 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): helper.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_5cb306d949c7931a3b6c77517393dd34.html">hwloc</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">helper.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright © 2009 CNRS</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * Copyright © 2009-2022 Inria.  All rights reserved.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Copyright © 2009-2012 Université Bordeaux</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * Copyright © 2009-2010 Cisco Systems, Inc.  All rights reserved.</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160; </div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#ifndef HWLOC_HELPER_H</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#define HWLOC_HELPER_H</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160; </div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#ifndef HWLOC_H</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#error Please include the main hwloc.h instead</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &lt;stdlib.h&gt;</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &lt;errno.h&gt;</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160; </div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160; </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160; </div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="a00207.html#ga547325a4193dbc215d07c23097519d79">   42</a></span>&#160;<a class="code" href="a00207.html#ga547325a4193dbc215d07c23097519d79">hwloc_get_first_largest_obj_inside_cpuset</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set)</div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;{</div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;  <a class="code" href="a00253.html">hwloc_obj_t</a> obj = <a class="code" href="a00199.html#ga2d4b12fc187dfc53b35f2fa21d21044d">hwloc_get_root_obj</a>(topology);</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;  <span class="keywordflow">if</span> (!<a class="code" href="a00217.html#gaefa070f9232857ba5a57297ea9a08ea2">hwloc_bitmap_intersects</a>(obj-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, set))</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;    <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;  <span class="keywordflow">while</span> (!<a class="code" href="a00217.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a>(obj-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, set)) {</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;    <span class="comment">/* while the object intersects without being included, look at its children */</span></div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;    <a class="code" href="a00253.html">hwloc_obj_t</a> child = obj-&gt;<a class="code" href="a00253.html#af51d08a0a79dba517c06c5afedc8d2dc">first_child</a>;</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;    <span class="keywordflow">while</span> (child) {</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;      <span class="keywordflow">if</span> (<a class="code" href="a00217.html#gaefa070f9232857ba5a57297ea9a08ea2">hwloc_bitmap_intersects</a>(child-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, set))</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;        <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;      child = child-&gt;<a class="code" href="a00253.html#a7f2343ed476fe4942e6fffd4cade1b40">next_sibling</a>;</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    }</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;    <span class="keywordflow">if</span> (!child)</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;      <span class="comment">/* no child intersects, return their father */</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;      <span class="keywordflow">return</span> obj;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;    <span class="comment">/* found one intersecting child, look at its children */</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    obj = child;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;  }</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;  <span class="comment">/* obj is included, return it */</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;  <span class="keywordflow">return</span> obj;</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;}</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160; </div>
+<div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="a00207.html#ga34ca563fa3a6a4e05268f36a87668511">   69</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00207.html#ga34ca563fa3a6a4e05268f36a87668511">hwloc_get_largest_objs_inside_cpuset</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;                                                 <a class="code" href="a00253.html">hwloc_obj_t</a> * __hwloc_restrict objs, <span class="keywordtype">int</span> max);</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160; </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="a00207.html#ga63e3784e7c60fbae5073428cb98ac787">   85</a></span>&#160;<a class="code" href="a00207.html#ga63e3784e7c60fbae5073428cb98ac787">hwloc_get_next_obj_inside_cpuset_by_depth</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;                                           <span class="keywordtype">int</span> depth, <a class="code" href="a00253.html">hwloc_obj_t</a> prev)</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;{</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;  <a class="code" href="a00253.html">hwloc_obj_t</a> next = <a class="code" href="a00199.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a>(topology, depth, prev);</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;  <span class="keywordflow">if</span> (!next)</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;    <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;  <span class="keywordflow">while</span> (next &amp;&amp; (<a class="code" href="a00217.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(next-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>) || !<a class="code" href="a00217.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a>(next-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, set)))</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    next = next-&gt;<a class="code" href="a00253.html#a85a788017457129589318b6c39451acf">next_cousin</a>;</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;  <span class="keywordflow">return</span> next;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;}</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160; </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="a00207.html#gafe859176cf9233f215fea0e87cef47e7">  109</a></span>&#160;<a class="code" href="a00207.html#gafe859176cf9233f215fea0e87cef47e7">hwloc_get_next_obj_inside_cpuset_by_type</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;                                          <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <a class="code" href="a00253.html">hwloc_obj_t</a> prev)</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;{</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;  <span class="keywordtype">int</span> depth = <a class="code" href="a00199.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, type);</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;  <span class="keywordflow">if</span> (depth == <a class="code" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a> || depth == <a class="code" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a>)</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;    <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;  <span class="keywordflow">return</span> <a class="code" href="a00207.html#ga63e3784e7c60fbae5073428cb98ac787">hwloc_get_next_obj_inside_cpuset_by_depth</a>(topology, set, depth, prev);</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;}</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160; </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;<a class="code" href="a00207.html#gaec86f1f88832836e3f9338e246ea5862">hwloc_get_obj_inside_cpuset_by_depth</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;                                      <span class="keywordtype">int</span> depth, <span class="keywordtype">unsigned</span> idx) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="a00207.html#gaec86f1f88832836e3f9338e246ea5862">  130</a></span>&#160;<a class="code" href="a00207.html#gaec86f1f88832836e3f9338e246ea5862">hwloc_get_obj_inside_cpuset_by_depth</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;                                      <span class="keywordtype">int</span> depth, <span class="keywordtype">unsigned</span> idx)</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;{</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;  <a class="code" href="a00253.html">hwloc_obj_t</a> obj = <a class="code" href="a00199.html#ga391f6b2613f0065673eaa4069b93d4e0">hwloc_get_obj_by_depth</a> (topology, depth, 0);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;  <span class="keywordtype">unsigned</span> count = 0;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;  <span class="keywordflow">if</span> (!obj)</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;    <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;  <span class="keywordflow">while</span> (obj) {</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;    <span class="keywordflow">if</span> (!<a class="code" href="a00217.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(obj-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>) &amp;&amp; <a class="code" href="a00217.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a>(obj-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, set)) {</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;      <span class="keywordflow">if</span> (count == idx)</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;        <span class="keywordflow">return</span> obj;</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;      count++;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;    }</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;    obj = obj-&gt;<a class="code" href="a00253.html#a85a788017457129589318b6c39451acf">next_cousin</a>;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;  }</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;  <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;}</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160; </div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;<a class="code" href="a00207.html#ga2edf924e5a0cca9cb22f65cc77c6ddb5">hwloc_get_obj_inside_cpuset_by_type</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;                                     <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <span class="keywordtype">unsigned</span> idx) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00164"></a><span class="lineno"><a class="line" href="a00207.html#ga2edf924e5a0cca9cb22f65cc77c6ddb5">  164</a></span>&#160;<a class="code" href="a00207.html#ga2edf924e5a0cca9cb22f65cc77c6ddb5">hwloc_get_obj_inside_cpuset_by_type</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;                                     <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <span class="keywordtype">unsigned</span> idx)</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;{</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;  <span class="keywordtype">int</span> depth = <a class="code" href="a00199.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, type);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;  <span class="keywordflow">if</span> (depth == <a class="code" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a> || depth == <a class="code" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a>)</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;    <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;  <span class="keywordflow">return</span> <a class="code" href="a00207.html#gaec86f1f88832836e3f9338e246ea5862">hwloc_get_obj_inside_cpuset_by_depth</a>(topology, set, depth, idx);</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;}</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160; </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">unsigned</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;<a class="code" href="a00207.html#gaa43c64512ddb33fd181990c4261cec7d">hwloc_get_nbobjs_inside_cpuset_by_depth</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;                                         <span class="keywordtype">int</span> depth) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">unsigned</span></div>
+<div class="line"><a name="l00185"></a><span class="lineno"><a class="line" href="a00207.html#gaa43c64512ddb33fd181990c4261cec7d">  185</a></span>&#160;<a class="code" href="a00207.html#gaa43c64512ddb33fd181990c4261cec7d">hwloc_get_nbobjs_inside_cpuset_by_depth</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;                                         <span class="keywordtype">int</span> depth)</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;{</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;  <a class="code" href="a00253.html">hwloc_obj_t</a> obj = <a class="code" href="a00199.html#ga391f6b2613f0065673eaa4069b93d4e0">hwloc_get_obj_by_depth</a> (topology, depth, 0);</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;  <span class="keywordtype">unsigned</span> count = 0;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;  <span class="keywordflow">if</span> (!obj)</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;  <span class="keywordflow">while</span> (obj) {</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;    <span class="keywordflow">if</span> (!<a class="code" href="a00217.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(obj-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>) &amp;&amp; <a class="code" href="a00217.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a>(obj-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, set))</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;      count++;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;    obj = obj-&gt;<a class="code" href="a00253.html#a85a788017457129589318b6c39451acf">next_cousin</a>;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;  }</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;  <span class="keywordflow">return</span> count;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;}</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160; </div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;<a class="code" href="a00207.html#ga133c40415de008518608f8bff52a5ab9">hwloc_get_nbobjs_inside_cpuset_by_type</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;                                        <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="a00207.html#ga133c40415de008518608f8bff52a5ab9">  216</a></span>&#160;<a class="code" href="a00207.html#ga133c40415de008518608f8bff52a5ab9">hwloc_get_nbobjs_inside_cpuset_by_type</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;                                        <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;{</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;  <span class="keywordtype">int</span> depth = <a class="code" href="a00199.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, type);</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;  <span class="keywordflow">if</span> (depth == <a class="code" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a>)</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;  <span class="keywordflow">if</span> (depth == <a class="code" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a>)</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;    <span class="keywordflow">return</span> -1; <span class="comment">/* FIXME: agregate nbobjs from different levels? */</span></div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;  <span class="keywordflow">return</span> (<span class="keywordtype">int</span>) <a class="code" href="a00207.html#gaa43c64512ddb33fd181990c4261cec7d">hwloc_get_nbobjs_inside_cpuset_by_depth</a>(topology, set, depth);</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;}</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160; </div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;<a class="code" href="a00207.html#ga4c3a20d61e9beb06c667b21688c772c5">hwloc_get_obj_index_inside_cpuset</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;                                   <a class="code" href="a00253.html">hwloc_obj_t</a> obj) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00244"></a><span class="lineno"><a class="line" href="a00207.html#ga4c3a20d61e9beb06c667b21688c772c5">  244</a></span>&#160;<a class="code" href="a00207.html#ga4c3a20d61e9beb06c667b21688c772c5">hwloc_get_obj_index_inside_cpuset</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;                                   <a class="code" href="a00253.html">hwloc_obj_t</a> obj)</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;{</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;  <span class="keywordtype">int</span> idx = 0;</div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;  <span class="keywordflow">if</span> (!<a class="code" href="a00217.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a>(obj-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, set))</div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;    <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;  <span class="comment">/* count how many objects are inside the cpuset on the way from us to the beginning of the level */</span></div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;  <span class="keywordflow">while</span> ((obj = obj-&gt;<a class="code" href="a00253.html#ac715989f55ff5a0eb6be2969ee477ec0">prev_cousin</a>) != NULL)</div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;    <span class="keywordflow">if</span> (!<a class="code" href="a00217.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(obj-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>) &amp;&amp; <a class="code" href="a00217.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a>(obj-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, set))</div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;      idx++;</div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;  <span class="keywordflow">return</span> idx;</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;}</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160; </div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;<a class="code" href="a00208.html#ga0e66aa2dc6b2527cfd10723af646c9d7">hwloc_get_child_covering_cpuset</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;                                <a class="code" href="a00253.html">hwloc_obj_t</a> parent) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00275"></a><span class="lineno"><a class="line" href="a00208.html#ga0e66aa2dc6b2527cfd10723af646c9d7">  275</a></span>&#160;<a class="code" href="a00208.html#ga0e66aa2dc6b2527cfd10723af646c9d7">hwloc_get_child_covering_cpuset</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;                                <a class="code" href="a00253.html">hwloc_obj_t</a> parent)</div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;{</div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;  <a class="code" href="a00253.html">hwloc_obj_t</a> child;</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="a00217.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(set))</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;    <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;  child = parent-&gt;<a class="code" href="a00253.html#af51d08a0a79dba517c06c5afedc8d2dc">first_child</a>;</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;  <span class="keywordflow">while</span> (child) {</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;    <span class="keywordflow">if</span> (child-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a> &amp;&amp; <a class="code" href="a00217.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a>(set, child-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>))</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;      <span class="keywordflow">return</span> child;</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;    child = child-&gt;<a class="code" href="a00253.html#a7f2343ed476fe4942e6fffd4cade1b40">next_sibling</a>;</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;  }</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;  <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;}</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160; </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;<a class="code" href="a00208.html#ga41acdcdbb8b95d70ecf6c572a3f67dca">hwloc_get_obj_covering_cpuset</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00297"></a><span class="lineno"><a class="line" href="a00208.html#ga41acdcdbb8b95d70ecf6c572a3f67dca">  297</a></span>&#160;<a class="code" href="a00208.html#ga41acdcdbb8b95d70ecf6c572a3f67dca">hwloc_get_obj_covering_cpuset</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set)</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;{</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;  <span class="keyword">struct </span><a class="code" href="a00253.html">hwloc_obj</a> *current = <a class="code" href="a00199.html#ga2d4b12fc187dfc53b35f2fa21d21044d">hwloc_get_root_obj</a>(topology);</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="a00217.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(set) || !<a class="code" href="a00217.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a>(set, current-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>))</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;    <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;  <span class="keywordflow">while</span> (1) {</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;    <a class="code" href="a00253.html">hwloc_obj_t</a> child = <a class="code" href="a00208.html#ga0e66aa2dc6b2527cfd10723af646c9d7">hwloc_get_child_covering_cpuset</a>(topology, set, current);</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;    <span class="keywordflow">if</span> (!child)</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;      <span class="keywordflow">return</span> current;</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;    current = child;</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;  }</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;}</div>
+<div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160; </div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00321"></a><span class="lineno"><a class="line" href="a00208.html#gaba4b6d86eba1169ced4b0e941d2bb5f0">  321</a></span>&#160;<a class="code" href="a00208.html#gaba4b6d86eba1169ced4b0e941d2bb5f0">hwloc_get_next_obj_covering_cpuset_by_depth</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;                                            <span class="keywordtype">int</span> <a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>, <a class="code" href="a00253.html">hwloc_obj_t</a> prev)</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;{</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;  <a class="code" href="a00253.html">hwloc_obj_t</a> next = <a class="code" href="a00199.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a>(topology, <a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>, prev);</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;  <span class="keywordflow">if</span> (!next)</div>
+<div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;    <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;  <span class="keywordflow">while</span> (next &amp;&amp; !<a class="code" href="a00217.html#gaefa070f9232857ba5a57297ea9a08ea2">hwloc_bitmap_intersects</a>(set, next-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>))</div>
+<div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;    next = next-&gt;<a class="code" href="a00253.html#a85a788017457129589318b6c39451acf">next_cousin</a>;</div>
+<div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;  <span class="keywordflow">return</span> next;</div>
+<div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;}</div>
+<div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160; </div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00348"></a><span class="lineno"><a class="line" href="a00208.html#ga91cfae08b092e7966002e15d1e987213">  348</a></span>&#160;<a class="code" href="a00208.html#ga91cfae08b092e7966002e15d1e987213">hwloc_get_next_obj_covering_cpuset_by_type</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;                                           <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a>, <a class="code" href="a00253.html">hwloc_obj_t</a> prev)</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;{</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;  <span class="keywordtype">int</span> <a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> = <a class="code" href="a00199.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a>);</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> == <a class="code" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a> || <a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> == <a class="code" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a>)</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;    <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;  <span class="keywordflow">return</span> <a class="code" href="a00208.html#gaba4b6d86eba1169ced4b0e941d2bb5f0">hwloc_get_next_obj_covering_cpuset_by_depth</a>(topology, set, <a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>, prev);</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;}</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160; </div>
+<div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;<a class="code" href="a00209.html#ga9f8c93fde236e9642a96957af01a11cb">hwloc_get_ancestor_obj_by_depth</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <span class="keywordtype">int</span> <a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>, <a class="code" href="a00253.html">hwloc_obj_t</a> obj) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00380"></a><span class="lineno"><a class="line" href="a00209.html#ga9f8c93fde236e9642a96957af01a11cb">  380</a></span>&#160;<a class="code" href="a00209.html#ga9f8c93fde236e9642a96957af01a11cb">hwloc_get_ancestor_obj_by_depth</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <span class="keywordtype">int</span> <a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>, <a class="code" href="a00253.html">hwloc_obj_t</a> obj)</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;{</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;  <a class="code" href="a00253.html">hwloc_obj_t</a> ancestor = obj;</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;  <span class="keywordflow">if</span> (obj-&gt;<a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> &lt; <a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>)</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;    <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;  <span class="keywordflow">while</span> (ancestor &amp;&amp; ancestor-&gt;<a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> &gt; <a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>)</div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;    ancestor = ancestor-&gt;<a class="code" href="a00253.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;  <span class="keywordflow">return</span> ancestor;</div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;}</div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160; </div>
+<div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;<a class="code" href="a00209.html#ga70f0c7583291da707c15ae4daa850f41">hwloc_get_ancestor_obj_by_type</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a>, <a class="code" href="a00253.html">hwloc_obj_t</a> obj) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00400"></a><span class="lineno"><a class="line" href="a00209.html#ga70f0c7583291da707c15ae4daa850f41">  400</a></span>&#160;<a class="code" href="a00209.html#ga70f0c7583291da707c15ae4daa850f41">hwloc_get_ancestor_obj_by_type</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a>, <a class="code" href="a00253.html">hwloc_obj_t</a> obj)</div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;{</div>
+<div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;  <a class="code" href="a00253.html">hwloc_obj_t</a> ancestor = obj-&gt;<a class="code" href="a00253.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;  <span class="keywordflow">while</span> (ancestor &amp;&amp; ancestor-&gt;<a class="code" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a> != <a class="code" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a>)</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;    ancestor = ancestor-&gt;<a class="code" href="a00253.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;  <span class="keywordflow">return</span> ancestor;</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;}</div>
+<div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160; </div>
+<div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;<a class="code" href="a00209.html#gab1fa883021928b5c476911c4102e9be3">hwloc_get_common_ancestor_obj</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00253.html">hwloc_obj_t</a> obj1, <a class="code" href="a00253.html">hwloc_obj_t</a> obj2) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00412"></a><span class="lineno"><a class="line" href="a00209.html#gab1fa883021928b5c476911c4102e9be3">  412</a></span>&#160;<a class="code" href="a00209.html#gab1fa883021928b5c476911c4102e9be3">hwloc_get_common_ancestor_obj</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00253.html">hwloc_obj_t</a> obj1, <a class="code" href="a00253.html">hwloc_obj_t</a> obj2)</div>
+<div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;{</div>
+<div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;  <span class="comment">/* the loop isn&#39;t so easy since intermediate ancestors may have</span></div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;<span class="comment">   * different depth, causing us to alternate between using obj1-&gt;parent</span></div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;<span class="comment">   * and obj2-&gt;parent. Also, even if at some point we find ancestors of</span></div>
+<div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;<span class="comment">   * of the same depth, their ancestors may have different depth again.</span></div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;<span class="comment">   */</span></div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;  <span class="keywordflow">while</span> (obj1 != obj2) {</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;    <span class="keywordflow">while</span> (obj1-&gt;<a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> &gt; obj2-&gt;<a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>)</div>
+<div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;      obj1 = obj1-&gt;<a class="code" href="a00253.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;    <span class="keywordflow">while</span> (obj2-&gt;<a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> &gt; obj1-&gt;<a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>)</div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;      obj2 = obj2-&gt;<a class="code" href="a00253.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;    <span class="keywordflow">if</span> (obj1 != obj2 &amp;&amp; obj1-&gt;<a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> == obj2-&gt;<a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>) {</div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;      obj1 = obj1-&gt;<a class="code" href="a00253.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;      obj2 = obj2-&gt;<a class="code" href="a00253.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;    }</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;  }</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;  <span class="keywordflow">return</span> obj1;</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;}</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160; </div>
+<div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;<a class="code" href="a00209.html#ga408cf74f5bf9ed497911a320c7f8cc56">hwloc_obj_is_in_subtree</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00253.html">hwloc_obj_t</a> obj, <a class="code" href="a00253.html">hwloc_obj_t</a> subtree_root) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00440"></a><span class="lineno"><a class="line" href="a00209.html#ga408cf74f5bf9ed497911a320c7f8cc56">  440</a></span>&#160;<a class="code" href="a00209.html#ga408cf74f5bf9ed497911a320c7f8cc56">hwloc_obj_is_in_subtree</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00253.html">hwloc_obj_t</a> obj, <a class="code" href="a00253.html">hwloc_obj_t</a> subtree_root)</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;{</div>
+<div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;  <span class="keywordflow">return</span> obj-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a> &amp;&amp; subtree_root-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a> &amp;&amp; <a class="code" href="a00217.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a>(obj-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, subtree_root-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>);</div>
+<div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;}</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160; </div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00456"></a><span class="lineno"><a class="line" href="a00209.html#ga12d8565a3436c565e791ed02a0353621">  456</a></span>&#160;<a class="code" href="a00209.html#ga12d8565a3436c565e791ed02a0353621">hwloc_get_next_child</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00253.html">hwloc_obj_t</a> <a class="code" href="a00253.html#adc494f6aed939992be1c55cca5822900">parent</a>, <a class="code" href="a00253.html">hwloc_obj_t</a> prev)</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;{</div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;  <a class="code" href="a00253.html">hwloc_obj_t</a> obj;</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;  <span class="keywordtype">int</span> state = 0;</div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;  <span class="keywordflow">if</span> (prev) {</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;    <span class="keywordflow">if</span> (prev-&gt;<a class="code" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d">HWLOC_OBJ_MISC</a>)</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;      state = 3;</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (prev-&gt;<a class="code" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0">HWLOC_OBJ_BRIDGE</a> || prev-&gt;<a class="code" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a> || prev-&gt;<a class="code" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075">HWLOC_OBJ_OS_DEVICE</a>)</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;      state = 2;</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;    <span class="keywordflow">else</span> <span class="keywordflow">if</span> (prev-&gt;<a class="code" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>)</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;      state = 1;</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;    obj = prev-&gt;<a class="code" href="a00253.html#a7f2343ed476fe4942e6fffd4cade1b40">next_sibling</a>;</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;  } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;    obj = <a class="code" href="a00253.html#adc494f6aed939992be1c55cca5822900">parent</a>-&gt;<a class="code" href="a00253.html#af51d08a0a79dba517c06c5afedc8d2dc">first_child</a>;</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;  }</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;  <span class="keywordflow">if</span> (!obj &amp;&amp; state == 0) {</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;    obj = <a class="code" href="a00253.html#adc494f6aed939992be1c55cca5822900">parent</a>-&gt;<a class="code" href="a00253.html#ac0e8200dba25b90d5954bd4ec61f97d3">memory_first_child</a>;</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;    state = 1;</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;  }</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;  <span class="keywordflow">if</span> (!obj &amp;&amp; state == 1) {</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;    obj = <a class="code" href="a00253.html#adc494f6aed939992be1c55cca5822900">parent</a>-&gt;<a class="code" href="a00253.html#a8d14c88e1ebc4ae67cc69f9e928558b3">io_first_child</a>;</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;    state = 2;</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;  }</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;  <span class="keywordflow">if</span> (!obj &amp;&amp; state == 2) {</div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;    obj = <a class="code" href="a00253.html#adc494f6aed939992be1c55cca5822900">parent</a>-&gt;<a class="code" href="a00253.html#a57812a313fe9b1a9500489f47c3011cc">misc_first_child</a>;</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;    state = 3;</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;  }</div>
+<div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;  <span class="keywordflow">return</span> obj;</div>
+<div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;}</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160; </div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00513"></a><span class="lineno"><a class="line" href="a00210.html#ga52ef38431eba383b048b98c669b59a16">  513</a></span>&#160;<a class="code" href="a00210.html#ga52ef38431eba383b048b98c669b59a16">hwloc_obj_type_is_normal</a>(<a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a>);</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160; </div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00524"></a><span class="lineno"><a class="line" href="a00210.html#gac8a954ed37a4376097234c828068cbef">  524</a></span>&#160;<a class="code" href="a00210.html#gac8a954ed37a4376097234c828068cbef">hwloc_obj_type_is_io</a>(<a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a>);</div>
+<div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160; </div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00535"></a><span class="lineno"><a class="line" href="a00210.html#ga1d074390c8a3dc3088d84f73fb73f966">  535</a></span>&#160;<a class="code" href="a00210.html#ga1d074390c8a3dc3088d84f73fb73f966">hwloc_obj_type_is_memory</a>(<a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a>);</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160; </div>
+<div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00544"></a><span class="lineno"><a class="line" href="a00210.html#ga2ed589bea28711e80b92066510a5607d">  544</a></span>&#160;<a class="code" href="a00210.html#ga2ed589bea28711e80b92066510a5607d">hwloc_obj_type_is_cache</a>(<a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a>);</div>
+<div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160; </div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00553"></a><span class="lineno"><a class="line" href="a00210.html#ga395e48cd221d107e5891689624e1aec4">  553</a></span>&#160;<a class="code" href="a00210.html#ga395e48cd221d107e5891689624e1aec4">hwloc_obj_type_is_dcache</a>(<a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a>);</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160; </div>
+<div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00562"></a><span class="lineno"><a class="line" href="a00210.html#ga8abcee67b9b074332c1866405a3648a9">  562</a></span>&#160;<a class="code" href="a00210.html#ga8abcee67b9b074332c1866405a3648a9">hwloc_obj_type_is_icache</a>(<a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a>);</div>
+<div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160; </div>
+<div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00594"></a><span class="lineno"><a class="line" href="a00211.html#gad108a09ce400222fe45545257d575489">  594</a></span>&#160;<a class="code" href="a00211.html#gad108a09ce400222fe45545257d575489">hwloc_get_cache_type_depth</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;                            <span class="keywordtype">unsigned</span> cachelevel, <a class="code" href="a00196.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a> cachetype)</div>
+<div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;{</div>
+<div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;  <span class="keywordtype">int</span> <a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>;</div>
+<div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;  <span class="keywordtype">int</span> found = <a class="code" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a>;</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;  <span class="keywordflow">for</span> (<a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>=0; ; <a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>++) {</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;    <a class="code" href="a00253.html">hwloc_obj_t</a> obj = <a class="code" href="a00199.html#ga391f6b2613f0065673eaa4069b93d4e0">hwloc_get_obj_by_depth</a>(topology, <a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>, 0);</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;    <span class="keywordflow">if</span> (!obj)</div>
+<div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;      <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;    <span class="keywordflow">if</span> (!<a class="code" href="a00210.html#ga395e48cd221d107e5891689624e1aec4">hwloc_obj_type_is_dcache</a>(obj-&gt;<a class="code" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a>) || obj-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a23f553f3252c9d13f2338231cd354ea9">cache</a>.<a class="code" href="a00269.html#a5c8f7f39193736c2187ed626940835d5">depth</a> != cachelevel)</div>
+<div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;      <span class="comment">/* doesn&#39;t match, try next depth */</span></div>
+<div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;      <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;    <span class="keywordflow">if</span> (cachetype == (<a class="code" href="a00196.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a>) -1) {</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;      <span class="keywordflow">if</span> (found != <a class="code" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a>) {</div>
+<div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;        <span class="comment">/* second match, return MULTIPLE */</span></div>
+<div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a>;</div>
+<div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;      }</div>
+<div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;      <span class="comment">/* first match, mark it as found */</span></div>
+<div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;      found = <a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>;</div>
+<div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;      <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;    }</div>
+<div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;    <span class="keywordflow">if</span> (obj-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a23f553f3252c9d13f2338231cd354ea9">cache</a>.<a class="code" href="a00269.html#ad8edc8ded2b7a70d6abbc874801930f4">type</a> == cachetype || obj-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a23f553f3252c9d13f2338231cd354ea9">cache</a>.<a class="code" href="a00269.html#ad8edc8ded2b7a70d6abbc874801930f4">type</a> == <a class="code" href="a00196.html#gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a">HWLOC_OBJ_CACHE_UNIFIED</a>)</div>
+<div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;      <span class="comment">/* exact match (either unified is alone, or we match instruction or data), return immediately */</span></div>
+<div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;      <span class="keywordflow">return</span> <a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>;</div>
+<div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;  }</div>
+<div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;  <span class="comment">/* went to the bottom, return what we found */</span></div>
+<div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;  <span class="keywordflow">return</span> found;</div>
+<div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;}</div>
+<div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160; </div>
+<div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;<a class="code" href="a00211.html#gac4cd480a5deaa4ada047fdd11ae4c070">hwloc_get_cache_covering_cpuset</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00630"></a><span class="lineno"><a class="line" href="a00211.html#gac4cd480a5deaa4ada047fdd11ae4c070">  630</a></span>&#160;<a class="code" href="a00211.html#gac4cd480a5deaa4ada047fdd11ae4c070">hwloc_get_cache_covering_cpuset</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set)</div>
+<div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;{</div>
+<div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;  <a class="code" href="a00253.html">hwloc_obj_t</a> current = <a class="code" href="a00208.html#ga41acdcdbb8b95d70ecf6c572a3f67dca">hwloc_get_obj_covering_cpuset</a>(topology, set);</div>
+<div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;  <span class="keywordflow">while</span> (current) {</div>
+<div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="a00210.html#ga395e48cd221d107e5891689624e1aec4">hwloc_obj_type_is_dcache</a>(current-&gt;<a class="code" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a>))</div>
+<div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;      <span class="keywordflow">return</span> current;</div>
+<div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;    current = current-&gt;<a class="code" href="a00253.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
+<div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;  }</div>
+<div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;  <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;}</div>
+<div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160; </div>
+<div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;<a class="code" href="a00211.html#ga36f48c32837c7a70b424706e213dcd71">hwloc_get_shared_cache_covering_obj</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00253.html">hwloc_obj_t</a> obj) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00648"></a><span class="lineno"><a class="line" href="a00211.html#ga36f48c32837c7a70b424706e213dcd71">  648</a></span>&#160;<a class="code" href="a00211.html#ga36f48c32837c7a70b424706e213dcd71">hwloc_get_shared_cache_covering_obj</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00253.html">hwloc_obj_t</a> obj)</div>
+<div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;{</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;  <a class="code" href="a00253.html">hwloc_obj_t</a> current = obj-&gt;<a class="code" href="a00253.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
+<div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;  <span class="keywordflow">if</span> (!obj-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>)</div>
+<div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;    <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;  <span class="keywordflow">while</span> (current) {</div>
+<div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;    <span class="keywordflow">if</span> (!<a class="code" href="a00217.html#ga32376b1405e57472b73c3aa53bb39663">hwloc_bitmap_isequal</a>(current-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, obj-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>)</div>
+<div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;        &amp;&amp; <a class="code" href="a00210.html#ga395e48cd221d107e5891689624e1aec4">hwloc_obj_type_is_dcache</a>(current-&gt;<a class="code" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a>))</div>
+<div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;      <span class="keywordflow">return</span> current;</div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;    current = current-&gt;<a class="code" href="a00253.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
+<div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;  }</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;  <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;}</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160; </div>
+<div class="line"><a name="l00691"></a><span class="lineno"><a class="line" href="a00212.html#ga050646458efc8ca1120d9f124c5ad861">  691</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00212.html#ga050646458efc8ca1120d9f124c5ad861">hwloc_bitmap_singlify_per_core</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> <a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, <span class="keywordtype">unsigned</span> which);</div>
+<div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160; </div>
+<div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;<a class="code" href="a00212.html#ga751c238a4931db5cc0ca3181b7dd7479">hwloc_get_pu_obj_by_os_index</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">unsigned</span> <a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00705"></a><span class="lineno"><a class="line" href="a00212.html#ga751c238a4931db5cc0ca3181b7dd7479">  705</a></span>&#160;<a class="code" href="a00212.html#ga751c238a4931db5cc0ca3181b7dd7479">hwloc_get_pu_obj_by_os_index</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">unsigned</span> <a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>)</div>
+<div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;{</div>
+<div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;  <a class="code" href="a00253.html">hwloc_obj_t</a> obj = NULL;</div>
+<div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;  <span class="keywordflow">while</span> ((obj = <a class="code" href="a00199.html#ga759e88eaf5a230ad283e9d4c42486735">hwloc_get_next_obj_by_type</a>(topology, <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661">HWLOC_OBJ_PU</a>, obj)) != NULL)</div>
+<div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;    <span class="keywordflow">if</span> (obj-&gt;<a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> == <a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>)</div>
+<div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;      <span class="keywordflow">return</span> obj;</div>
+<div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;  <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;}</div>
+<div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160; </div>
+<div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;<a class="code" href="a00212.html#gab89d9ed9edfaa3dd526fb6ee1a1618ea">hwloc_get_numanode_obj_by_os_index</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">unsigned</span> <a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00726"></a><span class="lineno"><a class="line" href="a00212.html#gab89d9ed9edfaa3dd526fb6ee1a1618ea">  726</a></span>&#160;<a class="code" href="a00212.html#gab89d9ed9edfaa3dd526fb6ee1a1618ea">hwloc_get_numanode_obj_by_os_index</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">unsigned</span> <a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>)</div>
+<div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;{</div>
+<div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;  <a class="code" href="a00253.html">hwloc_obj_t</a> obj = NULL;</div>
+<div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;  <span class="keywordflow">while</span> ((obj = <a class="code" href="a00199.html#ga759e88eaf5a230ad283e9d4c42486735">hwloc_get_next_obj_by_type</a>(topology, <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>, obj)) != NULL)</div>
+<div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;    <span class="keywordflow">if</span> (obj-&gt;<a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> == <a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>)</div>
+<div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;      <span class="keywordflow">return</span> obj;</div>
+<div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;  <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;}</div>
+<div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160; </div>
+<div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;<span class="comment">/* TODO: rather provide an iterator? Provide a way to know how much should be allocated? By returning the total number of objects instead? */</span></div>
+<div class="line"><a name="l00747"></a><span class="lineno"><a class="line" href="a00212.html#ga2cd22a34360643f7f5bad09576dec205">  747</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">unsigned</span> <a class="code" href="a00212.html#ga2cd22a34360643f7f5bad09576dec205">hwloc_get_closest_objs</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00253.html">hwloc_obj_t</a> src, <a class="code" href="a00253.html">hwloc_obj_t</a> * __hwloc_restrict objs, <span class="keywordtype">unsigned</span> max);</div>
+<div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160; </div>
+<div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;<a class="code" href="a00212.html#ga7a0c1046851f7a88bd52f5a1d4ba0a97">hwloc_get_obj_below_by_type</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;                             <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type1, <span class="keywordtype">unsigned</span> idx1,</div>
+<div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;                             <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type2, <span class="keywordtype">unsigned</span> idx2) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00766"></a><span class="lineno"><a class="line" href="a00212.html#ga7a0c1046851f7a88bd52f5a1d4ba0a97">  766</a></span>&#160;<a class="code" href="a00212.html#ga7a0c1046851f7a88bd52f5a1d4ba0a97">hwloc_get_obj_below_by_type</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;                             <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type1, <span class="keywordtype">unsigned</span> idx1,</div>
+<div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;                             <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type2, <span class="keywordtype">unsigned</span> idx2)</div>
+<div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;{</div>
+<div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;  <a class="code" href="a00253.html">hwloc_obj_t</a> obj;</div>
+<div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;  obj = <a class="code" href="a00199.html#ga6f414dd80a2b943967a0ac92da3181a2">hwloc_get_obj_by_type</a> (topology, type1, idx1);</div>
+<div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;  <span class="keywordflow">if</span> (!obj)</div>
+<div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;    <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;  <span class="keywordflow">return</span> <a class="code" href="a00207.html#ga2edf924e5a0cca9cb22f65cc77c6ddb5">hwloc_get_obj_inside_cpuset_by_type</a>(topology, obj-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, type2, idx2);</div>
+<div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;}</div>
+<div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160; </div>
+<div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;<a class="code" href="a00212.html#gacb51295ff3fbd3a96f990f20c6492b1d">hwloc_get_obj_below_array_by_type</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">int</span> nr, <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> *typev, <span class="keywordtype">unsigned</span> *idxv) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00798"></a><span class="lineno"><a class="line" href="a00212.html#gacb51295ff3fbd3a96f990f20c6492b1d">  798</a></span>&#160;<a class="code" href="a00212.html#gacb51295ff3fbd3a96f990f20c6492b1d">hwloc_get_obj_below_array_by_type</a> (<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">int</span> nr, <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> *typev, <span class="keywordtype">unsigned</span> *idxv)</div>
+<div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160;{</div>
+<div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;  <a class="code" href="a00253.html">hwloc_obj_t</a> obj = <a class="code" href="a00199.html#ga2d4b12fc187dfc53b35f2fa21d21044d">hwloc_get_root_obj</a>(topology);</div>
+<div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;  <span class="keywordtype">int</span> i;</div>
+<div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;  <span class="keywordflow">for</span>(i=0; i&lt;nr; i++) {</div>
+<div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;    <span class="keywordflow">if</span> (!obj)</div>
+<div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160;      <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;    obj = <a class="code" href="a00207.html#ga2edf924e5a0cca9cb22f65cc77c6ddb5">hwloc_get_obj_inside_cpuset_by_type</a>(topology, obj-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, typev[i], idxv[i]);</div>
+<div class="line"><a name="l00806"></a><span class="lineno">  806</span>&#160;  }</div>
+<div class="line"><a name="l00807"></a><span class="lineno">  807</span>&#160;  <span class="keywordflow">return</span> obj;</div>
+<div class="line"><a name="l00808"></a><span class="lineno">  808</span>&#160;}</div>
+<div class="line"><a name="l00809"></a><span class="lineno">  809</span>&#160; </div>
+<div class="line"><a name="l00848"></a><span class="lineno">  848</span>&#160;HWLOC_DECLSPEC <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00849"></a><span class="lineno"><a class="line" href="a00212.html#gab5df3ad1e8565ea0c2cf06412f6f6233">  849</a></span>&#160;<a class="code" href="a00212.html#gab5df3ad1e8565ea0c2cf06412f6f6233">hwloc_get_obj_with_same_locality</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00253.html">hwloc_obj_t</a> src,</div>
+<div class="line"><a name="l00850"></a><span class="lineno">  850</span>&#160;                                 <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a>, <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="a00253.html#a5d4f97e76723a9ec8d38046f19e00d33">subtype</a>, <span class="keyword">const</span> <span class="keywordtype">char</span> *nameprefix,</div>
+<div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160;                                 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
+<div class="line"><a name="l00852"></a><span class="lineno">  852</span>&#160; </div>
+<div class="line"><a name="l00863"></a><span class="lineno"><a class="line" href="a00213.html#ga8b835295a52b6768a5e6c8abb1f9c54d">  863</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00213.html#ga8b835295a52b6768a5e6c8abb1f9c54d">hwloc_distrib_flags_e</a> {</div>
+<div class="line"><a name="l00867"></a><span class="lineno">  867</span>&#160;  <a class="code" href="a00213.html#gga8b835295a52b6768a5e6c8abb1f9c54da2ca08404bfbebe9ed5f34c3d7635425a">HWLOC_DISTRIB_FLAG_REVERSE</a> = (1UL&lt;&lt;0)</div>
+<div class="line"><a name="l00868"></a><span class="lineno"><a class="line" href="a00213.html#gga8b835295a52b6768a5e6c8abb1f9c54da2ca08404bfbebe9ed5f34c3d7635425a">  868</a></span>&#160;};</div>
+<div class="line"><a name="l00869"></a><span class="lineno">  869</span>&#160; </div>
+<div class="line"><a name="l00890"></a><span class="lineno">  890</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00891"></a><span class="lineno"><a class="line" href="a00213.html#ga7b0c28f797c2ff17fa2f244ebbd55b33">  891</a></span>&#160;<a class="code" href="a00213.html#ga7b0c28f797c2ff17fa2f244ebbd55b33">hwloc_distrib</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00892"></a><span class="lineno">  892</span>&#160;              <a class="code" href="a00253.html">hwloc_obj_t</a> *roots, <span class="keywordtype">unsigned</span> n_roots,</div>
+<div class="line"><a name="l00893"></a><span class="lineno">  893</span>&#160;              <a class="code" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> *set,</div>
+<div class="line"><a name="l00894"></a><span class="lineno">  894</span>&#160;              <span class="keywordtype">unsigned</span> n,</div>
+<div class="line"><a name="l00895"></a><span class="lineno">  895</span>&#160;              <span class="keywordtype">int</span> until, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags)</div>
+<div class="line"><a name="l00896"></a><span class="lineno">  896</span>&#160;{</div>
+<div class="line"><a name="l00897"></a><span class="lineno">  897</span>&#160;  <span class="keywordtype">unsigned</span> i;</div>
+<div class="line"><a name="l00898"></a><span class="lineno">  898</span>&#160;  <span class="keywordtype">unsigned</span> tot_weight;</div>
+<div class="line"><a name="l00899"></a><span class="lineno">  899</span>&#160;  <span class="keywordtype">unsigned</span> given, givenweight;</div>
+<div class="line"><a name="l00900"></a><span class="lineno">  900</span>&#160;  <a class="code" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> *cpusetp = set;</div>
+<div class="line"><a name="l00901"></a><span class="lineno">  901</span>&#160; </div>
+<div class="line"><a name="l00902"></a><span class="lineno">  902</span>&#160;  <span class="keywordflow">if</span> (flags &amp; ~<a class="code" href="a00213.html#gga8b835295a52b6768a5e6c8abb1f9c54da2ca08404bfbebe9ed5f34c3d7635425a">HWLOC_DISTRIB_FLAG_REVERSE</a>) {</div>
+<div class="line"><a name="l00903"></a><span class="lineno">  903</span>&#160;    errno = EINVAL;</div>
+<div class="line"><a name="l00904"></a><span class="lineno">  904</span>&#160;    <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00905"></a><span class="lineno">  905</span>&#160;  }</div>
+<div class="line"><a name="l00906"></a><span class="lineno">  906</span>&#160; </div>
+<div class="line"><a name="l00907"></a><span class="lineno">  907</span>&#160;  tot_weight = 0;</div>
+<div class="line"><a name="l00908"></a><span class="lineno">  908</span>&#160;  <span class="keywordflow">for</span> (i = 0; i &lt; n_roots; i++)</div>
+<div class="line"><a name="l00909"></a><span class="lineno">  909</span>&#160;    tot_weight += (<span class="keywordtype">unsigned</span>) <a class="code" href="a00217.html#ga0200466842c0e1f5da75e84dde460b10">hwloc_bitmap_weight</a>(roots[i]-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>);</div>
+<div class="line"><a name="l00910"></a><span class="lineno">  910</span>&#160; </div>
+<div class="line"><a name="l00911"></a><span class="lineno">  911</span>&#160;  <span class="keywordflow">for</span> (i = 0, given = 0, givenweight = 0; i &lt; n_roots; i++) {</div>
+<div class="line"><a name="l00912"></a><span class="lineno">  912</span>&#160;    <span class="keywordtype">unsigned</span> chunk, weight;</div>
+<div class="line"><a name="l00913"></a><span class="lineno">  913</span>&#160;    <a class="code" href="a00253.html">hwloc_obj_t</a> root = roots[flags &amp; <a class="code" href="a00213.html#gga8b835295a52b6768a5e6c8abb1f9c54da2ca08404bfbebe9ed5f34c3d7635425a">HWLOC_DISTRIB_FLAG_REVERSE</a> ? n_roots-1-i : i];</div>
+<div class="line"><a name="l00914"></a><span class="lineno">  914</span>&#160;    <a class="code" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> <a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a> = root-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>;</div>
+<div class="line"><a name="l00915"></a><span class="lineno">  915</span>&#160;    <span class="keywordflow">while</span> (!<a class="code" href="a00210.html#ga52ef38431eba383b048b98c669b59a16">hwloc_obj_type_is_normal</a>(root-&gt;<a class="code" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a>))</div>
+<div class="line"><a name="l00916"></a><span class="lineno">  916</span>&#160;      <span class="comment">/* If memory/io/misc, walk up to normal parent */</span></div>
+<div class="line"><a name="l00917"></a><span class="lineno">  917</span>&#160;      root = root-&gt;<a class="code" href="a00253.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
+<div class="line"><a name="l00918"></a><span class="lineno">  918</span>&#160;    weight = (unsigned) <a class="code" href="a00217.html#ga0200466842c0e1f5da75e84dde460b10">hwloc_bitmap_weight</a>(<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>);</div>
+<div class="line"><a name="l00919"></a><span class="lineno">  919</span>&#160;    <span class="keywordflow">if</span> (!weight)</div>
+<div class="line"><a name="l00920"></a><span class="lineno">  920</span>&#160;      <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00921"></a><span class="lineno">  921</span>&#160;    <span class="comment">/* Give to root a chunk proportional to its weight.</span></div>
+<div class="line"><a name="l00922"></a><span class="lineno">  922</span>&#160;<span class="comment">     * If previous chunks got rounded-up, we may get a bit less. */</span></div>
+<div class="line"><a name="l00923"></a><span class="lineno">  923</span>&#160;    chunk = (( (givenweight+weight) * n  + tot_weight-1) / tot_weight)</div>
+<div class="line"><a name="l00924"></a><span class="lineno">  924</span>&#160;          - ((  givenweight         * n  + tot_weight-1) / tot_weight);</div>
+<div class="line"><a name="l00925"></a><span class="lineno">  925</span>&#160;    <span class="keywordflow">if</span> (!root-&gt;<a class="code" href="a00253.html#aac3f6da35c9b57599909a44ce2b716c1">arity</a> || chunk &lt;= 1 || root-&gt;<a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> &gt;= until) {</div>
+<div class="line"><a name="l00926"></a><span class="lineno">  926</span>&#160;      <span class="comment">/* We can&#39;t split any more, put everything there.  */</span></div>
+<div class="line"><a name="l00927"></a><span class="lineno">  927</span>&#160;      <span class="keywordflow">if</span> (chunk) {</div>
+<div class="line"><a name="l00928"></a><span class="lineno">  928</span>&#160;        <span class="comment">/* Fill cpusets with ours */</span></div>
+<div class="line"><a name="l00929"></a><span class="lineno">  929</span>&#160;        <span class="keywordtype">unsigned</span> j;</div>
+<div class="line"><a name="l00930"></a><span class="lineno">  930</span>&#160;        <span class="keywordflow">for</span> (j=0; j &lt; chunk; j++)</div>
+<div class="line"><a name="l00931"></a><span class="lineno">  931</span>&#160;          cpusetp[j] = <a class="code" href="a00217.html#gae679434c1a5f41d3560a8a7e2c1b0dee">hwloc_bitmap_dup</a>(<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>);</div>
+<div class="line"><a name="l00932"></a><span class="lineno">  932</span>&#160;      } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00933"></a><span class="lineno">  933</span>&#160;        <span class="comment">/* We got no chunk, just merge our cpuset to a previous one</span></div>
+<div class="line"><a name="l00934"></a><span class="lineno">  934</span>&#160;<span class="comment">         * (the first chunk cannot be empty)</span></div>
+<div class="line"><a name="l00935"></a><span class="lineno">  935</span>&#160;<span class="comment">         * so that this root doesn&#39;t get ignored.</span></div>
+<div class="line"><a name="l00936"></a><span class="lineno">  936</span>&#160;<span class="comment">         */</span></div>
+<div class="line"><a name="l00937"></a><span class="lineno">  937</span>&#160;        assert(given);</div>
+<div class="line"><a name="l00938"></a><span class="lineno">  938</span>&#160;        <a class="code" href="a00217.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a>(cpusetp[-1], cpusetp[-1], <a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>);</div>
+<div class="line"><a name="l00939"></a><span class="lineno">  939</span>&#160;      }</div>
+<div class="line"><a name="l00940"></a><span class="lineno">  940</span>&#160;    } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00941"></a><span class="lineno">  941</span>&#160;      <span class="comment">/* Still more to distribute, recurse into children */</span></div>
+<div class="line"><a name="l00942"></a><span class="lineno">  942</span>&#160;      <a class="code" href="a00213.html#ga7b0c28f797c2ff17fa2f244ebbd55b33">hwloc_distrib</a>(topology, root-&gt;<a class="code" href="a00253.html#a04d05403da37bfe17cd63b7c7dd07b1f">children</a>, root-&gt;<a class="code" href="a00253.html#aac3f6da35c9b57599909a44ce2b716c1">arity</a>, cpusetp, chunk, until, flags);</div>
+<div class="line"><a name="l00943"></a><span class="lineno">  943</span>&#160;    }</div>
+<div class="line"><a name="l00944"></a><span class="lineno">  944</span>&#160;    cpusetp += chunk;</div>
+<div class="line"><a name="l00945"></a><span class="lineno">  945</span>&#160;    given += chunk;</div>
+<div class="line"><a name="l00946"></a><span class="lineno">  946</span>&#160;    givenweight += weight;</div>
+<div class="line"><a name="l00947"></a><span class="lineno">  947</span>&#160;  }</div>
+<div class="line"><a name="l00948"></a><span class="lineno">  948</span>&#160; </div>
+<div class="line"><a name="l00949"></a><span class="lineno">  949</span>&#160;  <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00950"></a><span class="lineno">  950</span>&#160;}</div>
+<div class="line"><a name="l00951"></a><span class="lineno">  951</span>&#160; </div>
+<div class="line"><a name="l00969"></a><span class="lineno">  969</span>&#160;HWLOC_DECLSPEC <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a></div>
+<div class="line"><a name="l00970"></a><span class="lineno"><a class="line" href="a00214.html#gaee30e03391c1ed7dfd617fb5c7bbb033">  970</a></span>&#160;<a class="code" href="a00214.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00971"></a><span class="lineno">  971</span>&#160; </div>
+<div class="line"><a name="l00983"></a><span class="lineno">  983</span>&#160;HWLOC_DECLSPEC <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a></div>
+<div class="line"><a name="l00984"></a><span class="lineno"><a class="line" href="a00214.html#ga79212faa07b70dd26588941b17d9fa82">  984</a></span>&#160;<a class="code" href="a00214.html#ga79212faa07b70dd26588941b17d9fa82">hwloc_topology_get_topology_cpuset</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00985"></a><span class="lineno">  985</span>&#160; </div>
+<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;HWLOC_DECLSPEC <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a></div>
+<div class="line"><a name="l01003"></a><span class="lineno"><a class="line" href="a00214.html#ga517d5d68ec9f24583d8933aab713be8e"> 1003</a></span>&#160;<a class="code" href="a00214.html#ga517d5d68ec9f24583d8933aab713be8e">hwloc_topology_get_allowed_cpuset</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; </div>
+<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;HWLOC_DECLSPEC <a class="code" href="a00195.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a></div>
+<div class="line"><a name="l01015"></a><span class="lineno"><a class="line" href="a00214.html#ga773fd98949461ef4c1e3170bb0c0418f"> 1015</a></span>&#160;<a class="code" href="a00214.html#ga773fd98949461ef4c1e3170bb0c0418f">hwloc_topology_get_complete_nodeset</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; </div>
+<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;HWLOC_DECLSPEC <a class="code" href="a00195.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a></div>
+<div class="line"><a name="l01029"></a><span class="lineno"><a class="line" href="a00214.html#ga3fd37303e99ace8b0d0ea03f95f8c514"> 1029</a></span>&#160;<a class="code" href="a00214.html#ga3fd37303e99ace8b0d0ea03f95f8c514">hwloc_topology_get_topology_nodeset</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; </div>
+<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;HWLOC_DECLSPEC <a class="code" href="a00195.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a></div>
+<div class="line"><a name="l01048"></a><span class="lineno"><a class="line" href="a00214.html#ga21a4d7237a11e76b912ed4524ab78cbd"> 1048</a></span>&#160;<a class="code" href="a00214.html#ga21a4d7237a11e76b912ed4524ab78cbd">hwloc_topology_get_allowed_nodeset</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; </div>
+<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l01071"></a><span class="lineno"><a class="line" href="a00215.html#ga185751c1653fedbeb7cc480840f38cde"> 1071</a></span>&#160;<a class="code" href="a00215.html#ga185751c1653fedbeb7cc480840f38cde">hwloc_cpuset_to_nodeset</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> _cpuset, <a class="code" href="a00195.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a> <a class="code" href="a00253.html#a08f0d0e16c619a6e653526cbee4ffea3">nodeset</a>)</div>
+<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;{</div>
+<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;        <span class="keywordtype">int</span> <a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> = <a class="code" href="a00199.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
+<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;        <a class="code" href="a00253.html">hwloc_obj_t</a> obj = NULL;</div>
+<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;        assert(<a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> != <a class="code" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a>);</div>
+<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;        <a class="code" href="a00217.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a>(<a class="code" href="a00253.html#a08f0d0e16c619a6e653526cbee4ffea3">nodeset</a>);</div>
+<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;        <span class="keywordflow">while</span> ((obj = <a class="code" href="a00208.html#gaba4b6d86eba1169ced4b0e941d2bb5f0">hwloc_get_next_obj_covering_cpuset_by_depth</a>(topology, _cpuset, <a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>, obj)) != NULL)</div>
+<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160;                <span class="keywordflow">if</span> (<a class="code" href="a00217.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a>(<a class="code" href="a00253.html#a08f0d0e16c619a6e653526cbee4ffea3">nodeset</a>, obj-&gt;<a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>) &lt; 0)</div>
+<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;                        <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;        <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160;}</div>
+<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; </div>
+<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l01095"></a><span class="lineno"><a class="line" href="a00215.html#gad5ee8691e08a3538ea7633344c00456d"> 1095</a></span>&#160;<a class="code" href="a00215.html#gad5ee8691e08a3538ea7633344c00456d">hwloc_cpuset_from_nodeset</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> _cpuset, <a class="code" href="a00195.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> <a class="code" href="a00253.html#a08f0d0e16c619a6e653526cbee4ffea3">nodeset</a>)</div>
+<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160;{</div>
+<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;        <span class="keywordtype">int</span> <a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> = <a class="code" href="a00199.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
+<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;        <a class="code" href="a00253.html">hwloc_obj_t</a> obj = NULL;</div>
+<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160;        assert(<a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> != <a class="code" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a>);</div>
+<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;        <a class="code" href="a00217.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a>(_cpuset);</div>
+<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160;        <span class="keywordflow">while</span> ((obj = <a class="code" href="a00199.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a>(topology, <a class="code" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>, obj)) != NULL) {</div>
+<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160;                <span class="keywordflow">if</span> (<a class="code" href="a00217.html#ga11340dd487f110bb84f0a6e4ae90bd06">hwloc_bitmap_isset</a>(<a class="code" href="a00253.html#a08f0d0e16c619a6e653526cbee4ffea3">nodeset</a>, obj-&gt;<a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>))</div>
+<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160;                        <span class="comment">/* no need to check obj-&gt;cpuset because objects in levels always have a cpuset */</span></div>
+<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;                        <span class="keywordflow">if</span> (<a class="code" href="a00217.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a>(_cpuset, _cpuset, obj-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>) &lt; 0)</div>
+<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;                                <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;        }</div>
+<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160;        <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160;}</div>
+<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; </div>
+<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l01130"></a><span class="lineno"><a class="line" href="a00216.html#gaf139bb61375178e90cc3f1835b452ab6"> 1130</a></span>&#160;<a class="code" href="a00216.html#gaf139bb61375178e90cc3f1835b452ab6">hwloc_get_non_io_ancestor_obj</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
+<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160;                              <a class="code" href="a00253.html">hwloc_obj_t</a> ioobj)</div>
+<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;{</div>
+<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;  <a class="code" href="a00253.html">hwloc_obj_t</a> obj = ioobj;</div>
+<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;  <span class="keywordflow">while</span> (obj &amp;&amp; !obj-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>) {</div>
+<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160;    obj = obj-&gt;<a class="code" href="a00253.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
+<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160;  }</div>
+<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160;  <span class="keywordflow">return</span> obj;</div>
+<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160;}</div>
+<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; </div>
+<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l01145"></a><span class="lineno"><a class="line" href="a00216.html#ga66470dabce9db19a57c5940a909d0baa"> 1145</a></span>&#160;<a class="code" href="a00216.html#ga66470dabce9db19a57c5940a909d0baa">hwloc_get_next_pcidev</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00253.html">hwloc_obj_t</a> prev)</div>
+<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;{</div>
+<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160;  <span class="keywordflow">return</span> <a class="code" href="a00199.html#ga759e88eaf5a230ad283e9d4c42486735">hwloc_get_next_obj_by_type</a>(topology, <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a>, prev);</div>
+<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160;}</div>
+<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; </div>
+<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l01154"></a><span class="lineno"><a class="line" href="a00216.html#gacdbaf0db98872e224b7883a84bfb0455"> 1154</a></span>&#160;<a class="code" href="a00216.html#gacdbaf0db98872e224b7883a84bfb0455">hwloc_get_pcidev_by_busid</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160;                          <span class="keywordtype">unsigned</span> domain, <span class="keywordtype">unsigned</span> bus, <span class="keywordtype">unsigned</span> dev, <span class="keywordtype">unsigned</span> func)</div>
+<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160;{</div>
+<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160;  <a class="code" href="a00253.html">hwloc_obj_t</a> obj = NULL;</div>
+<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160;  <span class="keywordflow">while</span> ((obj = <a class="code" href="a00216.html#ga66470dabce9db19a57c5940a909d0baa">hwloc_get_next_pcidev</a>(topology, obj)) != NULL) {</div>
+<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160;    <span class="keywordflow">if</span> (obj-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00277.html#a8fba44988deb98613c1505a4019a34dc">domain</a> == domain</div>
+<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160;        &amp;&amp; obj-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00277.html#aae99e035e8d1387d7b8768aaa8eceb0a">bus</a> == bus</div>
+<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160;        &amp;&amp; obj-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00277.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">dev</a> == dev</div>
+<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;        &amp;&amp; obj-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00277.html#a695f32df53f4ef728670bfcf31b74e0f">func</a> == func)</div>
+<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160;      <span class="keywordflow">return</span> obj;</div>
+<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;  }</div>
+<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;  <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;}</div>
+<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; </div>
+<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l01172"></a><span class="lineno"><a class="line" href="a00216.html#ga23a978469353134b3104b846fe2efceb"> 1172</a></span>&#160;<a class="code" href="a00216.html#ga23a978469353134b3104b846fe2efceb">hwloc_get_pcidev_by_busidstring</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">const</span> <span class="keywordtype">char</span> *busid)</div>
+<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160;{</div>
+<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160;  <span class="keywordtype">unsigned</span> domain = 0; <span class="comment">/* default */</span></div>
+<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160;  <span class="keywordtype">unsigned</span> bus, dev, func;</div>
+<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; </div>
+<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160;  <span class="keywordflow">if</span> (sscanf(busid, <span class="stringliteral">&quot;%x:%x.%x&quot;</span>, &amp;bus, &amp;dev, &amp;func) != 3</div>
+<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160;      &amp;&amp; sscanf(busid, <span class="stringliteral">&quot;%x:%x:%x.%x&quot;</span>, &amp;domain, &amp;bus, &amp;dev, &amp;func) != 4) {</div>
+<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160;    errno = EINVAL;</div>
+<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160;    <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160;  }</div>
+<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; </div>
+<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;  <span class="keywordflow">return</span> <a class="code" href="a00216.html#gacdbaf0db98872e224b7883a84bfb0455">hwloc_get_pcidev_by_busid</a>(topology, domain, bus, dev, func);</div>
+<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;}</div>
+<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; </div>
+<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l01191"></a><span class="lineno"><a class="line" href="a00216.html#ga8b4584c8949e2c5f1c97ba7fe92b8145"> 1191</a></span>&#160;<a class="code" href="a00216.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00253.html">hwloc_obj_t</a> prev)</div>
+<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160;{</div>
+<div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160;  <span class="keywordflow">return</span> <a class="code" href="a00199.html#ga759e88eaf5a230ad283e9d4c42486735">hwloc_get_next_obj_by_type</a>(topology, <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075">HWLOC_OBJ_OS_DEVICE</a>, prev);</div>
+<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;}</div>
+<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; </div>
+<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l01201"></a><span class="lineno"><a class="line" href="a00216.html#ga9dba22a3f4f701f2a46780ba9a0bbbe7"> 1201</a></span>&#160;<a class="code" href="a00216.html#ga9dba22a3f4f701f2a46780ba9a0bbbe7">hwloc_get_next_bridge</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00253.html">hwloc_obj_t</a> prev)</div>
+<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160;{</div>
+<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;  <span class="keywordflow">return</span> <a class="code" href="a00199.html#ga759e88eaf5a230ad283e9d4c42486735">hwloc_get_next_obj_by_type</a>(topology, <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0">HWLOC_OBJ_BRIDGE</a>, prev);</div>
+<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;}</div>
+<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160; </div>
+<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;<span class="comment">/* \brief Checks whether a given bridge covers a given PCI bus.</span></div>
+<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l01209"></a><span class="lineno"><a class="line" href="a00216.html#ga0d92a9462a3d317f29ecb4442a307fb1"> 1209</a></span>&#160;<a class="code" href="a00216.html#ga0d92a9462a3d317f29ecb4442a307fb1">hwloc_bridge_covers_pcibus</a>(<a class="code" href="a00253.html">hwloc_obj_t</a> bridge,</div>
+<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;                           <span class="keywordtype">unsigned</span> domain, <span class="keywordtype">unsigned</span> bus)</div>
+<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160;{</div>
+<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160;  <span class="keywordflow">return</span> bridge-&gt;<a class="code" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0">HWLOC_OBJ_BRIDGE</a></div>
+<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160;    &amp;&amp; bridge-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a207e6359497b7116d6f4baa9e8bbeb43">bridge</a>.<a class="code" href="a00281.html#ac6a169b672d0e9f75756fd5665828b93">downstream_type</a> == <a class="code" href="a00196.html#gga48a4803c72574191d7ead1c62aaf9860a8f3b4cecf3dab6073d74696d10863c60">HWLOC_OBJ_BRIDGE_PCI</a></div>
+<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160;    &amp;&amp; bridge-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a207e6359497b7116d6f4baa9e8bbeb43">bridge</a>.<a class="code" href="a00281.html#a7d5db91d655ba23ffe9bda7a2cbcb9a8">downstream</a>.<a class="code" href="a00281.html#ab5c564e7c95b747dae9eb84ec0a2c31e">pci</a>.<a class="code" href="a00277.html#a8fba44988deb98613c1505a4019a34dc">domain</a> == domain</div>
+<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160;    &amp;&amp; bridge-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a207e6359497b7116d6f4baa9e8bbeb43">bridge</a>.<a class="code" href="a00281.html#a7d5db91d655ba23ffe9bda7a2cbcb9a8">downstream</a>.<a class="code" href="a00281.html#ab5c564e7c95b747dae9eb84ec0a2c31e">pci</a>.secondary_bus &lt;= bus</div>
+<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160;    &amp;&amp; bridge-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a207e6359497b7116d6f4baa9e8bbeb43">bridge</a>.<a class="code" href="a00281.html#a7d5db91d655ba23ffe9bda7a2cbcb9a8">downstream</a>.<a class="code" href="a00281.html#ab5c564e7c95b747dae9eb84ec0a2c31e">pci</a>.subordinate_bus &gt;= bus;</div>
+<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160;}</div>
+<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; </div>
+<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
+<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; </div>
+<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; </div>
+<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_HELPER_H */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="aa00195_html_ga1f784433e9b606261f62d1134f6a3b25"><div class="ttname"><a href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a></div><div class="ttdeci">hwloc_const_bitmap_t hwloc_const_cpuset_t</div><div class="ttdoc">A non-modifiable hwloc_cpuset_t.</div><div class="ttdef"><b>Definition:</b> hwloc.h:142</div></div>
+<div class="ttc" id="aa00195_html_ga2f5276235841ad66a79bedad16a5a10c"><div class="ttname"><a href="a00195.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a></div><div class="ttdeci">hwloc_const_bitmap_t hwloc_const_nodeset_t</div><div class="ttdoc">A non-modifiable hwloc_nodeset_t.</div><div class="ttdef"><b>Definition:</b> hwloc.h:160</div></div>
+<div class="ttc" id="aa00195_html_ga37e35730fa7e775b5bb0afe893d6d508"><div class="ttname"><a href="a00195.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_nodeset_t</div><div class="ttdoc">A node set is a bitmap whose bits are set according to NUMA memory node physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:157</div></div>
+<div class="ttc" id="aa00195_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
+<div class="ttc" id="aa00196_html_ga552ec74296a024237f474acec98694c0"><div class="ttname"><a href="a00196.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a></div><div class="ttdeci">enum hwloc_obj_cache_type_e hwloc_obj_cache_type_t</div><div class="ttdoc">Cache type.</div></div>
+<div class="ttc" id="aa00196_html_gacd37bb612667dc437d66bfb175a8dc55"><div class="ttname"><a href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a></div><div class="ttdeci">hwloc_obj_type_t</div><div class="ttdoc">Type of topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:176</div></div>
+<div class="ttc" id="aa00196_html_gga48a4803c72574191d7ead1c62aaf9860a8f3b4cecf3dab6073d74696d10863c60"><div class="ttname"><a href="a00196.html#gga48a4803c72574191d7ead1c62aaf9860a8f3b4cecf3dab6073d74696d10863c60">HWLOC_OBJ_BRIDGE_PCI</a></div><div class="ttdeci">@ HWLOC_OBJ_BRIDGE_PCI</div><div class="ttdoc">PCI-side of a bridge.</div><div class="ttdef"><b>Definition:</b> hwloc.h:335</div></div>
+<div class="ttc" id="aa00196_html_gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a"><div class="ttname"><a href="a00196.html#gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a">HWLOC_OBJ_CACHE_UNIFIED</a></div><div class="ttdeci">@ HWLOC_OBJ_CACHE_UNIFIED</div><div class="ttdoc">Unified cache.</div><div class="ttdef"><b>Definition:</b> hwloc.h:327</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d">HWLOC_OBJ_MISC</a></div><div class="ttdeci">@ HWLOC_OBJ_MISC</div><div class="ttdoc">Miscellaneous objects (filtered out by default). Objects without particular meaning,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:290</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075">HWLOC_OBJ_OS_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_OS_DEVICE</div><div class="ttdoc">Operating system device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:279</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_PCI_DEVICE</div><div class="ttdoc">PCI device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:269</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0">HWLOC_OBJ_BRIDGE</a></div><div class="ttdeci">@ HWLOC_OBJ_BRIDGE</div><div class="ttdoc">Bridge (filtered out by default). Any bridge (or PCI switch) that connects the host or an I/O bus,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:257</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a></div><div class="ttdeci">@ HWLOC_OBJ_NUMANODE</div><div class="ttdoc">NUMA node. An object that contains memory that is directly and byte-accessible to the host processors...</div><div class="ttdef"><b>Definition:</b> hwloc.h:236</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661">HWLOC_OBJ_PU</a></div><div class="ttdeci">@ HWLOC_OBJ_PU</div><div class="ttdoc">Processing Unit, or (Logical) Processor. An execution unit (may share a core with some other logical ...</div><div class="ttdef"><b>Definition:</b> hwloc.h:201</div></div>
+<div class="ttc" id="aa00198_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:692</div></div>
+<div class="ttc" id="aa00199_html_ga2d4b12fc187dfc53b35f2fa21d21044d"><div class="ttname"><a href="a00199.html#ga2d4b12fc187dfc53b35f2fa21d21044d">hwloc_get_root_obj</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_root_obj(hwloc_topology_t topology)</div><div class="ttdoc">Returns the top-object of the topology-tree.</div></div>
+<div class="ttc" id="aa00199_html_ga391f6b2613f0065673eaa4069b93d4e0"><div class="ttname"><a href="a00199.html#ga391f6b2613f0065673eaa4069b93d4e0">hwloc_get_obj_by_depth</a></div><div class="ttdeci">hwloc_obj_t hwloc_get_obj_by_depth(hwloc_topology_t topology, int depth, unsigned idx)</div><div class="ttdoc">Returns the topology object at logical index idx from depth depth.</div></div>
+<div class="ttc" id="aa00199_html_ga6f414dd80a2b943967a0ac92da3181a2"><div class="ttname"><a href="a00199.html#ga6f414dd80a2b943967a0ac92da3181a2">hwloc_get_obj_by_type</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_obj_by_type(hwloc_topology_t topology, hwloc_obj_type_t type, unsigned idx)</div><div class="ttdoc">Returns the topology object at logical index idx with type type.</div></div>
+<div class="ttc" id="aa00199_html_ga759e88eaf5a230ad283e9d4c42486735"><div class="ttname"><a href="a00199.html#ga759e88eaf5a230ad283e9d4c42486735">hwloc_get_next_obj_by_type</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_obj_by_type(hwloc_topology_t topology, hwloc_obj_type_t type, hwloc_obj_t prev)</div><div class="ttdoc">Returns the next object of type type.</div></div>
+<div class="ttc" id="aa00199_html_ga8bec782e21be313750da70cf7428b374"><div class="ttname"><a href="a00199.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a></div><div class="ttdeci">int hwloc_get_type_depth(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Returns the depth of objects of type type.</div></div>
+<div class="ttc" id="aa00199_html_gac140a9b939d9fa0b30c4a910efcb0656"><div class="ttname"><a href="a00199.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_obj_by_depth(hwloc_topology_t topology, int depth, hwloc_obj_t prev)</div><div class="ttdoc">Returns the next object at depth depth.</div></div>
+<div class="ttc" id="aa00199_html_ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad"><div class="ttname"><a href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_UNKNOWN</div><div class="ttdoc">No object of given type exists in the topology.</div><div class="ttdef"><b>Definition:</b> hwloc.h:822</div></div>
+<div class="ttc" id="aa00199_html_ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c"><div class="ttname"><a href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_MULTIPLE</div><div class="ttdoc">Objects of given type exist at different depth in the topology (only for Groups).</div><div class="ttdef"><b>Definition:</b> hwloc.h:823</div></div>
+<div class="ttc" id="aa00207_html_ga133c40415de008518608f8bff52a5ab9"><div class="ttname"><a href="a00207.html#ga133c40415de008518608f8bff52a5ab9">hwloc_get_nbobjs_inside_cpuset_by_type</a></div><div class="ttdeci">static int hwloc_get_nbobjs_inside_cpuset_by_type(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_type_t type)</div><div class="ttdoc">Return the number of objects of type type included in CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:216</div></div>
+<div class="ttc" id="aa00207_html_ga2edf924e5a0cca9cb22f65cc77c6ddb5"><div class="ttname"><a href="a00207.html#ga2edf924e5a0cca9cb22f65cc77c6ddb5">hwloc_get_obj_inside_cpuset_by_type</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_obj_inside_cpuset_by_type(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_type_t type, unsigned idx)</div><div class="ttdoc">Return the idx -th object of type type included in CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:164</div></div>
+<div class="ttc" id="aa00207_html_ga34ca563fa3a6a4e05268f36a87668511"><div class="ttname"><a href="a00207.html#ga34ca563fa3a6a4e05268f36a87668511">hwloc_get_largest_objs_inside_cpuset</a></div><div class="ttdeci">int hwloc_get_largest_objs_inside_cpuset(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_t *restrict objs, int max)</div><div class="ttdoc">Get the set of largest objects covering exactly a given cpuset set.</div></div>
+<div class="ttc" id="aa00207_html_ga4c3a20d61e9beb06c667b21688c772c5"><div class="ttname"><a href="a00207.html#ga4c3a20d61e9beb06c667b21688c772c5">hwloc_get_obj_index_inside_cpuset</a></div><div class="ttdeci">static int hwloc_get_obj_index_inside_cpuset(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_t obj)</div><div class="ttdoc">Return the logical index among the objects included in CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:244</div></div>
+<div class="ttc" id="aa00207_html_ga547325a4193dbc215d07c23097519d79"><div class="ttname"><a href="a00207.html#ga547325a4193dbc215d07c23097519d79">hwloc_get_first_largest_obj_inside_cpuset</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_first_largest_obj_inside_cpuset(hwloc_topology_t topology, hwloc_const_cpuset_t set)</div><div class="ttdoc">Get the first largest object included in the given cpuset set.</div><div class="ttdef"><b>Definition:</b> helper.h:42</div></div>
+<div class="ttc" id="aa00207_html_ga63e3784e7c60fbae5073428cb98ac787"><div class="ttname"><a href="a00207.html#ga63e3784e7c60fbae5073428cb98ac787">hwloc_get_next_obj_inside_cpuset_by_depth</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_obj_inside_cpuset_by_depth(hwloc_topology_t topology, hwloc_const_cpuset_t set, int depth, hwloc_obj_t prev)</div><div class="ttdoc">Return the next object at depth depth included in CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:85</div></div>
+<div class="ttc" id="aa00207_html_gaa43c64512ddb33fd181990c4261cec7d"><div class="ttname"><a href="a00207.html#gaa43c64512ddb33fd181990c4261cec7d">hwloc_get_nbobjs_inside_cpuset_by_depth</a></div><div class="ttdeci">static unsigned hwloc_get_nbobjs_inside_cpuset_by_depth(hwloc_topology_t topology, hwloc_const_cpuset_t set, int depth)</div><div class="ttdoc">Return the number of objects at depth depth included in CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:185</div></div>
+<div class="ttc" id="aa00207_html_gaec86f1f88832836e3f9338e246ea5862"><div class="ttname"><a href="a00207.html#gaec86f1f88832836e3f9338e246ea5862">hwloc_get_obj_inside_cpuset_by_depth</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_obj_inside_cpuset_by_depth(hwloc_topology_t topology, hwloc_const_cpuset_t set, int depth, unsigned idx)</div><div class="ttdoc">Return the (logically) idx -th object at depth depth included in CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:130</div></div>
+<div class="ttc" id="aa00207_html_gafe859176cf9233f215fea0e87cef47e7"><div class="ttname"><a href="a00207.html#gafe859176cf9233f215fea0e87cef47e7">hwloc_get_next_obj_inside_cpuset_by_type</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_obj_inside_cpuset_by_type(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_type_t type, hwloc_obj_t prev)</div><div class="ttdoc">Return the next object of type type included in CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:109</div></div>
+<div class="ttc" id="aa00208_html_ga0e66aa2dc6b2527cfd10723af646c9d7"><div class="ttname"><a href="a00208.html#ga0e66aa2dc6b2527cfd10723af646c9d7">hwloc_get_child_covering_cpuset</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_child_covering_cpuset(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_t parent)</div><div class="ttdoc">Get the child covering at least CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:275</div></div>
+<div class="ttc" id="aa00208_html_ga41acdcdbb8b95d70ecf6c572a3f67dca"><div class="ttname"><a href="a00208.html#ga41acdcdbb8b95d70ecf6c572a3f67dca">hwloc_get_obj_covering_cpuset</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_obj_covering_cpuset(hwloc_topology_t topology, hwloc_const_cpuset_t set)</div><div class="ttdoc">Get the lowest object covering at least CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:297</div></div>
+<div class="ttc" id="aa00208_html_ga91cfae08b092e7966002e15d1e987213"><div class="ttname"><a href="a00208.html#ga91cfae08b092e7966002e15d1e987213">hwloc_get_next_obj_covering_cpuset_by_type</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_obj_covering_cpuset_by_type(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_type_t type, hwloc_obj_t prev)</div><div class="ttdoc">Iterate through same-type objects covering at least CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:348</div></div>
+<div class="ttc" id="aa00208_html_gaba4b6d86eba1169ced4b0e941d2bb5f0"><div class="ttname"><a href="a00208.html#gaba4b6d86eba1169ced4b0e941d2bb5f0">hwloc_get_next_obj_covering_cpuset_by_depth</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_obj_covering_cpuset_by_depth(hwloc_topology_t topology, hwloc_const_cpuset_t set, int depth, hwloc_obj_t prev)</div><div class="ttdoc">Iterate through same-depth objects covering at least CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:321</div></div>
+<div class="ttc" id="aa00209_html_ga12d8565a3436c565e791ed02a0353621"><div class="ttname"><a href="a00209.html#ga12d8565a3436c565e791ed02a0353621">hwloc_get_next_child</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_child(hwloc_topology_t topology, hwloc_obj_t parent, hwloc_obj_t prev)</div><div class="ttdoc">Return the next child.</div><div class="ttdef"><b>Definition:</b> helper.h:456</div></div>
+<div class="ttc" id="aa00209_html_ga408cf74f5bf9ed497911a320c7f8cc56"><div class="ttname"><a href="a00209.html#ga408cf74f5bf9ed497911a320c7f8cc56">hwloc_obj_is_in_subtree</a></div><div class="ttdeci">static int hwloc_obj_is_in_subtree(hwloc_topology_t topology, hwloc_obj_t obj, hwloc_obj_t subtree_root)</div><div class="ttdoc">Returns true if obj is inside the subtree beginning with ancestor object subtree_root.</div><div class="ttdef"><b>Definition:</b> helper.h:440</div></div>
+<div class="ttc" id="aa00209_html_ga70f0c7583291da707c15ae4daa850f41"><div class="ttname"><a href="a00209.html#ga70f0c7583291da707c15ae4daa850f41">hwloc_get_ancestor_obj_by_type</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_ancestor_obj_by_type(hwloc_topology_t topology, hwloc_obj_type_t type, hwloc_obj_t obj)</div><div class="ttdoc">Returns the ancestor object of obj with type type.</div><div class="ttdef"><b>Definition:</b> helper.h:400</div></div>
+<div class="ttc" id="aa00209_html_ga9f8c93fde236e9642a96957af01a11cb"><div class="ttname"><a href="a00209.html#ga9f8c93fde236e9642a96957af01a11cb">hwloc_get_ancestor_obj_by_depth</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_ancestor_obj_by_depth(hwloc_topology_t topology, int depth, hwloc_obj_t obj)</div><div class="ttdoc">Returns the ancestor object of obj at depth depth.</div><div class="ttdef"><b>Definition:</b> helper.h:380</div></div>
+<div class="ttc" id="aa00209_html_gab1fa883021928b5c476911c4102e9be3"><div class="ttname"><a href="a00209.html#gab1fa883021928b5c476911c4102e9be3">hwloc_get_common_ancestor_obj</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_common_ancestor_obj(hwloc_topology_t topology, hwloc_obj_t obj1, hwloc_obj_t obj2)</div><div class="ttdoc">Returns the common parent object to objects obj1 and obj2.</div><div class="ttdef"><b>Definition:</b> helper.h:412</div></div>
+<div class="ttc" id="aa00210_html_ga1d074390c8a3dc3088d84f73fb73f966"><div class="ttname"><a href="a00210.html#ga1d074390c8a3dc3088d84f73fb73f966">hwloc_obj_type_is_memory</a></div><div class="ttdeci">int hwloc_obj_type_is_memory(hwloc_obj_type_t type)</div><div class="ttdoc">Check whether an object type is Memory.</div></div>
+<div class="ttc" id="aa00210_html_ga2ed589bea28711e80b92066510a5607d"><div class="ttname"><a href="a00210.html#ga2ed589bea28711e80b92066510a5607d">hwloc_obj_type_is_cache</a></div><div class="ttdeci">int hwloc_obj_type_is_cache(hwloc_obj_type_t type)</div><div class="ttdoc">Check whether an object type is a CPU Cache (Data, Unified or Instruction).</div></div>
+<div class="ttc" id="aa00210_html_ga395e48cd221d107e5891689624e1aec4"><div class="ttname"><a href="a00210.html#ga395e48cd221d107e5891689624e1aec4">hwloc_obj_type_is_dcache</a></div><div class="ttdeci">int hwloc_obj_type_is_dcache(hwloc_obj_type_t type)</div><div class="ttdoc">Check whether an object type is a CPU Data or Unified Cache.</div></div>
+<div class="ttc" id="aa00210_html_ga52ef38431eba383b048b98c669b59a16"><div class="ttname"><a href="a00210.html#ga52ef38431eba383b048b98c669b59a16">hwloc_obj_type_is_normal</a></div><div class="ttdeci">int hwloc_obj_type_is_normal(hwloc_obj_type_t type)</div><div class="ttdoc">Check whether an object type is Normal.</div></div>
+<div class="ttc" id="aa00210_html_ga8abcee67b9b074332c1866405a3648a9"><div class="ttname"><a href="a00210.html#ga8abcee67b9b074332c1866405a3648a9">hwloc_obj_type_is_icache</a></div><div class="ttdeci">int hwloc_obj_type_is_icache(hwloc_obj_type_t type)</div><div class="ttdoc">Check whether an object type is a CPU Instruction Cache,.</div></div>
+<div class="ttc" id="aa00210_html_gac8a954ed37a4376097234c828068cbef"><div class="ttname"><a href="a00210.html#gac8a954ed37a4376097234c828068cbef">hwloc_obj_type_is_io</a></div><div class="ttdeci">int hwloc_obj_type_is_io(hwloc_obj_type_t type)</div><div class="ttdoc">Check whether an object type is I/O.</div></div>
+<div class="ttc" id="aa00211_html_ga36f48c32837c7a70b424706e213dcd71"><div class="ttname"><a href="a00211.html#ga36f48c32837c7a70b424706e213dcd71">hwloc_get_shared_cache_covering_obj</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_shared_cache_covering_obj(hwloc_topology_t topology, hwloc_obj_t obj)</div><div class="ttdoc">Get the first data (or unified) cache shared between an object and somebody else.</div><div class="ttdef"><b>Definition:</b> helper.h:648</div></div>
+<div class="ttc" id="aa00211_html_gac4cd480a5deaa4ada047fdd11ae4c070"><div class="ttname"><a href="a00211.html#gac4cd480a5deaa4ada047fdd11ae4c070">hwloc_get_cache_covering_cpuset</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_cache_covering_cpuset(hwloc_topology_t topology, hwloc_const_cpuset_t set)</div><div class="ttdoc">Get the first data (or unified) cache covering a cpuset set.</div><div class="ttdef"><b>Definition:</b> helper.h:630</div></div>
+<div class="ttc" id="aa00211_html_gad108a09ce400222fe45545257d575489"><div class="ttname"><a href="a00211.html#gad108a09ce400222fe45545257d575489">hwloc_get_cache_type_depth</a></div><div class="ttdeci">static int hwloc_get_cache_type_depth(hwloc_topology_t topology, unsigned cachelevel, hwloc_obj_cache_type_t cachetype)</div><div class="ttdoc">Find the depth of cache objects matching cache level and type.</div><div class="ttdef"><b>Definition:</b> helper.h:594</div></div>
+<div class="ttc" id="aa00212_html_ga050646458efc8ca1120d9f124c5ad861"><div class="ttname"><a href="a00212.html#ga050646458efc8ca1120d9f124c5ad861">hwloc_bitmap_singlify_per_core</a></div><div class="ttdeci">int hwloc_bitmap_singlify_per_core(hwloc_topology_t topology, hwloc_bitmap_t cpuset, unsigned which)</div><div class="ttdoc">Remove simultaneous multithreading PUs from a CPU set.</div></div>
+<div class="ttc" id="aa00212_html_ga2cd22a34360643f7f5bad09576dec205"><div class="ttname"><a href="a00212.html#ga2cd22a34360643f7f5bad09576dec205">hwloc_get_closest_objs</a></div><div class="ttdeci">unsigned hwloc_get_closest_objs(hwloc_topology_t topology, hwloc_obj_t src, hwloc_obj_t *restrict objs, unsigned max)</div><div class="ttdoc">Do a depth-first traversal of the topology to find and sort.</div></div>
+<div class="ttc" id="aa00212_html_ga751c238a4931db5cc0ca3181b7dd7479"><div class="ttname"><a href="a00212.html#ga751c238a4931db5cc0ca3181b7dd7479">hwloc_get_pu_obj_by_os_index</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_pu_obj_by_os_index(hwloc_topology_t topology, unsigned os_index)</div><div class="ttdoc">Returns the object of type HWLOC_OBJ_PU with os_index.</div><div class="ttdef"><b>Definition:</b> helper.h:705</div></div>
+<div class="ttc" id="aa00212_html_ga7a0c1046851f7a88bd52f5a1d4ba0a97"><div class="ttname"><a href="a00212.html#ga7a0c1046851f7a88bd52f5a1d4ba0a97">hwloc_get_obj_below_by_type</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_obj_below_by_type(hwloc_topology_t topology, hwloc_obj_type_t type1, unsigned idx1, hwloc_obj_type_t type2, unsigned idx2)</div><div class="ttdoc">Find an object below another object, both specified by types and indexes.</div><div class="ttdef"><b>Definition:</b> helper.h:766</div></div>
+<div class="ttc" id="aa00212_html_gab5df3ad1e8565ea0c2cf06412f6f6233"><div class="ttname"><a href="a00212.html#gab5df3ad1e8565ea0c2cf06412f6f6233">hwloc_get_obj_with_same_locality</a></div><div class="ttdeci">hwloc_obj_t hwloc_get_obj_with_same_locality(hwloc_topology_t topology, hwloc_obj_t src, hwloc_obj_type_t type, const char *subtype, const char *nameprefix, unsigned long flags)</div><div class="ttdoc">Return an object of a different type with same locality.</div></div>
+<div class="ttc" id="aa00212_html_gab89d9ed9edfaa3dd526fb6ee1a1618ea"><div class="ttname"><a href="a00212.html#gab89d9ed9edfaa3dd526fb6ee1a1618ea">hwloc_get_numanode_obj_by_os_index</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_numanode_obj_by_os_index(hwloc_topology_t topology, unsigned os_index)</div><div class="ttdoc">Returns the object of type HWLOC_OBJ_NUMANODE with os_index.</div><div class="ttdef"><b>Definition:</b> helper.h:726</div></div>
+<div class="ttc" id="aa00212_html_gacb51295ff3fbd3a96f990f20c6492b1d"><div class="ttname"><a href="a00212.html#gacb51295ff3fbd3a96f990f20c6492b1d">hwloc_get_obj_below_array_by_type</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_obj_below_array_by_type(hwloc_topology_t topology, int nr, hwloc_obj_type_t *typev, unsigned *idxv)</div><div class="ttdoc">Find an object below a chain of objects specified by types and indexes.</div><div class="ttdef"><b>Definition:</b> helper.h:798</div></div>
+<div class="ttc" id="aa00213_html_ga7b0c28f797c2ff17fa2f244ebbd55b33"><div class="ttname"><a href="a00213.html#ga7b0c28f797c2ff17fa2f244ebbd55b33">hwloc_distrib</a></div><div class="ttdeci">static int hwloc_distrib(hwloc_topology_t topology, hwloc_obj_t *roots, unsigned n_roots, hwloc_cpuset_t *set, unsigned n, int until, unsigned long flags)</div><div class="ttdoc">Distribute n items over the topology under roots.</div><div class="ttdef"><b>Definition:</b> helper.h:891</div></div>
+<div class="ttc" id="aa00213_html_ga8b835295a52b6768a5e6c8abb1f9c54d"><div class="ttname"><a href="a00213.html#ga8b835295a52b6768a5e6c8abb1f9c54d">hwloc_distrib_flags_e</a></div><div class="ttdeci">hwloc_distrib_flags_e</div><div class="ttdoc">Flags to be given to hwloc_distrib().</div><div class="ttdef"><b>Definition:</b> helper.h:863</div></div>
+<div class="ttc" id="aa00213_html_gga8b835295a52b6768a5e6c8abb1f9c54da2ca08404bfbebe9ed5f34c3d7635425a"><div class="ttname"><a href="a00213.html#gga8b835295a52b6768a5e6c8abb1f9c54da2ca08404bfbebe9ed5f34c3d7635425a">HWLOC_DISTRIB_FLAG_REVERSE</a></div><div class="ttdeci">@ HWLOC_DISTRIB_FLAG_REVERSE</div><div class="ttdoc">Distrib in reverse order, starting from the last objects.</div><div class="ttdef"><b>Definition:</b> helper.h:867</div></div>
+<div class="ttc" id="aa00214_html_ga21a4d7237a11e76b912ed4524ab78cbd"><div class="ttname"><a href="a00214.html#ga21a4d7237a11e76b912ed4524ab78cbd">hwloc_topology_get_allowed_nodeset</a></div><div class="ttdeci">hwloc_const_nodeset_t hwloc_topology_get_allowed_nodeset(hwloc_topology_t topology)</div><div class="ttdoc">Get allowed node set.</div></div>
+<div class="ttc" id="aa00214_html_ga3fd37303e99ace8b0d0ea03f95f8c514"><div class="ttname"><a href="a00214.html#ga3fd37303e99ace8b0d0ea03f95f8c514">hwloc_topology_get_topology_nodeset</a></div><div class="ttdeci">hwloc_const_nodeset_t hwloc_topology_get_topology_nodeset(hwloc_topology_t topology)</div><div class="ttdoc">Get topology node set.</div></div>
+<div class="ttc" id="aa00214_html_ga517d5d68ec9f24583d8933aab713be8e"><div class="ttname"><a href="a00214.html#ga517d5d68ec9f24583d8933aab713be8e">hwloc_topology_get_allowed_cpuset</a></div><div class="ttdeci">hwloc_const_cpuset_t hwloc_topology_get_allowed_cpuset(hwloc_topology_t topology)</div><div class="ttdoc">Get allowed CPU set.</div></div>
+<div class="ttc" id="aa00214_html_ga773fd98949461ef4c1e3170bb0c0418f"><div class="ttname"><a href="a00214.html#ga773fd98949461ef4c1e3170bb0c0418f">hwloc_topology_get_complete_nodeset</a></div><div class="ttdeci">hwloc_const_nodeset_t hwloc_topology_get_complete_nodeset(hwloc_topology_t topology)</div><div class="ttdoc">Get complete node set.</div></div>
+<div class="ttc" id="aa00214_html_ga79212faa07b70dd26588941b17d9fa82"><div class="ttname"><a href="a00214.html#ga79212faa07b70dd26588941b17d9fa82">hwloc_topology_get_topology_cpuset</a></div><div class="ttdeci">hwloc_const_cpuset_t hwloc_topology_get_topology_cpuset(hwloc_topology_t topology)</div><div class="ttdoc">Get topology CPU set.</div></div>
+<div class="ttc" id="aa00214_html_gaee30e03391c1ed7dfd617fb5c7bbb033"><div class="ttname"><a href="a00214.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a></div><div class="ttdeci">hwloc_const_cpuset_t hwloc_topology_get_complete_cpuset(hwloc_topology_t topology)</div><div class="ttdoc">Get complete CPU set.</div></div>
+<div class="ttc" id="aa00215_html_ga185751c1653fedbeb7cc480840f38cde"><div class="ttname"><a href="a00215.html#ga185751c1653fedbeb7cc480840f38cde">hwloc_cpuset_to_nodeset</a></div><div class="ttdeci">static int hwloc_cpuset_to_nodeset(hwloc_topology_t topology, hwloc_const_cpuset_t _cpuset, hwloc_nodeset_t nodeset)</div><div class="ttdoc">Convert a CPU set into a NUMA node set.</div><div class="ttdef"><b>Definition:</b> helper.h:1071</div></div>
+<div class="ttc" id="aa00215_html_gad5ee8691e08a3538ea7633344c00456d"><div class="ttname"><a href="a00215.html#gad5ee8691e08a3538ea7633344c00456d">hwloc_cpuset_from_nodeset</a></div><div class="ttdeci">static int hwloc_cpuset_from_nodeset(hwloc_topology_t topology, hwloc_cpuset_t _cpuset, hwloc_const_nodeset_t nodeset)</div><div class="ttdoc">Convert a NUMA node set into a CPU set.</div><div class="ttdef"><b>Definition:</b> helper.h:1095</div></div>
+<div class="ttc" id="aa00216_html_ga0d92a9462a3d317f29ecb4442a307fb1"><div class="ttname"><a href="a00216.html#ga0d92a9462a3d317f29ecb4442a307fb1">hwloc_bridge_covers_pcibus</a></div><div class="ttdeci">static int hwloc_bridge_covers_pcibus(hwloc_obj_t bridge, unsigned domain, unsigned bus)</div><div class="ttdef"><b>Definition:</b> helper.h:1209</div></div>
+<div class="ttc" id="aa00216_html_ga23a978469353134b3104b846fe2efceb"><div class="ttname"><a href="a00216.html#ga23a978469353134b3104b846fe2efceb">hwloc_get_pcidev_by_busidstring</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_pcidev_by_busidstring(hwloc_topology_t topology, const char *busid)</div><div class="ttdoc">Find the PCI device object matching the PCI bus id given as a string xxxx:yy:zz.t or yy:zz....</div><div class="ttdef"><b>Definition:</b> helper.h:1172</div></div>
+<div class="ttc" id="aa00216_html_ga66470dabce9db19a57c5940a909d0baa"><div class="ttname"><a href="a00216.html#ga66470dabce9db19a57c5940a909d0baa">hwloc_get_next_pcidev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_pcidev(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next PCI device in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1145</div></div>
+<div class="ttc" id="aa00216_html_ga8b4584c8949e2c5f1c97ba7fe92b8145"><div class="ttname"><a href="a00216.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_osdev(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next OS device in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1191</div></div>
+<div class="ttc" id="aa00216_html_ga9dba22a3f4f701f2a46780ba9a0bbbe7"><div class="ttname"><a href="a00216.html#ga9dba22a3f4f701f2a46780ba9a0bbbe7">hwloc_get_next_bridge</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_bridge(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next bridge in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1201</div></div>
+<div class="ttc" id="aa00216_html_gacdbaf0db98872e224b7883a84bfb0455"><div class="ttname"><a href="a00216.html#gacdbaf0db98872e224b7883a84bfb0455">hwloc_get_pcidev_by_busid</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_pcidev_by_busid(hwloc_topology_t topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)</div><div class="ttdoc">Find the PCI device object matching the PCI bus id given domain, bus device and function PCI bus id.</div><div class="ttdef"><b>Definition:</b> helper.h:1154</div></div>
+<div class="ttc" id="aa00216_html_gaf139bb61375178e90cc3f1835b452ab6"><div class="ttname"><a href="a00216.html#gaf139bb61375178e90cc3f1835b452ab6">hwloc_get_non_io_ancestor_obj</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_non_io_ancestor_obj(hwloc_topology_t topology, hwloc_obj_t ioobj)</div><div class="ttdoc">Get the first non-I/O ancestor object.</div><div class="ttdef"><b>Definition:</b> helper.h:1130</div></div>
+<div class="ttc" id="aa00217_html_ga0200466842c0e1f5da75e84dde460b10"><div class="ttname"><a href="a00217.html#ga0200466842c0e1f5da75e84dde460b10">hwloc_bitmap_weight</a></div><div class="ttdeci">int hwloc_bitmap_weight(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Compute the &quot;weight&quot; of bitmap bitmap (i.e., number of indexes that are in the bitmap).</div></div>
+<div class="ttc" id="aa00217_html_ga0526e03db81956fb02acc8260b66d6a4"><div class="ttname"><a href="a00217.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a></div><div class="ttdeci">int hwloc_bitmap_isincluded(hwloc_const_bitmap_t sub_bitmap, hwloc_const_bitmap_t super_bitmap)</div><div class="ttdoc">Test whether bitmap sub_bitmap is part of bitmap super_bitmap.</div></div>
+<div class="ttc" id="aa00217_html_ga062dbff93baeff3b425a7260c5463646"><div class="ttname"><a href="a00217.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a></div><div class="ttdeci">int hwloc_bitmap_set(hwloc_bitmap_t bitmap, unsigned id)</div><div class="ttdoc">Add index id in bitmap bitmap.</div></div>
+<div class="ttc" id="aa00217_html_ga11340dd487f110bb84f0a6e4ae90bd06"><div class="ttname"><a href="a00217.html#ga11340dd487f110bb84f0a6e4ae90bd06">hwloc_bitmap_isset</a></div><div class="ttdeci">int hwloc_bitmap_isset(hwloc_const_bitmap_t bitmap, unsigned id)</div><div class="ttdoc">Test whether index id is part of bitmap bitmap.</div></div>
+<div class="ttc" id="aa00217_html_ga120b8aefb9ce7ef349929656359b1859"><div class="ttname"><a href="a00217.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a></div><div class="ttdeci">int hwloc_bitmap_or(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Or bitmaps bitmap1 and bitmap2 and store the result in bitmap res.</div></div>
+<div class="ttc" id="aa00217_html_ga32376b1405e57472b73c3aa53bb39663"><div class="ttname"><a href="a00217.html#ga32376b1405e57472b73c3aa53bb39663">hwloc_bitmap_isequal</a></div><div class="ttdeci">int hwloc_bitmap_isequal(hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Test whether bitmap bitmap1 is equal to bitmap bitmap2.</div></div>
+<div class="ttc" id="aa00217_html_ga5b64be28f5a7176ed8ad0d6a90bdf108"><div class="ttname"><a href="a00217.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a></div><div class="ttdeci">int hwloc_bitmap_iszero(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Test whether bitmap bitmap is empty.</div></div>
+<div class="ttc" id="aa00217_html_gaa3c2bf4c776d603dcebbb61b0c923d84"><div class="ttname"><a href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a></div><div class="ttdeci">struct hwloc_bitmap_s * hwloc_bitmap_t</div><div class="ttdoc">Set of bits represented as an opaque pointer to an internal bitmap.</div><div class="ttdef"><b>Definition:</b> bitmap.h:68</div></div>
+<div class="ttc" id="aa00217_html_gaa97c5217613c8cae9862287170ea2132"><div class="ttname"><a href="a00217.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a></div><div class="ttdeci">void hwloc_bitmap_zero(hwloc_bitmap_t bitmap)</div><div class="ttdoc">Empty the bitmap bitmap.</div></div>
+<div class="ttc" id="aa00217_html_gae679434c1a5f41d3560a8a7e2c1b0dee"><div class="ttname"><a href="a00217.html#gae679434c1a5f41d3560a8a7e2c1b0dee">hwloc_bitmap_dup</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_bitmap_dup(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.</div></div>
+<div class="ttc" id="aa00217_html_gaefa070f9232857ba5a57297ea9a08ea2"><div class="ttname"><a href="a00217.html#gaefa070f9232857ba5a57297ea9a08ea2">hwloc_bitmap_intersects</a></div><div class="ttdeci">int hwloc_bitmap_intersects(hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Test whether bitmaps bitmap1 and bitmap2 intersects.</div></div>
+<div class="ttc" id="aa00253_html"><div class="ttname"><a href="a00253.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:396</div></div>
+<div class="ttc" id="aa00253_html_a04d05403da37bfe17cd63b7c7dd07b1f"><div class="ttname"><a href="a00253.html#a04d05403da37bfe17cd63b7c7dd07b1f">hwloc_obj::children</a></div><div class="ttdeci">struct hwloc_obj ** children</div><div class="ttdoc">Normal children, children[0 .. arity -1].</div><div class="ttdef"><b>Definition:</b> hwloc.h:456</div></div>
+<div class="ttc" id="aa00253_html_a08f0d0e16c619a6e653526cbee4ffea3"><div class="ttname"><a href="a00253.html#a08f0d0e16c619a6e653526cbee4ffea3">hwloc_obj::nodeset</a></div><div class="ttdeci">hwloc_nodeset_t nodeset</div><div class="ttdoc">NUMA nodes covered by this object or containing this object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:540</div></div>
+<div class="ttc" id="aa00253_html_a4876fd165b4fff35521f07ebd85355ed"><div class="ttname"><a href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">hwloc_obj::depth</a></div><div class="ttdeci">int depth</div><div class="ttdoc">Vertical index in the hierarchy.</div><div class="ttdef"><b>Definition:</b> hwloc.h:419</div></div>
+<div class="ttc" id="aa00253_html_a57812a313fe9b1a9500489f47c3011cc"><div class="ttname"><a href="a00253.html#a57812a313fe9b1a9500489f47c3011cc">hwloc_obj::misc_first_child</a></div><div class="ttdeci">struct hwloc_obj * misc_first_child</div><div class="ttdoc">First Misc child. Misc objects are listed here (misc_arity and misc_first_child) instead of in the no...</div><div class="ttdef"><b>Definition:</b> hwloc.h:505</div></div>
+<div class="ttc" id="aa00253_html_a5d4f97e76723a9ec8d38046f19e00d33"><div class="ttname"><a href="a00253.html#a5d4f97e76723a9ec8d38046f19e00d33">hwloc_obj::subtype</a></div><div class="ttdeci">char * subtype</div><div class="ttdoc">Subtype string to better describe the type field.</div><div class="ttdef"><b>Definition:</b> hwloc.h:399</div></div>
+<div class="ttc" id="aa00253_html_a61a7a80a68eaccbaaa28269e678c81a9"><div class="ttname"><a href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">hwloc_obj::os_index</a></div><div class="ttdeci">unsigned os_index</div><div class="ttdoc">OS-provided physical index number. It is not guaranteed unique across the entire machine,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:401</div></div>
+<div class="ttc" id="aa00253_html_a67925e0f2c47f50408fbdb9bddd0790f"><div class="ttname"><a href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">hwloc_obj::cpuset</a></div><div class="ttdeci">hwloc_cpuset_t cpuset</div><div class="ttdoc">CPUs covered by this object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:512</div></div>
+<div class="ttc" id="aa00253_html_a7f2343ed476fe4942e6fffd4cade1b40"><div class="ttname"><a href="a00253.html#a7f2343ed476fe4942e6fffd4cade1b40">hwloc_obj::next_sibling</a></div><div class="ttdeci">struct hwloc_obj * next_sibling</div><div class="ttdoc">Next object below the same parent (inside the same list of children).</div><div class="ttdef"><b>Definition:</b> hwloc.h:448</div></div>
+<div class="ttc" id="aa00253_html_a85a788017457129589318b6c39451acf"><div class="ttname"><a href="a00253.html#a85a788017457129589318b6c39451acf">hwloc_obj::next_cousin</a></div><div class="ttdeci">struct hwloc_obj * next_cousin</div><div class="ttdoc">Next object of same type and depth.</div><div class="ttdef"><b>Definition:</b> hwloc.h:442</div></div>
+<div class="ttc" id="aa00253_html_a8d14c88e1ebc4ae67cc69f9e928558b3"><div class="ttname"><a href="a00253.html#a8d14c88e1ebc4ae67cc69f9e928558b3">hwloc_obj::io_first_child</a></div><div class="ttdeci">struct hwloc_obj * io_first_child</div><div class="ttdoc">First I/O child. Bridges, PCI and OS devices are listed here (io_arity and io_first_child) instead of...</div><div class="ttdef"><b>Definition:</b> hwloc.h:493</div></div>
+<div class="ttc" id="aa00253_html_aac3f6da35c9b57599909a44ce2b716c1"><div class="ttname"><a href="a00253.html#aac3f6da35c9b57599909a44ce2b716c1">hwloc_obj::arity</a></div><div class="ttdeci">unsigned arity</div><div class="ttdoc">Number of normal children. Memory, Misc and I/O children are not listed here but rather in their dedi...</div><div class="ttdef"><b>Definition:</b> hwloc.h:452</div></div>
+<div class="ttc" id="aa00253_html_ac0e8200dba25b90d5954bd4ec61f97d3"><div class="ttname"><a href="a00253.html#ac0e8200dba25b90d5954bd4ec61f97d3">hwloc_obj::memory_first_child</a></div><div class="ttdeci">struct hwloc_obj * memory_first_child</div><div class="ttdoc">First Memory child. NUMA nodes and Memory-side caches are listed here (memory_arity and memory_first_...</div><div class="ttdef"><b>Definition:</b> hwloc.h:475</div></div>
+<div class="ttc" id="aa00253_html_ac715989f55ff5a0eb6be2969ee477ec0"><div class="ttname"><a href="a00253.html#ac715989f55ff5a0eb6be2969ee477ec0">hwloc_obj::prev_cousin</a></div><div class="ttdeci">struct hwloc_obj * prev_cousin</div><div class="ttdoc">Previous object of same type and depth.</div><div class="ttdef"><b>Definition:</b> hwloc.h:443</div></div>
+<div class="ttc" id="aa00253_html_acc4f0803f244867e68fe0036800be5de"><div class="ttname"><a href="a00253.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj::type</a></div><div class="ttdeci">hwloc_obj_type_t type</div><div class="ttdoc">Type of object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:398</div></div>
+<div class="ttc" id="aa00253_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:415</div></div>
+<div class="ttc" id="aa00253_html_adc494f6aed939992be1c55cca5822900"><div class="ttname"><a href="a00253.html#adc494f6aed939992be1c55cca5822900">hwloc_obj::parent</a></div><div class="ttdeci">struct hwloc_obj * parent</div><div class="ttdoc">Parent, NULL if root (Machine object)</div><div class="ttdef"><b>Definition:</b> hwloc.h:446</div></div>
+<div class="ttc" id="aa00253_html_af51d08a0a79dba517c06c5afedc8d2dc"><div class="ttname"><a href="a00253.html#af51d08a0a79dba517c06c5afedc8d2dc">hwloc_obj::first_child</a></div><div class="ttdeci">struct hwloc_obj * first_child</div><div class="ttdoc">First normal child.</div><div class="ttdef"><b>Definition:</b> hwloc.h:457</div></div>
+<div class="ttc" id="aa00257_html_a0b66da7ab072f7c016f8ed86701f5a7c"><div class="ttname"><a href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">hwloc_obj_attr_u::pcidev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_pcidev_attr_s pcidev</div></div>
+<div class="ttc" id="aa00257_html_a207e6359497b7116d6f4baa9e8bbeb43"><div class="ttname"><a href="a00257.html#a207e6359497b7116d6f4baa9e8bbeb43">hwloc_obj_attr_u::bridge</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_bridge_attr_s bridge</div></div>
+<div class="ttc" id="aa00257_html_a23f553f3252c9d13f2338231cd354ea9"><div class="ttname"><a href="a00257.html#a23f553f3252c9d13f2338231cd354ea9">hwloc_obj_attr_u::cache</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_cache_attr_s cache</div></div>
+<div class="ttc" id="aa00269_html_a5c8f7f39193736c2187ed626940835d5"><div class="ttname"><a href="a00269.html#a5c8f7f39193736c2187ed626940835d5">hwloc_obj_attr_u::hwloc_cache_attr_s::depth</a></div><div class="ttdeci">unsigned depth</div><div class="ttdoc">Depth of cache (e.g., L1, L2, ...etc.)</div><div class="ttdef"><b>Definition:</b> hwloc.h:618</div></div>
+<div class="ttc" id="aa00269_html_ad8edc8ded2b7a70d6abbc874801930f4"><div class="ttname"><a href="a00269.html#ad8edc8ded2b7a70d6abbc874801930f4">hwloc_obj_attr_u::hwloc_cache_attr_s::type</a></div><div class="ttdeci">hwloc_obj_cache_type_t type</div><div class="ttdoc">Cache type.</div><div class="ttdef"><b>Definition:</b> hwloc.h:622</div></div>
+<div class="ttc" id="aa00277_html_a3d70c84a12f7e93d14c8d47bf4fd9dc5"><div class="ttname"><a href="a00277.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">hwloc_obj_attr_u::hwloc_pcidev_attr_s::dev</a></div><div class="ttdeci">unsigned char dev</div><div class="ttdef"><b>Definition:</b> hwloc.h:639</div></div>
+<div class="ttc" id="aa00277_html_a695f32df53f4ef728670bfcf31b74e0f"><div class="ttname"><a href="a00277.html#a695f32df53f4ef728670bfcf31b74e0f">hwloc_obj_attr_u::hwloc_pcidev_attr_s::func</a></div><div class="ttdeci">unsigned char func</div><div class="ttdef"><b>Definition:</b> hwloc.h:639</div></div>
+<div class="ttc" id="aa00277_html_a8fba44988deb98613c1505a4019a34dc"><div class="ttname"><a href="a00277.html#a8fba44988deb98613c1505a4019a34dc">hwloc_obj_attr_u::hwloc_pcidev_attr_s::domain</a></div><div class="ttdeci">unsigned short domain</div><div class="ttdef"><b>Definition:</b> hwloc.h:635</div></div>
+<div class="ttc" id="aa00277_html_aae99e035e8d1387d7b8768aaa8eceb0a"><div class="ttname"><a href="a00277.html#aae99e035e8d1387d7b8768aaa8eceb0a">hwloc_obj_attr_u::hwloc_pcidev_attr_s::bus</a></div><div class="ttdeci">unsigned char bus</div><div class="ttdef"><b>Definition:</b> hwloc.h:639</div></div>
+<div class="ttc" id="aa00281_html_a7d5db91d655ba23ffe9bda7a2cbcb9a8"><div class="ttname"><a href="a00281.html#a7d5db91d655ba23ffe9bda7a2cbcb9a8">hwloc_obj_attr_u::hwloc_bridge_attr_s::downstream</a></div><div class="ttdeci">union hwloc_obj_attr_u::hwloc_bridge_attr_s::@1 downstream</div></div>
+<div class="ttc" id="aa00281_html_ab5c564e7c95b747dae9eb84ec0a2c31e"><div class="ttname"><a href="a00281.html#ab5c564e7c95b747dae9eb84ec0a2c31e">hwloc_obj_attr_u::hwloc_bridge_attr_s::pci</a></div><div class="ttdeci">struct hwloc_pcidev_attr_s pci</div><div class="ttdef"><b>Definition:</b> hwloc.h:648</div></div>
+<div class="ttc" id="aa00281_html_ac6a169b672d0e9f75756fd5665828b93"><div class="ttname"><a href="a00281.html#ac6a169b672d0e9f75756fd5665828b93">hwloc_obj_attr_u::hwloc_bridge_attr_s::downstream_type</a></div><div class="ttdeci">hwloc_obj_bridge_type_t downstream_type</div><div class="ttdef"><b>Definition:</b> hwloc.h:661</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00131_source.html b/doc/doxygen-doc/html/a00131_source.html
new file mode 100644
index 00000000..8c383cd5
--- /dev/null
+++ b/doc/doxygen-doc/html/a00131_source.html
@@ -0,0 +1,287 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): bitmap.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_5cb306d949c7931a3b6c77517393dd34.html">hwloc</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">bitmap.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright © 2009 CNRS</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * Copyright © 2009-2022 Inria.  All rights reserved.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Copyright © 2009-2012 Université Bordeaux</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * Copyright © 2009-2011 Cisco Systems, Inc.  All rights reserved.</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160; </div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#ifndef HWLOC_BITMAP_H</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#define HWLOC_BITMAP_H</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160; </div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#include &quot;hwloc/autogen/config.h&quot;</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160; </div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &lt;assert.h&gt;</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160; </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160; </div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160; </div>
+<div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">   68</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>hwloc_bitmap_s * <a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>;</div>
+<div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">   70</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keyword">struct </span>hwloc_bitmap_s * <a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>;</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160; </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160; </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;<span class="comment"> * Bitmap allocation, freeing and copying.</span></div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160; </div>
+<div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="a00217.html#gadece3d1eb5199fc2fb99bc7dcf1ccc05">   84</a></span>&#160;HWLOC_DECLSPEC <a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> <a class="code" href="a00217.html#gadece3d1eb5199fc2fb99bc7dcf1ccc05">hwloc_bitmap_alloc</a>(<span class="keywordtype">void</span>) __hwloc_attribute_malloc;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160; </div>
+<div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="a00217.html#ga02853b4a224970587b9d7a0e20d857c0">   87</a></span>&#160;HWLOC_DECLSPEC <a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> <a class="code" href="a00217.html#ga02853b4a224970587b9d7a0e20d857c0">hwloc_bitmap_alloc_full</a>(<span class="keywordtype">void</span>) __hwloc_attribute_malloc;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160; </div>
+<div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="a00217.html#ga156130d85b3a0674d6e0e6770fe68fbe">   93</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00217.html#ga156130d85b3a0674d6e0e6770fe68fbe">hwloc_bitmap_free</a>(<a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap);</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160; </div>
+<div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="a00217.html#gae679434c1a5f41d3560a8a7e2c1b0dee">   99</a></span>&#160;HWLOC_DECLSPEC <a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> <a class="code" href="a00217.html#gae679434c1a5f41d3560a8a7e2c1b0dee">hwloc_bitmap_dup</a>(<a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap) __hwloc_attribute_malloc;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160; </div>
+<div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="a00217.html#ga72a29824798b48784b8217471ec8f14c">  102</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(<a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> dst, <a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> src);</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160; </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160; </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;<span class="comment"> * Bitmap/String Conversion</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160; </div>
+<div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="a00217.html#ga9511644657030a021dce9941e3cda583">  118</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga9511644657030a021dce9941e3cda583">hwloc_bitmap_snprintf</a>(<span class="keywordtype">char</span> * __hwloc_restrict buf, <span class="keywordtype">size_t</span> buflen, <a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap);</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160; </div>
+<div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="a00217.html#ga0fece972134fdecf2da9bc7a11dd827e">  124</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga0fece972134fdecf2da9bc7a11dd827e">hwloc_bitmap_asprintf</a>(<span class="keywordtype">char</span> ** strp, <a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap);</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160; </div>
+<div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="a00217.html#ga064a85c643a364b60acbfa0f3663fc18">  128</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga064a85c643a364b60acbfa0f3663fc18">hwloc_bitmap_sscanf</a>(<a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keyword">const</span> <span class="keywordtype">char</span> * __hwloc_restrict <span class="keywordtype">string</span>);</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160; </div>
+<div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="a00217.html#ga3d06e6447edeb61e56a9ad83f31f0a37">  143</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga3d06e6447edeb61e56a9ad83f31f0a37">hwloc_bitmap_list_snprintf</a>(<span class="keywordtype">char</span> * __hwloc_restrict buf, <span class="keywordtype">size_t</span> buflen, <a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap);</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160; </div>
+<div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="a00217.html#ga39c0f1b02053de66d205c9f8260b3665">  149</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga39c0f1b02053de66d205c9f8260b3665">hwloc_bitmap_list_asprintf</a>(<span class="keywordtype">char</span> ** strp, <a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap);</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160; </div>
+<div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="a00217.html#gaf9314311d482c621e17c6a53a9fe993e">  153</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#gaf9314311d482c621e17c6a53a9fe993e">hwloc_bitmap_list_sscanf</a>(<a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keyword">const</span> <span class="keywordtype">char</span> * __hwloc_restrict <span class="keywordtype">string</span>);</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160; </div>
+<div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="a00217.html#ga5beb68a987fe48e5c5edef06ab260e14">  167</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga5beb68a987fe48e5c5edef06ab260e14">hwloc_bitmap_taskset_snprintf</a>(<span class="keywordtype">char</span> * __hwloc_restrict buf, <span class="keywordtype">size_t</span> buflen, <a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap);</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160; </div>
+<div class="line"><a name="l00173"></a><span class="lineno"><a class="line" href="a00217.html#ga391312513f17c985d871f18367c59512">  173</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga391312513f17c985d871f18367c59512">hwloc_bitmap_taskset_asprintf</a>(<span class="keywordtype">char</span> ** strp, <a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap);</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160; </div>
+<div class="line"><a name="l00177"></a><span class="lineno"><a class="line" href="a00217.html#ga4f23db5041240e03e348752f8bd6ec2d">  177</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga4f23db5041240e03e348752f8bd6ec2d">hwloc_bitmap_taskset_sscanf</a>(<a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keyword">const</span> <span class="keywordtype">char</span> * __hwloc_restrict <span class="keywordtype">string</span>);</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160; </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160; </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;<span class="comment"> * Building bitmaps.</span></div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160; </div>
+<div class="line"><a name="l00185"></a><span class="lineno"><a class="line" href="a00217.html#gaa97c5217613c8cae9862287170ea2132">  185</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00217.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a>(<a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap);</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160; </div>
+<div class="line"><a name="l00188"></a><span class="lineno"><a class="line" href="a00217.html#ga07b2de8786b3cdb22f21d9dd42588275">  188</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00217.html#ga07b2de8786b3cdb22f21d9dd42588275">hwloc_bitmap_fill</a>(<a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap);</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160; </div>
+<div class="line"><a name="l00191"></a><span class="lineno"><a class="line" href="a00217.html#ga10be0840cdeb7ce26d862819dd303baa">  191</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga10be0840cdeb7ce26d862819dd303baa">hwloc_bitmap_only</a>(<a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> <span class="keywordtype">id</span>);</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160; </div>
+<div class="line"><a name="l00194"></a><span class="lineno"><a class="line" href="a00217.html#ga06d505f8a1c0a536614f65f503ee6d93">  194</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga06d505f8a1c0a536614f65f503ee6d93">hwloc_bitmap_allbut</a>(<a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> <span class="keywordtype">id</span>);</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160; </div>
+<div class="line"><a name="l00197"></a><span class="lineno"><a class="line" href="a00217.html#gad59b0ebeb29c1bfabbb2a379e55c1159">  197</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#gad59b0ebeb29c1bfabbb2a379e55c1159">hwloc_bitmap_from_ulong</a>(<a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> mask);</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160; </div>
+<div class="line"><a name="l00200"></a><span class="lineno"><a class="line" href="a00217.html#ga4947c46d47bcfcd3faf3f59569be3e37">  200</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga4947c46d47bcfcd3faf3f59569be3e37">hwloc_bitmap_from_ith_ulong</a>(<a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> i, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> mask);</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160; </div>
+<div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="a00217.html#gabcfef22f6fc4d4b33f068dd91a1c38f5">  203</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#gabcfef22f6fc4d4b33f068dd91a1c38f5">hwloc_bitmap_from_ulongs</a>(<a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> nr, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *masks);</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160; </div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160; </div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;<span class="comment"> * Modifying bitmaps.</span></div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160; </div>
+<div class="line"><a name="l00211"></a><span class="lineno"><a class="line" href="a00217.html#ga062dbff93baeff3b425a7260c5463646">  211</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a>(<a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> <span class="keywordtype">id</span>);</div>
+<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160; </div>
+<div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="a00217.html#ga9c9a8433732fb9f24899e7aa4c014d7e">  217</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga9c9a8433732fb9f24899e7aa4c014d7e">hwloc_bitmap_set_range</a>(<a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> begin, <span class="keywordtype">int</span> end);</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160; </div>
+<div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="a00217.html#ga3daeed965c35c6d2fd4820a318219985">  220</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga3daeed965c35c6d2fd4820a318219985">hwloc_bitmap_set_ith_ulong</a>(<a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> i, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> mask);</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160; </div>
+<div class="line"><a name="l00223"></a><span class="lineno"><a class="line" href="a00217.html#gaf20bb350b6844d08931a064a73f86743">  223</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#gaf20bb350b6844d08931a064a73f86743">hwloc_bitmap_clr</a>(<a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> <span class="keywordtype">id</span>);</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160; </div>
+<div class="line"><a name="l00229"></a><span class="lineno"><a class="line" href="a00217.html#ga833776709df94d727f8c22304b3388cf">  229</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga833776709df94d727f8c22304b3388cf">hwloc_bitmap_clr_range</a>(<a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> begin, <span class="keywordtype">int</span> end);</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160; </div>
+<div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="a00217.html#gaa611a77c092e679246afdf9a60d5db8b">  250</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#gaa611a77c092e679246afdf9a60d5db8b">hwloc_bitmap_singlify</a>(<a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap);</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160; </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160; </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;<span class="comment"> * Consulting bitmaps.</span></div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160; </div>
+<div class="line"><a name="l00258"></a><span class="lineno"><a class="line" href="a00217.html#gab6a6bae22a33ec6adfc169a953c13e6c">  258</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="a00217.html#gab6a6bae22a33ec6adfc169a953c13e6c">hwloc_bitmap_to_ulong</a>(<a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160; </div>
+<div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="a00217.html#gac92e6404f648d6b99d2c626b05b2ffa4">  261</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="a00217.html#gac92e6404f648d6b99d2c626b05b2ffa4">hwloc_bitmap_to_ith_ulong</a>(<a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> i) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160; </div>
+<div class="line"><a name="l00269"></a><span class="lineno"><a class="line" href="a00217.html#gacd215a2348732de25d94a4ecd76d528c">  269</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#gacd215a2348732de25d94a4ecd76d528c">hwloc_bitmap_to_ulongs</a>(<a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> nr, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *masks);</div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160; </div>
+<div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="a00217.html#gac0744734d761d65c977aece565364908">  284</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#gac0744734d761d65c977aece565364908">hwloc_bitmap_nr_ulongs</a>(<a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160; </div>
+<div class="line"><a name="l00290"></a><span class="lineno"><a class="line" href="a00217.html#ga11340dd487f110bb84f0a6e4ae90bd06">  290</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga11340dd487f110bb84f0a6e4ae90bd06">hwloc_bitmap_isset</a>(<a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> <span class="keywordtype">id</span>) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160; </div>
+<div class="line"><a name="l00296"></a><span class="lineno"><a class="line" href="a00217.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">  296</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(<a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160; </div>
+<div class="line"><a name="l00304"></a><span class="lineno"><a class="line" href="a00217.html#ga5fdcb8c19c336511c37076d649e74af4">  304</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga5fdcb8c19c336511c37076d649e74af4">hwloc_bitmap_isfull</a>(<a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160; </div>
+<div class="line"><a name="l00310"></a><span class="lineno"><a class="line" href="a00217.html#ga3ec1ced43afadf8c0a7197320bc016ed">  310</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga3ec1ced43afadf8c0a7197320bc016ed">hwloc_bitmap_first</a>(<a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160; </div>
+<div class="line"><a name="l00318"></a><span class="lineno"><a class="line" href="a00217.html#gaab7240b4b644693b775dad17b44ffd68">  318</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#gaab7240b4b644693b775dad17b44ffd68">hwloc_bitmap_next</a>(<a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap, <span class="keywordtype">int</span> prev) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160; </div>
+<div class="line"><a name="l00324"></a><span class="lineno"><a class="line" href="a00217.html#ga3d9b08b060a59bbab5a4ea6d0a1ed7a6">  324</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga3d9b08b060a59bbab5a4ea6d0a1ed7a6">hwloc_bitmap_last</a>(<a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160; </div>
+<div class="line"><a name="l00333"></a><span class="lineno"><a class="line" href="a00217.html#ga0200466842c0e1f5da75e84dde460b10">  333</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga0200466842c0e1f5da75e84dde460b10">hwloc_bitmap_weight</a>(<a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160; </div>
+<div class="line"><a name="l00339"></a><span class="lineno"><a class="line" href="a00217.html#gae408841487b288e148a478ba0465c99e">  339</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#gae408841487b288e148a478ba0465c99e">hwloc_bitmap_first_unset</a>(<a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160; </div>
+<div class="line"><a name="l00347"></a><span class="lineno"><a class="line" href="a00217.html#ga9653af34d1460ef106b7df25af4cdca8">  347</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga9653af34d1460ef106b7df25af4cdca8">hwloc_bitmap_next_unset</a>(<a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap, <span class="keywordtype">int</span> prev) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160; </div>
+<div class="line"><a name="l00353"></a><span class="lineno"><a class="line" href="a00217.html#ga45d49aeb45c7da631b1480a93dc3fc92">  353</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga45d49aeb45c7da631b1480a93dc3fc92">hwloc_bitmap_last_unset</a>(<a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160; </div>
+<div class="line"><a name="l00370"></a><span class="lineno"><a class="line" href="a00217.html#ga3f6861045a8029ade373510ffa727d2a">  370</a></span>&#160;<span class="preprocessor">#define hwloc_bitmap_foreach_begin(id, bitmap) \</span></div>
+<div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;<span class="preprocessor">do { \</span></div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;<span class="preprocessor">        assert(hwloc_bitmap_weight(bitmap) != -1); \</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;<span class="preprocessor">        for (id = hwloc_bitmap_first(bitmap); \</span></div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;<span class="preprocessor">             (unsigned) id != (unsigned) -1; \</span></div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;<span class="preprocessor">             id = hwloc_bitmap_next(bitmap, id)) {</span></div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160; </div>
+<div class="line"><a name="l00384"></a><span class="lineno"><a class="line" href="a00217.html#gafcf3246db406218d4e155735b3fa6528">  384</a></span>&#160;<span class="preprocessor">#define hwloc_bitmap_foreach_end()              \</span></div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;<span class="preprocessor">        } \</span></div>
+<div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;<span class="preprocessor">} while (0)</span></div>
+<div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160; </div>
+<div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160; </div>
+<div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;<span class="comment"> * Combining bitmaps.</span></div>
+<div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160; </div>
+<div class="line"><a name="l00397"></a><span class="lineno"><a class="line" href="a00217.html#ga120b8aefb9ce7ef349929656359b1859">  397</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a> (<a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> res, <a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2);</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160; </div>
+<div class="line"><a name="l00403"></a><span class="lineno"><a class="line" href="a00217.html#ga674533016ffed922a28b4f0b49b82cd4">  403</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga674533016ffed922a28b4f0b49b82cd4">hwloc_bitmap_and</a> (<a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> res, <a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2);</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160; </div>
+<div class="line"><a name="l00409"></a><span class="lineno"><a class="line" href="a00217.html#ga7ca5c72db65406b85aca032c8a990f9e">  409</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga7ca5c72db65406b85aca032c8a990f9e">hwloc_bitmap_andnot</a> (<a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> res, <a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2);</div>
+<div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160; </div>
+<div class="line"><a name="l00415"></a><span class="lineno"><a class="line" href="a00217.html#ga205508218e09cb9befd0687f16409f09">  415</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga205508218e09cb9befd0687f16409f09">hwloc_bitmap_xor</a> (<a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> res, <a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2);</div>
+<div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160; </div>
+<div class="line"><a name="l00421"></a><span class="lineno"><a class="line" href="a00217.html#ga84cfdb4f8ab8c1f7e097728e613a2a3f">  421</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga84cfdb4f8ab8c1f7e097728e613a2a3f">hwloc_bitmap_not</a> (<a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> res, <a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap);</div>
+<div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160; </div>
+<div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160; </div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;<span class="comment"> * Comparing bitmaps.</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160; </div>
+<div class="line"><a name="l00432"></a><span class="lineno"><a class="line" href="a00217.html#gaefa070f9232857ba5a57297ea9a08ea2">  432</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#gaefa070f9232857ba5a57297ea9a08ea2">hwloc_bitmap_intersects</a> (<a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160; </div>
+<div class="line"><a name="l00440"></a><span class="lineno"><a class="line" href="a00217.html#ga0526e03db81956fb02acc8260b66d6a4">  440</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a> (<a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> sub_bitmap, <a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> super_bitmap) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160; </div>
+<div class="line"><a name="l00446"></a><span class="lineno"><a class="line" href="a00217.html#ga32376b1405e57472b73c3aa53bb39663">  446</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga32376b1405e57472b73c3aa53bb39663">hwloc_bitmap_isequal</a> (<a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160; </div>
+<div class="line"><a name="l00465"></a><span class="lineno"><a class="line" href="a00217.html#gaa39cda1510ab721b5c012c76ead72365">  465</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#gaa39cda1510ab721b5c012c76ead72365">hwloc_bitmap_compare_first</a>(<a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160; </div>
+<div class="line"><a name="l00484"></a><span class="lineno"><a class="line" href="a00217.html#ga14cdbc0ef0a705e84999bd48a2e649f3">  484</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#ga14cdbc0ef0a705e84999bd48a2e649f3">hwloc_bitmap_compare</a>(<a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2) __hwloc_attribute_pure;</div>
+<div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160; </div>
+<div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
+<div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160; </div>
+<div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160; </div>
+<div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_BITMAP_H */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="aa00217_html_ga0200466842c0e1f5da75e84dde460b10"><div class="ttname"><a href="a00217.html#ga0200466842c0e1f5da75e84dde460b10">hwloc_bitmap_weight</a></div><div class="ttdeci">int hwloc_bitmap_weight(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Compute the &quot;weight&quot; of bitmap bitmap (i.e., number of indexes that are in the bitmap).</div></div>
+<div class="ttc" id="aa00217_html_ga02853b4a224970587b9d7a0e20d857c0"><div class="ttname"><a href="a00217.html#ga02853b4a224970587b9d7a0e20d857c0">hwloc_bitmap_alloc_full</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_bitmap_alloc_full(void)</div><div class="ttdoc">Allocate a new full bitmap.</div></div>
+<div class="ttc" id="aa00217_html_ga0526e03db81956fb02acc8260b66d6a4"><div class="ttname"><a href="a00217.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a></div><div class="ttdeci">int hwloc_bitmap_isincluded(hwloc_const_bitmap_t sub_bitmap, hwloc_const_bitmap_t super_bitmap)</div><div class="ttdoc">Test whether bitmap sub_bitmap is part of bitmap super_bitmap.</div></div>
+<div class="ttc" id="aa00217_html_ga062dbff93baeff3b425a7260c5463646"><div class="ttname"><a href="a00217.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a></div><div class="ttdeci">int hwloc_bitmap_set(hwloc_bitmap_t bitmap, unsigned id)</div><div class="ttdoc">Add index id in bitmap bitmap.</div></div>
+<div class="ttc" id="aa00217_html_ga064a85c643a364b60acbfa0f3663fc18"><div class="ttname"><a href="a00217.html#ga064a85c643a364b60acbfa0f3663fc18">hwloc_bitmap_sscanf</a></div><div class="ttdeci">int hwloc_bitmap_sscanf(hwloc_bitmap_t bitmap, const char *restrict string)</div><div class="ttdoc">Parse a bitmap string and stores it in bitmap bitmap.</div></div>
+<div class="ttc" id="aa00217_html_ga06d505f8a1c0a536614f65f503ee6d93"><div class="ttname"><a href="a00217.html#ga06d505f8a1c0a536614f65f503ee6d93">hwloc_bitmap_allbut</a></div><div class="ttdeci">int hwloc_bitmap_allbut(hwloc_bitmap_t bitmap, unsigned id)</div><div class="ttdoc">Fill the bitmap and clear the index id.</div></div>
+<div class="ttc" id="aa00217_html_ga07b2de8786b3cdb22f21d9dd42588275"><div class="ttname"><a href="a00217.html#ga07b2de8786b3cdb22f21d9dd42588275">hwloc_bitmap_fill</a></div><div class="ttdeci">void hwloc_bitmap_fill(hwloc_bitmap_t bitmap)</div><div class="ttdoc">Fill bitmap bitmap with all possible indexes (even if those objects don't exist or are otherwise unav...</div></div>
+<div class="ttc" id="aa00217_html_ga0fece972134fdecf2da9bc7a11dd827e"><div class="ttname"><a href="a00217.html#ga0fece972134fdecf2da9bc7a11dd827e">hwloc_bitmap_asprintf</a></div><div class="ttdeci">int hwloc_bitmap_asprintf(char **strp, hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Stringify a bitmap into a newly allocated string.</div></div>
+<div class="ttc" id="aa00217_html_ga10be0840cdeb7ce26d862819dd303baa"><div class="ttname"><a href="a00217.html#ga10be0840cdeb7ce26d862819dd303baa">hwloc_bitmap_only</a></div><div class="ttdeci">int hwloc_bitmap_only(hwloc_bitmap_t bitmap, unsigned id)</div><div class="ttdoc">Empty the bitmap bitmap and add bit id.</div></div>
+<div class="ttc" id="aa00217_html_ga11340dd487f110bb84f0a6e4ae90bd06"><div class="ttname"><a href="a00217.html#ga11340dd487f110bb84f0a6e4ae90bd06">hwloc_bitmap_isset</a></div><div class="ttdeci">int hwloc_bitmap_isset(hwloc_const_bitmap_t bitmap, unsigned id)</div><div class="ttdoc">Test whether index id is part of bitmap bitmap.</div></div>
+<div class="ttc" id="aa00217_html_ga120b8aefb9ce7ef349929656359b1859"><div class="ttname"><a href="a00217.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a></div><div class="ttdeci">int hwloc_bitmap_or(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Or bitmaps bitmap1 and bitmap2 and store the result in bitmap res.</div></div>
+<div class="ttc" id="aa00217_html_ga14cdbc0ef0a705e84999bd48a2e649f3"><div class="ttname"><a href="a00217.html#ga14cdbc0ef0a705e84999bd48a2e649f3">hwloc_bitmap_compare</a></div><div class="ttdeci">int hwloc_bitmap_compare(hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Compare bitmaps bitmap1 and bitmap2 in lexicographic order.</div></div>
+<div class="ttc" id="aa00217_html_ga156130d85b3a0674d6e0e6770fe68fbe"><div class="ttname"><a href="a00217.html#ga156130d85b3a0674d6e0e6770fe68fbe">hwloc_bitmap_free</a></div><div class="ttdeci">void hwloc_bitmap_free(hwloc_bitmap_t bitmap)</div><div class="ttdoc">Free bitmap bitmap.</div></div>
+<div class="ttc" id="aa00217_html_ga205508218e09cb9befd0687f16409f09"><div class="ttname"><a href="a00217.html#ga205508218e09cb9befd0687f16409f09">hwloc_bitmap_xor</a></div><div class="ttdeci">int hwloc_bitmap_xor(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Xor bitmaps bitmap1 and bitmap2 and store the result in bitmap res.</div></div>
+<div class="ttc" id="aa00217_html_ga32376b1405e57472b73c3aa53bb39663"><div class="ttname"><a href="a00217.html#ga32376b1405e57472b73c3aa53bb39663">hwloc_bitmap_isequal</a></div><div class="ttdeci">int hwloc_bitmap_isequal(hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Test whether bitmap bitmap1 is equal to bitmap bitmap2.</div></div>
+<div class="ttc" id="aa00217_html_ga391312513f17c985d871f18367c59512"><div class="ttname"><a href="a00217.html#ga391312513f17c985d871f18367c59512">hwloc_bitmap_taskset_asprintf</a></div><div class="ttdeci">int hwloc_bitmap_taskset_asprintf(char **strp, hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Stringify a bitmap into a newly allocated taskset-specific string.</div></div>
+<div class="ttc" id="aa00217_html_ga39c0f1b02053de66d205c9f8260b3665"><div class="ttname"><a href="a00217.html#ga39c0f1b02053de66d205c9f8260b3665">hwloc_bitmap_list_asprintf</a></div><div class="ttdeci">int hwloc_bitmap_list_asprintf(char **strp, hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Stringify a bitmap into a newly allocated list string.</div></div>
+<div class="ttc" id="aa00217_html_ga3d06e6447edeb61e56a9ad83f31f0a37"><div class="ttname"><a href="a00217.html#ga3d06e6447edeb61e56a9ad83f31f0a37">hwloc_bitmap_list_snprintf</a></div><div class="ttdeci">int hwloc_bitmap_list_snprintf(char *restrict buf, size_t buflen, hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Stringify a bitmap in the list format.</div></div>
+<div class="ttc" id="aa00217_html_ga3d9b08b060a59bbab5a4ea6d0a1ed7a6"><div class="ttname"><a href="a00217.html#ga3d9b08b060a59bbab5a4ea6d0a1ed7a6">hwloc_bitmap_last</a></div><div class="ttdeci">int hwloc_bitmap_last(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Compute the last index (most significant bit) in bitmap bitmap.</div></div>
+<div class="ttc" id="aa00217_html_ga3daeed965c35c6d2fd4820a318219985"><div class="ttname"><a href="a00217.html#ga3daeed965c35c6d2fd4820a318219985">hwloc_bitmap_set_ith_ulong</a></div><div class="ttdeci">int hwloc_bitmap_set_ith_ulong(hwloc_bitmap_t bitmap, unsigned i, unsigned long mask)</div><div class="ttdoc">Replace i -th subset of bitmap bitmap with unsigned long mask.</div></div>
+<div class="ttc" id="aa00217_html_ga3ec1ced43afadf8c0a7197320bc016ed"><div class="ttname"><a href="a00217.html#ga3ec1ced43afadf8c0a7197320bc016ed">hwloc_bitmap_first</a></div><div class="ttdeci">int hwloc_bitmap_first(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Compute the first index (least significant bit) in bitmap bitmap.</div></div>
+<div class="ttc" id="aa00217_html_ga45d49aeb45c7da631b1480a93dc3fc92"><div class="ttname"><a href="a00217.html#ga45d49aeb45c7da631b1480a93dc3fc92">hwloc_bitmap_last_unset</a></div><div class="ttdeci">int hwloc_bitmap_last_unset(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Compute the last unset index (most significant bit) in bitmap bitmap.</div></div>
+<div class="ttc" id="aa00217_html_ga4947c46d47bcfcd3faf3f59569be3e37"><div class="ttname"><a href="a00217.html#ga4947c46d47bcfcd3faf3f59569be3e37">hwloc_bitmap_from_ith_ulong</a></div><div class="ttdeci">int hwloc_bitmap_from_ith_ulong(hwloc_bitmap_t bitmap, unsigned i, unsigned long mask)</div><div class="ttdoc">Setup bitmap bitmap from unsigned long mask used as i -th subset.</div></div>
+<div class="ttc" id="aa00217_html_ga4f23db5041240e03e348752f8bd6ec2d"><div class="ttname"><a href="a00217.html#ga4f23db5041240e03e348752f8bd6ec2d">hwloc_bitmap_taskset_sscanf</a></div><div class="ttdeci">int hwloc_bitmap_taskset_sscanf(hwloc_bitmap_t bitmap, const char *restrict string)</div><div class="ttdoc">Parse a taskset-specific bitmap string and stores it in bitmap bitmap.</div></div>
+<div class="ttc" id="aa00217_html_ga5b64be28f5a7176ed8ad0d6a90bdf108"><div class="ttname"><a href="a00217.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a></div><div class="ttdeci">int hwloc_bitmap_iszero(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Test whether bitmap bitmap is empty.</div></div>
+<div class="ttc" id="aa00217_html_ga5beb68a987fe48e5c5edef06ab260e14"><div class="ttname"><a href="a00217.html#ga5beb68a987fe48e5c5edef06ab260e14">hwloc_bitmap_taskset_snprintf</a></div><div class="ttdeci">int hwloc_bitmap_taskset_snprintf(char *restrict buf, size_t buflen, hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Stringify a bitmap in the taskset-specific format.</div></div>
+<div class="ttc" id="aa00217_html_ga5fdcb8c19c336511c37076d649e74af4"><div class="ttname"><a href="a00217.html#ga5fdcb8c19c336511c37076d649e74af4">hwloc_bitmap_isfull</a></div><div class="ttdeci">int hwloc_bitmap_isfull(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Test whether bitmap bitmap is completely full.</div></div>
+<div class="ttc" id="aa00217_html_ga674533016ffed922a28b4f0b49b82cd4"><div class="ttname"><a href="a00217.html#ga674533016ffed922a28b4f0b49b82cd4">hwloc_bitmap_and</a></div><div class="ttdeci">int hwloc_bitmap_and(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">And bitmaps bitmap1 and bitmap2 and store the result in bitmap res.</div></div>
+<div class="ttc" id="aa00217_html_ga72a29824798b48784b8217471ec8f14c"><div class="ttname"><a href="a00217.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a></div><div class="ttdeci">int hwloc_bitmap_copy(hwloc_bitmap_t dst, hwloc_const_bitmap_t src)</div><div class="ttdoc">Copy the contents of bitmap src into the already allocated bitmap dst.</div></div>
+<div class="ttc" id="aa00217_html_ga7ca5c72db65406b85aca032c8a990f9e"><div class="ttname"><a href="a00217.html#ga7ca5c72db65406b85aca032c8a990f9e">hwloc_bitmap_andnot</a></div><div class="ttdeci">int hwloc_bitmap_andnot(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">And bitmap bitmap1 and the negation of bitmap2 and store the result in bitmap res.</div></div>
+<div class="ttc" id="aa00217_html_ga833776709df94d727f8c22304b3388cf"><div class="ttname"><a href="a00217.html#ga833776709df94d727f8c22304b3388cf">hwloc_bitmap_clr_range</a></div><div class="ttdeci">int hwloc_bitmap_clr_range(hwloc_bitmap_t bitmap, unsigned begin, int end)</div><div class="ttdoc">Remove indexes from begin to end in bitmap bitmap.</div></div>
+<div class="ttc" id="aa00217_html_ga84cfdb4f8ab8c1f7e097728e613a2a3f"><div class="ttname"><a href="a00217.html#ga84cfdb4f8ab8c1f7e097728e613a2a3f">hwloc_bitmap_not</a></div><div class="ttdeci">int hwloc_bitmap_not(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Negate bitmap bitmap and store the result in bitmap res.</div></div>
+<div class="ttc" id="aa00217_html_ga9511644657030a021dce9941e3cda583"><div class="ttname"><a href="a00217.html#ga9511644657030a021dce9941e3cda583">hwloc_bitmap_snprintf</a></div><div class="ttdeci">int hwloc_bitmap_snprintf(char *restrict buf, size_t buflen, hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Stringify a bitmap.</div></div>
+<div class="ttc" id="aa00217_html_ga9653af34d1460ef106b7df25af4cdca8"><div class="ttname"><a href="a00217.html#ga9653af34d1460ef106b7df25af4cdca8">hwloc_bitmap_next_unset</a></div><div class="ttdeci">int hwloc_bitmap_next_unset(hwloc_const_bitmap_t bitmap, int prev)</div><div class="ttdoc">Compute the next unset index in bitmap bitmap which is after index prev.</div></div>
+<div class="ttc" id="aa00217_html_ga9c9a8433732fb9f24899e7aa4c014d7e"><div class="ttname"><a href="a00217.html#ga9c9a8433732fb9f24899e7aa4c014d7e">hwloc_bitmap_set_range</a></div><div class="ttdeci">int hwloc_bitmap_set_range(hwloc_bitmap_t bitmap, unsigned begin, int end)</div><div class="ttdoc">Add indexes from begin to end in bitmap bitmap.</div></div>
+<div class="ttc" id="aa00217_html_gaa39cda1510ab721b5c012c76ead72365"><div class="ttname"><a href="a00217.html#gaa39cda1510ab721b5c012c76ead72365">hwloc_bitmap_compare_first</a></div><div class="ttdeci">int hwloc_bitmap_compare_first(hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Compare bitmaps bitmap1 and bitmap2 using their lowest index.</div></div>
+<div class="ttc" id="aa00217_html_gaa3c2bf4c776d603dcebbb61b0c923d84"><div class="ttname"><a href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a></div><div class="ttdeci">struct hwloc_bitmap_s * hwloc_bitmap_t</div><div class="ttdoc">Set of bits represented as an opaque pointer to an internal bitmap.</div><div class="ttdef"><b>Definition:</b> bitmap.h:68</div></div>
+<div class="ttc" id="aa00217_html_gaa611a77c092e679246afdf9a60d5db8b"><div class="ttname"><a href="a00217.html#gaa611a77c092e679246afdf9a60d5db8b">hwloc_bitmap_singlify</a></div><div class="ttdeci">int hwloc_bitmap_singlify(hwloc_bitmap_t bitmap)</div><div class="ttdoc">Keep a single index among those set in bitmap bitmap.</div></div>
+<div class="ttc" id="aa00217_html_gaa97c5217613c8cae9862287170ea2132"><div class="ttname"><a href="a00217.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a></div><div class="ttdeci">void hwloc_bitmap_zero(hwloc_bitmap_t bitmap)</div><div class="ttdoc">Empty the bitmap bitmap.</div></div>
+<div class="ttc" id="aa00217_html_gaab7240b4b644693b775dad17b44ffd68"><div class="ttname"><a href="a00217.html#gaab7240b4b644693b775dad17b44ffd68">hwloc_bitmap_next</a></div><div class="ttdeci">int hwloc_bitmap_next(hwloc_const_bitmap_t bitmap, int prev)</div><div class="ttdoc">Compute the next index in bitmap bitmap which is after index prev.</div></div>
+<div class="ttc" id="aa00217_html_gab6a6bae22a33ec6adfc169a953c13e6c"><div class="ttname"><a href="a00217.html#gab6a6bae22a33ec6adfc169a953c13e6c">hwloc_bitmap_to_ulong</a></div><div class="ttdeci">unsigned long hwloc_bitmap_to_ulong(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Convert the beginning part of bitmap bitmap into unsigned long mask.</div></div>
+<div class="ttc" id="aa00217_html_gabcfef22f6fc4d4b33f068dd91a1c38f5"><div class="ttname"><a href="a00217.html#gabcfef22f6fc4d4b33f068dd91a1c38f5">hwloc_bitmap_from_ulongs</a></div><div class="ttdeci">int hwloc_bitmap_from_ulongs(hwloc_bitmap_t bitmap, unsigned nr, const unsigned long *masks)</div><div class="ttdoc">Setup bitmap bitmap from unsigned longs masks used as first nr subsets.</div></div>
+<div class="ttc" id="aa00217_html_gac0744734d761d65c977aece565364908"><div class="ttname"><a href="a00217.html#gac0744734d761d65c977aece565364908">hwloc_bitmap_nr_ulongs</a></div><div class="ttdeci">int hwloc_bitmap_nr_ulongs(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Return the number of unsigned longs required for storing bitmap bitmap entirely.</div></div>
+<div class="ttc" id="aa00217_html_gac92e6404f648d6b99d2c626b05b2ffa4"><div class="ttname"><a href="a00217.html#gac92e6404f648d6b99d2c626b05b2ffa4">hwloc_bitmap_to_ith_ulong</a></div><div class="ttdeci">unsigned long hwloc_bitmap_to_ith_ulong(hwloc_const_bitmap_t bitmap, unsigned i)</div><div class="ttdoc">Convert the i -th subset of bitmap bitmap into unsigned long mask.</div></div>
+<div class="ttc" id="aa00217_html_gacd215a2348732de25d94a4ecd76d528c"><div class="ttname"><a href="a00217.html#gacd215a2348732de25d94a4ecd76d528c">hwloc_bitmap_to_ulongs</a></div><div class="ttdeci">int hwloc_bitmap_to_ulongs(hwloc_const_bitmap_t bitmap, unsigned nr, unsigned long *masks)</div><div class="ttdoc">Convert the first nr subsets of bitmap bitmap into the array of nr unsigned long masks.</div></div>
+<div class="ttc" id="aa00217_html_gad59b0ebeb29c1bfabbb2a379e55c1159"><div class="ttname"><a href="a00217.html#gad59b0ebeb29c1bfabbb2a379e55c1159">hwloc_bitmap_from_ulong</a></div><div class="ttdeci">int hwloc_bitmap_from_ulong(hwloc_bitmap_t bitmap, unsigned long mask)</div><div class="ttdoc">Setup bitmap bitmap from unsigned long mask.</div></div>
+<div class="ttc" id="aa00217_html_gadece3d1eb5199fc2fb99bc7dcf1ccc05"><div class="ttname"><a href="a00217.html#gadece3d1eb5199fc2fb99bc7dcf1ccc05">hwloc_bitmap_alloc</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_bitmap_alloc(void)</div><div class="ttdoc">Allocate a new empty bitmap.</div></div>
+<div class="ttc" id="aa00217_html_gae408841487b288e148a478ba0465c99e"><div class="ttname"><a href="a00217.html#gae408841487b288e148a478ba0465c99e">hwloc_bitmap_first_unset</a></div><div class="ttdeci">int hwloc_bitmap_first_unset(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Compute the first unset index (least significant bit) in bitmap bitmap.</div></div>
+<div class="ttc" id="aa00217_html_gae679434c1a5f41d3560a8a7e2c1b0dee"><div class="ttname"><a href="a00217.html#gae679434c1a5f41d3560a8a7e2c1b0dee">hwloc_bitmap_dup</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_bitmap_dup(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.</div></div>
+<div class="ttc" id="aa00217_html_gae991a108af01d408be2776c5b2c467b2"><div class="ttname"><a href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a></div><div class="ttdeci">const struct hwloc_bitmap_s * hwloc_const_bitmap_t</div><div class="ttdoc">a non-modifiable hwloc_bitmap_t</div><div class="ttdef"><b>Definition:</b> bitmap.h:70</div></div>
+<div class="ttc" id="aa00217_html_gaefa070f9232857ba5a57297ea9a08ea2"><div class="ttname"><a href="a00217.html#gaefa070f9232857ba5a57297ea9a08ea2">hwloc_bitmap_intersects</a></div><div class="ttdeci">int hwloc_bitmap_intersects(hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Test whether bitmaps bitmap1 and bitmap2 intersects.</div></div>
+<div class="ttc" id="aa00217_html_gaf20bb350b6844d08931a064a73f86743"><div class="ttname"><a href="a00217.html#gaf20bb350b6844d08931a064a73f86743">hwloc_bitmap_clr</a></div><div class="ttdeci">int hwloc_bitmap_clr(hwloc_bitmap_t bitmap, unsigned id)</div><div class="ttdoc">Remove index id from bitmap bitmap.</div></div>
+<div class="ttc" id="aa00217_html_gaf9314311d482c621e17c6a53a9fe993e"><div class="ttname"><a href="a00217.html#gaf9314311d482c621e17c6a53a9fe993e">hwloc_bitmap_list_sscanf</a></div><div class="ttdeci">int hwloc_bitmap_list_sscanf(hwloc_bitmap_t bitmap, const char *restrict string)</div><div class="ttdoc">Parse a list string and stores it in bitmap bitmap.</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00134_source.html b/doc/doxygen-doc/html/a00134_source.html
new file mode 100644
index 00000000..03c6adf3
--- /dev/null
+++ b/doc/doxygen-doc/html/a00134_source.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): export.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_5cb306d949c7931a3b6c77517393dd34.html">hwloc</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">export.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright © 2009-2018 Inria.  All rights reserved.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * Copyright © 2009-2012 Université Bordeaux</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Copyright © 2009-2011 Cisco Systems, Inc.  All rights reserved.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160; </div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="preprocessor">#ifndef HWLOC_EXPORT_H</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#define HWLOC_EXPORT_H</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160; </div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#ifndef HWLOC_H</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#error Please include the main hwloc.h instead</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160; </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#elif 0</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;}</div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160; </div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160; </div>
+<div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="a00218.html#ga0eb99636aff71fe2704e1fa0ffe8c18d">   35</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00218.html#ga0eb99636aff71fe2704e1fa0ffe8c18d">hwloc_topology_export_xml_flags_e</a> {</div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160; <a class="code" href="a00218.html#gga0eb99636aff71fe2704e1fa0ffe8c18dae7d6d96546131ef0043867b836b02e0f">HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1</a> = (1UL&lt;&lt;0)</div>
+<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="a00218.html#gga0eb99636aff71fe2704e1fa0ffe8c18dae7d6d96546131ef0043867b836b02e0f">   41</a></span>&#160;};</div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160; </div>
+<div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="a00218.html#ga333f79975b4eeb28a3d8fad3373583ce">   71</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00218.html#ga333f79975b4eeb28a3d8fad3373583ce">hwloc_topology_export_xml</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">const</span> <span class="keywordtype">char</span> *xmlpath, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160; </div>
+<div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="a00218.html#gad33b7f7c11db10459505a3b1634fd3f1">  105</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00218.html#gad33b7f7c11db10459505a3b1634fd3f1">hwloc_topology_export_xmlbuffer</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">char</span> **xmlbuffer, <span class="keywordtype">int</span> *buflen, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160; </div>
+<div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="a00218.html#ga293e4a6489f15fd16ad22a5734561cf1">  108</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00218.html#ga293e4a6489f15fd16ad22a5734561cf1">hwloc_free_xmlbuffer</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">char</span> *xmlbuffer);</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160; </div>
+<div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="a00218.html#ga9d6ff0f7a8dd45be9aa8575ef31978cc">  128</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00218.html#ga9d6ff0f7a8dd45be9aa8575ef31978cc">hwloc_topology_set_userdata_export_callback</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;                                                                <span class="keywordtype">void</span> (*export_cb)(<span class="keywordtype">void</span> *reserved, <a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00253.html">hwloc_obj_t</a> obj));</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160; </div>
+<div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="a00218.html#gaa541bdd628416dbbe97d0df69d3de958">  156</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00218.html#gaa541bdd628416dbbe97d0df69d3de958">hwloc_export_obj_userdata</a>(<span class="keywordtype">void</span> *reserved, <a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00253.html">hwloc_obj_t</a> obj, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> <span class="keywordtype">void</span> *buffer, <span class="keywordtype">size_t</span> length);</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160; </div>
+<div class="line"><a name="l00171"></a><span class="lineno"><a class="line" href="a00218.html#ga1b7358137cec27bd073f58a606ecbaba">  171</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00218.html#ga1b7358137cec27bd073f58a606ecbaba">hwloc_export_obj_userdata_base64</a>(<span class="keywordtype">void</span> *reserved, <a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00253.html">hwloc_obj_t</a> obj, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> <span class="keywordtype">void</span> *buffer, <span class="keywordtype">size_t</span> length);</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160; </div>
+<div class="line"><a name="l00195"></a><span class="lineno"><a class="line" href="a00218.html#ga5ac6917ea7289955fb1ffda4353af9b0">  195</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00218.html#ga5ac6917ea7289955fb1ffda4353af9b0">hwloc_topology_set_userdata_import_callback</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;                                                                <span class="keywordtype">void</span> (*import_cb)(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00253.html">hwloc_obj_t</a> obj, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> <span class="keywordtype">void</span> *buffer, <span class="keywordtype">size_t</span> length));</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160; </div>
+<div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="a00219.html#ga7ac6f97cc40bd50c40285084f869ba63">  209</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00219.html#ga7ac6f97cc40bd50c40285084f869ba63">hwloc_topology_export_synthetic_flags_e</a> {</div>
+<div class="line"><a name="l00215"></a><span class="lineno"><a class="line" href="a00219.html#gga7ac6f97cc40bd50c40285084f869ba63a3b3bd4ba2ef9990810865e561034ccc9">  215</a></span>&#160; <a class="code" href="a00219.html#gga7ac6f97cc40bd50c40285084f869ba63a3b3bd4ba2ef9990810865e561034ccc9">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_EXTENDED_TYPES</a> = (1UL&lt;&lt;0),</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160; </div>
+<div class="line"><a name="l00223"></a><span class="lineno"><a class="line" href="a00219.html#gga7ac6f97cc40bd50c40285084f869ba63aaa2702ffba050bab079b3041aec737d4">  223</a></span>&#160; <a class="code" href="a00219.html#gga7ac6f97cc40bd50c40285084f869ba63aaa2702ffba050bab079b3041aec737d4">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_ATTRS</a> = (1UL&lt;&lt;1),</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160; </div>
+<div class="line"><a name="l00233"></a><span class="lineno"><a class="line" href="a00219.html#gga7ac6f97cc40bd50c40285084f869ba63a7896bdf4ccfcdcd09a9f76c0f5e3a5b8">  233</a></span>&#160; <a class="code" href="a00219.html#gga7ac6f97cc40bd50c40285084f869ba63a7896bdf4ccfcdcd09a9f76c0f5e3a5b8">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_V1</a> = (1UL&lt;&lt;2),</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160; </div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160; <a class="code" href="a00219.html#gga7ac6f97cc40bd50c40285084f869ba63a22c57cf18e1da4a6c584fb783b552f9f">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_IGNORE_MEMORY</a> = (1UL&lt;&lt;3)</div>
+<div class="line"><a name="l00244"></a><span class="lineno"><a class="line" href="a00219.html#gga7ac6f97cc40bd50c40285084f869ba63a22c57cf18e1da4a6c584fb783b552f9f">  244</a></span>&#160;};</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160; </div>
+<div class="line"><a name="l00267"></a><span class="lineno"><a class="line" href="a00219.html#ga24b7864a1c588309c4749f621f03b4c7">  267</a></span>&#160;  HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00219.html#ga24b7864a1c588309c4749f621f03b4c7">hwloc_topology_export_synthetic</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">char</span> *buffer, <span class="keywordtype">size_t</span> buflen, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160; </div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
+<div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160; </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160; </div>
+<div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_EXPORT_H */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="aa00198_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:692</div></div>
+<div class="ttc" id="aa00218_html_ga0eb99636aff71fe2704e1fa0ffe8c18d"><div class="ttname"><a href="a00218.html#ga0eb99636aff71fe2704e1fa0ffe8c18d">hwloc_topology_export_xml_flags_e</a></div><div class="ttdeci">hwloc_topology_export_xml_flags_e</div><div class="ttdoc">Flags for exporting XML topologies.</div><div class="ttdef"><b>Definition:</b> export.h:35</div></div>
+<div class="ttc" id="aa00218_html_ga1b7358137cec27bd073f58a606ecbaba"><div class="ttname"><a href="a00218.html#ga1b7358137cec27bd073f58a606ecbaba">hwloc_export_obj_userdata_base64</a></div><div class="ttdeci">int hwloc_export_obj_userdata_base64(void *reserved, hwloc_topology_t topology, hwloc_obj_t obj, const char *name, const void *buffer, size_t length)</div><div class="ttdoc">Encode and export some object userdata to XML.</div></div>
+<div class="ttc" id="aa00218_html_ga293e4a6489f15fd16ad22a5734561cf1"><div class="ttname"><a href="a00218.html#ga293e4a6489f15fd16ad22a5734561cf1">hwloc_free_xmlbuffer</a></div><div class="ttdeci">void hwloc_free_xmlbuffer(hwloc_topology_t topology, char *xmlbuffer)</div><div class="ttdoc">Free a buffer allocated by hwloc_topology_export_xmlbuffer()</div></div>
+<div class="ttc" id="aa00218_html_ga333f79975b4eeb28a3d8fad3373583ce"><div class="ttname"><a href="a00218.html#ga333f79975b4eeb28a3d8fad3373583ce">hwloc_topology_export_xml</a></div><div class="ttdeci">int hwloc_topology_export_xml(hwloc_topology_t topology, const char *xmlpath, unsigned long flags)</div><div class="ttdoc">Export the topology into an XML file.</div></div>
+<div class="ttc" id="aa00218_html_ga5ac6917ea7289955fb1ffda4353af9b0"><div class="ttname"><a href="a00218.html#ga5ac6917ea7289955fb1ffda4353af9b0">hwloc_topology_set_userdata_import_callback</a></div><div class="ttdeci">void hwloc_topology_set_userdata_import_callback(hwloc_topology_t topology, void(*import_cb)(hwloc_topology_t topology, hwloc_obj_t obj, const char *name, const void *buffer, size_t length))</div><div class="ttdoc">Set the application-specific callback for importing userdata.</div></div>
+<div class="ttc" id="aa00218_html_ga9d6ff0f7a8dd45be9aa8575ef31978cc"><div class="ttname"><a href="a00218.html#ga9d6ff0f7a8dd45be9aa8575ef31978cc">hwloc_topology_set_userdata_export_callback</a></div><div class="ttdeci">void hwloc_topology_set_userdata_export_callback(hwloc_topology_t topology, void(*export_cb)(void *reserved, hwloc_topology_t topology, hwloc_obj_t obj))</div><div class="ttdoc">Set the application-specific callback for exporting object userdata.</div></div>
+<div class="ttc" id="aa00218_html_gaa541bdd628416dbbe97d0df69d3de958"><div class="ttname"><a href="a00218.html#gaa541bdd628416dbbe97d0df69d3de958">hwloc_export_obj_userdata</a></div><div class="ttdeci">int hwloc_export_obj_userdata(void *reserved, hwloc_topology_t topology, hwloc_obj_t obj, const char *name, const void *buffer, size_t length)</div><div class="ttdoc">Export some object userdata to XML.</div></div>
+<div class="ttc" id="aa00218_html_gad33b7f7c11db10459505a3b1634fd3f1"><div class="ttname"><a href="a00218.html#gad33b7f7c11db10459505a3b1634fd3f1">hwloc_topology_export_xmlbuffer</a></div><div class="ttdeci">int hwloc_topology_export_xmlbuffer(hwloc_topology_t topology, char **xmlbuffer, int *buflen, unsigned long flags)</div><div class="ttdoc">Export the topology into a newly-allocated XML memory buffer.</div></div>
+<div class="ttc" id="aa00218_html_gga0eb99636aff71fe2704e1fa0ffe8c18dae7d6d96546131ef0043867b836b02e0f"><div class="ttname"><a href="a00218.html#gga0eb99636aff71fe2704e1fa0ffe8c18dae7d6d96546131ef0043867b836b02e0f">HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1</div><div class="ttdoc">Export XML that is loadable by hwloc v1.x. However, the export may miss some details about the topolo...</div><div class="ttdef"><b>Definition:</b> export.h:40</div></div>
+<div class="ttc" id="aa00219_html_ga24b7864a1c588309c4749f621f03b4c7"><div class="ttname"><a href="a00219.html#ga24b7864a1c588309c4749f621f03b4c7">hwloc_topology_export_synthetic</a></div><div class="ttdeci">int hwloc_topology_export_synthetic(hwloc_topology_t topology, char *buffer, size_t buflen, unsigned long flags)</div><div class="ttdoc">Export the topology as a synthetic string.</div></div>
+<div class="ttc" id="aa00219_html_ga7ac6f97cc40bd50c40285084f869ba63"><div class="ttname"><a href="a00219.html#ga7ac6f97cc40bd50c40285084f869ba63">hwloc_topology_export_synthetic_flags_e</a></div><div class="ttdeci">hwloc_topology_export_synthetic_flags_e</div><div class="ttdoc">Flags for exporting synthetic topologies.</div><div class="ttdef"><b>Definition:</b> export.h:209</div></div>
+<div class="ttc" id="aa00219_html_gga7ac6f97cc40bd50c40285084f869ba63a22c57cf18e1da4a6c584fb783b552f9f"><div class="ttname"><a href="a00219.html#gga7ac6f97cc40bd50c40285084f869ba63a22c57cf18e1da4a6c584fb783b552f9f">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_IGNORE_MEMORY</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_IGNORE_MEMORY</div><div class="ttdoc">Do not export memory information.</div><div class="ttdef"><b>Definition:</b> export.h:243</div></div>
+<div class="ttc" id="aa00219_html_gga7ac6f97cc40bd50c40285084f869ba63a3b3bd4ba2ef9990810865e561034ccc9"><div class="ttname"><a href="a00219.html#gga7ac6f97cc40bd50c40285084f869ba63a3b3bd4ba2ef9990810865e561034ccc9">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_EXTENDED_TYPES</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_EXTENDED_TYPES</div><div class="ttdoc">Export extended types such as L2dcache as basic types such as Cache.</div><div class="ttdef"><b>Definition:</b> export.h:215</div></div>
+<div class="ttc" id="aa00219_html_gga7ac6f97cc40bd50c40285084f869ba63a7896bdf4ccfcdcd09a9f76c0f5e3a5b8"><div class="ttname"><a href="a00219.html#gga7ac6f97cc40bd50c40285084f869ba63a7896bdf4ccfcdcd09a9f76c0f5e3a5b8">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_V1</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_V1</div><div class="ttdoc">Export the memory hierarchy as expected in hwloc 1.x.</div><div class="ttdef"><b>Definition:</b> export.h:233</div></div>
+<div class="ttc" id="aa00219_html_gga7ac6f97cc40bd50c40285084f869ba63aaa2702ffba050bab079b3041aec737d4"><div class="ttname"><a href="a00219.html#gga7ac6f97cc40bd50c40285084f869ba63aaa2702ffba050bab079b3041aec737d4">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_ATTRS</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_ATTRS</div><div class="ttdoc">Do not export level attributes.</div><div class="ttdef"><b>Definition:</b> export.h:223</div></div>
+<div class="ttc" id="aa00253_html"><div class="ttname"><a href="a00253.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:396</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00137_source.html b/doc/doxygen-doc/html/a00137_source.html
new file mode 100644
index 00000000..aa386ed1
--- /dev/null
+++ b/doc/doxygen-doc/html/a00137_source.html
@@ -0,0 +1,243 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): distances.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_5cb306d949c7931a3b6c77517393dd34.html">hwloc</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">distances.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright © 2010-2022 Inria.  All rights reserved.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160; </div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor">#ifndef HWLOC_DISTANCES_H</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor">#define HWLOC_DISTANCES_H</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160; </div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#ifndef HWLOC_H</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#error Please include the main hwloc.h instead</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160; </div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160; </div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#elif 0</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;}</div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160; </div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160; </div>
+<div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="a00325.html">   53</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00325.html">hwloc_distances_s</a> {</div>
+<div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="a00325.html#a4ca2af858cebbce7324ec49903d09474">   54</a></span>&#160;  <span class="keywordtype">unsigned</span> <a class="code" href="a00325.html#a4ca2af858cebbce7324ec49903d09474">nbobjs</a>;              </div>
+<div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="a00325.html#af1e78b2d628d191fa6cae3fbfe891078">   55</a></span>&#160;  <a class="code" href="a00253.html">hwloc_obj_t</a> *<a class="code" href="a00325.html#af1e78b2d628d191fa6cae3fbfe891078">objs</a>;            </div>
+<div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="a00325.html#aef9c83cf467da1b1fa4c36493febb3b5">   60</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="a00325.html#aef9c83cf467da1b1fa4c36493febb3b5">kind</a>;           </div>
+<div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="a00325.html#ae43e19b2c743de05c93d71a30beaca75">   61</a></span>&#160;  hwloc_uint64_t *<a class="code" href="a00325.html#ae43e19b2c743de05c93d71a30beaca75">values</a>;       </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;};</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160; </div>
+<div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="a00220.html#gab1bb10d3adb85b52cdc6fe5a7f74f108">   79</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00220.html#gab1bb10d3adb85b52cdc6fe5a7f74f108">hwloc_distances_kind_e</a> {</div>
+<div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="a00220.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a90dc38248c8d5392d4dd3e88f391e984">   83</a></span>&#160;  <a class="code" href="a00220.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a90dc38248c8d5392d4dd3e88f391e984">HWLOC_DISTANCES_KIND_FROM_OS</a> = (1UL&lt;&lt;0),</div>
+<div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="a00220.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a0148d7f9be833a04f5a55455437c227b">   87</a></span>&#160;  <a class="code" href="a00220.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a0148d7f9be833a04f5a55455437c227b">HWLOC_DISTANCES_KIND_FROM_USER</a> = (1UL&lt;&lt;1),</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160; </div>
+<div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="a00220.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108afd6a3503fbc8f7c1a31235373cefc4c6">   95</a></span>&#160;  <a class="code" href="a00220.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108afd6a3503fbc8f7c1a31235373cefc4c6">HWLOC_DISTANCES_KIND_MEANS_LATENCY</a> = (1UL&lt;&lt;2),</div>
+<div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="a00220.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a41b19f141a3c0ffe85f9affaca4b0293">  102</a></span>&#160;  <a class="code" href="a00220.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a41b19f141a3c0ffe85f9affaca4b0293">HWLOC_DISTANCES_KIND_MEANS_BANDWIDTH</a> = (1UL&lt;&lt;3),</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160; </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;  <a class="code" href="a00220.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108aa6cf2b6dfcf148b65952f811814efbe1">HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES</a> = (1UL&lt;&lt;4)</div>
+<div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="a00220.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108aa6cf2b6dfcf148b65952f811814efbe1">  110</a></span>&#160;};</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160; </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="a00220.html#ga613e6b2a5d0f06626ee8d0c12fa46691">  136</a></span>&#160;<a class="code" href="a00220.html#ga613e6b2a5d0f06626ee8d0c12fa46691">hwloc_distances_get</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;                    <span class="keywordtype">unsigned</span> *nr, <span class="keyword">struct</span> <a class="code" href="a00325.html">hwloc_distances_s</a> **distances,</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;                    <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> kind, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160; </div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="a00220.html#ga5d1d35eccfcc2ebcef71a10972ce9b03">  145</a></span>&#160;<a class="code" href="a00220.html#ga5d1d35eccfcc2ebcef71a10972ce9b03">hwloc_distances_get_by_depth</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">int</span> depth,</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;                             <span class="keywordtype">unsigned</span> *nr, <span class="keyword">struct</span> <a class="code" href="a00325.html">hwloc_distances_s</a> **distances,</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;                             <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> kind, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160; </div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno"><a class="line" href="a00220.html#gaaa6bfbc20072a4f4de132eec859067f6">  154</a></span>&#160;<a class="code" href="a00220.html#gaaa6bfbc20072a4f4de132eec859067f6">hwloc_distances_get_by_type</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type,</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;                            <span class="keywordtype">unsigned</span> *nr, <span class="keyword">struct</span> <a class="code" href="a00325.html">hwloc_distances_s</a> **distances,</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;                            <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> kind, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160; </div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="a00220.html#gaa457f35b8745ca41ec17797c0d7b20f0">  167</a></span>&#160;<a class="code" href="a00220.html#gaa457f35b8745ca41ec17797c0d7b20f0">hwloc_distances_get_by_name</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">const</span> <span class="keywordtype">char</span> *name,</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;                            <span class="keywordtype">unsigned</span> *nr, <span class="keyword">struct</span> <a class="code" href="a00325.html">hwloc_distances_s</a> **distances,</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;                            <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160; </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;HWLOC_DECLSPEC <span class="keyword">const</span> <span class="keywordtype">char</span> *</div>
+<div class="line"><a name="l00177"></a><span class="lineno"><a class="line" href="a00220.html#gaa6f9697028c589cef0458edef5fe273f">  177</a></span>&#160;<a class="code" href="a00220.html#gaa6f9697028c589cef0458edef5fe273f">hwloc_distances_get_name</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">struct</span> <a class="code" href="a00325.html">hwloc_distances_s</a> *distances);</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160; </div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span></div>
+<div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="a00220.html#ga1dd78c1f9acd54f26aba0e284e97e51d">  184</a></span>&#160;<a class="code" href="a00220.html#ga1dd78c1f9acd54f26aba0e284e97e51d">hwloc_distances_release</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">struct</span> <a class="code" href="a00325.html">hwloc_distances_s</a> *distances);</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160; </div>
+<div class="line"><a name="l00187"></a><span class="lineno"><a class="line" href="a00220.html#ga42859b651adec5ef0aaacb53ff220b00">  187</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00220.html#ga42859b651adec5ef0aaacb53ff220b00">hwloc_distances_transform_e</a> {</div>
+<div class="line"><a name="l00201"></a><span class="lineno"><a class="line" href="a00220.html#gga42859b651adec5ef0aaacb53ff220b00a4b7bdb7e3ccca30e03b7ae671e7f6dc1">  201</a></span>&#160;  <a class="code" href="a00220.html#gga42859b651adec5ef0aaacb53ff220b00a4b7bdb7e3ccca30e03b7ae671e7f6dc1">HWLOC_DISTANCES_TRANSFORM_REMOVE_NULL</a> = 0,</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160; </div>
+<div class="line"><a name="l00215"></a><span class="lineno"><a class="line" href="a00220.html#gga42859b651adec5ef0aaacb53ff220b00a441e6bb393558319af3bb1f89f51f44d">  215</a></span>&#160;  <a class="code" href="a00220.html#gga42859b651adec5ef0aaacb53ff220b00a441e6bb393558319af3bb1f89f51f44d">HWLOC_DISTANCES_TRANSFORM_LINKS</a> = 1,</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160; </div>
+<div class="line"><a name="l00224"></a><span class="lineno"><a class="line" href="a00220.html#gga42859b651adec5ef0aaacb53ff220b00a3d2aaf03e17be54eddbb94aab327fded">  224</a></span>&#160;  <a class="code" href="a00220.html#gga42859b651adec5ef0aaacb53ff220b00a3d2aaf03e17be54eddbb94aab327fded">HWLOC_DISTANCES_TRANSFORM_MERGE_SWITCH_PORTS</a> = 2,</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160; </div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;  <a class="code" href="a00220.html#gga42859b651adec5ef0aaacb53ff220b00a1264abf9b9463f252995f37eb1057047">HWLOC_DISTANCES_TRANSFORM_TRANSITIVE_CLOSURE</a> = 3</div>
+<div class="line"><a name="l00232"></a><span class="lineno"><a class="line" href="a00220.html#gga42859b651adec5ef0aaacb53ff220b00a1264abf9b9463f252995f37eb1057047">  232</a></span>&#160;};</div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160; </div>
+<div class="line"><a name="l00260"></a><span class="lineno"><a class="line" href="a00220.html#gabcadd041f3072999d68f2d94e38670f7">  260</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00220.html#gabcadd041f3072999d68f2d94e38670f7">hwloc_distances_transform</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">struct</span> <a class="code" href="a00325.html">hwloc_distances_s</a> *distances,</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;                                             <span class="keyword">enum</span> <a class="code" href="a00220.html#ga42859b651adec5ef0aaacb53ff220b00">hwloc_distances_transform_e</a> transform,</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;                                             <span class="keywordtype">void</span> *transform_attr,</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;                                             <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160; </div>
+<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00278"></a><span class="lineno"><a class="line" href="a00221.html#gab9e770c7d56c5d6040f26bd1dc8854cd">  278</a></span>&#160;<a class="code" href="a00221.html#gab9e770c7d56c5d6040f26bd1dc8854cd">hwloc_distances_obj_index</a>(<span class="keyword">struct</span> <a class="code" href="a00325.html">hwloc_distances_s</a> *distances, <a class="code" href="a00253.html">hwloc_obj_t</a> obj)</div>
+<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;{</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;  <span class="keywordtype">unsigned</span> i;</div>
+<div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;  <span class="keywordflow">for</span>(i=0; i&lt;distances-&gt;<a class="code" href="a00325.html#a4ca2af858cebbce7324ec49903d09474">nbobjs</a>; i++)</div>
+<div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;    <span class="keywordflow">if</span> (distances-&gt;<a class="code" href="a00325.html#af1e78b2d628d191fa6cae3fbfe891078">objs</a>[i] == obj)</div>
+<div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;      <span class="keywordflow">return</span> (<span class="keywordtype">int</span>)i;</div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;  <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;}</div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160; </div>
+<div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00295"></a><span class="lineno"><a class="line" href="a00221.html#ga3c665b23056e3269f777b21a67148c82">  295</a></span>&#160;<a class="code" href="a00221.html#ga3c665b23056e3269f777b21a67148c82">hwloc_distances_obj_pair_values</a>(<span class="keyword">struct</span> <a class="code" href="a00325.html">hwloc_distances_s</a> *distances,</div>
+<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;                                <a class="code" href="a00253.html">hwloc_obj_t</a> obj1, <a class="code" href="a00253.html">hwloc_obj_t</a> obj2,</div>
+<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;                                hwloc_uint64_t *value1to2, hwloc_uint64_t *value2to1)</div>
+<div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;{</div>
+<div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;  <span class="keywordtype">int</span> i1 = <a class="code" href="a00221.html#gab9e770c7d56c5d6040f26bd1dc8854cd">hwloc_distances_obj_index</a>(distances, obj1);</div>
+<div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;  <span class="keywordtype">int</span> i2 = <a class="code" href="a00221.html#gab9e770c7d56c5d6040f26bd1dc8854cd">hwloc_distances_obj_index</a>(distances, obj2);</div>
+<div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;  <span class="keywordflow">if</span> (i1 &lt; 0 || i2 &lt; 0)</div>
+<div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;    <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;  *value1to2 = distances-&gt;<a class="code" href="a00325.html#ae43e19b2c743de05c93d71a30beaca75">values</a>[i1 * distances-&gt;<a class="code" href="a00325.html#a4ca2af858cebbce7324ec49903d09474">nbobjs</a> + i2];</div>
+<div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;  *value2to1 = distances-&gt;<a class="code" href="a00325.html#ae43e19b2c743de05c93d71a30beaca75">values</a>[i2 * distances-&gt;<a class="code" href="a00325.html#a4ca2af858cebbce7324ec49903d09474">nbobjs</a> + i1];</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;  <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;}</div>
+<div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160; </div>
+<div class="line"><a name="l00331"></a><span class="lineno"><a class="line" href="a00222.html#ga554a4c1e315265f961830e2b616e4989">  331</a></span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">void</span> * <a class="code" href="a00222.html#ga554a4c1e315265f961830e2b616e4989">hwloc_distances_add_handle_t</a>;</div>
+<div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160; </div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;HWLOC_DECLSPEC <a class="code" href="a00222.html#ga554a4c1e315265f961830e2b616e4989">hwloc_distances_add_handle_t</a></div>
+<div class="line"><a name="l00354"></a><span class="lineno"><a class="line" href="a00222.html#ga823d38fa8d21dc338497fb0f79c96704">  354</a></span>&#160;<a class="code" href="a00222.html#ga823d38fa8d21dc338497fb0f79c96704">hwloc_distances_add_create</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;                           <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> kind,</div>
+<div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;                           <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
+<div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160; </div>
+<div class="line"><a name="l00380"></a><span class="lineno"><a class="line" href="a00222.html#ga8c9715481b0bce344c8a33c6e6a56469">  380</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00222.html#ga8c9715481b0bce344c8a33c6e6a56469">hwloc_distances_add_values</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;                                              <a class="code" href="a00222.html#ga554a4c1e315265f961830e2b616e4989">hwloc_distances_add_handle_t</a> handle,</div>
+<div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;                                              <span class="keywordtype">unsigned</span> nbobjs, <a class="code" href="a00253.html">hwloc_obj_t</a> *objs,</div>
+<div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;                                              hwloc_uint64_t *values,</div>
+<div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;                                              <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
+<div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160; </div>
+<div class="line"><a name="l00387"></a><span class="lineno"><a class="line" href="a00222.html#ga22428b6bab271411e3834e6b4ca22e37">  387</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00222.html#ga22428b6bab271411e3834e6b4ca22e37">hwloc_distances_add_flag_e</a> {</div>
+<div class="line"><a name="l00392"></a><span class="lineno"><a class="line" href="a00222.html#gga22428b6bab271411e3834e6b4ca22e37a7f6baba797d70538d03c9d13052c62ab">  392</a></span>&#160;  <a class="code" href="a00222.html#gga22428b6bab271411e3834e6b4ca22e37a7f6baba797d70538d03c9d13052c62ab">HWLOC_DISTANCES_ADD_FLAG_GROUP</a> = (1UL&lt;&lt;0),</div>
+<div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;  <a class="code" href="a00222.html#gga22428b6bab271411e3834e6b4ca22e37a5233ccf631c3bc53dd5c3e7a5d5c9b77">HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE</a> = (1UL&lt;&lt;1)</div>
+<div class="line"><a name="l00399"></a><span class="lineno"><a class="line" href="a00222.html#gga22428b6bab271411e3834e6b4ca22e37a5233ccf631c3bc53dd5c3e7a5d5c9b77">  399</a></span>&#160;};</div>
+<div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160; </div>
+<div class="line"><a name="l00417"></a><span class="lineno"><a class="line" href="a00222.html#ga1f5a29760ebb8f9af831e645315f553c">  417</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00222.html#ga1f5a29760ebb8f9af831e645315f553c">hwloc_distances_add_commit</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;                                              <a class="code" href="a00222.html#ga554a4c1e315265f961830e2b616e4989">hwloc_distances_add_handle_t</a> handle,</div>
+<div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;                                              <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
+<div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160; </div>
+<div class="line"><a name="l00437"></a><span class="lineno"><a class="line" href="a00223.html#gac188d9b64d9560255ce5f6d0a20f9c0a">  437</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00223.html#gac188d9b64d9560255ce5f6d0a20f9c0a">hwloc_distances_remove</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology);</div>
+<div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160; </div>
+<div class="line"><a name="l00443"></a><span class="lineno"><a class="line" href="a00223.html#gaa642a4c1a21c84f38ae23fca8a27845d">  443</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00223.html#gaa642a4c1a21c84f38ae23fca8a27845d">hwloc_distances_remove_by_depth</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">int</span> depth);</div>
+<div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160; </div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno"><a class="line" href="a00223.html#ga93db53773c96f5b83815e8441e2ebb93">  450</a></span>&#160;<a class="code" href="a00223.html#ga93db53773c96f5b83815e8441e2ebb93">hwloc_distances_remove_by_type</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;{</div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;  <span class="keywordtype">int</span> depth = <a class="code" href="a00199.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, type);</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;  <span class="keywordflow">if</span> (depth == <a class="code" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a> || depth == <a class="code" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a>)</div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;  <span class="keywordflow">return</span> <a class="code" href="a00223.html#gaa642a4c1a21c84f38ae23fca8a27845d">hwloc_distances_remove_by_depth</a>(topology, depth);</div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;}</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160; </div>
+<div class="line"><a name="l00462"></a><span class="lineno"><a class="line" href="a00223.html#ga80bbf6f0db9af48c61780dd5152664c2">  462</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00223.html#ga80bbf6f0db9af48c61780dd5152664c2">hwloc_distances_release_remove</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">struct</span> <a class="code" href="a00325.html">hwloc_distances_s</a> *distances);</div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160; </div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160; </div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160; </div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_DISTANCES_H */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="aa00196_html_gacd37bb612667dc437d66bfb175a8dc55"><div class="ttname"><a href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a></div><div class="ttdeci">hwloc_obj_type_t</div><div class="ttdoc">Type of topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:176</div></div>
+<div class="ttc" id="aa00198_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:692</div></div>
+<div class="ttc" id="aa00199_html_ga8bec782e21be313750da70cf7428b374"><div class="ttname"><a href="a00199.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a></div><div class="ttdeci">int hwloc_get_type_depth(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Returns the depth of objects of type type.</div></div>
+<div class="ttc" id="aa00199_html_ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad"><div class="ttname"><a href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_UNKNOWN</div><div class="ttdoc">No object of given type exists in the topology.</div><div class="ttdef"><b>Definition:</b> hwloc.h:822</div></div>
+<div class="ttc" id="aa00199_html_ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c"><div class="ttname"><a href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_MULTIPLE</div><div class="ttdoc">Objects of given type exist at different depth in the topology (only for Groups).</div><div class="ttdef"><b>Definition:</b> hwloc.h:823</div></div>
+<div class="ttc" id="aa00220_html_ga1dd78c1f9acd54f26aba0e284e97e51d"><div class="ttname"><a href="a00220.html#ga1dd78c1f9acd54f26aba0e284e97e51d">hwloc_distances_release</a></div><div class="ttdeci">void hwloc_distances_release(hwloc_topology_t topology, struct hwloc_distances_s *distances)</div><div class="ttdoc">Release a distance matrix structure previously returned by hwloc_distances_get().</div></div>
+<div class="ttc" id="aa00220_html_ga42859b651adec5ef0aaacb53ff220b00"><div class="ttname"><a href="a00220.html#ga42859b651adec5ef0aaacb53ff220b00">hwloc_distances_transform_e</a></div><div class="ttdeci">hwloc_distances_transform_e</div><div class="ttdoc">Transformations of distances structures.</div><div class="ttdef"><b>Definition:</b> distances.h:187</div></div>
+<div class="ttc" id="aa00220_html_ga5d1d35eccfcc2ebcef71a10972ce9b03"><div class="ttname"><a href="a00220.html#ga5d1d35eccfcc2ebcef71a10972ce9b03">hwloc_distances_get_by_depth</a></div><div class="ttdeci">int hwloc_distances_get_by_depth(hwloc_topology_t topology, int depth, unsigned *nr, struct hwloc_distances_s **distances, unsigned long kind, unsigned long flags)</div><div class="ttdoc">Retrieve distance matrices for object at a specific depth in the topology.</div></div>
+<div class="ttc" id="aa00220_html_ga613e6b2a5d0f06626ee8d0c12fa46691"><div class="ttname"><a href="a00220.html#ga613e6b2a5d0f06626ee8d0c12fa46691">hwloc_distances_get</a></div><div class="ttdeci">int hwloc_distances_get(hwloc_topology_t topology, unsigned *nr, struct hwloc_distances_s **distances, unsigned long kind, unsigned long flags)</div><div class="ttdoc">Retrieve distance matrices.</div></div>
+<div class="ttc" id="aa00220_html_gaa457f35b8745ca41ec17797c0d7b20f0"><div class="ttname"><a href="a00220.html#gaa457f35b8745ca41ec17797c0d7b20f0">hwloc_distances_get_by_name</a></div><div class="ttdeci">int hwloc_distances_get_by_name(hwloc_topology_t topology, const char *name, unsigned *nr, struct hwloc_distances_s **distances, unsigned long flags)</div><div class="ttdoc">Retrieve a distance matrix with the given name.</div></div>
+<div class="ttc" id="aa00220_html_gaa6f9697028c589cef0458edef5fe273f"><div class="ttname"><a href="a00220.html#gaa6f9697028c589cef0458edef5fe273f">hwloc_distances_get_name</a></div><div class="ttdeci">const char * hwloc_distances_get_name(hwloc_topology_t topology, struct hwloc_distances_s *distances)</div><div class="ttdoc">Get a description of what a distances structure contains.</div></div>
+<div class="ttc" id="aa00220_html_gaaa6bfbc20072a4f4de132eec859067f6"><div class="ttname"><a href="a00220.html#gaaa6bfbc20072a4f4de132eec859067f6">hwloc_distances_get_by_type</a></div><div class="ttdeci">int hwloc_distances_get_by_type(hwloc_topology_t topology, hwloc_obj_type_t type, unsigned *nr, struct hwloc_distances_s **distances, unsigned long kind, unsigned long flags)</div><div class="ttdoc">Retrieve distance matrices for object of a specific type.</div></div>
+<div class="ttc" id="aa00220_html_gab1bb10d3adb85b52cdc6fe5a7f74f108"><div class="ttname"><a href="a00220.html#gab1bb10d3adb85b52cdc6fe5a7f74f108">hwloc_distances_kind_e</a></div><div class="ttdeci">hwloc_distances_kind_e</div><div class="ttdoc">Kinds of distance matrices.</div><div class="ttdef"><b>Definition:</b> distances.h:79</div></div>
+<div class="ttc" id="aa00220_html_gabcadd041f3072999d68f2d94e38670f7"><div class="ttname"><a href="a00220.html#gabcadd041f3072999d68f2d94e38670f7">hwloc_distances_transform</a></div><div class="ttdeci">int hwloc_distances_transform(hwloc_topology_t topology, struct hwloc_distances_s *distances, enum hwloc_distances_transform_e transform, void *transform_attr, unsigned long flags)</div><div class="ttdoc">Apply a transformation to a distances structure.</div></div>
+<div class="ttc" id="aa00220_html_gga42859b651adec5ef0aaacb53ff220b00a1264abf9b9463f252995f37eb1057047"><div class="ttname"><a href="a00220.html#gga42859b651adec5ef0aaacb53ff220b00a1264abf9b9463f252995f37eb1057047">HWLOC_DISTANCES_TRANSFORM_TRANSITIVE_CLOSURE</a></div><div class="ttdeci">@ HWLOC_DISTANCES_TRANSFORM_TRANSITIVE_CLOSURE</div><div class="ttdoc">Apply a transitive closure to the matrix to connect objects across switches. This currently only appl...</div><div class="ttdef"><b>Definition:</b> distances.h:231</div></div>
+<div class="ttc" id="aa00220_html_gga42859b651adec5ef0aaacb53ff220b00a3d2aaf03e17be54eddbb94aab327fded"><div class="ttname"><a href="a00220.html#gga42859b651adec5ef0aaacb53ff220b00a3d2aaf03e17be54eddbb94aab327fded">HWLOC_DISTANCES_TRANSFORM_MERGE_SWITCH_PORTS</a></div><div class="ttdeci">@ HWLOC_DISTANCES_TRANSFORM_MERGE_SWITCH_PORTS</div><div class="ttdoc">Merge switches with multiple ports into a single object. This currently only applies to NVSwitches wh...</div><div class="ttdef"><b>Definition:</b> distances.h:224</div></div>
+<div class="ttc" id="aa00220_html_gga42859b651adec5ef0aaacb53ff220b00a441e6bb393558319af3bb1f89f51f44d"><div class="ttname"><a href="a00220.html#gga42859b651adec5ef0aaacb53ff220b00a441e6bb393558319af3bb1f89f51f44d">HWLOC_DISTANCES_TRANSFORM_LINKS</a></div><div class="ttdeci">@ HWLOC_DISTANCES_TRANSFORM_LINKS</div><div class="ttdoc">Replace bandwidth values with a number of links.</div><div class="ttdef"><b>Definition:</b> distances.h:215</div></div>
+<div class="ttc" id="aa00220_html_gga42859b651adec5ef0aaacb53ff220b00a4b7bdb7e3ccca30e03b7ae671e7f6dc1"><div class="ttname"><a href="a00220.html#gga42859b651adec5ef0aaacb53ff220b00a4b7bdb7e3ccca30e03b7ae671e7f6dc1">HWLOC_DISTANCES_TRANSFORM_REMOVE_NULL</a></div><div class="ttdeci">@ HWLOC_DISTANCES_TRANSFORM_REMOVE_NULL</div><div class="ttdoc">Remove NULL objects from the distances structure.</div><div class="ttdef"><b>Definition:</b> distances.h:201</div></div>
+<div class="ttc" id="aa00220_html_ggab1bb10d3adb85b52cdc6fe5a7f74f108a0148d7f9be833a04f5a55455437c227b"><div class="ttname"><a href="a00220.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a0148d7f9be833a04f5a55455437c227b">HWLOC_DISTANCES_KIND_FROM_USER</a></div><div class="ttdeci">@ HWLOC_DISTANCES_KIND_FROM_USER</div><div class="ttdoc">These distances were provided by the user.</div><div class="ttdef"><b>Definition:</b> distances.h:87</div></div>
+<div class="ttc" id="aa00220_html_ggab1bb10d3adb85b52cdc6fe5a7f74f108a41b19f141a3c0ffe85f9affaca4b0293"><div class="ttname"><a href="a00220.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a41b19f141a3c0ffe85f9affaca4b0293">HWLOC_DISTANCES_KIND_MEANS_BANDWIDTH</a></div><div class="ttdeci">@ HWLOC_DISTANCES_KIND_MEANS_BANDWIDTH</div><div class="ttdoc">Distance values are similar to bandwidths between objects. Values are higher for closer objects,...</div><div class="ttdef"><b>Definition:</b> distances.h:102</div></div>
+<div class="ttc" id="aa00220_html_ggab1bb10d3adb85b52cdc6fe5a7f74f108a90dc38248c8d5392d4dd3e88f391e984"><div class="ttname"><a href="a00220.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a90dc38248c8d5392d4dd3e88f391e984">HWLOC_DISTANCES_KIND_FROM_OS</a></div><div class="ttdeci">@ HWLOC_DISTANCES_KIND_FROM_OS</div><div class="ttdoc">These distances were obtained from the operating system or hardware.</div><div class="ttdef"><b>Definition:</b> distances.h:83</div></div>
+<div class="ttc" id="aa00220_html_ggab1bb10d3adb85b52cdc6fe5a7f74f108aa6cf2b6dfcf148b65952f811814efbe1"><div class="ttname"><a href="a00220.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108aa6cf2b6dfcf148b65952f811814efbe1">HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES</a></div><div class="ttdeci">@ HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES</div><div class="ttdoc">This distances structure covers objects of different types. This may apply to the &quot;NVLinkBandwidth&quot; s...</div><div class="ttdef"><b>Definition:</b> distances.h:109</div></div>
+<div class="ttc" id="aa00220_html_ggab1bb10d3adb85b52cdc6fe5a7f74f108afd6a3503fbc8f7c1a31235373cefc4c6"><div class="ttname"><a href="a00220.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108afd6a3503fbc8f7c1a31235373cefc4c6">HWLOC_DISTANCES_KIND_MEANS_LATENCY</a></div><div class="ttdeci">@ HWLOC_DISTANCES_KIND_MEANS_LATENCY</div><div class="ttdoc">Distance values are similar to latencies between objects. Values are smaller for closer objects,...</div><div class="ttdef"><b>Definition:</b> distances.h:95</div></div>
+<div class="ttc" id="aa00221_html_ga3c665b23056e3269f777b21a67148c82"><div class="ttname"><a href="a00221.html#ga3c665b23056e3269f777b21a67148c82">hwloc_distances_obj_pair_values</a></div><div class="ttdeci">static int hwloc_distances_obj_pair_values(struct hwloc_distances_s *distances, hwloc_obj_t obj1, hwloc_obj_t obj2, hwloc_uint64_t *value1to2, hwloc_uint64_t *value2to1)</div><div class="ttdoc">Find the values between two objects in a distance matrices.</div><div class="ttdef"><b>Definition:</b> distances.h:295</div></div>
+<div class="ttc" id="aa00221_html_gab9e770c7d56c5d6040f26bd1dc8854cd"><div class="ttname"><a href="a00221.html#gab9e770c7d56c5d6040f26bd1dc8854cd">hwloc_distances_obj_index</a></div><div class="ttdeci">static int hwloc_distances_obj_index(struct hwloc_distances_s *distances, hwloc_obj_t obj)</div><div class="ttdoc">Find the index of an object in a distances structure.</div><div class="ttdef"><b>Definition:</b> distances.h:278</div></div>
+<div class="ttc" id="aa00222_html_ga1f5a29760ebb8f9af831e645315f553c"><div class="ttname"><a href="a00222.html#ga1f5a29760ebb8f9af831e645315f553c">hwloc_distances_add_commit</a></div><div class="ttdeci">int hwloc_distances_add_commit(hwloc_topology_t topology, hwloc_distances_add_handle_t handle, unsigned long flags)</div><div class="ttdoc">Commit a new distances structure.</div></div>
+<div class="ttc" id="aa00222_html_ga22428b6bab271411e3834e6b4ca22e37"><div class="ttname"><a href="a00222.html#ga22428b6bab271411e3834e6b4ca22e37">hwloc_distances_add_flag_e</a></div><div class="ttdeci">hwloc_distances_add_flag_e</div><div class="ttdoc">Flags for adding a new distances to a topology.</div><div class="ttdef"><b>Definition:</b> distances.h:387</div></div>
+<div class="ttc" id="aa00222_html_ga554a4c1e315265f961830e2b616e4989"><div class="ttname"><a href="a00222.html#ga554a4c1e315265f961830e2b616e4989">hwloc_distances_add_handle_t</a></div><div class="ttdeci">void * hwloc_distances_add_handle_t</div><div class="ttdoc">Handle to a new distances structure during its addition to the topology.</div><div class="ttdef"><b>Definition:</b> distances.h:331</div></div>
+<div class="ttc" id="aa00222_html_ga823d38fa8d21dc338497fb0f79c96704"><div class="ttname"><a href="a00222.html#ga823d38fa8d21dc338497fb0f79c96704">hwloc_distances_add_create</a></div><div class="ttdeci">hwloc_distances_add_handle_t hwloc_distances_add_create(hwloc_topology_t topology, const char *name, unsigned long kind, unsigned long flags)</div><div class="ttdoc">Create a new empty distances structure.</div></div>
+<div class="ttc" id="aa00222_html_ga8c9715481b0bce344c8a33c6e6a56469"><div class="ttname"><a href="a00222.html#ga8c9715481b0bce344c8a33c6e6a56469">hwloc_distances_add_values</a></div><div class="ttdeci">int hwloc_distances_add_values(hwloc_topology_t topology, hwloc_distances_add_handle_t handle, unsigned nbobjs, hwloc_obj_t *objs, hwloc_uint64_t *values, unsigned long flags)</div><div class="ttdoc">Specify the objects and values in a new empty distances structure.</div></div>
+<div class="ttc" id="aa00222_html_gga22428b6bab271411e3834e6b4ca22e37a5233ccf631c3bc53dd5c3e7a5d5c9b77"><div class="ttname"><a href="a00222.html#gga22428b6bab271411e3834e6b4ca22e37a5233ccf631c3bc53dd5c3e7a5d5c9b77">HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE</a></div><div class="ttdeci">@ HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE</div><div class="ttdoc">If grouping, consider the distance values as inaccurate and relax the comparisons during the grouping...</div><div class="ttdef"><b>Definition:</b> distances.h:398</div></div>
+<div class="ttc" id="aa00222_html_gga22428b6bab271411e3834e6b4ca22e37a7f6baba797d70538d03c9d13052c62ab"><div class="ttname"><a href="a00222.html#gga22428b6bab271411e3834e6b4ca22e37a7f6baba797d70538d03c9d13052c62ab">HWLOC_DISTANCES_ADD_FLAG_GROUP</a></div><div class="ttdeci">@ HWLOC_DISTANCES_ADD_FLAG_GROUP</div><div class="ttdoc">Try to group objects based on the newly provided distance information. This is ignored for distances ...</div><div class="ttdef"><b>Definition:</b> distances.h:392</div></div>
+<div class="ttc" id="aa00223_html_ga80bbf6f0db9af48c61780dd5152664c2"><div class="ttname"><a href="a00223.html#ga80bbf6f0db9af48c61780dd5152664c2">hwloc_distances_release_remove</a></div><div class="ttdeci">int hwloc_distances_release_remove(hwloc_topology_t topology, struct hwloc_distances_s *distances)</div><div class="ttdoc">Release and remove the given distance matrice from the topology.</div></div>
+<div class="ttc" id="aa00223_html_ga93db53773c96f5b83815e8441e2ebb93"><div class="ttname"><a href="a00223.html#ga93db53773c96f5b83815e8441e2ebb93">hwloc_distances_remove_by_type</a></div><div class="ttdeci">static int hwloc_distances_remove_by_type(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Remove distance matrices for objects of a specific type in the topology.</div><div class="ttdef"><b>Definition:</b> distances.h:450</div></div>
+<div class="ttc" id="aa00223_html_gaa642a4c1a21c84f38ae23fca8a27845d"><div class="ttname"><a href="a00223.html#gaa642a4c1a21c84f38ae23fca8a27845d">hwloc_distances_remove_by_depth</a></div><div class="ttdeci">int hwloc_distances_remove_by_depth(hwloc_topology_t topology, int depth)</div><div class="ttdoc">Remove distance matrices for objects at a specific depth in the topology.</div></div>
+<div class="ttc" id="aa00223_html_gac188d9b64d9560255ce5f6d0a20f9c0a"><div class="ttname"><a href="a00223.html#gac188d9b64d9560255ce5f6d0a20f9c0a">hwloc_distances_remove</a></div><div class="ttdeci">int hwloc_distances_remove(hwloc_topology_t topology)</div><div class="ttdoc">Remove all distance matrices from a topology.</div></div>
+<div class="ttc" id="aa00253_html"><div class="ttname"><a href="a00253.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:396</div></div>
+<div class="ttc" id="aa00325_html"><div class="ttname"><a href="a00325.html">hwloc_distances_s</a></div><div class="ttdoc">Matrix of distances between a set of objects.</div><div class="ttdef"><b>Definition:</b> distances.h:53</div></div>
+<div class="ttc" id="aa00325_html_a4ca2af858cebbce7324ec49903d09474"><div class="ttname"><a href="a00325.html#a4ca2af858cebbce7324ec49903d09474">hwloc_distances_s::nbobjs</a></div><div class="ttdeci">unsigned nbobjs</div><div class="ttdoc">Number of objects described by the distance matrix.</div><div class="ttdef"><b>Definition:</b> distances.h:54</div></div>
+<div class="ttc" id="aa00325_html_ae43e19b2c743de05c93d71a30beaca75"><div class="ttname"><a href="a00325.html#ae43e19b2c743de05c93d71a30beaca75">hwloc_distances_s::values</a></div><div class="ttdeci">hwloc_uint64_t * values</div><div class="ttdoc">Matrix of distances between objects, stored as a one-dimension array.</div><div class="ttdef"><b>Definition:</b> distances.h:61</div></div>
+<div class="ttc" id="aa00325_html_aef9c83cf467da1b1fa4c36493febb3b5"><div class="ttname"><a href="a00325.html#aef9c83cf467da1b1fa4c36493febb3b5">hwloc_distances_s::kind</a></div><div class="ttdeci">unsigned long kind</div><div class="ttdoc">OR'ed set of hwloc_distances_kind_e.</div><div class="ttdef"><b>Definition:</b> distances.h:60</div></div>
+<div class="ttc" id="aa00325_html_af1e78b2d628d191fa6cae3fbfe891078"><div class="ttname"><a href="a00325.html#af1e78b2d628d191fa6cae3fbfe891078">hwloc_distances_s::objs</a></div><div class="ttdeci">hwloc_obj_t * objs</div><div class="ttdoc">Array of objects described by the distance matrix. These objects are not in any particular order,...</div><div class="ttdef"><b>Definition:</b> distances.h:55</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00140_source.html b/doc/doxygen-doc/html/a00140_source.html
new file mode 100644
index 00000000..d8122ad4
--- /dev/null
+++ b/doc/doxygen-doc/html/a00140_source.html
@@ -0,0 +1,245 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): memattrs.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_5cb306d949c7931a3b6c77517393dd34.html">hwloc</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">memattrs.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright © 2019-2022 Inria.  All rights reserved.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160; </div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor">#ifndef HWLOC_MEMATTR_H</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor">#define HWLOC_MEMATTR_H</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160; </div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160; </div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#elif 0</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;}</div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160; </div>
+<div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="a00224.html#gab4bde745db676fc2ea4b47011cd9a80e">   69</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00224.html#gab4bde745db676fc2ea4b47011cd9a80e">hwloc_memattr_id_e</a> {</div>
+<div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80eaa1cfa3ff3d56ff00ecabf7da4f5642cc">   79</a></span>&#160;  <a class="code" href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80eaa1cfa3ff3d56ff00ecabf7da4f5642cc">HWLOC_MEMATTR_ID_CAPACITY</a> = 0,</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160; </div>
+<div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80ea9334e3a4c30a67f491c6523255134efe">   94</a></span>&#160;  <a class="code" href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80ea9334e3a4c30a67f491c6523255134efe">HWLOC_MEMATTR_ID_LOCALITY</a> = 1,</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160; </div>
+<div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80ea25fe3c7376ae6f9b584bacdb039f8c0f">  109</a></span>&#160;  <a class="code" href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80ea25fe3c7376ae6f9b584bacdb039f8c0f">HWLOC_MEMATTR_ID_BANDWIDTH</a> = 2,</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160; </div>
+<div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80eac34dce925d3dadb7e255391d142b4828">  120</a></span>&#160;  <a class="code" href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80eac34dce925d3dadb7e255391d142b4828">HWLOC_MEMATTR_ID_READ_BANDWIDTH</a> = 4,</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160; </div>
+<div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80ea44762e8ebe327cfe665cccf1f58f7530">  131</a></span>&#160;  <a class="code" href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80ea44762e8ebe327cfe665cccf1f58f7530">HWLOC_MEMATTR_ID_WRITE_BANDWIDTH</a> = 5,</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160; </div>
+<div class="line"><a name="l00146"></a><span class="lineno"><a class="line" href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80ead1796413759b8b87b61ad195a9349b19">  146</a></span>&#160;  <a class="code" href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80ead1796413759b8b87b61ad195a9349b19">HWLOC_MEMATTR_ID_LATENCY</a> = 3,</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160; </div>
+<div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80ea52cab56571c7fafea42a694d80ad3dd0">  157</a></span>&#160;  <a class="code" href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80ea52cab56571c7fafea42a694d80ad3dd0">HWLOC_MEMATTR_ID_READ_LATENCY</a> = 6,</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160; </div>
+<div class="line"><a name="l00168"></a><span class="lineno"><a class="line" href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80eaaf6cd383da87dc9f5e3a608a535a768e">  168</a></span>&#160;  <a class="code" href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80eaaf6cd383da87dc9f5e3a608a535a768e">HWLOC_MEMATTR_ID_WRITE_LATENCY</a> = 7,</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160; </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;  <span class="comment">/* TODO persistence? */</span></div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160; </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;  HWLOC_MEMATTR_ID_MAX </div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;};</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160; </div>
+<div class="line"><a name="l00178"></a><span class="lineno"><a class="line" href="a00224.html#gacc82003a8610be554615995f0996c888">  178</a></span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <a class="code" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a>;</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160; </div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00183"></a><span class="lineno"><a class="line" href="a00224.html#ga79f44f8e1cfd2f97a19171417a75a137">  183</a></span>&#160;<a class="code" href="a00224.html#ga79f44f8e1cfd2f97a19171417a75a137">hwloc_memattr_get_by_name</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;                          <span class="keyword">const</span> <span class="keywordtype">char</span> *name,</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;                          <a class="code" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> *<span class="keywordtype">id</span>);</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160; </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160; </div>
+<div class="line"><a name="l00189"></a><span class="lineno"><a class="line" href="a00224.html#ga33099ba58f607fc70925da3777688586">  189</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00224.html#ga33099ba58f607fc70925da3777688586">hwloc_location_type_e</a> {</div>
+<div class="line"><a name="l00191"></a><span class="lineno"><a class="line" href="a00224.html#gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174">  191</a></span>&#160;  <a class="code" href="a00224.html#gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174">HWLOC_LOCATION_TYPE_CPUSET</a> = 1,</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;  <a class="code" href="a00224.html#gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84">HWLOC_LOCATION_TYPE_OBJECT</a> = 0</div>
+<div class="line"><a name="l00194"></a><span class="lineno"><a class="line" href="a00224.html#gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84">  194</a></span>&#160;};</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160; </div>
+<div class="line"><a name="l00197"></a><span class="lineno"><a class="line" href="a00329.html">  197</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00329.html">hwloc_location</a> {</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;  <span class="keyword">enum</span> <a class="code" href="a00224.html#ga33099ba58f607fc70925da3777688586">hwloc_location_type_e</a> <a class="code" href="a00329.html#aeb9c0ab74a7d3506a76d0b82600a28a7">type</a>;</div>
+<div class="line"><a name="l00201"></a><span class="lineno"><a class="line" href="a00333.html">  201</a></span>&#160;  <span class="keyword">union </span><a class="code" href="a00333.html">hwloc_location_u</a> {</div>
+<div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="a00333.html#a033bad8f6b891992f0c18b85a88c5561">  203</a></span>&#160;    <a class="code" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> <a class="code" href="a00333.html#a033bad8f6b891992f0c18b85a88c5561">cpuset</a>;</div>
+<div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="a00333.html#acf2ebf75869f0a53a884ac2ab3374122">  205</a></span>&#160;    <a class="code" href="a00253.html">hwloc_obj_t</a> <a class="code" href="a00333.html#acf2ebf75869f0a53a884ac2ab3374122">object</a>;</div>
+<div class="line"><a name="l00206"></a><span class="lineno"><a class="line" href="a00329.html#a707a25a5b65177e4d081be49aa0777a2">  206</a></span>&#160;  } <a class="code" href="a00329.html#a707a25a5b65177e4d081be49aa0777a2">location</a>;</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;};</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160; </div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160; </div>
+<div class="line"><a name="l00211"></a><span class="lineno"><a class="line" href="a00224.html#gab9c963ca37255da71b00d94e1b106f9d">  211</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00224.html#gab9c963ca37255da71b00d94e1b106f9d">hwloc_local_numanode_flag_e</a> {</div>
+<div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="a00224.html#ggab9c963ca37255da71b00d94e1b106f9da200c6c133bb2125ba36d77ce9ca268cc">  217</a></span>&#160;  <a class="code" href="a00224.html#ggab9c963ca37255da71b00d94e1b106f9da200c6c133bb2125ba36d77ce9ca268cc">HWLOC_LOCAL_NUMANODE_FLAG_LARGER_LOCALITY</a> = (1UL&lt;&lt;0),</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160; </div>
+<div class="line"><a name="l00224"></a><span class="lineno"><a class="line" href="a00224.html#ggab9c963ca37255da71b00d94e1b106f9daac9c5e3a2cfb1b193e4acfceaf3bad57">  224</a></span>&#160;  <a class="code" href="a00224.html#ggab9c963ca37255da71b00d94e1b106f9daac9c5e3a2cfb1b193e4acfceaf3bad57">HWLOC_LOCAL_NUMANODE_FLAG_SMALLER_LOCALITY</a> = (1UL&lt;&lt;1),</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160; </div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;  <a class="code" href="a00224.html#ggab9c963ca37255da71b00d94e1b106f9dab5778b34c961a5d56f98f1549edeaed0">HWLOC_LOCAL_NUMANODE_FLAG_ALL</a> = (1UL&lt;&lt;2)</div>
+<div class="line"><a name="l00231"></a><span class="lineno"><a class="line" href="a00224.html#ggab9c963ca37255da71b00d94e1b106f9dab5778b34c961a5d56f98f1549edeaed0">  231</a></span>&#160;};</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160; </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00263"></a><span class="lineno"><a class="line" href="a00224.html#ga569e80c5be7ef27649b0ef5aa52ffcdc">  263</a></span>&#160;<a class="code" href="a00224.html#ga569e80c5be7ef27649b0ef5aa52ffcdc">hwloc_get_local_numanode_objs</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;                              <span class="keyword">struct</span> <a class="code" href="a00329.html">hwloc_location</a> *location,</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;                              <span class="keywordtype">unsigned</span> *nr,</div>
+<div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;                              <a class="code" href="a00253.html">hwloc_obj_t</a> *nodes,</div>
+<div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;                              <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
+<div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160; </div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160; </div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160; </div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno"><a class="line" href="a00224.html#ga297e4a9adc2272446a4c7449dacef0df">  286</a></span>&#160;<a class="code" href="a00224.html#ga297e4a9adc2272446a4c7449dacef0df">hwloc_memattr_get_value</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;                        <a class="code" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute,</div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;                        <a class="code" href="a00253.html">hwloc_obj_t</a> target_node,</div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;                        <span class="keyword">struct</span> <a class="code" href="a00329.html">hwloc_location</a> *initiator,</div>
+<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;                        <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags,</div>
+<div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;                        hwloc_uint64_t *value);</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160; </div>
+<div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00319"></a><span class="lineno"><a class="line" href="a00224.html#ga884d1f2ad745c2fa69c1583c82d28f10">  319</a></span>&#160;<a class="code" href="a00224.html#ga884d1f2ad745c2fa69c1583c82d28f10">hwloc_memattr_get_best_target</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;                              <a class="code" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute,</div>
+<div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;                              <span class="keyword">struct</span> <a class="code" href="a00329.html">hwloc_location</a> *initiator,</div>
+<div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;                              <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags,</div>
+<div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;                              <a class="code" href="a00253.html">hwloc_obj_t</a> *best_target, hwloc_uint64_t *value);</div>
+<div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160; </div>
+<div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno"><a class="line" href="a00224.html#ga9a453879892893cf8a3fcd431ade84cd">  348</a></span>&#160;<a class="code" href="a00224.html#ga9a453879892893cf8a3fcd431ade84cd">hwloc_memattr_get_best_initiator</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;                                 <a class="code" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute,</div>
+<div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;                                 <a class="code" href="a00253.html">hwloc_obj_t</a> target,</div>
+<div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;                                 <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags,</div>
+<div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;                                 <span class="keyword">struct</span> <a class="code" href="a00329.html">hwloc_location</a> *best_initiator, hwloc_uint64_t *value);</div>
+<div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160; </div>
+<div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00364"></a><span class="lineno"><a class="line" href="a00225.html#ga5300e9be1abdea2e00c18492148aecd0">  364</a></span>&#160;<a class="code" href="a00225.html#ga5300e9be1abdea2e00c18492148aecd0">hwloc_memattr_get_name</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;                       <a class="code" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute,</div>
+<div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;                       <span class="keyword">const</span> <span class="keywordtype">char</span> **name);</div>
+<div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160; </div>
+<div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00373"></a><span class="lineno"><a class="line" href="a00225.html#ga4c62b626085adeaffb233e5f2a03a5eb">  373</a></span>&#160;<a class="code" href="a00225.html#ga4c62b626085adeaffb233e5f2a03a5eb">hwloc_memattr_get_flags</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;                        <a class="code" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute,</div>
+<div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;                        <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *flags);</div>
+<div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160; </div>
+<div class="line"><a name="l00380"></a><span class="lineno"><a class="line" href="a00225.html#ga78aceb4cac4d614c0f5e82dbfeb779e5">  380</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00225.html#ga78aceb4cac4d614c0f5e82dbfeb779e5">hwloc_memattr_flag_e</a> {</div>
+<div class="line"><a name="l00384"></a><span class="lineno"><a class="line" href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815">  384</a></span>&#160;  <a class="code" href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815">HWLOC_MEMATTR_FLAG_HIGHER_FIRST</a> = (1UL&lt;&lt;0),</div>
+<div class="line"><a name="l00388"></a><span class="lineno"><a class="line" href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9601b5b0e1e68635e7e9901f28bd93bf">  388</a></span>&#160;  <a class="code" href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9601b5b0e1e68635e7e9901f28bd93bf">HWLOC_MEMATTR_FLAG_LOWER_FIRST</a> = (1UL&lt;&lt;1),</div>
+<div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;  <a class="code" href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a> = (1UL&lt;&lt;2)</div>
+<div class="line"><a name="l00393"></a><span class="lineno"><a class="line" href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96">  393</a></span>&#160;};</div>
+<div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160; </div>
+<div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00402"></a><span class="lineno"><a class="line" href="a00225.html#ga770657d1e44b09e93e09f623936c1e5f">  402</a></span>&#160;<a class="code" href="a00225.html#ga770657d1e44b09e93e09f623936c1e5f">hwloc_memattr_register</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;                       <span class="keyword">const</span> <span class="keywordtype">char</span> *name,</div>
+<div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;                       <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags,</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;                       <a class="code" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> *<span class="keywordtype">id</span>);</div>
+<div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160; </div>
+<div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00426"></a><span class="lineno"><a class="line" href="a00225.html#ga960529c08b25cf15825e0f72ecceb504">  426</a></span>&#160;<a class="code" href="a00225.html#ga960529c08b25cf15825e0f72ecceb504">hwloc_memattr_set_value</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;                        <a class="code" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute,</div>
+<div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;                        <a class="code" href="a00253.html">hwloc_obj_t</a> target_node,</div>
+<div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;                        <span class="keyword">struct</span> <a class="code" href="a00329.html">hwloc_location</a> *initiator,</div>
+<div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;                        <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags,</div>
+<div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;                        hwloc_uint64_t value);</div>
+<div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160; </div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00470"></a><span class="lineno"><a class="line" href="a00225.html#gac8c06c1c89ab352c5db8e04a75033513">  470</a></span>&#160;<a class="code" href="a00225.html#gac8c06c1c89ab352c5db8e04a75033513">hwloc_memattr_get_targets</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;                          <a class="code" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute,</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;                          <span class="keyword">struct</span> <a class="code" href="a00329.html">hwloc_location</a> *initiator,</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;                          <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags,</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;                          <span class="keywordtype">unsigned</span> *nr, <a class="code" href="a00253.html">hwloc_obj_t</a> *targets, hwloc_uint64_t *values);</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160; </div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno"><a class="line" href="a00329.html#aeb9c0ab74a7d3506a76d0b82600a28a7">  506</a></span>&#160;<a class="code" href="a00225.html#ga049aaa860dcbbf0792f0fd4251a99ec0">hwloc_memattr_get_initiators</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;                             <a class="code" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute,</div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;                             <a class="code" href="a00253.html">hwloc_obj_t</a> target_node,</div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;                             <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags,</div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;                             <span class="keywordtype">unsigned</span> *nr, <span class="keyword">struct</span> <a class="code" href="a00329.html">hwloc_location</a> *initiators, hwloc_uint64_t *values);</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
+<div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160; </div>
+<div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160; </div>
+<div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_MEMATTR_H */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="aa00195_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
+<div class="ttc" id="aa00198_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:692</div></div>
+<div class="ttc" id="aa00224_html_ga297e4a9adc2272446a4c7449dacef0df"><div class="ttname"><a href="a00224.html#ga297e4a9adc2272446a4c7449dacef0df">hwloc_memattr_get_value</a></div><div class="ttdeci">int hwloc_memattr_get_value(hwloc_topology_t topology, hwloc_memattr_id_t attribute, hwloc_obj_t target_node, struct hwloc_location *initiator, unsigned long flags, hwloc_uint64_t *value)</div><div class="ttdoc">Return an attribute value for a specific target NUMA node.</div></div>
+<div class="ttc" id="aa00224_html_ga33099ba58f607fc70925da3777688586"><div class="ttname"><a href="a00224.html#ga33099ba58f607fc70925da3777688586">hwloc_location_type_e</a></div><div class="ttdeci">hwloc_location_type_e</div><div class="ttdoc">Type of location.</div><div class="ttdef"><b>Definition:</b> memattrs.h:189</div></div>
+<div class="ttc" id="aa00224_html_ga569e80c5be7ef27649b0ef5aa52ffcdc"><div class="ttname"><a href="a00224.html#ga569e80c5be7ef27649b0ef5aa52ffcdc">hwloc_get_local_numanode_objs</a></div><div class="ttdeci">int hwloc_get_local_numanode_objs(hwloc_topology_t topology, struct hwloc_location *location, unsigned *nr, hwloc_obj_t *nodes, unsigned long flags)</div><div class="ttdoc">Return an array of local NUMA nodes.</div></div>
+<div class="ttc" id="aa00224_html_ga79f44f8e1cfd2f97a19171417a75a137"><div class="ttname"><a href="a00224.html#ga79f44f8e1cfd2f97a19171417a75a137">hwloc_memattr_get_by_name</a></div><div class="ttdeci">int hwloc_memattr_get_by_name(hwloc_topology_t topology, const char *name, hwloc_memattr_id_t *id)</div><div class="ttdoc">Return the identifier of the memory attribute with the given name.</div></div>
+<div class="ttc" id="aa00224_html_ga884d1f2ad745c2fa69c1583c82d28f10"><div class="ttname"><a href="a00224.html#ga884d1f2ad745c2fa69c1583c82d28f10">hwloc_memattr_get_best_target</a></div><div class="ttdeci">int hwloc_memattr_get_best_target(hwloc_topology_t topology, hwloc_memattr_id_t attribute, struct hwloc_location *initiator, unsigned long flags, hwloc_obj_t *best_target, hwloc_uint64_t *value)</div><div class="ttdoc">Return the best target NUMA node for the given attribute and initiator.</div></div>
+<div class="ttc" id="aa00224_html_ga9a453879892893cf8a3fcd431ade84cd"><div class="ttname"><a href="a00224.html#ga9a453879892893cf8a3fcd431ade84cd">hwloc_memattr_get_best_initiator</a></div><div class="ttdeci">int hwloc_memattr_get_best_initiator(hwloc_topology_t topology, hwloc_memattr_id_t attribute, hwloc_obj_t target, unsigned long flags, struct hwloc_location *best_initiator, hwloc_uint64_t *value)</div><div class="ttdoc">Return the best initiator for the given attribute and target NUMA node.</div></div>
+<div class="ttc" id="aa00224_html_gab4bde745db676fc2ea4b47011cd9a80e"><div class="ttname"><a href="a00224.html#gab4bde745db676fc2ea4b47011cd9a80e">hwloc_memattr_id_e</a></div><div class="ttdeci">hwloc_memattr_id_e</div><div class="ttdoc">Memory node attributes.</div><div class="ttdef"><b>Definition:</b> memattrs.h:69</div></div>
+<div class="ttc" id="aa00224_html_gab9c963ca37255da71b00d94e1b106f9d"><div class="ttname"><a href="a00224.html#gab9c963ca37255da71b00d94e1b106f9d">hwloc_local_numanode_flag_e</a></div><div class="ttdeci">hwloc_local_numanode_flag_e</div><div class="ttdoc">Flags for selecting target NUMA nodes.</div><div class="ttdef"><b>Definition:</b> memattrs.h:211</div></div>
+<div class="ttc" id="aa00224_html_gacc82003a8610be554615995f0996c888"><div class="ttname"><a href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a></div><div class="ttdeci">unsigned hwloc_memattr_id_t</div><div class="ttdoc">A memory attribute identifier. May be either one of hwloc_memattr_id_e or a new id returned by hwloc_...</div><div class="ttdef"><b>Definition:</b> memattrs.h:178</div></div>
+<div class="ttc" id="aa00224_html_gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174"><div class="ttname"><a href="a00224.html#gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174">HWLOC_LOCATION_TYPE_CPUSET</a></div><div class="ttdeci">@ HWLOC_LOCATION_TYPE_CPUSET</div><div class="ttdoc">Location is given as a cpuset, in the location cpuset union field.</div><div class="ttdef"><b>Definition:</b> memattrs.h:191</div></div>
+<div class="ttc" id="aa00224_html_gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84"><div class="ttname"><a href="a00224.html#gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84">HWLOC_LOCATION_TYPE_OBJECT</a></div><div class="ttdeci">@ HWLOC_LOCATION_TYPE_OBJECT</div><div class="ttdoc">Location is given as an object, in the location object union field.</div><div class="ttdef"><b>Definition:</b> memattrs.h:193</div></div>
+<div class="ttc" id="aa00224_html_ggab4bde745db676fc2ea4b47011cd9a80ea25fe3c7376ae6f9b584bacdb039f8c0f"><div class="ttname"><a href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80ea25fe3c7376ae6f9b584bacdb039f8c0f">HWLOC_MEMATTR_ID_BANDWIDTH</a></div><div class="ttdeci">@ HWLOC_MEMATTR_ID_BANDWIDTH</div><div class="ttdoc">The &quot;Bandwidth&quot; is returned in MiB/s, as seen from the given initiator location.</div><div class="ttdef"><b>Definition:</b> memattrs.h:109</div></div>
+<div class="ttc" id="aa00224_html_ggab4bde745db676fc2ea4b47011cd9a80ea44762e8ebe327cfe665cccf1f58f7530"><div class="ttname"><a href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80ea44762e8ebe327cfe665cccf1f58f7530">HWLOC_MEMATTR_ID_WRITE_BANDWIDTH</a></div><div class="ttdeci">@ HWLOC_MEMATTR_ID_WRITE_BANDWIDTH</div><div class="ttdoc">The &quot;WriteBandwidth&quot; is returned in MiB/s, as seen from the given initiator location.</div><div class="ttdef"><b>Definition:</b> memattrs.h:131</div></div>
+<div class="ttc" id="aa00224_html_ggab4bde745db676fc2ea4b47011cd9a80ea52cab56571c7fafea42a694d80ad3dd0"><div class="ttname"><a href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80ea52cab56571c7fafea42a694d80ad3dd0">HWLOC_MEMATTR_ID_READ_LATENCY</a></div><div class="ttdeci">@ HWLOC_MEMATTR_ID_READ_LATENCY</div><div class="ttdoc">The &quot;ReadLatency&quot; is returned as nanoseconds, as seen from the given initiator location.</div><div class="ttdef"><b>Definition:</b> memattrs.h:157</div></div>
+<div class="ttc" id="aa00224_html_ggab4bde745db676fc2ea4b47011cd9a80ea9334e3a4c30a67f491c6523255134efe"><div class="ttname"><a href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80ea9334e3a4c30a67f491c6523255134efe">HWLOC_MEMATTR_ID_LOCALITY</a></div><div class="ttdeci">@ HWLOC_MEMATTR_ID_LOCALITY</div><div class="ttdoc">The &quot;Locality&quot; is returned as the number of PUs in that locality (e.g. the weight of its cpuset).</div><div class="ttdef"><b>Definition:</b> memattrs.h:94</div></div>
+<div class="ttc" id="aa00224_html_ggab4bde745db676fc2ea4b47011cd9a80eaa1cfa3ff3d56ff00ecabf7da4f5642cc"><div class="ttname"><a href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80eaa1cfa3ff3d56ff00ecabf7da4f5642cc">HWLOC_MEMATTR_ID_CAPACITY</a></div><div class="ttdeci">@ HWLOC_MEMATTR_ID_CAPACITY</div><div class="ttdoc">The &quot;Capacity&quot; is returned in bytes (local_memory attribute in objects).</div><div class="ttdef"><b>Definition:</b> memattrs.h:79</div></div>
+<div class="ttc" id="aa00224_html_ggab4bde745db676fc2ea4b47011cd9a80eaaf6cd383da87dc9f5e3a608a535a768e"><div class="ttname"><a href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80eaaf6cd383da87dc9f5e3a608a535a768e">HWLOC_MEMATTR_ID_WRITE_LATENCY</a></div><div class="ttdeci">@ HWLOC_MEMATTR_ID_WRITE_LATENCY</div><div class="ttdoc">The &quot;WriteLatency&quot; is returned as nanoseconds, as seen from the given initiator location.</div><div class="ttdef"><b>Definition:</b> memattrs.h:168</div></div>
+<div class="ttc" id="aa00224_html_ggab4bde745db676fc2ea4b47011cd9a80eac34dce925d3dadb7e255391d142b4828"><div class="ttname"><a href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80eac34dce925d3dadb7e255391d142b4828">HWLOC_MEMATTR_ID_READ_BANDWIDTH</a></div><div class="ttdeci">@ HWLOC_MEMATTR_ID_READ_BANDWIDTH</div><div class="ttdoc">The &quot;ReadBandwidth&quot; is returned in MiB/s, as seen from the given initiator location.</div><div class="ttdef"><b>Definition:</b> memattrs.h:120</div></div>
+<div class="ttc" id="aa00224_html_ggab4bde745db676fc2ea4b47011cd9a80ead1796413759b8b87b61ad195a9349b19"><div class="ttname"><a href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80ead1796413759b8b87b61ad195a9349b19">HWLOC_MEMATTR_ID_LATENCY</a></div><div class="ttdeci">@ HWLOC_MEMATTR_ID_LATENCY</div><div class="ttdoc">The &quot;Latency&quot; is returned as nanoseconds, as seen from the given initiator location.</div><div class="ttdef"><b>Definition:</b> memattrs.h:146</div></div>
+<div class="ttc" id="aa00224_html_ggab9c963ca37255da71b00d94e1b106f9da200c6c133bb2125ba36d77ce9ca268cc"><div class="ttname"><a href="a00224.html#ggab9c963ca37255da71b00d94e1b106f9da200c6c133bb2125ba36d77ce9ca268cc">HWLOC_LOCAL_NUMANODE_FLAG_LARGER_LOCALITY</a></div><div class="ttdeci">@ HWLOC_LOCAL_NUMANODE_FLAG_LARGER_LOCALITY</div><div class="ttdoc">Select NUMA nodes whose locality is larger than the given cpuset. For instance, if a single PU (or it...</div><div class="ttdef"><b>Definition:</b> memattrs.h:217</div></div>
+<div class="ttc" id="aa00224_html_ggab9c963ca37255da71b00d94e1b106f9daac9c5e3a2cfb1b193e4acfceaf3bad57"><div class="ttname"><a href="a00224.html#ggab9c963ca37255da71b00d94e1b106f9daac9c5e3a2cfb1b193e4acfceaf3bad57">HWLOC_LOCAL_NUMANODE_FLAG_SMALLER_LOCALITY</a></div><div class="ttdeci">@ HWLOC_LOCAL_NUMANODE_FLAG_SMALLER_LOCALITY</div><div class="ttdoc">Select NUMA nodes whose locality is smaller than the given cpuset. For instance, if a package (or its...</div><div class="ttdef"><b>Definition:</b> memattrs.h:224</div></div>
+<div class="ttc" id="aa00224_html_ggab9c963ca37255da71b00d94e1b106f9dab5778b34c961a5d56f98f1549edeaed0"><div class="ttname"><a href="a00224.html#ggab9c963ca37255da71b00d94e1b106f9dab5778b34c961a5d56f98f1549edeaed0">HWLOC_LOCAL_NUMANODE_FLAG_ALL</a></div><div class="ttdeci">@ HWLOC_LOCAL_NUMANODE_FLAG_ALL</div><div class="ttdoc">Select all NUMA nodes in the topology. The initiator initiator is ignored.</div><div class="ttdef"><b>Definition:</b> memattrs.h:230</div></div>
+<div class="ttc" id="aa00225_html_ga049aaa860dcbbf0792f0fd4251a99ec0"><div class="ttname"><a href="a00225.html#ga049aaa860dcbbf0792f0fd4251a99ec0">hwloc_memattr_get_initiators</a></div><div class="ttdeci">int hwloc_memattr_get_initiators(hwloc_topology_t topology, hwloc_memattr_id_t attribute, hwloc_obj_t target_node, unsigned long flags, unsigned *nr, struct hwloc_location *initiators, hwloc_uint64_t *values)</div><div class="ttdoc">Return the initiators that have values for a given attribute for a specific target NUMA node.</div></div>
+<div class="ttc" id="aa00225_html_ga4c62b626085adeaffb233e5f2a03a5eb"><div class="ttname"><a href="a00225.html#ga4c62b626085adeaffb233e5f2a03a5eb">hwloc_memattr_get_flags</a></div><div class="ttdeci">int hwloc_memattr_get_flags(hwloc_topology_t topology, hwloc_memattr_id_t attribute, unsigned long *flags)</div><div class="ttdoc">Return the flags of the given attribute.</div></div>
+<div class="ttc" id="aa00225_html_ga5300e9be1abdea2e00c18492148aecd0"><div class="ttname"><a href="a00225.html#ga5300e9be1abdea2e00c18492148aecd0">hwloc_memattr_get_name</a></div><div class="ttdeci">int hwloc_memattr_get_name(hwloc_topology_t topology, hwloc_memattr_id_t attribute, const char **name)</div><div class="ttdoc">Return the name of a memory attribute.</div></div>
+<div class="ttc" id="aa00225_html_ga770657d1e44b09e93e09f623936c1e5f"><div class="ttname"><a href="a00225.html#ga770657d1e44b09e93e09f623936c1e5f">hwloc_memattr_register</a></div><div class="ttdeci">int hwloc_memattr_register(hwloc_topology_t topology, const char *name, unsigned long flags, hwloc_memattr_id_t *id)</div><div class="ttdoc">Register a new memory attribute.</div></div>
+<div class="ttc" id="aa00225_html_ga78aceb4cac4d614c0f5e82dbfeb779e5"><div class="ttname"><a href="a00225.html#ga78aceb4cac4d614c0f5e82dbfeb779e5">hwloc_memattr_flag_e</a></div><div class="ttdeci">hwloc_memattr_flag_e</div><div class="ttdoc">Memory attribute flags. Given to hwloc_memattr_register() and returned by hwloc_memattr_get_flags().</div><div class="ttdef"><b>Definition:</b> memattrs.h:380</div></div>
+<div class="ttc" id="aa00225_html_ga960529c08b25cf15825e0f72ecceb504"><div class="ttname"><a href="a00225.html#ga960529c08b25cf15825e0f72ecceb504">hwloc_memattr_set_value</a></div><div class="ttdeci">int hwloc_memattr_set_value(hwloc_topology_t topology, hwloc_memattr_id_t attribute, hwloc_obj_t target_node, struct hwloc_location *initiator, unsigned long flags, hwloc_uint64_t value)</div><div class="ttdoc">Set an attribute value for a specific target NUMA node.</div></div>
+<div class="ttc" id="aa00225_html_gac8c06c1c89ab352c5db8e04a75033513"><div class="ttname"><a href="a00225.html#gac8c06c1c89ab352c5db8e04a75033513">hwloc_memattr_get_targets</a></div><div class="ttdeci">int hwloc_memattr_get_targets(hwloc_topology_t topology, hwloc_memattr_id_t attribute, struct hwloc_location *initiator, unsigned long flags, unsigned *nr, hwloc_obj_t *targets, hwloc_uint64_t *values)</div><div class="ttdoc">Return the target NUMA nodes that have some values for a given attribute.</div></div>
+<div class="ttc" id="aa00225_html_gga78aceb4cac4d614c0f5e82dbfeb779e5a9601b5b0e1e68635e7e9901f28bd93bf"><div class="ttname"><a href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9601b5b0e1e68635e7e9901f28bd93bf">HWLOC_MEMATTR_FLAG_LOWER_FIRST</a></div><div class="ttdeci">@ HWLOC_MEMATTR_FLAG_LOWER_FIRST</div><div class="ttdoc">The best nodes for this memory attribute are those with the lower values. For instance Latency.</div><div class="ttdef"><b>Definition:</b> memattrs.h:388</div></div>
+<div class="ttc" id="aa00225_html_gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96"><div class="ttname"><a href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a></div><div class="ttdeci">@ HWLOC_MEMATTR_FLAG_NEED_INITIATOR</div><div class="ttdoc">The value returned for this memory attribute depends on the given initiator. For instance Bandwidth a...</div><div class="ttdef"><b>Definition:</b> memattrs.h:392</div></div>
+<div class="ttc" id="aa00225_html_gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815"><div class="ttname"><a href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815">HWLOC_MEMATTR_FLAG_HIGHER_FIRST</a></div><div class="ttdeci">@ HWLOC_MEMATTR_FLAG_HIGHER_FIRST</div><div class="ttdoc">The best nodes for this memory attribute are those with the higher values. For instance Bandwidth.</div><div class="ttdef"><b>Definition:</b> memattrs.h:384</div></div>
+<div class="ttc" id="aa00253_html"><div class="ttname"><a href="a00253.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:396</div></div>
+<div class="ttc" id="aa00329_html"><div class="ttname"><a href="a00329.html">hwloc_location</a></div><div class="ttdoc">Where to measure attributes from.</div><div class="ttdef"><b>Definition:</b> memattrs.h:197</div></div>
+<div class="ttc" id="aa00329_html_a707a25a5b65177e4d081be49aa0777a2"><div class="ttname"><a href="a00329.html#a707a25a5b65177e4d081be49aa0777a2">hwloc_location::location</a></div><div class="ttdeci">union hwloc_location::hwloc_location_u location</div></div>
+<div class="ttc" id="aa00329_html_aeb9c0ab74a7d3506a76d0b82600a28a7"><div class="ttname"><a href="a00329.html#aeb9c0ab74a7d3506a76d0b82600a28a7">hwloc_location::type</a></div><div class="ttdeci">enum hwloc_location_type_e type</div><div class="ttdoc">Type of location.</div><div class="ttdef"><b>Definition:</b> memattrs.h:199</div></div>
+<div class="ttc" id="aa00333_html"><div class="ttname"><a href="a00333.html">hwloc_location::hwloc_location_u</a></div><div class="ttdoc">Actual location.</div><div class="ttdef"><b>Definition:</b> memattrs.h:201</div></div>
+<div class="ttc" id="aa00333_html_a033bad8f6b891992f0c18b85a88c5561"><div class="ttname"><a href="a00333.html#a033bad8f6b891992f0c18b85a88c5561">hwloc_location::hwloc_location_u::cpuset</a></div><div class="ttdeci">hwloc_cpuset_t cpuset</div><div class="ttdoc">Location as a cpuset, when the location type is HWLOC_LOCATION_TYPE_CPUSET.</div><div class="ttdef"><b>Definition:</b> memattrs.h:203</div></div>
+<div class="ttc" id="aa00333_html_acf2ebf75869f0a53a884ac2ab3374122"><div class="ttname"><a href="a00333.html#acf2ebf75869f0a53a884ac2ab3374122">hwloc_location::hwloc_location_u::object</a></div><div class="ttdeci">hwloc_obj_t object</div><div class="ttdoc">Location as an object, when the location type is HWLOC_LOCATION_TYPE_OBJECT.</div><div class="ttdef"><b>Definition:</b> memattrs.h:205</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00143_source.html b/doc/doxygen-doc/html/a00143_source.html
new file mode 100644
index 00000000..f3087b1f
--- /dev/null
+++ b/doc/doxygen-doc/html/a00143_source.html
@@ -0,0 +1,110 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): cpukinds.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_5cb306d949c7931a3b6c77517393dd34.html">hwloc</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">cpukinds.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright © 2020-2021 Inria.  All rights reserved.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160; </div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor">#ifndef HWLOC_CPUKINDS_H</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor">#define HWLOC_CPUKINDS_H</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160; </div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160; </div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#elif 0</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;}</div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160; </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="a00226.html#ga7553f7c6d3920b169f3fc18dfe6a33e3">   82</a></span>&#160;<a class="code" href="a00226.html#ga7553f7c6d3920b169f3fc18dfe6a33e3">hwloc_cpukinds_get_nr</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;                      <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160; </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="a00226.html#gaf979833aab18d2e7f4b17c932cbcf5d8">   97</a></span>&#160;<a class="code" href="a00226.html#gaf979833aab18d2e7f4b17c932cbcf5d8">hwloc_cpukinds_get_by_cpuset</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;                             <a class="code" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> cpuset,</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;                             <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160; </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="a00226.html#gae1b38fbe9c645583fc16052ce6fbb275">  135</a></span>&#160;<a class="code" href="a00226.html#gae1b38fbe9c645583fc16052ce6fbb275">hwloc_cpukinds_get_info</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;                        <span class="keywordtype">unsigned</span> kind_index,</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;                        <a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> cpuset,</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;                        <span class="keywordtype">int</span> *efficiency,</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;                        <span class="keywordtype">unsigned</span> *nr_infos, <span class="keyword">struct</span> <a class="code" href="a00301.html">hwloc_info_s</a> **infos,</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;                        <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160; </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00180"></a><span class="lineno"><a class="line" href="a00226.html#ga6164ba92cfd06f530ec2c4a18a0dd5a9">  180</a></span>&#160;<a class="code" href="a00226.html#ga6164ba92cfd06f530ec2c4a18a0dd5a9">hwloc_cpukinds_register</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;                        <a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> cpuset,</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;                        <span class="keywordtype">int</span> forced_efficiency,</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;                        <span class="keywordtype">unsigned</span> nr_infos, <span class="keyword">struct</span> <a class="code" href="a00301.html">hwloc_info_s</a> *infos,</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;                        <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160; </div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160; </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160; </div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_CPUKINDS_H */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="aa00198_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:692</div></div>
+<div class="ttc" id="aa00217_html_gaa3c2bf4c776d603dcebbb61b0c923d84"><div class="ttname"><a href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a></div><div class="ttdeci">struct hwloc_bitmap_s * hwloc_bitmap_t</div><div class="ttdoc">Set of bits represented as an opaque pointer to an internal bitmap.</div><div class="ttdef"><b>Definition:</b> bitmap.h:68</div></div>
+<div class="ttc" id="aa00217_html_gae991a108af01d408be2776c5b2c467b2"><div class="ttname"><a href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a></div><div class="ttdeci">const struct hwloc_bitmap_s * hwloc_const_bitmap_t</div><div class="ttdoc">a non-modifiable hwloc_bitmap_t</div><div class="ttdef"><b>Definition:</b> bitmap.h:70</div></div>
+<div class="ttc" id="aa00226_html_ga6164ba92cfd06f530ec2c4a18a0dd5a9"><div class="ttname"><a href="a00226.html#ga6164ba92cfd06f530ec2c4a18a0dd5a9">hwloc_cpukinds_register</a></div><div class="ttdeci">int hwloc_cpukinds_register(hwloc_topology_t topology, hwloc_bitmap_t cpuset, int forced_efficiency, unsigned nr_infos, struct hwloc_info_s *infos, unsigned long flags)</div><div class="ttdoc">Register a kind of CPU in the topology.</div></div>
+<div class="ttc" id="aa00226_html_ga7553f7c6d3920b169f3fc18dfe6a33e3"><div class="ttname"><a href="a00226.html#ga7553f7c6d3920b169f3fc18dfe6a33e3">hwloc_cpukinds_get_nr</a></div><div class="ttdeci">int hwloc_cpukinds_get_nr(hwloc_topology_t topology, unsigned long flags)</div><div class="ttdoc">Get the number of different kinds of CPU cores in the topology.</div></div>
+<div class="ttc" id="aa00226_html_gae1b38fbe9c645583fc16052ce6fbb275"><div class="ttname"><a href="a00226.html#gae1b38fbe9c645583fc16052ce6fbb275">hwloc_cpukinds_get_info</a></div><div class="ttdeci">int hwloc_cpukinds_get_info(hwloc_topology_t topology, unsigned kind_index, hwloc_bitmap_t cpuset, int *efficiency, unsigned *nr_infos, struct hwloc_info_s **infos, unsigned long flags)</div><div class="ttdoc">Get the CPU set and infos about a CPU kind in the topology.</div></div>
+<div class="ttc" id="aa00226_html_gaf979833aab18d2e7f4b17c932cbcf5d8"><div class="ttname"><a href="a00226.html#gaf979833aab18d2e7f4b17c932cbcf5d8">hwloc_cpukinds_get_by_cpuset</a></div><div class="ttdeci">int hwloc_cpukinds_get_by_cpuset(hwloc_topology_t topology, hwloc_const_bitmap_t cpuset, unsigned long flags)</div><div class="ttdoc">Get the index of the CPU kind that contains CPUs listed in cpuset.</div></div>
+<div class="ttc" id="aa00301_html"><div class="ttname"><a href="a00301.html">hwloc_info_s</a></div><div class="ttdoc">Object info.</div><div class="ttdef"><b>Definition:</b> hwloc.h:674</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00146_source.html b/doc/doxygen-doc/html/a00146_source.html
new file mode 100644
index 00000000..03cf8afa
--- /dev/null
+++ b/doc/doxygen-doc/html/a00146_source.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): linux.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_5cb306d949c7931a3b6c77517393dd34.html">hwloc</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">linux.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright © 2009 CNRS</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * Copyright © 2009-2021 Inria.  All rights reserved.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Copyright © 2009-2011 Université Bordeaux</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160; </div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#ifndef HWLOC_LINUX_H</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#define HWLOC_LINUX_H</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160; </div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &lt;stdio.h&gt;</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160; </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160; </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160; </div>
+<div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="a00227.html#ga630e699c56b5f3d2e534b475944c216e">   44</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00227.html#ga630e699c56b5f3d2e534b475944c216e">hwloc_linux_set_tid_cpubind</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, pid_t tid, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set);</div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160; </div>
+<div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="a00227.html#gaddcb985cb56337a4d6693cee72e7bf94">   58</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00227.html#gaddcb985cb56337a4d6693cee72e7bf94">hwloc_linux_get_tid_cpubind</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, pid_t tid, <a class="code" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set);</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160; </div>
+<div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="a00227.html#gacc7945c2d06c6db1e58f8fd953009134">   68</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00227.html#gacc7945c2d06c6db1e58f8fd953009134">hwloc_linux_get_tid_last_cpu_location</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, pid_t tid, <a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160; </div>
+<div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="a00227.html#gaf72d83e273803226ce772973e37b85de">   77</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00227.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *path, <a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160; </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160; </div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160; </div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_LINUX_H */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="aa00195_html_ga1f784433e9b606261f62d1134f6a3b25"><div class="ttname"><a href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a></div><div class="ttdeci">hwloc_const_bitmap_t hwloc_const_cpuset_t</div><div class="ttdoc">A non-modifiable hwloc_cpuset_t.</div><div class="ttdef"><b>Definition:</b> hwloc.h:142</div></div>
+<div class="ttc" id="aa00195_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
+<div class="ttc" id="aa00198_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:692</div></div>
+<div class="ttc" id="aa00217_html_gaa3c2bf4c776d603dcebbb61b0c923d84"><div class="ttname"><a href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a></div><div class="ttdeci">struct hwloc_bitmap_s * hwloc_bitmap_t</div><div class="ttdoc">Set of bits represented as an opaque pointer to an internal bitmap.</div><div class="ttdef"><b>Definition:</b> bitmap.h:68</div></div>
+<div class="ttc" id="aa00227_html_ga630e699c56b5f3d2e534b475944c216e"><div class="ttname"><a href="a00227.html#ga630e699c56b5f3d2e534b475944c216e">hwloc_linux_set_tid_cpubind</a></div><div class="ttdeci">int hwloc_linux_set_tid_cpubind(hwloc_topology_t topology, pid_t tid, hwloc_const_cpuset_t set)</div><div class="ttdoc">Bind a thread tid on cpus given in cpuset set.</div></div>
+<div class="ttc" id="aa00227_html_gacc7945c2d06c6db1e58f8fd953009134"><div class="ttname"><a href="a00227.html#gacc7945c2d06c6db1e58f8fd953009134">hwloc_linux_get_tid_last_cpu_location</a></div><div class="ttdeci">int hwloc_linux_get_tid_last_cpu_location(hwloc_topology_t topology, pid_t tid, hwloc_bitmap_t set)</div><div class="ttdoc">Get the last physical CPU where thread tid ran.</div></div>
+<div class="ttc" id="aa00227_html_gaddcb985cb56337a4d6693cee72e7bf94"><div class="ttname"><a href="a00227.html#gaddcb985cb56337a4d6693cee72e7bf94">hwloc_linux_get_tid_cpubind</a></div><div class="ttdeci">int hwloc_linux_get_tid_cpubind(hwloc_topology_t topology, pid_t tid, hwloc_cpuset_t set)</div><div class="ttdoc">Get the current binding of thread tid.</div></div>
+<div class="ttc" id="aa00227_html_gaf72d83e273803226ce772973e37b85de"><div class="ttname"><a href="a00227.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a></div><div class="ttdeci">int hwloc_linux_read_path_as_cpumask(const char *path, hwloc_bitmap_t set)</div><div class="ttdoc">Convert a linux kernel cpumask file path into a hwloc bitmap set.</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00149_source.html b/doc/doxygen-doc/html/a00149_source.html
new file mode 100644
index 00000000..e72be7c5
--- /dev/null
+++ b/doc/doxygen-doc/html/a00149_source.html
@@ -0,0 +1,245 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): linux-libnuma.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_5cb306d949c7931a3b6c77517393dd34.html">hwloc</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">linux-libnuma.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright © 2009 CNRS</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * Copyright © 2009-2017 Inria.  All rights reserved.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Copyright © 2009-2010, 2012 Université Bordeaux</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160; </div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#ifndef HWLOC_LINUX_LIBNUMA_H</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#define HWLOC_LINUX_LIBNUMA_H</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160; </div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &lt;numa.h&gt;</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160; </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160; </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160; </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="a00228.html#gae577962390f84b0b12f503314ab0f972">   55</a></span>&#160;<a class="code" href="a00228.html#gae577962390f84b0b12f503314ab0f972">hwloc_cpuset_to_linux_libnuma_ulongs</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> cpuset,</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;                                    <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *mask, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *maxnode)</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;{</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;  <span class="keywordtype">int</span> depth = <a class="code" href="a00199.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> outmaxnode = -1;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;  <a class="code" href="a00253.html">hwloc_obj_t</a> node = NULL;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160; </div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;  <span class="comment">/* round-up to the next ulong and clear all bytes */</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;  *maxnode = (*maxnode + 8*<span class="keyword">sizeof</span>(*mask) - 1) &amp; ~(8*<span class="keyword">sizeof</span>(*mask) - 1);</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;  memset(mask, 0, *maxnode/8);</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160; </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;  <span class="keywordflow">while</span> ((node = <a class="code" href="a00208.html#gaba4b6d86eba1169ced4b0e941d2bb5f0">hwloc_get_next_obj_covering_cpuset_by_depth</a>(topology, cpuset, depth, node)) != NULL) {</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;    <span class="keywordflow">if</span> (node-&gt;<a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> &gt;= *maxnode)</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;      <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    mask[node-&gt;<a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>/<span class="keyword">sizeof</span>(*mask)/8] |= 1UL &lt;&lt; (node-&gt;<a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> % (<span class="keyword">sizeof</span>(*mask)*8));</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;    <span class="keywordflow">if</span> (outmaxnode == (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>) -1 || outmaxnode &lt; node-&gt;<a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>)</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;      outmaxnode = node-&gt;<a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>;</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;  }</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160; </div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;  *maxnode = outmaxnode+1;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;  <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;}</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160; </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="a00228.html#ga585ccf818d2f217f4e53f9c6506c3128">   89</a></span>&#160;<a class="code" href="a00228.html#ga585ccf818d2f217f4e53f9c6506c3128">hwloc_nodeset_to_linux_libnuma_ulongs</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> nodeset,</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;                                      <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *mask, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *maxnode)</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;{</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;  <span class="keywordtype">int</span> depth = <a class="code" href="a00199.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> outmaxnode = -1;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;  <a class="code" href="a00253.html">hwloc_obj_t</a> node = NULL;</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160; </div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;  <span class="comment">/* round-up to the next ulong and clear all bytes */</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;  *maxnode = (*maxnode + 8*<span class="keyword">sizeof</span>(*mask) - 1) &amp; ~(8*<span class="keyword">sizeof</span>(*mask) - 1);</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;  memset(mask, 0, *maxnode/8);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160; </div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;  <span class="keywordflow">while</span> ((node = <a class="code" href="a00199.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a>(topology, depth, node)) != NULL) {</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    <span class="keywordflow">if</span> (node-&gt;<a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> &gt;= *maxnode)</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;      <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;    <span class="keywordflow">if</span> (!<a class="code" href="a00217.html#ga11340dd487f110bb84f0a6e4ae90bd06">hwloc_bitmap_isset</a>(nodeset, node-&gt;<a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>))</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;      <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;    mask[node-&gt;<a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>/<span class="keyword">sizeof</span>(*mask)/8] |= 1UL &lt;&lt; (node-&gt;<a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> % (<span class="keyword">sizeof</span>(*mask)*8));</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;    <span class="keywordflow">if</span> (outmaxnode == (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>) -1 || outmaxnode &lt; node-&gt;<a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>)</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;      outmaxnode = node-&gt;<a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>;</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;  }</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160; </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;  *maxnode = outmaxnode+1;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;  <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;}</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160; </div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="a00228.html#ga0e9d051e068940f722f6fdc61814149d">  124</a></span>&#160;<a class="code" href="a00228.html#ga0e9d051e068940f722f6fdc61814149d">hwloc_cpuset_from_linux_libnuma_ulongs</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> cpuset,</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;                                      <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *mask, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> maxnode)</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;{</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;  <span class="keywordtype">int</span> depth = <a class="code" href="a00199.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;  <a class="code" href="a00253.html">hwloc_obj_t</a> node = NULL;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;  <a class="code" href="a00217.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a>(cpuset);</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;  <span class="keywordflow">while</span> ((node = <a class="code" href="a00199.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a>(topology, depth, node)) != NULL)</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    <span class="keywordflow">if</span> (node-&gt;<a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> &lt; maxnode</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;        &amp;&amp; (mask[node-&gt;<a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>/<span class="keyword">sizeof</span>(*mask)/8] &amp; (1UL &lt;&lt; (node-&gt;<a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> % (<span class="keyword">sizeof</span>(*mask)*8)))))</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;      <a class="code" href="a00217.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a>(cpuset, cpuset, node-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>);</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;  <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;}</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160; </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"><a class="line" href="a00228.html#gad8491c672eb2594cc5e7b0a026867192">  147</a></span>&#160;<a class="code" href="a00228.html#gad8491c672eb2594cc5e7b0a026867192">hwloc_nodeset_from_linux_libnuma_ulongs</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a> nodeset,</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;                                        <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *mask, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> maxnode)</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;{</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;  <span class="keywordtype">int</span> depth = <a class="code" href="a00199.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;  <a class="code" href="a00253.html">hwloc_obj_t</a> node = NULL;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;  <a class="code" href="a00217.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a>(nodeset);</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;  <span class="keywordflow">while</span> ((node = <a class="code" href="a00199.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a>(topology, depth, node)) != NULL)</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;    <span class="keywordflow">if</span> (node-&gt;<a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> &lt; maxnode</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;        &amp;&amp; (mask[node-&gt;<a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>/<span class="keyword">sizeof</span>(*mask)/8] &amp; (1UL &lt;&lt; (node-&gt;<a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> % (<span class="keyword">sizeof</span>(*mask)*8)))))</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;      <a class="code" href="a00217.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a>(nodeset, node-&gt;<a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>);</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;  <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;}</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160; </div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keyword">struct </span>bitmask *</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;<a class="code" href="a00229.html#gad8769b4544c0aeef154fc8223144e343">hwloc_cpuset_to_linux_libnuma_bitmask</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> cpuset) __hwloc_attribute_malloc;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keyword">struct </span>bitmask *</div>
+<div class="line"><a name="l00192"></a><span class="lineno"><a class="line" href="a00229.html#gad8769b4544c0aeef154fc8223144e343">  192</a></span>&#160;<a class="code" href="a00229.html#gad8769b4544c0aeef154fc8223144e343">hwloc_cpuset_to_linux_libnuma_bitmask</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> cpuset)</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;{</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;  <span class="keywordtype">int</span> depth = <a class="code" href="a00199.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;  <a class="code" href="a00253.html">hwloc_obj_t</a> node = NULL;</div>
+<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;  <span class="keyword">struct </span>bitmask *bitmask = numa_allocate_cpumask();</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;  <span class="keywordflow">if</span> (!bitmask)</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;    <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;  <span class="keywordflow">while</span> ((node = <a class="code" href="a00208.html#gaba4b6d86eba1169ced4b0e941d2bb5f0">hwloc_get_next_obj_covering_cpuset_by_depth</a>(topology, cpuset, depth, node)) != NULL)</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;    <span class="keywordflow">if</span> (node-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#ad066b9612802ffa01e132dc3a8e6cc86">numanode</a>.<a class="code" href="a00261.html#a6703cbf2afbf63c9d60c5ff4dc0c73aa">local_memory</a>)</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;      numa_bitmask_setbit(bitmask, node-&gt;<a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>);</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;  <span class="keywordflow">return</span> bitmask;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;}</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160; </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keyword">struct </span>bitmask *</div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;<a class="code" href="a00229.html#gadfaa14c1bec76965ac2e05f0c3f3473b">hwloc_nodeset_to_linux_libnuma_bitmask</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> nodeset) __hwloc_attribute_malloc;</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keyword">struct </span>bitmask *</div>
+<div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="a00229.html#gadfaa14c1bec76965ac2e05f0c3f3473b">  217</a></span>&#160;<a class="code" href="a00229.html#gadfaa14c1bec76965ac2e05f0c3f3473b">hwloc_nodeset_to_linux_libnuma_bitmask</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> nodeset)</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;{</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;  <span class="keywordtype">int</span> depth = <a class="code" href="a00199.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;  <a class="code" href="a00253.html">hwloc_obj_t</a> node = NULL;</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;  <span class="keyword">struct </span>bitmask *bitmask = numa_allocate_cpumask();</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;  <span class="keywordflow">if</span> (!bitmask)</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;    <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;  <span class="keywordflow">while</span> ((node = <a class="code" href="a00199.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a>(topology, depth, node)) != NULL)</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="a00217.html#ga11340dd487f110bb84f0a6e4ae90bd06">hwloc_bitmap_isset</a>(nodeset, node-&gt;<a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>) &amp;&amp; node-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#ad066b9612802ffa01e132dc3a8e6cc86">numanode</a>.<a class="code" href="a00261.html#a6703cbf2afbf63c9d60c5ff4dc0c73aa">local_memory</a>)</div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;      numa_bitmask_setbit(bitmask, node-&gt;<a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>);</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;  <span class="keywordflow">return</span> bitmask;</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;}</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160; </div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00236"></a><span class="lineno"><a class="line" href="a00229.html#ga37c8421110b1842414809019098794ef">  236</a></span>&#160;<a class="code" href="a00229.html#ga37c8421110b1842414809019098794ef">hwloc_cpuset_from_linux_libnuma_bitmask</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> cpuset,</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;                                        <span class="keyword">const</span> <span class="keyword">struct</span> bitmask *bitmask)</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;{</div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;  <span class="keywordtype">int</span> depth = <a class="code" href="a00199.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;  <a class="code" href="a00253.html">hwloc_obj_t</a> node = NULL;</div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;  <a class="code" href="a00217.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a>(cpuset);</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;  <span class="keywordflow">while</span> ((node = <a class="code" href="a00199.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a>(topology, depth, node)) != NULL)</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;    <span class="keywordflow">if</span> (numa_bitmask_isbitset(bitmask, node-&gt;<a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>))</div>
+<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;      <a class="code" href="a00217.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a>(cpuset, cpuset, node-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>);</div>
+<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;  <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;}</div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160; </div>
+<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00254"></a><span class="lineno"><a class="line" href="a00229.html#gaaca6bff3086aad5bdbd2f4c5f0ad14cc">  254</a></span>&#160;<a class="code" href="a00229.html#gaaca6bff3086aad5bdbd2f4c5f0ad14cc">hwloc_nodeset_from_linux_libnuma_bitmask</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a> nodeset,</div>
+<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;                                         <span class="keyword">const</span> <span class="keyword">struct</span> bitmask *bitmask)</div>
+<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;{</div>
+<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;  <span class="keywordtype">int</span> depth = <a class="code" href="a00199.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
+<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;  <a class="code" href="a00253.html">hwloc_obj_t</a> node = NULL;</div>
+<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;  <a class="code" href="a00217.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a>(nodeset);</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;  <span class="keywordflow">while</span> ((node = <a class="code" href="a00199.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a>(topology, depth, node)) != NULL)</div>
+<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;    <span class="keywordflow">if</span> (numa_bitmask_isbitset(bitmask, node-&gt;<a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>))</div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;      <a class="code" href="a00217.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a>(nodeset, node-&gt;<a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>);</div>
+<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;  <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;}</div>
+<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160; </div>
+<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
+<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160; </div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160; </div>
+<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_LINUX_NUMA_H */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="aa00195_html_ga1f784433e9b606261f62d1134f6a3b25"><div class="ttname"><a href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a></div><div class="ttdeci">hwloc_const_bitmap_t hwloc_const_cpuset_t</div><div class="ttdoc">A non-modifiable hwloc_cpuset_t.</div><div class="ttdef"><b>Definition:</b> hwloc.h:142</div></div>
+<div class="ttc" id="aa00195_html_ga2f5276235841ad66a79bedad16a5a10c"><div class="ttname"><a href="a00195.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a></div><div class="ttdeci">hwloc_const_bitmap_t hwloc_const_nodeset_t</div><div class="ttdoc">A non-modifiable hwloc_nodeset_t.</div><div class="ttdef"><b>Definition:</b> hwloc.h:160</div></div>
+<div class="ttc" id="aa00195_html_ga37e35730fa7e775b5bb0afe893d6d508"><div class="ttname"><a href="a00195.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_nodeset_t</div><div class="ttdoc">A node set is a bitmap whose bits are set according to NUMA memory node physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:157</div></div>
+<div class="ttc" id="aa00195_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a></div><div class="ttdeci">@ HWLOC_OBJ_NUMANODE</div><div class="ttdoc">NUMA node. An object that contains memory that is directly and byte-accessible to the host processors...</div><div class="ttdef"><b>Definition:</b> hwloc.h:236</div></div>
+<div class="ttc" id="aa00198_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:692</div></div>
+<div class="ttc" id="aa00199_html_ga8bec782e21be313750da70cf7428b374"><div class="ttname"><a href="a00199.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a></div><div class="ttdeci">int hwloc_get_type_depth(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Returns the depth of objects of type type.</div></div>
+<div class="ttc" id="aa00199_html_gac140a9b939d9fa0b30c4a910efcb0656"><div class="ttname"><a href="a00199.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_obj_by_depth(hwloc_topology_t topology, int depth, hwloc_obj_t prev)</div><div class="ttdoc">Returns the next object at depth depth.</div></div>
+<div class="ttc" id="aa00208_html_gaba4b6d86eba1169ced4b0e941d2bb5f0"><div class="ttname"><a href="a00208.html#gaba4b6d86eba1169ced4b0e941d2bb5f0">hwloc_get_next_obj_covering_cpuset_by_depth</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_obj_covering_cpuset_by_depth(hwloc_topology_t topology, hwloc_const_cpuset_t set, int depth, hwloc_obj_t prev)</div><div class="ttdoc">Iterate through same-depth objects covering at least CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:321</div></div>
+<div class="ttc" id="aa00217_html_ga062dbff93baeff3b425a7260c5463646"><div class="ttname"><a href="a00217.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a></div><div class="ttdeci">int hwloc_bitmap_set(hwloc_bitmap_t bitmap, unsigned id)</div><div class="ttdoc">Add index id in bitmap bitmap.</div></div>
+<div class="ttc" id="aa00217_html_ga11340dd487f110bb84f0a6e4ae90bd06"><div class="ttname"><a href="a00217.html#ga11340dd487f110bb84f0a6e4ae90bd06">hwloc_bitmap_isset</a></div><div class="ttdeci">int hwloc_bitmap_isset(hwloc_const_bitmap_t bitmap, unsigned id)</div><div class="ttdoc">Test whether index id is part of bitmap bitmap.</div></div>
+<div class="ttc" id="aa00217_html_ga120b8aefb9ce7ef349929656359b1859"><div class="ttname"><a href="a00217.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a></div><div class="ttdeci">int hwloc_bitmap_or(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Or bitmaps bitmap1 and bitmap2 and store the result in bitmap res.</div></div>
+<div class="ttc" id="aa00217_html_gaa97c5217613c8cae9862287170ea2132"><div class="ttname"><a href="a00217.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a></div><div class="ttdeci">void hwloc_bitmap_zero(hwloc_bitmap_t bitmap)</div><div class="ttdoc">Empty the bitmap bitmap.</div></div>
+<div class="ttc" id="aa00228_html_ga0e9d051e068940f722f6fdc61814149d"><div class="ttname"><a href="a00228.html#ga0e9d051e068940f722f6fdc61814149d">hwloc_cpuset_from_linux_libnuma_ulongs</a></div><div class="ttdeci">static int hwloc_cpuset_from_linux_libnuma_ulongs(hwloc_topology_t topology, hwloc_cpuset_t cpuset, const unsigned long *mask, unsigned long maxnode)</div><div class="ttdoc">Convert the array of unsigned long mask into hwloc CPU set.</div><div class="ttdef"><b>Definition:</b> linux-libnuma.h:124</div></div>
+<div class="ttc" id="aa00228_html_ga585ccf818d2f217f4e53f9c6506c3128"><div class="ttname"><a href="a00228.html#ga585ccf818d2f217f4e53f9c6506c3128">hwloc_nodeset_to_linux_libnuma_ulongs</a></div><div class="ttdeci">static int hwloc_nodeset_to_linux_libnuma_ulongs(hwloc_topology_t topology, hwloc_const_nodeset_t nodeset, unsigned long *mask, unsigned long *maxnode)</div><div class="ttdoc">Convert hwloc NUMA node set nodeset into the array of unsigned long mask.</div><div class="ttdef"><b>Definition:</b> linux-libnuma.h:89</div></div>
+<div class="ttc" id="aa00228_html_gad8491c672eb2594cc5e7b0a026867192"><div class="ttname"><a href="a00228.html#gad8491c672eb2594cc5e7b0a026867192">hwloc_nodeset_from_linux_libnuma_ulongs</a></div><div class="ttdeci">static int hwloc_nodeset_from_linux_libnuma_ulongs(hwloc_topology_t topology, hwloc_nodeset_t nodeset, const unsigned long *mask, unsigned long maxnode)</div><div class="ttdoc">Convert the array of unsigned long mask into hwloc NUMA node set.</div><div class="ttdef"><b>Definition:</b> linux-libnuma.h:147</div></div>
+<div class="ttc" id="aa00228_html_gae577962390f84b0b12f503314ab0f972"><div class="ttname"><a href="a00228.html#gae577962390f84b0b12f503314ab0f972">hwloc_cpuset_to_linux_libnuma_ulongs</a></div><div class="ttdeci">static int hwloc_cpuset_to_linux_libnuma_ulongs(hwloc_topology_t topology, hwloc_const_cpuset_t cpuset, unsigned long *mask, unsigned long *maxnode)</div><div class="ttdoc">Convert hwloc CPU set cpuset into the array of unsigned long mask.</div><div class="ttdef"><b>Definition:</b> linux-libnuma.h:55</div></div>
+<div class="ttc" id="aa00229_html_ga37c8421110b1842414809019098794ef"><div class="ttname"><a href="a00229.html#ga37c8421110b1842414809019098794ef">hwloc_cpuset_from_linux_libnuma_bitmask</a></div><div class="ttdeci">static int hwloc_cpuset_from_linux_libnuma_bitmask(hwloc_topology_t topology, hwloc_cpuset_t cpuset, const struct bitmask *bitmask)</div><div class="ttdoc">Convert libnuma bitmask bitmask into hwloc CPU set cpuset.</div><div class="ttdef"><b>Definition:</b> linux-libnuma.h:236</div></div>
+<div class="ttc" id="aa00229_html_gaaca6bff3086aad5bdbd2f4c5f0ad14cc"><div class="ttname"><a href="a00229.html#gaaca6bff3086aad5bdbd2f4c5f0ad14cc">hwloc_nodeset_from_linux_libnuma_bitmask</a></div><div class="ttdeci">static int hwloc_nodeset_from_linux_libnuma_bitmask(hwloc_topology_t topology, hwloc_nodeset_t nodeset, const struct bitmask *bitmask)</div><div class="ttdoc">Convert libnuma bitmask bitmask into hwloc NUMA node set nodeset.</div><div class="ttdef"><b>Definition:</b> linux-libnuma.h:254</div></div>
+<div class="ttc" id="aa00229_html_gad8769b4544c0aeef154fc8223144e343"><div class="ttname"><a href="a00229.html#gad8769b4544c0aeef154fc8223144e343">hwloc_cpuset_to_linux_libnuma_bitmask</a></div><div class="ttdeci">static struct bitmask * hwloc_cpuset_to_linux_libnuma_bitmask(hwloc_topology_t topology, hwloc_const_cpuset_t cpuset)</div><div class="ttdoc">Convert hwloc CPU set cpuset into the returned libnuma bitmask.</div><div class="ttdef"><b>Definition:</b> linux-libnuma.h:192</div></div>
+<div class="ttc" id="aa00229_html_gadfaa14c1bec76965ac2e05f0c3f3473b"><div class="ttname"><a href="a00229.html#gadfaa14c1bec76965ac2e05f0c3f3473b">hwloc_nodeset_to_linux_libnuma_bitmask</a></div><div class="ttdeci">static struct bitmask * hwloc_nodeset_to_linux_libnuma_bitmask(hwloc_topology_t topology, hwloc_const_nodeset_t nodeset)</div><div class="ttdoc">Convert hwloc NUMA node set nodeset into the returned libnuma bitmask.</div><div class="ttdef"><b>Definition:</b> linux-libnuma.h:217</div></div>
+<div class="ttc" id="aa00253_html"><div class="ttname"><a href="a00253.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:396</div></div>
+<div class="ttc" id="aa00253_html_a61a7a80a68eaccbaaa28269e678c81a9"><div class="ttname"><a href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">hwloc_obj::os_index</a></div><div class="ttdeci">unsigned os_index</div><div class="ttdoc">OS-provided physical index number. It is not guaranteed unique across the entire machine,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:401</div></div>
+<div class="ttc" id="aa00253_html_a67925e0f2c47f50408fbdb9bddd0790f"><div class="ttname"><a href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">hwloc_obj::cpuset</a></div><div class="ttdeci">hwloc_cpuset_t cpuset</div><div class="ttdoc">CPUs covered by this object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:512</div></div>
+<div class="ttc" id="aa00253_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:415</div></div>
+<div class="ttc" id="aa00257_html_ad066b9612802ffa01e132dc3a8e6cc86"><div class="ttname"><a href="a00257.html#ad066b9612802ffa01e132dc3a8e6cc86">hwloc_obj_attr_u::numanode</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_numanode_attr_s numanode</div></div>
+<div class="ttc" id="aa00261_html_a6703cbf2afbf63c9d60c5ff4dc0c73aa"><div class="ttname"><a href="a00261.html#a6703cbf2afbf63c9d60c5ff4dc0c73aa">hwloc_obj_attr_u::hwloc_numanode_attr_s::local_memory</a></div><div class="ttdeci">hwloc_uint64_t local_memory</div><div class="ttdoc">Local memory (in bytes)</div><div class="ttdef"><b>Definition:</b> hwloc.h:602</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00152_source.html b/doc/doxygen-doc/html/a00152_source.html
new file mode 100644
index 00000000..d371633d
--- /dev/null
+++ b/doc/doxygen-doc/html/a00152_source.html
@@ -0,0 +1,86 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): windows.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_5cb306d949c7931a3b6c77517393dd34.html">hwloc</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">windows.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright © 2021 Inria.  All rights reserved.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160; </div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#ifndef HWLOC_WINDOWS_H</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#define HWLOC_WINDOWS_H</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160; </div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160; </div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160; </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160; </div>
+<div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="a00230.html#gaa4376a1969660a344911d117f645d3dd">   50</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00230.html#gaa4376a1969660a344911d117f645d3dd">hwloc_windows_get_nr_processor_groups</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160; </div>
+<div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="a00230.html#ga167d1f28d3bd9defe1ffa940c14e8dd1">   66</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00230.html#ga167d1f28d3bd9defe1ffa940c14e8dd1">hwloc_windows_get_processor_group_cpuset</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">unsigned</span> pg_index, <a class="code" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> cpuset, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160; </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160; </div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160; </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_WINDOWS_H */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="aa00195_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
+<div class="ttc" id="aa00198_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:692</div></div>
+<div class="ttc" id="aa00230_html_ga167d1f28d3bd9defe1ffa940c14e8dd1"><div class="ttname"><a href="a00230.html#ga167d1f28d3bd9defe1ffa940c14e8dd1">hwloc_windows_get_processor_group_cpuset</a></div><div class="ttdeci">int hwloc_windows_get_processor_group_cpuset(hwloc_topology_t topology, unsigned pg_index, hwloc_cpuset_t cpuset, unsigned long flags)</div><div class="ttdoc">Get the CPU-set of a Windows processor group.</div></div>
+<div class="ttc" id="aa00230_html_gaa4376a1969660a344911d117f645d3dd"><div class="ttname"><a href="a00230.html#gaa4376a1969660a344911d117f645d3dd">hwloc_windows_get_nr_processor_groups</a></div><div class="ttdeci">int hwloc_windows_get_nr_processor_groups(hwloc_topology_t topology, unsigned long flags)</div><div class="ttdoc">Get the number of Windows processor groups.</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00155_source.html b/doc/doxygen-doc/html/a00155_source.html
new file mode 100644
index 00000000..78e154c5
--- /dev/null
+++ b/doc/doxygen-doc/html/a00155_source.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): glibc-sched.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_5cb306d949c7931a3b6c77517393dd34.html">hwloc</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">glibc-sched.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright © 2009 CNRS</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * Copyright © 2009-2020 Inria.  All rights reserved.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Copyright © 2009-2011 Université Bordeaux</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * Copyright © 2011 Cisco Systems, Inc.  All rights reserved.</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160; </div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef HWLOC_GLIBC_SCHED_H</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define HWLOC_GLIBC_SCHED_H</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &quot;hwloc/helper.h&quot;</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &lt;assert.h&gt;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160; </div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#if !defined _GNU_SOURCE || (!defined _SCHED_H &amp;&amp; !defined _SCHED_H_) || (!defined CPU_SETSIZE &amp;&amp; !defined sched_priority)</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#error Please make sure to include sched.h before including glibc-sched.h, and define _GNU_SOURCE before any inclusion of sched.h</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160; </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160; </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160; </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160; </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="preprocessor">#ifdef HWLOC_HAVE_CPU_SET</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160; </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160; </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="a00231.html#ga88699a0c86c66a9b7baa3468cd9d24c3">   57</a></span>&#160;<a class="code" href="a00231.html#ga88699a0c86c66a9b7baa3468cd9d24c3">hwloc_cpuset_to_glibc_sched_affinity</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> hwlocset,</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;                                    cpu_set_t *schedset, <span class="keywordtype">size_t</span> schedsetsize)</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;{</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="preprocessor">#ifdef CPU_ZERO_S</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;  <span class="keywordtype">unsigned</span> cpu;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;  CPU_ZERO_S(schedsetsize, schedset);</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;  <a class="code" href="a00217.html#ga3f6861045a8029ade373510ffa727d2a">hwloc_bitmap_foreach_begin</a>(cpu, hwlocset)</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    CPU_SET_S(cpu, schedsetsize, schedset);</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;  <a class="code" href="a00217.html#gafcf3246db406218d4e155735b3fa6528">hwloc_bitmap_foreach_end</a>();</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* !CPU_ZERO_S */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;  <span class="keywordtype">unsigned</span> cpu;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;  CPU_ZERO(schedset);</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;  assert(schedsetsize == <span class="keyword">sizeof</span>(cpu_set_t));</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;  <a class="code" href="a00217.html#ga3f6861045a8029ade373510ffa727d2a">hwloc_bitmap_foreach_begin</a>(cpu, hwlocset)</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    CPU_SET(cpu, schedset);</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;  <a class="code" href="a00217.html#gafcf3246db406218d4e155735b3fa6528">hwloc_bitmap_foreach_end</a>();</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* !CPU_ZERO_S */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;  <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;}</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160; </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="a00231.html#ga8ec807ec17de57fa77aa5cfd6c8e4bfb">   85</a></span>&#160;<a class="code" href="a00231.html#ga8ec807ec17de57fa77aa5cfd6c8e4bfb">hwloc_cpuset_from_glibc_sched_affinity</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> hwlocset,</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;                                       <span class="keyword">const</span> cpu_set_t *schedset, <span class="keywordtype">size_t</span> schedsetsize)</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;{</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;  <span class="keywordtype">int</span> cpu;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;<span class="preprocessor">#ifdef CPU_ZERO_S</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;  <span class="keywordtype">int</span> count;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;  <a class="code" href="a00217.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a>(hwlocset);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;<span class="preprocessor">#ifdef CPU_ZERO_S</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;  count = CPU_COUNT_S(schedsetsize, schedset);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;  cpu = 0;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;  <span class="keywordflow">while</span> (count) {</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    <span class="keywordflow">if</span> (CPU_ISSET_S(cpu, schedsetsize, schedset)) {</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;      <a class="code" href="a00217.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a>(hwlocset, cpu);</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;      count--;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;    }</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    cpu++;</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;  }</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* !CPU_ZERO_S */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;  <span class="comment">/* sched.h does not support dynamic cpu_set_t (introduced in glibc 2.7),</span></div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;<span class="comment">   * assume we have a very old interface without CPU_COUNT (added in 2.6)</span></div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;<span class="comment">   */</span></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;  assert(schedsetsize == <span class="keyword">sizeof</span>(cpu_set_t));</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;  <span class="keywordflow">for</span>(cpu=0; cpu&lt;CPU_SETSIZE; cpu++)</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;    <span class="keywordflow">if</span> (CPU_ISSET(cpu, schedset))</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;      <a class="code" href="a00217.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a>(hwlocset, cpu);</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* !CPU_ZERO_S */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;  <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;}</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160; </div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* CPU_SET */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160; </div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160; </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160; </div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160; </div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_GLIBC_SCHED_H */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="aa00195_html_ga1f784433e9b606261f62d1134f6a3b25"><div class="ttname"><a href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a></div><div class="ttdeci">hwloc_const_bitmap_t hwloc_const_cpuset_t</div><div class="ttdoc">A non-modifiable hwloc_cpuset_t.</div><div class="ttdef"><b>Definition:</b> hwloc.h:142</div></div>
+<div class="ttc" id="aa00195_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
+<div class="ttc" id="aa00198_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:692</div></div>
+<div class="ttc" id="aa00217_html_ga062dbff93baeff3b425a7260c5463646"><div class="ttname"><a href="a00217.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a></div><div class="ttdeci">int hwloc_bitmap_set(hwloc_bitmap_t bitmap, unsigned id)</div><div class="ttdoc">Add index id in bitmap bitmap.</div></div>
+<div class="ttc" id="aa00217_html_ga3f6861045a8029ade373510ffa727d2a"><div class="ttname"><a href="a00217.html#ga3f6861045a8029ade373510ffa727d2a">hwloc_bitmap_foreach_begin</a></div><div class="ttdeci">#define hwloc_bitmap_foreach_begin(id, bitmap)</div><div class="ttdoc">Loop macro iterating on bitmap bitmap.</div><div class="ttdef"><b>Definition:</b> bitmap.h:370</div></div>
+<div class="ttc" id="aa00217_html_gaa97c5217613c8cae9862287170ea2132"><div class="ttname"><a href="a00217.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a></div><div class="ttdeci">void hwloc_bitmap_zero(hwloc_bitmap_t bitmap)</div><div class="ttdoc">Empty the bitmap bitmap.</div></div>
+<div class="ttc" id="aa00217_html_gafcf3246db406218d4e155735b3fa6528"><div class="ttname"><a href="a00217.html#gafcf3246db406218d4e155735b3fa6528">hwloc_bitmap_foreach_end</a></div><div class="ttdeci">#define hwloc_bitmap_foreach_end()</div><div class="ttdoc">End of loop macro iterating on a bitmap.</div><div class="ttdef"><b>Definition:</b> bitmap.h:384</div></div>
+<div class="ttc" id="aa00231_html_ga88699a0c86c66a9b7baa3468cd9d24c3"><div class="ttname"><a href="a00231.html#ga88699a0c86c66a9b7baa3468cd9d24c3">hwloc_cpuset_to_glibc_sched_affinity</a></div><div class="ttdeci">static int hwloc_cpuset_to_glibc_sched_affinity(hwloc_topology_t topology, hwloc_const_cpuset_t hwlocset, cpu_set_t *schedset, size_t schedsetsize)</div><div class="ttdoc">Convert hwloc CPU set toposet into glibc sched affinity CPU set schedset.</div><div class="ttdef"><b>Definition:</b> glibc-sched.h:57</div></div>
+<div class="ttc" id="aa00231_html_ga8ec807ec17de57fa77aa5cfd6c8e4bfb"><div class="ttname"><a href="a00231.html#ga8ec807ec17de57fa77aa5cfd6c8e4bfb">hwloc_cpuset_from_glibc_sched_affinity</a></div><div class="ttdeci">static int hwloc_cpuset_from_glibc_sched_affinity(hwloc_topology_t topology, hwloc_cpuset_t hwlocset, const cpu_set_t *schedset, size_t schedsetsize)</div><div class="ttdoc">Convert glibc sched affinity CPU set schedset into hwloc CPU set.</div><div class="ttdef"><b>Definition:</b> glibc-sched.h:85</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00158_source.html b/doc/doxygen-doc/html/a00158_source.html
new file mode 100644
index 00000000..9b0ab514
--- /dev/null
+++ b/doc/doxygen-doc/html/a00158_source.html
@@ -0,0 +1,263 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): opencl.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_5cb306d949c7931a3b6c77517393dd34.html">hwloc</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">opencl.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright © 2012-2021 Inria.  All rights reserved.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * Copyright © 2013, 2018 Université Bordeaux.  All right reserved.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160; </div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#ifndef HWLOC_OPENCL_H</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#define HWLOC_OPENCL_H</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160; </div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &quot;hwloc/autogen/config.h&quot;</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#include &quot;hwloc/helper.h&quot;</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#ifdef HWLOC_LINUX_SYS</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &quot;hwloc/linux.h&quot;</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160; </div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#ifdef __APPLE__</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &lt;OpenCL/cl.h&gt;</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#include &lt;CL/cl.h&gt;</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160; </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor">#include &lt;stdio.h&gt;</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160; </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160; </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160; </div>
+<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160; </div>
+<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="comment">/* OpenCL extensions aren&#39;t always shipped with default headers, and</span></div>
+<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="comment"> * they don&#39;t always reflect what the installed implementations support.</span></div>
+<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="comment"> * Try everything and let the implementation return errors when non supported.</span></div>
+<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="comment">/* Copyright (c) 2008-2018 The Khronos Group Inc. */</span></div>
+<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160; </div>
+<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="comment">/* needs &quot;cl_amd_device_attribute_query&quot; device extension, but not strictly required for clGetDeviceInfo() */</span></div>
+<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="preprocessor">#define HWLOC_CL_DEVICE_TOPOLOGY_AMD 0x4037</span></div>
+<div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="a00337.html">   46</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">union </span>{</div>
+<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="a00337.html#afbd6b814607b06fc5b2f36ad14420398">   47</a></span>&#160;    <span class="keyword">struct </span>{ cl_uint type; cl_uint data[5]; } raw;</div>
+<div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="a00337.html#a4a23e3cc034b7ab105cab0e863dcab69">   48</a></span>&#160;    <span class="keyword">struct </span>{ cl_uint type; cl_char unused[17]; cl_char <a class="code" href="a00337.html#a4a23e3cc034b7ab105cab0e863dcab69">bus</a>; cl_char device; cl_char <span class="keyword">function</span>; } pcie;</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;} <a class="code" href="a00337.html">hwloc_cl_device_topology_amd</a>;</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="preprocessor">#define HWLOC_CL_DEVICE_TOPOLOGY_TYPE_PCIE_AMD 1</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160; </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="comment">/* needs &quot;cl_nv_device_attribute_query&quot; device extension, but not strictly required for clGetDeviceInfo() */</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="preprocessor">#define HWLOC_CL_DEVICE_PCI_BUS_ID_NV 0x4008</span></div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="preprocessor">#define HWLOC_CL_DEVICE_PCI_SLOT_ID_NV 0x4009</span></div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="preprocessor">#define HWLOC_CL_DEVICE_PCI_DOMAIN_ID_NV 0x400A</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160; </div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160; </div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="a00232.html#gab89e4d20f8a353299351b41849e35ac9">   74</a></span>&#160;<a class="code" href="a00232.html#gab89e4d20f8a353299351b41849e35ac9">hwloc_opencl_get_device_pci_busid</a>(cl_device_id device,</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;                               <span class="keywordtype">unsigned</span> *domain, <span class="keywordtype">unsigned</span> *bus, <span class="keywordtype">unsigned</span> *dev, <span class="keywordtype">unsigned</span> *func)</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;{</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;        <a class="code" href="a00337.html">hwloc_cl_device_topology_amd</a> amdtopo;</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;        cl_uint nvbus, nvslot, nvdomain;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;        cl_int clret;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160; </div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;        clret = clGetDeviceInfo(device, HWLOC_CL_DEVICE_TOPOLOGY_AMD, <span class="keyword">sizeof</span>(amdtopo), &amp;amdtopo, NULL);</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;        <span class="keywordflow">if</span> (CL_SUCCESS == clret</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;            &amp;&amp; HWLOC_CL_DEVICE_TOPOLOGY_TYPE_PCIE_AMD == amdtopo.<a class="code" href="a00337.html#a7bba6ab297b6f44e43c5937b80b4cfb6">raw</a>.<a class="code" href="a00337.html#a8ec4ea89b862bb271845b48063f332b4">type</a>) {</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;                *domain = 0; <span class="comment">/* can&#39;t do anything better */</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;                <span class="comment">/* cl_device_topology_amd stores bus ID in cl_char, dont convert those signed char directly to unsigned int */</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;                *bus = (unsigned) (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>) amdtopo.<a class="code" href="a00337.html#a05e9a845012cd9d1f13a39cc35ab40a1">pcie</a>.<a class="code" href="a00337.html#a4a23e3cc034b7ab105cab0e863dcab69">bus</a>;</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;                *dev = (unsigned) (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>) amdtopo.<a class="code" href="a00337.html#a05e9a845012cd9d1f13a39cc35ab40a1">pcie</a>.<a class="code" href="a00337.html#a017033a953d71455b067007cabb92e9c">device</a>;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;                *func = (unsigned) (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>) amdtopo.<a class="code" href="a00337.html#a05e9a845012cd9d1f13a39cc35ab40a1">pcie</a>.<a class="code" href="a00337.html#a77a67ac73cff98d330ef7258b240bac3">function</a>;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;                <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;        }</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160; </div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;        clret = clGetDeviceInfo(device, HWLOC_CL_DEVICE_PCI_BUS_ID_NV, <span class="keyword">sizeof</span>(nvbus), &amp;nvbus, NULL);</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;        <span class="keywordflow">if</span> (CL_SUCCESS == clret) {</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;                clret = clGetDeviceInfo(device, HWLOC_CL_DEVICE_PCI_SLOT_ID_NV, <span class="keyword">sizeof</span>(nvslot), &amp;nvslot, NULL);</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;                <span class="keywordflow">if</span> (CL_SUCCESS == clret) {</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;                        clret = clGetDeviceInfo(device, HWLOC_CL_DEVICE_PCI_DOMAIN_ID_NV, <span class="keyword">sizeof</span>(nvdomain), &amp;nvdomain, NULL);</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;                        <span class="keywordflow">if</span> (CL_SUCCESS == clret) { <span class="comment">/* available since CUDA 10.2 */</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;                                *domain = nvdomain;</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;                        } <span class="keywordflow">else</span> {</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;                                *domain = 0;</div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;                        }</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;                        *bus = nvbus &amp; 0xff;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;                        <span class="comment">/* non-documented but used in many other projects */</span></div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;                        *dev = nvslot &gt;&gt; 3;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;                        *func = nvslot &amp; 0x7;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;                        <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;                }</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;        }</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160; </div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;        <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;}</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160; </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="a00232.html#gacc32737d4648d16b0d292438f210ec90">  131</a></span>&#160;<a class="code" href="a00232.html#gacc32737d4648d16b0d292438f210ec90">hwloc_opencl_get_device_cpuset</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;                               cl_device_id device __hwloc_attribute_unused,</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;                               <a class="code" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;{</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;<span class="preprocessor">#if (defined HWLOC_LINUX_SYS)</span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;        <span class="comment">/* If we&#39;re on Linux, try AMD/NVIDIA extensions + the sysfs mechanism to get the local cpus */</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;<span class="preprocessor">#define HWLOC_OPENCL_DEVICE_SYSFS_PATH_MAX 128</span></div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;        <span class="keywordtype">char</span> path[HWLOC_OPENCL_DEVICE_SYSFS_PATH_MAX];</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;        <span class="keywordtype">unsigned</span> pcidomain, pcibus, pcidev, pcifunc;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160; </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;        <span class="keywordflow">if</span> (!<a class="code" href="a00205.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(topology)) {</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;                errno = EINVAL;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;                <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;        }</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160; </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="a00232.html#gab89e4d20f8a353299351b41849e35ac9">hwloc_opencl_get_device_pci_busid</a>(device, &amp;pcidomain, &amp;pcibus, &amp;pcidev, &amp;pcifunc) &lt; 0) {</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;                <a class="code" href="a00217.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00214.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;                <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;        }</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160; </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;        sprintf(path, <span class="stringliteral">&quot;/sys/bus/pci/devices/%04x:%02x:%02x.%01x/local_cpus&quot;</span>, pcidomain, pcibus, pcidev, pcifunc);</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="a00227.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a>(path, set) &lt; 0</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;            || <a class="code" href="a00217.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(set))</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;                <a class="code" href="a00217.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00214.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;        <span class="comment">/* Non-Linux systems simply get a full cpuset */</span></div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;        <a class="code" href="a00217.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00214.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;  <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;}</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160; </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00178"></a><span class="lineno"><a class="line" href="a00232.html#gae39352d124cb330eb37b84b418ed6cc5">  178</a></span>&#160;<a class="code" href="a00232.html#gae39352d124cb330eb37b84b418ed6cc5">hwloc_opencl_get_device_osdev_by_index</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;                                       <span class="keywordtype">unsigned</span> platform_index, <span class="keywordtype">unsigned</span> device_index)</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;{</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;        <span class="keywordtype">unsigned</span> x = (unsigned) -1, y = (<span class="keywordtype">unsigned</span>) -1;</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;        <a class="code" href="a00253.html">hwloc_obj_t</a> osdev = NULL;</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;        <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00216.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;                <span class="keywordflow">if</span> (<a class="code" href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83">HWLOC_OBJ_OSDEV_COPROC</a> == osdev-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>.<a class="code" href="a00297.html#a31e019e27e54ac6138d04be639bb96f9">type</a></div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;                    &amp;&amp; osdev-&gt;<a class="code" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">name</a></div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;                    &amp;&amp; sscanf(osdev-&gt;<a class="code" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, <span class="stringliteral">&quot;opencl%ud%u&quot;</span>, &amp;x, &amp;y) == 2</div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;                    &amp;&amp; platform_index == x &amp;&amp; device_index == y)</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;                        <span class="keywordflow">return</span> osdev;</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;        }</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;        <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;}</div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160; </div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00215"></a><span class="lineno"><a class="line" href="a00232.html#gadabfa6516aa12e5d8f79b9b4dd9f3cf8">  215</a></span>&#160;<a class="code" href="a00232.html#gadabfa6516aa12e5d8f79b9b4dd9f3cf8">hwloc_opencl_get_device_osdev</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;                              cl_device_id device __hwloc_attribute_unused)</div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;{</div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;        <a class="code" href="a00253.html">hwloc_obj_t</a> osdev;</div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;        <span class="keywordtype">unsigned</span> pcidomain, pcibus, pcidevice, pcifunc;</div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160; </div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="a00232.html#gab89e4d20f8a353299351b41849e35ac9">hwloc_opencl_get_device_pci_busid</a>(device, &amp;pcidomain, &amp;pcibus, &amp;pcidevice, &amp;pcifunc) &lt; 0) {</div>
+<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;                errno = EINVAL;</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;                <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;        }</div>
+<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160; </div>
+<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;        osdev = NULL;</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;        <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00216.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;                <a class="code" href="a00253.html">hwloc_obj_t</a> pcidev = osdev-&gt;<a class="code" href="a00253.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
+<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;                <span class="keywordflow">if</span> (strncmp(osdev-&gt;<a class="code" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, <span class="stringliteral">&quot;opencl&quot;</span>, 6))</div>
+<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;                        <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;                <span class="keywordflow">if</span> (pcidev</div>
+<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;                    &amp;&amp; pcidev-&gt;<a class="code" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div>
+<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;                    &amp;&amp; pcidev-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00277.html#a8fba44988deb98613c1505a4019a34dc">domain</a> == pcidomain</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;                    &amp;&amp; pcidev-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00277.html#aae99e035e8d1387d7b8768aaa8eceb0a">bus</a> == pcibus</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;                    &amp;&amp; pcidev-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00277.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">dev</a> == pcidevice</div>
+<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;                    &amp;&amp; pcidev-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00277.html#a695f32df53f4ef728670bfcf31b74e0f">func</a> == pcifunc)</div>
+<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;                        <span class="keywordflow">return</span> osdev;</div>
+<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;                <span class="comment">/* if PCI are filtered out, we need a info attr to match on */</span></div>
+<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;        }</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160; </div>
+<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;        <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;}</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160; </div>
+<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
+<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160; </div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160; </div>
+<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_OPENCL_H */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="aa00195_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
+<div class="ttc" id="aa00196_html_gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83"><div class="ttname"><a href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83">HWLOC_OBJ_OSDEV_COPROC</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_COPROC</div><div class="ttdoc">Operating system co-processor device. For instance &quot;opencl0d0&quot; for a OpenCL device,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:353</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_PCI_DEVICE</div><div class="ttdoc">PCI device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:269</div></div>
+<div class="ttc" id="aa00198_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:692</div></div>
+<div class="ttc" id="aa00205_html_ga68ffdcfd9175cdf40709801092f18017"><div class="ttname"><a href="a00205.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a></div><div class="ttdeci">int hwloc_topology_is_thissystem(hwloc_topology_t restrict topology)</div><div class="ttdoc">Does the topology context come from this system?</div></div>
+<div class="ttc" id="aa00214_html_gaee30e03391c1ed7dfd617fb5c7bbb033"><div class="ttname"><a href="a00214.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a></div><div class="ttdeci">hwloc_const_cpuset_t hwloc_topology_get_complete_cpuset(hwloc_topology_t topology)</div><div class="ttdoc">Get complete CPU set.</div></div>
+<div class="ttc" id="aa00216_html_ga8b4584c8949e2c5f1c97ba7fe92b8145"><div class="ttname"><a href="a00216.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_osdev(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next OS device in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1191</div></div>
+<div class="ttc" id="aa00217_html_ga5b64be28f5a7176ed8ad0d6a90bdf108"><div class="ttname"><a href="a00217.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a></div><div class="ttdeci">int hwloc_bitmap_iszero(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Test whether bitmap bitmap is empty.</div></div>
+<div class="ttc" id="aa00217_html_ga72a29824798b48784b8217471ec8f14c"><div class="ttname"><a href="a00217.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a></div><div class="ttdeci">int hwloc_bitmap_copy(hwloc_bitmap_t dst, hwloc_const_bitmap_t src)</div><div class="ttdoc">Copy the contents of bitmap src into the already allocated bitmap dst.</div></div>
+<div class="ttc" id="aa00227_html_gaf72d83e273803226ce772973e37b85de"><div class="ttname"><a href="a00227.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a></div><div class="ttdeci">int hwloc_linux_read_path_as_cpumask(const char *path, hwloc_bitmap_t set)</div><div class="ttdoc">Convert a linux kernel cpumask file path into a hwloc bitmap set.</div></div>
+<div class="ttc" id="aa00232_html_gab89e4d20f8a353299351b41849e35ac9"><div class="ttname"><a href="a00232.html#gab89e4d20f8a353299351b41849e35ac9">hwloc_opencl_get_device_pci_busid</a></div><div class="ttdeci">static int hwloc_opencl_get_device_pci_busid(cl_device_id device, unsigned *domain, unsigned *bus, unsigned *dev, unsigned *func)</div><div class="ttdoc">Return the domain, bus and device IDs of the OpenCL device device.</div><div class="ttdef"><b>Definition:</b> opencl.h:74</div></div>
+<div class="ttc" id="aa00232_html_gacc32737d4648d16b0d292438f210ec90"><div class="ttname"><a href="a00232.html#gacc32737d4648d16b0d292438f210ec90">hwloc_opencl_get_device_cpuset</a></div><div class="ttdeci">static int hwloc_opencl_get_device_cpuset(hwloc_topology_t topology, cl_device_id device, hwloc_cpuset_t set)</div><div class="ttdoc">Get the CPU set of processors that are physically close to OpenCL device device.</div><div class="ttdef"><b>Definition:</b> opencl.h:131</div></div>
+<div class="ttc" id="aa00232_html_gadabfa6516aa12e5d8f79b9b4dd9f3cf8"><div class="ttname"><a href="a00232.html#gadabfa6516aa12e5d8f79b9b4dd9f3cf8">hwloc_opencl_get_device_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_opencl_get_device_osdev(hwloc_topology_t topology, cl_device_id device)</div><div class="ttdoc">Get the hwloc OS device object corresponding to OpenCL device deviceX.</div><div class="ttdef"><b>Definition:</b> opencl.h:215</div></div>
+<div class="ttc" id="aa00232_html_gae39352d124cb330eb37b84b418ed6cc5"><div class="ttname"><a href="a00232.html#gae39352d124cb330eb37b84b418ed6cc5">hwloc_opencl_get_device_osdev_by_index</a></div><div class="ttdeci">static hwloc_obj_t hwloc_opencl_get_device_osdev_by_index(hwloc_topology_t topology, unsigned platform_index, unsigned device_index)</div><div class="ttdoc">Get the hwloc OS device object corresponding to the OpenCL device for the given indexes.</div><div class="ttdef"><b>Definition:</b> opencl.h:178</div></div>
+<div class="ttc" id="aa00253_html"><div class="ttname"><a href="a00253.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:396</div></div>
+<div class="ttc" id="aa00253_html_abb709ec38f2970677e4e57d1d30be96d"><div class="ttname"><a href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name str...</div><div class="ttdef"><b>Definition:</b> hwloc.h:408</div></div>
+<div class="ttc" id="aa00253_html_acc4f0803f244867e68fe0036800be5de"><div class="ttname"><a href="a00253.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj::type</a></div><div class="ttdeci">hwloc_obj_type_t type</div><div class="ttdoc">Type of object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:398</div></div>
+<div class="ttc" id="aa00253_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:415</div></div>
+<div class="ttc" id="aa00253_html_adc494f6aed939992be1c55cca5822900"><div class="ttname"><a href="a00253.html#adc494f6aed939992be1c55cca5822900">hwloc_obj::parent</a></div><div class="ttdeci">struct hwloc_obj * parent</div><div class="ttdoc">Parent, NULL if root (Machine object)</div><div class="ttdef"><b>Definition:</b> hwloc.h:446</div></div>
+<div class="ttc" id="aa00257_html_a0b66da7ab072f7c016f8ed86701f5a7c"><div class="ttname"><a href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">hwloc_obj_attr_u::pcidev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_pcidev_attr_s pcidev</div></div>
+<div class="ttc" id="aa00257_html_aaf7a5c38b5185703ff18c46ad2761dcf"><div class="ttname"><a href="a00257.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u::osdev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_osdev_attr_s osdev</div></div>
+<div class="ttc" id="aa00277_html_a3d70c84a12f7e93d14c8d47bf4fd9dc5"><div class="ttname"><a href="a00277.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">hwloc_obj_attr_u::hwloc_pcidev_attr_s::dev</a></div><div class="ttdeci">unsigned char dev</div><div class="ttdef"><b>Definition:</b> hwloc.h:639</div></div>
+<div class="ttc" id="aa00277_html_a695f32df53f4ef728670bfcf31b74e0f"><div class="ttname"><a href="a00277.html#a695f32df53f4ef728670bfcf31b74e0f">hwloc_obj_attr_u::hwloc_pcidev_attr_s::func</a></div><div class="ttdeci">unsigned char func</div><div class="ttdef"><b>Definition:</b> hwloc.h:639</div></div>
+<div class="ttc" id="aa00277_html_a8fba44988deb98613c1505a4019a34dc"><div class="ttname"><a href="a00277.html#a8fba44988deb98613c1505a4019a34dc">hwloc_obj_attr_u::hwloc_pcidev_attr_s::domain</a></div><div class="ttdeci">unsigned short domain</div><div class="ttdef"><b>Definition:</b> hwloc.h:635</div></div>
+<div class="ttc" id="aa00277_html_aae99e035e8d1387d7b8768aaa8eceb0a"><div class="ttname"><a href="a00277.html#aae99e035e8d1387d7b8768aaa8eceb0a">hwloc_obj_attr_u::hwloc_pcidev_attr_s::bus</a></div><div class="ttdeci">unsigned char bus</div><div class="ttdef"><b>Definition:</b> hwloc.h:639</div></div>
+<div class="ttc" id="aa00297_html_a31e019e27e54ac6138d04be639bb96f9"><div class="ttname"><a href="a00297.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s::type</a></div><div class="ttdeci">hwloc_obj_osdev_type_t type</div><div class="ttdef"><b>Definition:</b> hwloc.h:666</div></div>
+<div class="ttc" id="aa00337_html"><div class="ttname"><a href="a00337.html">hwloc_cl_device_topology_amd</a></div><div class="ttdef"><b>Definition:</b> opencl.h:46</div></div>
+<div class="ttc" id="aa00337_html_a017033a953d71455b067007cabb92e9c"><div class="ttname"><a href="a00337.html#a017033a953d71455b067007cabb92e9c">hwloc_cl_device_topology_amd::device</a></div><div class="ttdeci">cl_char device</div><div class="ttdef"><b>Definition:</b> opencl.h:48</div></div>
+<div class="ttc" id="aa00337_html_a05e9a845012cd9d1f13a39cc35ab40a1"><div class="ttname"><a href="a00337.html#a05e9a845012cd9d1f13a39cc35ab40a1">hwloc_cl_device_topology_amd::pcie</a></div><div class="ttdeci">struct hwloc_cl_device_topology_amd::@4 pcie</div></div>
+<div class="ttc" id="aa00337_html_a4a23e3cc034b7ab105cab0e863dcab69"><div class="ttname"><a href="a00337.html#a4a23e3cc034b7ab105cab0e863dcab69">hwloc_cl_device_topology_amd::bus</a></div><div class="ttdeci">cl_char bus</div><div class="ttdef"><b>Definition:</b> opencl.h:48</div></div>
+<div class="ttc" id="aa00337_html_a77a67ac73cff98d330ef7258b240bac3"><div class="ttname"><a href="a00337.html#a77a67ac73cff98d330ef7258b240bac3">hwloc_cl_device_topology_amd::function</a></div><div class="ttdeci">cl_char function</div><div class="ttdef"><b>Definition:</b> opencl.h:48</div></div>
+<div class="ttc" id="aa00337_html_a7bba6ab297b6f44e43c5937b80b4cfb6"><div class="ttname"><a href="a00337.html#a7bba6ab297b6f44e43c5937b80b4cfb6">hwloc_cl_device_topology_amd::raw</a></div><div class="ttdeci">struct hwloc_cl_device_topology_amd::@3 raw</div></div>
+<div class="ttc" id="aa00337_html_a8ec4ea89b862bb271845b48063f332b4"><div class="ttname"><a href="a00337.html#a8ec4ea89b862bb271845b48063f332b4">hwloc_cl_device_topology_amd::type</a></div><div class="ttdeci">cl_uint type</div><div class="ttdef"><b>Definition:</b> opencl.h:47</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00161_source.html b/doc/doxygen-doc/html/a00161_source.html
new file mode 100644
index 00000000..8444275f
--- /dev/null
+++ b/doc/doxygen-doc/html/a00161_source.html
@@ -0,0 +1,225 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): cuda.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_5cb306d949c7931a3b6c77517393dd34.html">hwloc</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">cuda.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright © 2010-2021 Inria.  All rights reserved.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * Copyright © 2010-2011 Université Bordeaux</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Copyright © 2011 Cisco Systems, Inc.  All rights reserved.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160; </div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#ifndef HWLOC_CUDA_H</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#define HWLOC_CUDA_H</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160; </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &quot;hwloc/autogen/config.h&quot;</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &quot;hwloc/helper.h&quot;</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#ifdef HWLOC_LINUX_SYS</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &quot;hwloc/linux.h&quot;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160; </div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#include &lt;cuda.h&gt;</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160; </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160; </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160; </div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160; </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="a00233.html#ga1084285e8ff8b7df91c28917637481c6">   47</a></span>&#160;<a class="code" href="a00233.html#ga1084285e8ff8b7df91c28917637481c6">hwloc_cuda_get_device_pci_ids</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;                              CUdevice cudevice, <span class="keywordtype">int</span> *domain, <span class="keywordtype">int</span> *bus, <span class="keywordtype">int</span> *dev)</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;{</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;  CUresult cres;</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160; </div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="preprocessor">#if CUDA_VERSION &gt;= 4000</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;  cres = cuDeviceGetAttribute(domain, CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID, cudevice);</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;  <span class="keywordflow">if</span> (cres != CUDA_SUCCESS) {</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;    errno = ENOSYS;</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;  }</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;  *domain = 0;</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;  cres = cuDeviceGetAttribute(bus, CU_DEVICE_ATTRIBUTE_PCI_BUS_ID, cudevice);</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;  <span class="keywordflow">if</span> (cres != CUDA_SUCCESS) {</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;    errno = ENOSYS;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;  }</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;  cres = cuDeviceGetAttribute(dev, CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID, cudevice);</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;  <span class="keywordflow">if</span> (cres != CUDA_SUCCESS) {</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    errno = ENOSYS;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;  }</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160; </div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;  <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;}</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160; </div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="a00233.html#gaec41c6b4dc3361156beb7dea2a74f5a3">   92</a></span>&#160;<a class="code" href="a00233.html#gaec41c6b4dc3361156beb7dea2a74f5a3">hwloc_cuda_get_device_cpuset</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;                             CUdevice cudevice, <a class="code" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;{</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;<span class="preprocessor">#ifdef HWLOC_LINUX_SYS</span></div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;  <span class="comment">/* If we&#39;re on Linux, use the sysfs mechanism to get the local cpus */</span></div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;<span class="preprocessor">#define HWLOC_CUDA_DEVICE_SYSFS_PATH_MAX 128</span></div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;  <span class="keywordtype">char</span> path[HWLOC_CUDA_DEVICE_SYSFS_PATH_MAX];</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;  <span class="keywordtype">int</span> domainid, busid, deviceid;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160; </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="a00233.html#ga1084285e8ff8b7df91c28917637481c6">hwloc_cuda_get_device_pci_ids</a>(topology, cudevice, &amp;domainid, &amp;busid, &amp;deviceid))</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;    <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160; </div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;  <span class="keywordflow">if</span> (!<a class="code" href="a00205.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(topology)) {</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;    errno = EINVAL;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;    <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;  }</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160; </div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;  sprintf(path, <span class="stringliteral">&quot;/sys/bus/pci/devices/%04x:%02x:%02x.0/local_cpus&quot;</span>, domainid, busid, deviceid);</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="a00227.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a>(path, set) &lt; 0</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;      || <a class="code" href="a00217.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(set))</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;    <a class="code" href="a00217.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00214.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;  <span class="comment">/* Non-Linux systems simply get a full cpuset */</span></div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;  <a class="code" href="a00217.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00214.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;  <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;}</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160; </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="a00233.html#ga11fed607fa404e29e8da010f3ec128e4">  131</a></span>&#160;<a class="code" href="a00233.html#ga11fed607fa404e29e8da010f3ec128e4">hwloc_cuda_get_device_pcidev</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, CUdevice cudevice)</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;{</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;  <span class="keywordtype">int</span> domain, bus, dev;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160; </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="a00233.html#ga1084285e8ff8b7df91c28917637481c6">hwloc_cuda_get_device_pci_ids</a>(topology, cudevice, &amp;domain, &amp;bus, &amp;dev))</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;    <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160; </div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;  <span class="keywordflow">return</span> <a class="code" href="a00216.html#gacdbaf0db98872e224b7883a84bfb0455">hwloc_get_pcidev_by_busid</a>(topology, domain, bus, dev, 0);</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;}</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160; </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="a00233.html#ga252cb72175f1a2d682f883a0add80a66">  157</a></span>&#160;<a class="code" href="a00233.html#ga252cb72175f1a2d682f883a0add80a66">hwloc_cuda_get_device_osdev</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, CUdevice cudevice)</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;{</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;        <a class="code" href="a00253.html">hwloc_obj_t</a> osdev = NULL;</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;        <span class="keywordtype">int</span> domain, bus, dev;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160; </div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="a00233.html#ga1084285e8ff8b7df91c28917637481c6">hwloc_cuda_get_device_pci_ids</a>(topology, cudevice, &amp;domain, &amp;bus, &amp;dev))</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;                <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160; </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;        osdev = NULL;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;        <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00216.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;                <a class="code" href="a00253.html">hwloc_obj_t</a> pcidev = osdev-&gt;<a class="code" href="a00253.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;                <span class="keywordflow">if</span> (strncmp(osdev-&gt;<a class="code" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, <span class="stringliteral">&quot;cuda&quot;</span>, 4))</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;                        <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;                <span class="keywordflow">if</span> (pcidev</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;                    &amp;&amp; pcidev-&gt;<a class="code" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;                    &amp;&amp; (<span class="keywordtype">int</span>) pcidev-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00277.html#a8fba44988deb98613c1505a4019a34dc">domain</a> == domain</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;                    &amp;&amp; (<span class="keywordtype">int</span>) pcidev-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00277.html#aae99e035e8d1387d7b8768aaa8eceb0a">bus</a> == bus</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;                    &amp;&amp; (<span class="keywordtype">int</span>) pcidev-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00277.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">dev</a> == dev</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;                    &amp;&amp; pcidev-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00277.html#a695f32df53f4ef728670bfcf31b74e0f">func</a> == 0)</div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;                        <span class="keywordflow">return</span> osdev;</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;                <span class="comment">/* if PCI are filtered out, we need a info attr to match on */</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;        }</div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160; </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;        <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;}</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160; </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00199"></a><span class="lineno"><a class="line" href="a00233.html#ga12ee892994ed037e8f64bbffda02cf2e">  199</a></span>&#160;<a class="code" href="a00233.html#ga12ee892994ed037e8f64bbffda02cf2e">hwloc_cuda_get_device_osdev_by_index</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">unsigned</span> idx)</div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;{</div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;        <a class="code" href="a00253.html">hwloc_obj_t</a> osdev = NULL;</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;        <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00216.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;                <span class="keywordflow">if</span> (<a class="code" href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83">HWLOC_OBJ_OSDEV_COPROC</a> == osdev-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>.<a class="code" href="a00297.html#a31e019e27e54ac6138d04be639bb96f9">type</a></div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;                    &amp;&amp; osdev-&gt;<a class="code" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">name</a></div>
+<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;                    &amp;&amp; !strncmp(<span class="stringliteral">&quot;cuda&quot;</span>, osdev-&gt;<a class="code" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, 4)</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;                    &amp;&amp; atoi(osdev-&gt;<a class="code" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">name</a> + 4) == (<span class="keywordtype">int</span>) idx)</div>
+<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;                        <span class="keywordflow">return</span> osdev;</div>
+<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;        }</div>
+<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;        <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;}</div>
+<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160; </div>
+<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
+<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160; </div>
+<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160; </div>
+<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_CUDA_H */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="aa00195_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
+<div class="ttc" id="aa00196_html_gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83"><div class="ttname"><a href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83">HWLOC_OBJ_OSDEV_COPROC</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_COPROC</div><div class="ttdoc">Operating system co-processor device. For instance &quot;opencl0d0&quot; for a OpenCL device,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:353</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_PCI_DEVICE</div><div class="ttdoc">PCI device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:269</div></div>
+<div class="ttc" id="aa00198_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:692</div></div>
+<div class="ttc" id="aa00205_html_ga68ffdcfd9175cdf40709801092f18017"><div class="ttname"><a href="a00205.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a></div><div class="ttdeci">int hwloc_topology_is_thissystem(hwloc_topology_t restrict topology)</div><div class="ttdoc">Does the topology context come from this system?</div></div>
+<div class="ttc" id="aa00214_html_gaee30e03391c1ed7dfd617fb5c7bbb033"><div class="ttname"><a href="a00214.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a></div><div class="ttdeci">hwloc_const_cpuset_t hwloc_topology_get_complete_cpuset(hwloc_topology_t topology)</div><div class="ttdoc">Get complete CPU set.</div></div>
+<div class="ttc" id="aa00216_html_ga8b4584c8949e2c5f1c97ba7fe92b8145"><div class="ttname"><a href="a00216.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_osdev(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next OS device in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1191</div></div>
+<div class="ttc" id="aa00216_html_gacdbaf0db98872e224b7883a84bfb0455"><div class="ttname"><a href="a00216.html#gacdbaf0db98872e224b7883a84bfb0455">hwloc_get_pcidev_by_busid</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_pcidev_by_busid(hwloc_topology_t topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)</div><div class="ttdoc">Find the PCI device object matching the PCI bus id given domain, bus device and function PCI bus id.</div><div class="ttdef"><b>Definition:</b> helper.h:1154</div></div>
+<div class="ttc" id="aa00217_html_ga5b64be28f5a7176ed8ad0d6a90bdf108"><div class="ttname"><a href="a00217.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a></div><div class="ttdeci">int hwloc_bitmap_iszero(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Test whether bitmap bitmap is empty.</div></div>
+<div class="ttc" id="aa00217_html_ga72a29824798b48784b8217471ec8f14c"><div class="ttname"><a href="a00217.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a></div><div class="ttdeci">int hwloc_bitmap_copy(hwloc_bitmap_t dst, hwloc_const_bitmap_t src)</div><div class="ttdoc">Copy the contents of bitmap src into the already allocated bitmap dst.</div></div>
+<div class="ttc" id="aa00227_html_gaf72d83e273803226ce772973e37b85de"><div class="ttname"><a href="a00227.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a></div><div class="ttdeci">int hwloc_linux_read_path_as_cpumask(const char *path, hwloc_bitmap_t set)</div><div class="ttdoc">Convert a linux kernel cpumask file path into a hwloc bitmap set.</div></div>
+<div class="ttc" id="aa00233_html_ga1084285e8ff8b7df91c28917637481c6"><div class="ttname"><a href="a00233.html#ga1084285e8ff8b7df91c28917637481c6">hwloc_cuda_get_device_pci_ids</a></div><div class="ttdeci">static int hwloc_cuda_get_device_pci_ids(hwloc_topology_t topology, CUdevice cudevice, int *domain, int *bus, int *dev)</div><div class="ttdoc">Return the domain, bus and device IDs of the CUDA device cudevice.</div><div class="ttdef"><b>Definition:</b> cuda.h:47</div></div>
+<div class="ttc" id="aa00233_html_ga11fed607fa404e29e8da010f3ec128e4"><div class="ttname"><a href="a00233.html#ga11fed607fa404e29e8da010f3ec128e4">hwloc_cuda_get_device_pcidev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_cuda_get_device_pcidev(hwloc_topology_t topology, CUdevice cudevice)</div><div class="ttdoc">Get the hwloc PCI device object corresponding to the CUDA device cudevice.</div><div class="ttdef"><b>Definition:</b> cuda.h:131</div></div>
+<div class="ttc" id="aa00233_html_ga12ee892994ed037e8f64bbffda02cf2e"><div class="ttname"><a href="a00233.html#ga12ee892994ed037e8f64bbffda02cf2e">hwloc_cuda_get_device_osdev_by_index</a></div><div class="ttdeci">static hwloc_obj_t hwloc_cuda_get_device_osdev_by_index(hwloc_topology_t topology, unsigned idx)</div><div class="ttdoc">Get the hwloc OS device object corresponding to the CUDA device whose index is idx.</div><div class="ttdef"><b>Definition:</b> cuda.h:199</div></div>
+<div class="ttc" id="aa00233_html_ga252cb72175f1a2d682f883a0add80a66"><div class="ttname"><a href="a00233.html#ga252cb72175f1a2d682f883a0add80a66">hwloc_cuda_get_device_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_cuda_get_device_osdev(hwloc_topology_t topology, CUdevice cudevice)</div><div class="ttdoc">Get the hwloc OS device object corresponding to CUDA device cudevice.</div><div class="ttdef"><b>Definition:</b> cuda.h:157</div></div>
+<div class="ttc" id="aa00233_html_gaec41c6b4dc3361156beb7dea2a74f5a3"><div class="ttname"><a href="a00233.html#gaec41c6b4dc3361156beb7dea2a74f5a3">hwloc_cuda_get_device_cpuset</a></div><div class="ttdeci">static int hwloc_cuda_get_device_cpuset(hwloc_topology_t topology, CUdevice cudevice, hwloc_cpuset_t set)</div><div class="ttdoc">Get the CPU set of processors that are physically close to device cudevice.</div><div class="ttdef"><b>Definition:</b> cuda.h:92</div></div>
+<div class="ttc" id="aa00253_html"><div class="ttname"><a href="a00253.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:396</div></div>
+<div class="ttc" id="aa00253_html_abb709ec38f2970677e4e57d1d30be96d"><div class="ttname"><a href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name str...</div><div class="ttdef"><b>Definition:</b> hwloc.h:408</div></div>
+<div class="ttc" id="aa00253_html_acc4f0803f244867e68fe0036800be5de"><div class="ttname"><a href="a00253.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj::type</a></div><div class="ttdeci">hwloc_obj_type_t type</div><div class="ttdoc">Type of object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:398</div></div>
+<div class="ttc" id="aa00253_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:415</div></div>
+<div class="ttc" id="aa00253_html_adc494f6aed939992be1c55cca5822900"><div class="ttname"><a href="a00253.html#adc494f6aed939992be1c55cca5822900">hwloc_obj::parent</a></div><div class="ttdeci">struct hwloc_obj * parent</div><div class="ttdoc">Parent, NULL if root (Machine object)</div><div class="ttdef"><b>Definition:</b> hwloc.h:446</div></div>
+<div class="ttc" id="aa00257_html_a0b66da7ab072f7c016f8ed86701f5a7c"><div class="ttname"><a href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">hwloc_obj_attr_u::pcidev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_pcidev_attr_s pcidev</div></div>
+<div class="ttc" id="aa00257_html_aaf7a5c38b5185703ff18c46ad2761dcf"><div class="ttname"><a href="a00257.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u::osdev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_osdev_attr_s osdev</div></div>
+<div class="ttc" id="aa00277_html_a3d70c84a12f7e93d14c8d47bf4fd9dc5"><div class="ttname"><a href="a00277.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">hwloc_obj_attr_u::hwloc_pcidev_attr_s::dev</a></div><div class="ttdeci">unsigned char dev</div><div class="ttdef"><b>Definition:</b> hwloc.h:639</div></div>
+<div class="ttc" id="aa00277_html_a695f32df53f4ef728670bfcf31b74e0f"><div class="ttname"><a href="a00277.html#a695f32df53f4ef728670bfcf31b74e0f">hwloc_obj_attr_u::hwloc_pcidev_attr_s::func</a></div><div class="ttdeci">unsigned char func</div><div class="ttdef"><b>Definition:</b> hwloc.h:639</div></div>
+<div class="ttc" id="aa00277_html_a8fba44988deb98613c1505a4019a34dc"><div class="ttname"><a href="a00277.html#a8fba44988deb98613c1505a4019a34dc">hwloc_obj_attr_u::hwloc_pcidev_attr_s::domain</a></div><div class="ttdeci">unsigned short domain</div><div class="ttdef"><b>Definition:</b> hwloc.h:635</div></div>
+<div class="ttc" id="aa00277_html_aae99e035e8d1387d7b8768aaa8eceb0a"><div class="ttname"><a href="a00277.html#aae99e035e8d1387d7b8768aaa8eceb0a">hwloc_obj_attr_u::hwloc_pcidev_attr_s::bus</a></div><div class="ttdeci">unsigned char bus</div><div class="ttdef"><b>Definition:</b> hwloc.h:639</div></div>
+<div class="ttc" id="aa00297_html_a31e019e27e54ac6138d04be639bb96f9"><div class="ttname"><a href="a00297.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s::type</a></div><div class="ttdeci">hwloc_obj_osdev_type_t type</div><div class="ttdef"><b>Definition:</b> hwloc.h:666</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00164_source.html b/doc/doxygen-doc/html/a00164_source.html
new file mode 100644
index 00000000..2213bab6
--- /dev/null
+++ b/doc/doxygen-doc/html/a00164_source.html
@@ -0,0 +1,186 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): cudart.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_5cb306d949c7931a3b6c77517393dd34.html">hwloc</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">cudart.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright © 2010-2021 Inria.  All rights reserved.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * Copyright © 2010-2011 Université Bordeaux</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Copyright © 2011 Cisco Systems, Inc.  All rights reserved.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160; </div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#ifndef HWLOC_CUDART_H</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#define HWLOC_CUDART_H</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160; </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &quot;hwloc/autogen/config.h&quot;</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &quot;hwloc/helper.h&quot;</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#ifdef HWLOC_LINUX_SYS</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &quot;hwloc/linux.h&quot;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160; </div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#include &lt;cuda.h&gt;</span> <span class="comment">/* for CUDA_VERSION */</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#include &lt;cuda_runtime_api.h&gt;</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160; </div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160; </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160; </div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160; </div>
+<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="a00234.html#gad8b701d9a34923e34bd58defd4c1e704">   48</a></span>&#160;<a class="code" href="a00234.html#gad8b701d9a34923e34bd58defd4c1e704">hwloc_cudart_get_device_pci_ids</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;                                <span class="keywordtype">int</span> idx, <span class="keywordtype">int</span> *domain, <span class="keywordtype">int</span> *bus, <span class="keywordtype">int</span> *dev)</div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;{</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;  cudaError_t cerr;</div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;  <span class="keyword">struct </span>cudaDeviceProp prop;</div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160; </div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;  cerr = cudaGetDeviceProperties(&amp;prop, idx);</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;  <span class="keywordflow">if</span> (cerr) {</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    errno = ENOSYS;</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;    <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;  }</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160; </div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="preprocessor">#if CUDA_VERSION &gt;= 4000</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;  *domain = prop.pciDomainID;</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;  *domain = 0;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160; </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;  *bus = prop.pciBusID;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;  *dev = prop.pciDeviceID;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160; </div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;  <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;}</div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160; </div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="a00234.html#ga187ca00c6e12800a25151ce331620980">   89</a></span>&#160;<a class="code" href="a00234.html#ga187ca00c6e12800a25151ce331620980">hwloc_cudart_get_device_cpuset</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;                               <span class="keywordtype">int</span> idx, <a class="code" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;{</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;<span class="preprocessor">#ifdef HWLOC_LINUX_SYS</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;  <span class="comment">/* If we&#39;re on Linux, use the sysfs mechanism to get the local cpus */</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;<span class="preprocessor">#define HWLOC_CUDART_DEVICE_SYSFS_PATH_MAX 128</span></div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;  <span class="keywordtype">char</span> path[HWLOC_CUDART_DEVICE_SYSFS_PATH_MAX];</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;  <span class="keywordtype">int</span> domain, bus, dev;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160; </div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="a00234.html#gad8b701d9a34923e34bd58defd4c1e704">hwloc_cudart_get_device_pci_ids</a>(topology, idx, &amp;domain, &amp;bus, &amp;dev))</div>
+<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;    <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160; </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;  <span class="keywordflow">if</span> (!<a class="code" href="a00205.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(topology)) {</div>
+<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;    errno = EINVAL;</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;    <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;  }</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160; </div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;  sprintf(path, <span class="stringliteral">&quot;/sys/bus/pci/devices/%04x:%02x:%02x.0/local_cpus&quot;</span>, (<span class="keywordtype">unsigned</span>) domain, (<span class="keywordtype">unsigned</span>) bus, (<span class="keywordtype">unsigned</span>) dev);</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="a00227.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a>(path, set) &lt; 0</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;      || <a class="code" href="a00217.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(set))</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;    <a class="code" href="a00217.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00214.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;  <span class="comment">/* Non-Linux systems simply get a full cpuset */</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;  <a class="code" href="a00217.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00214.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;  <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;}</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160; </div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="a00234.html#gaeda4e6efbb36b518b2c286434ad23bb2">  128</a></span>&#160;<a class="code" href="a00234.html#gaeda4e6efbb36b518b2c286434ad23bb2">hwloc_cudart_get_device_pcidev</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">int</span> idx)</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;{</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;  <span class="keywordtype">int</span> domain, bus, dev;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160; </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="a00234.html#gad8b701d9a34923e34bd58defd4c1e704">hwloc_cudart_get_device_pci_ids</a>(topology, idx, &amp;domain, &amp;bus, &amp;dev))</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;    <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160; </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;  <span class="keywordflow">return</span> <a class="code" href="a00216.html#gacdbaf0db98872e224b7883a84bfb0455">hwloc_get_pcidev_by_busid</a>(topology, domain, bus, dev, 0);</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;}</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160; </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="a00234.html#gac0f3eeaf7712919f298097b1a21307b0">  156</a></span>&#160;<a class="code" href="a00234.html#gac0f3eeaf7712919f298097b1a21307b0">hwloc_cudart_get_device_osdev_by_index</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">unsigned</span> idx)</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;{</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;        <a class="code" href="a00253.html">hwloc_obj_t</a> osdev = NULL;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;        <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00216.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;                <span class="keywordflow">if</span> (<a class="code" href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83">HWLOC_OBJ_OSDEV_COPROC</a> == osdev-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>.<a class="code" href="a00297.html#a31e019e27e54ac6138d04be639bb96f9">type</a></div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;                    &amp;&amp; osdev-&gt;<a class="code" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">name</a></div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;                    &amp;&amp; !strncmp(<span class="stringliteral">&quot;cuda&quot;</span>, osdev-&gt;<a class="code" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, 4)</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;                    &amp;&amp; atoi(osdev-&gt;<a class="code" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">name</a> + 4) == (<span class="keywordtype">int</span>) idx)</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;                        <span class="keywordflow">return</span> osdev;</div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;        }</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;        <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;}</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160; </div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160; </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160; </div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_CUDART_H */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="aa00195_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
+<div class="ttc" id="aa00196_html_gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83"><div class="ttname"><a href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83">HWLOC_OBJ_OSDEV_COPROC</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_COPROC</div><div class="ttdoc">Operating system co-processor device. For instance &quot;opencl0d0&quot; for a OpenCL device,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:353</div></div>
+<div class="ttc" id="aa00198_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:692</div></div>
+<div class="ttc" id="aa00205_html_ga68ffdcfd9175cdf40709801092f18017"><div class="ttname"><a href="a00205.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a></div><div class="ttdeci">int hwloc_topology_is_thissystem(hwloc_topology_t restrict topology)</div><div class="ttdoc">Does the topology context come from this system?</div></div>
+<div class="ttc" id="aa00214_html_gaee30e03391c1ed7dfd617fb5c7bbb033"><div class="ttname"><a href="a00214.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a></div><div class="ttdeci">hwloc_const_cpuset_t hwloc_topology_get_complete_cpuset(hwloc_topology_t topology)</div><div class="ttdoc">Get complete CPU set.</div></div>
+<div class="ttc" id="aa00216_html_ga8b4584c8949e2c5f1c97ba7fe92b8145"><div class="ttname"><a href="a00216.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_osdev(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next OS device in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1191</div></div>
+<div class="ttc" id="aa00216_html_gacdbaf0db98872e224b7883a84bfb0455"><div class="ttname"><a href="a00216.html#gacdbaf0db98872e224b7883a84bfb0455">hwloc_get_pcidev_by_busid</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_pcidev_by_busid(hwloc_topology_t topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)</div><div class="ttdoc">Find the PCI device object matching the PCI bus id given domain, bus device and function PCI bus id.</div><div class="ttdef"><b>Definition:</b> helper.h:1154</div></div>
+<div class="ttc" id="aa00217_html_ga5b64be28f5a7176ed8ad0d6a90bdf108"><div class="ttname"><a href="a00217.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a></div><div class="ttdeci">int hwloc_bitmap_iszero(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Test whether bitmap bitmap is empty.</div></div>
+<div class="ttc" id="aa00217_html_ga72a29824798b48784b8217471ec8f14c"><div class="ttname"><a href="a00217.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a></div><div class="ttdeci">int hwloc_bitmap_copy(hwloc_bitmap_t dst, hwloc_const_bitmap_t src)</div><div class="ttdoc">Copy the contents of bitmap src into the already allocated bitmap dst.</div></div>
+<div class="ttc" id="aa00227_html_gaf72d83e273803226ce772973e37b85de"><div class="ttname"><a href="a00227.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a></div><div class="ttdeci">int hwloc_linux_read_path_as_cpumask(const char *path, hwloc_bitmap_t set)</div><div class="ttdoc">Convert a linux kernel cpumask file path into a hwloc bitmap set.</div></div>
+<div class="ttc" id="aa00234_html_ga187ca00c6e12800a25151ce331620980"><div class="ttname"><a href="a00234.html#ga187ca00c6e12800a25151ce331620980">hwloc_cudart_get_device_cpuset</a></div><div class="ttdeci">static int hwloc_cudart_get_device_cpuset(hwloc_topology_t topology, int idx, hwloc_cpuset_t set)</div><div class="ttdoc">Get the CPU set of processors that are physically close to device idx.</div><div class="ttdef"><b>Definition:</b> cudart.h:89</div></div>
+<div class="ttc" id="aa00234_html_gac0f3eeaf7712919f298097b1a21307b0"><div class="ttname"><a href="a00234.html#gac0f3eeaf7712919f298097b1a21307b0">hwloc_cudart_get_device_osdev_by_index</a></div><div class="ttdeci">static hwloc_obj_t hwloc_cudart_get_device_osdev_by_index(hwloc_topology_t topology, unsigned idx)</div><div class="ttdoc">Get the hwloc OS device object corresponding to the CUDA device whose index is idx.</div><div class="ttdef"><b>Definition:</b> cudart.h:156</div></div>
+<div class="ttc" id="aa00234_html_gad8b701d9a34923e34bd58defd4c1e704"><div class="ttname"><a href="a00234.html#gad8b701d9a34923e34bd58defd4c1e704">hwloc_cudart_get_device_pci_ids</a></div><div class="ttdeci">static int hwloc_cudart_get_device_pci_ids(hwloc_topology_t topology, int idx, int *domain, int *bus, int *dev)</div><div class="ttdoc">Return the domain, bus and device IDs of the CUDA device whose index is idx.</div><div class="ttdef"><b>Definition:</b> cudart.h:48</div></div>
+<div class="ttc" id="aa00234_html_gaeda4e6efbb36b518b2c286434ad23bb2"><div class="ttname"><a href="a00234.html#gaeda4e6efbb36b518b2c286434ad23bb2">hwloc_cudart_get_device_pcidev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_cudart_get_device_pcidev(hwloc_topology_t topology, int idx)</div><div class="ttdoc">Get the hwloc PCI device object corresponding to the CUDA device whose index is idx.</div><div class="ttdef"><b>Definition:</b> cudart.h:128</div></div>
+<div class="ttc" id="aa00253_html"><div class="ttname"><a href="a00253.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:396</div></div>
+<div class="ttc" id="aa00253_html_abb709ec38f2970677e4e57d1d30be96d"><div class="ttname"><a href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name str...</div><div class="ttdef"><b>Definition:</b> hwloc.h:408</div></div>
+<div class="ttc" id="aa00253_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:415</div></div>
+<div class="ttc" id="aa00257_html_aaf7a5c38b5185703ff18c46ad2761dcf"><div class="ttname"><a href="a00257.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u::osdev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_osdev_attr_s osdev</div></div>
+<div class="ttc" id="aa00297_html_a31e019e27e54ac6138d04be639bb96f9"><div class="ttname"><a href="a00297.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s::type</a></div><div class="ttdeci">hwloc_obj_osdev_type_t type</div><div class="ttdef"><b>Definition:</b> hwloc.h:666</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00167_source.html b/doc/doxygen-doc/html/a00167_source.html
new file mode 100644
index 00000000..37fe101d
--- /dev/null
+++ b/doc/doxygen-doc/html/a00167_source.html
@@ -0,0 +1,203 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): nvml.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_5cb306d949c7931a3b6c77517393dd34.html">hwloc</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">nvml.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright © 2012-2021 Inria.  All rights reserved.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160; </div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#ifndef HWLOC_NVML_H</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#define HWLOC_NVML_H</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160; </div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#include &quot;hwloc/autogen/config.h&quot;</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &quot;hwloc/helper.h&quot;</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#ifdef HWLOC_LINUX_SYS</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &quot;hwloc/linux.h&quot;</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &lt;nvml.h&gt;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160; </div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160; </div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160; </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160; </div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="a00235.html#ga26cf0036d09ec4d7cb692380fac9659d">   56</a></span>&#160;<a class="code" href="a00235.html#ga26cf0036d09ec4d7cb692380fac9659d">hwloc_nvml_get_device_cpuset</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;                             nvmlDevice_t device, <a class="code" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;{</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="preprocessor">#ifdef HWLOC_LINUX_SYS</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;  <span class="comment">/* If we&#39;re on Linux, use the sysfs mechanism to get the local cpus */</span></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="preprocessor">#define HWLOC_NVML_DEVICE_SYSFS_PATH_MAX 128</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;  <span class="keywordtype">char</span> path[HWLOC_NVML_DEVICE_SYSFS_PATH_MAX];</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;  nvmlReturn_t nvres;</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;  nvmlPciInfo_t pci;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160; </div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;  <span class="keywordflow">if</span> (!<a class="code" href="a00205.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(topology)) {</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;    errno = EINVAL;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;  }</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160; </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;  nvres = nvmlDeviceGetPciInfo(device, &amp;pci);</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;  <span class="keywordflow">if</span> (NVML_SUCCESS != nvres) {</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    errno = EINVAL;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;    <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;  }</div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160; </div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;  sprintf(path, <span class="stringliteral">&quot;/sys/bus/pci/devices/%04x:%02x:%02x.0/local_cpus&quot;</span>, pci.domain, pci.bus, pci.device);</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="a00227.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a>(path, set) &lt; 0</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;      || <a class="code" href="a00217.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(set))</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    <a class="code" href="a00217.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00214.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;  <span class="comment">/* Non-Linux systems simply get a full cpuset */</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;  <a class="code" href="a00217.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00214.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;  <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;}</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160; </div>
+<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="a00235.html#gacd50fd0e2766ee05bc13234b46714756">  102</a></span>&#160;<a class="code" href="a00235.html#gacd50fd0e2766ee05bc13234b46714756">hwloc_nvml_get_device_osdev_by_index</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">unsigned</span> idx)</div>
+<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;{</div>
+<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;        <a class="code" href="a00253.html">hwloc_obj_t</a> osdev = NULL;</div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;        <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00216.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;                <span class="keywordflow">if</span> (<a class="code" href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a> == osdev-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>.<a class="code" href="a00297.html#a31e019e27e54ac6138d04be639bb96f9">type</a></div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;                    &amp;&amp; osdev-&gt;<a class="code" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">name</a></div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;                    &amp;&amp; !strncmp(<span class="stringliteral">&quot;nvml&quot;</span>, osdev-&gt;<a class="code" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, 4)</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;                    &amp;&amp; atoi(osdev-&gt;<a class="code" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">name</a> + 4) == (<span class="keywordtype">int</span>) idx)</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;                        <span class="keywordflow">return</span> osdev;</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;        }</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;        <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;}</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160; </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="a00235.html#gaf176159b5760a191871eff23f5a69ee9">  129</a></span>&#160;<a class="code" href="a00235.html#gaf176159b5760a191871eff23f5a69ee9">hwloc_nvml_get_device_osdev</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, nvmlDevice_t device)</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;{</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;        <a class="code" href="a00253.html">hwloc_obj_t</a> osdev;</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;        nvmlReturn_t nvres;</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;        nvmlPciInfo_t pci;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;        <span class="keywordtype">char</span> uuid[64];</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160; </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;        <span class="keywordflow">if</span> (!<a class="code" href="a00205.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(topology)) {</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;                errno = EINVAL;</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;                <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;        }</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160; </div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;        nvres = nvmlDeviceGetPciInfo(device, &amp;pci);</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;        <span class="keywordflow">if</span> (NVML_SUCCESS != nvres)</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;                <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160; </div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;        nvres = nvmlDeviceGetUUID(device, uuid, <span class="keyword">sizeof</span>(uuid));</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;        <span class="keywordflow">if</span> (NVML_SUCCESS != nvres)</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;                uuid[0] = <span class="charliteral">&#39;\0&#39;</span>;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160; </div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;        osdev = NULL;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;        <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00216.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;                <a class="code" href="a00253.html">hwloc_obj_t</a> pcidev = osdev-&gt;<a class="code" href="a00253.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;                <span class="keyword">const</span> <span class="keywordtype">char</span> *info;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160; </div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;                <span class="keywordflow">if</span> (strncmp(osdev-&gt;<a class="code" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, <span class="stringliteral">&quot;nvml&quot;</span>, 4))</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;                        <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160; </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;                <span class="keywordflow">if</span> (pcidev</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;                    &amp;&amp; pcidev-&gt;<a class="code" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;                    &amp;&amp; pcidev-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00277.html#a8fba44988deb98613c1505a4019a34dc">domain</a> == pci.domain</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;                    &amp;&amp; pcidev-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00277.html#aae99e035e8d1387d7b8768aaa8eceb0a">bus</a> == pci.bus</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;                    &amp;&amp; pcidev-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00277.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">dev</a> == pci.device</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;                    &amp;&amp; pcidev-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00277.html#a695f32df53f4ef728670bfcf31b74e0f">func</a> == 0)</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;                        <span class="keywordflow">return</span> osdev;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160; </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;                info = <a class="code" href="a00201.html#gab358661a92bb27d8542b255cc9f6f25e">hwloc_obj_get_info_by_name</a>(osdev, <span class="stringliteral">&quot;NVIDIAUUID&quot;</span>);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;                <span class="keywordflow">if</span> (info &amp;&amp; !strcmp(info, uuid))</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;                        <span class="keywordflow">return</span> osdev;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;        }</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160; </div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;        <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;}</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160; </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160; </div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160; </div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_NVML_H */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="aa00195_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
+<div class="ttc" id="aa00196_html_gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90"><div class="ttname"><a href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_GPU</div><div class="ttdoc">Operating system GPU device. For instance &quot;:0.0&quot; for a GL display, &quot;card0&quot; for a Linux DRM device.</div><div class="ttdef"><b>Definition:</b> hwloc.h:342</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_PCI_DEVICE</div><div class="ttdoc">PCI device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:269</div></div>
+<div class="ttc" id="aa00198_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:692</div></div>
+<div class="ttc" id="aa00201_html_gab358661a92bb27d8542b255cc9f6f25e"><div class="ttname"><a href="a00201.html#gab358661a92bb27d8542b255cc9f6f25e">hwloc_obj_get_info_by_name</a></div><div class="ttdeci">static const char * hwloc_obj_get_info_by_name(hwloc_obj_t obj, const char *name)</div><div class="ttdoc">Search the given key name in object infos and return the corresponding value.</div></div>
+<div class="ttc" id="aa00205_html_ga68ffdcfd9175cdf40709801092f18017"><div class="ttname"><a href="a00205.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a></div><div class="ttdeci">int hwloc_topology_is_thissystem(hwloc_topology_t restrict topology)</div><div class="ttdoc">Does the topology context come from this system?</div></div>
+<div class="ttc" id="aa00214_html_gaee30e03391c1ed7dfd617fb5c7bbb033"><div class="ttname"><a href="a00214.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a></div><div class="ttdeci">hwloc_const_cpuset_t hwloc_topology_get_complete_cpuset(hwloc_topology_t topology)</div><div class="ttdoc">Get complete CPU set.</div></div>
+<div class="ttc" id="aa00216_html_ga8b4584c8949e2c5f1c97ba7fe92b8145"><div class="ttname"><a href="a00216.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_osdev(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next OS device in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1191</div></div>
+<div class="ttc" id="aa00217_html_ga5b64be28f5a7176ed8ad0d6a90bdf108"><div class="ttname"><a href="a00217.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a></div><div class="ttdeci">int hwloc_bitmap_iszero(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Test whether bitmap bitmap is empty.</div></div>
+<div class="ttc" id="aa00217_html_ga72a29824798b48784b8217471ec8f14c"><div class="ttname"><a href="a00217.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a></div><div class="ttdeci">int hwloc_bitmap_copy(hwloc_bitmap_t dst, hwloc_const_bitmap_t src)</div><div class="ttdoc">Copy the contents of bitmap src into the already allocated bitmap dst.</div></div>
+<div class="ttc" id="aa00227_html_gaf72d83e273803226ce772973e37b85de"><div class="ttname"><a href="a00227.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a></div><div class="ttdeci">int hwloc_linux_read_path_as_cpumask(const char *path, hwloc_bitmap_t set)</div><div class="ttdoc">Convert a linux kernel cpumask file path into a hwloc bitmap set.</div></div>
+<div class="ttc" id="aa00235_html_ga26cf0036d09ec4d7cb692380fac9659d"><div class="ttname"><a href="a00235.html#ga26cf0036d09ec4d7cb692380fac9659d">hwloc_nvml_get_device_cpuset</a></div><div class="ttdeci">static int hwloc_nvml_get_device_cpuset(hwloc_topology_t topology, nvmlDevice_t device, hwloc_cpuset_t set)</div><div class="ttdoc">Get the CPU set of processors that are physically close to NVML device device.</div><div class="ttdef"><b>Definition:</b> nvml.h:56</div></div>
+<div class="ttc" id="aa00235_html_gacd50fd0e2766ee05bc13234b46714756"><div class="ttname"><a href="a00235.html#gacd50fd0e2766ee05bc13234b46714756">hwloc_nvml_get_device_osdev_by_index</a></div><div class="ttdeci">static hwloc_obj_t hwloc_nvml_get_device_osdev_by_index(hwloc_topology_t topology, unsigned idx)</div><div class="ttdoc">Get the hwloc OS device object corresponding to the NVML device whose index is idx.</div><div class="ttdef"><b>Definition:</b> nvml.h:102</div></div>
+<div class="ttc" id="aa00235_html_gaf176159b5760a191871eff23f5a69ee9"><div class="ttname"><a href="a00235.html#gaf176159b5760a191871eff23f5a69ee9">hwloc_nvml_get_device_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_nvml_get_device_osdev(hwloc_topology_t topology, nvmlDevice_t device)</div><div class="ttdoc">Get the hwloc OS device object corresponding to NVML device device.</div><div class="ttdef"><b>Definition:</b> nvml.h:129</div></div>
+<div class="ttc" id="aa00253_html"><div class="ttname"><a href="a00253.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:396</div></div>
+<div class="ttc" id="aa00253_html_abb709ec38f2970677e4e57d1d30be96d"><div class="ttname"><a href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name str...</div><div class="ttdef"><b>Definition:</b> hwloc.h:408</div></div>
+<div class="ttc" id="aa00253_html_acc4f0803f244867e68fe0036800be5de"><div class="ttname"><a href="a00253.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj::type</a></div><div class="ttdeci">hwloc_obj_type_t type</div><div class="ttdoc">Type of object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:398</div></div>
+<div class="ttc" id="aa00253_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:415</div></div>
+<div class="ttc" id="aa00253_html_adc494f6aed939992be1c55cca5822900"><div class="ttname"><a href="a00253.html#adc494f6aed939992be1c55cca5822900">hwloc_obj::parent</a></div><div class="ttdeci">struct hwloc_obj * parent</div><div class="ttdoc">Parent, NULL if root (Machine object)</div><div class="ttdef"><b>Definition:</b> hwloc.h:446</div></div>
+<div class="ttc" id="aa00257_html_a0b66da7ab072f7c016f8ed86701f5a7c"><div class="ttname"><a href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">hwloc_obj_attr_u::pcidev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_pcidev_attr_s pcidev</div></div>
+<div class="ttc" id="aa00257_html_aaf7a5c38b5185703ff18c46ad2761dcf"><div class="ttname"><a href="a00257.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u::osdev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_osdev_attr_s osdev</div></div>
+<div class="ttc" id="aa00277_html_a3d70c84a12f7e93d14c8d47bf4fd9dc5"><div class="ttname"><a href="a00277.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">hwloc_obj_attr_u::hwloc_pcidev_attr_s::dev</a></div><div class="ttdeci">unsigned char dev</div><div class="ttdef"><b>Definition:</b> hwloc.h:639</div></div>
+<div class="ttc" id="aa00277_html_a695f32df53f4ef728670bfcf31b74e0f"><div class="ttname"><a href="a00277.html#a695f32df53f4ef728670bfcf31b74e0f">hwloc_obj_attr_u::hwloc_pcidev_attr_s::func</a></div><div class="ttdeci">unsigned char func</div><div class="ttdef"><b>Definition:</b> hwloc.h:639</div></div>
+<div class="ttc" id="aa00277_html_a8fba44988deb98613c1505a4019a34dc"><div class="ttname"><a href="a00277.html#a8fba44988deb98613c1505a4019a34dc">hwloc_obj_attr_u::hwloc_pcidev_attr_s::domain</a></div><div class="ttdeci">unsigned short domain</div><div class="ttdef"><b>Definition:</b> hwloc.h:635</div></div>
+<div class="ttc" id="aa00277_html_aae99e035e8d1387d7b8768aaa8eceb0a"><div class="ttname"><a href="a00277.html#aae99e035e8d1387d7b8768aaa8eceb0a">hwloc_obj_attr_u::hwloc_pcidev_attr_s::bus</a></div><div class="ttdeci">unsigned char bus</div><div class="ttdef"><b>Definition:</b> hwloc.h:639</div></div>
+<div class="ttc" id="aa00297_html_a31e019e27e54ac6138d04be639bb96f9"><div class="ttname"><a href="a00297.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s::type</a></div><div class="ttdeci">hwloc_obj_osdev_type_t type</div><div class="ttdef"><b>Definition:</b> hwloc.h:666</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00170_source.html b/doc/doxygen-doc/html/a00170_source.html
new file mode 100644
index 00000000..d561c062
--- /dev/null
+++ b/doc/doxygen-doc/html/a00170_source.html
@@ -0,0 +1,219 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): rsmi.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_5cb306d949c7931a3b6c77517393dd34.html">hwloc</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">rsmi.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright © 2012-2021 Inria.  All rights reserved.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * Copyright (c) 2020, Advanced Micro Devices, Inc. All rights reserved.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Written by Advanced Micro Devices,</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160; </div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#ifndef HWLOC_RSMI_H</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#define HWLOC_RSMI_H</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160; </div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#include &quot;hwloc/autogen/config.h&quot;</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &quot;hwloc/helper.h&quot;</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#ifdef HWLOC_LINUX_SYS</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &quot;hwloc/linux.h&quot;</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160; </div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &lt;rocm_smi/rocm_smi.h&gt;</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160; </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160; </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160; </div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160; </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="a00236.html#gaf939e697e3769c3524255318262b9c29">   60</a></span>&#160;<a class="code" href="a00236.html#gaf939e697e3769c3524255318262b9c29">hwloc_rsmi_get_device_cpuset</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;                             uint32_t dv_ind, <a class="code" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;{</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;<span class="preprocessor">#ifdef HWLOC_LINUX_SYS</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;  <span class="comment">/* If we&#39;re on Linux, use the sysfs mechanism to get the local cpus */</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="preprocessor">#define HWLOC_RSMI_DEVICE_SYSFS_PATH_MAX 128</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;  <span class="keywordtype">char</span> path[HWLOC_RSMI_DEVICE_SYSFS_PATH_MAX];</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;  rsmi_status_t ret;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;  uint64_t bdfid = 0;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;  <span class="keywordtype">unsigned</span> domain, device, bus;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160; </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;  <span class="keywordflow">if</span> (!<a class="code" href="a00205.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(topology)) {</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;    errno = EINVAL;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;  }</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160; </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;  ret = rsmi_dev_pci_id_get(dv_ind, &amp;bdfid);</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;  <span class="keywordflow">if</span> (RSMI_STATUS_SUCCESS != ret) {</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;    errno = EINVAL;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;    <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;  }</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;  domain = (bdfid&gt;&gt;32) &amp; 0xffffffff;</div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;  bus = ((bdfid &amp; 0xffff)&gt;&gt;8) &amp; 0xff;</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;  device = ((bdfid &amp; 0xff)&gt;&gt;3) &amp; 0x1f;</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160; </div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;  sprintf(path, <span class="stringliteral">&quot;/sys/bus/pci/devices/%04x:%02x:%02x.0/local_cpus&quot;</span>, domain, bus, device);</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="a00227.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a>(path, set) &lt; 0</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;      || <a class="code" href="a00217.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(set))</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;    <a class="code" href="a00217.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00214.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;  <span class="comment">/* Non-Linux systems simply get a full cpuset */</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;  <a class="code" href="a00217.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00214.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;  <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;}</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160; </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="a00236.html#ga507d0acdd5e9ac374a8d120d59604c80">  112</a></span>&#160;<a class="code" href="a00236.html#ga507d0acdd5e9ac374a8d120d59604c80">hwloc_rsmi_get_device_osdev_by_index</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, uint32_t dv_ind)</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;{</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;  <a class="code" href="a00253.html">hwloc_obj_t</a> osdev = NULL;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;  <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00216.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;    <span class="keywordflow">if</span> (<a class="code" href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a> == osdev-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>.<a class="code" href="a00297.html#a31e019e27e54ac6138d04be639bb96f9">type</a></div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;      &amp;&amp; osdev-&gt;<a class="code" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">name</a></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;      &amp;&amp; !strncmp(<span class="stringliteral">&quot;rsmi&quot;</span>, osdev-&gt;<a class="code" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, 4)</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;      &amp;&amp; atoi(osdev-&gt;<a class="code" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">name</a> + 4) == (<span class="keywordtype">int</span>) dv_ind)</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;      <span class="keywordflow">return</span> osdev;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;  }</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;  <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;}</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160; </div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="a00236.html#gaba05bf9710655bb5b1439bee654340ba">  141</a></span>&#160;<a class="code" href="a00236.html#gaba05bf9710655bb5b1439bee654340ba">hwloc_rsmi_get_device_osdev</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, uint32_t dv_ind)</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;{</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;  <a class="code" href="a00253.html">hwloc_obj_t</a> osdev;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;  rsmi_status_t ret;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;  uint64_t bdfid = 0;</div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;  <span class="keywordtype">unsigned</span> domain, device, bus, func;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;  uint64_t id;</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;  <span class="keywordtype">char</span> uuid[64];</div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160; </div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;  <span class="keywordflow">if</span> (!<a class="code" href="a00205.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(topology)) {</div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;    errno = EINVAL;</div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;    <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;  }</div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160; </div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;  ret = rsmi_dev_pci_id_get(dv_ind, &amp;bdfid);</div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;  <span class="keywordflow">if</span> (RSMI_STATUS_SUCCESS != ret) {</div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;    errno = EINVAL;</div>
+<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;    <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;  }</div>
+<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;  domain = (bdfid&gt;&gt;32) &amp; 0xffffffff;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;  bus = ((bdfid &amp; 0xffff)&gt;&gt;8) &amp; 0xff;</div>
+<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;  device = ((bdfid &amp; 0xff)&gt;&gt;3) &amp; 0x1f;</div>
+<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;  func = bdfid &amp; 0x7;</div>
+<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160; </div>
+<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;  ret = rsmi_dev_unique_id_get(dv_ind, &amp;<span class="keywordtype">id</span>);</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;  <span class="keywordflow">if</span> (RSMI_STATUS_SUCCESS != ret)</div>
+<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;    uuid[0] = <span class="charliteral">&#39;\0&#39;</span>;</div>
+<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;  <span class="keywordflow">else</span></div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;    sprintf(uuid, <span class="stringliteral">&quot;%lx&quot;</span>, <span class="keywordtype">id</span>);</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160; </div>
+<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;  osdev = NULL;</div>
+<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;  <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00216.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
+<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;    <a class="code" href="a00253.html">hwloc_obj_t</a> pcidev = osdev-&gt;<a class="code" href="a00253.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
+<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">char</span> *info;</div>
+<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160; </div>
+<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;    <span class="keywordflow">if</span> (strncmp(osdev-&gt;<a class="code" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, <span class="stringliteral">&quot;rsmi&quot;</span>, 4))</div>
+<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;      <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160; </div>
+<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    <span class="keywordflow">if</span> (pcidev</div>
+<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;      &amp;&amp; pcidev-&gt;<a class="code" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div>
+<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;      &amp;&amp; pcidev-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00277.html#a8fba44988deb98613c1505a4019a34dc">domain</a> == domain</div>
+<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;      &amp;&amp; pcidev-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00277.html#aae99e035e8d1387d7b8768aaa8eceb0a">bus</a> == bus</div>
+<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;      &amp;&amp; pcidev-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00277.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">dev</a> == device</div>
+<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;      &amp;&amp; pcidev-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00277.html#a695f32df53f4ef728670bfcf31b74e0f">func</a> == func)</div>
+<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;      <span class="keywordflow">return</span> osdev;</div>
+<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160; </div>
+<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;    info = <a class="code" href="a00201.html#gab358661a92bb27d8542b255cc9f6f25e">hwloc_obj_get_info_by_name</a>(osdev, <span class="stringliteral">&quot;AMDUUID&quot;</span>);</div>
+<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;    <span class="keywordflow">if</span> (info &amp;&amp; !strcmp(info, uuid))</div>
+<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;      <span class="keywordflow">return</span> osdev;</div>
+<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;  }</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160; </div>
+<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;  <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;}</div>
+<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160; </div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
+<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160; </div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160; </div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_RSMI_H */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="aa00195_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
+<div class="ttc" id="aa00196_html_gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90"><div class="ttname"><a href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_GPU</div><div class="ttdoc">Operating system GPU device. For instance &quot;:0.0&quot; for a GL display, &quot;card0&quot; for a Linux DRM device.</div><div class="ttdef"><b>Definition:</b> hwloc.h:342</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_PCI_DEVICE</div><div class="ttdoc">PCI device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:269</div></div>
+<div class="ttc" id="aa00198_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:692</div></div>
+<div class="ttc" id="aa00201_html_gab358661a92bb27d8542b255cc9f6f25e"><div class="ttname"><a href="a00201.html#gab358661a92bb27d8542b255cc9f6f25e">hwloc_obj_get_info_by_name</a></div><div class="ttdeci">static const char * hwloc_obj_get_info_by_name(hwloc_obj_t obj, const char *name)</div><div class="ttdoc">Search the given key name in object infos and return the corresponding value.</div></div>
+<div class="ttc" id="aa00205_html_ga68ffdcfd9175cdf40709801092f18017"><div class="ttname"><a href="a00205.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a></div><div class="ttdeci">int hwloc_topology_is_thissystem(hwloc_topology_t restrict topology)</div><div class="ttdoc">Does the topology context come from this system?</div></div>
+<div class="ttc" id="aa00214_html_gaee30e03391c1ed7dfd617fb5c7bbb033"><div class="ttname"><a href="a00214.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a></div><div class="ttdeci">hwloc_const_cpuset_t hwloc_topology_get_complete_cpuset(hwloc_topology_t topology)</div><div class="ttdoc">Get complete CPU set.</div></div>
+<div class="ttc" id="aa00216_html_ga8b4584c8949e2c5f1c97ba7fe92b8145"><div class="ttname"><a href="a00216.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_osdev(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next OS device in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1191</div></div>
+<div class="ttc" id="aa00217_html_ga5b64be28f5a7176ed8ad0d6a90bdf108"><div class="ttname"><a href="a00217.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a></div><div class="ttdeci">int hwloc_bitmap_iszero(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Test whether bitmap bitmap is empty.</div></div>
+<div class="ttc" id="aa00217_html_ga72a29824798b48784b8217471ec8f14c"><div class="ttname"><a href="a00217.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a></div><div class="ttdeci">int hwloc_bitmap_copy(hwloc_bitmap_t dst, hwloc_const_bitmap_t src)</div><div class="ttdoc">Copy the contents of bitmap src into the already allocated bitmap dst.</div></div>
+<div class="ttc" id="aa00227_html_gaf72d83e273803226ce772973e37b85de"><div class="ttname"><a href="a00227.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a></div><div class="ttdeci">int hwloc_linux_read_path_as_cpumask(const char *path, hwloc_bitmap_t set)</div><div class="ttdoc">Convert a linux kernel cpumask file path into a hwloc bitmap set.</div></div>
+<div class="ttc" id="aa00236_html_ga507d0acdd5e9ac374a8d120d59604c80"><div class="ttname"><a href="a00236.html#ga507d0acdd5e9ac374a8d120d59604c80">hwloc_rsmi_get_device_osdev_by_index</a></div><div class="ttdeci">static hwloc_obj_t hwloc_rsmi_get_device_osdev_by_index(hwloc_topology_t topology, uint32_t dv_ind)</div><div class="ttdoc">Get the hwloc OS device object corresponding to the AMD GPU device whose index is dv_ind.</div><div class="ttdef"><b>Definition:</b> rsmi.h:112</div></div>
+<div class="ttc" id="aa00236_html_gaba05bf9710655bb5b1439bee654340ba"><div class="ttname"><a href="a00236.html#gaba05bf9710655bb5b1439bee654340ba">hwloc_rsmi_get_device_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_rsmi_get_device_osdev(hwloc_topology_t topology, uint32_t dv_ind)</div><div class="ttdoc">Get the hwloc OS device object corresponding to AMD GPU device, whose index is dv_ind.</div><div class="ttdef"><b>Definition:</b> rsmi.h:141</div></div>
+<div class="ttc" id="aa00236_html_gaf939e697e3769c3524255318262b9c29"><div class="ttname"><a href="a00236.html#gaf939e697e3769c3524255318262b9c29">hwloc_rsmi_get_device_cpuset</a></div><div class="ttdeci">static int hwloc_rsmi_get_device_cpuset(hwloc_topology_t topology, uint32_t dv_ind, hwloc_cpuset_t set)</div><div class="ttdoc">Get the CPU set of logical processors that are physically close to AMD GPU device whose index is dv_i...</div><div class="ttdef"><b>Definition:</b> rsmi.h:60</div></div>
+<div class="ttc" id="aa00253_html"><div class="ttname"><a href="a00253.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:396</div></div>
+<div class="ttc" id="aa00253_html_abb709ec38f2970677e4e57d1d30be96d"><div class="ttname"><a href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name str...</div><div class="ttdef"><b>Definition:</b> hwloc.h:408</div></div>
+<div class="ttc" id="aa00253_html_acc4f0803f244867e68fe0036800be5de"><div class="ttname"><a href="a00253.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj::type</a></div><div class="ttdeci">hwloc_obj_type_t type</div><div class="ttdoc">Type of object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:398</div></div>
+<div class="ttc" id="aa00253_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:415</div></div>
+<div class="ttc" id="aa00253_html_adc494f6aed939992be1c55cca5822900"><div class="ttname"><a href="a00253.html#adc494f6aed939992be1c55cca5822900">hwloc_obj::parent</a></div><div class="ttdeci">struct hwloc_obj * parent</div><div class="ttdoc">Parent, NULL if root (Machine object)</div><div class="ttdef"><b>Definition:</b> hwloc.h:446</div></div>
+<div class="ttc" id="aa00257_html_a0b66da7ab072f7c016f8ed86701f5a7c"><div class="ttname"><a href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">hwloc_obj_attr_u::pcidev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_pcidev_attr_s pcidev</div></div>
+<div class="ttc" id="aa00257_html_aaf7a5c38b5185703ff18c46ad2761dcf"><div class="ttname"><a href="a00257.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u::osdev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_osdev_attr_s osdev</div></div>
+<div class="ttc" id="aa00277_html_a3d70c84a12f7e93d14c8d47bf4fd9dc5"><div class="ttname"><a href="a00277.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">hwloc_obj_attr_u::hwloc_pcidev_attr_s::dev</a></div><div class="ttdeci">unsigned char dev</div><div class="ttdef"><b>Definition:</b> hwloc.h:639</div></div>
+<div class="ttc" id="aa00277_html_a695f32df53f4ef728670bfcf31b74e0f"><div class="ttname"><a href="a00277.html#a695f32df53f4ef728670bfcf31b74e0f">hwloc_obj_attr_u::hwloc_pcidev_attr_s::func</a></div><div class="ttdeci">unsigned char func</div><div class="ttdef"><b>Definition:</b> hwloc.h:639</div></div>
+<div class="ttc" id="aa00277_html_a8fba44988deb98613c1505a4019a34dc"><div class="ttname"><a href="a00277.html#a8fba44988deb98613c1505a4019a34dc">hwloc_obj_attr_u::hwloc_pcidev_attr_s::domain</a></div><div class="ttdeci">unsigned short domain</div><div class="ttdef"><b>Definition:</b> hwloc.h:635</div></div>
+<div class="ttc" id="aa00277_html_aae99e035e8d1387d7b8768aaa8eceb0a"><div class="ttname"><a href="a00277.html#aae99e035e8d1387d7b8768aaa8eceb0a">hwloc_obj_attr_u::hwloc_pcidev_attr_s::bus</a></div><div class="ttdeci">unsigned char bus</div><div class="ttdef"><b>Definition:</b> hwloc.h:639</div></div>
+<div class="ttc" id="aa00297_html_a31e019e27e54ac6138d04be639bb96f9"><div class="ttname"><a href="a00297.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s::type</a></div><div class="ttdeci">hwloc_obj_osdev_type_t type</div><div class="ttdef"><b>Definition:</b> hwloc.h:666</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00173_source.html b/doc/doxygen-doc/html/a00173_source.html
new file mode 100644
index 00000000..b739eb1c
--- /dev/null
+++ b/doc/doxygen-doc/html/a00173_source.html
@@ -0,0 +1,183 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): levelzero.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_5cb306d949c7931a3b6c77517393dd34.html">hwloc</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">levelzero.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright © 2021 Inria.  All rights reserved.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160; </div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#ifndef HWLOC_LEVELZERO_H</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#define HWLOC_LEVELZERO_H</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160; </div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#include &quot;hwloc/autogen/config.h&quot;</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &quot;hwloc/helper.h&quot;</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#ifdef HWLOC_LINUX_SYS</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &quot;hwloc/linux.h&quot;</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &lt;level_zero/ze_api.h&gt;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#include &lt;level_zero/zes_api.h&gt;</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160; </div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160; </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160; </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160; </div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="a00237.html#ga66281a9ba621357b1c7070b4fa19b5b8">   60</a></span>&#160;<a class="code" href="a00237.html#ga66281a9ba621357b1c7070b4fa19b5b8">hwloc_levelzero_get_device_cpuset</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;                                  ze_device_handle_t device, <a class="code" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;{</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;<span class="preprocessor">#ifdef HWLOC_LINUX_SYS</span></div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;  <span class="comment">/* If we&#39;re on Linux, use the sysfs mechanism to get the local cpus */</span></div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="preprocessor">#define HWLOC_LEVELZERO_DEVICE_SYSFS_PATH_MAX 128</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;  <span class="keywordtype">char</span> path[HWLOC_LEVELZERO_DEVICE_SYSFS_PATH_MAX];</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;  zes_pci_properties_t pci;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;  zes_device_handle_t sdevice = device;</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;  ze_result_t res;</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160; </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;  <span class="keywordflow">if</span> (!<a class="code" href="a00205.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(topology)) {</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;    errno = EINVAL;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;  }</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160; </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;  res = zesDevicePciGetProperties(sdevice, &amp;pci);</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;  <span class="keywordflow">if</span> (res != ZE_RESULT_SUCCESS) {</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;    errno = EINVAL;</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;    <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;  }</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160; </div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;  sprintf(path, <span class="stringliteral">&quot;/sys/bus/pci/devices/%04x:%02x:%02x.%01x/local_cpus&quot;</span>,</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;          pci.address.domain, pci.address.bus, pci.address.device, pci.address.function);</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="a00227.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a>(path, set) &lt; 0</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;      || <a class="code" href="a00217.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(set))</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;    <a class="code" href="a00217.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00214.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;  <span class="comment">/* Non-Linux systems simply get a full cpuset */</span></div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;  <a class="code" href="a00217.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00214.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;  <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;}</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160; </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="a00237.html#gaf06cb737abcd2dc6db894c8914302d85">  109</a></span>&#160;<a class="code" href="a00237.html#gaf06cb737abcd2dc6db894c8914302d85">hwloc_levelzero_get_device_osdev</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, ze_device_handle_t device)</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;{</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;  zes_device_handle_t sdevice = device;</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;  zes_pci_properties_t pci;</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;  ze_result_t res;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;  <a class="code" href="a00253.html">hwloc_obj_t</a> osdev;</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160; </div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;  <span class="keywordflow">if</span> (!<a class="code" href="a00205.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(topology)) {</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;    errno = EINVAL;</div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;    <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;  }</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160; </div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;  res = zesDevicePciGetProperties(sdevice, &amp;pci);</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;  <span class="keywordflow">if</span> (res != ZE_RESULT_SUCCESS) {</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;    <span class="comment">/* L0 was likely initialized without sysman, don&#39;t bother */</span></div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;    errno = EINVAL;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;    <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;  }</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160; </div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;  osdev = NULL;</div>
+<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;  <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00216.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;    <a class="code" href="a00253.html">hwloc_obj_t</a> pcidev = osdev-&gt;<a class="code" href="a00253.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160; </div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;    <span class="keywordflow">if</span> (strncmp(osdev-&gt;<a class="code" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, <span class="stringliteral">&quot;ze&quot;</span>, 2))</div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;      <span class="keywordflow">continue</span>;</div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160; </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;    <span class="keywordflow">if</span> (pcidev</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;      &amp;&amp; pcidev-&gt;<a class="code" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;      &amp;&amp; pcidev-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00277.html#a8fba44988deb98613c1505a4019a34dc">domain</a> == pci.address.domain</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;      &amp;&amp; pcidev-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00277.html#aae99e035e8d1387d7b8768aaa8eceb0a">bus</a> == pci.address.bus</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;      &amp;&amp; pcidev-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00277.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">dev</a> == pci.address.device</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;      &amp;&amp; pcidev-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00277.html#a695f32df53f4ef728670bfcf31b74e0f">func</a> == pci.address.function)</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;      <span class="keywordflow">return</span> osdev;</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160; </div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;    <span class="comment">/* FIXME: when we&#39;ll have serialnumber, try it in case PCI is filtered-out */</span></div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;  }</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160; </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;  <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;}</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160; </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
+<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160; </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160; </div>
+<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_LEVELZERO_H */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="aa00195_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_PCI_DEVICE</div><div class="ttdoc">PCI device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:269</div></div>
+<div class="ttc" id="aa00198_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:692</div></div>
+<div class="ttc" id="aa00205_html_ga68ffdcfd9175cdf40709801092f18017"><div class="ttname"><a href="a00205.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a></div><div class="ttdeci">int hwloc_topology_is_thissystem(hwloc_topology_t restrict topology)</div><div class="ttdoc">Does the topology context come from this system?</div></div>
+<div class="ttc" id="aa00214_html_gaee30e03391c1ed7dfd617fb5c7bbb033"><div class="ttname"><a href="a00214.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a></div><div class="ttdeci">hwloc_const_cpuset_t hwloc_topology_get_complete_cpuset(hwloc_topology_t topology)</div><div class="ttdoc">Get complete CPU set.</div></div>
+<div class="ttc" id="aa00216_html_ga8b4584c8949e2c5f1c97ba7fe92b8145"><div class="ttname"><a href="a00216.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_osdev(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next OS device in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1191</div></div>
+<div class="ttc" id="aa00217_html_ga5b64be28f5a7176ed8ad0d6a90bdf108"><div class="ttname"><a href="a00217.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a></div><div class="ttdeci">int hwloc_bitmap_iszero(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Test whether bitmap bitmap is empty.</div></div>
+<div class="ttc" id="aa00217_html_ga72a29824798b48784b8217471ec8f14c"><div class="ttname"><a href="a00217.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a></div><div class="ttdeci">int hwloc_bitmap_copy(hwloc_bitmap_t dst, hwloc_const_bitmap_t src)</div><div class="ttdoc">Copy the contents of bitmap src into the already allocated bitmap dst.</div></div>
+<div class="ttc" id="aa00227_html_gaf72d83e273803226ce772973e37b85de"><div class="ttname"><a href="a00227.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a></div><div class="ttdeci">int hwloc_linux_read_path_as_cpumask(const char *path, hwloc_bitmap_t set)</div><div class="ttdoc">Convert a linux kernel cpumask file path into a hwloc bitmap set.</div></div>
+<div class="ttc" id="aa00237_html_ga66281a9ba621357b1c7070b4fa19b5b8"><div class="ttname"><a href="a00237.html#ga66281a9ba621357b1c7070b4fa19b5b8">hwloc_levelzero_get_device_cpuset</a></div><div class="ttdeci">static int hwloc_levelzero_get_device_cpuset(hwloc_topology_t topology, ze_device_handle_t device, hwloc_cpuset_t set)</div><div class="ttdoc">Get the CPU set of logical processors that are physically close to the Level Zero device device.</div><div class="ttdef"><b>Definition:</b> levelzero.h:60</div></div>
+<div class="ttc" id="aa00237_html_gaf06cb737abcd2dc6db894c8914302d85"><div class="ttname"><a href="a00237.html#gaf06cb737abcd2dc6db894c8914302d85">hwloc_levelzero_get_device_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_levelzero_get_device_osdev(hwloc_topology_t topology, ze_device_handle_t device)</div><div class="ttdoc">Get the hwloc OS device object corresponding to Level Zero device device.</div><div class="ttdef"><b>Definition:</b> levelzero.h:109</div></div>
+<div class="ttc" id="aa00253_html"><div class="ttname"><a href="a00253.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:396</div></div>
+<div class="ttc" id="aa00253_html_abb709ec38f2970677e4e57d1d30be96d"><div class="ttname"><a href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name str...</div><div class="ttdef"><b>Definition:</b> hwloc.h:408</div></div>
+<div class="ttc" id="aa00253_html_acc4f0803f244867e68fe0036800be5de"><div class="ttname"><a href="a00253.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj::type</a></div><div class="ttdeci">hwloc_obj_type_t type</div><div class="ttdoc">Type of object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:398</div></div>
+<div class="ttc" id="aa00253_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:415</div></div>
+<div class="ttc" id="aa00253_html_adc494f6aed939992be1c55cca5822900"><div class="ttname"><a href="a00253.html#adc494f6aed939992be1c55cca5822900">hwloc_obj::parent</a></div><div class="ttdeci">struct hwloc_obj * parent</div><div class="ttdoc">Parent, NULL if root (Machine object)</div><div class="ttdef"><b>Definition:</b> hwloc.h:446</div></div>
+<div class="ttc" id="aa00257_html_a0b66da7ab072f7c016f8ed86701f5a7c"><div class="ttname"><a href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">hwloc_obj_attr_u::pcidev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_pcidev_attr_s pcidev</div></div>
+<div class="ttc" id="aa00277_html_a3d70c84a12f7e93d14c8d47bf4fd9dc5"><div class="ttname"><a href="a00277.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">hwloc_obj_attr_u::hwloc_pcidev_attr_s::dev</a></div><div class="ttdeci">unsigned char dev</div><div class="ttdef"><b>Definition:</b> hwloc.h:639</div></div>
+<div class="ttc" id="aa00277_html_a695f32df53f4ef728670bfcf31b74e0f"><div class="ttname"><a href="a00277.html#a695f32df53f4ef728670bfcf31b74e0f">hwloc_obj_attr_u::hwloc_pcidev_attr_s::func</a></div><div class="ttdeci">unsigned char func</div><div class="ttdef"><b>Definition:</b> hwloc.h:639</div></div>
+<div class="ttc" id="aa00277_html_a8fba44988deb98613c1505a4019a34dc"><div class="ttname"><a href="a00277.html#a8fba44988deb98613c1505a4019a34dc">hwloc_obj_attr_u::hwloc_pcidev_attr_s::domain</a></div><div class="ttdeci">unsigned short domain</div><div class="ttdef"><b>Definition:</b> hwloc.h:635</div></div>
+<div class="ttc" id="aa00277_html_aae99e035e8d1387d7b8768aaa8eceb0a"><div class="ttname"><a href="a00277.html#aae99e035e8d1387d7b8768aaa8eceb0a">hwloc_obj_attr_u::hwloc_pcidev_attr_s::bus</a></div><div class="ttdeci">unsigned char bus</div><div class="ttdef"><b>Definition:</b> hwloc.h:639</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00176_source.html b/doc/doxygen-doc/html/a00176_source.html
new file mode 100644
index 00000000..54208043
--- /dev/null
+++ b/doc/doxygen-doc/html/a00176_source.html
@@ -0,0 +1,142 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): gl.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_5cb306d949c7931a3b6c77517393dd34.html">hwloc</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">gl.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright © 2012 Blue Brain Project, EPFL. All rights reserved.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * Copyright © 2012-2021 Inria.  All rights reserved.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160; </div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#ifndef HWLOC_GL_H</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#define HWLOC_GL_H</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160; </div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160; </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#include &lt;stdio.h&gt;</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160; </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160; </div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160; </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160; </div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="a00238.html#ga4d66a77e4fe4051d6e5b772c1b8fcec5">   54</a></span>&#160;<a class="code" href="a00238.html#ga4d66a77e4fe4051d6e5b772c1b8fcec5">hwloc_gl_get_display_osdev_by_port_device</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;                                          <span class="keywordtype">unsigned</span> port, <span class="keywordtype">unsigned</span> device)</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;{</div>
+<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;        <span class="keywordtype">unsigned</span> x = (unsigned) -1, y = (<span class="keywordtype">unsigned</span>) -1;</div>
+<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;        <a class="code" href="a00253.html">hwloc_obj_t</a> osdev = NULL;</div>
+<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;        <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00216.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
+<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;                <span class="keywordflow">if</span> (<a class="code" href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a> == osdev-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>.<a class="code" href="a00297.html#a31e019e27e54ac6138d04be639bb96f9">type</a></div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;                    &amp;&amp; osdev-&gt;<a class="code" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">name</a></div>
+<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;                    &amp;&amp; sscanf(osdev-&gt;<a class="code" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, <span class="stringliteral">&quot;:%u.%u&quot;</span>, &amp;x, &amp;y) == 2</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;                    &amp;&amp; port == x &amp;&amp; device == y)</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;                        <span class="keywordflow">return</span> osdev;</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;        }</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;        errno = EINVAL;</div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;        <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;}</div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160; </div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="a00238.html#ga2d36ef441d1dfddf49cfb5c01bd58d8e">   85</a></span>&#160;<a class="code" href="a00238.html#ga2d36ef441d1dfddf49cfb5c01bd58d8e">hwloc_gl_get_display_osdev_by_name</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;                                   <span class="keyword">const</span> <span class="keywordtype">char</span> *name)</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;{</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;        <a class="code" href="a00253.html">hwloc_obj_t</a> osdev = NULL;</div>
+<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;        <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00216.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;                <span class="keywordflow">if</span> (<a class="code" href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a> == osdev-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>.<a class="code" href="a00297.html#a31e019e27e54ac6138d04be639bb96f9">type</a></div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;                    &amp;&amp; osdev-&gt;<a class="code" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">name</a></div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;                    &amp;&amp; !strcmp(name, osdev-&gt;<a class="code" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">name</a>))</div>
+<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;                        <span class="keywordflow">return</span> osdev;</div>
+<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;        }</div>
+<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;        errno = EINVAL;</div>
+<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;        <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;}</div>
+<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160; </div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="a00238.html#ga936665ab5f0d29a081c4b78d11f4ad07">  112</a></span>&#160;<a class="code" href="a00238.html#ga936665ab5f0d29a081c4b78d11f4ad07">hwloc_gl_get_display_by_osdev</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;                              <a class="code" href="a00253.html">hwloc_obj_t</a> osdev,</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;                              <span class="keywordtype">unsigned</span> *port, <span class="keywordtype">unsigned</span> *device)</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;{</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;        <span class="keywordtype">unsigned</span> x = -1, y = -1;</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;        <span class="keywordflow">if</span> (<a class="code" href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a> == osdev-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>.<a class="code" href="a00297.html#a31e019e27e54ac6138d04be639bb96f9">type</a></div>
+<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;            &amp;&amp; sscanf(osdev-&gt;<a class="code" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, <span class="stringliteral">&quot;:%u.%u&quot;</span>, &amp;x, &amp;y) == 2) {</div>
+<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;                *port = x;</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;                *device = y;</div>
+<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;                <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;        }</div>
+<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;        errno = EINVAL;</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;        <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;}</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160; </div>
+<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160; </div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160; </div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_GL_H */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160; </div>
+<div class="ttc" id="aa00196_html_gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90"><div class="ttname"><a href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_GPU</div><div class="ttdoc">Operating system GPU device. For instance &quot;:0.0&quot; for a GL display, &quot;card0&quot; for a Linux DRM device.</div><div class="ttdef"><b>Definition:</b> hwloc.h:342</div></div>
+<div class="ttc" id="aa00198_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:692</div></div>
+<div class="ttc" id="aa00216_html_ga8b4584c8949e2c5f1c97ba7fe92b8145"><div class="ttname"><a href="a00216.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_osdev(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next OS device in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1191</div></div>
+<div class="ttc" id="aa00238_html_ga2d36ef441d1dfddf49cfb5c01bd58d8e"><div class="ttname"><a href="a00238.html#ga2d36ef441d1dfddf49cfb5c01bd58d8e">hwloc_gl_get_display_osdev_by_name</a></div><div class="ttdeci">static hwloc_obj_t hwloc_gl_get_display_osdev_by_name(hwloc_topology_t topology, const char *name)</div><div class="ttdoc">Get the hwloc OS device object corresponding to the OpenGL display given by name.</div><div class="ttdef"><b>Definition:</b> gl.h:85</div></div>
+<div class="ttc" id="aa00238_html_ga4d66a77e4fe4051d6e5b772c1b8fcec5"><div class="ttname"><a href="a00238.html#ga4d66a77e4fe4051d6e5b772c1b8fcec5">hwloc_gl_get_display_osdev_by_port_device</a></div><div class="ttdeci">static hwloc_obj_t hwloc_gl_get_display_osdev_by_port_device(hwloc_topology_t topology, unsigned port, unsigned device)</div><div class="ttdoc">Get the hwloc OS device object corresponding to the OpenGL display given by port and device index.</div><div class="ttdef"><b>Definition:</b> gl.h:54</div></div>
+<div class="ttc" id="aa00238_html_ga936665ab5f0d29a081c4b78d11f4ad07"><div class="ttname"><a href="a00238.html#ga936665ab5f0d29a081c4b78d11f4ad07">hwloc_gl_get_display_by_osdev</a></div><div class="ttdeci">static int hwloc_gl_get_display_by_osdev(hwloc_topology_t topology, hwloc_obj_t osdev, unsigned *port, unsigned *device)</div><div class="ttdoc">Get the OpenGL display port and device corresponding to the given hwloc OS object.</div><div class="ttdef"><b>Definition:</b> gl.h:112</div></div>
+<div class="ttc" id="aa00253_html"><div class="ttname"><a href="a00253.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:396</div></div>
+<div class="ttc" id="aa00253_html_abb709ec38f2970677e4e57d1d30be96d"><div class="ttname"><a href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name str...</div><div class="ttdef"><b>Definition:</b> hwloc.h:408</div></div>
+<div class="ttc" id="aa00253_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:415</div></div>
+<div class="ttc" id="aa00257_html_aaf7a5c38b5185703ff18c46ad2761dcf"><div class="ttname"><a href="a00257.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u::osdev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_osdev_attr_s osdev</div></div>
+<div class="ttc" id="aa00297_html_a31e019e27e54ac6138d04be639bb96f9"><div class="ttname"><a href="a00297.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s::type</a></div><div class="ttdeci">hwloc_obj_osdev_type_t type</div><div class="ttdef"><b>Definition:</b> hwloc.h:666</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00179_source.html b/doc/doxygen-doc/html/a00179_source.html
new file mode 100644
index 00000000..6d66b647
--- /dev/null
+++ b/doc/doxygen-doc/html/a00179_source.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): openfabrics-verbs.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_5cb306d949c7931a3b6c77517393dd34.html">hwloc</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">openfabrics-verbs.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright © 2009 CNRS</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * Copyright © 2009-2021 Inria.  All rights reserved.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Copyright © 2009-2010 Université Bordeaux</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * Copyright © 2009-2011 Cisco Systems, Inc.  All rights reserved.</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160; </div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#ifndef HWLOC_OPENFABRICS_VERBS_H</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#define HWLOC_OPENFABRICS_VERBS_H</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160; </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &quot;hwloc/autogen/config.h&quot;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#ifdef HWLOC_LINUX_SYS</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &quot;hwloc/linux.h&quot;</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160; </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor">#include &lt;infiniband/verbs.h&gt;</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160; </div>
+<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160; </div>
+<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160; </div>
+<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160; </div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="a00239.html#ga3ea0d838c1e7f1671b35687aae2da6ae">   62</a></span>&#160;<a class="code" href="a00239.html#ga3ea0d838c1e7f1671b35687aae2da6ae">hwloc_ibv_get_device_cpuset</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
+<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;                            <span class="keyword">struct</span> ibv_device *ibdev, <a class="code" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</div>
+<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;{</div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="preprocessor">#ifdef HWLOC_LINUX_SYS</span></div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;  <span class="comment">/* If we&#39;re on Linux, use the verbs-provided sysfs mechanism to</span></div>
+<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;<span class="comment">     get the local cpus */</span></div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;<span class="preprocessor">#define HWLOC_OPENFABRICS_VERBS_SYSFS_PATH_MAX 128</span></div>
+<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;  <span class="keywordtype">char</span> path[HWLOC_OPENFABRICS_VERBS_SYSFS_PATH_MAX];</div>
+<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160; </div>
+<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;  <span class="keywordflow">if</span> (!<a class="code" href="a00205.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(topology)) {</div>
+<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;    errno = EINVAL;</div>
+<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;  }</div>
+<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160; </div>
+<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;  sprintf(path, <span class="stringliteral">&quot;/sys/class/infiniband/%s/device/local_cpus&quot;</span>,</div>
+<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;          ibv_get_device_name(ibdev));</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="a00227.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a>(path, set) &lt; 0</div>
+<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;      || <a class="code" href="a00217.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(set))</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    <a class="code" href="a00217.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00214.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
+<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;  <span class="comment">/* Non-Linux systems simply get a full cpuset */</span></div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;  <a class="code" href="a00217.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00214.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;  <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;}</div>
+<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160; </div>
+<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="a00239.html#ga31d794567f4420bbdc8baa7bf8bf6138">  106</a></span>&#160;<a class="code" href="a00239.html#ga31d794567f4420bbdc8baa7bf8bf6138">hwloc_ibv_get_device_osdev_by_name</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;                                   <span class="keyword">const</span> <span class="keywordtype">char</span> *ibname)</div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;{</div>
+<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;        <a class="code" href="a00253.html">hwloc_obj_t</a> osdev = NULL;</div>
+<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;        <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00216.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
+<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;                <span class="keywordflow">if</span> (<a class="code" href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0a52157d03694fdae82dddd57ca8c973b6">HWLOC_OBJ_OSDEV_OPENFABRICS</a> == osdev-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>.<a class="code" href="a00297.html#a31e019e27e54ac6138d04be639bb96f9">type</a></div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;                    &amp;&amp; osdev-&gt;<a class="code" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">name</a> &amp;&amp; !strcmp(ibname, osdev-&gt;<a class="code" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">name</a>))</div>
+<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;                        <span class="keywordflow">return</span> osdev;</div>
+<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;        }</div>
+<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;        <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;}</div>
+<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160; </div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="a00239.html#ga7324cdfd5db6ed2669c051ef7e1b64e1">  134</a></span>&#160;<a class="code" href="a00239.html#ga7324cdfd5db6ed2669c051ef7e1b64e1">hwloc_ibv_get_device_osdev</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;                           <span class="keyword">struct</span> ibv_device *ibdev)</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;{</div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;        <span class="keywordflow">if</span> (!<a class="code" href="a00205.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(topology)) {</div>
+<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;                errno = EINVAL;</div>
+<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;                <span class="keywordflow">return</span> NULL;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;        }</div>
+<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="a00239.html#ga31d794567f4420bbdc8baa7bf8bf6138">hwloc_ibv_get_device_osdev_by_name</a>(topology, ibv_get_device_name(ibdev));</div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;}</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160; </div>
+<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160; </div>
+<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160; </div>
+<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_OPENFABRICS_VERBS_H */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="aa00195_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
+<div class="ttc" id="aa00196_html_gga64f5d539df299c97ae80ce53fc4b56c0a52157d03694fdae82dddd57ca8c973b6"><div class="ttname"><a href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0a52157d03694fdae82dddd57ca8c973b6">HWLOC_OBJ_OSDEV_OPENFABRICS</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_OPENFABRICS</div><div class="ttdoc">Operating system openfabrics device. For instance the &quot;mlx4_0&quot; InfiniBand HCA, &quot;hfi1_0&quot; Omni-Path int...</div><div class="ttdef"><b>Definition:</b> hwloc.h:347</div></div>
+<div class="ttc" id="aa00198_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:692</div></div>
+<div class="ttc" id="aa00205_html_ga68ffdcfd9175cdf40709801092f18017"><div class="ttname"><a href="a00205.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a></div><div class="ttdeci">int hwloc_topology_is_thissystem(hwloc_topology_t restrict topology)</div><div class="ttdoc">Does the topology context come from this system?</div></div>
+<div class="ttc" id="aa00214_html_gaee30e03391c1ed7dfd617fb5c7bbb033"><div class="ttname"><a href="a00214.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a></div><div class="ttdeci">hwloc_const_cpuset_t hwloc_topology_get_complete_cpuset(hwloc_topology_t topology)</div><div class="ttdoc">Get complete CPU set.</div></div>
+<div class="ttc" id="aa00216_html_ga8b4584c8949e2c5f1c97ba7fe92b8145"><div class="ttname"><a href="a00216.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_osdev(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next OS device in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1191</div></div>
+<div class="ttc" id="aa00217_html_ga5b64be28f5a7176ed8ad0d6a90bdf108"><div class="ttname"><a href="a00217.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a></div><div class="ttdeci">int hwloc_bitmap_iszero(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Test whether bitmap bitmap is empty.</div></div>
+<div class="ttc" id="aa00217_html_ga72a29824798b48784b8217471ec8f14c"><div class="ttname"><a href="a00217.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a></div><div class="ttdeci">int hwloc_bitmap_copy(hwloc_bitmap_t dst, hwloc_const_bitmap_t src)</div><div class="ttdoc">Copy the contents of bitmap src into the already allocated bitmap dst.</div></div>
+<div class="ttc" id="aa00227_html_gaf72d83e273803226ce772973e37b85de"><div class="ttname"><a href="a00227.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a></div><div class="ttdeci">int hwloc_linux_read_path_as_cpumask(const char *path, hwloc_bitmap_t set)</div><div class="ttdoc">Convert a linux kernel cpumask file path into a hwloc bitmap set.</div></div>
+<div class="ttc" id="aa00239_html_ga31d794567f4420bbdc8baa7bf8bf6138"><div class="ttname"><a href="a00239.html#ga31d794567f4420bbdc8baa7bf8bf6138">hwloc_ibv_get_device_osdev_by_name</a></div><div class="ttdeci">static hwloc_obj_t hwloc_ibv_get_device_osdev_by_name(hwloc_topology_t topology, const char *ibname)</div><div class="ttdoc">Get the hwloc OS device object corresponding to the OpenFabrics device named ibname.</div><div class="ttdef"><b>Definition:</b> openfabrics-verbs.h:106</div></div>
+<div class="ttc" id="aa00239_html_ga3ea0d838c1e7f1671b35687aae2da6ae"><div class="ttname"><a href="a00239.html#ga3ea0d838c1e7f1671b35687aae2da6ae">hwloc_ibv_get_device_cpuset</a></div><div class="ttdeci">static int hwloc_ibv_get_device_cpuset(hwloc_topology_t topology, struct ibv_device *ibdev, hwloc_cpuset_t set)</div><div class="ttdoc">Get the CPU set of processors that are physically close to device ibdev.</div><div class="ttdef"><b>Definition:</b> openfabrics-verbs.h:62</div></div>
+<div class="ttc" id="aa00239_html_ga7324cdfd5db6ed2669c051ef7e1b64e1"><div class="ttname"><a href="a00239.html#ga7324cdfd5db6ed2669c051ef7e1b64e1">hwloc_ibv_get_device_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_ibv_get_device_osdev(hwloc_topology_t topology, struct ibv_device *ibdev)</div><div class="ttdoc">Get the hwloc OS device object corresponding to the OpenFabrics device ibdev.</div><div class="ttdef"><b>Definition:</b> openfabrics-verbs.h:134</div></div>
+<div class="ttc" id="aa00253_html"><div class="ttname"><a href="a00253.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:396</div></div>
+<div class="ttc" id="aa00253_html_abb709ec38f2970677e4e57d1d30be96d"><div class="ttname"><a href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name str...</div><div class="ttdef"><b>Definition:</b> hwloc.h:408</div></div>
+<div class="ttc" id="aa00253_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:415</div></div>
+<div class="ttc" id="aa00257_html_aaf7a5c38b5185703ff18c46ad2761dcf"><div class="ttname"><a href="a00257.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u::osdev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_osdev_attr_s osdev</div></div>
+<div class="ttc" id="aa00297_html_a31e019e27e54ac6138d04be639bb96f9"><div class="ttname"><a href="a00297.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s::type</a></div><div class="ttdeci">hwloc_obj_osdev_type_t type</div><div class="ttdef"><b>Definition:</b> hwloc.h:666</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00182_source.html b/doc/doxygen-doc/html/a00182_source.html
new file mode 100644
index 00000000..5ae3b2b7
--- /dev/null
+++ b/doc/doxygen-doc/html/a00182_source.html
@@ -0,0 +1,213 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): diff.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_5cb306d949c7931a3b6c77517393dd34.html">hwloc</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">diff.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright © 2013-2020 Inria.  All rights reserved.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160; </div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor">#ifndef HWLOC_DIFF_H</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor">#define HWLOC_DIFF_H</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160; </div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#ifndef HWLOC_H</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#error Please include the main hwloc.h instead</span></div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160; </div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160; </div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#elif 0</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;}</div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160; </div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160; </div>
+<div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="a00240.html#ga86f044210b0a9e9fa83acbdbbf7e05fd">   62</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="a00240.html#ga86f044210b0a9e9fa83acbdbbf7e05fd">hwloc_topology_diff_obj_attr_type_e</a> {</div>
+<div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="a00240.html#gga86f044210b0a9e9fa83acbdbbf7e05fdabc7f0c7ed0b6864e902f4b70f2c7bc94">   67</a></span>&#160;  <a class="code" href="a00240.html#gga86f044210b0a9e9fa83acbdbbf7e05fdabc7f0c7ed0b6864e902f4b70f2c7bc94">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_SIZE</a>,</div>
+<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160; </div>
+<div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="a00240.html#gga86f044210b0a9e9fa83acbdbbf7e05fda94a8f37c51d62d15ac6192665dd49310">   74</a></span>&#160;  <a class="code" href="a00240.html#gga86f044210b0a9e9fa83acbdbbf7e05fda94a8f37c51d62d15ac6192665dd49310">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_NAME</a>,</div>
+<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;  <a class="code" href="a00240.html#gga86f044210b0a9e9fa83acbdbbf7e05fda63430bf932434bc456282f636d39c2c2">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_INFO</a></div>
+<div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="a00240.html#gga86f044210b0a9e9fa83acbdbbf7e05fda63430bf932434bc456282f636d39c2c2">   79</a></span>&#160;} <a class="code" href="a00240.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a>;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160; </div>
+<div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="a00349.html">   83</a></span>&#160;<span class="keyword">union </span><a class="code" href="a00349.html">hwloc_topology_diff_obj_attr_u</a> {</div>
+<div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="a00353.html">   84</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="a00353.html">hwloc_topology_diff_obj_attr_generic_s</a> {</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;    <span class="comment">/* each part of the union must start with these */</span></div>
+<div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="a00353.html#a43f8133b7c30129b002c2d295e6580fc">   86</a></span>&#160;    <a class="code" href="a00240.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a> <a class="code" href="a00353.html#a43f8133b7c30129b002c2d295e6580fc">type</a>;</div>
+<div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="a00349.html#aeb449c0e04b14ebf8c3126756b6364f9">   87</a></span>&#160;  } <span class="keyword">generic</span>;</div>
+<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160; </div>
+<div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="a00357.html">   90</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="a00357.html">hwloc_topology_diff_obj_attr_uint64_s</a> {</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    <span class="comment">/* used for storing integer attributes */</span></div>
+<div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="a00357.html#afe262b9aa558fe7bfecbd37a7a129197">   92</a></span>&#160;    <a class="code" href="a00240.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a> <a class="code" href="a00357.html#afe262b9aa558fe7bfecbd37a7a129197">type</a>;</div>
+<div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="a00357.html#adb772c3f1761ecadf496c80ae14afce3">   93</a></span>&#160;    hwloc_uint64_t <a class="code" href="a00357.html#adb772c3f1761ecadf496c80ae14afce3">index</a>; <span class="comment">/* not used for SIZE */</span></div>
+<div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="a00357.html#a44c0894dce563335d347fde6595c49c9">   94</a></span>&#160;    hwloc_uint64_t <a class="code" href="a00357.html#a44c0894dce563335d347fde6595c49c9">oldvalue</a>;</div>
+<div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="a00357.html#ae63aa59ad65aa783b730a4f213304eb4">   95</a></span>&#160;    hwloc_uint64_t <a class="code" href="a00357.html#ae63aa59ad65aa783b730a4f213304eb4">newvalue</a>;</div>
+<div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="a00349.html#a4608ade88460f5f208887775e5a69a0a">   96</a></span>&#160;  } <a class="code" href="a00349.html#a4608ade88460f5f208887775e5a69a0a">uint64</a>;</div>
+<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160; </div>
+<div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="a00361.html">   99</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="a00361.html">hwloc_topology_diff_obj_attr_string_s</a> {</div>
+<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;    <span class="comment">/* used for storing name and info pairs */</span></div>
+<div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="a00361.html#a784ab5827c1bf531b86d1f02f199d04d">  101</a></span>&#160;    <a class="code" href="a00240.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a> <a class="code" href="a00361.html#a784ab5827c1bf531b86d1f02f199d04d">type</a>;</div>
+<div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="a00361.html#a7ef48c66ccddf34d90edb4e4314b41c6">  102</a></span>&#160;    <span class="keywordtype">char</span> *<a class="code" href="a00361.html#a7ef48c66ccddf34d90edb4e4314b41c6">name</a>; <span class="comment">/* not used for NAME */</span></div>
+<div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="a00361.html#a33cc281d4417129064295a6ae7b79818">  103</a></span>&#160;    <span class="keywordtype">char</span> *<a class="code" href="a00361.html#a33cc281d4417129064295a6ae7b79818">oldvalue</a>;</div>
+<div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="a00361.html#a75f37f4add21cece50fee2701c3b77db">  104</a></span>&#160;    <span class="keywordtype">char</span> *<a class="code" href="a00361.html#a75f37f4add21cece50fee2701c3b77db">newvalue</a>;</div>
+<div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="a00349.html#a42fa15c37f1f59ef638066c4c62c3154">  105</a></span>&#160;  } <a class="code" href="a00349.html#a42fa15c37f1f59ef638066c4c62c3154">string</a>;</div>
+<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;};</div>
+<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160; </div>
+<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160; </div>
+<div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="a00240.html#ga38b28b7423b85a3321e6d0062d5f83d0">  111</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="a00240.html#ga38b28b7423b85a3321e6d0062d5f83d0">hwloc_topology_diff_type_e</a> {</div>
+<div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="a00240.html#gga38b28b7423b85a3321e6d0062d5f83d0accbcaee230f79989debb284c8626f0c0">  115</a></span>&#160;  <a class="code" href="a00240.html#gga38b28b7423b85a3321e6d0062d5f83d0accbcaee230f79989debb284c8626f0c0">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR</a>,</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160; </div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;  <a class="code" href="a00240.html#gga38b28b7423b85a3321e6d0062d5f83d0a3dc01fdeff355efe3fb2516bb454a147">HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX</a></div>
+<div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="a00240.html#gga38b28b7423b85a3321e6d0062d5f83d0a3dc01fdeff355efe3fb2516bb454a147">  125</a></span>&#160;} <a class="code" href="a00240.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a>;</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160; </div>
+<div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="a00365.html">  129</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">union </span><a class="code" href="a00365.html">hwloc_topology_diff_u</a> {</div>
+<div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="a00369.html">  130</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="a00369.html">hwloc_topology_diff_generic_s</a> {</div>
+<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    <span class="comment">/* each part of the union must start with these */</span></div>
+<div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="a00369.html#a373005489fcddeba6319163e60263ae8">  132</a></span>&#160;    <a class="code" href="a00240.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a> <a class="code" href="a00369.html#a373005489fcddeba6319163e60263ae8">type</a>;</div>
+<div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="a00369.html#a720aa94eb73cddfd8d6bf9fcbbfc035e">  133</a></span>&#160;    <span class="keyword">union </span><a class="code" href="a00365.html">hwloc_topology_diff_u</a> * <a class="code" href="a00369.html#a720aa94eb73cddfd8d6bf9fcbbfc035e">next</a>; <span class="comment">/* pointer to the next element of the list, or NULL */</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="a00365.html#a0dd2cbfba0eca2fc7a2645668bcae0f8">  134</a></span>&#160;  } <span class="keyword">generic</span>;</div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160; </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;  <span class="comment">/* A difference in an object attribute. */</span></div>
+<div class="line"><a name="l00137"></a><span class="lineno"><a class="line" href="a00373.html">  137</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="a00373.html">hwloc_topology_diff_obj_attr_s</a> {</div>
+<div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="a00373.html#a70a118ad288bd98f18c8ce6dc52e2d10">  138</a></span>&#160;    <a class="code" href="a00240.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a> <a class="code" href="a00373.html#a70a118ad288bd98f18c8ce6dc52e2d10">type</a>; <span class="comment">/* must be ::HWLOC_TOPOLOGY_DIFF_OBJ_ATTR */</span></div>
+<div class="line"><a name="l00139"></a><span class="lineno"><a class="line" href="a00373.html#acb9170a8eb3392656d70f7f3ef3e3eed">  139</a></span>&#160;    <span class="keyword">union </span><a class="code" href="a00365.html">hwloc_topology_diff_u</a> * <a class="code" href="a00373.html#acb9170a8eb3392656d70f7f3ef3e3eed">next</a>;</div>
+<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;    <span class="comment">/* List of attribute differences for a single object */</span></div>
+<div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="a00373.html#a82c1d4bab80b9e0bf301a9d8291893e0">  141</a></span>&#160;    <span class="keywordtype">int</span> <a class="code" href="a00373.html#a82c1d4bab80b9e0bf301a9d8291893e0">obj_depth</a>;</div>
+<div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="a00373.html#a91f0645f9062e892652357cd141c8ebb">  142</a></span>&#160;    <span class="keywordtype">unsigned</span> obj_index;</div>
+<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;    <span class="keyword">union </span><a class="code" href="a00349.html">hwloc_topology_diff_obj_attr_u</a> diff;</div>
+<div class="line"><a name="l00144"></a><span class="lineno"><a class="line" href="a00365.html#a01dca644feea48448b36baa60cf4c07f">  144</a></span>&#160;  } obj_attr;</div>
+<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160; </div>
+<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;  <span class="comment">/* A difference that is too complex. */</span></div>
+<div class="line"><a name="l00147"></a><span class="lineno"><a class="line" href="a00377.html">  147</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="a00377.html">hwloc_topology_diff_too_complex_s</a> {</div>
+<div class="line"><a name="l00148"></a><span class="lineno"><a class="line" href="a00377.html#a92084295a4d6faf17a95a7eea526ddbd">  148</a></span>&#160;    <a class="code" href="a00240.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a> <a class="code" href="a00377.html#a92084295a4d6faf17a95a7eea526ddbd">type</a>; <span class="comment">/* must be ::HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX */</span></div>
+<div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="a00377.html#a375afbaa043b109be689a7d9a3c7d153">  149</a></span>&#160;    <span class="keyword">union </span><a class="code" href="a00365.html">hwloc_topology_diff_u</a> * <a class="code" href="a00377.html#a375afbaa043b109be689a7d9a3c7d153">next</a>;</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;    <span class="comment">/* Where we had to stop computing the diff in the first topology */</span></div>
+<div class="line"><a name="l00151"></a><span class="lineno"><a class="line" href="a00377.html#a94c6498caeaafbb79927395d918d6cb3">  151</a></span>&#160;    <span class="keywordtype">int</span> <a class="code" href="a00377.html#a94c6498caeaafbb79927395d918d6cb3">obj_depth</a>;</div>
+<div class="line"><a name="l00152"></a><span class="lineno"><a class="line" href="a00377.html#a6dc6b3c4adb10db74d993e37afaa0580">  152</a></span>&#160;    <span class="keywordtype">unsigned</span> <a class="code" href="a00377.html#a6dc6b3c4adb10db74d993e37afaa0580">obj_index</a>;</div>
+<div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="a00365.html#af7dc1148eb656c56e9678218cafd027b">  153</a></span>&#160;  } too_complex;</div>
+<div class="line"><a name="l00154"></a><span class="lineno"><a class="line" href="a00240.html#ga1bd6363f26f7961f83153aaa484a9b85">  154</a></span>&#160;} * <a class="code" href="a00240.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a>;</div>
+<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160; </div>
+<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160; </div>
+<div class="line"><a name="l00194"></a><span class="lineno"><a class="line" href="a00240.html#ga8a1754f69fbb31364ea3ea2c39827c9f">  194</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00240.html#ga8a1754f69fbb31364ea3ea2c39827c9f">hwloc_topology_diff_build</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> newtopology, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags, <a class="code" href="a00365.html">hwloc_topology_diff_t</a> *diff);</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160; </div>
+<div class="line"><a name="l00198"></a><span class="lineno"><a class="line" href="a00240.html#gada4c1273ce020afaf02b649496f7edf5">  198</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00240.html#gada4c1273ce020afaf02b649496f7edf5">hwloc_topology_diff_apply_flags_e</a> {</div>
+<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;  <a class="code" href="a00240.html#ggada4c1273ce020afaf02b649496f7edf5a821a160512d67ea0dd05dab873d2fc54">HWLOC_TOPOLOGY_DIFF_APPLY_REVERSE</a> = (1UL&lt;&lt;0)</div>
+<div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="a00240.html#ggada4c1273ce020afaf02b649496f7edf5a821a160512d67ea0dd05dab873d2fc54">  203</a></span>&#160;};</div>
+<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160; </div>
+<div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="a00240.html#gae7b350d7e7478a4c6047b08aa6544f40">  222</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00240.html#gae7b350d7e7478a4c6047b08aa6544f40">hwloc_topology_diff_apply</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00365.html">hwloc_topology_diff_t</a> diff, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
+<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160; </div>
+<div class="line"><a name="l00226"></a><span class="lineno"><a class="line" href="a00240.html#ga5dcff18f80583ac6505a94ba2877fd1b">  226</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00240.html#ga5dcff18f80583ac6505a94ba2877fd1b">hwloc_topology_diff_destroy</a>(<a class="code" href="a00365.html">hwloc_topology_diff_t</a> diff);</div>
+<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160; </div>
+<div class="line"><a name="l00239"></a><span class="lineno"><a class="line" href="a00240.html#ga2cd902ce8766e90d4f2523a8e87640e9">  239</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00240.html#ga2cd902ce8766e90d4f2523a8e87640e9">hwloc_topology_diff_load_xml</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *xmlpath, <a class="code" href="a00365.html">hwloc_topology_diff_t</a> *diff, <span class="keywordtype">char</span> **refname);</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160; </div>
+<div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="a00240.html#ga8a14dd7d01efbdd97af7fe85e8b84b20">  250</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00240.html#ga8a14dd7d01efbdd97af7fe85e8b84b20">hwloc_topology_diff_export_xml</a>(<a class="code" href="a00365.html">hwloc_topology_diff_t</a> diff, <span class="keyword">const</span> <span class="keywordtype">char</span> *refname, <span class="keyword">const</span> <span class="keywordtype">char</span> *xmlpath);</div>
+<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160; </div>
+<div class="line"><a name="l00263"></a><span class="lineno"><a class="line" href="a00240.html#gad693810a5c51628529b9dd56f040fb81">  263</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00240.html#gad693810a5c51628529b9dd56f040fb81">hwloc_topology_diff_load_xmlbuffer</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *xmlbuffer, <span class="keywordtype">int</span> buflen, <a class="code" href="a00365.html">hwloc_topology_diff_t</a> *diff, <span class="keywordtype">char</span> **refname);</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160; </div>
+<div class="line"><a name="l00279"></a><span class="lineno"><a class="line" href="a00240.html#gaa2f0918df60c1c4a0bef9411f7d92a13">  279</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00240.html#gaa2f0918df60c1c4a0bef9411f7d92a13">hwloc_topology_diff_export_xmlbuffer</a>(<a class="code" href="a00365.html">hwloc_topology_diff_t</a> diff, <span class="keyword">const</span> <span class="keywordtype">char</span> *refname, <span class="keywordtype">char</span> **xmlbuffer, <span class="keywordtype">int</span> *buflen);</div>
+<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160; </div>
+<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
+<div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160; </div>
+<div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160; </div>
+<div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_DIFF_H */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="aa00198_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:692</div></div>
+<div class="ttc" id="aa00240_html_ga1bd6363f26f7961f83153aaa484a9b85"><div class="ttname"><a href="a00240.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a></div><div class="ttdeci">union hwloc_topology_diff_u * hwloc_topology_diff_t</div><div class="ttdoc">One element of a difference list between two topologies.</div></div>
+<div class="ttc" id="aa00240_html_ga2cd902ce8766e90d4f2523a8e87640e9"><div class="ttname"><a href="a00240.html#ga2cd902ce8766e90d4f2523a8e87640e9">hwloc_topology_diff_load_xml</a></div><div class="ttdeci">int hwloc_topology_diff_load_xml(const char *xmlpath, hwloc_topology_diff_t *diff, char **refname)</div><div class="ttdoc">Load a list of topology differences from a XML file.</div></div>
+<div class="ttc" id="aa00240_html_ga38b28b7423b85a3321e6d0062d5f83d0"><div class="ttname"><a href="a00240.html#ga38b28b7423b85a3321e6d0062d5f83d0">hwloc_topology_diff_type_e</a></div><div class="ttdeci">hwloc_topology_diff_type_e</div><div class="ttdoc">Type of one element of a difference list.</div><div class="ttdef"><b>Definition:</b> diff.h:111</div></div>
+<div class="ttc" id="aa00240_html_ga5dcff18f80583ac6505a94ba2877fd1b"><div class="ttname"><a href="a00240.html#ga5dcff18f80583ac6505a94ba2877fd1b">hwloc_topology_diff_destroy</a></div><div class="ttdeci">int hwloc_topology_diff_destroy(hwloc_topology_diff_t diff)</div><div class="ttdoc">Destroy a list of topology differences.</div></div>
+<div class="ttc" id="aa00240_html_ga74a3fefbaa17582fea86d76b312d6254"><div class="ttname"><a href="a00240.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a></div><div class="ttdeci">enum hwloc_topology_diff_obj_attr_type_e hwloc_topology_diff_obj_attr_type_t</div><div class="ttdoc">Type of one object attribute difference.</div></div>
+<div class="ttc" id="aa00240_html_ga8470f631b7365c839d3e40d38c5b6291"><div class="ttname"><a href="a00240.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a></div><div class="ttdeci">enum hwloc_topology_diff_type_e hwloc_topology_diff_type_t</div><div class="ttdoc">Type of one element of a difference list.</div></div>
+<div class="ttc" id="aa00240_html_ga86f044210b0a9e9fa83acbdbbf7e05fd"><div class="ttname"><a href="a00240.html#ga86f044210b0a9e9fa83acbdbbf7e05fd">hwloc_topology_diff_obj_attr_type_e</a></div><div class="ttdeci">hwloc_topology_diff_obj_attr_type_e</div><div class="ttdoc">Type of one object attribute difference.</div><div class="ttdef"><b>Definition:</b> diff.h:62</div></div>
+<div class="ttc" id="aa00240_html_ga8a14dd7d01efbdd97af7fe85e8b84b20"><div class="ttname"><a href="a00240.html#ga8a14dd7d01efbdd97af7fe85e8b84b20">hwloc_topology_diff_export_xml</a></div><div class="ttdeci">int hwloc_topology_diff_export_xml(hwloc_topology_diff_t diff, const char *refname, const char *xmlpath)</div><div class="ttdoc">Export a list of topology differences to a XML file.</div></div>
+<div class="ttc" id="aa00240_html_ga8a1754f69fbb31364ea3ea2c39827c9f"><div class="ttname"><a href="a00240.html#ga8a1754f69fbb31364ea3ea2c39827c9f">hwloc_topology_diff_build</a></div><div class="ttdeci">int hwloc_topology_diff_build(hwloc_topology_t topology, hwloc_topology_t newtopology, unsigned long flags, hwloc_topology_diff_t *diff)</div><div class="ttdoc">Compute the difference between 2 topologies.</div></div>
+<div class="ttc" id="aa00240_html_gaa2f0918df60c1c4a0bef9411f7d92a13"><div class="ttname"><a href="a00240.html#gaa2f0918df60c1c4a0bef9411f7d92a13">hwloc_topology_diff_export_xmlbuffer</a></div><div class="ttdeci">int hwloc_topology_diff_export_xmlbuffer(hwloc_topology_diff_t diff, const char *refname, char **xmlbuffer, int *buflen)</div><div class="ttdoc">Export a list of topology differences to a XML buffer.</div></div>
+<div class="ttc" id="aa00240_html_gad693810a5c51628529b9dd56f040fb81"><div class="ttname"><a href="a00240.html#gad693810a5c51628529b9dd56f040fb81">hwloc_topology_diff_load_xmlbuffer</a></div><div class="ttdeci">int hwloc_topology_diff_load_xmlbuffer(const char *xmlbuffer, int buflen, hwloc_topology_diff_t *diff, char **refname)</div><div class="ttdoc">Load a list of topology differences from a XML buffer.</div></div>
+<div class="ttc" id="aa00240_html_gada4c1273ce020afaf02b649496f7edf5"><div class="ttname"><a href="a00240.html#gada4c1273ce020afaf02b649496f7edf5">hwloc_topology_diff_apply_flags_e</a></div><div class="ttdeci">hwloc_topology_diff_apply_flags_e</div><div class="ttdoc">Flags to be given to hwloc_topology_diff_apply().</div><div class="ttdef"><b>Definition:</b> diff.h:198</div></div>
+<div class="ttc" id="aa00240_html_gae7b350d7e7478a4c6047b08aa6544f40"><div class="ttname"><a href="a00240.html#gae7b350d7e7478a4c6047b08aa6544f40">hwloc_topology_diff_apply</a></div><div class="ttdeci">int hwloc_topology_diff_apply(hwloc_topology_t topology, hwloc_topology_diff_t diff, unsigned long flags)</div><div class="ttdoc">Apply a topology diff to an existing topology.</div></div>
+<div class="ttc" id="aa00240_html_gga38b28b7423b85a3321e6d0062d5f83d0a3dc01fdeff355efe3fb2516bb454a147"><div class="ttname"><a href="a00240.html#gga38b28b7423b85a3321e6d0062d5f83d0a3dc01fdeff355efe3fb2516bb454a147">HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX</div><div class="ttdoc">The difference is too complex, it cannot be represented. The difference below this object has not bee...</div><div class="ttdef"><b>Definition:</b> diff.h:124</div></div>
+<div class="ttc" id="aa00240_html_gga38b28b7423b85a3321e6d0062d5f83d0accbcaee230f79989debb284c8626f0c0"><div class="ttname"><a href="a00240.html#gga38b28b7423b85a3321e6d0062d5f83d0accbcaee230f79989debb284c8626f0c0">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_DIFF_OBJ_ATTR</div><div class="ttdoc">An object attribute was changed. The union is a hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s...</div><div class="ttdef"><b>Definition:</b> diff.h:115</div></div>
+<div class="ttc" id="aa00240_html_gga86f044210b0a9e9fa83acbdbbf7e05fda63430bf932434bc456282f636d39c2c2"><div class="ttname"><a href="a00240.html#gga86f044210b0a9e9fa83acbdbbf7e05fda63430bf932434bc456282f636d39c2c2">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_INFO</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_INFO</div><div class="ttdoc">the value of an info attribute is modified. The union is a hwloc_topology_diff_obj_attr_u::hwloc_topo...</div><div class="ttdef"><b>Definition:</b> diff.h:78</div></div>
+<div class="ttc" id="aa00240_html_gga86f044210b0a9e9fa83acbdbbf7e05fda94a8f37c51d62d15ac6192665dd49310"><div class="ttname"><a href="a00240.html#gga86f044210b0a9e9fa83acbdbbf7e05fda94a8f37c51d62d15ac6192665dd49310">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_NAME</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_NAME</div><div class="ttdoc">The object name is modified. The union is a hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_a...</div><div class="ttdef"><b>Definition:</b> diff.h:74</div></div>
+<div class="ttc" id="aa00240_html_gga86f044210b0a9e9fa83acbdbbf7e05fdabc7f0c7ed0b6864e902f4b70f2c7bc94"><div class="ttname"><a href="a00240.html#gga86f044210b0a9e9fa83acbdbbf7e05fdabc7f0c7ed0b6864e902f4b70f2c7bc94">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_SIZE</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_SIZE</div><div class="ttdoc">The object local memory is modified. The union is a hwloc_topology_diff_obj_attr_u::hwloc_topology_di...</div><div class="ttdef"><b>Definition:</b> diff.h:67</div></div>
+<div class="ttc" id="aa00240_html_ggada4c1273ce020afaf02b649496f7edf5a821a160512d67ea0dd05dab873d2fc54"><div class="ttname"><a href="a00240.html#ggada4c1273ce020afaf02b649496f7edf5a821a160512d67ea0dd05dab873d2fc54">HWLOC_TOPOLOGY_DIFF_APPLY_REVERSE</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_DIFF_APPLY_REVERSE</div><div class="ttdoc">Apply topology diff in reverse direction.</div><div class="ttdef"><b>Definition:</b> diff.h:202</div></div>
+<div class="ttc" id="aa00349_html"><div class="ttname"><a href="a00349.html">hwloc_topology_diff_obj_attr_u</a></div><div class="ttdoc">One object attribute difference.</div><div class="ttdef"><b>Definition:</b> diff.h:83</div></div>
+<div class="ttc" id="aa00349_html_a42fa15c37f1f59ef638066c4c62c3154"><div class="ttname"><a href="a00349.html#a42fa15c37f1f59ef638066c4c62c3154">hwloc_topology_diff_obj_attr_u::string</a></div><div class="ttdeci">struct hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s string</div></div>
+<div class="ttc" id="aa00349_html_a4608ade88460f5f208887775e5a69a0a"><div class="ttname"><a href="a00349.html#a4608ade88460f5f208887775e5a69a0a">hwloc_topology_diff_obj_attr_u::uint64</a></div><div class="ttdeci">struct hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s uint64</div></div>
+<div class="ttc" id="aa00353_html"><div class="ttname"><a href="a00353.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s</a></div><div class="ttdef"><b>Definition:</b> diff.h:84</div></div>
+<div class="ttc" id="aa00353_html_a43f8133b7c30129b002c2d295e6580fc"><div class="ttname"><a href="a00353.html#a43f8133b7c30129b002c2d295e6580fc">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s::type</a></div><div class="ttdeci">hwloc_topology_diff_obj_attr_type_t type</div><div class="ttdef"><b>Definition:</b> diff.h:86</div></div>
+<div class="ttc" id="aa00357_html"><div class="ttname"><a href="a00357.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a></div><div class="ttdoc">Integer attribute modification with an optional index.</div><div class="ttdef"><b>Definition:</b> diff.h:90</div></div>
+<div class="ttc" id="aa00357_html_a44c0894dce563335d347fde6595c49c9"><div class="ttname"><a href="a00357.html#a44c0894dce563335d347fde6595c49c9">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s::oldvalue</a></div><div class="ttdeci">hwloc_uint64_t oldvalue</div><div class="ttdef"><b>Definition:</b> diff.h:94</div></div>
+<div class="ttc" id="aa00357_html_adb772c3f1761ecadf496c80ae14afce3"><div class="ttname"><a href="a00357.html#adb772c3f1761ecadf496c80ae14afce3">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s::index</a></div><div class="ttdeci">hwloc_uint64_t index</div><div class="ttdef"><b>Definition:</b> diff.h:93</div></div>
+<div class="ttc" id="aa00357_html_ae63aa59ad65aa783b730a4f213304eb4"><div class="ttname"><a href="a00357.html#ae63aa59ad65aa783b730a4f213304eb4">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s::newvalue</a></div><div class="ttdeci">hwloc_uint64_t newvalue</div><div class="ttdef"><b>Definition:</b> diff.h:95</div></div>
+<div class="ttc" id="aa00357_html_afe262b9aa558fe7bfecbd37a7a129197"><div class="ttname"><a href="a00357.html#afe262b9aa558fe7bfecbd37a7a129197">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s::type</a></div><div class="ttdeci">hwloc_topology_diff_obj_attr_type_t type</div><div class="ttdef"><b>Definition:</b> diff.h:92</div></div>
+<div class="ttc" id="aa00361_html"><div class="ttname"><a href="a00361.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a></div><div class="ttdoc">String attribute modification with an optional name.</div><div class="ttdef"><b>Definition:</b> diff.h:99</div></div>
+<div class="ttc" id="aa00361_html_a33cc281d4417129064295a6ae7b79818"><div class="ttname"><a href="a00361.html#a33cc281d4417129064295a6ae7b79818">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s::oldvalue</a></div><div class="ttdeci">char * oldvalue</div><div class="ttdef"><b>Definition:</b> diff.h:103</div></div>
+<div class="ttc" id="aa00361_html_a75f37f4add21cece50fee2701c3b77db"><div class="ttname"><a href="a00361.html#a75f37f4add21cece50fee2701c3b77db">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s::newvalue</a></div><div class="ttdeci">char * newvalue</div><div class="ttdef"><b>Definition:</b> diff.h:104</div></div>
+<div class="ttc" id="aa00361_html_a784ab5827c1bf531b86d1f02f199d04d"><div class="ttname"><a href="a00361.html#a784ab5827c1bf531b86d1f02f199d04d">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s::type</a></div><div class="ttdeci">hwloc_topology_diff_obj_attr_type_t type</div><div class="ttdef"><b>Definition:</b> diff.h:101</div></div>
+<div class="ttc" id="aa00361_html_a7ef48c66ccddf34d90edb4e4314b41c6"><div class="ttname"><a href="a00361.html#a7ef48c66ccddf34d90edb4e4314b41c6">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s::name</a></div><div class="ttdeci">char * name</div><div class="ttdef"><b>Definition:</b> diff.h:102</div></div>
+<div class="ttc" id="aa00365_html"><div class="ttname"><a href="a00365.html">hwloc_topology_diff_u</a></div><div class="ttdoc">One element of a difference list between two topologies.</div><div class="ttdef"><b>Definition:</b> diff.h:129</div></div>
+<div class="ttc" id="aa00369_html"><div class="ttname"><a href="a00369.html">hwloc_topology_diff_u::hwloc_topology_diff_generic_s</a></div><div class="ttdef"><b>Definition:</b> diff.h:130</div></div>
+<div class="ttc" id="aa00369_html_a373005489fcddeba6319163e60263ae8"><div class="ttname"><a href="a00369.html#a373005489fcddeba6319163e60263ae8">hwloc_topology_diff_u::hwloc_topology_diff_generic_s::type</a></div><div class="ttdeci">hwloc_topology_diff_type_t type</div><div class="ttdef"><b>Definition:</b> diff.h:132</div></div>
+<div class="ttc" id="aa00369_html_a720aa94eb73cddfd8d6bf9fcbbfc035e"><div class="ttname"><a href="a00369.html#a720aa94eb73cddfd8d6bf9fcbbfc035e">hwloc_topology_diff_u::hwloc_topology_diff_generic_s::next</a></div><div class="ttdeci">union hwloc_topology_diff_u * next</div><div class="ttdef"><b>Definition:</b> diff.h:133</div></div>
+<div class="ttc" id="aa00373_html"><div class="ttname"><a href="a00373.html">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a></div><div class="ttdef"><b>Definition:</b> diff.h:137</div></div>
+<div class="ttc" id="aa00373_html_a70a118ad288bd98f18c8ce6dc52e2d10"><div class="ttname"><a href="a00373.html#a70a118ad288bd98f18c8ce6dc52e2d10">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s::type</a></div><div class="ttdeci">hwloc_topology_diff_type_t type</div><div class="ttdef"><b>Definition:</b> diff.h:138</div></div>
+<div class="ttc" id="aa00373_html_a82c1d4bab80b9e0bf301a9d8291893e0"><div class="ttname"><a href="a00373.html#a82c1d4bab80b9e0bf301a9d8291893e0">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s::obj_depth</a></div><div class="ttdeci">int obj_depth</div><div class="ttdef"><b>Definition:</b> diff.h:141</div></div>
+<div class="ttc" id="aa00373_html_acb9170a8eb3392656d70f7f3ef3e3eed"><div class="ttname"><a href="a00373.html#acb9170a8eb3392656d70f7f3ef3e3eed">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s::next</a></div><div class="ttdeci">union hwloc_topology_diff_u * next</div><div class="ttdef"><b>Definition:</b> diff.h:139</div></div>
+<div class="ttc" id="aa00377_html"><div class="ttname"><a href="a00377.html">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a></div><div class="ttdef"><b>Definition:</b> diff.h:147</div></div>
+<div class="ttc" id="aa00377_html_a375afbaa043b109be689a7d9a3c7d153"><div class="ttname"><a href="a00377.html#a375afbaa043b109be689a7d9a3c7d153">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s::next</a></div><div class="ttdeci">union hwloc_topology_diff_u * next</div><div class="ttdef"><b>Definition:</b> diff.h:149</div></div>
+<div class="ttc" id="aa00377_html_a6dc6b3c4adb10db74d993e37afaa0580"><div class="ttname"><a href="a00377.html#a6dc6b3c4adb10db74d993e37afaa0580">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s::obj_index</a></div><div class="ttdeci">unsigned obj_index</div><div class="ttdef"><b>Definition:</b> diff.h:152</div></div>
+<div class="ttc" id="aa00377_html_a92084295a4d6faf17a95a7eea526ddbd"><div class="ttname"><a href="a00377.html#a92084295a4d6faf17a95a7eea526ddbd">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s::type</a></div><div class="ttdeci">hwloc_topology_diff_type_t type</div><div class="ttdef"><b>Definition:</b> diff.h:148</div></div>
+<div class="ttc" id="aa00377_html_a94c6498caeaafbb79927395d918d6cb3"><div class="ttname"><a href="a00377.html#a94c6498caeaafbb79927395d918d6cb3">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s::obj_depth</a></div><div class="ttdeci">int obj_depth</div><div class="ttdef"><b>Definition:</b> diff.h:151</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00185_source.html b/doc/doxygen-doc/html/a00185_source.html
new file mode 100644
index 00000000..82e7f7a8
--- /dev/null
+++ b/doc/doxygen-doc/html/a00185_source.html
@@ -0,0 +1,96 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): shmem.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_5cb306d949c7931a3b6c77517393dd34.html">hwloc</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">shmem.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright © 2013-2018 Inria.  All rights reserved.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160; </div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor">#ifndef HWLOC_SHMEM_H</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor">#define HWLOC_SHMEM_H</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160; </div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160; </div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#elif 0</span></div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;}</div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160; </div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160; </div>
+<div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="a00241.html#ga772ab52750cdd0eec85128df24888001">   53</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00241.html#ga772ab52750cdd0eec85128df24888001">hwloc_shmem_topology_get_length</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;                                                   <span class="keywordtype">size_t</span> *lengthp,</div>
+<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;                                                   <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160; </div>
+<div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="a00241.html#ga61b20e346fc76f76420e3a88cc80a671">   82</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00241.html#ga61b20e346fc76f76420e3a88cc80a671">hwloc_shmem_topology_write</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;                                              <span class="keywordtype">int</span> fd, hwloc_uint64_t fileoffset,</div>
+<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;                                              <span class="keywordtype">void</span> *mmap_address, <span class="keywordtype">size_t</span> length,</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;                                              <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
+<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160; </div>
+<div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="a00241.html#ga21545bd0f09d9b554c8e60a630e0e629">  125</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00241.html#ga21545bd0f09d9b554c8e60a630e0e629">hwloc_shmem_topology_adopt</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> *topologyp,</div>
+<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;                                              <span class="keywordtype">int</span> fd, hwloc_uint64_t fileoffset,</div>
+<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;                                              <span class="keywordtype">void</span> *mmap_address, <span class="keywordtype">size_t</span> length,</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;                                              <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
+<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160; </div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160; </div>
+<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_SHMEM_H */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="aa00198_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:692</div></div>
+<div class="ttc" id="aa00241_html_ga21545bd0f09d9b554c8e60a630e0e629"><div class="ttname"><a href="a00241.html#ga21545bd0f09d9b554c8e60a630e0e629">hwloc_shmem_topology_adopt</a></div><div class="ttdeci">int hwloc_shmem_topology_adopt(hwloc_topology_t *topologyp, int fd, hwloc_uint64_t fileoffset, void *mmap_address, size_t length, unsigned long flags)</div><div class="ttdoc">Adopt a shared memory topology stored in a file.</div></div>
+<div class="ttc" id="aa00241_html_ga61b20e346fc76f76420e3a88cc80a671"><div class="ttname"><a href="a00241.html#ga61b20e346fc76f76420e3a88cc80a671">hwloc_shmem_topology_write</a></div><div class="ttdeci">int hwloc_shmem_topology_write(hwloc_topology_t topology, int fd, hwloc_uint64_t fileoffset, void *mmap_address, size_t length, unsigned long flags)</div><div class="ttdoc">Duplicate a topology to a shared memory file.</div></div>
+<div class="ttc" id="aa00241_html_ga772ab52750cdd0eec85128df24888001"><div class="ttname"><a href="a00241.html#ga772ab52750cdd0eec85128df24888001">hwloc_shmem_topology_get_length</a></div><div class="ttdeci">int hwloc_shmem_topology_get_length(hwloc_topology_t topology, size_t *lengthp, unsigned long flags)</div><div class="ttdoc">Get the required shared memory length for storing a topology.</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00188_source.html b/doc/doxygen-doc/html/a00188_source.html
new file mode 100644
index 00000000..03c2b10d
--- /dev/null
+++ b/doc/doxygen-doc/html/a00188_source.html
@@ -0,0 +1,395 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): plugins.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_5cb306d949c7931a3b6c77517393dd34.html">hwloc</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">plugins.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright © 2013-2022 Inria.  All rights reserved.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * Copyright © 2016 Cisco Systems, Inc.  All rights reserved.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160; </div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="preprocessor">#ifndef HWLOC_PLUGINS_H</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="preprocessor">#define HWLOC_PLUGINS_H</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160; </div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="keyword">struct </span><a class="code" href="a00389.html">hwloc_backend</a>;</div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160; </div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160; </div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#ifdef HWLOC_INSIDE_PLUGIN</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment">/* needed for hwloc_plugin_check_namespace() */</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#ifdef HWLOC_HAVE_LTDL</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &lt;ltdl.h&gt;</span></div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &lt;dlfcn.h&gt;</span></div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160; </div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160; </div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160; </div>
+<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="a00381.html">   41</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00381.html">hwloc_disc_component</a> {</div>
+<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="a00381.html#a4064c3b5d9213027e87caebef380a840">   45</a></span>&#160;  <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="a00381.html#a4064c3b5d9213027e87caebef380a840">name</a>;</div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160; </div>
+<div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="a00381.html#a61ad3151efa02e3dbad5d919758f9c90">   50</a></span>&#160;  <span class="keywordtype">unsigned</span> <a class="code" href="a00381.html#a61ad3151efa02e3dbad5d919758f9c90">phases</a>;</div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160; </div>
+<div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="a00381.html#acbb9957914dbf7b8f504215aa0c8d3fe">   60</a></span>&#160;  <span class="keywordtype">unsigned</span> <a class="code" href="a00381.html#acbb9957914dbf7b8f504215aa0c8d3fe">excluded_phases</a>;</div>
+<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160; </div>
+<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;  <span class="keyword">struct </span><a class="code" href="a00389.html">hwloc_backend</a> * (*instantiate)(<span class="keyword">struct </span>hwloc_topology *topology, <span class="keyword">struct </span><a class="code" href="a00381.html">hwloc_disc_component</a> *component, <span class="keywordtype">unsigned</span> <a class="code" href="a00381.html#acbb9957914dbf7b8f504215aa0c8d3fe">excluded_phases</a>, <span class="keyword">const</span> <span class="keywordtype">void</span> *data1, <span class="keyword">const</span> <span class="keywordtype">void</span> *data2, <span class="keyword">const</span> <span class="keywordtype">void</span> *data3);</div>
+<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160; </div>
+<div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="a00381.html#ae86d283c272c5ae24073a235efbf6b59">   79</a></span>&#160;  <span class="keywordtype">unsigned</span> <a class="code" href="a00381.html#ae86d283c272c5ae24073a235efbf6b59">priority</a>;</div>
+<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160; </div>
+<div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="a00381.html#ace80cafe2b1732b047b3fc3da47e6517">   84</a></span>&#160;  <span class="keywordtype">unsigned</span> <a class="code" href="a00381.html#ace80cafe2b1732b047b3fc3da47e6517">enabled_by_default</a>;</div>
+<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160; </div>
+<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;  <span class="keyword">struct </span><a class="code" href="a00381.html">hwloc_disc_component</a> * next;</div>
+<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;};</div>
+<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160; </div>
+<div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="a00243.html#ga8c314121c2fc478161bcce758688b9a1">  106</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="a00243.html#ga8c314121c2fc478161bcce758688b9a1">hwloc_disc_phase_e</a> {</div>
+<div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="a00243.html#gga8c314121c2fc478161bcce758688b9a1ab41c626c79e9ccb1e7d41e7076972283">  111</a></span>&#160;  <a class="code" href="a00243.html#gga8c314121c2fc478161bcce758688b9a1ab41c626c79e9ccb1e7d41e7076972283">HWLOC_DISC_PHASE_GLOBAL</a> = (1U&lt;&lt;0),</div>
+<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160; </div>
+<div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="a00243.html#gga8c314121c2fc478161bcce758688b9a1a6360474df197027761a69bd5fc620250">  115</a></span>&#160;  <a class="code" href="a00243.html#gga8c314121c2fc478161bcce758688b9a1a6360474df197027761a69bd5fc620250">HWLOC_DISC_PHASE_CPU</a> = (1U&lt;&lt;1),</div>
+<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160; </div>
+<div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="a00243.html#gga8c314121c2fc478161bcce758688b9a1ac4264a243844c5fbbff495cdb1b4d51d">  119</a></span>&#160;  <a class="code" href="a00243.html#gga8c314121c2fc478161bcce758688b9a1ac4264a243844c5fbbff495cdb1b4d51d">HWLOC_DISC_PHASE_MEMORY</a> = (1U&lt;&lt;2),</div>
+<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160; </div>
+<div class="line"><a name="l00123"></a><span class="lineno"><a class="line" href="a00243.html#gga8c314121c2fc478161bcce758688b9a1a677c52064dd987af4988346319b3675a">  123</a></span>&#160;  <a class="code" href="a00243.html#gga8c314121c2fc478161bcce758688b9a1a677c52064dd987af4988346319b3675a">HWLOC_DISC_PHASE_PCI</a> = (1U&lt;&lt;3),</div>
+<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160; </div>
+<div class="line"><a name="l00127"></a><span class="lineno"><a class="line" href="a00243.html#gga8c314121c2fc478161bcce758688b9a1aa8e10626cba9af72f5605a1acbdc0015">  127</a></span>&#160;  <a class="code" href="a00243.html#gga8c314121c2fc478161bcce758688b9a1aa8e10626cba9af72f5605a1acbdc0015">HWLOC_DISC_PHASE_IO</a> = (1U&lt;&lt;4),</div>
+<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160; </div>
+<div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="a00243.html#gga8c314121c2fc478161bcce758688b9a1a8a7cde9bff0ab0d085b102a3e934939b">  131</a></span>&#160;  <a class="code" href="a00243.html#gga8c314121c2fc478161bcce758688b9a1a8a7cde9bff0ab0d085b102a3e934939b">HWLOC_DISC_PHASE_MISC</a> = (1U&lt;&lt;5),</div>
+<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160; </div>
+<div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="a00243.html#gga8c314121c2fc478161bcce758688b9a1a68ca5c7ad75a6d9e5355689411621773">  135</a></span>&#160;  <a class="code" href="a00243.html#gga8c314121c2fc478161bcce758688b9a1a68ca5c7ad75a6d9e5355689411621773">HWLOC_DISC_PHASE_ANNOTATE</a> = (1U&lt;&lt;6),</div>
+<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160; </div>
+<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;  <a class="code" href="a00243.html#gga8c314121c2fc478161bcce758688b9a1ada3ed3f00e74909353d6ea4a96cde5ad">HWLOC_DISC_PHASE_TWEAK</a> = (1U&lt;&lt;7)</div>
+<div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="a00243.html#ga600bba1a62022d5f516800649b1edb61">  143</a></span>&#160;} <a class="code" href="a00243.html#ga600bba1a62022d5f516800649b1edb61">hwloc_disc_phase_t</a>;</div>
+<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160; </div>
+<div class="line"><a name="l00146"></a><span class="lineno"><a class="line" href="a00243.html#gaae1b38cf9b12e489884ce2a07275964b">  146</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00243.html#gaae1b38cf9b12e489884ce2a07275964b">hwloc_disc_status_flag_e</a> {</div>
+<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;  <a class="code" href="a00243.html#ggaae1b38cf9b12e489884ce2a07275964ba205d644d54a0840bd9165fce7d19e6b1">HWLOC_DISC_STATUS_FLAG_GOT_ALLOWED_RESOURCES</a> = (1UL&lt;&lt;1)</div>
+<div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="a00243.html#ggaae1b38cf9b12e489884ce2a07275964ba205d644d54a0840bd9165fce7d19e6b1">  149</a></span>&#160;};</div>
+<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160; </div>
+<div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="a00385.html">  156</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00385.html">hwloc_disc_status</a> {</div>
+<div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="a00385.html#abaf7c8c082d43e133171f0723dbf824b">  160</a></span>&#160;  <a class="code" href="a00243.html#ga600bba1a62022d5f516800649b1edb61">hwloc_disc_phase_t</a> <a class="code" href="a00385.html#abaf7c8c082d43e133171f0723dbf824b">phase</a>;</div>
+<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160; </div>
+<div class="line"><a name="l00165"></a><span class="lineno"><a class="line" href="a00385.html#a0f95fa42d46a6e7cf8dee8af12afee3a">  165</a></span>&#160;  <span class="keywordtype">unsigned</span> <a class="code" href="a00385.html#a0f95fa42d46a6e7cf8dee8af12afee3a">excluded_phases</a>;</div>
+<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160; </div>
+<div class="line"><a name="l00168"></a><span class="lineno"><a class="line" href="a00385.html#ad8b123cecb945a9182eb824ccf8ef9d7">  168</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="a00385.html#ad8b123cecb945a9182eb824ccf8ef9d7">flags</a>;</div>
+<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;};</div>
+<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160; </div>
+<div class="line"><a name="l00189"></a><span class="lineno"><a class="line" href="a00389.html">  189</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00389.html">hwloc_backend</a> {</div>
+<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;  <span class="keyword">struct </span><a class="code" href="a00381.html">hwloc_disc_component</a> * component;</div>
+<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;  <span class="keyword">struct </span>hwloc_topology * topology;</div>
+<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;  <span class="keywordtype">int</span> envvar_forced;</div>
+<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;  <span class="keyword">struct </span><a class="code" href="a00389.html">hwloc_backend</a> * next;</div>
+<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160; </div>
+<div class="line"><a name="l00202"></a><span class="lineno"><a class="line" href="a00389.html#aeca769840a6ff03e96462a9533adbccd">  202</a></span>&#160;  <span class="keywordtype">unsigned</span> <a class="code" href="a00389.html#aeca769840a6ff03e96462a9533adbccd">phases</a>;</div>
+<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160; </div>
+<div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="a00389.html#aaa8eafe495aadd81c2e3c4ec527c10ba">  205</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="a00389.html#aaa8eafe495aadd81c2e3c4ec527c10ba">flags</a>;</div>
+<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160; </div>
+<div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="a00389.html#ab8806f6db077f1bb2e9d63ec99223f7a">  213</a></span>&#160;  <span class="keywordtype">int</span> <a class="code" href="a00389.html#ab8806f6db077f1bb2e9d63ec99223f7a">is_thissystem</a>;</div>
+<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160; </div>
+<div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="a00389.html#a2ea5bd36b7f06efdb65b98b32af16c68">  216</a></span>&#160;  <span class="keywordtype">void</span> * <a class="code" href="a00389.html#a2ea5bd36b7f06efdb65b98b32af16c68">private_data</a>;</div>
+<div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="a00389.html#a36c4fa86350525b46340c67b802c69c7">  220</a></span>&#160;  void (*<a class="code" href="a00389.html#a36c4fa86350525b46340c67b802c69c7">disable</a>)(<span class="keyword">struct </span><a class="code" href="a00389.html">hwloc_backend</a> *backend);</div>
+<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160; </div>
+<div class="line"><a name="l00227"></a><span class="lineno"><a class="line" href="a00389.html#accff2cd8404be43c3b44cec05e6f609b">  227</a></span>&#160;  int (*<a class="code" href="a00389.html#accff2cd8404be43c3b44cec05e6f609b">discover</a>)(<span class="keyword">struct </span><a class="code" href="a00389.html">hwloc_backend</a> *backend, <span class="keyword">struct </span><a class="code" href="a00385.html">hwloc_disc_status</a> *status);</div>
+<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160; </div>
+<div class="line"><a name="l00233"></a><span class="lineno"><a class="line" href="a00389.html#aaac253491264c20930f44817270bc502">  233</a></span>&#160;  int (*<a class="code" href="a00389.html#aaac253491264c20930f44817270bc502">get_pci_busid_cpuset</a>)(<span class="keyword">struct </span><a class="code" href="a00389.html">hwloc_backend</a> *backend, <span class="keyword">struct </span>hwloc_pcidev_attr_s *busid, <a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> cpuset);</div>
+<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;};</div>
+<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160; </div>
+<div class="line"><a name="l00239"></a><span class="lineno"><a class="line" href="a00243.html#gadb068565ab6043cbe4d16bfcce067a61">  239</a></span>&#160;HWLOC_DECLSPEC <span class="keyword">struct </span><a class="code" href="a00389.html">hwloc_backend</a> * <a class="code" href="a00243.html#gadb068565ab6043cbe4d16bfcce067a61">hwloc_backend_alloc</a>(<span class="keyword">struct</span> hwloc_topology *topology, <span class="keyword">struct</span> <a class="code" href="a00381.html">hwloc_disc_component</a> *component);</div>
+<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160; </div>
+<div class="line"><a name="l00242"></a><span class="lineno"><a class="line" href="a00243.html#ga4715779d7191833e9b1a7490989a7497">  242</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00243.html#ga4715779d7191833e9b1a7490989a7497">hwloc_backend_enable</a>(<span class="keyword">struct</span> <a class="code" href="a00389.html">hwloc_backend</a> *backend);</div>
+<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160; </div>
+<div class="line"><a name="l00257"></a><span class="lineno"><a class="line" href="a00244.html#ga397a1bf7d21dd073320ad0045340f463">  257</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="a00244.html#ga397a1bf7d21dd073320ad0045340f463">hwloc_component_type_e</a> {</div>
+<div class="line"><a name="l00259"></a><span class="lineno"><a class="line" href="a00244.html#gga397a1bf7d21dd073320ad0045340f463a5d6e561f467fe9795a29e7368b613900">  259</a></span>&#160;  <a class="code" href="a00244.html#gga397a1bf7d21dd073320ad0045340f463a5d6e561f467fe9795a29e7368b613900">HWLOC_COMPONENT_TYPE_DISC</a>,</div>
+<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160; </div>
+<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;  <a class="code" href="a00244.html#gga397a1bf7d21dd073320ad0045340f463adea00cd839c2141c032e1569fd5592bd">HWLOC_COMPONENT_TYPE_XML</a></div>
+<div class="line"><a name="l00263"></a><span class="lineno"><a class="line" href="a00244.html#ga31a5a455f4e666b936f0a9e8fb9a0f47">  263</a></span>&#160;} <a class="code" href="a00244.html#ga31a5a455f4e666b936f0a9e8fb9a0f47">hwloc_component_type_t</a>;</div>
+<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160; </div>
+<div class="line"><a name="l00270"></a><span class="lineno"><a class="line" href="a00393.html">  270</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00393.html">hwloc_component</a> {</div>
+<div class="line"><a name="l00272"></a><span class="lineno"><a class="line" href="a00393.html#a3250bd6fc9713946991d805e48091b2e">  272</a></span>&#160;  <span class="keywordtype">unsigned</span> <a class="code" href="a00393.html#a3250bd6fc9713946991d805e48091b2e">abi</a>;</div>
+<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160; </div>
+<div class="line"><a name="l00291"></a><span class="lineno"><a class="line" href="a00393.html#aea613546886d9b8221cadba920fe3ebc">  291</a></span>&#160;  int (*<a class="code" href="a00393.html#aea613546886d9b8221cadba920fe3ebc">init</a>)(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="a00393.html#ab8043c5b4cc0e81aabba586ccb194335">flags</a>);</div>
+<div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160; </div>
+<div class="line"><a name="l00304"></a><span class="lineno"><a class="line" href="a00393.html#a4612015451a1c706e8ba19114cb8baae">  304</a></span>&#160;  void (*<a class="code" href="a00393.html#a4612015451a1c706e8ba19114cb8baae">finalize</a>)(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="a00393.html#ab8043c5b4cc0e81aabba586ccb194335">flags</a>);</div>
+<div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160; </div>
+<div class="line"><a name="l00307"></a><span class="lineno"><a class="line" href="a00393.html#a789208ada7e17492cfd3a5a88a6bb0ee">  307</a></span>&#160;  <a class="code" href="a00244.html#ga31a5a455f4e666b936f0a9e8fb9a0f47">hwloc_component_type_t</a> <a class="code" href="a00393.html#a789208ada7e17492cfd3a5a88a6bb0ee">type</a>;</div>
+<div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160; </div>
+<div class="line"><a name="l00310"></a><span class="lineno"><a class="line" href="a00393.html#ab8043c5b4cc0e81aabba586ccb194335">  310</a></span>&#160;  <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="a00393.html#ab8043c5b4cc0e81aabba586ccb194335">flags</a>;</div>
+<div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160; </div>
+<div class="line"><a name="l00313"></a><span class="lineno"><a class="line" href="a00393.html#a4b8cffd1d943c29fdc102b841b8598d4">  313</a></span>&#160;  <span class="keywordtype">void</span> * <a class="code" href="a00393.html#a4b8cffd1d943c29fdc102b841b8598d4">data</a>;</div>
+<div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;};</div>
+<div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160; </div>
+<div class="line"><a name="l00345"></a><span class="lineno"><a class="line" href="a00245.html#gab527c1e0f243f057d31a724794ad9f88">  345</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00245.html#gab527c1e0f243f057d31a724794ad9f88">hwloc_hide_errors</a>(<span class="keywordtype">void</span>);</div>
+<div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160; </div>
+<div class="line"><a name="l00347"></a><span class="lineno"><a class="line" href="a00245.html#gafce07a2a959190a6c7126b321bef202f">  347</a></span>&#160;<span class="preprocessor">#define HWLOC_SHOW_CRITICAL_ERRORS() (hwloc_hide_errors() &lt; 2)</span></div>
+<div class="line"><a name="l00348"></a><span class="lineno"><a class="line" href="a00245.html#ga3e48b6ac00ed6a40aea975e23eddcdbb">  348</a></span>&#160;<span class="preprocessor">#define HWLOC_SHOW_ALL_ERRORS() (hwloc_hide_errors() == 0)</span></div>
+<div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160; </div>
+<div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;HWLOC_DECLSPEC <a class="code" href="a00253.html">hwloc_obj_t</a></div>
+<div class="line"><a name="l00379"></a><span class="lineno"><a class="line" href="a00245.html#ga1e105cfe3c8e77f34cc6df3841deebbc">  379</a></span>&#160;<a class="code" href="a00245.html#ga1e105cfe3c8e77f34cc6df3841deebbc">hwloc__insert_object_by_cpuset</a>(<span class="keyword">struct</span> hwloc_topology *topology, <a class="code" href="a00253.html">hwloc_obj_t</a> root,</div>
+<div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;                               <a class="code" href="a00253.html">hwloc_obj_t</a> obj, <span class="keyword">const</span> <span class="keywordtype">char</span> *reason);</div>
+<div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160; </div>
+<div class="line"><a name="l00398"></a><span class="lineno"><a class="line" href="a00245.html#ga0ef97debde503b56367689b07bb3e901">  398</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00245.html#ga0ef97debde503b56367689b07bb3e901">hwloc_insert_object_by_parent</a>(<span class="keyword">struct</span> hwloc_topology *topology, <a class="code" href="a00253.html">hwloc_obj_t</a> parent, <a class="code" href="a00253.html">hwloc_obj_t</a> obj);</div>
+<div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160; </div>
+<div class="line"><a name="l00404"></a><span class="lineno"><a class="line" href="a00245.html#ga0b5c75b2dc37cea2e8a29c4812baf4b3">  404</a></span>&#160;HWLOC_DECLSPEC <a class="code" href="a00253.html">hwloc_obj_t</a> <a class="code" href="a00245.html#ga0b5c75b2dc37cea2e8a29c4812baf4b3">hwloc_alloc_setup_object</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <span class="keywordtype">unsigned</span> os_index);</div>
+<div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160; </div>
+<div class="line"><a name="l00414"></a><span class="lineno"><a class="line" href="a00245.html#ga754b61041ceee9685534a2c5d3cd0156">  414</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00245.html#ga754b61041ceee9685534a2c5d3cd0156">hwloc_obj_add_children_sets</a>(<a class="code" href="a00253.html">hwloc_obj_t</a> obj);</div>
+<div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160; </div>
+<div class="line"><a name="l00423"></a><span class="lineno"><a class="line" href="a00245.html#ga120d8bd74922e1030b621409a6b0be61">  423</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00245.html#ga120d8bd74922e1030b621409a6b0be61">hwloc_topology_reconnect</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags __hwloc_attribute_unused);</div>
+<div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160; </div>
+<div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00447"></a><span class="lineno"><a class="line" href="a00245.html#gac2eaed287bb215cf0bd33014e9e1d374">  447</a></span>&#160;<a class="code" href="a00245.html#gac2eaed287bb215cf0bd33014e9e1d374">hwloc_plugin_check_namespace</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *pluginname __hwloc_attribute_unused, <span class="keyword">const</span> <span class="keywordtype">char</span> *symbol __hwloc_attribute_unused)</div>
+<div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;{</div>
+<div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;<span class="preprocessor">#ifdef HWLOC_INSIDE_PLUGIN</span></div>
+<div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;  <span class="keywordtype">void</span> *sym;</div>
+<div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;<span class="preprocessor">#ifdef HWLOC_HAVE_LTDL</span></div>
+<div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;  lt_dlhandle handle = lt_dlopen(NULL);</div>
+<div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;  <span class="keywordtype">void</span> *handle = dlopen(NULL, RTLD_NOW|RTLD_LOCAL);</div>
+<div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;  <span class="keywordflow">if</span> (!handle)</div>
+<div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;    <span class="comment">/* cannot check, assume things will work */</span></div>
+<div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;<span class="preprocessor">#ifdef HWLOC_HAVE_LTDL</span></div>
+<div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;  sym = lt_dlsym(handle, symbol);</div>
+<div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;  lt_dlclose(handle);</div>
+<div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;<span class="preprocessor">#else</span></div>
+<div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;  sym = dlsym(handle, symbol);</div>
+<div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;  dlclose(handle);</div>
+<div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;  <span class="keywordflow">if</span> (!sym) {</div>
+<div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">int</span> verboseenv_checked = 0;</div>
+<div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">int</span> verboseenv_value = 0;</div>
+<div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;    <span class="keywordflow">if</span> (!verboseenv_checked) {</div>
+<div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;      <span class="keyword">const</span> <span class="keywordtype">char</span> *verboseenv = getenv(<span class="stringliteral">&quot;HWLOC_PLUGINS_VERBOSE&quot;</span>);</div>
+<div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;      verboseenv_value = verboseenv ? atoi(verboseenv) : 0;</div>
+<div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;      verboseenv_checked = 1;</div>
+<div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;    }</div>
+<div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;    <span class="keywordflow">if</span> (verboseenv_value)</div>
+<div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;      fprintf(stderr, <span class="stringliteral">&quot;Plugin `%s&#39; disabling itself because it cannot find the `%s&#39; core symbol.\n&quot;</span>,</div>
+<div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;              pluginname, symbol);</div>
+<div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;    <span class="keywordflow">return</span> -1;</div>
+<div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;  }</div>
+<div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_INSIDE_PLUGIN */</span><span class="preprocessor"></span></div>
+<div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;  <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;}</div>
+<div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160; </div>
+<div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00500"></a><span class="lineno"><a class="line" href="a00246.html#ga60203db6459ebf275bf48c40a37661a0">  500</a></span>&#160;<a class="code" href="a00246.html#ga60203db6459ebf275bf48c40a37661a0">hwloc_filter_check_pcidev_subtype_important</a>(<span class="keywordtype">unsigned</span> classid)</div>
+<div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;{</div>
+<div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;  <span class="keywordtype">unsigned</span> baseclass = classid &gt;&gt; 8;</div>
+<div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;  <span class="keywordflow">return</span> (baseclass == 0x03 <span class="comment">/* PCI_BASE_CLASS_DISPLAY */</span></div>
+<div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;          || baseclass == 0x02 <span class="comment">/* PCI_BASE_CLASS_NETWORK */</span></div>
+<div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;          || baseclass == 0x01 <span class="comment">/* PCI_BASE_CLASS_STORAGE */</span></div>
+<div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;          || baseclass == 0x00 <span class="comment">/* Unclassified, for Atos/Bull BXI */</span></div>
+<div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;          || baseclass == 0x0b <span class="comment">/* PCI_BASE_CLASS_PROCESSOR */</span></div>
+<div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;          || classid == 0x0c04 <span class="comment">/* PCI_CLASS_SERIAL_FIBER */</span></div>
+<div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;          || classid == 0x0c06 <span class="comment">/* PCI_CLASS_SERIAL_INFINIBAND */</span></div>
+<div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;          || classid == 0x0502 <span class="comment">/* PCI_CLASS_MEMORY_CXL */</span></div>
+<div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;          || baseclass == 0x06 <span class="comment">/* PCI_BASE_CLASS_BRIDGE with non-PCI downstream. the core will drop the useless ones later */</span></div>
+<div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;          || baseclass == 0x12 <span class="comment">/* Processing Accelerators */</span>);</div>
+<div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;}</div>
+<div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160; </div>
+<div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00520"></a><span class="lineno"><a class="line" href="a00246.html#gac7d57a6d669820f360cf2a070a396560">  520</a></span>&#160;<a class="code" href="a00246.html#gac7d57a6d669820f360cf2a070a396560">hwloc_filter_check_osdev_subtype_important</a>(<a class="code" href="a00196.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a> subtype)</div>
+<div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;{</div>
+<div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;  <span class="keywordflow">return</span> (subtype != <a class="code" href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0a827ad1643360711a8b6c6af671366791">HWLOC_OBJ_OSDEV_DMA</a>);</div>
+<div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;}</div>
+<div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160; </div>
+<div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00532"></a><span class="lineno"><a class="line" href="a00246.html#ga2f402a43025a8a91e8513be1a15e4635">  532</a></span>&#160;<a class="code" href="a00246.html#ga2f402a43025a8a91e8513be1a15e4635">hwloc_filter_check_keep_object_type</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</div>
+<div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;{</div>
+<div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;  <span class="keyword">enum</span> <a class="code" href="a00205.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter = <a class="code" href="a00205.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a">HWLOC_TYPE_FILTER_KEEP_NONE</a>;</div>
+<div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;  <a class="code" href="a00205.html#ga137ad1178f7a79f2383974d983083401">hwloc_topology_get_type_filter</a>(topology, type, &amp;filter);</div>
+<div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;  assert(filter != <a class="code" href="a00205.html#gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5">HWLOC_TYPE_FILTER_KEEP_IMPORTANT</a>); <span class="comment">/* IMPORTANT only used for I/O */</span></div>
+<div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;  <span class="keywordflow">return</span> filter == <a class="code" href="a00205.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a">HWLOC_TYPE_FILTER_KEEP_NONE</a> ? 0 : 1;</div>
+<div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;}</div>
+<div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160; </div>
+<div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00545"></a><span class="lineno"><a class="line" href="a00246.html#ga4d2fdce071e5646ef147c9ff1539d1c9">  545</a></span>&#160;<a class="code" href="a00246.html#ga4d2fdce071e5646ef147c9ff1539d1c9">hwloc_filter_check_keep_object</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00253.html">hwloc_obj_t</a> obj)</div>
+<div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;{</div>
+<div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;  <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type = obj-&gt;<a class="code" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a>;</div>
+<div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;  <span class="keyword">enum</span> <a class="code" href="a00205.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter = <a class="code" href="a00205.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a">HWLOC_TYPE_FILTER_KEEP_NONE</a>;</div>
+<div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;  <a class="code" href="a00205.html#ga137ad1178f7a79f2383974d983083401">hwloc_topology_get_type_filter</a>(topology, type, &amp;filter);</div>
+<div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;  <span class="keywordflow">if</span> (filter == <a class="code" href="a00205.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a">HWLOC_TYPE_FILTER_KEEP_NONE</a>)</div>
+<div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;    <span class="keywordflow">return</span> 0;</div>
+<div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;  <span class="keywordflow">if</span> (filter == <a class="code" href="a00205.html#gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5">HWLOC_TYPE_FILTER_KEEP_IMPORTANT</a>) {</div>
+<div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;    <span class="keywordflow">if</span> (type == <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a>)</div>
+<div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;      <span class="keywordflow">return</span> <a class="code" href="a00246.html#ga60203db6459ebf275bf48c40a37661a0">hwloc_filter_check_pcidev_subtype_important</a>(obj-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00277.html#aee735352d9f1686fd290fc6d6397c334">class_id</a>);</div>
+<div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;    <span class="keywordflow">if</span> (type == <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075">HWLOC_OBJ_OS_DEVICE</a>)</div>
+<div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;      <span class="keywordflow">return</span> <a class="code" href="a00246.html#gac7d57a6d669820f360cf2a070a396560">hwloc_filter_check_osdev_subtype_important</a>(obj-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>.<a class="code" href="a00297.html#a31e019e27e54ac6138d04be639bb96f9">type</a>);</div>
+<div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;  }</div>
+<div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;  <span class="keywordflow">return</span> 1;</div>
+<div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;}</div>
+<div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160; </div>
+<div class="line"><a name="l00577"></a><span class="lineno"><a class="line" href="a00247.html#ga706f71cfea09d547d2cbafa642d6e03b">  577</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">unsigned</span> <a class="code" href="a00247.html#ga706f71cfea09d547d2cbafa642d6e03b">hwloc_pcidisc_find_cap</a>(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *config, <span class="keywordtype">unsigned</span> cap);</div>
+<div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160; </div>
+<div class="line"><a name="l00584"></a><span class="lineno"><a class="line" href="a00247.html#ga51d1ebcbf9729987c9d17df3aa57d209">  584</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00247.html#ga51d1ebcbf9729987c9d17df3aa57d209">hwloc_pcidisc_find_linkspeed</a>(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *config, <span class="keywordtype">unsigned</span> offset, <span class="keywordtype">float</span> *linkspeed);</div>
+<div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160; </div>
+<div class="line"><a name="l00590"></a><span class="lineno"><a class="line" href="a00247.html#ga6c55fb80c3d0c8c8e61078b3f38adde8">  590</a></span>&#160;HWLOC_DECLSPEC <a class="code" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00247.html#ga6c55fb80c3d0c8c8e61078b3f38adde8">hwloc_pcidisc_check_bridge_type</a>(<span class="keywordtype">unsigned</span> device_class, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *config);</div>
+<div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160; </div>
+<div class="line"><a name="l00598"></a><span class="lineno"><a class="line" href="a00247.html#ga95acf6822a49447c11067d0b843965ba">  598</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00247.html#ga95acf6822a49447c11067d0b843965ba">hwloc_pcidisc_find_bridge_buses</a>(<span class="keywordtype">unsigned</span> domain, <span class="keywordtype">unsigned</span> bus, <span class="keywordtype">unsigned</span> dev, <span class="keywordtype">unsigned</span> func,</div>
+<div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;                                                   <span class="keywordtype">unsigned</span> *secondary_busp, <span class="keywordtype">unsigned</span> *subordinate_busp,</div>
+<div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;                                                   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *config);</div>
+<div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160; </div>
+<div class="line"><a name="l00606"></a><span class="lineno"><a class="line" href="a00247.html#gab76ddc4f55db8101ef0d44317965128c">  606</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00247.html#gab76ddc4f55db8101ef0d44317965128c">hwloc_pcidisc_tree_insert_by_busid</a>(<span class="keyword">struct</span> <a class="code" href="a00253.html">hwloc_obj</a> **treep, <span class="keyword">struct</span> <a class="code" href="a00253.html">hwloc_obj</a> *obj);</div>
+<div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160; </div>
+<div class="line"><a name="l00613"></a><span class="lineno"><a class="line" href="a00247.html#gabda1d6c1799e50b9226f8a4da9bd29ea">  613</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00247.html#gabda1d6c1799e50b9226f8a4da9bd29ea">hwloc_pcidisc_tree_attach</a>(<span class="keyword">struct</span> hwloc_topology *topology, <span class="keyword">struct</span> <a class="code" href="a00253.html">hwloc_obj</a> *tree);</div>
+<div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160; </div>
+<div class="line"><a name="l00638"></a><span class="lineno"><a class="line" href="a00248.html#ga7964833550947636ab8975909de3fa98">  638</a></span>&#160;HWLOC_DECLSPEC <span class="keyword">struct </span><a class="code" href="a00253.html">hwloc_obj</a> * <a class="code" href="a00248.html#ga7964833550947636ab8975909de3fa98">hwloc_pci_find_parent_by_busid</a>(<span class="keyword">struct</span> hwloc_topology *topology, <span class="keywordtype">unsigned</span> domain, <span class="keywordtype">unsigned</span> bus, <span class="keywordtype">unsigned</span> dev, <span class="keywordtype">unsigned</span> func);</div>
+<div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160; </div>
+<div class="line"><a name="l00646"></a><span class="lineno"><a class="line" href="a00248.html#ga1cc465a010c5f75e0f280cdc8e27197d">  646</a></span>&#160;HWLOC_DECLSPEC <span class="keyword">struct </span><a class="code" href="a00253.html">hwloc_obj</a> * <a class="code" href="a00248.html#ga1cc465a010c5f75e0f280cdc8e27197d">hwloc_pci_find_by_busid</a>(<span class="keyword">struct</span> hwloc_topology *topology, <span class="keywordtype">unsigned</span> domain, <span class="keywordtype">unsigned</span> bus, <span class="keywordtype">unsigned</span> dev, <span class="keywordtype">unsigned</span> func);</div>
+<div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160; </div>
+<div class="line"><a name="l00649"></a><span class="lineno"><a class="line" href="a00248.html#gafe5e49d32dd0a28ead94b6e31048e042">  649</a></span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">void</span> * <a class="code" href="a00248.html#gafe5e49d32dd0a28ead94b6e31048e042">hwloc_backend_distances_add_handle_t</a>;</div>
+<div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160; </div>
+<div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;HWLOC_DECLSPEC <a class="code" href="a00248.html#gafe5e49d32dd0a28ead94b6e31048e042">hwloc_backend_distances_add_handle_t</a></div>
+<div class="line"><a name="l00658"></a><span class="lineno"><a class="line" href="a00248.html#gaa66a0bd519a5b1183a3e9b0c35a7f6cc">  658</a></span>&#160;<a class="code" href="a00248.html#gaa66a0bd519a5b1183a3e9b0c35a7f6cc">hwloc_backend_distances_add_create</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;                                   <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> kind,</div>
+<div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;                                   <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
+<div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160; </div>
+<div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00674"></a><span class="lineno"><a class="line" href="a00248.html#gaa27036bd83102f8e406f1051d560da6c">  674</a></span>&#160;<a class="code" href="a00248.html#gaa27036bd83102f8e406f1051d560da6c">hwloc_backend_distances_add_values</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;                                   <a class="code" href="a00248.html#gafe5e49d32dd0a28ead94b6e31048e042">hwloc_backend_distances_add_handle_t</a> handle,</div>
+<div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;                                   <span class="keywordtype">unsigned</span> nbobjs, <a class="code" href="a00253.html">hwloc_obj_t</a> *objs,</div>
+<div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;                                   hwloc_uint64_t *values,</div>
+<div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;                                   <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
+<div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160; </div>
+<div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
+<div class="line"><a name="l00687"></a><span class="lineno"><a class="line" href="a00248.html#ga1468ac5f0bfb0e18bfc04c9ce5a5a4a3">  687</a></span>&#160;<a class="code" href="a00248.html#ga1468ac5f0bfb0e18bfc04c9ce5a5a4a3">hwloc_backend_distances_add_commit</a>(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
+<div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;                                   <a class="code" href="a00248.html#gafe5e49d32dd0a28ead94b6e31048e042">hwloc_backend_distances_add_handle_t</a> handle,</div>
+<div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;                                   <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
+<div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160; </div>
+<div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_PLUGINS_H */</span><span class="preprocessor"></span></div>
+<div class="ttc" id="aa00196_html_gaa9a6941ef7b1c169412518d7ef71b3d2"><div class="ttname"><a href="a00196.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a></div><div class="ttdeci">enum hwloc_obj_osdev_type_e hwloc_obj_osdev_type_t</div><div class="ttdoc">Type of a OS device.</div></div>
+<div class="ttc" id="aa00196_html_gacd37bb612667dc437d66bfb175a8dc55"><div class="ttname"><a href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a></div><div class="ttdeci">hwloc_obj_type_t</div><div class="ttdoc">Type of topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:176</div></div>
+<div class="ttc" id="aa00196_html_gga64f5d539df299c97ae80ce53fc4b56c0a827ad1643360711a8b6c6af671366791"><div class="ttname"><a href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0a827ad1643360711a8b6c6af671366791">HWLOC_OBJ_OSDEV_DMA</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_DMA</div><div class="ttdoc">Operating system dma engine device. For instance the &quot;dma0chan0&quot; DMA channel on Linux.</div><div class="ttdef"><b>Definition:</b> hwloc.h:351</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075">HWLOC_OBJ_OS_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_OS_DEVICE</div><div class="ttdoc">Operating system device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:279</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_PCI_DEVICE</div><div class="ttdoc">PCI device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:269</div></div>
+<div class="ttc" id="aa00198_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:692</div></div>
+<div class="ttc" id="aa00205_html_ga137ad1178f7a79f2383974d983083401"><div class="ttname"><a href="a00205.html#ga137ad1178f7a79f2383974d983083401">hwloc_topology_get_type_filter</a></div><div class="ttdeci">int hwloc_topology_get_type_filter(hwloc_topology_t topology, hwloc_obj_type_t type, enum hwloc_type_filter_e *filter)</div><div class="ttdoc">Get the current filtering for the given object type.</div></div>
+<div class="ttc" id="aa00205_html_ga9a5a1f0140cd1952544477833733195b"><div class="ttname"><a href="a00205.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a></div><div class="ttdeci">hwloc_type_filter_e</div><div class="ttdoc">Type filtering flags.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2254</div></div>
+<div class="ttc" id="aa00205_html_gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a"><div class="ttname"><a href="a00205.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a">HWLOC_TYPE_FILTER_KEEP_NONE</a></div><div class="ttdeci">@ HWLOC_TYPE_FILTER_KEEP_NONE</div><div class="ttdoc">Ignore all objects of this type.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2268</div></div>
+<div class="ttc" id="aa00205_html_gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5"><div class="ttname"><a href="a00205.html#gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5">HWLOC_TYPE_FILTER_KEEP_IMPORTANT</a></div><div class="ttdeci">@ HWLOC_TYPE_FILTER_KEEP_IMPORTANT</div><div class="ttdoc">Only keep likely-important objects of the given type.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2297</div></div>
+<div class="ttc" id="aa00217_html_gaa3c2bf4c776d603dcebbb61b0c923d84"><div class="ttname"><a href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a></div><div class="ttdeci">struct hwloc_bitmap_s * hwloc_bitmap_t</div><div class="ttdoc">Set of bits represented as an opaque pointer to an internal bitmap.</div><div class="ttdef"><b>Definition:</b> bitmap.h:68</div></div>
+<div class="ttc" id="aa00243_html_ga4715779d7191833e9b1a7490989a7497"><div class="ttname"><a href="a00243.html#ga4715779d7191833e9b1a7490989a7497">hwloc_backend_enable</a></div><div class="ttdeci">int hwloc_backend_enable(struct hwloc_backend *backend)</div><div class="ttdoc">Enable a previously allocated and setup backend.</div></div>
+<div class="ttc" id="aa00243_html_ga600bba1a62022d5f516800649b1edb61"><div class="ttname"><a href="a00243.html#ga600bba1a62022d5f516800649b1edb61">hwloc_disc_phase_t</a></div><div class="ttdeci">enum hwloc_disc_phase_e hwloc_disc_phase_t</div><div class="ttdoc">Discovery phase.</div></div>
+<div class="ttc" id="aa00243_html_ga8c314121c2fc478161bcce758688b9a1"><div class="ttname"><a href="a00243.html#ga8c314121c2fc478161bcce758688b9a1">hwloc_disc_phase_e</a></div><div class="ttdeci">hwloc_disc_phase_e</div><div class="ttdoc">Discovery phase.</div><div class="ttdef"><b>Definition:</b> plugins.h:106</div></div>
+<div class="ttc" id="aa00243_html_gaae1b38cf9b12e489884ce2a07275964b"><div class="ttname"><a href="a00243.html#gaae1b38cf9b12e489884ce2a07275964b">hwloc_disc_status_flag_e</a></div><div class="ttdeci">hwloc_disc_status_flag_e</div><div class="ttdoc">Discovery status flags.</div><div class="ttdef"><b>Definition:</b> plugins.h:146</div></div>
+<div class="ttc" id="aa00243_html_gadb068565ab6043cbe4d16bfcce067a61"><div class="ttname"><a href="a00243.html#gadb068565ab6043cbe4d16bfcce067a61">hwloc_backend_alloc</a></div><div class="ttdeci">struct hwloc_backend * hwloc_backend_alloc(struct hwloc_topology *topology, struct hwloc_disc_component *component)</div><div class="ttdoc">Allocate a backend structure, set good default values, initialize backend-&gt;component and topology,...</div></div>
+<div class="ttc" id="aa00243_html_gga8c314121c2fc478161bcce758688b9a1a6360474df197027761a69bd5fc620250"><div class="ttname"><a href="a00243.html#gga8c314121c2fc478161bcce758688b9a1a6360474df197027761a69bd5fc620250">HWLOC_DISC_PHASE_CPU</a></div><div class="ttdeci">@ HWLOC_DISC_PHASE_CPU</div><div class="ttdoc">CPU discovery.</div><div class="ttdef"><b>Definition:</b> plugins.h:115</div></div>
+<div class="ttc" id="aa00243_html_gga8c314121c2fc478161bcce758688b9a1a677c52064dd987af4988346319b3675a"><div class="ttname"><a href="a00243.html#gga8c314121c2fc478161bcce758688b9a1a677c52064dd987af4988346319b3675a">HWLOC_DISC_PHASE_PCI</a></div><div class="ttdeci">@ HWLOC_DISC_PHASE_PCI</div><div class="ttdoc">Attach PCI devices and bridges to existing CPU objects.</div><div class="ttdef"><b>Definition:</b> plugins.h:123</div></div>
+<div class="ttc" id="aa00243_html_gga8c314121c2fc478161bcce758688b9a1a68ca5c7ad75a6d9e5355689411621773"><div class="ttname"><a href="a00243.html#gga8c314121c2fc478161bcce758688b9a1a68ca5c7ad75a6d9e5355689411621773">HWLOC_DISC_PHASE_ANNOTATE</a></div><div class="ttdeci">@ HWLOC_DISC_PHASE_ANNOTATE</div><div class="ttdoc">Annotating existing objects, adding distances, etc.</div><div class="ttdef"><b>Definition:</b> plugins.h:135</div></div>
+<div class="ttc" id="aa00243_html_gga8c314121c2fc478161bcce758688b9a1a8a7cde9bff0ab0d085b102a3e934939b"><div class="ttname"><a href="a00243.html#gga8c314121c2fc478161bcce758688b9a1a8a7cde9bff0ab0d085b102a3e934939b">HWLOC_DISC_PHASE_MISC</a></div><div class="ttdeci">@ HWLOC_DISC_PHASE_MISC</div><div class="ttdoc">Misc objects that gets added below anything else.</div><div class="ttdef"><b>Definition:</b> plugins.h:131</div></div>
+<div class="ttc" id="aa00243_html_gga8c314121c2fc478161bcce758688b9a1aa8e10626cba9af72f5605a1acbdc0015"><div class="ttname"><a href="a00243.html#gga8c314121c2fc478161bcce758688b9a1aa8e10626cba9af72f5605a1acbdc0015">HWLOC_DISC_PHASE_IO</a></div><div class="ttdeci">@ HWLOC_DISC_PHASE_IO</div><div class="ttdoc">I/O discovery that requires PCI devices (OS devices such as OpenCL, CUDA, etc.).</div><div class="ttdef"><b>Definition:</b> plugins.h:127</div></div>
+<div class="ttc" id="aa00243_html_gga8c314121c2fc478161bcce758688b9a1ab41c626c79e9ccb1e7d41e7076972283"><div class="ttname"><a href="a00243.html#gga8c314121c2fc478161bcce758688b9a1ab41c626c79e9ccb1e7d41e7076972283">HWLOC_DISC_PHASE_GLOBAL</a></div><div class="ttdeci">@ HWLOC_DISC_PHASE_GLOBAL</div><div class="ttdoc">xml or synthetic, platform-specific components such as bgq. Discovers everything including CPU,...</div><div class="ttdef"><b>Definition:</b> plugins.h:111</div></div>
+<div class="ttc" id="aa00243_html_gga8c314121c2fc478161bcce758688b9a1ac4264a243844c5fbbff495cdb1b4d51d"><div class="ttname"><a href="a00243.html#gga8c314121c2fc478161bcce758688b9a1ac4264a243844c5fbbff495cdb1b4d51d">HWLOC_DISC_PHASE_MEMORY</a></div><div class="ttdeci">@ HWLOC_DISC_PHASE_MEMORY</div><div class="ttdoc">Attach memory to existing CPU objects.</div><div class="ttdef"><b>Definition:</b> plugins.h:119</div></div>
+<div class="ttc" id="aa00243_html_gga8c314121c2fc478161bcce758688b9a1ada3ed3f00e74909353d6ea4a96cde5ad"><div class="ttname"><a href="a00243.html#gga8c314121c2fc478161bcce758688b9a1ada3ed3f00e74909353d6ea4a96cde5ad">HWLOC_DISC_PHASE_TWEAK</a></div><div class="ttdeci">@ HWLOC_DISC_PHASE_TWEAK</div><div class="ttdoc">Final tweaks to a ready-to-use topology. This phase runs once the topology is loaded,...</div><div class="ttdef"><b>Definition:</b> plugins.h:142</div></div>
+<div class="ttc" id="aa00243_html_ggaae1b38cf9b12e489884ce2a07275964ba205d644d54a0840bd9165fce7d19e6b1"><div class="ttname"><a href="a00243.html#ggaae1b38cf9b12e489884ce2a07275964ba205d644d54a0840bd9165fce7d19e6b1">HWLOC_DISC_STATUS_FLAG_GOT_ALLOWED_RESOURCES</a></div><div class="ttdeci">@ HWLOC_DISC_STATUS_FLAG_GOT_ALLOWED_RESOURCES</div><div class="ttdoc">The sets of allowed resources were already retrieved.</div><div class="ttdef"><b>Definition:</b> plugins.h:148</div></div>
+<div class="ttc" id="aa00244_html_ga31a5a455f4e666b936f0a9e8fb9a0f47"><div class="ttname"><a href="a00244.html#ga31a5a455f4e666b936f0a9e8fb9a0f47">hwloc_component_type_t</a></div><div class="ttdeci">enum hwloc_component_type_e hwloc_component_type_t</div><div class="ttdoc">Generic component type.</div></div>
+<div class="ttc" id="aa00244_html_ga397a1bf7d21dd073320ad0045340f463"><div class="ttname"><a href="a00244.html#ga397a1bf7d21dd073320ad0045340f463">hwloc_component_type_e</a></div><div class="ttdeci">hwloc_component_type_e</div><div class="ttdoc">Generic component type.</div><div class="ttdef"><b>Definition:</b> plugins.h:257</div></div>
+<div class="ttc" id="aa00244_html_gga397a1bf7d21dd073320ad0045340f463a5d6e561f467fe9795a29e7368b613900"><div class="ttname"><a href="a00244.html#gga397a1bf7d21dd073320ad0045340f463a5d6e561f467fe9795a29e7368b613900">HWLOC_COMPONENT_TYPE_DISC</a></div><div class="ttdeci">@ HWLOC_COMPONENT_TYPE_DISC</div><div class="ttdoc">The data field must point to a struct hwloc_disc_component.</div><div class="ttdef"><b>Definition:</b> plugins.h:259</div></div>
+<div class="ttc" id="aa00244_html_gga397a1bf7d21dd073320ad0045340f463adea00cd839c2141c032e1569fd5592bd"><div class="ttname"><a href="a00244.html#gga397a1bf7d21dd073320ad0045340f463adea00cd839c2141c032e1569fd5592bd">HWLOC_COMPONENT_TYPE_XML</a></div><div class="ttdeci">@ HWLOC_COMPONENT_TYPE_XML</div><div class="ttdoc">The data field must point to a struct hwloc_xml_component.</div><div class="ttdef"><b>Definition:</b> plugins.h:262</div></div>
+<div class="ttc" id="aa00245_html_ga0b5c75b2dc37cea2e8a29c4812baf4b3"><div class="ttname"><a href="a00245.html#ga0b5c75b2dc37cea2e8a29c4812baf4b3">hwloc_alloc_setup_object</a></div><div class="ttdeci">hwloc_obj_t hwloc_alloc_setup_object(hwloc_topology_t topology, hwloc_obj_type_t type, unsigned os_index)</div><div class="ttdoc">Allocate and initialize an object of the given type and physical index.</div></div>
+<div class="ttc" id="aa00245_html_ga0ef97debde503b56367689b07bb3e901"><div class="ttname"><a href="a00245.html#ga0ef97debde503b56367689b07bb3e901">hwloc_insert_object_by_parent</a></div><div class="ttdeci">void hwloc_insert_object_by_parent(struct hwloc_topology *topology, hwloc_obj_t parent, hwloc_obj_t obj)</div><div class="ttdoc">Insert an object somewhere in the topology.</div></div>
+<div class="ttc" id="aa00245_html_ga120d8bd74922e1030b621409a6b0be61"><div class="ttname"><a href="a00245.html#ga120d8bd74922e1030b621409a6b0be61">hwloc_topology_reconnect</a></div><div class="ttdeci">int hwloc_topology_reconnect(hwloc_topology_t topology, unsigned long flags)</div><div class="ttdoc">Request a reconnection of children and levels in the topology.</div></div>
+<div class="ttc" id="aa00245_html_ga1e105cfe3c8e77f34cc6df3841deebbc"><div class="ttname"><a href="a00245.html#ga1e105cfe3c8e77f34cc6df3841deebbc">hwloc__insert_object_by_cpuset</a></div><div class="ttdeci">hwloc_obj_t hwloc__insert_object_by_cpuset(struct hwloc_topology *topology, hwloc_obj_t root, hwloc_obj_t obj, const char *reason)</div><div class="ttdoc">Add an object to the topology.</div></div>
+<div class="ttc" id="aa00245_html_ga754b61041ceee9685534a2c5d3cd0156"><div class="ttname"><a href="a00245.html#ga754b61041ceee9685534a2c5d3cd0156">hwloc_obj_add_children_sets</a></div><div class="ttdeci">int hwloc_obj_add_children_sets(hwloc_obj_t obj)</div><div class="ttdoc">Setup object cpusets/nodesets by OR'ing its children.</div></div>
+<div class="ttc" id="aa00245_html_gab527c1e0f243f057d31a724794ad9f88"><div class="ttname"><a href="a00245.html#gab527c1e0f243f057d31a724794ad9f88">hwloc_hide_errors</a></div><div class="ttdeci">int hwloc_hide_errors(void)</div><div class="ttdoc">Check whether error messages are hidden.</div></div>
+<div class="ttc" id="aa00245_html_gac2eaed287bb215cf0bd33014e9e1d374"><div class="ttname"><a href="a00245.html#gac2eaed287bb215cf0bd33014e9e1d374">hwloc_plugin_check_namespace</a></div><div class="ttdeci">static int hwloc_plugin_check_namespace(const char *pluginname, const char *symbol)</div><div class="ttdoc">Make sure that plugins can lookup core symbols.</div><div class="ttdef"><b>Definition:</b> plugins.h:447</div></div>
+<div class="ttc" id="aa00246_html_ga2f402a43025a8a91e8513be1a15e4635"><div class="ttname"><a href="a00246.html#ga2f402a43025a8a91e8513be1a15e4635">hwloc_filter_check_keep_object_type</a></div><div class="ttdeci">static int hwloc_filter_check_keep_object_type(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Check whether a non-I/O object type should be filtered-out.</div><div class="ttdef"><b>Definition:</b> plugins.h:532</div></div>
+<div class="ttc" id="aa00246_html_ga4d2fdce071e5646ef147c9ff1539d1c9"><div class="ttname"><a href="a00246.html#ga4d2fdce071e5646ef147c9ff1539d1c9">hwloc_filter_check_keep_object</a></div><div class="ttdeci">static int hwloc_filter_check_keep_object(hwloc_topology_t topology, hwloc_obj_t obj)</div><div class="ttdoc">Check whether the given object should be filtered-out.</div><div class="ttdef"><b>Definition:</b> plugins.h:545</div></div>
+<div class="ttc" id="aa00246_html_ga60203db6459ebf275bf48c40a37661a0"><div class="ttname"><a href="a00246.html#ga60203db6459ebf275bf48c40a37661a0">hwloc_filter_check_pcidev_subtype_important</a></div><div class="ttdeci">static int hwloc_filter_check_pcidev_subtype_important(unsigned classid)</div><div class="ttdoc">Check whether the given PCI device classid is important.</div><div class="ttdef"><b>Definition:</b> plugins.h:500</div></div>
+<div class="ttc" id="aa00246_html_gac7d57a6d669820f360cf2a070a396560"><div class="ttname"><a href="a00246.html#gac7d57a6d669820f360cf2a070a396560">hwloc_filter_check_osdev_subtype_important</a></div><div class="ttdeci">static int hwloc_filter_check_osdev_subtype_important(hwloc_obj_osdev_type_t subtype)</div><div class="ttdoc">Check whether the given OS device subtype is important.</div><div class="ttdef"><b>Definition:</b> plugins.h:520</div></div>
+<div class="ttc" id="aa00247_html_ga51d1ebcbf9729987c9d17df3aa57d209"><div class="ttname"><a href="a00247.html#ga51d1ebcbf9729987c9d17df3aa57d209">hwloc_pcidisc_find_linkspeed</a></div><div class="ttdeci">int hwloc_pcidisc_find_linkspeed(const unsigned char *config, unsigned offset, float *linkspeed)</div><div class="ttdoc">Fill linkspeed by reading the PCI config space where PCI_CAP_ID_EXP is at position offset.</div></div>
+<div class="ttc" id="aa00247_html_ga6c55fb80c3d0c8c8e61078b3f38adde8"><div class="ttname"><a href="a00247.html#ga6c55fb80c3d0c8c8e61078b3f38adde8">hwloc_pcidisc_check_bridge_type</a></div><div class="ttdeci">hwloc_obj_type_t hwloc_pcidisc_check_bridge_type(unsigned device_class, const unsigned char *config)</div><div class="ttdoc">Return the hwloc object type (PCI device or Bridge) for the given class and configuration space.</div></div>
+<div class="ttc" id="aa00247_html_ga706f71cfea09d547d2cbafa642d6e03b"><div class="ttname"><a href="a00247.html#ga706f71cfea09d547d2cbafa642d6e03b">hwloc_pcidisc_find_cap</a></div><div class="ttdeci">unsigned hwloc_pcidisc_find_cap(const unsigned char *config, unsigned cap)</div><div class="ttdoc">Return the offset of the given capability in the PCI config space buffer.</div></div>
+<div class="ttc" id="aa00247_html_ga95acf6822a49447c11067d0b843965ba"><div class="ttname"><a href="a00247.html#ga95acf6822a49447c11067d0b843965ba">hwloc_pcidisc_find_bridge_buses</a></div><div class="ttdeci">int hwloc_pcidisc_find_bridge_buses(unsigned domain, unsigned bus, unsigned dev, unsigned func, unsigned *secondary_busp, unsigned *subordinate_busp, const unsigned char *config)</div><div class="ttdoc">Fills the attributes of the given PCI bridge using the given PCI config space.</div></div>
+<div class="ttc" id="aa00247_html_gab76ddc4f55db8101ef0d44317965128c"><div class="ttname"><a href="a00247.html#gab76ddc4f55db8101ef0d44317965128c">hwloc_pcidisc_tree_insert_by_busid</a></div><div class="ttdeci">void hwloc_pcidisc_tree_insert_by_busid(struct hwloc_obj **treep, struct hwloc_obj *obj)</div><div class="ttdoc">Insert a PCI object in the given PCI tree by looking at PCI bus IDs.</div></div>
+<div class="ttc" id="aa00247_html_gabda1d6c1799e50b9226f8a4da9bd29ea"><div class="ttname"><a href="a00247.html#gabda1d6c1799e50b9226f8a4da9bd29ea">hwloc_pcidisc_tree_attach</a></div><div class="ttdeci">int hwloc_pcidisc_tree_attach(struct hwloc_topology *topology, struct hwloc_obj *tree)</div><div class="ttdoc">Add some hostbridges on top of the given tree of PCI objects and attach them to the topology.</div></div>
+<div class="ttc" id="aa00248_html_ga1468ac5f0bfb0e18bfc04c9ce5a5a4a3"><div class="ttname"><a href="a00248.html#ga1468ac5f0bfb0e18bfc04c9ce5a5a4a3">hwloc_backend_distances_add_commit</a></div><div class="ttdeci">int hwloc_backend_distances_add_commit(hwloc_topology_t topology, hwloc_backend_distances_add_handle_t handle, unsigned long flags)</div><div class="ttdoc">Commit a new distances structure.</div></div>
+<div class="ttc" id="aa00248_html_ga1cc465a010c5f75e0f280cdc8e27197d"><div class="ttname"><a href="a00248.html#ga1cc465a010c5f75e0f280cdc8e27197d">hwloc_pci_find_by_busid</a></div><div class="ttdeci">struct hwloc_obj * hwloc_pci_find_by_busid(struct hwloc_topology *topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)</div><div class="ttdoc">Find the PCI device or bridge matching a PCI bus ID exactly.</div></div>
+<div class="ttc" id="aa00248_html_ga7964833550947636ab8975909de3fa98"><div class="ttname"><a href="a00248.html#ga7964833550947636ab8975909de3fa98">hwloc_pci_find_parent_by_busid</a></div><div class="ttdeci">struct hwloc_obj * hwloc_pci_find_parent_by_busid(struct hwloc_topology *topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)</div><div class="ttdoc">Find the object or a parent of a PCI bus ID.</div></div>
+<div class="ttc" id="aa00248_html_gaa27036bd83102f8e406f1051d560da6c"><div class="ttname"><a href="a00248.html#gaa27036bd83102f8e406f1051d560da6c">hwloc_backend_distances_add_values</a></div><div class="ttdeci">int hwloc_backend_distances_add_values(hwloc_topology_t topology, hwloc_backend_distances_add_handle_t handle, unsigned nbobjs, hwloc_obj_t *objs, hwloc_uint64_t *values, unsigned long flags)</div><div class="ttdoc">Specify the objects and values in a new empty distances structure.</div></div>
+<div class="ttc" id="aa00248_html_gaa66a0bd519a5b1183a3e9b0c35a7f6cc"><div class="ttname"><a href="a00248.html#gaa66a0bd519a5b1183a3e9b0c35a7f6cc">hwloc_backend_distances_add_create</a></div><div class="ttdeci">hwloc_backend_distances_add_handle_t hwloc_backend_distances_add_create(hwloc_topology_t topology, const char *name, unsigned long kind, unsigned long flags)</div><div class="ttdoc">Create a new empty distances structure.</div></div>
+<div class="ttc" id="aa00248_html_gafe5e49d32dd0a28ead94b6e31048e042"><div class="ttname"><a href="a00248.html#gafe5e49d32dd0a28ead94b6e31048e042">hwloc_backend_distances_add_handle_t</a></div><div class="ttdeci">void * hwloc_backend_distances_add_handle_t</div><div class="ttdoc">Handle to a new distances structure during its addition to the topology.</div><div class="ttdef"><b>Definition:</b> plugins.h:649</div></div>
+<div class="ttc" id="aa00253_html"><div class="ttname"><a href="a00253.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:396</div></div>
+<div class="ttc" id="aa00253_html_abb709ec38f2970677e4e57d1d30be96d"><div class="ttname"><a href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name str...</div><div class="ttdef"><b>Definition:</b> hwloc.h:408</div></div>
+<div class="ttc" id="aa00253_html_acc4f0803f244867e68fe0036800be5de"><div class="ttname"><a href="a00253.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj::type</a></div><div class="ttdeci">hwloc_obj_type_t type</div><div class="ttdoc">Type of object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:398</div></div>
+<div class="ttc" id="aa00253_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:415</div></div>
+<div class="ttc" id="aa00257_html_a0b66da7ab072f7c016f8ed86701f5a7c"><div class="ttname"><a href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">hwloc_obj_attr_u::pcidev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_pcidev_attr_s pcidev</div></div>
+<div class="ttc" id="aa00257_html_aaf7a5c38b5185703ff18c46ad2761dcf"><div class="ttname"><a href="a00257.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u::osdev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_osdev_attr_s osdev</div></div>
+<div class="ttc" id="aa00277_html_aee735352d9f1686fd290fc6d6397c334"><div class="ttname"><a href="a00277.html#aee735352d9f1686fd290fc6d6397c334">hwloc_obj_attr_u::hwloc_pcidev_attr_s::class_id</a></div><div class="ttdeci">unsigned short class_id</div><div class="ttdef"><b>Definition:</b> hwloc.h:640</div></div>
+<div class="ttc" id="aa00297_html_a31e019e27e54ac6138d04be639bb96f9"><div class="ttname"><a href="a00297.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s::type</a></div><div class="ttdeci">hwloc_obj_osdev_type_t type</div><div class="ttdef"><b>Definition:</b> hwloc.h:666</div></div>
+<div class="ttc" id="aa00381_html"><div class="ttname"><a href="a00381.html">hwloc_disc_component</a></div><div class="ttdoc">Discovery component structure.</div><div class="ttdef"><b>Definition:</b> plugins.h:41</div></div>
+<div class="ttc" id="aa00381_html_a4064c3b5d9213027e87caebef380a840"><div class="ttname"><a href="a00381.html#a4064c3b5d9213027e87caebef380a840">hwloc_disc_component::name</a></div><div class="ttdeci">const char * name</div><div class="ttdoc">Name. If this component is built as a plugin, this name does not have to match the plugin filename.</div><div class="ttdef"><b>Definition:</b> plugins.h:45</div></div>
+<div class="ttc" id="aa00381_html_a61ad3151efa02e3dbad5d919758f9c90"><div class="ttname"><a href="a00381.html#a61ad3151efa02e3dbad5d919758f9c90">hwloc_disc_component::phases</a></div><div class="ttdeci">unsigned phases</div><div class="ttdoc">Discovery phases performed by this component. OR'ed set of hwloc_disc_phase_t.</div><div class="ttdef"><b>Definition:</b> plugins.h:50</div></div>
+<div class="ttc" id="aa00381_html_acbb9957914dbf7b8f504215aa0c8d3fe"><div class="ttname"><a href="a00381.html#acbb9957914dbf7b8f504215aa0c8d3fe">hwloc_disc_component::excluded_phases</a></div><div class="ttdeci">unsigned excluded_phases</div><div class="ttdoc">Component phases to exclude, as an OR'ed set of hwloc_disc_phase_t.</div><div class="ttdef"><b>Definition:</b> plugins.h:60</div></div>
+<div class="ttc" id="aa00381_html_ace80cafe2b1732b047b3fc3da47e6517"><div class="ttname"><a href="a00381.html#ace80cafe2b1732b047b3fc3da47e6517">hwloc_disc_component::enabled_by_default</a></div><div class="ttdeci">unsigned enabled_by_default</div><div class="ttdoc">Enabled by default. If unset, if will be disabled unless explicitly requested.</div><div class="ttdef"><b>Definition:</b> plugins.h:84</div></div>
+<div class="ttc" id="aa00381_html_ae86d283c272c5ae24073a235efbf6b59"><div class="ttname"><a href="a00381.html#ae86d283c272c5ae24073a235efbf6b59">hwloc_disc_component::priority</a></div><div class="ttdeci">unsigned priority</div><div class="ttdoc">Component priority. Used to sort topology-&gt;components, higher priority first. Also used to decide bet...</div><div class="ttdef"><b>Definition:</b> plugins.h:79</div></div>
+<div class="ttc" id="aa00385_html"><div class="ttname"><a href="a00385.html">hwloc_disc_status</a></div><div class="ttdoc">Discovery status structure.</div><div class="ttdef"><b>Definition:</b> plugins.h:156</div></div>
+<div class="ttc" id="aa00385_html_a0f95fa42d46a6e7cf8dee8af12afee3a"><div class="ttname"><a href="a00385.html#a0f95fa42d46a6e7cf8dee8af12afee3a">hwloc_disc_status::excluded_phases</a></div><div class="ttdeci">unsigned excluded_phases</div><div class="ttdoc">Dynamically excluded phases. If a component decides during discovery that some phases are no longer n...</div><div class="ttdef"><b>Definition:</b> plugins.h:165</div></div>
+<div class="ttc" id="aa00385_html_abaf7c8c082d43e133171f0723dbf824b"><div class="ttname"><a href="a00385.html#abaf7c8c082d43e133171f0723dbf824b">hwloc_disc_status::phase</a></div><div class="ttdeci">hwloc_disc_phase_t phase</div><div class="ttdoc">The current discovery phase that is performed. Must match one of the phases in the component phases f...</div><div class="ttdef"><b>Definition:</b> plugins.h:160</div></div>
+<div class="ttc" id="aa00385_html_ad8b123cecb945a9182eb824ccf8ef9d7"><div class="ttname"><a href="a00385.html#ad8b123cecb945a9182eb824ccf8ef9d7">hwloc_disc_status::flags</a></div><div class="ttdeci">unsigned long flags</div><div class="ttdoc">OR'ed set of hwloc_disc_status_flag_e.</div><div class="ttdef"><b>Definition:</b> plugins.h:168</div></div>
+<div class="ttc" id="aa00389_html"><div class="ttname"><a href="a00389.html">hwloc_backend</a></div><div class="ttdoc">Discovery backend structure.</div><div class="ttdef"><b>Definition:</b> plugins.h:189</div></div>
+<div class="ttc" id="aa00389_html_a2ea5bd36b7f06efdb65b98b32af16c68"><div class="ttname"><a href="a00389.html#a2ea5bd36b7f06efdb65b98b32af16c68">hwloc_backend::private_data</a></div><div class="ttdeci">void * private_data</div><div class="ttdoc">Backend private data, or NULL if none.</div><div class="ttdef"><b>Definition:</b> plugins.h:216</div></div>
+<div class="ttc" id="aa00389_html_a36c4fa86350525b46340c67b802c69c7"><div class="ttname"><a href="a00389.html#a36c4fa86350525b46340c67b802c69c7">hwloc_backend::disable</a></div><div class="ttdeci">void(* disable)(struct hwloc_backend *backend)</div><div class="ttdoc">Callback for freeing the private_data. May be NULL.</div><div class="ttdef"><b>Definition:</b> plugins.h:220</div></div>
+<div class="ttc" id="aa00389_html_aaa8eafe495aadd81c2e3c4ec527c10ba"><div class="ttname"><a href="a00389.html#aaa8eafe495aadd81c2e3c4ec527c10ba">hwloc_backend::flags</a></div><div class="ttdeci">unsigned long flags</div><div class="ttdoc">Backend flags, currently always 0.</div><div class="ttdef"><b>Definition:</b> plugins.h:205</div></div>
+<div class="ttc" id="aa00389_html_aaac253491264c20930f44817270bc502"><div class="ttname"><a href="a00389.html#aaac253491264c20930f44817270bc502">hwloc_backend::get_pci_busid_cpuset</a></div><div class="ttdeci">int(* get_pci_busid_cpuset)(struct hwloc_backend *backend, struct hwloc_pcidev_attr_s *busid, hwloc_bitmap_t cpuset)</div><div class="ttdoc">Callback to retrieve the locality of a PCI object. Called by the PCI core when attaching PCI hierarch...</div><div class="ttdef"><b>Definition:</b> plugins.h:233</div></div>
+<div class="ttc" id="aa00389_html_ab8806f6db077f1bb2e9d63ec99223f7a"><div class="ttname"><a href="a00389.html#ab8806f6db077f1bb2e9d63ec99223f7a">hwloc_backend::is_thissystem</a></div><div class="ttdeci">int is_thissystem</div><div class="ttdoc">Backend-specific 'is_thissystem' property. Set to 0 if the backend disables the thissystem flag for t...</div><div class="ttdef"><b>Definition:</b> plugins.h:213</div></div>
+<div class="ttc" id="aa00389_html_accff2cd8404be43c3b44cec05e6f609b"><div class="ttname"><a href="a00389.html#accff2cd8404be43c3b44cec05e6f609b">hwloc_backend::discover</a></div><div class="ttdeci">int(* discover)(struct hwloc_backend *backend, struct hwloc_disc_status *status)</div><div class="ttdoc">Main discovery callback. returns -1 on error, either because it couldn't add its objects ot the exist...</div><div class="ttdef"><b>Definition:</b> plugins.h:227</div></div>
+<div class="ttc" id="aa00389_html_aeca769840a6ff03e96462a9533adbccd"><div class="ttname"><a href="a00389.html#aeca769840a6ff03e96462a9533adbccd">hwloc_backend::phases</a></div><div class="ttdeci">unsigned phases</div><div class="ttdoc">Discovery phases performed by this component, possibly without some of them if excluded by other comp...</div><div class="ttdef"><b>Definition:</b> plugins.h:202</div></div>
+<div class="ttc" id="aa00393_html"><div class="ttname"><a href="a00393.html">hwloc_component</a></div><div class="ttdoc">Generic component structure.</div><div class="ttdef"><b>Definition:</b> plugins.h:270</div></div>
+<div class="ttc" id="aa00393_html_a3250bd6fc9713946991d805e48091b2e"><div class="ttname"><a href="a00393.html#a3250bd6fc9713946991d805e48091b2e">hwloc_component::abi</a></div><div class="ttdeci">unsigned abi</div><div class="ttdoc">Component ABI version, set to HWLOC_COMPONENT_ABI.</div><div class="ttdef"><b>Definition:</b> plugins.h:272</div></div>
+<div class="ttc" id="aa00393_html_a4612015451a1c706e8ba19114cb8baae"><div class="ttname"><a href="a00393.html#a4612015451a1c706e8ba19114cb8baae">hwloc_component::finalize</a></div><div class="ttdeci">void(* finalize)(unsigned long flags)</div><div class="ttdoc">Process-wide component termination callback.</div><div class="ttdef"><b>Definition:</b> plugins.h:304</div></div>
+<div class="ttc" id="aa00393_html_a4b8cffd1d943c29fdc102b841b8598d4"><div class="ttname"><a href="a00393.html#a4b8cffd1d943c29fdc102b841b8598d4">hwloc_component::data</a></div><div class="ttdeci">void * data</div><div class="ttdoc">Component data, pointing to a struct hwloc_disc_component or struct hwloc_xml_component.</div><div class="ttdef"><b>Definition:</b> plugins.h:313</div></div>
+<div class="ttc" id="aa00393_html_a789208ada7e17492cfd3a5a88a6bb0ee"><div class="ttname"><a href="a00393.html#a789208ada7e17492cfd3a5a88a6bb0ee">hwloc_component::type</a></div><div class="ttdeci">hwloc_component_type_t type</div><div class="ttdoc">Component type.</div><div class="ttdef"><b>Definition:</b> plugins.h:307</div></div>
+<div class="ttc" id="aa00393_html_ab8043c5b4cc0e81aabba586ccb194335"><div class="ttname"><a href="a00393.html#ab8043c5b4cc0e81aabba586ccb194335">hwloc_component::flags</a></div><div class="ttdeci">unsigned long flags</div><div class="ttdoc">Component flags, unused for now.</div><div class="ttdef"><b>Definition:</b> plugins.h:310</div></div>
+<div class="ttc" id="aa00393_html_aea613546886d9b8221cadba920fe3ebc"><div class="ttname"><a href="a00393.html#aea613546886d9b8221cadba920fe3ebc">hwloc_component::init</a></div><div class="ttdeci">int(* init)(unsigned long flags)</div><div class="ttdoc">Process-wide component initialization callback.</div><div class="ttdef"><b>Definition:</b> plugins.h:291</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00191_source.html b/doc/doxygen-doc/html/a00191_source.html
new file mode 100644
index 00000000..09b6891f
--- /dev/null
+++ b/doc/doxygen-doc/html/a00191_source.html
@@ -0,0 +1,114 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): netloc.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">netloc.h</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div>
+<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"> * Copyright © 2013-2014 Cisco Systems, Inc.  All rights reserved.</span></div>
+<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment"> * Copyright © 2013-2014 University of Wisconsin-La Crosse.</span></div>
+<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> *                         All rights reserved.</span></div>
+<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> * Copyright © 2015-2016 Inria.  All rights reserved.</span></div>
+<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * $COPYRIGHT$</span></div>
+<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> * Additional copyrights may follow</span></div>
+<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
+<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> *</span></div>
+<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> * $HEADER$</span></div>
+<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> */</span></div>
+<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160; </div>
+<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#ifndef _NETLOC_H_</span></div>
+<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#define _NETLOC_H_</span></div>
+<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160; </div>
+<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#ifndef _GNU_SOURCE</span></div>
+<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#define _GNU_SOURCE </span><span class="comment">// for asprintf</span></div>
+<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160; </div>
+<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &lt;hwloc/autogen/config.h&gt;</span></div>
+<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160; </div>
+<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#include &lt;hwloc.h&gt;</span></div>
+<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160; </div>
+<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
+<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160; </div>
+<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="keyword">enum</span> {</div>
+<div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea4deb864e4b46fe70b83c3220442a627c">   37</a></span>&#160;    <a class="code" href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea4deb864e4b46fe70b83c3220442a627c">NETLOC_SUCCESS</a>         =  0, </div>
+<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea4b33f8da6efc963562a93569ac8b349a">   38</a></span>&#160;    <a class="code" href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea4b33f8da6efc963562a93569ac8b349a">NETLOC_ERROR</a>           = -1, </div>
+<div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea6e4322619d38dec18dbd16a606b14aa8">   39</a></span>&#160;    <a class="code" href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea6e4322619d38dec18dbd16a606b14aa8">NETLOC_ERROR_NOTDIR</a>    = -2, </div>
+<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea81bc77a77d1a42054dc64b11a4cc8612">   40</a></span>&#160;    <a class="code" href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea81bc77a77d1a42054dc64b11a4cc8612">NETLOC_ERROR_NOENT</a>     = -3, </div>
+<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea0dc7c18a5a3d027bf3f835eacdbed932">   41</a></span>&#160;    <a class="code" href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea0dc7c18a5a3d027bf3f835eacdbed932">NETLOC_ERROR_EMPTY</a>     = -4, </div>
+<div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea4485021555c6cb24d5f6e391b1bd6dee">   42</a></span>&#160;    <a class="code" href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea4485021555c6cb24d5f6e391b1bd6dee">NETLOC_ERROR_MULTIPLE</a>  = -5, </div>
+<div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea4a55d10dfc1eb5c84027de7d48dfac4d">   43</a></span>&#160;    <a class="code" href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea4a55d10dfc1eb5c84027de7d48dfac4d">NETLOC_ERROR_NOT_IMPL</a>  = -6, </div>
+<div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea67dfc8498fa899900e2231fad4538556">   44</a></span>&#160;    <a class="code" href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea67dfc8498fa899900e2231fad4538556">NETLOC_ERROR_EXISTS</a>    = -7, </div>
+<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea61b43e2553779d3610f894fd6698a6ee">   45</a></span>&#160;    <a class="code" href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea61b43e2553779d3610f894fd6698a6ee">NETLOC_ERROR_NOT_FOUND</a> = -8, </div>
+<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;    <a class="code" href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea39974c6110bed527cb7658672b8eeeb9">NETLOC_ERROR_MAX</a>       = -9  </div>
+<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea39974c6110bed527cb7658672b8eeeb9">   47</a></span>&#160;};</div>
+<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160; </div>
+<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160; </div>
+<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
+<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
+<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="preprocessor">#endif</span></div>
+<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160; </div>
+<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// _NETLOC_H_</span></div>
+<div class="ttc" id="aa00249_html_gga61dadd085c1777f559549e05962b2c9ea0dc7c18a5a3d027bf3f835eacdbed932"><div class="ttname"><a href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea0dc7c18a5a3d027bf3f835eacdbed932">NETLOC_ERROR_EMPTY</a></div><div class="ttdeci">@ NETLOC_ERROR_EMPTY</div><div class="ttdef"><b>Definition:</b> netloc.h:41</div></div>
+<div class="ttc" id="aa00249_html_gga61dadd085c1777f559549e05962b2c9ea39974c6110bed527cb7658672b8eeeb9"><div class="ttname"><a href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea39974c6110bed527cb7658672b8eeeb9">NETLOC_ERROR_MAX</a></div><div class="ttdeci">@ NETLOC_ERROR_MAX</div><div class="ttdef"><b>Definition:</b> netloc.h:46</div></div>
+<div class="ttc" id="aa00249_html_gga61dadd085c1777f559549e05962b2c9ea4485021555c6cb24d5f6e391b1bd6dee"><div class="ttname"><a href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea4485021555c6cb24d5f6e391b1bd6dee">NETLOC_ERROR_MULTIPLE</a></div><div class="ttdeci">@ NETLOC_ERROR_MULTIPLE</div><div class="ttdef"><b>Definition:</b> netloc.h:42</div></div>
+<div class="ttc" id="aa00249_html_gga61dadd085c1777f559549e05962b2c9ea4a55d10dfc1eb5c84027de7d48dfac4d"><div class="ttname"><a href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea4a55d10dfc1eb5c84027de7d48dfac4d">NETLOC_ERROR_NOT_IMPL</a></div><div class="ttdeci">@ NETLOC_ERROR_NOT_IMPL</div><div class="ttdef"><b>Definition:</b> netloc.h:43</div></div>
+<div class="ttc" id="aa00249_html_gga61dadd085c1777f559549e05962b2c9ea4b33f8da6efc963562a93569ac8b349a"><div class="ttname"><a href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea4b33f8da6efc963562a93569ac8b349a">NETLOC_ERROR</a></div><div class="ttdeci">@ NETLOC_ERROR</div><div class="ttdef"><b>Definition:</b> netloc.h:38</div></div>
+<div class="ttc" id="aa00249_html_gga61dadd085c1777f559549e05962b2c9ea4deb864e4b46fe70b83c3220442a627c"><div class="ttname"><a href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea4deb864e4b46fe70b83c3220442a627c">NETLOC_SUCCESS</a></div><div class="ttdeci">@ NETLOC_SUCCESS</div><div class="ttdef"><b>Definition:</b> netloc.h:37</div></div>
+<div class="ttc" id="aa00249_html_gga61dadd085c1777f559549e05962b2c9ea61b43e2553779d3610f894fd6698a6ee"><div class="ttname"><a href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea61b43e2553779d3610f894fd6698a6ee">NETLOC_ERROR_NOT_FOUND</a></div><div class="ttdeci">@ NETLOC_ERROR_NOT_FOUND</div><div class="ttdef"><b>Definition:</b> netloc.h:45</div></div>
+<div class="ttc" id="aa00249_html_gga61dadd085c1777f559549e05962b2c9ea67dfc8498fa899900e2231fad4538556"><div class="ttname"><a href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea67dfc8498fa899900e2231fad4538556">NETLOC_ERROR_EXISTS</a></div><div class="ttdeci">@ NETLOC_ERROR_EXISTS</div><div class="ttdef"><b>Definition:</b> netloc.h:44</div></div>
+<div class="ttc" id="aa00249_html_gga61dadd085c1777f559549e05962b2c9ea6e4322619d38dec18dbd16a606b14aa8"><div class="ttname"><a href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea6e4322619d38dec18dbd16a606b14aa8">NETLOC_ERROR_NOTDIR</a></div><div class="ttdeci">@ NETLOC_ERROR_NOTDIR</div><div class="ttdef"><b>Definition:</b> netloc.h:39</div></div>
+<div class="ttc" id="aa00249_html_gga61dadd085c1777f559549e05962b2c9ea81bc77a77d1a42054dc64b11a4cc8612"><div class="ttname"><a href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea81bc77a77d1a42054dc64b11a4cc8612">NETLOC_ERROR_NOENT</a></div><div class="ttdeci">@ NETLOC_ERROR_NOENT</div><div class="ttdef"><b>Definition:</b> netloc.h:40</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00194.html b/doc/doxygen-doc/html/a00194.html
new file mode 100644
index 00000000..bb96e4c1
--- /dev/null
+++ b/doc/doxygen-doc/html/a00194.html
@@ -0,0 +1,127 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): API version</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">API version</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ga8f4dfb8eef138af55dd1a0fa802e5476"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00194.html#ga8f4dfb8eef138af55dd1a0fa802e5476">HWLOC_API_VERSION</a>&#160;&#160;&#160;0x00020800</td></tr>
+<tr class="separator:ga8f4dfb8eef138af55dd1a0fa802e5476"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaac5bc1f46f55e10ef0141a68ce70e21f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00194.html#gaac5bc1f46f55e10ef0141a68ce70e21f">HWLOC_COMPONENT_ABI</a>&#160;&#160;&#160;7</td></tr>
+<tr class="separator:gaac5bc1f46f55e10ef0141a68ce70e21f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga9c0b50c98add1adf57ed1ce85bb5190d"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00194.html#ga9c0b50c98add1adf57ed1ce85bb5190d">hwloc_get_api_version</a> (void)</td></tr>
+<tr class="separator:ga9c0b50c98add1adf57ed1ce85bb5190d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a id="ga8f4dfb8eef138af55dd1a0fa802e5476"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga8f4dfb8eef138af55dd1a0fa802e5476">&#9670;&nbsp;</a></span>HWLOC_API_VERSION</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define HWLOC_API_VERSION&#160;&#160;&#160;0x00020800</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Indicate at build time which hwloc API version is being used. </p>
+<p>This number is updated to (X&lt;&lt;16)+(Y&lt;&lt;8)+Z when a new release X.Y.Z actually modifies the API.</p>
+<p>Users may check for available features at build time using this number (see <a class="el" href="a00409.html#faq_version_api">How do I handle API changes?</a>).</p>
+<dl class="section note"><dt>Note</dt><dd>This should not be confused with HWLOC_VERSION, the library version. Two stable releases of the same series usually have the same <a class="el" href="a00194.html#ga8f4dfb8eef138af55dd1a0fa802e5476" title="Indicate at build time which hwloc API version is being used.">HWLOC_API_VERSION</a> even if their HWLOC_VERSION are different. </dd></dl>
+
+</div>
+</div>
+<a id="gaac5bc1f46f55e10ef0141a68ce70e21f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaac5bc1f46f55e10ef0141a68ce70e21f">&#9670;&nbsp;</a></span>HWLOC_COMPONENT_ABI</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define HWLOC_COMPONENT_ABI&#160;&#160;&#160;7</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Current component and plugin ABI version (see <a class="el" href="a00188_source.html">hwloc/plugins.h</a>) </p>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga9c0b50c98add1adf57ed1ce85bb5190d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga9c0b50c98add1adf57ed1ce85bb5190d">&#9670;&nbsp;</a></span>hwloc_get_api_version()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned hwloc_get_api_version </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Indicate at runtime which hwloc API version was used at build time. </p>
+<p>Should be <a class="el" href="a00194.html#ga8f4dfb8eef138af55dd1a0fa802e5476" title="Indicate at build time which hwloc API version is being used.">HWLOC_API_VERSION</a> if running on the same version. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00195.html b/doc/doxygen-doc/html/a00195.html
new file mode 100644
index 00000000..1f3e7a8b
--- /dev/null
+++ b/doc/doxygen-doc/html/a00195.html
@@ -0,0 +1,139 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Object Sets (hwloc_cpuset_t and hwloc_nodeset_t)</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#typedef-members">Typedefs</a>  </div>
+  <div class="headertitle">
+<div class="title">Object Sets (hwloc_cpuset_t and hwloc_nodeset_t)</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga4bbf39b68b6f568fb92739e7c0ea7801"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></td></tr>
+<tr class="separator:ga4bbf39b68b6f568fb92739e7c0ea7801"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1f784433e9b606261f62d1134f6a3b25"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a></td></tr>
+<tr class="separator:ga1f784433e9b606261f62d1134f6a3b25"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga37e35730fa7e775b5bb0afe893d6d508"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a></td></tr>
+<tr class="separator:ga37e35730fa7e775b5bb0afe893d6d508"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2f5276235841ad66a79bedad16a5a10c"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a></td></tr>
+<tr class="separator:ga2f5276235841ad66a79bedad16a5a10c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Hwloc uses bitmaps to represent two distinct kinds of object sets: CPU sets (<a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801" title="A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.">hwloc_cpuset_t</a>) and NUMA node sets (<a class="el" href="a00195.html#ga37e35730fa7e775b5bb0afe893d6d508" title="A node set is a bitmap whose bits are set according to NUMA memory node physical OS indexes.">hwloc_nodeset_t</a>). These types are both typedefs to a common back end type (<a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84" title="Set of bits represented as an opaque pointer to an internal bitmap.">hwloc_bitmap_t</a>), and therefore all the hwloc bitmap functions are applicable to both <a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801" title="A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.">hwloc_cpuset_t</a> and <a class="el" href="a00195.html#ga37e35730fa7e775b5bb0afe893d6d508" title="A node set is a bitmap whose bits are set according to NUMA memory node physical OS indexes.">hwloc_nodeset_t</a> (see <a class="el" href="a00217.html">The bitmap API</a>).</p>
+<p>The rationale for having two different types is that even though the actions one wants to perform on these types are the same (e.g., enable and disable individual items in the set/mask), they're used in very different contexts: one for specifying which processors to use and one for specifying which NUMA nodes to use. Hence, the name difference is really just to reflect the intent of where the type is used. </p>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a id="ga1f784433e9b606261f62d1134f6a3b25"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga1f784433e9b606261f62d1134f6a3b25">&#9670;&nbsp;</a></span>hwloc_const_cpuset_t</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> <a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>A non-modifiable <a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801" title="A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.">hwloc_cpuset_t</a>. </p>
+
+</div>
+</div>
+<a id="ga2f5276235841ad66a79bedad16a5a10c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga2f5276235841ad66a79bedad16a5a10c">&#9670;&nbsp;</a></span>hwloc_const_nodeset_t</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> <a class="el" href="a00195.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>A non-modifiable <a class="el" href="a00195.html#ga37e35730fa7e775b5bb0afe893d6d508" title="A node set is a bitmap whose bits are set according to NUMA memory node physical OS indexes.">hwloc_nodeset_t</a>. </p>
+
+</div>
+</div>
+<a id="ga4bbf39b68b6f568fb92739e7c0ea7801"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga4bbf39b68b6f568fb92739e7c0ea7801">&#9670;&nbsp;</a></span>hwloc_cpuset_t</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef <a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> <a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>A CPU set is a bitmap whose bits are set according to CPU physical OS indexes. </p>
+<p>It may be consulted and modified with the bitmap API as any <a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84" title="Set of bits represented as an opaque pointer to an internal bitmap.">hwloc_bitmap_t</a> (see <a class="el" href="a00131_source.html">hwloc/bitmap.h</a>).</p>
+<p>Each bit may be converted into a PU object using <a class="el" href="a00212.html#ga751c238a4931db5cc0ca3181b7dd7479" title="Returns the object of type HWLOC_OBJ_PU with os_index.">hwloc_get_pu_obj_by_os_index()</a>. </p>
+
+</div>
+</div>
+<a id="ga37e35730fa7e775b5bb0afe893d6d508"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga37e35730fa7e775b5bb0afe893d6d508">&#9670;&nbsp;</a></span>hwloc_nodeset_t</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef <a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> <a class="el" href="a00195.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>A node set is a bitmap whose bits are set according to NUMA memory node physical OS indexes. </p>
+<p>It may be consulted and modified with the bitmap API as any <a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84" title="Set of bits represented as an opaque pointer to an internal bitmap.">hwloc_bitmap_t</a> (see <a class="el" href="a00131_source.html">hwloc/bitmap.h</a>). Each bit may be converted into a NUMA node object using <a class="el" href="a00212.html#gab89d9ed9edfaa3dd526fb6ee1a1618ea" title="Returns the object of type HWLOC_OBJ_NUMANODE with os_index.">hwloc_get_numanode_obj_by_os_index()</a>.</p>
+<p>When binding memory on a system without any NUMA node, the single main memory bank is considered as NUMA node #0.</p>
+<p>See also <a class="el" href="a00215.html">Converting between CPU sets and node sets</a>. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00196.html b/doc/doxygen-doc/html/a00196.html
new file mode 100644
index 00000000..58c11817
--- /dev/null
+++ b/doc/doxygen-doc/html/a00196.html
@@ -0,0 +1,387 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Object Types</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Object Types</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ga3b6e4128e9fe773863b123fa6e4a080b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#ga3b6e4128e9fe773863b123fa6e4a080b">HWLOC_TYPE_UNORDERED</a></td></tr>
+<tr class="separator:ga3b6e4128e9fe773863b123fa6e4a080b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga552ec74296a024237f474acec98694c0"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="a00196.html#ga791c9875c8fe20f3e1e5871e0657e59b">hwloc_obj_cache_type_e</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a></td></tr>
+<tr class="separator:ga552ec74296a024237f474acec98694c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab34362c7a23296c3f12c5756747abda3"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="a00196.html#ga48a4803c72574191d7ead1c62aaf9860">hwloc_obj_bridge_type_e</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#gab34362c7a23296c3f12c5756747abda3">hwloc_obj_bridge_type_t</a></td></tr>
+<tr class="separator:gab34362c7a23296c3f12c5756747abda3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa9a6941ef7b1c169412518d7ef71b3d2"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="a00196.html#ga64f5d539df299c97ae80ce53fc4b56c0">hwloc_obj_osdev_type_e</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a></td></tr>
+<tr class="separator:gaa9a6941ef7b1c169412518d7ef71b3d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:gacd37bb612667dc437d66bfb175a8dc55"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> { <br />
+&#160;&#160;<a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a3f4e83ffc4a259354959ae8a9eaa2a80">HWLOC_OBJ_MACHINE</a>
+, <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55ab16ab8c0dbffc234921d86f3dfb63129">HWLOC_OBJ_PACKAGE</a>
+, <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55ac793958f330bca371aa1535de8aff45f">HWLOC_OBJ_CORE</a>
+, <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661">HWLOC_OBJ_PU</a>
+, <br />
+&#160;&#160;<a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a56389b8eb2e2f74f288bb657c4e72140">HWLOC_OBJ_L1CACHE</a>
+, <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a18f61d19fe9f4bcea978fcc68bc078fb">HWLOC_OBJ_L2CACHE</a>
+, <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a25fae0e0514c90e3973a29866a5a837d">HWLOC_OBJ_L3CACHE</a>
+, <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a54923bfa13df9d7e6d6dd0d5baff5f72">HWLOC_OBJ_L4CACHE</a>
+, <br />
+&#160;&#160;<a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a67194c9de5e3e581c64c11d2eb1c109d">HWLOC_OBJ_L5CACHE</a>
+, <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55afa834a85d9e53836cf0db6d0bd8329b4">HWLOC_OBJ_L1ICACHE</a>
+, <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a10713b7e561b8cc32544cd31b1c17f8d">HWLOC_OBJ_L2ICACHE</a>
+, <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55ac22850c717f07bf7ffb316fadd08d218">HWLOC_OBJ_L3ICACHE</a>
+, <br />
+&#160;&#160;<a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56">HWLOC_OBJ_GROUP</a>
+, <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>
+, <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0">HWLOC_OBJ_BRIDGE</a>
+, <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a>
+, <br />
+&#160;&#160;<a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075">HWLOC_OBJ_OS_DEVICE</a>
+, <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d">HWLOC_OBJ_MISC</a>
+, <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a0ed5bd98974729a0c476c39e917dabd6">HWLOC_OBJ_MEMCACHE</a>
+, <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55af78bb6cde53aaaaa162a7dc420c409da">HWLOC_OBJ_DIE</a>
+, <br />
+&#160;&#160;<b>HWLOC_OBJ_TYPE_MAX</b>
+<br />
+ }</td></tr>
+<tr class="separator:gacd37bb612667dc437d66bfb175a8dc55"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga791c9875c8fe20f3e1e5871e0657e59b"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#ga791c9875c8fe20f3e1e5871e0657e59b">hwloc_obj_cache_type_e</a> { <a class="el" href="a00196.html#gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a">HWLOC_OBJ_CACHE_UNIFIED</a>
+, <a class="el" href="a00196.html#gga791c9875c8fe20f3e1e5871e0657e59bacac60ecad4206f85aeb79bef1604b488">HWLOC_OBJ_CACHE_DATA</a>
+, <a class="el" href="a00196.html#gga791c9875c8fe20f3e1e5871e0657e59ba6f98b0d422b38ba90c5f5c79a11b0658">HWLOC_OBJ_CACHE_INSTRUCTION</a>
+ }</td></tr>
+<tr class="separator:ga791c9875c8fe20f3e1e5871e0657e59b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga48a4803c72574191d7ead1c62aaf9860"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#ga48a4803c72574191d7ead1c62aaf9860">hwloc_obj_bridge_type_e</a> { <a class="el" href="a00196.html#gga48a4803c72574191d7ead1c62aaf9860a2c7660f3864ad2810c1e72aad285e574">HWLOC_OBJ_BRIDGE_HOST</a>
+, <a class="el" href="a00196.html#gga48a4803c72574191d7ead1c62aaf9860a8f3b4cecf3dab6073d74696d10863c60">HWLOC_OBJ_BRIDGE_PCI</a>
+ }</td></tr>
+<tr class="separator:ga48a4803c72574191d7ead1c62aaf9860"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga64f5d539df299c97ae80ce53fc4b56c0"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#ga64f5d539df299c97ae80ce53fc4b56c0">hwloc_obj_osdev_type_e</a> { <br />
+&#160;&#160;<a class="el" href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0a689b0488c3c0d08d116751c6b9cb8871">HWLOC_OBJ_OSDEV_BLOCK</a>
+, <a class="el" href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a>
+, <a class="el" href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0ab715d81155f771573c8682dffc65021b">HWLOC_OBJ_OSDEV_NETWORK</a>
+, <a class="el" href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0a52157d03694fdae82dddd57ca8c973b6">HWLOC_OBJ_OSDEV_OPENFABRICS</a>
+, <br />
+&#160;&#160;<a class="el" href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0a827ad1643360711a8b6c6af671366791">HWLOC_OBJ_OSDEV_DMA</a>
+, <a class="el" href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83">HWLOC_OBJ_OSDEV_COPROC</a>
+<br />
+ }</td></tr>
+<tr class="separator:ga64f5d539df299c97ae80ce53fc4b56c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga1820ea0dfd8e9dca28f9ea7624df5ae2"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#ga1820ea0dfd8e9dca28f9ea7624df5ae2">hwloc_compare_types</a> (<a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type1, <a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type2)</td></tr>
+<tr class="separator:ga1820ea0dfd8e9dca28f9ea7624df5ae2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a id="ga3b6e4128e9fe773863b123fa6e4a080b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga3b6e4128e9fe773863b123fa6e4a080b">&#9670;&nbsp;</a></span>HWLOC_TYPE_UNORDERED</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define HWLOC_TYPE_UNORDERED</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Value returned by <a class="el" href="a00196.html#ga1820ea0dfd8e9dca28f9ea7624df5ae2" title="Compare the depth of two object types.">hwloc_compare_types()</a> when types can not be compared. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a id="gab34362c7a23296c3f12c5756747abda3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gab34362c7a23296c3f12c5756747abda3">&#9670;&nbsp;</a></span>hwloc_obj_bridge_type_t</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef enum <a class="el" href="a00196.html#ga48a4803c72574191d7ead1c62aaf9860">hwloc_obj_bridge_type_e</a> <a class="el" href="a00196.html#gab34362c7a23296c3f12c5756747abda3">hwloc_obj_bridge_type_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Type of one side (upstream or downstream) of an I/O bridge. </p>
+
+</div>
+</div>
+<a id="ga552ec74296a024237f474acec98694c0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga552ec74296a024237f474acec98694c0">&#9670;&nbsp;</a></span>hwloc_obj_cache_type_t</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef enum <a class="el" href="a00196.html#ga791c9875c8fe20f3e1e5871e0657e59b">hwloc_obj_cache_type_e</a> <a class="el" href="a00196.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Cache type. </p>
+
+</div>
+</div>
+<a id="gaa9a6941ef7b1c169412518d7ef71b3d2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaa9a6941ef7b1c169412518d7ef71b3d2">&#9670;&nbsp;</a></span>hwloc_obj_osdev_type_t</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef enum <a class="el" href="a00196.html#ga64f5d539df299c97ae80ce53fc4b56c0">hwloc_obj_osdev_type_e</a> <a class="el" href="a00196.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Type of a OS device. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a id="ga48a4803c72574191d7ead1c62aaf9860"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga48a4803c72574191d7ead1c62aaf9860">&#9670;&nbsp;</a></span>hwloc_obj_bridge_type_e</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00196.html#ga48a4803c72574191d7ead1c62aaf9860">hwloc_obj_bridge_type_e</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Type of one side (upstream or downstream) of an I/O bridge. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga48a4803c72574191d7ead1c62aaf9860a2c7660f3864ad2810c1e72aad285e574"></a>HWLOC_OBJ_BRIDGE_HOST&#160;</td><td class="fielddoc"><p>Host-side of a bridge, only possible upstream. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga48a4803c72574191d7ead1c62aaf9860a8f3b4cecf3dab6073d74696d10863c60"></a>HWLOC_OBJ_BRIDGE_PCI&#160;</td><td class="fielddoc"><p>PCI-side of a bridge. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<a id="ga791c9875c8fe20f3e1e5871e0657e59b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga791c9875c8fe20f3e1e5871e0657e59b">&#9670;&nbsp;</a></span>hwloc_obj_cache_type_e</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00196.html#ga791c9875c8fe20f3e1e5871e0657e59b">hwloc_obj_cache_type_e</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Cache type. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a"></a>HWLOC_OBJ_CACHE_UNIFIED&#160;</td><td class="fielddoc"><p>Unified cache. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga791c9875c8fe20f3e1e5871e0657e59bacac60ecad4206f85aeb79bef1604b488"></a>HWLOC_OBJ_CACHE_DATA&#160;</td><td class="fielddoc"><p>Data cache. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga791c9875c8fe20f3e1e5871e0657e59ba6f98b0d422b38ba90c5f5c79a11b0658"></a>HWLOC_OBJ_CACHE_INSTRUCTION&#160;</td><td class="fielddoc"><p>Instruction cache (filtered out by default). </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<a id="ga64f5d539df299c97ae80ce53fc4b56c0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga64f5d539df299c97ae80ce53fc4b56c0">&#9670;&nbsp;</a></span>hwloc_obj_osdev_type_e</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00196.html#ga64f5d539df299c97ae80ce53fc4b56c0">hwloc_obj_osdev_type_e</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Type of a OS device. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga64f5d539df299c97ae80ce53fc4b56c0a689b0488c3c0d08d116751c6b9cb8871"></a>HWLOC_OBJ_OSDEV_BLOCK&#160;</td><td class="fielddoc"><p>Operating system block device, or non-volatile memory device. For instance "sda" or "dax2.0" on Linux. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90"></a>HWLOC_OBJ_OSDEV_GPU&#160;</td><td class="fielddoc"><p>Operating system GPU device. For instance ":0.0" for a GL display, "card0" for a Linux DRM device. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga64f5d539df299c97ae80ce53fc4b56c0ab715d81155f771573c8682dffc65021b"></a>HWLOC_OBJ_OSDEV_NETWORK&#160;</td><td class="fielddoc"><p>Operating system network device. For instance the "eth0" interface on Linux. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga64f5d539df299c97ae80ce53fc4b56c0a52157d03694fdae82dddd57ca8c973b6"></a>HWLOC_OBJ_OSDEV_OPENFABRICS&#160;</td><td class="fielddoc"><p>Operating system openfabrics device. For instance the "mlx4_0" InfiniBand HCA, "hfi1_0" Omni-Path interface, or "bxi0" Atos/Bull BXI HCA on Linux. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga64f5d539df299c97ae80ce53fc4b56c0a827ad1643360711a8b6c6af671366791"></a>HWLOC_OBJ_OSDEV_DMA&#160;</td><td class="fielddoc"><p>Operating system dma engine device. For instance the "dma0chan0" DMA channel on Linux. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83"></a>HWLOC_OBJ_OSDEV_COPROC&#160;</td><td class="fielddoc"><p>Operating system co-processor device. For instance "opencl0d0" for a OpenCL device, "cuda0" for a CUDA device. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<a id="gacd37bb612667dc437d66bfb175a8dc55"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gacd37bb612667dc437d66bfb175a8dc55">&#9670;&nbsp;</a></span>hwloc_obj_type_t</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Type of topology object. </p>
+<dl class="section note"><dt>Note</dt><dd>Do not rely on the ordering or completeness of the values as new ones may be defined in the future! If you need to compare types, use <a class="el" href="a00196.html#ga1820ea0dfd8e9dca28f9ea7624df5ae2" title="Compare the depth of two object types.">hwloc_compare_types()</a> instead. </dd></dl>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a3f4e83ffc4a259354959ae8a9eaa2a80"></a>HWLOC_OBJ_MACHINE&#160;</td><td class="fielddoc"><p>Machine. A set of processors and memory with cache coherency. </p>
+<p>This type is always used for the root object of a topology, and never used anywhere else. Hence its parent is always <code>NULL</code>. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55ab16ab8c0dbffc234921d86f3dfb63129"></a>HWLOC_OBJ_PACKAGE&#160;</td><td class="fielddoc"><p>Physical package. The physical package that usually gets inserted into a socket on the motherboard. A processor package usually contains multiple cores, and possibly some dies. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55ac793958f330bca371aa1535de8aff45f"></a>HWLOC_OBJ_CORE&#160;</td><td class="fielddoc"><p>Core. A computation unit (may be shared by several PUs, aka logical processors). </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661"></a>HWLOC_OBJ_PU&#160;</td><td class="fielddoc"><p>Processing Unit, or (Logical) Processor. An execution unit (may share a core with some other logical processors, e.g. in the case of an SMT core). </p>
+<p>This is the smallest object representing CPU resources, it cannot have any child except Misc objects.</p>
+<p>Objects of this kind are always reported and can thus be used as fallback when others are not. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a56389b8eb2e2f74f288bb657c4e72140"></a>HWLOC_OBJ_L1CACHE&#160;</td><td class="fielddoc"><p>Level 1 Data (or Unified) Cache. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a18f61d19fe9f4bcea978fcc68bc078fb"></a>HWLOC_OBJ_L2CACHE&#160;</td><td class="fielddoc"><p>Level 2 Data (or Unified) Cache. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a25fae0e0514c90e3973a29866a5a837d"></a>HWLOC_OBJ_L3CACHE&#160;</td><td class="fielddoc"><p>Level 3 Data (or Unified) Cache. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a54923bfa13df9d7e6d6dd0d5baff5f72"></a>HWLOC_OBJ_L4CACHE&#160;</td><td class="fielddoc"><p>Level 4 Data (or Unified) Cache. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a67194c9de5e3e581c64c11d2eb1c109d"></a>HWLOC_OBJ_L5CACHE&#160;</td><td class="fielddoc"><p>Level 5 Data (or Unified) Cache. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55afa834a85d9e53836cf0db6d0bd8329b4"></a>HWLOC_OBJ_L1ICACHE&#160;</td><td class="fielddoc"><p>Level 1 instruction Cache (filtered out by default). </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a10713b7e561b8cc32544cd31b1c17f8d"></a>HWLOC_OBJ_L2ICACHE&#160;</td><td class="fielddoc"><p>Level 2 instruction Cache (filtered out by default). </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55ac22850c717f07bf7ffb316fadd08d218"></a>HWLOC_OBJ_L3ICACHE&#160;</td><td class="fielddoc"><p>Level 3 instruction Cache (filtered out by default). </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56"></a>HWLOC_OBJ_GROUP&#160;</td><td class="fielddoc"><p>Group objects. Objects which do not fit in the above but are detected by hwloc and are useful to take into account for affinity. For instance, some operating systems expose their arbitrary processors aggregation this way. And hwloc may insert such objects to group NUMA nodes according to their distances. See also <a class="el" href="a00409.html#faq_groups">What are these Group objects in my topology?</a>. </p>
+<p>These objects are removed when they do not bring any structure (see <a class="el" href="a00205.html#gga9a5a1f0140cd1952544477833733195ba7664716643bf1db83e631eed34f659e4" title="Only ignore objects if their entire level does not bring any structure.">HWLOC_TYPE_FILTER_KEEP_STRUCTURE</a>). </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a"></a>HWLOC_OBJ_NUMANODE&#160;</td><td class="fielddoc"><p>NUMA node. An object that contains memory that is directly and byte-accessible to the host processors. It is usually close to some cores (the corresponding objects are descendants of the NUMA node object in the hwloc tree). </p>
+<p>This is the smallest object representing Memory resources, it cannot have any child except Misc objects. However it may have Memory-side cache parents.</p>
+<p>There is always at least one such object in the topology even if the machine is not NUMA.</p>
+<p>Memory objects are not listed in the main children list, but rather in the dedicated Memory children list.</p>
+<p>NUMA nodes have a special depth <a class="el" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a245c34ec9884c2cf5de5049b2153ed9c" title="Virtual depth for NUMA nodes.">HWLOC_TYPE_DEPTH_NUMANODE</a> instead of a normal depth just like other objects in the main tree. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0"></a>HWLOC_OBJ_BRIDGE&#160;</td><td class="fielddoc"><p>Bridge (filtered out by default). Any bridge (or PCI switch) that connects the host or an I/O bus, to another I/O bus. </p>
+<p>Bridges are not added to the topology unless their filtering is changed (see <a class="el" href="a00205.html#gad894e70f15f8d4aada7be8d1aba38b7e" title="Set the filtering for the given object type.">hwloc_topology_set_type_filter()</a> and <a class="el" href="a00205.html#ga0ab38705357bc1203abe829da8a12ad3" title="Set the filtering for all I/O object types.">hwloc_topology_set_io_types_filter()</a>).</p>
+<p>I/O objects are not listed in the main children list, but rather in the dedicated io children list. I/O objects have NULL CPU and node sets. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9"></a>HWLOC_OBJ_PCI_DEVICE&#160;</td><td class="fielddoc"><p>PCI device (filtered out by default). </p>
+<p>PCI devices are not added to the topology unless their filtering is changed (see <a class="el" href="a00205.html#gad894e70f15f8d4aada7be8d1aba38b7e" title="Set the filtering for the given object type.">hwloc_topology_set_type_filter()</a> and <a class="el" href="a00205.html#ga0ab38705357bc1203abe829da8a12ad3" title="Set the filtering for all I/O object types.">hwloc_topology_set_io_types_filter()</a>).</p>
+<p>I/O objects are not listed in the main children list, but rather in the dedicated io children list. I/O objects have NULL CPU and node sets. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075"></a>HWLOC_OBJ_OS_DEVICE&#160;</td><td class="fielddoc"><p>Operating system device (filtered out by default). </p>
+<p>OS devices are not added to the topology unless their filtering is changed (see <a class="el" href="a00205.html#gad894e70f15f8d4aada7be8d1aba38b7e" title="Set the filtering for the given object type.">hwloc_topology_set_type_filter()</a> and <a class="el" href="a00205.html#ga0ab38705357bc1203abe829da8a12ad3" title="Set the filtering for all I/O object types.">hwloc_topology_set_io_types_filter()</a>).</p>
+<p>I/O objects are not listed in the main children list, but rather in the dedicated io children list. I/O objects have NULL CPU and node sets. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d"></a>HWLOC_OBJ_MISC&#160;</td><td class="fielddoc"><p>Miscellaneous objects (filtered out by default). Objects without particular meaning, that can e.g. be added by the application for its own use, or by hwloc for miscellaneous objects such as MemoryModule (DIMMs). </p>
+<p>They are not added to the topology unless their filtering is changed (see <a class="el" href="a00205.html#gad894e70f15f8d4aada7be8d1aba38b7e" title="Set the filtering for the given object type.">hwloc_topology_set_type_filter()</a>).</p>
+<p>These objects are not listed in the main children list, but rather in the dedicated misc children list. Misc objects may only have Misc objects as children, and those are in the dedicated misc children list as well. Misc objects have NULL CPU and node sets. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a0ed5bd98974729a0c476c39e917dabd6"></a>HWLOC_OBJ_MEMCACHE&#160;</td><td class="fielddoc"><p>Memory-side cache (filtered out by default). A cache in front of a specific NUMA node. </p>
+<p>This object always has at least one NUMA node as a memory child.</p>
+<p>Memory objects are not listed in the main children list, but rather in the dedicated Memory children list.</p>
+<p>Memory-side cache have a special depth <a class="el" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a8b8d7d300c018c0eb65e6c9a9f162101" title="Virtual depth for MemCache object.">HWLOC_TYPE_DEPTH_MEMCACHE</a> instead of a normal depth just like other objects in the main tree. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55af78bb6cde53aaaaa162a7dc420c409da"></a>HWLOC_OBJ_DIE&#160;</td><td class="fielddoc"><p>Die within a physical package. A subpart of the physical package, that contains multiple cores. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga1820ea0dfd8e9dca28f9ea7624df5ae2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga1820ea0dfd8e9dca28f9ea7624df5ae2">&#9670;&nbsp;</a></span>hwloc_compare_types()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_compare_types </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
+          <td class="paramname"><em>type1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
+          <td class="paramname"><em>type2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Compare the depth of two object types. </p>
+<p>Types shouldn't be compared as they are, since newer ones may be added in the future. This function returns less than, equal to, or greater than zero respectively if <code>type1</code> objects usually include <code>type2</code> objects, are the same as <code>type2</code> objects, or are included in <code>type2</code> objects. If the types can not be compared (because neither is usually contained in the other), <a class="el" href="a00196.html#ga3b6e4128e9fe773863b123fa6e4a080b" title="Value returned by hwloc_compare_types() when types can not be compared.">HWLOC_TYPE_UNORDERED</a> is returned. Object types containing CPUs can always be compared (usually, a system contains machines which contain nodes which contain packages which contain caches, which contain cores, which contain processors).</p>
+<dl class="section note"><dt>Note</dt><dd><a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661" title="Processing Unit, or (Logical) Processor. An execution unit (may share a core with some other logical ...">HWLOC_OBJ_PU</a> will always be the deepest, while <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a3f4e83ffc4a259354959ae8a9eaa2a80" title="Machine. A set of processors and memory with cache coherency.">HWLOC_OBJ_MACHINE</a> is always the highest.</dd>
+<dd>
+This does not mean that the actual topology will respect that order: e.g. as of today cores may also contain caches, and packages may also contain nodes. This is thus just to be seen as a fallback comparison method. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00197.html b/doc/doxygen-doc/html/a00197.html
new file mode 100644
index 00000000..62daef3f
--- /dev/null
+++ b/doc/doxygen-doc/html/a00197.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Object Structure and Attributes</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#typedef-members">Typedefs</a>  </div>
+  <div class="headertitle">
+<div class="title">Object Structure and Attributes</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html">hwloc_obj</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">union &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html">hwloc_obj_attr_u</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00301.html">hwloc_info_s</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga79b8ab56877ef99ac59b833203391c7d"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="a00253.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a></td></tr>
+<tr class="separator:ga79b8ab56877ef99ac59b833203391c7d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a id="ga79b8ab56877ef99ac59b833203391c7d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga79b8ab56877ef99ac59b833203391c7d">&#9670;&nbsp;</a></span>hwloc_obj_t</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct <a class="el" href="a00253.html">hwloc_obj</a>* <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Convenience typedef; a pointer to a struct <a class="el" href="a00253.html" title="Structure of a topology object.">hwloc_obj</a>. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00198.html b/doc/doxygen-doc/html/a00198.html
new file mode 100644
index 00000000..c3dc7daa
--- /dev/null
+++ b/doc/doxygen-doc/html/a00198.html
@@ -0,0 +1,272 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Topology Creation and Destruction</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Topology Creation and Destruction</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga9d1e76ee15a7dee158b786c30b6a6e38"><td class="memItemLeft" align="right" valign="top">typedef struct hwloc_topology *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></td></tr>
+<tr class="separator:ga9d1e76ee15a7dee158b786c30b6a6e38"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00198.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa">hwloc_topology_init</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> *topologyp)</td></tr>
+<tr class="separator:ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gabdf58d87ad77f6615fccdfe0535ff826"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00198.html#gabdf58d87ad77f6615fccdfe0535ff826">hwloc_topology_load</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
+<tr class="separator:gabdf58d87ad77f6615fccdfe0535ff826"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9f34a640b6fd28d23699d4d084667b15"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00198.html#ga9f34a640b6fd28d23699d4d084667b15">hwloc_topology_destroy</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
+<tr class="separator:ga9f34a640b6fd28d23699d4d084667b15"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga62a161fc5e6f120344dc69a7bee4e587"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00198.html#ga62a161fc5e6f120344dc69a7bee4e587">hwloc_topology_dup</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> *newtopology, <a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> oldtopology)</td></tr>
+<tr class="separator:ga62a161fc5e6f120344dc69a7bee4e587"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0647ae66458fe68172eb5a320042f870"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00198.html#ga0647ae66458fe68172eb5a320042f870">hwloc_topology_abi_check</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
+<tr class="separator:ga0647ae66458fe68172eb5a320042f870"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf6746bc3a558ef1ac8348b4491d091b5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00198.html#gaf6746bc3a558ef1ac8348b4491d091b5">hwloc_topology_check</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
+<tr class="separator:gaf6746bc3a558ef1ac8348b4491d091b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a id="ga9d1e76ee15a7dee158b786c30b6a6e38"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga9d1e76ee15a7dee158b786c30b6a6e38">&#9670;&nbsp;</a></span>hwloc_topology_t</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct hwloc_topology* <a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Topology context. </p>
+<p>To be initialized with <a class="el" href="a00198.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa" title="Allocate a topology context.">hwloc_topology_init()</a> and built with <a class="el" href="a00198.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a>. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga0647ae66458fe68172eb5a320042f870"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga0647ae66458fe68172eb5a320042f870">&#9670;&nbsp;</a></span>hwloc_topology_abi_check()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_abi_check </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Verify that the topology is compatible with the current hwloc library. </p>
+<p>This is useful when using the same topology structure (in memory) in different libraries that may use different hwloc installations (for instance if one library embeds a specific version of hwloc, while another library uses a default system-wide hwloc installation).</p>
+<p>If all libraries/programs use the same hwloc installation, this function always returns success.</p>
+<dl class="section return"><dt>Returns</dt><dd><code>0</code> on success.</dd>
+<dd>
+<code>-1</code> with <code>errno</code> set to <code>EINVAL</code> if incompatible.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>If sharing between processes with <a class="el" href="a00241.html#ga61b20e346fc76f76420e3a88cc80a671" title="Duplicate a topology to a shared memory file.">hwloc_shmem_topology_write()</a>, the relevant check is already performed inside <a class="el" href="a00241.html#ga21545bd0f09d9b554c8e60a630e0e629" title="Adopt a shared memory topology stored in a file.">hwloc_shmem_topology_adopt()</a>. </dd></dl>
+
+</div>
+</div>
+<a id="gaf6746bc3a558ef1ac8348b4491d091b5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaf6746bc3a558ef1ac8348b4491d091b5">&#9670;&nbsp;</a></span>hwloc_topology_check()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void hwloc_topology_check </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Run internal checks on a topology structure. </p>
+<p>The program aborts if an inconsistency is detected in the given topology.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">topology</td><td>is the topology to be checked</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section note"><dt>Note</dt><dd>This routine is only useful to developers.</dd>
+<dd>
+The input topology should have been previously loaded with <a class="el" href="a00198.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a>. </dd></dl>
+
+</div>
+</div>
+<a id="ga9f34a640b6fd28d23699d4d084667b15"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga9f34a640b6fd28d23699d4d084667b15">&#9670;&nbsp;</a></span>hwloc_topology_destroy()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void hwloc_topology_destroy </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Terminate and free a topology context. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">topology</td><td>is the topology to be freed </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a id="ga62a161fc5e6f120344dc69a7bee4e587"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga62a161fc5e6f120344dc69a7bee4e587">&#9670;&nbsp;</a></span>hwloc_topology_dup()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_dup </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> *&#160;</td>
+          <td class="paramname"><em>newtopology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>oldtopology</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Duplicate a topology. </p>
+<p>The entire topology structure as well as its objects are duplicated into a new one.</p>
+<p>This is useful for keeping a backup while modifying a topology.</p>
+<dl class="section note"><dt>Note</dt><dd>Object userdata is not duplicated since hwloc does not know what it point to. The objects of both old and new topologies will point to the same userdata. </dd></dl>
+
+</div>
+</div>
+<a id="ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa">&#9670;&nbsp;</a></span>hwloc_topology_init()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_init </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> *&#160;</td>
+          <td class="paramname"><em>topologyp</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Allocate a topology context. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramdir">[out]</td><td class="paramname">topologyp</td><td>is assigned a pointer to the new allocated context.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>0 on success, -1 on error. </dd></dl>
+
+</div>
+</div>
+<a id="gabdf58d87ad77f6615fccdfe0535ff826"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gabdf58d87ad77f6615fccdfe0535ff826">&#9670;&nbsp;</a></span>hwloc_topology_load()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_load </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Build the actual topology. </p>
+<p>Build the actual topology once initialized with <a class="el" href="a00198.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa" title="Allocate a topology context.">hwloc_topology_init()</a> and tuned with <a class="el" href="a00205.html">Topology Detection Configuration and Query</a> and <a class="el" href="a00204.html">Changing the Source of Topology Discovery</a> routines. No other routine may be called earlier using this topology context.</p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">topology</td><td>is the topology to be loaded with objects.</td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="section return"><dt>Returns</dt><dd>0 on success, -1 on error.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>On failure, the topology is reinitialized. It should be either destroyed with <a class="el" href="a00198.html#ga9f34a640b6fd28d23699d4d084667b15" title="Terminate and free a topology context.">hwloc_topology_destroy()</a> or configured and loaded again.</dd>
+<dd>
+This function may be called only once per topology.</dd>
+<dd>
+The binding of the current thread or process may temporarily change during this call but it will be restored before it returns.</dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00205.html">Topology Detection Configuration and Query</a> and <a class="el" href="a00204.html">Changing the Source of Topology Discovery</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00199.html b/doc/doxygen-doc/html/a00199.html
new file mode 100644
index 00000000..de4eb292
--- /dev/null
+++ b/doc/doxygen-doc/html/a00199.html
@@ -0,0 +1,603 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Object levels, depths and types</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Object levels, depths and types</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:gaf4e663cf42bbe20756b849c6293ef575"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#gaf4e663cf42bbe20756b849c6293ef575">hwloc_get_type_depth_e</a> { <br />
+&#160;&#160;<a class="el" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a>
+, <a class="el" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a>
+, <a class="el" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a245c34ec9884c2cf5de5049b2153ed9c">HWLOC_TYPE_DEPTH_NUMANODE</a>
+, <a class="el" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575af93b50182973e4a718d9d4db9e253a90">HWLOC_TYPE_DEPTH_BRIDGE</a>
+, <br />
+&#160;&#160;<a class="el" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575ad8b1516e699b57ce1c8d107fbd2f674c">HWLOC_TYPE_DEPTH_PCI_DEVICE</a>
+, <a class="el" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575afe9a2131073eebbe129d4aa2928d3f46">HWLOC_TYPE_DEPTH_OS_DEVICE</a>
+, <a class="el" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a96436a392b4cdcaa1a29bc65351b373f">HWLOC_TYPE_DEPTH_MISC</a>
+, <a class="el" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a8b8d7d300c018c0eb65e6c9a9f162101">HWLOC_TYPE_DEPTH_MEMCACHE</a>
+<br />
+ }</td></tr>
+<tr class="separator:gaf4e663cf42bbe20756b849c6293ef575"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gae54d1782ca9b54bea915f5c18a9158fa"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#gae54d1782ca9b54bea915f5c18a9158fa">hwloc_topology_get_depth</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict topology)</td></tr>
+<tr class="separator:gae54d1782ca9b54bea915f5c18a9158fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8bec782e21be313750da70cf7428b374"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
+<tr class="separator:ga8bec782e21be313750da70cf7428b374"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae85786340b88e24835f8c403a1e2e54b"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#gae85786340b88e24835f8c403a1e2e54b">hwloc_get_memory_parents_depth</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
+<tr class="separator:gae85786340b88e24835f8c403a1e2e54b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8125328e69eba709c33ea8055c12589b"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga8125328e69eba709c33ea8055c12589b">hwloc_get_type_or_below_depth</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
+<tr class="separator:ga8125328e69eba709c33ea8055c12589b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8a9ee573b7d2190272095d10712a7cca"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga8a9ee573b7d2190272095d10712a7cca">hwloc_get_type_or_above_depth</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
+<tr class="separator:ga8a9ee573b7d2190272095d10712a7cca"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga506b0682b98aa264d53e934d2e9badb0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga506b0682b98aa264d53e934d2e9badb0">hwloc_get_depth_type</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int depth)</td></tr>
+<tr class="separator:ga506b0682b98aa264d53e934d2e9badb0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1d5ceafe8130fe6e8657bf0bc666ba50"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga1d5ceafe8130fe6e8657bf0bc666ba50">hwloc_get_nbobjs_by_depth</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int depth)</td></tr>
+<tr class="separator:ga1d5ceafe8130fe6e8657bf0bc666ba50"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga789a3f65aedff644be64a18526a03065"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga789a3f65aedff644be64a18526a03065">hwloc_get_nbobjs_by_type</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
+<tr class="separator:ga789a3f65aedff644be64a18526a03065"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2d4b12fc187dfc53b35f2fa21d21044d"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga2d4b12fc187dfc53b35f2fa21d21044d">hwloc_get_root_obj</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
+<tr class="separator:ga2d4b12fc187dfc53b35f2fa21d21044d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga391f6b2613f0065673eaa4069b93d4e0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga391f6b2613f0065673eaa4069b93d4e0">hwloc_get_obj_by_depth</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int depth, unsigned idx)</td></tr>
+<tr class="separator:ga391f6b2613f0065673eaa4069b93d4e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6f414dd80a2b943967a0ac92da3181a2"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga6f414dd80a2b943967a0ac92da3181a2">hwloc_get_obj_by_type</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, unsigned idx)</td></tr>
+<tr class="separator:ga6f414dd80a2b943967a0ac92da3181a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac140a9b939d9fa0b30c4a910efcb0656"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int depth, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> prev)</td></tr>
+<tr class="separator:gac140a9b939d9fa0b30c4a910efcb0656"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga759e88eaf5a230ad283e9d4c42486735"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga759e88eaf5a230ad283e9d4c42486735">hwloc_get_next_obj_by_type</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> prev)</td></tr>
+<tr class="separator:ga759e88eaf5a230ad283e9d4c42486735"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Be sure to see the figure in <a class="el" href="a00395.html">Terms and Definitions</a> that shows a complete topology tree, including depths, child/sibling/cousin relationships, and an example of an asymmetric topology where one package has fewer caches than its peers. </p>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a id="gaf4e663cf42bbe20756b849c6293ef575"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaf4e663cf42bbe20756b849c6293ef575">&#9670;&nbsp;</a></span>hwloc_get_type_depth_e</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00199.html#gaf4e663cf42bbe20756b849c6293ef575">hwloc_get_type_depth_e</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad"></a>HWLOC_TYPE_DEPTH_UNKNOWN&#160;</td><td class="fielddoc"><p>No object of given type exists in the topology. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c"></a>HWLOC_TYPE_DEPTH_MULTIPLE&#160;</td><td class="fielddoc"><p>Objects of given type exist at different depth in the topology (only for Groups). </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggaf4e663cf42bbe20756b849c6293ef575a245c34ec9884c2cf5de5049b2153ed9c"></a>HWLOC_TYPE_DEPTH_NUMANODE&#160;</td><td class="fielddoc"><p>Virtual depth for NUMA nodes. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggaf4e663cf42bbe20756b849c6293ef575af93b50182973e4a718d9d4db9e253a90"></a>HWLOC_TYPE_DEPTH_BRIDGE&#160;</td><td class="fielddoc"><p>Virtual depth for bridge object level. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggaf4e663cf42bbe20756b849c6293ef575ad8b1516e699b57ce1c8d107fbd2f674c"></a>HWLOC_TYPE_DEPTH_PCI_DEVICE&#160;</td><td class="fielddoc"><p>Virtual depth for PCI device object level. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggaf4e663cf42bbe20756b849c6293ef575afe9a2131073eebbe129d4aa2928d3f46"></a>HWLOC_TYPE_DEPTH_OS_DEVICE&#160;</td><td class="fielddoc"><p>Virtual depth for software device object level. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggaf4e663cf42bbe20756b849c6293ef575a96436a392b4cdcaa1a29bc65351b373f"></a>HWLOC_TYPE_DEPTH_MISC&#160;</td><td class="fielddoc"><p>Virtual depth for Misc object. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggaf4e663cf42bbe20756b849c6293ef575a8b8d7d300c018c0eb65e6c9a9f162101"></a>HWLOC_TYPE_DEPTH_MEMCACHE&#160;</td><td class="fielddoc"><p>Virtual depth for MemCache object. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga506b0682b98aa264d53e934d2e9badb0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga506b0682b98aa264d53e934d2e9badb0">&#9670;&nbsp;</a></span>hwloc_get_depth_type()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> hwloc_get_depth_type </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>depth</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the type of objects at depth <code>depth</code>. </p>
+<p><code>depth</code> should between 0 and <a class="el" href="a00199.html#gae54d1782ca9b54bea915f5c18a9158fa" title="Get the depth of the hierarchical tree of objects.">hwloc_topology_get_depth()</a>-1, or a virtual depth such as <a class="el" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a245c34ec9884c2cf5de5049b2153ed9c" title="Virtual depth for NUMA nodes.">HWLOC_TYPE_DEPTH_NUMANODE</a>.</p>
+<dl class="section return"><dt>Returns</dt><dd>(hwloc_obj_type_t)-1 if depth <code>depth</code> does not exist. </dd></dl>
+
+</div>
+</div>
+<a id="gae85786340b88e24835f8c403a1e2e54b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gae85786340b88e24835f8c403a1e2e54b">&#9670;&nbsp;</a></span>hwloc_get_memory_parents_depth()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_get_memory_parents_depth </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Return the depth of parents where memory objects are attached. </p>
+<p>Memory objects have virtual negative depths because they are not part of the main CPU-side hierarchy of objects. This depth should not be compared with other level depths.</p>
+<p>If all Memory objects are attached to Normal parents at the same depth, this parent depth may be compared to other as usual, for instance for knowing whether NUMA nodes is attached above or below Packages.</p>
+<dl class="section return"><dt>Returns</dt><dd>The depth of Normal parents of all memory children if all these parents have the same depth. For instance the depth of the Package level if all NUMA nodes are attached to Package objects.</dd>
+<dd>
+<a class="el" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c" title="Objects of given type exist at different depth in the topology (only for Groups).">HWLOC_TYPE_DEPTH_MULTIPLE</a> if Normal parents of all memory children do not have the same depth. For instance if some NUMA nodes are attached to Packages while others are attached to Groups. </dd></dl>
+
+</div>
+</div>
+<a id="ga1d5ceafe8130fe6e8657bf0bc666ba50"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga1d5ceafe8130fe6e8657bf0bc666ba50">&#9670;&nbsp;</a></span>hwloc_get_nbobjs_by_depth()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned hwloc_get_nbobjs_by_depth </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>depth</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the width of level at depth <code>depth</code>. </p>
+
+</div>
+</div>
+<a id="ga789a3f65aedff644be64a18526a03065"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga789a3f65aedff644be64a18526a03065">&#9670;&nbsp;</a></span>hwloc_get_nbobjs_by_type()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_get_nbobjs_by_type </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
+          <td class="paramname"><em>type</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the width of level type <code>type</code>. </p>
+<p>If no object for that type exists, 0 is returned. If there are several levels with objects of that type, -1 is returned. </p>
+
+</div>
+</div>
+<a id="gac140a9b939d9fa0b30c4a910efcb0656"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gac140a9b939d9fa0b30c4a910efcb0656">&#9670;&nbsp;</a></span>hwloc_get_next_obj_by_depth()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_next_obj_by_depth </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>depth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>prev</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the next object at depth <code>depth</code>. </p>
+<p>If <code>prev</code> is <code>NULL</code>, return the first object at depth <code>depth</code>. </p>
+
+</div>
+</div>
+<a id="ga759e88eaf5a230ad283e9d4c42486735"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga759e88eaf5a230ad283e9d4c42486735">&#9670;&nbsp;</a></span>hwloc_get_next_obj_by_type()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_next_obj_by_type </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
+          <td class="paramname"><em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>prev</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the next object of type <code>type</code>. </p>
+<p>If <code>prev</code> is <code>NULL</code>, return the first object at type <code>type</code>. If there are multiple or no depth for given type, return <code>NULL</code> and let the caller fallback to <a class="el" href="a00199.html#gac140a9b939d9fa0b30c4a910efcb0656" title="Returns the next object at depth depth.">hwloc_get_next_obj_by_depth()</a>. </p>
+
+</div>
+</div>
+<a id="ga391f6b2613f0065673eaa4069b93d4e0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga391f6b2613f0065673eaa4069b93d4e0">&#9670;&nbsp;</a></span>hwloc_get_obj_by_depth()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_obj_by_depth </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>depth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>idx</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the topology object at logical index <code>idx</code> from depth <code>depth</code>. </p>
+
+</div>
+</div>
+<a id="ga6f414dd80a2b943967a0ac92da3181a2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga6f414dd80a2b943967a0ac92da3181a2">&#9670;&nbsp;</a></span>hwloc_get_obj_by_type()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_obj_by_type </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
+          <td class="paramname"><em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>idx</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the topology object at logical index <code>idx</code> with type <code>type</code>. </p>
+<p>If no object for that type exists, <code>NULL</code> is returned. If there are several levels with objects of that type (<a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56" title="Group objects. Objects which do not fit in the above but are detected by hwloc and are useful to take...">HWLOC_OBJ_GROUP</a>), <code>NULL</code> is returned and the caller may fallback to <a class="el" href="a00199.html#ga391f6b2613f0065673eaa4069b93d4e0" title="Returns the topology object at logical index idx from depth depth.">hwloc_get_obj_by_depth()</a>. </p>
+
+</div>
+</div>
+<a id="ga2d4b12fc187dfc53b35f2fa21d21044d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga2d4b12fc187dfc53b35f2fa21d21044d">&#9670;&nbsp;</a></span>hwloc_get_root_obj()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_root_obj </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the top-object of the topology-tree. </p>
+<p>Its type is <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a3f4e83ffc4a259354959ae8a9eaa2a80" title="Machine. A set of processors and memory with cache coherency.">HWLOC_OBJ_MACHINE</a>. </p>
+
+</div>
+</div>
+<a id="ga8bec782e21be313750da70cf7428b374"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga8bec782e21be313750da70cf7428b374">&#9670;&nbsp;</a></span>hwloc_get_type_depth()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_get_type_depth </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
+          <td class="paramname"><em>type</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Returns the depth of objects of type <code>type</code>. </p>
+<p>If no object of this type is present on the underlying architecture, or if the OS doesn't provide this kind of information, the function returns <a class="el" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad" title="No object of given type exists in the topology.">HWLOC_TYPE_DEPTH_UNKNOWN</a>.</p>
+<p>If type is absent but a similar type is acceptable, see also <a class="el" href="a00199.html#ga8125328e69eba709c33ea8055c12589b" title="Returns the depth of objects of type type or below.">hwloc_get_type_or_below_depth()</a> and <a class="el" href="a00199.html#ga8a9ee573b7d2190272095d10712a7cca" title="Returns the depth of objects of type type or above.">hwloc_get_type_or_above_depth()</a>.</p>
+<p>If <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56" title="Group objects. Objects which do not fit in the above but are detected by hwloc and are useful to take...">HWLOC_OBJ_GROUP</a> is given, the function may return <a class="el" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c" title="Objects of given type exist at different depth in the topology (only for Groups).">HWLOC_TYPE_DEPTH_MULTIPLE</a> if multiple levels of Groups exist.</p>
+<p>If a NUMA node, I/O or Misc object type is given, the function returns a virtual value because these objects are stored in special levels that are not CPU-related. This virtual depth may be passed to other hwloc functions such as <a class="el" href="a00199.html#ga391f6b2613f0065673eaa4069b93d4e0" title="Returns the topology object at logical index idx from depth depth.">hwloc_get_obj_by_depth()</a> but it should not be considered as an actual depth by the application. In particular, it should not be compared with any other object depth or with the entire topology depth. </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="a00199.html#gae85786340b88e24835f8c403a1e2e54b" title="Return the depth of parents where memory objects are attached.">hwloc_get_memory_parents_depth()</a>.</dd>
+<dd>
+<a class="el" href="a00200.html#ga52c63cd7203e55b804c1314affc9bd12" title="Return an object type and its level depth from a type string.">hwloc_type_sscanf_as_depth()</a> for returning the depth of objects whose type is given as a string. </dd></dl>
+
+</div>
+</div>
+<a id="ga8a9ee573b7d2190272095d10712a7cca"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga8a9ee573b7d2190272095d10712a7cca">&#9670;&nbsp;</a></span>hwloc_get_type_or_above_depth()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_get_type_or_above_depth </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
+          <td class="paramname"><em>type</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the depth of objects of type <code>type</code> or above. </p>
+<p>If no object of this type is present on the underlying architecture, the function returns the depth of the first "present" object typically containing <code>type</code>.</p>
+<p>This function is only meaningful for normal object types. If a memory, I/O or Misc object type is given, the corresponding virtual depth is always returned (see <a class="el" href="a00199.html#ga8bec782e21be313750da70cf7428b374" title="Returns the depth of objects of type type.">hwloc_get_type_depth()</a>).</p>
+<p>May return <a class="el" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c" title="Objects of given type exist at different depth in the topology (only for Groups).">HWLOC_TYPE_DEPTH_MULTIPLE</a> for <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56" title="Group objects. Objects which do not fit in the above but are detected by hwloc and are useful to take...">HWLOC_OBJ_GROUP</a> just like <a class="el" href="a00199.html#ga8bec782e21be313750da70cf7428b374" title="Returns the depth of objects of type type.">hwloc_get_type_depth()</a>. </p>
+
+</div>
+</div>
+<a id="ga8125328e69eba709c33ea8055c12589b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga8125328e69eba709c33ea8055c12589b">&#9670;&nbsp;</a></span>hwloc_get_type_or_below_depth()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_get_type_or_below_depth </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
+          <td class="paramname"><em>type</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the depth of objects of type <code>type</code> or below. </p>
+<p>If no object of this type is present on the underlying architecture, the function returns the depth of the first "present" object typically found inside <code>type</code>.</p>
+<p>This function is only meaningful for normal object types. If a memory, I/O or Misc object type is given, the corresponding virtual depth is always returned (see <a class="el" href="a00199.html#ga8bec782e21be313750da70cf7428b374" title="Returns the depth of objects of type type.">hwloc_get_type_depth()</a>).</p>
+<p>May return <a class="el" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c" title="Objects of given type exist at different depth in the topology (only for Groups).">HWLOC_TYPE_DEPTH_MULTIPLE</a> for <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56" title="Group objects. Objects which do not fit in the above but are detected by hwloc and are useful to take...">HWLOC_OBJ_GROUP</a> just like <a class="el" href="a00199.html#ga8bec782e21be313750da70cf7428b374" title="Returns the depth of objects of type type.">hwloc_get_type_depth()</a>. </p>
+
+</div>
+</div>
+<a id="gae54d1782ca9b54bea915f5c18a9158fa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gae54d1782ca9b54bea915f5c18a9158fa">&#9670;&nbsp;</a></span>hwloc_topology_get_depth()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_get_depth </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict&#160;</td>
+          <td class="paramname"><em>topology</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Get the depth of the hierarchical tree of objects. </p>
+<p>This is the depth of <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661" title="Processing Unit, or (Logical) Processor. An execution unit (may share a core with some other logical ...">HWLOC_OBJ_PU</a> objects plus one.</p>
+<dl class="section note"><dt>Note</dt><dd>NUMA nodes, I/O and Misc objects are ignored when computing the depth of the tree (they are placed on special levels). </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00200.html b/doc/doxygen-doc/html/a00200.html
new file mode 100644
index 00000000..0f77322d
--- /dev/null
+++ b/doc/doxygen-doc/html/a00200.html
@@ -0,0 +1,291 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Converting between Object Types and Attributes, and Strings</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Converting between Object Types and Attributes, and Strings</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga5ca0bf94bbbb080d0eff17a57bd90422"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#ga5ca0bf94bbbb080d0eff17a57bd90422">hwloc_obj_type_string</a> (<a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
+<tr class="separator:ga5ca0bf94bbbb080d0eff17a57bd90422"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gadb8765c260edea80c52cd06a76639ba4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#gadb8765c260edea80c52cd06a76639ba4">hwloc_obj_type_snprintf</a> (char *restrict string, size_t size, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj, int verbose)</td></tr>
+<tr class="separator:gadb8765c260edea80c52cd06a76639ba4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga870e876931c282a1c7aee2f031912ce3"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#ga870e876931c282a1c7aee2f031912ce3">hwloc_obj_attr_snprintf</a> (char *restrict string, size_t size, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj, const char *restrict separator, int verbose)</td></tr>
+<tr class="separator:ga870e876931c282a1c7aee2f031912ce3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga510f21b066fba2dab12b8c9b173b1dfd"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#ga510f21b066fba2dab12b8c9b173b1dfd">hwloc_type_sscanf</a> (const char *string, <a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> *typep, union <a class="el" href="a00257.html">hwloc_obj_attr_u</a> *attrp, size_t attrsize)</td></tr>
+<tr class="separator:ga510f21b066fba2dab12b8c9b173b1dfd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga52c63cd7203e55b804c1314affc9bd12"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#ga52c63cd7203e55b804c1314affc9bd12">hwloc_type_sscanf_as_depth</a> (const char *string, <a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> *typep, <a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int *depthp)</td></tr>
+<tr class="separator:ga52c63cd7203e55b804c1314affc9bd12"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga870e876931c282a1c7aee2f031912ce3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga870e876931c282a1c7aee2f031912ce3">&#9670;&nbsp;</a></span>hwloc_obj_attr_snprintf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_obj_attr_snprintf </td>
+          <td>(</td>
+          <td class="paramtype">char *restrict&#160;</td>
+          <td class="paramname"><em>string</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>obj</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *restrict&#160;</td>
+          <td class="paramname"><em>separator</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>verbose</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Stringify the attributes of a given topology object into a human-readable form. </p>
+<p>Attribute values are separated by <code>separator</code>.</p>
+<p>Only the major attributes are printed in non-verbose mode.</p>
+<p>If <code>size</code> is 0, <code>string</code> may safely be <code>NULL</code>.</p>
+<dl class="section return"><dt>Returns</dt><dd>the number of characters that were actually written if not truncating, or that would have been written (not including the ending \0). </dd></dl>
+
+</div>
+</div>
+<a id="gadb8765c260edea80c52cd06a76639ba4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gadb8765c260edea80c52cd06a76639ba4">&#9670;&nbsp;</a></span>hwloc_obj_type_snprintf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_obj_type_snprintf </td>
+          <td>(</td>
+          <td class="paramtype">char *restrict&#160;</td>
+          <td class="paramname"><em>string</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>size</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>obj</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>verbose</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Stringify the type of a given topology object into a human-readable form. </p>
+<p>Contrary to <a class="el" href="a00200.html#ga5ca0bf94bbbb080d0eff17a57bd90422" title="Return a constant stringified object type.">hwloc_obj_type_string()</a>, this function includes object-specific attributes (such as the Group depth, the Bridge type, or OS device type) in the output, and it requires the caller to provide the output buffer.</p>
+<p>The output is guaranteed to be the same for all objects of a same topology level.</p>
+<p>If <code>verbose</code> is 1, longer type names are used, e.g. L1Cache instead of L1.</p>
+<p>The output string may be parsed back by <a class="el" href="a00200.html#ga510f21b066fba2dab12b8c9b173b1dfd" title="Return an object type and attributes from a type string.">hwloc_type_sscanf()</a>.</p>
+<p>If <code>size</code> is 0, <code>string</code> may safely be <code>NULL</code>.</p>
+<dl class="section return"><dt>Returns</dt><dd>the number of characters that were actually written if not truncating, or that would have been written (not including the ending \0). </dd></dl>
+
+</div>
+</div>
+<a id="ga5ca0bf94bbbb080d0eff17a57bd90422"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga5ca0bf94bbbb080d0eff17a57bd90422">&#9670;&nbsp;</a></span>hwloc_obj_type_string()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const char* hwloc_obj_type_string </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
+          <td class="paramname"><em>type</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Return a constant stringified object type. </p>
+<p>This function is the basic way to convert a generic type into a string. The output string may be parsed back by <a class="el" href="a00200.html#ga510f21b066fba2dab12b8c9b173b1dfd" title="Return an object type and attributes from a type string.">hwloc_type_sscanf()</a>.</p>
+<p><a class="el" href="a00200.html#gadb8765c260edea80c52cd06a76639ba4" title="Stringify the type of a given topology object into a human-readable form.">hwloc_obj_type_snprintf()</a> may return a more precise output for a specific object, but it requires the caller to provide the output buffer. </p>
+
+</div>
+</div>
+<a id="ga510f21b066fba2dab12b8c9b173b1dfd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga510f21b066fba2dab12b8c9b173b1dfd">&#9670;&nbsp;</a></span>hwloc_type_sscanf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_type_sscanf </td>
+          <td>(</td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>string</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> *&#160;</td>
+          <td class="paramname"><em>typep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">union <a class="el" href="a00257.html">hwloc_obj_attr_u</a> *&#160;</td>
+          <td class="paramname"><em>attrp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>attrsize</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Return an object type and attributes from a type string. </p>
+<p>Convert strings such as "Package" or "L1iCache" into the corresponding types. Matching is case-insensitive, and only the first letters are actually required to match.</p>
+<p>The matched object type is set in <code>typep</code> (which cannot be <code>NULL</code>).</p>
+<p>Type-specific attributes, for instance Cache type, Cache depth, Group depth, Bridge type or OS Device type may be returned in <code>attrp</code>. Attributes that are not specified in the string (for instance "Group" without a depth, or "L2Cache" without a cache type) are set to -1.</p>
+<p><code>attrp</code> is only filled if not <code>NULL</code> and if its size specified in <code>attrsize</code> is large enough. It should be at least as large as union <a class="el" href="a00257.html" title="Object type-specific Attributes.">hwloc_obj_attr_u</a>.</p>
+<dl class="section return"><dt>Returns</dt><dd>0 if a type was correctly identified, otherwise -1.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function is guaranteed to match any string returned by <a class="el" href="a00200.html#ga5ca0bf94bbbb080d0eff17a57bd90422" title="Return a constant stringified object type.">hwloc_obj_type_string()</a> or <a class="el" href="a00200.html#gadb8765c260edea80c52cd06a76639ba4" title="Stringify the type of a given topology object into a human-readable form.">hwloc_obj_type_snprintf()</a>.</dd>
+<dd>
+This is an extended version of the now deprecated hwloc_obj_type_sscanf(). </dd></dl>
+
+</div>
+</div>
+<a id="ga52c63cd7203e55b804c1314affc9bd12"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga52c63cd7203e55b804c1314affc9bd12">&#9670;&nbsp;</a></span>hwloc_type_sscanf_as_depth()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_type_sscanf_as_depth </td>
+          <td>(</td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>string</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> *&#160;</td>
+          <td class="paramname"><em>typep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int *&#160;</td>
+          <td class="paramname"><em>depthp</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Return an object type and its level depth from a type string. </p>
+<p>Convert strings such as "Package" or "L1iCache" into the corresponding types and return in <code>depthp</code> the depth of the corresponding level in the topology <code>topology</code>.</p>
+<p>If no object of this type is present on the underlying architecture, <a class="el" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad" title="No object of given type exists in the topology.">HWLOC_TYPE_DEPTH_UNKNOWN</a> is returned.</p>
+<p>If multiple such levels exist (for instance if giving Group without any depth), the function may return <a class="el" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c" title="Objects of given type exist at different depth in the topology (only for Groups).">HWLOC_TYPE_DEPTH_MULTIPLE</a> instead.</p>
+<p>The matched object type is set in <code>typep</code> if <code>typep</code> is non <code>NULL</code>.</p>
+<dl class="section note"><dt>Note</dt><dd>This function is similar to <a class="el" href="a00200.html#ga510f21b066fba2dab12b8c9b173b1dfd" title="Return an object type and attributes from a type string.">hwloc_type_sscanf()</a> followed by <a class="el" href="a00199.html#ga8bec782e21be313750da70cf7428b374" title="Returns the depth of objects of type type.">hwloc_get_type_depth()</a> but it also automatically disambiguates multiple group levels etc.</dd>
+<dd>
+This function is guaranteed to match any string returned by <a class="el" href="a00200.html#ga5ca0bf94bbbb080d0eff17a57bd90422" title="Return a constant stringified object type.">hwloc_obj_type_string()</a> or <a class="el" href="a00200.html#gadb8765c260edea80c52cd06a76639ba4" title="Stringify the type of a given topology object into a human-readable form.">hwloc_obj_type_snprintf()</a>. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00201.html b/doc/doxygen-doc/html/a00201.html
new file mode 100644
index 00000000..8d3409ea
--- /dev/null
+++ b/doc/doxygen-doc/html/a00201.html
@@ -0,0 +1,146 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Consulting and Adding Key-Value Info Attributes</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Consulting and Adding Key-Value Info Attributes</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gab358661a92bb27d8542b255cc9f6f25e"><td class="memItemLeft" align="right" valign="top">static const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#gab358661a92bb27d8542b255cc9f6f25e">hwloc_obj_get_info_by_name</a> (<a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj, const char *name)</td></tr>
+<tr class="separator:gab358661a92bb27d8542b255cc9f6f25e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gace7654bb8a9002caae1a4b8a59e7452e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#gace7654bb8a9002caae1a4b8a59e7452e">hwloc_obj_add_info</a> (<a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj, const char *name, const char *value)</td></tr>
+<tr class="separator:gace7654bb8a9002caae1a4b8a59e7452e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="gace7654bb8a9002caae1a4b8a59e7452e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gace7654bb8a9002caae1a4b8a59e7452e">&#9670;&nbsp;</a></span>hwloc_obj_add_info()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_obj_add_info </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>obj</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>value</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Add the given info name and value pair to the given object. </p>
+<p>The info is appended to the existing info array even if another key with the same name already exists.</p>
+<p>The input strings are copied before being added in the object infos.</p>
+<dl class="section return"><dt>Returns</dt><dd><code>0</code> on success, <code>-1</code> on error.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function may be used to enforce object colors in the lstopo graphical output by using "lstopoStyle" as a name and "Background=#rrggbb" as a value. See CUSTOM COLORS in the lstopo(1) manpage for details.</dd>
+<dd>
+If <code>value</code> contains some non-printable characters, they will be dropped when exporting to XML, see <a class="el" href="a00218.html#ga333f79975b4eeb28a3d8fad3373583ce" title="Export the topology into an XML file.">hwloc_topology_export_xml()</a> in <a class="el" href="a00134_source.html">hwloc/export.h</a>. </dd></dl>
+
+</div>
+</div>
+<a id="gab358661a92bb27d8542b255cc9f6f25e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gab358661a92bb27d8542b255cc9f6f25e">&#9670;&nbsp;</a></span>hwloc_obj_get_info_by_name()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static const char* hwloc_obj_get_info_by_name </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>obj</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>name</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Search the given key name in object infos and return the corresponding value. </p>
+<p>If multiple keys match the given name, only the first one is returned.</p>
+<dl class="section return"><dt>Returns</dt><dd><code>NULL</code> if no such key exists. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00202.html b/doc/doxygen-doc/html/a00202.html
new file mode 100644
index 00000000..34571f7c
--- /dev/null
+++ b/doc/doxygen-doc/html/a00202.html
@@ -0,0 +1,488 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): CPU binding</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">CPU binding</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:ga217dc8d373f8958cc93c154ebce1c71c"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html#ga217dc8d373f8958cc93c154ebce1c71c">hwloc_cpubind_flags_t</a> { <a class="el" href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71ca2e0dd0128dac6b03408c7dd170477fdc">HWLOC_CPUBIND_PROCESS</a>
+, <a class="el" href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421">HWLOC_CPUBIND_THREAD</a>
+, <a class="el" href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71ca679a7e0f0c7ee06b123565f90d98e7fa">HWLOC_CPUBIND_STRICT</a>
+, <a class="el" href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71ca41ce440443cc3087caed95ab60edcad6">HWLOC_CPUBIND_NOMEMBIND</a>
+ }</td></tr>
+<tr class="separator:ga217dc8d373f8958cc93c154ebce1c71c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga80bc07473a8edf840cae17bd7ec21d48"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html#ga80bc07473a8edf840cae17bd7ec21d48">hwloc_set_cpubind</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, int flags)</td></tr>
+<tr class="separator:ga80bc07473a8edf840cae17bd7ec21d48"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacba7ecb979baf824d5240fa2cb2a8be6"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html#gacba7ecb979baf824d5240fa2cb2a8be6">hwloc_get_cpubind</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set, int flags)</td></tr>
+<tr class="separator:gacba7ecb979baf824d5240fa2cb2a8be6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga296db8a3c6d49b51fb83d6f3e45c02a6"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html#ga296db8a3c6d49b51fb83d6f3e45c02a6">hwloc_set_proc_cpubind</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_pid_t pid, <a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, int flags)</td></tr>
+<tr class="separator:ga296db8a3c6d49b51fb83d6f3e45c02a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac82de91f788fa82dacf99c6e0d4b7158"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html#gac82de91f788fa82dacf99c6e0d4b7158">hwloc_get_proc_cpubind</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_pid_t pid, <a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set, int flags)</td></tr>
+<tr class="separator:gac82de91f788fa82dacf99c6e0d4b7158"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae42c01b2addcfbf6048b9a516dd7a906"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html#gae42c01b2addcfbf6048b9a516dd7a906">hwloc_set_thread_cpubind</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_thread_t thread, <a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, int flags)</td></tr>
+<tr class="separator:gae42c01b2addcfbf6048b9a516dd7a906"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf13f765642b5d0d9a9813e6bb043671b"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html#gaf13f765642b5d0d9a9813e6bb043671b">hwloc_get_thread_cpubind</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_thread_t thread, <a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set, int flags)</td></tr>
+<tr class="separator:gaf13f765642b5d0d9a9813e6bb043671b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafdb374627358bf09203b5a4215b13032"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html#gafdb374627358bf09203b5a4215b13032">hwloc_get_last_cpu_location</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set, int flags)</td></tr>
+<tr class="separator:gafdb374627358bf09203b5a4215b13032"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga910a05c2d47f68a3155bf176b50fa555"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html#ga910a05c2d47f68a3155bf176b50fa555">hwloc_get_proc_last_cpu_location</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_pid_t pid, <a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set, int flags)</td></tr>
+<tr class="separator:ga910a05c2d47f68a3155bf176b50fa555"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Some operating systems only support binding threads or processes to a single PU. Others allow binding to larger sets such as entire Cores or Packages or even random sets of individual PUs. In such operating system, the scheduler is free to run the task on one of these PU, then migrate it to another PU, etc. It is often useful to call <a class="el" href="a00217.html#gaa611a77c092e679246afdf9a60d5db8b" title="Keep a single index among those set in bitmap bitmap.">hwloc_bitmap_singlify()</a> on the target CPU set before passing it to the binding function to avoid these expensive migrations. See the documentation of <a class="el" href="a00217.html#gaa611a77c092e679246afdf9a60d5db8b" title="Keep a single index among those set in bitmap bitmap.">hwloc_bitmap_singlify()</a> for details.</p>
+<p>Some operating systems do not provide all hwloc-supported mechanisms to bind processes, threads, etc. <a class="el" href="a00205.html#gab8c76173c4a8ce1a9a9366012b1388e6" title="Retrieve the topology support.">hwloc_topology_get_support()</a> may be used to query about the actual CPU binding support in the currently used operating system.</p>
+<p>When the requested binding operation is not available and the <a class="el" href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71ca679a7e0f0c7ee06b123565f90d98e7fa" title="Request for strict binding from the OS.">HWLOC_CPUBIND_STRICT</a> flag was passed, the function returns -1. <code>errno</code> is set to <code>ENOSYS</code> when it is not possible to bind the requested kind of object processes/threads. errno is set to <code>EXDEV</code> when the requested cpuset can not be enforced (e.g. some systems only allow one CPU, and some other systems only allow one NUMA node).</p>
+<p>If <a class="el" href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71ca679a7e0f0c7ee06b123565f90d98e7fa" title="Request for strict binding from the OS.">HWLOC_CPUBIND_STRICT</a> was not passed, the function may fail as well, or the operating system may use a slightly different operation (with side-effects, smaller binding set, etc.) when the requested operation is not exactly supported.</p>
+<p>The most portable version that should be preferred over the others, whenever possible, is the following one which just binds the current program, assuming it is single-threaded:</p>
+<div class="fragment"><div class="line"><a class="code" href="a00202.html#ga80bc07473a8edf840cae17bd7ec21d48">hwloc_set_cpubind</a>(topology, set, 0),</div>
+<div class="ttc" id="aa00202_html_ga80bc07473a8edf840cae17bd7ec21d48"><div class="ttname"><a href="a00202.html#ga80bc07473a8edf840cae17bd7ec21d48">hwloc_set_cpubind</a></div><div class="ttdeci">int hwloc_set_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t set, int flags)</div><div class="ttdoc">Bind current process or thread on CPUs given in physical bitmap set.</div></div>
+</div><!-- fragment --><p>If the program may be multithreaded, the following one should be preferred to only bind the current thread:</p>
+<div class="fragment"><div class="line"><a class="code" href="a00202.html#ga80bc07473a8edf840cae17bd7ec21d48">hwloc_set_cpubind</a>(topology, set, <a class="code" href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421">HWLOC_CPUBIND_THREAD</a>),</div>
+<div class="ttc" id="aa00202_html_gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421"><div class="ttname"><a href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421">HWLOC_CPUBIND_THREAD</a></div><div class="ttdeci">@ HWLOC_CPUBIND_THREAD</div><div class="ttdoc">Bind current thread of current process.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1162</div></div>
+</div><!-- fragment --><dl class="section see"><dt>See also</dt><dd>Some example codes are available under doc/examples/ in the source tree.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>To unbind, just call the binding function with either a full cpuset or a cpuset equal to the system cpuset.</dd>
+<dd>
+On some operating systems, CPU binding may have effects on memory binding, see <a class="el" href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71ca41ce440443cc3087caed95ab60edcad6" title="Avoid any effect on memory binding.">HWLOC_CPUBIND_NOMEMBIND</a></dd>
+<dd>
+Running lstopo --top or hwloc-ps can be a very convenient tool to check how binding actually happened. </dd></dl>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a id="ga217dc8d373f8958cc93c154ebce1c71c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga217dc8d373f8958cc93c154ebce1c71c">&#9670;&nbsp;</a></span>hwloc_cpubind_flags_t</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00202.html#ga217dc8d373f8958cc93c154ebce1c71c">hwloc_cpubind_flags_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Process/Thread binding flags. </p>
+<p>These bit flags can be used to refine the binding policy.</p>
+<p>The default (0) is to bind the current process, assumed to be single-threaded, in a non-strict way. This is the most portable way to bind as all operating systems usually provide it.</p>
+<dl class="section note"><dt>Note</dt><dd>Not all systems support all kinds of binding. See the "Detailed Description" section of <a class="el" href="a00202.html">CPU binding</a> for a description of errors that can occur. </dd></dl>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga217dc8d373f8958cc93c154ebce1c71ca2e0dd0128dac6b03408c7dd170477fdc"></a>HWLOC_CPUBIND_PROCESS&#160;</td><td class="fielddoc"><p>Bind all threads of the current (possibly) multithreaded process. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421"></a>HWLOC_CPUBIND_THREAD&#160;</td><td class="fielddoc"><p>Bind current thread of current process. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga217dc8d373f8958cc93c154ebce1c71ca679a7e0f0c7ee06b123565f90d98e7fa"></a>HWLOC_CPUBIND_STRICT&#160;</td><td class="fielddoc"><p>Request for strict binding from the OS. </p>
+<p>By default, when the designated CPUs are all busy while other CPUs are idle, operating systems may execute the thread/process on those other CPUs instead of the designated CPUs, to let them progress anyway. Strict binding means that the thread/process will _never_ execute on other CPUs than the designated CPUs, even when those are busy with other tasks and other CPUs are idle.</p>
+<dl class="section note"><dt>Note</dt><dd>Depending on the operating system, strict binding may not be possible (e.g., the OS does not implement it) or not allowed (e.g., for an administrative reasons), and the function will fail in that case.</dd></dl>
+<p>When retrieving the binding of a process, this flag checks whether all its threads actually have the same binding. If the flag is not given, the binding of each thread will be accumulated.</p>
+<dl class="section note"><dt>Note</dt><dd>This flag is meaningless when retrieving the binding of a thread. </dd></dl>
+</td></tr>
+<tr><td class="fieldname"><a id="gga217dc8d373f8958cc93c154ebce1c71ca41ce440443cc3087caed95ab60edcad6"></a>HWLOC_CPUBIND_NOMEMBIND&#160;</td><td class="fielddoc"><p>Avoid any effect on memory binding. </p>
+<p>On some operating systems, some CPU binding function would also bind the memory on the corresponding NUMA node. It is often not a problem for the application, but if it is, setting this flag will make hwloc avoid using OS functions that would also bind memory. This will however reduce the support of CPU bindings, i.e. potentially return -1 with errno set to ENOSYS in some cases.</p>
+<p>This flag is only meaningful when used with functions that set the CPU binding. It is ignored when used with functions that get CPU binding information. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="gacba7ecb979baf824d5240fa2cb2a8be6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gacba7ecb979baf824d5240fa2cb2a8be6">&#9670;&nbsp;</a></span>hwloc_get_cpubind()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_get_cpubind </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Get current process or thread binding. </p>
+<p>The CPU-set <code>set</code> (previously allocated by the caller) is filled with the list of PUs which the process or thread (according to <em>flags</em>) was last bound to. </p>
+
+</div>
+</div>
+<a id="gafdb374627358bf09203b5a4215b13032"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gafdb374627358bf09203b5a4215b13032">&#9670;&nbsp;</a></span>hwloc_get_last_cpu_location()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_get_last_cpu_location </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Get the last physical CPU where the current process or thread ran. </p>
+<p>The CPU-set <code>set</code> (previously allocated by the caller) is filled with the list of PUs which the process or thread (according to <em>flags</em>) last ran on.</p>
+<p>The operating system may move some tasks from one processor to another at any time according to their binding, so this function may return something that is already outdated.</p>
+<p><code>flags</code> can include either <a class="el" href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71ca2e0dd0128dac6b03408c7dd170477fdc" title="Bind all threads of the current (possibly) multithreaded process.">HWLOC_CPUBIND_PROCESS</a> or <a class="el" href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421" title="Bind current thread of current process.">HWLOC_CPUBIND_THREAD</a> to specify whether the query should be for the whole process (union of all CPUs on which all threads are running), or only the current thread. If the process is single-threaded, flags can be set to zero to let hwloc use whichever method is available on the underlying OS. </p>
+
+</div>
+</div>
+<a id="gac82de91f788fa82dacf99c6e0d4b7158"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gac82de91f788fa82dacf99c6e0d4b7158">&#9670;&nbsp;</a></span>hwloc_get_proc_cpubind()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_get_proc_cpubind </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">hwloc_pid_t&#160;</td>
+          <td class="paramname"><em>pid</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Get the current physical binding of process <code>pid</code>. </p>
+<p>The CPU-set <code>set</code> (previously allocated by the caller) is filled with the list of PUs which the process was last bound to.</p>
+<dl class="section note"><dt>Note</dt><dd><code>hwloc_pid_t</code> is <code>pid_t</code> on Unix platforms, and <code>HANDLE</code> on native Windows platforms.</dd>
+<dd>
+As a special case on Linux, if a tid (thread ID) is supplied instead of a pid (process ID) and HWLOC_CPUBIND_THREAD is passed in flags, the binding for that specific thread is returned.</dd>
+<dd>
+On non-Linux systems, HWLOC_CPUBIND_THREAD can not be used in <code>flags</code>. </dd></dl>
+
+</div>
+</div>
+<a id="ga910a05c2d47f68a3155bf176b50fa555"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga910a05c2d47f68a3155bf176b50fa555">&#9670;&nbsp;</a></span>hwloc_get_proc_last_cpu_location()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_get_proc_last_cpu_location </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">hwloc_pid_t&#160;</td>
+          <td class="paramname"><em>pid</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Get the last physical CPU where a process ran. </p>
+<p>The CPU-set <code>set</code> (previously allocated by the caller) is filled with the list of PUs which the process last ran on.</p>
+<p>The operating system may move some tasks from one processor to another at any time according to their binding, so this function may return something that is already outdated.</p>
+<dl class="section note"><dt>Note</dt><dd><code>hwloc_pid_t</code> is <code>pid_t</code> on Unix platforms, and <code>HANDLE</code> on native Windows platforms.</dd>
+<dd>
+As a special case on Linux, if a tid (thread ID) is supplied instead of a pid (process ID) and <a class="el" href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421" title="Bind current thread of current process.">HWLOC_CPUBIND_THREAD</a> is passed in flags, the last CPU location of that specific thread is returned.</dd>
+<dd>
+On non-Linux systems, <a class="el" href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421" title="Bind current thread of current process.">HWLOC_CPUBIND_THREAD</a> can not be used in <code>flags</code>. </dd></dl>
+
+</div>
+</div>
+<a id="gaf13f765642b5d0d9a9813e6bb043671b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaf13f765642b5d0d9a9813e6bb043671b">&#9670;&nbsp;</a></span>hwloc_get_thread_cpubind()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_get_thread_cpubind </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">hwloc_thread_t&#160;</td>
+          <td class="paramname"><em>thread</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Get the current physical binding of thread <code>tid</code>. </p>
+<p>The CPU-set <code>set</code> (previously allocated by the caller) is filled with the list of PUs which the thread was last bound to.</p>
+<dl class="section note"><dt>Note</dt><dd><code>hwloc_thread_t</code> is <code>pthread_t</code> on Unix platforms, and <code>HANDLE</code> on native Windows platforms.</dd>
+<dd>
+<a class="el" href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71ca2e0dd0128dac6b03408c7dd170477fdc" title="Bind all threads of the current (possibly) multithreaded process.">HWLOC_CPUBIND_PROCESS</a> can not be used in <code>flags</code>. </dd></dl>
+
+</div>
+</div>
+<a id="ga80bc07473a8edf840cae17bd7ec21d48"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga80bc07473a8edf840cae17bd7ec21d48">&#9670;&nbsp;</a></span>hwloc_set_cpubind()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_set_cpubind </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Bind current process or thread on CPUs given in physical bitmap <code>set</code>. </p>
+<dl class="section return"><dt>Returns</dt><dd>-1 with errno set to ENOSYS if the action is not supported </dd>
+<dd>
+-1 with errno set to EXDEV if the binding cannot be enforced </dd></dl>
+
+</div>
+</div>
+<a id="ga296db8a3c6d49b51fb83d6f3e45c02a6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga296db8a3c6d49b51fb83d6f3e45c02a6">&#9670;&nbsp;</a></span>hwloc_set_proc_cpubind()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_set_proc_cpubind </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">hwloc_pid_t&#160;</td>
+          <td class="paramname"><em>pid</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Bind a process <code>pid</code> on CPUs given in physical bitmap <code>set</code>. </p>
+<dl class="section note"><dt>Note</dt><dd><code>hwloc_pid_t</code> is <code>pid_t</code> on Unix platforms, and <code>HANDLE</code> on native Windows platforms.</dd>
+<dd>
+As a special case on Linux, if a tid (thread ID) is supplied instead of a pid (process ID) and <a class="el" href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421" title="Bind current thread of current process.">HWLOC_CPUBIND_THREAD</a> is passed in flags, the binding is applied to that specific thread.</dd>
+<dd>
+On non-Linux systems, <a class="el" href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421" title="Bind current thread of current process.">HWLOC_CPUBIND_THREAD</a> can not be used in <code>flags</code>. </dd></dl>
+
+</div>
+</div>
+<a id="gae42c01b2addcfbf6048b9a516dd7a906"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gae42c01b2addcfbf6048b9a516dd7a906">&#9670;&nbsp;</a></span>hwloc_set_thread_cpubind()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_set_thread_cpubind </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">hwloc_thread_t&#160;</td>
+          <td class="paramname"><em>thread</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Bind a thread <code>thread</code> on CPUs given in physical bitmap <code>set</code>. </p>
+<dl class="section note"><dt>Note</dt><dd><code>hwloc_thread_t</code> is <code>pthread_t</code> on Unix platforms, and <code>HANDLE</code> on native Windows platforms.</dd>
+<dd>
+<a class="el" href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71ca2e0dd0128dac6b03408c7dd170477fdc" title="Bind all threads of the current (possibly) multithreaded process.">HWLOC_CPUBIND_PROCESS</a> can not be used in <code>flags</code>. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00203.html b/doc/doxygen-doc/html/a00203.html
new file mode 100644
index 00000000..cc06cccc
--- /dev/null
+++ b/doc/doxygen-doc/html/a00203.html
@@ -0,0 +1,760 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Memory binding</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Memory binding</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:gac9764f79505775d06407b40f5e4661e8"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> { <br />
+&#160;&#160;<a class="el" href="a00203.html#ggac9764f79505775d06407b40f5e4661e8a18675bb80ebc1bce5b652e9de8f3998c">HWLOC_MEMBIND_DEFAULT</a>
+, <a class="el" href="a00203.html#ggac9764f79505775d06407b40f5e4661e8a979c7aa78dd32780858f30f47a72cca0">HWLOC_MEMBIND_FIRSTTOUCH</a>
+, <a class="el" href="a00203.html#ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c">HWLOC_MEMBIND_BIND</a>
+, <a class="el" href="a00203.html#ggac9764f79505775d06407b40f5e4661e8ae370075e5af016d42310f87ea5af236b">HWLOC_MEMBIND_INTERLEAVE</a>
+, <br />
+&#160;&#160;<a class="el" href="a00203.html#ggac9764f79505775d06407b40f5e4661e8aecdd4164d647708fbb51a00d98dbb138">HWLOC_MEMBIND_NEXTTOUCH</a>
+, <a class="el" href="a00203.html#ggac9764f79505775d06407b40f5e4661e8a3185bd869b67817fb2bd5164bf360402">HWLOC_MEMBIND_MIXED</a>
+<br />
+ }</td></tr>
+<tr class="separator:gac9764f79505775d06407b40f5e4661e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab00475fd98815bf4fb9aaf752030e7d2"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#gab00475fd98815bf4fb9aaf752030e7d2">hwloc_membind_flags_t</a> { <br />
+&#160;&#160;<a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4">HWLOC_MEMBIND_PROCESS</a>
+, <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298">HWLOC_MEMBIND_THREAD</a>
+, <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a>
+, <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2aa6e49e54f52827cb143cc869cfd748af">HWLOC_MEMBIND_MIGRATE</a>
+, <br />
+&#160;&#160;<a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2aad6b9eaf2ee324ca58dc8f58094b9997">HWLOC_MEMBIND_NOCPUBIND</a>
+, <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256">HWLOC_MEMBIND_BYNODESET</a>
+<br />
+ }</td></tr>
+<tr class="separator:gab00475fd98815bf4fb9aaf752030e7d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga020951efa0ce3862bd4faec295501a7f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#ga020951efa0ce3862bd4faec295501a7f">hwloc_set_membind</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <a class="el" href="a00203.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> policy, int flags)</td></tr>
+<tr class="separator:ga020951efa0ce3862bd4faec295501a7f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae21f0a1a884929c784bebf070252aa56"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#gae21f0a1a884929c784bebf070252aa56">hwloc_get_membind</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set, <a class="el" href="a00203.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> *policy, int flags)</td></tr>
+<tr class="separator:gae21f0a1a884929c784bebf070252aa56"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gabc91ff16f7e41047924e3a4ae6d9da7e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#gabc91ff16f7e41047924e3a4ae6d9da7e">hwloc_set_proc_membind</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_pid_t pid, <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <a class="el" href="a00203.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> policy, int flags)</td></tr>
+<tr class="separator:gabc91ff16f7e41047924e3a4ae6d9da7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1730ceb18ec6ee3b7bd3d0db81f07dc8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#ga1730ceb18ec6ee3b7bd3d0db81f07dc8">hwloc_get_proc_membind</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_pid_t pid, <a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set, <a class="el" href="a00203.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> *policy, int flags)</td></tr>
+<tr class="separator:ga1730ceb18ec6ee3b7bd3d0db81f07dc8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf881faefe20701229f07dd7dbd0125ed"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#gaf881faefe20701229f07dd7dbd0125ed">hwloc_set_area_membind</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const void *addr, size_t len, <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <a class="el" href="a00203.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> policy, int flags)</td></tr>
+<tr class="separator:gaf881faefe20701229f07dd7dbd0125ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa87e0a6946ff145914fdf0b1c60567f8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#gaa87e0a6946ff145914fdf0b1c60567f8">hwloc_get_area_membind</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const void *addr, size_t len, <a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set, <a class="el" href="a00203.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> *policy, int flags)</td></tr>
+<tr class="separator:gaa87e0a6946ff145914fdf0b1c60567f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga537c7508a4e2d1db05673ec5be6e805c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#ga537c7508a4e2d1db05673ec5be6e805c">hwloc_get_area_memlocation</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const void *addr, size_t len, <a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set, int flags)</td></tr>
+<tr class="separator:ga537c7508a4e2d1db05673ec5be6e805c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga972b335a86a7d5e7b34bce2b243c41bc"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#ga972b335a86a7d5e7b34bce2b243c41bc">hwloc_alloc</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, size_t len)</td></tr>
+<tr class="separator:ga972b335a86a7d5e7b34bce2b243c41bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga04736461780fadcf193af218c0122273"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#ga04736461780fadcf193af218c0122273">hwloc_alloc_membind</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, size_t len, <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <a class="el" href="a00203.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> policy, int flags)</td></tr>
+<tr class="separator:ga04736461780fadcf193af218c0122273"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab1b77b8408bacaf03c7e8878f7577922"><td class="memItemLeft" align="right" valign="top">static void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#gab1b77b8408bacaf03c7e8878f7577922">hwloc_alloc_membind_policy</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, size_t len, <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <a class="el" href="a00203.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> policy, int flags)</td></tr>
+<tr class="separator:gab1b77b8408bacaf03c7e8878f7577922"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga32dbd4f54e9e4a7179f2dde37ffe6ad7"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#ga32dbd4f54e9e4a7179f2dde37ffe6ad7">hwloc_free</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, void *addr, size_t len)</td></tr>
+<tr class="separator:ga32dbd4f54e9e4a7179f2dde37ffe6ad7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Memory binding can be done three ways:</p>
+<ul>
+<li>explicit memory allocation thanks to <a class="el" href="a00203.html#ga04736461780fadcf193af218c0122273" title="Allocate some memory on NUMA memory nodes specified by set.">hwloc_alloc_membind()</a> and friends: the binding will have effect on the memory allocated by these functions.</li>
+<li>implicit memory binding through binding policy: <a class="el" href="a00203.html#ga020951efa0ce3862bd4faec295501a7f" title="Set the default memory binding policy of the current process or thread to prefer the NUMA node(s) spe...">hwloc_set_membind()</a> and friends only define the current policy of the process, which will be applied to the subsequent calls to malloc() and friends.</li>
+<li>migration of existing memory ranges, thanks to <a class="el" href="a00203.html#gaf881faefe20701229f07dd7dbd0125ed" title="Bind the already-allocated memory identified by (addr, len) to the NUMA node(s) specified by set.">hwloc_set_area_membind()</a> and friends, which move already-allocated data.</li>
+</ul>
+<p>Not all operating systems support all three ways. <a class="el" href="a00205.html#gab8c76173c4a8ce1a9a9366012b1388e6" title="Retrieve the topology support.">hwloc_topology_get_support()</a> may be used to query about the actual memory binding support in the currently used operating system.</p>
+<p>When the requested binding operation is not available and the <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> flag was passed, the function returns -1. <code>errno</code> will be set to <code>ENOSYS</code> when the system does support the specified action or policy (e.g., some systems only allow binding memory on a per-thread basis, whereas other systems only allow binding memory for all threads in a process). <code>errno</code> will be set to EXDEV when the requested set can not be enforced (e.g., some systems only allow binding memory to a single NUMA node).</p>
+<p>If <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> was not passed, the function may fail as well, or the operating system may use a slightly different operation (with side-effects, smaller binding set, etc.) when the requested operation is not exactly supported.</p>
+<p>The most portable form that should be preferred over the others whenever possible is as follows. It allocates some memory hopefully bound to the specified set. To do so, hwloc will possibly have to change the current memory binding policy in order to actually get the memory bound, if the OS does not provide any other way to simply allocate bound memory without changing the policy for all allocations. That is the difference with <a class="el" href="a00203.html#ga04736461780fadcf193af218c0122273" title="Allocate some memory on NUMA memory nodes specified by set.">hwloc_alloc_membind()</a>, which will never change the current memory binding policy.</p>
+<div class="fragment"><div class="line"><a class="code" href="a00203.html#gab1b77b8408bacaf03c7e8878f7577922">hwloc_alloc_membind_policy</a>(topology, size, set,</div>
+<div class="line">                           <a class="code" href="a00203.html#ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c">HWLOC_MEMBIND_BIND</a>, 0);</div>
+<div class="ttc" id="aa00203_html_gab1b77b8408bacaf03c7e8878f7577922"><div class="ttname"><a href="a00203.html#gab1b77b8408bacaf03c7e8878f7577922">hwloc_alloc_membind_policy</a></div><div class="ttdeci">static void * hwloc_alloc_membind_policy(hwloc_topology_t topology, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</div><div class="ttdoc">Allocate some memory on NUMA memory nodes specified by set.</div></div>
+<div class="ttc" id="aa00203_html_ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c"><div class="ttname"><a href="a00203.html#ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c">HWLOC_MEMBIND_BIND</a></div><div class="ttdeci">@ HWLOC_MEMBIND_BIND</div><div class="ttdoc">Allocate memory on the specified nodes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1421</div></div>
+</div><!-- fragment --><p>Each hwloc memory binding function takes a bitmap argument that is a CPU set by default, or a NUMA memory node set if the flag <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> is specified. See <a class="el" href="a00195.html">Object Sets (hwloc_cpuset_t and hwloc_nodeset_t)</a> and <a class="el" href="a00217.html">The bitmap API</a> for a discussion of CPU sets and NUMA memory node sets. It is also possible to convert between CPU set and node set using <a class="el" href="a00215.html#ga185751c1653fedbeb7cc480840f38cde" title="Convert a CPU set into a NUMA node set.">hwloc_cpuset_to_nodeset()</a> or <a class="el" href="a00215.html#gad5ee8691e08a3538ea7633344c00456d" title="Convert a NUMA node set into a CPU set.">hwloc_cpuset_from_nodeset()</a>.</p>
+<p>Memory binding by CPU set cannot work for CPU-less NUMA memory nodes. Binding by nodeset should therefore be preferred whenever possible.</p>
+<dl class="section see"><dt>See also</dt><dd>Some example codes are available under doc/examples/ in the source tree.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>On some operating systems, memory binding affects the CPU binding; see <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2aad6b9eaf2ee324ca58dc8f58094b9997" title="Avoid any effect on CPU binding.">HWLOC_MEMBIND_NOCPUBIND</a> </dd></dl>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a id="gab00475fd98815bf4fb9aaf752030e7d2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gab00475fd98815bf4fb9aaf752030e7d2">&#9670;&nbsp;</a></span>hwloc_membind_flags_t</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00203.html#gab00475fd98815bf4fb9aaf752030e7d2">hwloc_membind_flags_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Memory binding flags. </p>
+<p>These flags can be used to refine the binding policy. All flags can be logically OR'ed together with the exception of <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4" title="Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually e...">HWLOC_MEMBIND_PROCESS</a> and <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298" title="Set policy for a specific thread of the current process. This flag is mutually exclusive with HWLOC_M...">HWLOC_MEMBIND_THREAD</a>; these two flags are mutually exclusive.</p>
+<p>Not all systems support all kinds of binding. <a class="el" href="a00205.html#gab8c76173c4a8ce1a9a9366012b1388e6" title="Retrieve the topology support.">hwloc_topology_get_support()</a> may be used to query about the actual memory binding support in the currently used operating system. See the "Detailed Description" section of <a class="el" href="a00203.html">Memory binding</a> for a description of errors that can occur. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4"></a>HWLOC_MEMBIND_PROCESS&#160;</td><td class="fielddoc"><p>Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually exclusive with <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298" title="Set policy for a specific thread of the current process. This flag is mutually exclusive with HWLOC_M...">HWLOC_MEMBIND_THREAD</a>. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298"></a>HWLOC_MEMBIND_THREAD&#160;</td><td class="fielddoc"><p>Set policy for a specific thread of the current process. This flag is mutually exclusive with <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4" title="Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually e...">HWLOC_MEMBIND_PROCESS</a>. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6"></a>HWLOC_MEMBIND_STRICT&#160;</td><td class="fielddoc"><p>Request strict binding from the OS. The function will fail if the binding can not be guaranteed / completely enforced.</p>
+<p>This flag has slightly different meanings depending on which function it is used with. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggab00475fd98815bf4fb9aaf752030e7d2aa6e49e54f52827cb143cc869cfd748af"></a>HWLOC_MEMBIND_MIGRATE&#160;</td><td class="fielddoc"><p>Migrate existing allocated memory. If the memory cannot be migrated and the <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> flag is passed, an error will be returned. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggab00475fd98815bf4fb9aaf752030e7d2aad6b9eaf2ee324ca58dc8f58094b9997"></a>HWLOC_MEMBIND_NOCPUBIND&#160;</td><td class="fielddoc"><p>Avoid any effect on CPU binding. </p>
+<p>On some operating systems, some underlying memory binding functions also bind the application to the corresponding CPU(s). Using this flag will cause hwloc to avoid using OS functions that could potentially affect CPU bindings. Note, however, that using NOCPUBIND may reduce hwloc's overall memory binding support. Specifically: some of hwloc's memory binding functions may fail with errno set to ENOSYS when used with NOCPUBIND. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256"></a>HWLOC_MEMBIND_BYNODESET&#160;</td><td class="fielddoc"><p>Consider the bitmap argument as a nodeset. </p>
+<p>The bitmap argument is considered a nodeset if this flag is given, or a cpuset otherwise by default.</p>
+<p>Memory binding by CPU set cannot work for CPU-less NUMA memory nodes. Binding by nodeset should therefore be preferred whenever possible. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<a id="gac9764f79505775d06407b40f5e4661e8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gac9764f79505775d06407b40f5e4661e8">&#9670;&nbsp;</a></span>hwloc_membind_policy_t</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00203.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Memory binding policy. </p>
+<p>These constants can be used to choose the binding policy. Only one policy can be used at a time (i.e., the values cannot be OR'ed together).</p>
+<p>Not all systems support all kinds of binding. <a class="el" href="a00205.html#gab8c76173c4a8ce1a9a9366012b1388e6" title="Retrieve the topology support.">hwloc_topology_get_support()</a> may be used to query about the actual memory binding policy support in the currently used operating system. See the "Detailed Description" section of <a class="el" href="a00203.html">Memory binding</a> for a description of errors that can occur. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggac9764f79505775d06407b40f5e4661e8a18675bb80ebc1bce5b652e9de8f3998c"></a>HWLOC_MEMBIND_DEFAULT&#160;</td><td class="fielddoc"><p>Reset the memory allocation policy to the system default. Depending on the operating system, this may correspond to <a class="el" href="a00203.html#ggac9764f79505775d06407b40f5e4661e8a979c7aa78dd32780858f30f47a72cca0" title="Allocate each memory page individually on the local NUMA node of the thread that touches it.">HWLOC_MEMBIND_FIRSTTOUCH</a> (Linux, FreeBSD), or <a class="el" href="a00203.html#ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c" title="Allocate memory on the specified nodes.">HWLOC_MEMBIND_BIND</a> (AIX, HP-UX, Solaris, Windows). This policy is never returned by get membind functions. The nodeset argument is ignored. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggac9764f79505775d06407b40f5e4661e8a979c7aa78dd32780858f30f47a72cca0"></a>HWLOC_MEMBIND_FIRSTTOUCH&#160;</td><td class="fielddoc"><p>Allocate each memory page individually on the local NUMA node of the thread that touches it. </p>
+<p>The given nodeset should usually be <a class="el" href="a00214.html#ga3fd37303e99ace8b0d0ea03f95f8c514" title="Get topology node set.">hwloc_topology_get_topology_nodeset()</a> so that the touching thread may run and allocate on any node in the system.</p>
+<p>On AIX, if the nodeset is smaller, pages are allocated locally (if the local node is in the nodeset) or from a random non-local node (otherwise). </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c"></a>HWLOC_MEMBIND_BIND&#160;</td><td class="fielddoc"><p>Allocate memory on the specified nodes. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggac9764f79505775d06407b40f5e4661e8ae370075e5af016d42310f87ea5af236b"></a>HWLOC_MEMBIND_INTERLEAVE&#160;</td><td class="fielddoc"><p>Allocate memory on the given nodes in an interleaved / round-robin manner. The precise layout of the memory across multiple NUMA nodes is OS/system specific. Interleaving can be useful when threads distributed across the specified NUMA nodes will all be accessing the whole memory range concurrently, since the interleave will then balance the memory references. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggac9764f79505775d06407b40f5e4661e8aecdd4164d647708fbb51a00d98dbb138"></a>HWLOC_MEMBIND_NEXTTOUCH&#160;</td><td class="fielddoc"><p>For each page bound with this policy, by next time it is touched (and next time only), it is moved from its current location to the local NUMA node of the thread where the memory reference occurred (if it needs to be moved at all). </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggac9764f79505775d06407b40f5e4661e8a3185bd869b67817fb2bd5164bf360402"></a>HWLOC_MEMBIND_MIXED&#160;</td><td class="fielddoc"><p>Returned by get_membind() functions when multiple threads or parts of a memory area have differing memory binding policies. Also returned when binding is unknown because binding hooks are empty when the topology is loaded from XML without HWLOC_THISSYSTEM=1, etc. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga972b335a86a7d5e7b34bce2b243c41bc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga972b335a86a7d5e7b34bce2b243c41bc">&#9670;&nbsp;</a></span>hwloc_alloc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* hwloc_alloc </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>len</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Allocate some memory. </p>
+<p>This is equivalent to malloc(), except that it tries to allocate page-aligned memory from the OS.</p>
+<dl class="section note"><dt>Note</dt><dd>The allocated memory should be freed with <a class="el" href="a00203.html#ga32dbd4f54e9e4a7179f2dde37ffe6ad7" title="Free memory that was previously allocated by hwloc_alloc() or hwloc_alloc_membind().">hwloc_free()</a>. </dd></dl>
+
+</div>
+</div>
+<a id="ga04736461780fadcf193af218c0122273"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga04736461780fadcf193af218c0122273">&#9670;&nbsp;</a></span>hwloc_alloc_membind()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* hwloc_alloc_membind </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>len</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00203.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a>&#160;</td>
+          <td class="paramname"><em>policy</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Allocate some memory on NUMA memory nodes specified by <code>set</code>. </p>
+<dl class="section return"><dt>Returns</dt><dd>NULL with errno set to ENOSYS if the action is not supported and <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> is given </dd>
+<dd>
+NULL with errno set to EXDEV if the binding cannot be enforced and <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> is given </dd>
+<dd>
+NULL with errno set to ENOMEM if the memory allocation failed even before trying to bind.</dd></dl>
+<p>If <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> is specified, set is considered a nodeset. Otherwise it's a cpuset.</p>
+<dl class="section note"><dt>Note</dt><dd>The allocated memory should be freed with <a class="el" href="a00203.html#ga32dbd4f54e9e4a7179f2dde37ffe6ad7" title="Free memory that was previously allocated by hwloc_alloc() or hwloc_alloc_membind().">hwloc_free()</a>. </dd></dl>
+
+</div>
+</div>
+<a id="gab1b77b8408bacaf03c7e8878f7577922"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gab1b77b8408bacaf03c7e8878f7577922">&#9670;&nbsp;</a></span>hwloc_alloc_membind_policy()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static void* hwloc_alloc_membind_policy </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>len</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00203.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a>&#160;</td>
+          <td class="paramname"><em>policy</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Allocate some memory on NUMA memory nodes specified by <code>set</code>. </p>
+<p>First, try to allocate properly with <a class="el" href="a00203.html#ga04736461780fadcf193af218c0122273" title="Allocate some memory on NUMA memory nodes specified by set.">hwloc_alloc_membind()</a>. On failure, the current process or thread memory binding policy is changed with <a class="el" href="a00203.html#ga020951efa0ce3862bd4faec295501a7f" title="Set the default memory binding policy of the current process or thread to prefer the NUMA node(s) spe...">hwloc_set_membind()</a> before allocating memory. Thus this function works in more cases, at the expense of changing the current state (possibly affecting future allocations that would not specify any policy).</p>
+<p>If <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> is specified, set is considered a nodeset. Otherwise it's a cpuset. </p>
+
+</div>
+</div>
+<a id="ga32dbd4f54e9e4a7179f2dde37ffe6ad7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga32dbd4f54e9e4a7179f2dde37ffe6ad7">&#9670;&nbsp;</a></span>hwloc_free()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_free </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>addr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>len</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Free memory that was previously allocated by <a class="el" href="a00203.html#ga972b335a86a7d5e7b34bce2b243c41bc" title="Allocate some memory.">hwloc_alloc()</a> or <a class="el" href="a00203.html#ga04736461780fadcf193af218c0122273" title="Allocate some memory on NUMA memory nodes specified by set.">hwloc_alloc_membind()</a>. </p>
+
+</div>
+</div>
+<a id="gaa87e0a6946ff145914fdf0b1c60567f8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaa87e0a6946ff145914fdf0b1c60567f8">&#9670;&nbsp;</a></span>hwloc_get_area_membind()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_get_area_membind </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const void *&#160;</td>
+          <td class="paramname"><em>addr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>len</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00203.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> *&#160;</td>
+          <td class="paramname"><em>policy</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Query the CPUs near the physical NUMA node(s) and binding policy of the memory identified by (<code>addr</code>, <code>len</code> ). </p>
+<p>The bitmap <code>set</code> (previously allocated by the caller) is filled with the memory area binding.</p>
+<p>This function has two output parameters: <code>set</code> and <code>policy</code>. The values returned in these parameters depend on both the <code>flags</code> passed in and the memory binding policies and nodesets of the pages in the address range.</p>
+<p>If <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> is specified, the target pages are first checked to see if they all have the same memory binding policy and nodeset. If they do not, -1 is returned and errno is set to EXDEV. If they are identical across all pages, the set and policy are returned in <code>set</code> and <code>policy</code>, respectively.</p>
+<p>If <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> is not specified, the union of all NUMA node(s) containing pages in the address range is calculated. If all pages in the target have the same policy, it is returned in <code>policy</code>. Otherwise, <code>policy</code> is set to <a class="el" href="a00203.html#ggac9764f79505775d06407b40f5e4661e8a3185bd869b67817fb2bd5164bf360402" title="Returned by get_membind() functions when multiple threads or parts of a memory area have differing me...">HWLOC_MEMBIND_MIXED</a>.</p>
+<p>If <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> is specified, set is considered a nodeset. Otherwise it's a cpuset.</p>
+<p>If any other flags are specified, -1 is returned and errno is set to EINVAL.</p>
+<p>If <code>len</code> is 0, -1 is returned and errno is set to EINVAL. </p>
+
+</div>
+</div>
+<a id="ga537c7508a4e2d1db05673ec5be6e805c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga537c7508a4e2d1db05673ec5be6e805c">&#9670;&nbsp;</a></span>hwloc_get_area_memlocation()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_get_area_memlocation </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const void *&#160;</td>
+          <td class="paramname"><em>addr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>len</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Get the NUMA nodes where memory identified by (<code>addr</code>, <code>len</code> ) is physically allocated. </p>
+<p>The bitmap <code>set</code> (previously allocated by the caller) is filled according to the NUMA nodes where the memory area pages are physically allocated. If no page is actually allocated yet, <code>set</code> may be empty.</p>
+<p>If pages spread to multiple nodes, it is not specified whether they spread equitably, or whether most of them are on a single node, etc.</p>
+<p>The operating system may move memory pages from one processor to another at any time according to their binding, so this function may return something that is already outdated.</p>
+<p>If <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> is specified in <code>flags</code>, set is considered a nodeset. Otherwise it's a cpuset.</p>
+<p>If <code>len</code> is 0, <code>set</code> is emptied. </p>
+
+</div>
+</div>
+<a id="gae21f0a1a884929c784bebf070252aa56"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gae21f0a1a884929c784bebf070252aa56">&#9670;&nbsp;</a></span>hwloc_get_membind()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_get_membind </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00203.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> *&#160;</td>
+          <td class="paramname"><em>policy</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Query the default memory binding policy and physical locality of the current process or thread. </p>
+<p>The bitmap <code>set</code> (previously allocated by the caller) is filled with the process or thread memory binding.</p>
+<p>This function has two output parameters: <code>set</code> and <code>policy</code>. The values returned in these parameters depend on both the <code>flags</code> passed in and the current memory binding policies and nodesets in the queried target.</p>
+<p>Passing the <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4" title="Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually e...">HWLOC_MEMBIND_PROCESS</a> flag specifies that the query target is the current policies and nodesets for all the threads in the current process. Passing <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298" title="Set policy for a specific thread of the current process. This flag is mutually exclusive with HWLOC_M...">HWLOC_MEMBIND_THREAD</a> specifies that the query target is the current policy and nodeset for only the thread invoking this function.</p>
+<p>If neither of these flags are passed (which is the most portable method), the process is assumed to be single threaded. This allows hwloc to use either process-based OS functions or thread-based OS functions, depending on which are available.</p>
+<p><a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> is only meaningful when <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4" title="Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually e...">HWLOC_MEMBIND_PROCESS</a> is also specified. In this case, hwloc will check the default memory policies and nodesets for all threads in the process. If they are not identical, -1 is returned and errno is set to EXDEV. If they are identical, the values are returned in <code>set</code> and <code>policy</code>.</p>
+<p>Otherwise, if <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4" title="Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually e...">HWLOC_MEMBIND_PROCESS</a> is specified (and <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> is <em>not</em> specified), the default set from each thread is logically OR'ed together. If all threads' default policies are the same, <code>policy</code> is set to that policy. If they are different, <code>policy</code> is set to <a class="el" href="a00203.html#ggac9764f79505775d06407b40f5e4661e8a3185bd869b67817fb2bd5164bf360402" title="Returned by get_membind() functions when multiple threads or parts of a memory area have differing me...">HWLOC_MEMBIND_MIXED</a>.</p>
+<p>In the <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298" title="Set policy for a specific thread of the current process. This flag is mutually exclusive with HWLOC_M...">HWLOC_MEMBIND_THREAD</a> case (or when neither <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4" title="Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually e...">HWLOC_MEMBIND_PROCESS</a> or <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298" title="Set policy for a specific thread of the current process. This flag is mutually exclusive with HWLOC_M...">HWLOC_MEMBIND_THREAD</a> is specified), there is only one set and policy; they are returned in <code>set</code> and <code>policy</code>, respectively.</p>
+<p>If <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> is specified, set is considered a nodeset. Otherwise it's a cpuset.</p>
+<p>If any other flags are specified, -1 is returned and errno is set to EINVAL. </p>
+
+</div>
+</div>
+<a id="ga1730ceb18ec6ee3b7bd3d0db81f07dc8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga1730ceb18ec6ee3b7bd3d0db81f07dc8">&#9670;&nbsp;</a></span>hwloc_get_proc_membind()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_get_proc_membind </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">hwloc_pid_t&#160;</td>
+          <td class="paramname"><em>pid</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00203.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> *&#160;</td>
+          <td class="paramname"><em>policy</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Query the default memory binding policy and physical locality of the specified process. </p>
+<p>The bitmap <code>set</code> (previously allocated by the caller) is filled with the process memory binding.</p>
+<p>This function has two output parameters: <code>set</code> and <code>policy</code>. The values returned in these parameters depend on both the <code>flags</code> passed in and the current memory binding policies and nodesets in the queried target.</p>
+<p>Passing the <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4" title="Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually e...">HWLOC_MEMBIND_PROCESS</a> flag specifies that the query target is the current policies and nodesets for all the threads in the specified process. If <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4" title="Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually e...">HWLOC_MEMBIND_PROCESS</a> is not specified (which is the most portable method), the process is assumed to be single threaded. This allows hwloc to use either process-based OS functions or thread-based OS functions, depending on which are available.</p>
+<p>Note that it does not make sense to pass <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298" title="Set policy for a specific thread of the current process. This flag is mutually exclusive with HWLOC_M...">HWLOC_MEMBIND_THREAD</a> to this function.</p>
+<p>If <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> is specified, hwloc will check the default memory policies and nodesets for all threads in the specified process. If they are not identical, -1 is returned and errno is set to EXDEV. If they are identical, the values are returned in <code>set</code> and <code>policy</code>.</p>
+<p>Otherwise, <code>set</code> is set to the logical OR of all threads' default set. If all threads' default policies are the same, <code>policy</code> is set to that policy. If they are different, <code>policy</code> is set to <a class="el" href="a00203.html#ggac9764f79505775d06407b40f5e4661e8a3185bd869b67817fb2bd5164bf360402" title="Returned by get_membind() functions when multiple threads or parts of a memory area have differing me...">HWLOC_MEMBIND_MIXED</a>.</p>
+<p>If <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> is specified, set is considered a nodeset. Otherwise it's a cpuset.</p>
+<p>If any other flags are specified, -1 is returned and errno is set to EINVAL.</p>
+<dl class="section note"><dt>Note</dt><dd><code>hwloc_pid_t</code> is <code>pid_t</code> on Unix platforms, and <code>HANDLE</code> on native Windows platforms. </dd></dl>
+
+</div>
+</div>
+<a id="gaf881faefe20701229f07dd7dbd0125ed"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaf881faefe20701229f07dd7dbd0125ed">&#9670;&nbsp;</a></span>hwloc_set_area_membind()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_set_area_membind </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const void *&#160;</td>
+          <td class="paramname"><em>addr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>len</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00203.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a>&#160;</td>
+          <td class="paramname"><em>policy</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Bind the already-allocated memory identified by (addr, len) to the NUMA node(s) specified by <code>set</code>. </p>
+<p>If <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> is specified, set is considered a nodeset. Otherwise it's a cpuset.</p>
+<dl class="section return"><dt>Returns</dt><dd>0 if <code>len</code> is 0. </dd>
+<dd>
+-1 with errno set to ENOSYS if the action is not supported </dd>
+<dd>
+-1 with errno set to EXDEV if the binding cannot be enforced </dd></dl>
+
+</div>
+</div>
+<a id="ga020951efa0ce3862bd4faec295501a7f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga020951efa0ce3862bd4faec295501a7f">&#9670;&nbsp;</a></span>hwloc_set_membind()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_set_membind </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00203.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a>&#160;</td>
+          <td class="paramname"><em>policy</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Set the default memory binding policy of the current process or thread to prefer the NUMA node(s) specified by <code>set</code>. </p>
+<p>If neither <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4" title="Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually e...">HWLOC_MEMBIND_PROCESS</a> nor <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298" title="Set policy for a specific thread of the current process. This flag is mutually exclusive with HWLOC_M...">HWLOC_MEMBIND_THREAD</a> is specified, the current process is assumed to be single-threaded. This is the most portable form as it permits hwloc to use either process-based OS functions or thread-based OS functions, depending on which are available.</p>
+<p>If <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> is specified, set is considered a nodeset. Otherwise it's a cpuset.</p>
+<dl class="section return"><dt>Returns</dt><dd>-1 with errno set to ENOSYS if the action is not supported </dd>
+<dd>
+-1 with errno set to EXDEV if the binding cannot be enforced </dd></dl>
+
+</div>
+</div>
+<a id="gabc91ff16f7e41047924e3a4ae6d9da7e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gabc91ff16f7e41047924e3a4ae6d9da7e">&#9670;&nbsp;</a></span>hwloc_set_proc_membind()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_set_proc_membind </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">hwloc_pid_t&#160;</td>
+          <td class="paramname"><em>pid</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00203.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a>&#160;</td>
+          <td class="paramname"><em>policy</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Set the default memory binding policy of the specified process to prefer the NUMA node(s) specified by <code>set</code>. </p>
+<p>If <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> is specified, set is considered a nodeset. Otherwise it's a cpuset.</p>
+<dl class="section return"><dt>Returns</dt><dd>-1 with errno set to ENOSYS if the action is not supported </dd>
+<dd>
+-1 with errno set to EXDEV if the binding cannot be enforced</dd></dl>
+<dl class="section note"><dt>Note</dt><dd><code>hwloc_pid_t</code> is <code>pid_t</code> on Unix platforms, and <code>HANDLE</code> on native Windows platforms. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00204.html b/doc/doxygen-doc/html/a00204.html
new file mode 100644
index 00000000..402d9474
--- /dev/null
+++ b/doc/doxygen-doc/html/a00204.html
@@ -0,0 +1,294 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Changing the Source of Topology Discovery</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Changing the Source of Topology Discovery</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:ga949f656c779208a36790feba24048b7e"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#ga949f656c779208a36790feba24048b7e">hwloc_topology_components_flag_e</a> { <a class="el" href="a00204.html#gga949f656c779208a36790feba24048b7ea33eec25d29253a2aba21dd3c731b416e">HWLOC_TOPOLOGY_COMPONENTS_FLAG_BLACKLIST</a>
+ }</td></tr>
+<tr class="separator:ga949f656c779208a36790feba24048b7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga341fc17b5867a4715570baab131f68cd"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#ga341fc17b5867a4715570baab131f68cd">hwloc_topology_set_pid</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict topology, hwloc_pid_t pid)</td></tr>
+<tr class="separator:ga341fc17b5867a4715570baab131f68cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4fab186bb6181a00bcf585825fddd38d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#ga4fab186bb6181a00bcf585825fddd38d">hwloc_topology_set_synthetic</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict topology, const char *restrict description)</td></tr>
+<tr class="separator:ga4fab186bb6181a00bcf585825fddd38d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga879439b7ee99407ee911b3ac64e9a25e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#ga879439b7ee99407ee911b3ac64e9a25e">hwloc_topology_set_xml</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict topology, const char *restrict xmlpath)</td></tr>
+<tr class="separator:ga879439b7ee99407ee911b3ac64e9a25e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2745616b65595e1c1e579ecc7e461fa8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#ga2745616b65595e1c1e579ecc7e461fa8">hwloc_topology_set_xmlbuffer</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict topology, const char *restrict buffer, int size)</td></tr>
+<tr class="separator:ga2745616b65595e1c1e579ecc7e461fa8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9ad41adf418cee1c0ee32ba9bd4a3d36"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#ga9ad41adf418cee1c0ee32ba9bd4a3d36">hwloc_topology_set_components</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict topology, unsigned long flags, const char *restrict name)</td></tr>
+<tr class="separator:ga9ad41adf418cee1c0ee32ba9bd4a3d36"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>If none of the functions below is called, the default is to detect all the objects of the machine that the caller is allowed to access.</p>
+<p>This default behavior may also be modified through environment variables if the application did not modify it already. Setting HWLOC_XMLFILE in the environment enforces the discovery from a XML file as if <a class="el" href="a00204.html#ga879439b7ee99407ee911b3ac64e9a25e" title="Enable XML-file based topology.">hwloc_topology_set_xml()</a> had been called. Setting HWLOC_SYNTHETIC enforces a synthetic topology as if <a class="el" href="a00204.html#ga4fab186bb6181a00bcf585825fddd38d" title="Enable synthetic topology.">hwloc_topology_set_synthetic()</a> had been called.</p>
+<p>Finally, HWLOC_THISSYSTEM enforces the return value of <a class="el" href="a00205.html#ga68ffdcfd9175cdf40709801092f18017" title="Does the topology context come from this system?">hwloc_topology_is_thissystem()</a>. </p>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a id="ga949f656c779208a36790feba24048b7e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga949f656c779208a36790feba24048b7e">&#9670;&nbsp;</a></span>hwloc_topology_components_flag_e</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00204.html#ga949f656c779208a36790feba24048b7e">hwloc_topology_components_flag_e</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Flags to be passed to <a class="el" href="a00204.html#ga9ad41adf418cee1c0ee32ba9bd4a3d36" title="Prevent a discovery component from being used for a topology.">hwloc_topology_set_components()</a> </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga949f656c779208a36790feba24048b7ea33eec25d29253a2aba21dd3c731b416e"></a>HWLOC_TOPOLOGY_COMPONENTS_FLAG_BLACKLIST&#160;</td><td class="fielddoc"><p>Blacklist the target component from being used. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga9ad41adf418cee1c0ee32ba9bd4a3d36"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga9ad41adf418cee1c0ee32ba9bd4a3d36">&#9670;&nbsp;</a></span>hwloc_topology_set_components()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_set_components </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *restrict&#160;</td>
+          <td class="paramname"><em>name</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Prevent a discovery component from being used for a topology. </p>
+<p><code>name</code> is the name of the discovery component that should not be used when loading topology <code>topology</code>. The name is a string such as "cuda".</p>
+<p>For components with multiple phases, it may also be suffixed with the name of a phase, for instance "linux:io".</p>
+<p><code>flags</code> should be <a class="el" href="a00204.html#gga949f656c779208a36790feba24048b7ea33eec25d29253a2aba21dd3c731b416e" title="Blacklist the target component from being used.">HWLOC_TOPOLOGY_COMPONENTS_FLAG_BLACKLIST</a>.</p>
+<p>This may be used to avoid expensive parts of the discovery process. For instance, CUDA-specific discovery may be expensive and unneeded while generic I/O discovery could still be useful. </p>
+
+</div>
+</div>
+<a id="ga341fc17b5867a4715570baab131f68cd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga341fc17b5867a4715570baab131f68cd">&#9670;&nbsp;</a></span>hwloc_topology_set_pid()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_set_pid </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">hwloc_pid_t&#160;</td>
+          <td class="paramname"><em>pid</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Change which process the topology is viewed from. </p>
+<p>On some systems, processes may have different views of the machine, for instance the set of allowed CPUs. By default, hwloc exposes the view from the current process. Calling <a class="el" href="a00204.html#ga341fc17b5867a4715570baab131f68cd" title="Change which process the topology is viewed from.">hwloc_topology_set_pid()</a> permits to make it expose the topology of the machine from the point of view of another process.</p>
+<dl class="section note"><dt>Note</dt><dd><code>hwloc_pid_t</code> is <code>pid_t</code> on Unix platforms, and <code>HANDLE</code> on native Windows platforms.</dd>
+<dd>
+-1 is returned and errno is set to ENOSYS on platforms that do not support this feature. </dd></dl>
+
+</div>
+</div>
+<a id="ga4fab186bb6181a00bcf585825fddd38d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga4fab186bb6181a00bcf585825fddd38d">&#9670;&nbsp;</a></span>hwloc_topology_set_synthetic()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_set_synthetic </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *restrict&#160;</td>
+          <td class="paramname"><em>description</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Enable synthetic topology. </p>
+<p>Gather topology information from the given <code>description</code>, a space-separated string of &lt;type:number&gt; describing the object type and arity at each level. All types may be omitted (space-separated string of numbers) so that hwloc chooses all types according to usual topologies. See also the <a class="el" href="a00404.html">Synthetic topologies</a>.</p>
+<p>Setting the environment variable HWLOC_SYNTHETIC may also result in this behavior.</p>
+<p>If <code>description</code> was properly parsed and describes a valid topology configuration, this function returns 0. Otherwise -1 is returned and errno is set to EINVAL.</p>
+<p>Note that this function does not actually load topology information; it just tells hwloc where to load it from. You'll still need to invoke <a class="el" href="a00198.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a> to actually load the topology information.</p>
+<dl class="section note"><dt>Note</dt><dd>For convenience, this backend provides empty binding hooks which just return success.</dd>
+<dd>
+On success, the synthetic component replaces the previously enabled component (if any), but the topology is not actually modified until <a class="el" href="a00198.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a>. </dd></dl>
+
+</div>
+</div>
+<a id="ga879439b7ee99407ee911b3ac64e9a25e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga879439b7ee99407ee911b3ac64e9a25e">&#9670;&nbsp;</a></span>hwloc_topology_set_xml()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_set_xml </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *restrict&#160;</td>
+          <td class="paramname"><em>xmlpath</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Enable XML-file based topology. </p>
+<p>Gather topology information from the XML file given at <code>xmlpath</code>. Setting the environment variable HWLOC_XMLFILE may also result in this behavior. This file may have been generated earlier with <a class="el" href="a00218.html#ga333f79975b4eeb28a3d8fad3373583ce" title="Export the topology into an XML file.">hwloc_topology_export_xml()</a> in <a class="el" href="a00134_source.html">hwloc/export.h</a>, or lstopo file.xml.</p>
+<p>Note that this function does not actually load topology information; it just tells hwloc where to load it from. You'll still need to invoke <a class="el" href="a00198.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a> to actually load the topology information.</p>
+<dl class="section return"><dt>Returns</dt><dd>-1 with errno set to EINVAL on failure to read the XML file.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>See also <a class="el" href="a00218.html#ga5ac6917ea7289955fb1ffda4353af9b0" title="Set the application-specific callback for importing userdata.">hwloc_topology_set_userdata_import_callback()</a> for importing application-specific object userdata.</dd>
+<dd>
+For convenience, this backend provides empty binding hooks which just return success. To have hwloc still actually call OS-specific hooks, the <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b" title="Assume that the selected backend provides the topology for the system on which we are running.">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a> has to be set to assert that the loaded file is really the underlying system.</dd>
+<dd>
+On success, the XML component replaces the previously enabled component (if any), but the topology is not actually modified until <a class="el" href="a00198.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a>. </dd></dl>
+
+</div>
+</div>
+<a id="ga2745616b65595e1c1e579ecc7e461fa8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga2745616b65595e1c1e579ecc7e461fa8">&#9670;&nbsp;</a></span>hwloc_topology_set_xmlbuffer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_set_xmlbuffer </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *restrict&#160;</td>
+          <td class="paramname"><em>buffer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>size</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Enable XML based topology using a memory buffer (instead of a file, as with <a class="el" href="a00204.html#ga879439b7ee99407ee911b3ac64e9a25e" title="Enable XML-file based topology.">hwloc_topology_set_xml()</a>). </p>
+<p>Gather topology information from the XML memory buffer given at <code>buffer</code> and of length <code>size</code>. This buffer may have been filled earlier with <a class="el" href="a00218.html#gad33b7f7c11db10459505a3b1634fd3f1" title="Export the topology into a newly-allocated XML memory buffer.">hwloc_topology_export_xmlbuffer()</a> in <a class="el" href="a00134_source.html">hwloc/export.h</a>.</p>
+<p>Note that this function does not actually load topology information; it just tells hwloc where to load it from. You'll still need to invoke <a class="el" href="a00198.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a> to actually load the topology information.</p>
+<dl class="section return"><dt>Returns</dt><dd>-1 with errno set to EINVAL on failure to read the XML buffer.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>See also <a class="el" href="a00218.html#ga5ac6917ea7289955fb1ffda4353af9b0" title="Set the application-specific callback for importing userdata.">hwloc_topology_set_userdata_import_callback()</a> for importing application-specific object userdata.</dd>
+<dd>
+For convenience, this backend provides empty binding hooks which just return success. To have hwloc still actually call OS-specific hooks, the <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b" title="Assume that the selected backend provides the topology for the system on which we are running.">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a> has to be set to assert that the loaded file is really the underlying system.</dd>
+<dd>
+On success, the XML component replaces the previously enabled component (if any), but the topology is not actually modified until <a class="el" href="a00198.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a>. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00205.html b/doc/doxygen-doc/html/a00205.html
new file mode 100644
index 00000000..20f3cb98
--- /dev/null
+++ b/doc/doxygen-doc/html/a00205.html
@@ -0,0 +1,584 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Topology Detection Configuration and Query</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Topology Detection Configuration and Query</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00305.html">hwloc_topology_discovery_support</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00309.html">hwloc_topology_cpubind_support</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00313.html">hwloc_topology_membind_support</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00317.html">hwloc_topology_misc_support</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00321.html">hwloc_topology_support</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:gada025d3ec20b4b420f8038d23d6e7bde"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#gada025d3ec20b4b420f8038d23d6e7bde">hwloc_topology_flags_e</a> { <br />
+&#160;&#160;<a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a>
+, <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a>
+, <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea1b66bbd66e900e5c837f71defb32ad89">HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES</a>
+, <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdead93e82b8668ee90e4f9354e201a2ed9c">HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT</a> = (1UL&lt;&lt;3)
+, <br />
+&#160;&#160;<a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdeaa595aed197779012acf43e8ca4a2658d">HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING</a> = (1UL&lt;&lt;4)
+, <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea368d7741135fe309f3782c59644d3caa">HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_MEMBINDING</a> = (1UL&lt;&lt;5)
+, <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdeae7a792e3db4360360a10f9160b10e631">HWLOC_TOPOLOGY_FLAG_DONT_CHANGE_BINDING</a> = (1UL&lt;&lt;6)
+, <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea5796b4909eba80f9727b66d07d3a7a05">HWLOC_TOPOLOGY_FLAG_NO_DISTANCES</a> = (1UL&lt;&lt;7)
+, <br />
+&#160;&#160;<a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdead5636766a6603f24486f79c48899c1c3">HWLOC_TOPOLOGY_FLAG_NO_MEMATTRS</a> = (1UL&lt;&lt;8)
+, <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea3497cd4c2f8b1d842dd49b3aaae56a24">HWLOC_TOPOLOGY_FLAG_NO_CPUKINDS</a> = (1UL&lt;&lt;9)
+<br />
+ }</td></tr>
+<tr class="separator:gada025d3ec20b4b420f8038d23d6e7bde"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9a5a1f0140cd1952544477833733195b"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> { <a class="el" href="a00205.html#gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e">HWLOC_TYPE_FILTER_KEEP_ALL</a>
+, <a class="el" href="a00205.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a">HWLOC_TYPE_FILTER_KEEP_NONE</a>
+, <a class="el" href="a00205.html#gga9a5a1f0140cd1952544477833733195ba7664716643bf1db83e631eed34f659e4">HWLOC_TYPE_FILTER_KEEP_STRUCTURE</a>
+, <a class="el" href="a00205.html#gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5">HWLOC_TYPE_FILTER_KEEP_IMPORTANT</a>
+ }</td></tr>
+<tr class="separator:ga9a5a1f0140cd1952544477833733195b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gaaeed4df656979e5f16befea9d29b814b"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#gaaeed4df656979e5f16befea9d29b814b">hwloc_topology_set_flags</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned long flags)</td></tr>
+<tr class="separator:gaaeed4df656979e5f16befea9d29b814b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga09318f81c1d4713be907d64748a6f93c"><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#ga09318f81c1d4713be907d64748a6f93c">hwloc_topology_get_flags</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
+<tr class="separator:ga09318f81c1d4713be907d64748a6f93c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga68ffdcfd9175cdf40709801092f18017"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict topology)</td></tr>
+<tr class="separator:ga68ffdcfd9175cdf40709801092f18017"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab8c76173c4a8ce1a9a9366012b1388e6"><td class="memItemLeft" align="right" valign="top">const struct <a class="el" href="a00321.html">hwloc_topology_support</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#gab8c76173c4a8ce1a9a9366012b1388e6">hwloc_topology_get_support</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict topology)</td></tr>
+<tr class="separator:gab8c76173c4a8ce1a9a9366012b1388e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad894e70f15f8d4aada7be8d1aba38b7e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#gad894e70f15f8d4aada7be8d1aba38b7e">hwloc_topology_set_type_filter</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, enum <a class="el" href="a00205.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter)</td></tr>
+<tr class="separator:gad894e70f15f8d4aada7be8d1aba38b7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga137ad1178f7a79f2383974d983083401"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#ga137ad1178f7a79f2383974d983083401">hwloc_topology_get_type_filter</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, enum <a class="el" href="a00205.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> *filter)</td></tr>
+<tr class="separator:ga137ad1178f7a79f2383974d983083401"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9eb8dc3b106f84921bf5789101e97e24"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#ga9eb8dc3b106f84921bf5789101e97e24">hwloc_topology_set_all_types_filter</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, enum <a class="el" href="a00205.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter)</td></tr>
+<tr class="separator:ga9eb8dc3b106f84921bf5789101e97e24"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga30bd6d330fe3c8f0cbaad724d114ee20"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#ga30bd6d330fe3c8f0cbaad724d114ee20">hwloc_topology_set_cache_types_filter</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, enum <a class="el" href="a00205.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter)</td></tr>
+<tr class="separator:ga30bd6d330fe3c8f0cbaad724d114ee20"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga37c7b2e599ed3cd76ad9164630024f30"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#ga37c7b2e599ed3cd76ad9164630024f30">hwloc_topology_set_icache_types_filter</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, enum <a class="el" href="a00205.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter)</td></tr>
+<tr class="separator:ga37c7b2e599ed3cd76ad9164630024f30"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0ab38705357bc1203abe829da8a12ad3"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#ga0ab38705357bc1203abe829da8a12ad3">hwloc_topology_set_io_types_filter</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, enum <a class="el" href="a00205.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter)</td></tr>
+<tr class="separator:ga0ab38705357bc1203abe829da8a12ad3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2cc7b7b155cba58dda203e54f1637b9c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#ga2cc7b7b155cba58dda203e54f1637b9c">hwloc_topology_set_userdata</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const void *userdata)</td></tr>
+<tr class="separator:ga2cc7b7b155cba58dda203e54f1637b9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga91f992f8d6c4905b2d3c4f43e509c2a3"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#ga91f992f8d6c4905b2d3c4f43e509c2a3">hwloc_topology_get_userdata</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
+<tr class="separator:ga91f992f8d6c4905b2d3c4f43e509c2a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Several functions can optionally be called between <a class="el" href="a00198.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa" title="Allocate a topology context.">hwloc_topology_init()</a> and <a class="el" href="a00198.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a> to configure how the detection should be performed, e.g. to ignore some objects types, define a synthetic topology, etc. </p>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a id="gada025d3ec20b4b420f8038d23d6e7bde"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gada025d3ec20b4b420f8038d23d6e7bde">&#9670;&nbsp;</a></span>hwloc_topology_flags_e</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00205.html#gada025d3ec20b4b420f8038d23d6e7bde">hwloc_topology_flags_e</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Flags to be set onto a topology context before load. </p>
+<p>Flags should be given to <a class="el" href="a00205.html#gaaeed4df656979e5f16befea9d29b814b" title="Set OR&#39;ed flags to non-yet-loaded topology.">hwloc_topology_set_flags()</a>. They may also be returned by <a class="el" href="a00205.html#ga09318f81c1d4713be907d64748a6f93c" title="Get OR&#39;ed flags of a topology.">hwloc_topology_get_flags()</a>. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258"></a>HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED&#160;</td><td class="fielddoc"><p>Detect the whole system, ignore reservations, include disallowed objects. </p>
+<p>Gather all online resources, even if some were disabled by the administrator. For instance, ignore Linux Cgroup/Cpusets and gather all processors and memory nodes. However offline PUs and NUMA nodes are still ignored.</p>
+<p>When this flag is not set, PUs and NUMA nodes that are disallowed are not added to the topology. Parent objects (package, core, cache, etc.) are added only if some of their children are allowed. All existing PUs and NUMA nodes in the topology are allowed. <a class="el" href="a00214.html#ga517d5d68ec9f24583d8933aab713be8e" title="Get allowed CPU set.">hwloc_topology_get_allowed_cpuset()</a> and <a class="el" href="a00214.html#ga21a4d7237a11e76b912ed4524ab78cbd" title="Get allowed node set.">hwloc_topology_get_allowed_nodeset()</a> are equal to the root object cpuset and nodeset.</p>
+<p>When this flag is set, the actual sets of allowed PUs and NUMA nodes are given by <a class="el" href="a00214.html#ga517d5d68ec9f24583d8933aab713be8e" title="Get allowed CPU set.">hwloc_topology_get_allowed_cpuset()</a> and <a class="el" href="a00214.html#ga21a4d7237a11e76b912ed4524ab78cbd" title="Get allowed node set.">hwloc_topology_get_allowed_nodeset()</a>. They may be smaller than the root object cpuset and nodeset.</p>
+<p>If the current topology is exported to XML and reimported later, this flag should be set again in the reimported topology so that disallowed resources are reimported as well. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b"></a>HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM&#160;</td><td class="fielddoc"><p>Assume that the selected backend provides the topology for the system on which we are running. </p>
+<p>This forces <a class="el" href="a00205.html#ga68ffdcfd9175cdf40709801092f18017" title="Does the topology context come from this system?">hwloc_topology_is_thissystem()</a> to return 1, i.e. makes hwloc assume that the selected backend provides the topology for the system on which we are running, even if it is not the OS-specific backend but the XML backend for instance. This means making the binding functions actually call the OS-specific system calls and really do binding, while the XML backend would otherwise provide empty hooks just returning success.</p>
+<p>Setting the environment variable HWLOC_THISSYSTEM may also result in the same behavior.</p>
+<p>This can be used for efficiency reasons to first detect the topology once, save it to an XML file, and quickly reload it later through the XML backend, but still having binding functions actually do bind. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggada025d3ec20b4b420f8038d23d6e7bdea1b66bbd66e900e5c837f71defb32ad89"></a>HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES&#160;</td><td class="fielddoc"><p>Get the set of allowed resources from the local operating system even if the topology was loaded from XML or synthetic description. </p>
+<p>If the topology was loaded from XML or from a synthetic string, restrict it by applying the current process restrictions such as Linux Cgroup/Cpuset.</p>
+<p>This is useful when the topology is not loaded directly from the local machine (e.g. for performance reason) and it comes with all resources, while the running process is restricted to only parts of the machine.</p>
+<p>This flag is ignored unless <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b" title="Assume that the selected backend provides the topology for the system on which we are running.">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a> is also set since the loaded topology must match the underlying machine where restrictions will be gathered from.</p>
+<p>Setting the environment variable HWLOC_THISSYSTEM_ALLOWED_RESOURCES would result in the same behavior. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggada025d3ec20b4b420f8038d23d6e7bdead93e82b8668ee90e4f9354e201a2ed9c"></a>HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT&#160;</td><td class="fielddoc"><p>Import support from the imported topology. </p>
+<p>When importing a XML topology from a remote machine, binding is disabled by default (see <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b" title="Assume that the selected backend provides the topology for the system on which we are running.">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a>). This disabling is also marked by putting zeroes in the corresponding supported feature bits reported by <a class="el" href="a00205.html#gab8c76173c4a8ce1a9a9366012b1388e6" title="Retrieve the topology support.">hwloc_topology_get_support()</a>.</p>
+<p>The flag <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdead93e82b8668ee90e4f9354e201a2ed9c" title="Import support from the imported topology.">HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT</a> actually imports support bits from the remote machine. It also sets the flag <code>imported_support</code> in the struct <a class="el" href="a00317.html" title="Flags describing miscellaneous features.">hwloc_topology_misc_support</a> array. If the imported XML did not contain any support information (exporter hwloc is too old), this flag is not set.</p>
+<p>Note that these supported features are only relevant for the hwloc installation that actually exported the XML topology (it may vary with the operating system, or with how hwloc was compiled).</p>
+<p>Note that setting this flag however does not enable binding for the locally imported hwloc topology, it only reports what the remote hwloc and machine support. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggada025d3ec20b4b420f8038d23d6e7bdeaa595aed197779012acf43e8ca4a2658d"></a>HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING&#160;</td><td class="fielddoc"><p>Do not consider resources outside of the process CPU binding. </p>
+<p>If the binding of the process is limited to a subset of cores, ignore the other cores during discovery.</p>
+<p>The resulting topology is identical to what a call to <a class="el" href="a00206.html#ga6db81ed13ac0a9d70cc80372ab537815" title="Restrict the topology to the given CPU set or nodeset.">hwloc_topology_restrict()</a> would generate, but this flag also prevents hwloc from ever touching other resources during the discovery.</p>
+<p>This flag especially tells the x86 backend to never temporarily rebind a thread on any excluded core. This is useful on Windows because such temporary rebinding can change the process binding. Another use-case is to avoid cores that would not be able to perform the hwloc discovery anytime soon because they are busy executing some high-priority real-time tasks.</p>
+<p>If process CPU binding is not supported, the thread CPU binding is considered instead if supported, or the flag is ignored.</p>
+<p>This flag requires <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b" title="Assume that the selected backend provides the topology for the system on which we are running.">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a> as well since binding support is required. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggada025d3ec20b4b420f8038d23d6e7bdea368d7741135fe309f3782c59644d3caa"></a>HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_MEMBINDING&#160;</td><td class="fielddoc"><p>Do not consider resources outside of the process memory binding. </p>
+<p>If the binding of the process is limited to a subset of NUMA nodes, ignore the other NUMA nodes during discovery.</p>
+<p>The resulting topology is identical to what a call to <a class="el" href="a00206.html#ga6db81ed13ac0a9d70cc80372ab537815" title="Restrict the topology to the given CPU set or nodeset.">hwloc_topology_restrict()</a> would generate, but this flag also prevents hwloc from ever touching other resources during the discovery.</p>
+<p>This flag is meant to be used together with <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdeaa595aed197779012acf43e8ca4a2658d" title="Do not consider resources outside of the process CPU binding.">HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING</a> when both cores and NUMA nodes should be ignored outside of the process binding.</p>
+<p>If process memory binding is not supported, the thread memory binding is considered instead if supported, or the flag is ignored.</p>
+<p>This flag requires <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b" title="Assume that the selected backend provides the topology for the system on which we are running.">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a> as well since binding support is required. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggada025d3ec20b4b420f8038d23d6e7bdeae7a792e3db4360360a10f9160b10e631"></a>HWLOC_TOPOLOGY_FLAG_DONT_CHANGE_BINDING&#160;</td><td class="fielddoc"><p>Do not ever modify the process or thread binding during discovery. </p>
+<p>This flag disables all hwloc discovery steps that require a change of the process or thread binding. This currently only affects the x86 backend which gets entirely disabled.</p>
+<p>This is useful when <a class="el" href="a00198.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a> is called while the application also creates additional threads or modifies the binding.</p>
+<p>This flag is also a strict way to make sure the process binding will not change to due thread binding changes on Windows (see <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdeaa595aed197779012acf43e8ca4a2658d" title="Do not consider resources outside of the process CPU binding.">HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING</a>). </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggada025d3ec20b4b420f8038d23d6e7bdea5796b4909eba80f9727b66d07d3a7a05"></a>HWLOC_TOPOLOGY_FLAG_NO_DISTANCES&#160;</td><td class="fielddoc"><p>Ignore distances. </p>
+<p>Ignore distance information from the operating systems (and from XML) and hence do not use distances for grouping. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggada025d3ec20b4b420f8038d23d6e7bdead5636766a6603f24486f79c48899c1c3"></a>HWLOC_TOPOLOGY_FLAG_NO_MEMATTRS&#160;</td><td class="fielddoc"><p>Ignore memory attributes. </p>
+<p>Ignore memory attribues from the operating systems (and from XML). </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggada025d3ec20b4b420f8038d23d6e7bdea3497cd4c2f8b1d842dd49b3aaae56a24"></a>HWLOC_TOPOLOGY_FLAG_NO_CPUKINDS&#160;</td><td class="fielddoc"><p>Ignore CPU Kinds. </p>
+<p>Ignore CPU kind information from the operating systems (and from XML). </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<a id="ga9a5a1f0140cd1952544477833733195b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga9a5a1f0140cd1952544477833733195b">&#9670;&nbsp;</a></span>hwloc_type_filter_e</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00205.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Type filtering flags. </p>
+<p>By default, most objects are kept (<a class="el" href="a00205.html#gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e" title="Keep all objects of this type.">HWLOC_TYPE_FILTER_KEEP_ALL</a>). Instruction caches, I/O and Misc objects are ignored by default (<a class="el" href="a00205.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a" title="Ignore all objects of this type.">HWLOC_TYPE_FILTER_KEEP_NONE</a>). Die and Group levels are ignored unless they bring structure (<a class="el" href="a00205.html#gga9a5a1f0140cd1952544477833733195ba7664716643bf1db83e631eed34f659e4" title="Only ignore objects if their entire level does not bring any structure.">HWLOC_TYPE_FILTER_KEEP_STRUCTURE</a>).</p>
+<p>Note that group objects are also ignored individually (without the entire level) when they do not bring structure. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e"></a>HWLOC_TYPE_FILTER_KEEP_ALL&#160;</td><td class="fielddoc"><p>Keep all objects of this type. </p>
+<p>Cannot be set for <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56" title="Group objects. Objects which do not fit in the above but are detected by hwloc and are useful to take...">HWLOC_OBJ_GROUP</a> (groups are designed only to add more structure to the topology). </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a"></a>HWLOC_TYPE_FILTER_KEEP_NONE&#160;</td><td class="fielddoc"><p>Ignore all objects of this type. </p>
+<p>The bottom-level type <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661" title="Processing Unit, or (Logical) Processor. An execution unit (may share a core with some other logical ...">HWLOC_OBJ_PU</a>, the <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a" title="NUMA node. An object that contains memory that is directly and byte-accessible to the host processors...">HWLOC_OBJ_NUMANODE</a> type, and the top-level type <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a3f4e83ffc4a259354959ae8a9eaa2a80" title="Machine. A set of processors and memory with cache coherency.">HWLOC_OBJ_MACHINE</a> may not be ignored. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga9a5a1f0140cd1952544477833733195ba7664716643bf1db83e631eed34f659e4"></a>HWLOC_TYPE_FILTER_KEEP_STRUCTURE&#160;</td><td class="fielddoc"><p>Only ignore objects if their entire level does not bring any structure. </p>
+<p>Keep the entire level of objects if at least one of these objects adds structure to the topology. An object brings structure when it has multiple children and it is not the only child of its parent.</p>
+<p>If all objects in the level are the only child of their parent, and if none of them has multiple children, the entire level is removed.</p>
+<p>Cannot be set for I/O and Misc objects since the topology structure does not matter there. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5"></a>HWLOC_TYPE_FILTER_KEEP_IMPORTANT&#160;</td><td class="fielddoc"><p>Only keep likely-important objects of the given type. </p>
+<p>It is only useful for I/O object types. For <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9" title="PCI device (filtered out by default).">HWLOC_OBJ_PCI_DEVICE</a> and <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075" title="Operating system device (filtered out by default).">HWLOC_OBJ_OS_DEVICE</a>, it means that only objects of major/common kinds are kept (storage, network, OpenFabrics, CUDA, OpenCL, RSMI, NVML, and displays). Also, only OS devices directly attached on PCI (e.g. no USB) are reported. For <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0" title="Bridge (filtered out by default). Any bridge (or PCI switch) that connects the host or an I/O bus,...">HWLOC_OBJ_BRIDGE</a>, it means that bridges are kept only if they have children.</p>
+<p>This flag equivalent to <a class="el" href="a00205.html#gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e" title="Keep all objects of this type.">HWLOC_TYPE_FILTER_KEEP_ALL</a> for Normal, Memory and Misc types since they are likely important. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga09318f81c1d4713be907d64748a6f93c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga09318f81c1d4713be907d64748a6f93c">&#9670;&nbsp;</a></span>hwloc_topology_get_flags()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned long hwloc_topology_get_flags </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Get OR'ed flags of a topology. </p>
+<p>Get the OR'ed set of <a class="el" href="a00205.html#gada025d3ec20b4b420f8038d23d6e7bde" title="Flags to be set onto a topology context before load.">hwloc_topology_flags_e</a> of a topology.</p>
+<p>If <a class="el" href="a00205.html#gaaeed4df656979e5f16befea9d29b814b" title="Set OR&#39;ed flags to non-yet-loaded topology.">hwloc_topology_set_flags()</a> was not called earlier, no flags are set (<code>0</code> is returned).</p>
+<dl class="section return"><dt>Returns</dt><dd>the flags previously set with <a class="el" href="a00205.html#gaaeed4df656979e5f16befea9d29b814b" title="Set OR&#39;ed flags to non-yet-loaded topology.">hwloc_topology_set_flags()</a>. </dd></dl>
+
+</div>
+</div>
+<a id="gab8c76173c4a8ce1a9a9366012b1388e6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gab8c76173c4a8ce1a9a9366012b1388e6">&#9670;&nbsp;</a></span>hwloc_topology_get_support()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const struct <a class="el" href="a00321.html">hwloc_topology_support</a>* hwloc_topology_get_support </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict&#160;</td>
+          <td class="paramname"><em>topology</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Retrieve the topology support. </p>
+<p>Each flag indicates whether a feature is supported. If set to 0, the feature is not supported. If set to 1, the feature is supported, but the corresponding call may still fail in some corner cases.</p>
+<p>These features are also listed by hwloc-info --support</p>
+<p>The reported features are what the current topology supports on the current machine. If the topology was exported to XML from another machine and later imported here, support still describes what is supported for this imported topology after import. By default, binding will be reported as unsupported in this case (see <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b" title="Assume that the selected backend provides the topology for the system on which we are running.">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a>).</p>
+<p>Topology flag <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdead93e82b8668ee90e4f9354e201a2ed9c" title="Import support from the imported topology.">HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT</a> may be used to report the supported features of the original remote machine instead. If it was successfully imported, <code>imported_support</code> will be set in the struct <a class="el" href="a00317.html" title="Flags describing miscellaneous features.">hwloc_topology_misc_support</a> array. </p>
+
+</div>
+</div>
+<a id="ga137ad1178f7a79f2383974d983083401"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga137ad1178f7a79f2383974d983083401">&#9670;&nbsp;</a></span>hwloc_topology_get_type_filter()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_get_type_filter </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
+          <td class="paramname"><em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">enum <a class="el" href="a00205.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> *&#160;</td>
+          <td class="paramname"><em>filter</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Get the current filtering for the given object type. </p>
+
+</div>
+</div>
+<a id="ga91f992f8d6c4905b2d3c4f43e509c2a3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga91f992f8d6c4905b2d3c4f43e509c2a3">&#9670;&nbsp;</a></span>hwloc_topology_get_userdata()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* hwloc_topology_get_userdata </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Retrieve the topology-specific userdata pointer. </p>
+<p>Retrieve the application-given private data pointer that was previously set with <a class="el" href="a00205.html#ga2cc7b7b155cba58dda203e54f1637b9c" title="Set the topology-specific userdata pointer.">hwloc_topology_set_userdata()</a>. </p>
+
+</div>
+</div>
+<a id="ga68ffdcfd9175cdf40709801092f18017"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga68ffdcfd9175cdf40709801092f18017">&#9670;&nbsp;</a></span>hwloc_topology_is_thissystem()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_is_thissystem </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict&#160;</td>
+          <td class="paramname"><em>topology</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Does the topology context come from this system? </p>
+<dl class="section return"><dt>Returns</dt><dd>1 if this topology context was built using the system running this program. </dd>
+<dd>
+0 instead (for instance if using another file-system root, a XML topology file, or a synthetic topology). </dd></dl>
+
+</div>
+</div>
+<a id="ga9eb8dc3b106f84921bf5789101e97e24"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga9eb8dc3b106f84921bf5789101e97e24">&#9670;&nbsp;</a></span>hwloc_topology_set_all_types_filter()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_set_all_types_filter </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">enum <a class="el" href="a00205.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a>&#160;</td>
+          <td class="paramname"><em>filter</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Set the filtering for all object types. </p>
+<p>If some types do not support this filtering, they are silently ignored. </p>
+
+</div>
+</div>
+<a id="ga30bd6d330fe3c8f0cbaad724d114ee20"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga30bd6d330fe3c8f0cbaad724d114ee20">&#9670;&nbsp;</a></span>hwloc_topology_set_cache_types_filter()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_set_cache_types_filter </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">enum <a class="el" href="a00205.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a>&#160;</td>
+          <td class="paramname"><em>filter</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Set the filtering for all CPU cache object types. </p>
+<p>Memory-side caches are not involved since they are not CPU caches. </p>
+
+</div>
+</div>
+<a id="gaaeed4df656979e5f16befea9d29b814b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaaeed4df656979e5f16befea9d29b814b">&#9670;&nbsp;</a></span>hwloc_topology_set_flags()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_set_flags </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Set OR'ed flags to non-yet-loaded topology. </p>
+<p>Set a OR'ed set of <a class="el" href="a00205.html#gada025d3ec20b4b420f8038d23d6e7bde" title="Flags to be set onto a topology context before load.">hwloc_topology_flags_e</a> onto a topology that was not yet loaded.</p>
+<p>If this function is called multiple times, the last invocation will erase and replace the set of flags that was previously set.</p>
+<p>By default, no flags are set (<code>0</code>).</p>
+<p>The flags set in a topology may be retrieved with <a class="el" href="a00205.html#ga09318f81c1d4713be907d64748a6f93c" title="Get OR&#39;ed flags of a topology.">hwloc_topology_get_flags()</a>. </p>
+
+</div>
+</div>
+<a id="ga37c7b2e599ed3cd76ad9164630024f30"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga37c7b2e599ed3cd76ad9164630024f30">&#9670;&nbsp;</a></span>hwloc_topology_set_icache_types_filter()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_set_icache_types_filter </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">enum <a class="el" href="a00205.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a>&#160;</td>
+          <td class="paramname"><em>filter</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Set the filtering for all CPU instruction cache object types. </p>
+<p>Memory-side caches are not involved since they are not CPU caches. </p>
+
+</div>
+</div>
+<a id="ga0ab38705357bc1203abe829da8a12ad3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga0ab38705357bc1203abe829da8a12ad3">&#9670;&nbsp;</a></span>hwloc_topology_set_io_types_filter()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_set_io_types_filter </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">enum <a class="el" href="a00205.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a>&#160;</td>
+          <td class="paramname"><em>filter</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Set the filtering for all I/O object types. </p>
+
+</div>
+</div>
+<a id="gad894e70f15f8d4aada7be8d1aba38b7e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gad894e70f15f8d4aada7be8d1aba38b7e">&#9670;&nbsp;</a></span>hwloc_topology_set_type_filter()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_set_type_filter </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
+          <td class="paramname"><em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">enum <a class="el" href="a00205.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a>&#160;</td>
+          <td class="paramname"><em>filter</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Set the filtering for the given object type. </p>
+
+</div>
+</div>
+<a id="ga2cc7b7b155cba58dda203e54f1637b9c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga2cc7b7b155cba58dda203e54f1637b9c">&#9670;&nbsp;</a></span>hwloc_topology_set_userdata()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void hwloc_topology_set_userdata </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const void *&#160;</td>
+          <td class="paramname"><em>userdata</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Set the topology-specific userdata pointer. </p>
+<p>Each topology may store one application-given private data pointer. It is initialized to <code>NULL</code>. hwloc will never modify it.</p>
+<p>Use it as you wish, after <a class="el" href="a00198.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa" title="Allocate a topology context.">hwloc_topology_init()</a> and until hwloc_topolog_destroy().</p>
+<p>This pointer is not exported to XML. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00206.html b/doc/doxygen-doc/html/a00206.html
new file mode 100644
index 00000000..0ea0823c
--- /dev/null
+++ b/doc/doxygen-doc/html/a00206.html
@@ -0,0 +1,406 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Modifying a loaded Topology</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Modifying a loaded Topology</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:ga9d80f08eb25b7ac22f1b998dc8bf521f"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.html#ga9d80f08eb25b7ac22f1b998dc8bf521f">hwloc_restrict_flags_e</a> { <br />
+&#160;&#160;<a class="el" href="a00206.html#gga9d80f08eb25b7ac22f1b998dc8bf521fa80eeb9cbba401ab050f8fb4573725891">HWLOC_RESTRICT_FLAG_REMOVE_CPULESS</a>
+, <a class="el" href="a00206.html#gga9d80f08eb25b7ac22f1b998dc8bf521fae4c5b1b87232f2d8a60559e77ac65a68">HWLOC_RESTRICT_FLAG_BYNODESET</a> = (1UL&lt;&lt;3)
+, <a class="el" href="a00206.html#gga9d80f08eb25b7ac22f1b998dc8bf521faf5ba49808855704bfe9cb9fe7347f93b">HWLOC_RESTRICT_FLAG_REMOVE_MEMLESS</a>
+, <a class="el" href="a00206.html#gga9d80f08eb25b7ac22f1b998dc8bf521fa699969227a09bbc1a7de51dc9fb7be4b">HWLOC_RESTRICT_FLAG_ADAPT_MISC</a>
+, <br />
+&#160;&#160;<a class="el" href="a00206.html#gga9d80f08eb25b7ac22f1b998dc8bf521faa95d6985e36ec1e55f68b210297a85cb">HWLOC_RESTRICT_FLAG_ADAPT_IO</a>
+<br />
+ }</td></tr>
+<tr class="separator:ga9d80f08eb25b7ac22f1b998dc8bf521f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga38b1be3922094d880f6e76bf56c973d6"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.html#ga38b1be3922094d880f6e76bf56c973d6">hwloc_allow_flags_e</a> { <a class="el" href="a00206.html#gga38b1be3922094d880f6e76bf56c973d6aca107692455774f9d323d21b8abfce72">HWLOC_ALLOW_FLAG_ALL</a>
+, <a class="el" href="a00206.html#gga38b1be3922094d880f6e76bf56c973d6a88c50088c09dcf1e1a496c0817556fb9">HWLOC_ALLOW_FLAG_LOCAL_RESTRICTIONS</a>
+, <a class="el" href="a00206.html#gga38b1be3922094d880f6e76bf56c973d6a489c8c1b67ce7e0b8cf7a665852760e1">HWLOC_ALLOW_FLAG_CUSTOM</a>
+ }</td></tr>
+<tr class="separator:ga38b1be3922094d880f6e76bf56c973d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga6db81ed13ac0a9d70cc80372ab537815"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.html#ga6db81ed13ac0a9d70cc80372ab537815">hwloc_topology_restrict</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict topology, <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, unsigned long flags)</td></tr>
+<tr class="separator:ga6db81ed13ac0a9d70cc80372ab537815"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf955b190c0299dcfb5bc985d777f92a1"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.html#gaf955b190c0299dcfb5bc985d777f92a1">hwloc_topology_allow</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict topology, <a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> cpuset, <a class="el" href="a00195.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> nodeset, unsigned long flags)</td></tr>
+<tr class="separator:gaf955b190c0299dcfb5bc985d777f92a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad980782ade737900c5cf208946768c30"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.html#gad980782ade737900c5cf208946768c30">hwloc_topology_insert_misc_object</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> parent, const char *name)</td></tr>
+<tr class="separator:gad980782ade737900c5cf208946768c30"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4cea4741165faf5323931a9ed8786ef7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.html#ga4cea4741165faf5323931a9ed8786ef7">hwloc_topology_alloc_group_object</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
+<tr class="separator:ga4cea4741165faf5323931a9ed8786ef7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1fc6012b3e1c249b83f48cb7bcacaa5b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.html#ga1fc6012b3e1c249b83f48cb7bcacaa5b">hwloc_topology_insert_group_object</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> group)</td></tr>
+<tr class="separator:ga1fc6012b3e1c249b83f48cb7bcacaa5b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad458715d3335df44849216cc123d1055"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.html#gad458715d3335df44849216cc123d1055">hwloc_obj_add_other_obj_sets</a> (<a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> dst, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> src)</td></tr>
+<tr class="separator:gad458715d3335df44849216cc123d1055"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga698ecd640d2b76742bba3829a145cd9a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.html#ga698ecd640d2b76742bba3829a145cd9a">hwloc_topology_refresh</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
+<tr class="separator:ga698ecd640d2b76742bba3829a145cd9a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a id="ga38b1be3922094d880f6e76bf56c973d6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga38b1be3922094d880f6e76bf56c973d6">&#9670;&nbsp;</a></span>hwloc_allow_flags_e</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00206.html#ga38b1be3922094d880f6e76bf56c973d6">hwloc_allow_flags_e</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Flags to be given to <a class="el" href="a00206.html#gaf955b190c0299dcfb5bc985d777f92a1" title="Change the sets of allowed PUs and NUMA nodes in the topology.">hwloc_topology_allow()</a>. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga38b1be3922094d880f6e76bf56c973d6aca107692455774f9d323d21b8abfce72"></a>HWLOC_ALLOW_FLAG_ALL&#160;</td><td class="fielddoc"><p>Mark all objects as allowed in the topology. </p>
+<p><code>cpuset</code> and <code>nođeset</code> given to <a class="el" href="a00206.html#gaf955b190c0299dcfb5bc985d777f92a1" title="Change the sets of allowed PUs and NUMA nodes in the topology.">hwloc_topology_allow()</a> must be <code>NULL</code>. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga38b1be3922094d880f6e76bf56c973d6a88c50088c09dcf1e1a496c0817556fb9"></a>HWLOC_ALLOW_FLAG_LOCAL_RESTRICTIONS&#160;</td><td class="fielddoc"><p>Only allow objects that are available to the current process. </p>
+<p>The topology must have <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b" title="Assume that the selected backend provides the topology for the system on which we are running.">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a> so that the set of available resources can actually be retrieved from the operating system.</p>
+<p><code>cpuset</code> and <code>nođeset</code> given to <a class="el" href="a00206.html#gaf955b190c0299dcfb5bc985d777f92a1" title="Change the sets of allowed PUs and NUMA nodes in the topology.">hwloc_topology_allow()</a> must be <code>NULL</code>. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga38b1be3922094d880f6e76bf56c973d6a489c8c1b67ce7e0b8cf7a665852760e1"></a>HWLOC_ALLOW_FLAG_CUSTOM&#160;</td><td class="fielddoc"><p>Allow a custom set of objects, given to <a class="el" href="a00206.html#gaf955b190c0299dcfb5bc985d777f92a1" title="Change the sets of allowed PUs and NUMA nodes in the topology.">hwloc_topology_allow()</a> as <code>cpuset</code> and/or <code>nodeset</code> parameters. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<a id="ga9d80f08eb25b7ac22f1b998dc8bf521f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga9d80f08eb25b7ac22f1b998dc8bf521f">&#9670;&nbsp;</a></span>hwloc_restrict_flags_e</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00206.html#ga9d80f08eb25b7ac22f1b998dc8bf521f">hwloc_restrict_flags_e</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Flags to be given to <a class="el" href="a00206.html#ga6db81ed13ac0a9d70cc80372ab537815" title="Restrict the topology to the given CPU set or nodeset.">hwloc_topology_restrict()</a>. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga9d80f08eb25b7ac22f1b998dc8bf521fa80eeb9cbba401ab050f8fb4573725891"></a>HWLOC_RESTRICT_FLAG_REMOVE_CPULESS&#160;</td><td class="fielddoc"><p>Remove all objects that became CPU-less. By default, only objects that contain no PU and no memory are removed. This flag may not be used with <a class="el" href="a00206.html#gga9d80f08eb25b7ac22f1b998dc8bf521fae4c5b1b87232f2d8a60559e77ac65a68" title="Restrict by nodeset instead of CPU set. Only keep objects whose nodeset is included or partially incl...">HWLOC_RESTRICT_FLAG_BYNODESET</a>. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga9d80f08eb25b7ac22f1b998dc8bf521fae4c5b1b87232f2d8a60559e77ac65a68"></a>HWLOC_RESTRICT_FLAG_BYNODESET&#160;</td><td class="fielddoc"><p>Restrict by nodeset instead of CPU set. Only keep objects whose nodeset is included or partially included in the given set. This flag may not be used with <a class="el" href="a00206.html#gga9d80f08eb25b7ac22f1b998dc8bf521fa80eeb9cbba401ab050f8fb4573725891" title="Remove all objects that became CPU-less. By default, only objects that contain no PU and no memory ar...">HWLOC_RESTRICT_FLAG_REMOVE_CPULESS</a>. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga9d80f08eb25b7ac22f1b998dc8bf521faf5ba49808855704bfe9cb9fe7347f93b"></a>HWLOC_RESTRICT_FLAG_REMOVE_MEMLESS&#160;</td><td class="fielddoc"><p>Remove all objects that became Memory-less. By default, only objects that contain no PU and no memory are removed. This flag may only be used with <a class="el" href="a00206.html#gga9d80f08eb25b7ac22f1b998dc8bf521fae4c5b1b87232f2d8a60559e77ac65a68" title="Restrict by nodeset instead of CPU set. Only keep objects whose nodeset is included or partially incl...">HWLOC_RESTRICT_FLAG_BYNODESET</a>. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga9d80f08eb25b7ac22f1b998dc8bf521fa699969227a09bbc1a7de51dc9fb7be4b"></a>HWLOC_RESTRICT_FLAG_ADAPT_MISC&#160;</td><td class="fielddoc"><p>Move Misc objects to ancestors if their parents are removed during restriction. If this flag is not set, Misc objects are removed when their parents are removed. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga9d80f08eb25b7ac22f1b998dc8bf521faa95d6985e36ec1e55f68b210297a85cb"></a>HWLOC_RESTRICT_FLAG_ADAPT_IO&#160;</td><td class="fielddoc"><p>Move I/O objects to ancestors if their parents are removed during restriction. If this flag is not set, I/O devices and bridges are removed when their parents are removed. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="gad458715d3335df44849216cc123d1055"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gad458715d3335df44849216cc123d1055">&#9670;&nbsp;</a></span>hwloc_obj_add_other_obj_sets()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_obj_add_other_obj_sets </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>dst</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>src</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Setup object cpusets/nodesets by OR'ing another object's sets. </p>
+<p>For each defined cpuset or nodeset in <code>src</code>, allocate the corresponding set in <code>dst</code> and add <code>src</code> to it by OR'ing sets.</p>
+<p>This function is convenient between <a class="el" href="a00206.html#ga4cea4741165faf5323931a9ed8786ef7" title="Allocate a Group object to insert later with hwloc_topology_insert_group_object().">hwloc_topology_alloc_group_object()</a> and <a class="el" href="a00206.html#ga1fc6012b3e1c249b83f48cb7bcacaa5b" title="Add more structure to the topology by adding an intermediate Group.">hwloc_topology_insert_group_object()</a>. It builds the sets of the new Group that will be inserted as a new intermediate parent of several objects. </p>
+
+</div>
+</div>
+<a id="ga4cea4741165faf5323931a9ed8786ef7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga4cea4741165faf5323931a9ed8786ef7">&#9670;&nbsp;</a></span>hwloc_topology_alloc_group_object()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_topology_alloc_group_object </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Allocate a Group object to insert later with <a class="el" href="a00206.html#ga1fc6012b3e1c249b83f48cb7bcacaa5b" title="Add more structure to the topology by adding an intermediate Group.">hwloc_topology_insert_group_object()</a>. </p>
+<p>This function returns a new Group object.</p>
+<p>The caller should (at least) initialize its sets before inserting the object in the topology. See <a class="el" href="a00206.html#ga1fc6012b3e1c249b83f48cb7bcacaa5b" title="Add more structure to the topology by adding an intermediate Group.">hwloc_topology_insert_group_object()</a>. </p>
+
+</div>
+</div>
+<a id="gaf955b190c0299dcfb5bc985d777f92a1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaf955b190c0299dcfb5bc985d777f92a1">&#9670;&nbsp;</a></span>hwloc_topology_allow()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_allow </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>cpuset</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a>&#160;</td>
+          <td class="paramname"><em>nodeset</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Change the sets of allowed PUs and NUMA nodes in the topology. </p>
+<p>This function only works if the <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258" title="Detect the whole system, ignore reservations, include disallowed objects.">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a> was set on the topology. It does not modify any object, it only changes the sets returned by <a class="el" href="a00214.html#ga517d5d68ec9f24583d8933aab713be8e" title="Get allowed CPU set.">hwloc_topology_get_allowed_cpuset()</a> and <a class="el" href="a00214.html#ga21a4d7237a11e76b912ed4524ab78cbd" title="Get allowed node set.">hwloc_topology_get_allowed_nodeset()</a>.</p>
+<p>It is notably useful when importing a topology from another process running in a different Linux Cgroup.</p>
+<p><code>flags</code> must be set to one flag among <a class="el" href="a00206.html#ga38b1be3922094d880f6e76bf56c973d6" title="Flags to be given to hwloc_topology_allow().">hwloc_allow_flags_e</a>.</p>
+<dl class="section note"><dt>Note</dt><dd>Removing objects from a topology should rather be performed with <a class="el" href="a00206.html#ga6db81ed13ac0a9d70cc80372ab537815" title="Restrict the topology to the given CPU set or nodeset.">hwloc_topology_restrict()</a>. </dd></dl>
+
+</div>
+</div>
+<a id="ga1fc6012b3e1c249b83f48cb7bcacaa5b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga1fc6012b3e1c249b83f48cb7bcacaa5b">&#9670;&nbsp;</a></span>hwloc_topology_insert_group_object()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_topology_insert_group_object </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>group</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Add more structure to the topology by adding an intermediate Group. </p>
+<p>The caller should first allocate a new Group object with <a class="el" href="a00206.html#ga4cea4741165faf5323931a9ed8786ef7" title="Allocate a Group object to insert later with hwloc_topology_insert_group_object().">hwloc_topology_alloc_group_object()</a>. Then it must setup at least one of its CPU or node sets to specify the final location of the Group in the topology. Then the object can be passed to this function for actual insertion in the topology.</p>
+<p>Either the cpuset or nodeset field (or both, if compatible) must be set to a non-empty bitmap. The complete_cpuset or complete_nodeset may be set instead if inserting with respect to the complete topology (including disallowed, offline or unknown objects). If grouping several objects, <a class="el" href="a00206.html#gad458715d3335df44849216cc123d1055" title="Setup object cpusets/nodesets by OR&#39;ing another object&#39;s sets.">hwloc_obj_add_other_obj_sets()</a> is an easy way to build the Group sets iteratively. These sets cannot be larger than the current topology, or they would get restricted silently. The core will setup the other sets after actual insertion.</p>
+<p>The <code>subtype</code> object attribute may be defined (to a dynamically allocated string) to display something else than "Group" as the type name for this object in lstopo. Custom name/value info pairs may be added with <a class="el" href="a00201.html#gace7654bb8a9002caae1a4b8a59e7452e" title="Add the given info name and value pair to the given object.">hwloc_obj_add_info()</a> after insertion.</p>
+<p>The group <code>dont_merge</code> attribute may be set to <code>1</code> to prevent the hwloc core from ever merging this object with another hierarchically-identical object. This is useful when the Group itself describes an important feature that cannot be exposed anywhere else in the hierarchy.</p>
+<p>The group <code>kind</code> attribute may be set to a high value such as <code>0xffffffff</code> to tell hwloc that this new Group should always be discarded in favor of any existing Group with the same locality.</p>
+<dl class="section return"><dt>Returns</dt><dd>The inserted object if it was properly inserted.</dd>
+<dd>
+An existing object if the Group was merged or discarded because the topology already contained an object at the same location (the Group did not add any hierarchy information).</dd>
+<dd>
+<code>NULL</code> if the insertion failed because of conflicting sets in topology tree.</dd>
+<dd>
+<code>NULL</code> if Group objects are filtered-out of the topology (<a class="el" href="a00205.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a" title="Ignore all objects of this type.">HWLOC_TYPE_FILTER_KEEP_NONE</a>).</dd>
+<dd>
+<code>NULL</code> if the object was discarded because no set was initialized in the Group before insert, or all of them were empty. </dd></dl>
+
+</div>
+</div>
+<a id="gad980782ade737900c5cf208946768c30"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gad980782ade737900c5cf208946768c30">&#9670;&nbsp;</a></span>hwloc_topology_insert_misc_object()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_topology_insert_misc_object </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>name</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Add a MISC object as a leaf of the topology. </p>
+<p>A new MISC object will be created and inserted into the topology at the position given by parent. It is appended to the list of existing Misc children, without ever adding any intermediate hierarchy level. This is useful for annotating the topology without actually changing the hierarchy.</p>
+<p><code>name</code> is supposed to be unique across all Misc objects in the topology. It will be duplicated to setup the new object attributes.</p>
+<p>The new leaf object will not have any <code>cpuset</code>.</p>
+<dl class="section return"><dt>Returns</dt><dd>the newly-created object</dd>
+<dd>
+<code>NULL</code> on error.</dd>
+<dd>
+<code>NULL</code> if Misc objects are filtered-out of the topology (<a class="el" href="a00205.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a" title="Ignore all objects of this type.">HWLOC_TYPE_FILTER_KEEP_NONE</a>).</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>If <code>name</code> contains some non-printable characters, they will be dropped when exporting to XML, see <a class="el" href="a00218.html#ga333f79975b4eeb28a3d8fad3373583ce" title="Export the topology into an XML file.">hwloc_topology_export_xml()</a> in <a class="el" href="a00134_source.html">hwloc/export.h</a>. </dd></dl>
+
+</div>
+</div>
+<a id="ga698ecd640d2b76742bba3829a145cd9a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga698ecd640d2b76742bba3829a145cd9a">&#9670;&nbsp;</a></span>hwloc_topology_refresh()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_refresh </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Refresh internal structures after topology modification. </p>
+<p>Modifying the topology (by restricting, adding objects, modifying structures such as distances or memory attributes, etc.) may cause some internal caches to become invalid. These caches are automatically refreshed when accessed but this refreshing is not thread-safe.</p>
+<p>This function is not thread-safe either, but it is a good way to end a non-thread-safe phase of topology modification. Once this refresh is done, multiple threads may concurrently consult the topology, objects, distances, attributes, etc.</p>
+<p>See also <a class="el" href="a00406.html">Thread Safety</a> </p>
+
+</div>
+</div>
+<a id="ga6db81ed13ac0a9d70cc80372ab537815"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga6db81ed13ac0a9d70cc80372ab537815">&#9670;&nbsp;</a></span>hwloc_topology_restrict()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_restrict </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Restrict the topology to the given CPU set or nodeset. </p>
+<p>Topology <code>topology</code> is modified so as to remove all objects that are not included (or partially included) in the CPU set <code>set</code>. All objects CPU and node sets are restricted accordingly.</p>
+<p>If <a class="el" href="a00206.html#gga9d80f08eb25b7ac22f1b998dc8bf521fae4c5b1b87232f2d8a60559e77ac65a68" title="Restrict by nodeset instead of CPU set. Only keep objects whose nodeset is included or partially incl...">HWLOC_RESTRICT_FLAG_BYNODESET</a> is passed in <code>flags</code>, <code>set</code> is considered a nodeset instead of a CPU set.</p>
+<p><code>flags</code> is a OR'ed set of <a class="el" href="a00206.html#ga9d80f08eb25b7ac22f1b998dc8bf521f" title="Flags to be given to hwloc_topology_restrict().">hwloc_restrict_flags_e</a>.</p>
+<dl class="section note"><dt>Note</dt><dd>This call may not be reverted by restricting back to a larger set. Once dropped during restriction, objects may not be brought back, except by loading another topology with <a class="el" href="a00198.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a>.</dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>0 on success.</dd>
+<dd>
+-1 with errno set to EINVAL if the input set is invalid. The topology is not modified in this case.</dd>
+<dd>
+-1 with errno set to ENOMEM on failure to allocate internal data. The topology is reinitialized in this case. It should be either destroyed with <a class="el" href="a00198.html#ga9f34a640b6fd28d23699d4d084667b15" title="Terminate and free a topology context.">hwloc_topology_destroy()</a> or configured and loaded again. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00207.html b/doc/doxygen-doc/html/a00207.html
new file mode 100644
index 00000000..34aab337
--- /dev/null
+++ b/doc/doxygen-doc/html/a00207.html
@@ -0,0 +1,519 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Finding Objects inside a CPU set</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Finding Objects inside a CPU set</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga547325a4193dbc215d07c23097519d79"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00207.html#ga547325a4193dbc215d07c23097519d79">hwloc_get_first_largest_obj_inside_cpuset</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set)</td></tr>
+<tr class="separator:ga547325a4193dbc215d07c23097519d79"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga34ca563fa3a6a4e05268f36a87668511"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00207.html#ga34ca563fa3a6a4e05268f36a87668511">hwloc_get_largest_objs_inside_cpuset</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *restrict objs, int max)</td></tr>
+<tr class="separator:ga34ca563fa3a6a4e05268f36a87668511"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga63e3784e7c60fbae5073428cb98ac787"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00207.html#ga63e3784e7c60fbae5073428cb98ac787">hwloc_get_next_obj_inside_cpuset_by_depth</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, int depth, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> prev)</td></tr>
+<tr class="separator:ga63e3784e7c60fbae5073428cb98ac787"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafe859176cf9233f215fea0e87cef47e7"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00207.html#gafe859176cf9233f215fea0e87cef47e7">hwloc_get_next_obj_inside_cpuset_by_type</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, <a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> prev)</td></tr>
+<tr class="separator:gafe859176cf9233f215fea0e87cef47e7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaec86f1f88832836e3f9338e246ea5862"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00207.html#gaec86f1f88832836e3f9338e246ea5862">hwloc_get_obj_inside_cpuset_by_depth</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, int depth, unsigned idx)</td></tr>
+<tr class="separator:gaec86f1f88832836e3f9338e246ea5862"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2edf924e5a0cca9cb22f65cc77c6ddb5"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00207.html#ga2edf924e5a0cca9cb22f65cc77c6ddb5">hwloc_get_obj_inside_cpuset_by_type</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, <a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, unsigned idx)</td></tr>
+<tr class="separator:ga2edf924e5a0cca9cb22f65cc77c6ddb5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa43c64512ddb33fd181990c4261cec7d"><td class="memItemLeft" align="right" valign="top">static unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00207.html#gaa43c64512ddb33fd181990c4261cec7d">hwloc_get_nbobjs_inside_cpuset_by_depth</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, int depth)</td></tr>
+<tr class="separator:gaa43c64512ddb33fd181990c4261cec7d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga133c40415de008518608f8bff52a5ab9"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00207.html#ga133c40415de008518608f8bff52a5ab9">hwloc_get_nbobjs_inside_cpuset_by_type</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, <a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
+<tr class="separator:ga133c40415de008518608f8bff52a5ab9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4c3a20d61e9beb06c667b21688c772c5"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00207.html#ga4c3a20d61e9beb06c667b21688c772c5">hwloc_get_obj_index_inside_cpuset</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj)</td></tr>
+<tr class="separator:ga4c3a20d61e9beb06c667b21688c772c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga547325a4193dbc215d07c23097519d79"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga547325a4193dbc215d07c23097519d79">&#9670;&nbsp;</a></span>hwloc_get_first_largest_obj_inside_cpuset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_first_largest_obj_inside_cpuset </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the first largest object included in the given cpuset <code>set</code>. </p>
+<dl class="section return"><dt>Returns</dt><dd>the first object that is included in <code>set</code> and whose parent is not.</dd></dl>
+<p>This is convenient for iterating over all largest objects within a CPU set by doing a loop getting the first largest object and clearing its CPU set from the remaining CPU set. </p>
+
+</div>
+</div>
+<a id="ga34ca563fa3a6a4e05268f36a87668511"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga34ca563fa3a6a4e05268f36a87668511">&#9670;&nbsp;</a></span>hwloc_get_largest_objs_inside_cpuset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_get_largest_objs_inside_cpuset </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *restrict&#160;</td>
+          <td class="paramname"><em>objs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>max</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Get the set of largest objects covering exactly a given cpuset <code>set</code>. </p>
+<dl class="section return"><dt>Returns</dt><dd>the number of objects returned in <code>objs</code>. </dd></dl>
+
+</div>
+</div>
+<a id="gaa43c64512ddb33fd181990c4261cec7d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaa43c64512ddb33fd181990c4261cec7d">&#9670;&nbsp;</a></span>hwloc_get_nbobjs_inside_cpuset_by_depth()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static unsigned hwloc_get_nbobjs_inside_cpuset_by_depth </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>depth</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Return the number of objects at depth <code>depth</code> included in CPU set <code>set</code>. </p>
+<dl class="section note"><dt>Note</dt><dd>Objects with empty CPU sets are ignored (otherwise they would be considered included in any given set).</dd>
+<dd>
+This function cannot work if objects at the given depth do not have CPU sets (I/O or Misc objects). </dd></dl>
+
+</div>
+</div>
+<a id="ga133c40415de008518608f8bff52a5ab9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga133c40415de008518608f8bff52a5ab9">&#9670;&nbsp;</a></span>hwloc_get_nbobjs_inside_cpuset_by_type()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_get_nbobjs_inside_cpuset_by_type </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
+          <td class="paramname"><em>type</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Return the number of objects of type <code>type</code> included in CPU set <code>set</code>. </p>
+<p>If no object for that type exists inside CPU set <code>set</code>, 0 is returned. If there are several levels with objects of that type inside CPU set <code>set</code>, -1 is returned.</p>
+<dl class="section note"><dt>Note</dt><dd>Objects with empty CPU sets are ignored (otherwise they would be considered included in any given set).</dd>
+<dd>
+This function cannot work if objects of the given type do not have CPU sets (I/O objects). </dd></dl>
+
+</div>
+</div>
+<a id="ga63e3784e7c60fbae5073428cb98ac787"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga63e3784e7c60fbae5073428cb98ac787">&#9670;&nbsp;</a></span>hwloc_get_next_obj_inside_cpuset_by_depth()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_next_obj_inside_cpuset_by_depth </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>depth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>prev</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Return the next object at depth <code>depth</code> included in CPU set <code>set</code>. </p>
+<p>If <code>prev</code> is <code>NULL</code>, return the first object at depth <code>depth</code> included in <code>set</code>. The next invokation should pass the previous return value in <code>prev</code> so as to obtain the next object in <code>set</code>.</p>
+<dl class="section note"><dt>Note</dt><dd>Objects with empty CPU sets are ignored (otherwise they would be considered included in any given set).</dd>
+<dd>
+This function cannot work if objects at the given depth do not have CPU sets (I/O or Misc objects). </dd></dl>
+
+</div>
+</div>
+<a id="gafe859176cf9233f215fea0e87cef47e7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gafe859176cf9233f215fea0e87cef47e7">&#9670;&nbsp;</a></span>hwloc_get_next_obj_inside_cpuset_by_type()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_next_obj_inside_cpuset_by_type </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
+          <td class="paramname"><em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>prev</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Return the next object of type <code>type</code> included in CPU set <code>set</code>. </p>
+<p>If there are multiple or no depth for given type, return <code>NULL</code> and let the caller fallback to <a class="el" href="a00207.html#ga63e3784e7c60fbae5073428cb98ac787" title="Return the next object at depth depth included in CPU set set.">hwloc_get_next_obj_inside_cpuset_by_depth()</a>.</p>
+<dl class="section note"><dt>Note</dt><dd>Objects with empty CPU sets are ignored (otherwise they would be considered included in any given set).</dd>
+<dd>
+This function cannot work if objects of the given type do not have CPU sets (I/O or Misc objects). </dd></dl>
+
+</div>
+</div>
+<a id="ga4c3a20d61e9beb06c667b21688c772c5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga4c3a20d61e9beb06c667b21688c772c5">&#9670;&nbsp;</a></span>hwloc_get_obj_index_inside_cpuset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_get_obj_index_inside_cpuset </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>obj</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Return the logical index among the objects included in CPU set <code>set</code>. </p>
+<p>Consult all objects in the same level as <code>obj</code> and inside CPU set <code>set</code> in the logical order, and return the index of <code>obj</code> within them. If <code>set</code> covers the entire topology, this is the logical index of <code>obj</code>. Otherwise, this is similar to a logical index within the part of the topology defined by CPU set <code>set</code>.</p>
+<dl class="section note"><dt>Note</dt><dd>Objects with empty CPU sets are ignored (otherwise they would be considered included in any given set).</dd>
+<dd>
+This function cannot work if obj does not have CPU sets (I/O objects). </dd></dl>
+
+</div>
+</div>
+<a id="gaec86f1f88832836e3f9338e246ea5862"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaec86f1f88832836e3f9338e246ea5862">&#9670;&nbsp;</a></span>hwloc_get_obj_inside_cpuset_by_depth()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_obj_inside_cpuset_by_depth </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>depth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>idx</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Return the (logically) <code>idx</code> -th object at depth <code>depth</code> included in CPU set <code>set</code>. </p>
+<dl class="section note"><dt>Note</dt><dd>Objects with empty CPU sets are ignored (otherwise they would be considered included in any given set).</dd>
+<dd>
+This function cannot work if objects at the given depth do not have CPU sets (I/O or Misc objects). </dd></dl>
+
+</div>
+</div>
+<a id="ga2edf924e5a0cca9cb22f65cc77c6ddb5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga2edf924e5a0cca9cb22f65cc77c6ddb5">&#9670;&nbsp;</a></span>hwloc_get_obj_inside_cpuset_by_type()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_obj_inside_cpuset_by_type </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
+          <td class="paramname"><em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>idx</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Return the <code>idx</code> -th object of type <code>type</code> included in CPU set <code>set</code>. </p>
+<p>If there are multiple or no depth for given type, return <code>NULL</code> and let the caller fallback to <a class="el" href="a00207.html#gaec86f1f88832836e3f9338e246ea5862" title="Return the (logically) idx -th object at depth depth included in CPU set set.">hwloc_get_obj_inside_cpuset_by_depth()</a>.</p>
+<dl class="section note"><dt>Note</dt><dd>Objects with empty CPU sets are ignored (otherwise they would be considered included in any given set).</dd>
+<dd>
+This function cannot work if objects of the given type do not have CPU sets (I/O or Misc objects). </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00208.html b/doc/doxygen-doc/html/a00208.html
new file mode 100644
index 00000000..8f52bf86
--- /dev/null
+++ b/doc/doxygen-doc/html/a00208.html
@@ -0,0 +1,258 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Finding Objects covering at least CPU set</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Finding Objects covering at least CPU set</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga0e66aa2dc6b2527cfd10723af646c9d7"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00208.html#ga0e66aa2dc6b2527cfd10723af646c9d7">hwloc_get_child_covering_cpuset</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> parent)</td></tr>
+<tr class="separator:ga0e66aa2dc6b2527cfd10723af646c9d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga41acdcdbb8b95d70ecf6c572a3f67dca"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00208.html#ga41acdcdbb8b95d70ecf6c572a3f67dca">hwloc_get_obj_covering_cpuset</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set)</td></tr>
+<tr class="separator:ga41acdcdbb8b95d70ecf6c572a3f67dca"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaba4b6d86eba1169ced4b0e941d2bb5f0"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00208.html#gaba4b6d86eba1169ced4b0e941d2bb5f0">hwloc_get_next_obj_covering_cpuset_by_depth</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, int depth, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> prev)</td></tr>
+<tr class="separator:gaba4b6d86eba1169ced4b0e941d2bb5f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga91cfae08b092e7966002e15d1e987213"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00208.html#ga91cfae08b092e7966002e15d1e987213">hwloc_get_next_obj_covering_cpuset_by_type</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, <a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> prev)</td></tr>
+<tr class="separator:ga91cfae08b092e7966002e15d1e987213"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga0e66aa2dc6b2527cfd10723af646c9d7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga0e66aa2dc6b2527cfd10723af646c9d7">&#9670;&nbsp;</a></span>hwloc_get_child_covering_cpuset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_child_covering_cpuset </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>parent</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the child covering at least CPU set <code>set</code>. </p>
+<dl class="section return"><dt>Returns</dt><dd><code>NULL</code> if no child matches or if <code>set</code> is empty.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function cannot work if parent does not have a CPU set (I/O or Misc objects). </dd></dl>
+
+</div>
+</div>
+<a id="gaba4b6d86eba1169ced4b0e941d2bb5f0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaba4b6d86eba1169ced4b0e941d2bb5f0">&#9670;&nbsp;</a></span>hwloc_get_next_obj_covering_cpuset_by_depth()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_next_obj_covering_cpuset_by_depth </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>depth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>prev</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Iterate through same-depth objects covering at least CPU set <code>set</code>. </p>
+<p>If object <code>prev</code> is <code>NULL</code>, return the first object at depth <code>depth</code> covering at least part of CPU set <code>set</code>. The next invokation should pass the previous return value in <code>prev</code> so as to obtain the next object covering at least another part of <code>set</code>.</p>
+<dl class="section note"><dt>Note</dt><dd>This function cannot work if objects at the given depth do not have CPU sets (I/O or Misc objects). </dd></dl>
+
+</div>
+</div>
+<a id="ga91cfae08b092e7966002e15d1e987213"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga91cfae08b092e7966002e15d1e987213">&#9670;&nbsp;</a></span>hwloc_get_next_obj_covering_cpuset_by_type()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_next_obj_covering_cpuset_by_type </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
+          <td class="paramname"><em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>prev</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Iterate through same-type objects covering at least CPU set <code>set</code>. </p>
+<p>If object <code>prev</code> is <code>NULL</code>, return the first object of type <code>type</code> covering at least part of CPU set <code>set</code>. The next invokation should pass the previous return value in <code>prev</code> so as to obtain the next object of type <code>type</code> covering at least another part of <code>set</code>.</p>
+<p>If there are no or multiple depths for type <code>type</code>, <code>NULL</code> is returned. The caller may fallback to <a class="el" href="a00208.html#gaba4b6d86eba1169ced4b0e941d2bb5f0" title="Iterate through same-depth objects covering at least CPU set set.">hwloc_get_next_obj_covering_cpuset_by_depth()</a> for each depth.</p>
+<dl class="section note"><dt>Note</dt><dd>This function cannot work if objects of the given type do not have CPU sets (I/O or Misc objects). </dd></dl>
+
+</div>
+</div>
+<a id="ga41acdcdbb8b95d70ecf6c572a3f67dca"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga41acdcdbb8b95d70ecf6c572a3f67dca">&#9670;&nbsp;</a></span>hwloc_get_obj_covering_cpuset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_obj_covering_cpuset </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the lowest object covering at least CPU set <code>set</code>. </p>
+<dl class="section return"><dt>Returns</dt><dd><code>NULL</code> if no object matches or if <code>set</code> is empty. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00209.html b/doc/doxygen-doc/html/a00209.html
new file mode 100644
index 00000000..b3ede46c
--- /dev/null
+++ b/doc/doxygen-doc/html/a00209.html
@@ -0,0 +1,297 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Looking at Ancestor and Child Objects</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Looking at Ancestor and Child Objects</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga9f8c93fde236e9642a96957af01a11cb"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#ga9f8c93fde236e9642a96957af01a11cb">hwloc_get_ancestor_obj_by_depth</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int depth, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj)</td></tr>
+<tr class="separator:ga9f8c93fde236e9642a96957af01a11cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga70f0c7583291da707c15ae4daa850f41"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#ga70f0c7583291da707c15ae4daa850f41">hwloc_get_ancestor_obj_by_type</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj)</td></tr>
+<tr class="separator:ga70f0c7583291da707c15ae4daa850f41"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab1fa883021928b5c476911c4102e9be3"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#gab1fa883021928b5c476911c4102e9be3">hwloc_get_common_ancestor_obj</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj1, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj2)</td></tr>
+<tr class="separator:gab1fa883021928b5c476911c4102e9be3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga408cf74f5bf9ed497911a320c7f8cc56"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#ga408cf74f5bf9ed497911a320c7f8cc56">hwloc_obj_is_in_subtree</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> subtree_root)</td></tr>
+<tr class="separator:ga408cf74f5bf9ed497911a320c7f8cc56"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga12d8565a3436c565e791ed02a0353621"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#ga12d8565a3436c565e791ed02a0353621">hwloc_get_next_child</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> parent, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> prev)</td></tr>
+<tr class="separator:ga12d8565a3436c565e791ed02a0353621"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Be sure to see the figure in <a class="el" href="a00395.html">Terms and Definitions</a> that shows a complete topology tree, including depths, child/sibling/cousin relationships, and an example of an asymmetric topology where one package has fewer caches than its peers. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga9f8c93fde236e9642a96957af01a11cb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga9f8c93fde236e9642a96957af01a11cb">&#9670;&nbsp;</a></span>hwloc_get_ancestor_obj_by_depth()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_ancestor_obj_by_depth </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>depth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>obj</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the ancestor object of <code>obj</code> at depth <code>depth</code>. </p>
+<dl class="section note"><dt>Note</dt><dd><code>depth</code> should not be the depth of PU or NUMA objects since they are ancestors of no objects (except Misc or I/O). This function rather expects an intermediate level depth, such as the depth of Packages, Cores, or Caches. </dd></dl>
+
+</div>
+</div>
+<a id="ga70f0c7583291da707c15ae4daa850f41"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga70f0c7583291da707c15ae4daa850f41">&#9670;&nbsp;</a></span>hwloc_get_ancestor_obj_by_type()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_ancestor_obj_by_type </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
+          <td class="paramname"><em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>obj</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the ancestor object of <code>obj</code> with type <code>type</code>. </p>
+<dl class="section note"><dt>Note</dt><dd><code>type</code> should not be <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661" title="Processing Unit, or (Logical) Processor. An execution unit (may share a core with some other logical ...">HWLOC_OBJ_PU</a> or <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a" title="NUMA node. An object that contains memory that is directly and byte-accessible to the host processors...">HWLOC_OBJ_NUMANODE</a> since these objects are ancestors of no objects (except Misc or I/O). This function rather expects an intermediate object type, such as <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55ab16ab8c0dbffc234921d86f3dfb63129" title="Physical package. The physical package that usually gets inserted into a socket on the motherboard....">HWLOC_OBJ_PACKAGE</a>, <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55ac793958f330bca371aa1535de8aff45f" title="Core. A computation unit (may be shared by several PUs, aka logical processors).">HWLOC_OBJ_CORE</a>, etc. </dd></dl>
+
+</div>
+</div>
+<a id="gab1fa883021928b5c476911c4102e9be3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gab1fa883021928b5c476911c4102e9be3">&#9670;&nbsp;</a></span>hwloc_get_common_ancestor_obj()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_common_ancestor_obj </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>obj1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>obj2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the common parent object to objects <code>obj1</code> and <code>obj2</code>. </p>
+
+</div>
+</div>
+<a id="ga12d8565a3436c565e791ed02a0353621"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga12d8565a3436c565e791ed02a0353621">&#9670;&nbsp;</a></span>hwloc_get_next_child()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_next_child </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>prev</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Return the next child. </p>
+<p>Return the next child among the normal children list, then among the memory children list, then among the I/O children list, then among the Misc children list.</p>
+<p>If <code>prev</code> is <code>NULL</code>, return the first child.</p>
+<p>Return <code>NULL</code> when there is no next child. </p>
+
+</div>
+</div>
+<a id="ga408cf74f5bf9ed497911a320c7f8cc56"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga408cf74f5bf9ed497911a320c7f8cc56">&#9670;&nbsp;</a></span>hwloc_obj_is_in_subtree()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_obj_is_in_subtree </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>obj</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>subtree_root</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns true if <code>obj</code> is inside the subtree beginning with ancestor object <code>subtree_root</code>. </p>
+<dl class="section note"><dt>Note</dt><dd>This function cannot work if <code>obj</code> and <code>subtree_root</code> objects do not have CPU sets (I/O or Misc objects). </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00210.html b/doc/doxygen-doc/html/a00210.html
new file mode 100644
index 00000000..f777cf75
--- /dev/null
+++ b/doc/doxygen-doc/html/a00210.html
@@ -0,0 +1,206 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Kinds of object Type</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Kinds of object Type</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga52ef38431eba383b048b98c669b59a16"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html#ga52ef38431eba383b048b98c669b59a16">hwloc_obj_type_is_normal</a> (<a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
+<tr class="separator:ga52ef38431eba383b048b98c669b59a16"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac8a954ed37a4376097234c828068cbef"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html#gac8a954ed37a4376097234c828068cbef">hwloc_obj_type_is_io</a> (<a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
+<tr class="separator:gac8a954ed37a4376097234c828068cbef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1d074390c8a3dc3088d84f73fb73f966"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html#ga1d074390c8a3dc3088d84f73fb73f966">hwloc_obj_type_is_memory</a> (<a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
+<tr class="separator:ga1d074390c8a3dc3088d84f73fb73f966"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2ed589bea28711e80b92066510a5607d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html#ga2ed589bea28711e80b92066510a5607d">hwloc_obj_type_is_cache</a> (<a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
+<tr class="separator:ga2ed589bea28711e80b92066510a5607d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga395e48cd221d107e5891689624e1aec4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html#ga395e48cd221d107e5891689624e1aec4">hwloc_obj_type_is_dcache</a> (<a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
+<tr class="separator:ga395e48cd221d107e5891689624e1aec4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8abcee67b9b074332c1866405a3648a9"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html#ga8abcee67b9b074332c1866405a3648a9">hwloc_obj_type_is_icache</a> (<a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
+<tr class="separator:ga8abcee67b9b074332c1866405a3648a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Each object type is either Normal (i.e. <a class="el" href="a00210.html#ga52ef38431eba383b048b98c669b59a16" title="Check whether an object type is Normal.">hwloc_obj_type_is_normal()</a> returns 1), or Memory (i.e. <a class="el" href="a00210.html#ga1d074390c8a3dc3088d84f73fb73f966" title="Check whether an object type is Memory.">hwloc_obj_type_is_memory()</a> returns 1) or I/O (i.e. <a class="el" href="a00210.html#gac8a954ed37a4376097234c828068cbef" title="Check whether an object type is I/O.">hwloc_obj_type_is_io()</a> returns 1) or Misc (i.e. equal to <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d" title="Miscellaneous objects (filtered out by default). Objects without particular meaning,...">HWLOC_OBJ_MISC</a>). It cannot be of more than one of these kinds. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga2ed589bea28711e80b92066510a5607d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga2ed589bea28711e80b92066510a5607d">&#9670;&nbsp;</a></span>hwloc_obj_type_is_cache()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_obj_type_is_cache </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
+          <td class="paramname"><em>type</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Check whether an object type is a CPU Cache (Data, Unified or Instruction). </p>
+<p>Memory-side caches are not CPU caches.</p>
+<dl class="section return"><dt>Returns</dt><dd>1 if an object of type <code>type</code> is a Cache, 0 otherwise. </dd></dl>
+
+</div>
+</div>
+<a id="ga395e48cd221d107e5891689624e1aec4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga395e48cd221d107e5891689624e1aec4">&#9670;&nbsp;</a></span>hwloc_obj_type_is_dcache()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_obj_type_is_dcache </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
+          <td class="paramname"><em>type</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Check whether an object type is a CPU Data or Unified Cache. </p>
+<p>Memory-side caches are not CPU caches.</p>
+<dl class="section return"><dt>Returns</dt><dd>1 if an object of type <code>type</code> is a CPU Data or Unified Cache, 0 otherwise. </dd></dl>
+
+</div>
+</div>
+<a id="ga8abcee67b9b074332c1866405a3648a9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga8abcee67b9b074332c1866405a3648a9">&#9670;&nbsp;</a></span>hwloc_obj_type_is_icache()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_obj_type_is_icache </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
+          <td class="paramname"><em>type</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Check whether an object type is a CPU Instruction Cache,. </p>
+<p>Memory-side caches are not CPU caches.</p>
+<dl class="section return"><dt>Returns</dt><dd>1 if an object of type <code>type</code> is a CPU Instruction Cache, 0 otherwise. </dd></dl>
+
+</div>
+</div>
+<a id="gac8a954ed37a4376097234c828068cbef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gac8a954ed37a4376097234c828068cbef">&#9670;&nbsp;</a></span>hwloc_obj_type_is_io()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_obj_type_is_io </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
+          <td class="paramname"><em>type</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Check whether an object type is I/O. </p>
+<p>I/O objects are objects attached to their parents in the I/O children list. This current includes Bridges, PCI and OS devices.</p>
+<dl class="section return"><dt>Returns</dt><dd>1 if an object of type <code>type</code> is a I/O object, 0 otherwise. </dd></dl>
+
+</div>
+</div>
+<a id="ga1d074390c8a3dc3088d84f73fb73f966"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga1d074390c8a3dc3088d84f73fb73f966">&#9670;&nbsp;</a></span>hwloc_obj_type_is_memory()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_obj_type_is_memory </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
+          <td class="paramname"><em>type</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Check whether an object type is Memory. </p>
+<p>Memory objects are objects attached to their parents in the Memory children list. This current includes NUMA nodes and Memory-side caches.</p>
+<dl class="section return"><dt>Returns</dt><dd>1 if an object of type <code>type</code> is a Memory object, 0 otherwise. </dd></dl>
+
+</div>
+</div>
+<a id="ga52ef38431eba383b048b98c669b59a16"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga52ef38431eba383b048b98c669b59a16">&#9670;&nbsp;</a></span>hwloc_obj_type_is_normal()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_obj_type_is_normal </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
+          <td class="paramname"><em>type</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Check whether an object type is Normal. </p>
+<p>Normal objects are objects of the main CPU hierarchy (Machine, Package, Core, PU, CPU caches, etc.), but they are not NUMA nodes, I/O devices or Misc objects.</p>
+<p>They are attached to parent as Normal children, not as Memory, I/O or Misc children.</p>
+<dl class="section return"><dt>Returns</dt><dd>1 if an object of type <code>type</code> is a Normal object, 0 otherwise. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00211.html b/doc/doxygen-doc/html/a00211.html
new file mode 100644
index 00000000..1383a1cd
--- /dev/null
+++ b/doc/doxygen-doc/html/a00211.html
@@ -0,0 +1,194 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Looking at Cache Objects</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Looking at Cache Objects</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gad108a09ce400222fe45545257d575489"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#gad108a09ce400222fe45545257d575489">hwloc_get_cache_type_depth</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned cachelevel, <a class="el" href="a00196.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a> cachetype)</td></tr>
+<tr class="separator:gad108a09ce400222fe45545257d575489"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac4cd480a5deaa4ada047fdd11ae4c070"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#gac4cd480a5deaa4ada047fdd11ae4c070">hwloc_get_cache_covering_cpuset</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set)</td></tr>
+<tr class="separator:gac4cd480a5deaa4ada047fdd11ae4c070"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga36f48c32837c7a70b424706e213dcd71"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga36f48c32837c7a70b424706e213dcd71">hwloc_get_shared_cache_covering_obj</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj)</td></tr>
+<tr class="separator:ga36f48c32837c7a70b424706e213dcd71"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="gac4cd480a5deaa4ada047fdd11ae4c070"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gac4cd480a5deaa4ada047fdd11ae4c070">&#9670;&nbsp;</a></span>hwloc_get_cache_covering_cpuset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_cache_covering_cpuset </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the first data (or unified) cache covering a cpuset <code>set</code>. </p>
+<dl class="section return"><dt>Returns</dt><dd><code>NULL</code> if no cache matches. </dd></dl>
+
+</div>
+</div>
+<a id="gad108a09ce400222fe45545257d575489"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gad108a09ce400222fe45545257d575489">&#9670;&nbsp;</a></span>hwloc_get_cache_type_depth()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_get_cache_type_depth </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>cachelevel</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00196.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a>&#160;</td>
+          <td class="paramname"><em>cachetype</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Find the depth of cache objects matching cache level and type. </p>
+<p>Return the depth of the topology level that contains cache objects whose attributes match <code>cachelevel</code> and <code>cachetype</code>.</p>
+<p>This function is identical to calling <a class="el" href="a00199.html#ga8bec782e21be313750da70cf7428b374" title="Returns the depth of objects of type type.">hwloc_get_type_depth()</a> with the corresponding type such as <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55afa834a85d9e53836cf0db6d0bd8329b4" title="Level 1 instruction Cache (filtered out by default).">HWLOC_OBJ_L1ICACHE</a>, except that it may also return a Unified cache when looking for an instruction cache.</p>
+<p>If no cache level matches, <a class="el" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad" title="No object of given type exists in the topology.">HWLOC_TYPE_DEPTH_UNKNOWN</a> is returned.</p>
+<p>If <code>cachetype</code> is <a class="el" href="a00196.html#gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a" title="Unified cache.">HWLOC_OBJ_CACHE_UNIFIED</a>, the depth of the unique matching unified cache level is returned.</p>
+<p>If <code>cachetype</code> is <a class="el" href="a00196.html#gga791c9875c8fe20f3e1e5871e0657e59bacac60ecad4206f85aeb79bef1604b488" title="Data cache.">HWLOC_OBJ_CACHE_DATA</a> or <a class="el" href="a00196.html#gga791c9875c8fe20f3e1e5871e0657e59ba6f98b0d422b38ba90c5f5c79a11b0658" title="Instruction cache (filtered out by default).">HWLOC_OBJ_CACHE_INSTRUCTION</a>, either a matching cache, or a unified cache is returned.</p>
+<p>If <code>cachetype</code> is <code>-1</code>, it is ignored and multiple levels may match. The function returns either the depth of a uniquely matching level or <a class="el" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c" title="Objects of given type exist at different depth in the topology (only for Groups).">HWLOC_TYPE_DEPTH_MULTIPLE</a>. </p>
+
+</div>
+</div>
+<a id="ga36f48c32837c7a70b424706e213dcd71"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga36f48c32837c7a70b424706e213dcd71">&#9670;&nbsp;</a></span>hwloc_get_shared_cache_covering_obj()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_shared_cache_covering_obj </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>obj</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the first data (or unified) cache shared between an object and somebody else. </p>
+<dl class="section return"><dt>Returns</dt><dd><code>NULL</code> if no cache matches or if an invalid object is given. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00212.html b/doc/doxygen-doc/html/a00212.html
new file mode 100644
index 00000000..b59696ed
--- /dev/null
+++ b/doc/doxygen-doc/html/a00212.html
@@ -0,0 +1,418 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Finding objects, miscellaneous helpers</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Finding objects, miscellaneous helpers</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga050646458efc8ca1120d9f124c5ad861"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00212.html#ga050646458efc8ca1120d9f124c5ad861">hwloc_bitmap_singlify_per_core</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> cpuset, unsigned which)</td></tr>
+<tr class="separator:ga050646458efc8ca1120d9f124c5ad861"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga751c238a4931db5cc0ca3181b7dd7479"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00212.html#ga751c238a4931db5cc0ca3181b7dd7479">hwloc_get_pu_obj_by_os_index</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned os_index)</td></tr>
+<tr class="separator:ga751c238a4931db5cc0ca3181b7dd7479"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab89d9ed9edfaa3dd526fb6ee1a1618ea"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00212.html#gab89d9ed9edfaa3dd526fb6ee1a1618ea">hwloc_get_numanode_obj_by_os_index</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned os_index)</td></tr>
+<tr class="separator:gab89d9ed9edfaa3dd526fb6ee1a1618ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2cd22a34360643f7f5bad09576dec205"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00212.html#ga2cd22a34360643f7f5bad09576dec205">hwloc_get_closest_objs</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> src, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *restrict objs, unsigned max)</td></tr>
+<tr class="separator:ga2cd22a34360643f7f5bad09576dec205"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7a0c1046851f7a88bd52f5a1d4ba0a97"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00212.html#ga7a0c1046851f7a88bd52f5a1d4ba0a97">hwloc_get_obj_below_by_type</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type1, unsigned idx1, <a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type2, unsigned idx2)</td></tr>
+<tr class="separator:ga7a0c1046851f7a88bd52f5a1d4ba0a97"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacb51295ff3fbd3a96f990f20c6492b1d"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00212.html#gacb51295ff3fbd3a96f990f20c6492b1d">hwloc_get_obj_below_array_by_type</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int nr, <a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> *typev, unsigned *idxv)</td></tr>
+<tr class="separator:gacb51295ff3fbd3a96f990f20c6492b1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab5df3ad1e8565ea0c2cf06412f6f6233"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00212.html#gab5df3ad1e8565ea0c2cf06412f6f6233">hwloc_get_obj_with_same_locality</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> src, <a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, const char *subtype, const char *nameprefix, unsigned long flags)</td></tr>
+<tr class="separator:gab5df3ad1e8565ea0c2cf06412f6f6233"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Be sure to see the figure in <a class="el" href="a00395.html">Terms and Definitions</a> that shows a complete topology tree, including depths, child/sibling/cousin relationships, and an example of an asymmetric topology where one package has fewer caches than its peers. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga050646458efc8ca1120d9f124c5ad861"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga050646458efc8ca1120d9f124c5ad861">&#9670;&nbsp;</a></span>hwloc_bitmap_singlify_per_core()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_singlify_per_core </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>cpuset</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>which</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Remove simultaneous multithreading PUs from a CPU set. </p>
+<p>For each core in <code>topology</code>, if <code>cpuset</code> contains some PUs of that core, modify <code>cpuset</code> to only keep a single PU for that core.</p>
+<p><code>which</code> specifies which PU will be kept. PU are considered in physical index order. If 0, for each core, the function keeps the first PU that was originally set in <code>cpuset</code>.</p>
+<p>If <code>which</code> is larger than the number of PUs in a core there were originally set in <code>cpuset</code>, no PU is kept for that core.</p>
+<dl class="section note"><dt>Note</dt><dd>PUs that are not below a Core object are ignored (for instance if the topology does not contain any Core object). None of them is removed from <code>cpuset</code>. </dd></dl>
+
+</div>
+</div>
+<a id="ga2cd22a34360643f7f5bad09576dec205"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga2cd22a34360643f7f5bad09576dec205">&#9670;&nbsp;</a></span>hwloc_get_closest_objs()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned hwloc_get_closest_objs </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>src</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *restrict&#160;</td>
+          <td class="paramname"><em>objs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>max</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Do a depth-first traversal of the topology to find and sort. </p>
+<p>all objects that are at the same depth than <code>src</code>. Report in <code>objs</code> up to <code>max</code> physically closest ones to <code>src</code>.</p>
+<dl class="section return"><dt>Returns</dt><dd>the number of objects returned in <code>objs</code>.</dd>
+<dd>
+0 if <code>src</code> is an I/O object.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function requires the <code>src</code> object to have a CPU set. </dd></dl>
+
+</div>
+</div>
+<a id="gab89d9ed9edfaa3dd526fb6ee1a1618ea"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gab89d9ed9edfaa3dd526fb6ee1a1618ea">&#9670;&nbsp;</a></span>hwloc_get_numanode_obj_by_os_index()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_numanode_obj_by_os_index </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>os_index</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the object of type <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a" title="NUMA node. An object that contains memory that is directly and byte-accessible to the host processors...">HWLOC_OBJ_NUMANODE</a> with <code>os_index</code>. </p>
+<p>This function is useful for converting a nodeset into the NUMA node objects it contains. When retrieving the current binding (e.g. with <a class="el" href="a00203.html#gae21f0a1a884929c784bebf070252aa56" title="Query the default memory binding policy and physical locality of the current process or thread.">hwloc_get_membind()</a> with HWLOC_MEMBIND_BYNODESET), one may iterate over the bits of the resulting nodeset with <a class="el" href="a00217.html#ga3f6861045a8029ade373510ffa727d2a" title="Loop macro iterating on bitmap bitmap.">hwloc_bitmap_foreach_begin()</a>, and find the corresponding NUMA nodes with this function. </p>
+
+</div>
+</div>
+<a id="gacb51295ff3fbd3a96f990f20c6492b1d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gacb51295ff3fbd3a96f990f20c6492b1d">&#9670;&nbsp;</a></span>hwloc_get_obj_below_array_by_type()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_obj_below_array_by_type </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>nr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> *&#160;</td>
+          <td class="paramname"><em>typev</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned *&#160;</td>
+          <td class="paramname"><em>idxv</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Find an object below a chain of objects specified by types and indexes. </p>
+<p>This is a generalized version of <a class="el" href="a00212.html#ga7a0c1046851f7a88bd52f5a1d4ba0a97" title="Find an object below another object, both specified by types and indexes.">hwloc_get_obj_below_by_type()</a>.</p>
+<p>Arrays <code>typev</code> and <code>idxv</code> must contain <code>nr</code> types and indexes.</p>
+<p>Start from the top system object and walk the arrays <code>typev</code> and <code>idxv</code>. For each type and logical index couple in the arrays, look under the previously found object to find the index-th object of the given type. Indexes are specified within the parent, not withing the entire system.</p>
+<p>For instance, if nr is 3, typev contains NODE, PACKAGE and CORE, and idxv contains 0, 1 and 2, return the third core object below the second package below the first NUMA node.</p>
+<dl class="section note"><dt>Note</dt><dd>This function requires all these objects and the root object to have a CPU set. </dd></dl>
+
+</div>
+</div>
+<a id="ga7a0c1046851f7a88bd52f5a1d4ba0a97"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga7a0c1046851f7a88bd52f5a1d4ba0a97">&#9670;&nbsp;</a></span>hwloc_get_obj_below_by_type()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_obj_below_by_type </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
+          <td class="paramname"><em>type1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>idx1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
+          <td class="paramname"><em>type2</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>idx2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Find an object below another object, both specified by types and indexes. </p>
+<p>Start from the top system object and find object of type <code>type1</code> and logical index <code>idx1</code>. Then look below this object and find another object of type <code>type2</code> and logical index <code>idx2</code>. Indexes are specified within the parent, not withing the entire system.</p>
+<p>For instance, if type1 is PACKAGE, idx1 is 2, type2 is CORE and idx2 is 3, return the fourth core object below the third package.</p>
+<dl class="section note"><dt>Note</dt><dd>This function requires these objects to have a CPU set. </dd></dl>
+
+</div>
+</div>
+<a id="gab5df3ad1e8565ea0c2cf06412f6f6233"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gab5df3ad1e8565ea0c2cf06412f6f6233">&#9670;&nbsp;</a></span>hwloc_get_obj_with_same_locality()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_obj_with_same_locality </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>src</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
+          <td class="paramname"><em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>subtype</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>nameprefix</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Return an object of a different type with same locality. </p>
+<p>If the source object <code>src</code> is a normal or memory type, this function returns an object of type <code>type</code> with same CPU and node sets, either below or above in the hierarchy.</p>
+<p>If the source object <code>src</code> is a PCI or an OS device within a PCI device, the function may either return that PCI device, or another OS device in the same PCI parent. This may for instance be useful for converting between OS devices such as "nvml0" or "rsmi1" used in distance structures into the the PCI device, or the CUDA or OpenCL OS device that correspond to the same physical card.</p>
+<p>If not <code>NULL</code>, parameter <code>subtype</code> only select objects whose subtype attribute exists and is <code>subtype</code> (case-insensitively), for instance "OpenCL" or "CUDA".</p>
+<p>If not <code>NULL</code>, parameter <code>nameprefix</code> only selects objects whose name attribute exists and starts with <code>nameprefix</code> (case-insensitively), for instance "rsmi" for matching "rsmi0".</p>
+<p>If multiple objects match, the first one is returned.</p>
+<p>This function will not walk the hierarchy across bridges since the PCI locality may become different. This function cannot also convert between normal/memory objects and I/O or Misc objects.</p>
+<p><code>flags</code> must be <code>0</code> for now.</p>
+<dl class="section return"><dt>Returns</dt><dd>An object with identical locality, matching <code>subtype</code> and <code>nameprefix</code> if any.</dd>
+<dd>
+<code>NULL</code> if no matching object could be found, or if the source object and target type are incompatible, for instance if converting between CPU and I/O objects. </dd></dl>
+
+</div>
+</div>
+<a id="ga751c238a4931db5cc0ca3181b7dd7479"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga751c238a4931db5cc0ca3181b7dd7479">&#9670;&nbsp;</a></span>hwloc_get_pu_obj_by_os_index()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_pu_obj_by_os_index </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>os_index</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the object of type <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661" title="Processing Unit, or (Logical) Processor. An execution unit (may share a core with some other logical ...">HWLOC_OBJ_PU</a> with <code>os_index</code>. </p>
+<p>This function is useful for converting a CPU set into the PU objects it contains. When retrieving the current binding (e.g. with <a class="el" href="a00202.html#gacba7ecb979baf824d5240fa2cb2a8be6" title="Get current process or thread binding.">hwloc_get_cpubind()</a>), one may iterate over the bits of the resulting CPU set with <a class="el" href="a00217.html#ga3f6861045a8029ade373510ffa727d2a" title="Loop macro iterating on bitmap bitmap.">hwloc_bitmap_foreach_begin()</a>, and find the corresponding PUs with this function. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00213.html b/doc/doxygen-doc/html/a00213.html
new file mode 100644
index 00000000..81798205
--- /dev/null
+++ b/doc/doxygen-doc/html/a00213.html
@@ -0,0 +1,164 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Distributing items over a topology</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Distributing items over a topology</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:ga8b835295a52b6768a5e6c8abb1f9c54d"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00213.html#ga8b835295a52b6768a5e6c8abb1f9c54d">hwloc_distrib_flags_e</a> { <a class="el" href="a00213.html#gga8b835295a52b6768a5e6c8abb1f9c54da2ca08404bfbebe9ed5f34c3d7635425a">HWLOC_DISTRIB_FLAG_REVERSE</a>
+ }</td></tr>
+<tr class="separator:ga8b835295a52b6768a5e6c8abb1f9c54d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga7b0c28f797c2ff17fa2f244ebbd55b33"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00213.html#ga7b0c28f797c2ff17fa2f244ebbd55b33">hwloc_distrib</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *roots, unsigned n_roots, <a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> *set, unsigned n, int until, unsigned long flags)</td></tr>
+<tr class="separator:ga7b0c28f797c2ff17fa2f244ebbd55b33"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a id="ga8b835295a52b6768a5e6c8abb1f9c54d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga8b835295a52b6768a5e6c8abb1f9c54d">&#9670;&nbsp;</a></span>hwloc_distrib_flags_e</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00213.html#ga8b835295a52b6768a5e6c8abb1f9c54d">hwloc_distrib_flags_e</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Flags to be given to <a class="el" href="a00213.html#ga7b0c28f797c2ff17fa2f244ebbd55b33" title="Distribute n items over the topology under roots.">hwloc_distrib()</a>. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga8b835295a52b6768a5e6c8abb1f9c54da2ca08404bfbebe9ed5f34c3d7635425a"></a>HWLOC_DISTRIB_FLAG_REVERSE&#160;</td><td class="fielddoc"><p>Distrib in reverse order, starting from the last objects. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga7b0c28f797c2ff17fa2f244ebbd55b33"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga7b0c28f797c2ff17fa2f244ebbd55b33">&#9670;&nbsp;</a></span>hwloc_distrib()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_distrib </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *&#160;</td>
+          <td class="paramname"><em>roots</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>n_roots</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> *&#160;</td>
+          <td class="paramname"><em>set</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>n</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>until</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Distribute <code>n</code> items over the topology under <code>roots</code>. </p>
+<p>Array <code>set</code> will be filled with <code>n</code> cpusets recursively distributed linearly over the topology under objects <code>roots</code>, down to depth <code>until</code> (which can be INT_MAX to distribute down to the finest level).</p>
+<p><code>n_roots</code> is usually 1 and <code>roots</code> only contains the topology root object so as to distribute over the entire topology.</p>
+<p>This is typically useful when an application wants to distribute <code>n</code> threads over a machine, giving each of them as much private cache as possible and keeping them locally in number order.</p>
+<p>The caller may typically want to also call <a class="el" href="a00217.html#gaa611a77c092e679246afdf9a60d5db8b" title="Keep a single index among those set in bitmap bitmap.">hwloc_bitmap_singlify()</a> before binding a thread so that it does not move at all.</p>
+<p><code>flags</code> should be 0 or a OR'ed set of <a class="el" href="a00213.html#ga8b835295a52b6768a5e6c8abb1f9c54d" title="Flags to be given to hwloc_distrib().">hwloc_distrib_flags_e</a>.</p>
+<dl class="section note"><dt>Note</dt><dd>This function requires the <code>roots</code> objects to have a CPU set. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00214.html b/doc/doxygen-doc/html/a00214.html
new file mode 100644
index 00000000..f2e0b2bd
--- /dev/null
+++ b/doc/doxygen-doc/html/a00214.html
@@ -0,0 +1,220 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): CPU and node sets of entire topologies</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">CPU and node sets of entire topologies</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gaee30e03391c1ed7dfd617fb5c7bbb033"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
+<tr class="separator:gaee30e03391c1ed7dfd617fb5c7bbb033"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga79212faa07b70dd26588941b17d9fa82"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga79212faa07b70dd26588941b17d9fa82">hwloc_topology_get_topology_cpuset</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
+<tr class="separator:ga79212faa07b70dd26588941b17d9fa82"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga517d5d68ec9f24583d8933aab713be8e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga517d5d68ec9f24583d8933aab713be8e">hwloc_topology_get_allowed_cpuset</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
+<tr class="separator:ga517d5d68ec9f24583d8933aab713be8e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga773fd98949461ef4c1e3170bb0c0418f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00195.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga773fd98949461ef4c1e3170bb0c0418f">hwloc_topology_get_complete_nodeset</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
+<tr class="separator:ga773fd98949461ef4c1e3170bb0c0418f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga3fd37303e99ace8b0d0ea03f95f8c514"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00195.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga3fd37303e99ace8b0d0ea03f95f8c514">hwloc_topology_get_topology_nodeset</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
+<tr class="separator:ga3fd37303e99ace8b0d0ea03f95f8c514"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga21a4d7237a11e76b912ed4524ab78cbd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00195.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga21a4d7237a11e76b912ed4524ab78cbd">hwloc_topology_get_allowed_nodeset</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
+<tr class="separator:ga21a4d7237a11e76b912ed4524ab78cbd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga517d5d68ec9f24583d8933aab713be8e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga517d5d68ec9f24583d8933aab713be8e">&#9670;&nbsp;</a></span>hwloc_topology_get_allowed_cpuset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> hwloc_topology_get_allowed_cpuset </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Get allowed CPU set. </p>
+<dl class="section return"><dt>Returns</dt><dd>the CPU set of allowed processors of the system.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>If the topology flag <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258" title="Detect the whole system, ignore reservations, include disallowed objects.">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a> was not set, this is identical to <a class="el" href="a00214.html#ga79212faa07b70dd26588941b17d9fa82" title="Get topology CPU set.">hwloc_topology_get_topology_cpuset()</a>, which means all PUs are allowed.</dd>
+<dd>
+If <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258" title="Detect the whole system, ignore reservations, include disallowed objects.">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a> was set, applying <a class="el" href="a00217.html#gaefa070f9232857ba5a57297ea9a08ea2" title="Test whether bitmaps bitmap1 and bitmap2 intersects.">hwloc_bitmap_intersects()</a> on the result of this function and on an object cpuset checks whether there are allowed PUs inside that object. Applying <a class="el" href="a00217.html#ga674533016ffed922a28b4f0b49b82cd4" title="And bitmaps bitmap1 and bitmap2 and store the result in bitmap res.">hwloc_bitmap_and()</a> returns the list of these allowed PUs.</dd>
+<dd>
+The returned cpuset is not newly allocated and should thus not be changed or freed, <a class="el" href="a00217.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a> must be used to obtain a local copy. </dd></dl>
+
+</div>
+</div>
+<a id="ga21a4d7237a11e76b912ed4524ab78cbd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga21a4d7237a11e76b912ed4524ab78cbd">&#9670;&nbsp;</a></span>hwloc_topology_get_allowed_nodeset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00195.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> hwloc_topology_get_allowed_nodeset </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Get allowed node set. </p>
+<dl class="section return"><dt>Returns</dt><dd>the node set of allowed memory of the system.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>If the topology flag <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258" title="Detect the whole system, ignore reservations, include disallowed objects.">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a> was not set, this is identical to <a class="el" href="a00214.html#ga3fd37303e99ace8b0d0ea03f95f8c514" title="Get topology node set.">hwloc_topology_get_topology_nodeset()</a>, which means all NUMA nodes are allowed.</dd>
+<dd>
+If <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258" title="Detect the whole system, ignore reservations, include disallowed objects.">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a> was set, applying <a class="el" href="a00217.html#gaefa070f9232857ba5a57297ea9a08ea2" title="Test whether bitmaps bitmap1 and bitmap2 intersects.">hwloc_bitmap_intersects()</a> on the result of this function and on an object nodeset checks whether there are allowed NUMA nodes inside that object. Applying <a class="el" href="a00217.html#ga674533016ffed922a28b4f0b49b82cd4" title="And bitmaps bitmap1 and bitmap2 and store the result in bitmap res.">hwloc_bitmap_and()</a> returns the list of these allowed NUMA nodes.</dd>
+<dd>
+The returned nodeset is not newly allocated and should thus not be changed or freed, <a class="el" href="a00217.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a> must be used to obtain a local copy. </dd></dl>
+
+</div>
+</div>
+<a id="gaee30e03391c1ed7dfd617fb5c7bbb033"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaee30e03391c1ed7dfd617fb5c7bbb033">&#9670;&nbsp;</a></span>hwloc_topology_get_complete_cpuset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> hwloc_topology_get_complete_cpuset </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Get complete CPU set. </p>
+<dl class="section return"><dt>Returns</dt><dd>the complete CPU set of processors of the system.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>The returned cpuset is not newly allocated and should thus not be changed or freed; <a class="el" href="a00217.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a> must be used to obtain a local copy.</dd>
+<dd>
+This is equivalent to retrieving the root object complete CPU-set. </dd></dl>
+
+</div>
+</div>
+<a id="ga773fd98949461ef4c1e3170bb0c0418f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga773fd98949461ef4c1e3170bb0c0418f">&#9670;&nbsp;</a></span>hwloc_topology_get_complete_nodeset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00195.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> hwloc_topology_get_complete_nodeset </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Get complete node set. </p>
+<dl class="section return"><dt>Returns</dt><dd>the complete node set of memory of the system.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>The returned nodeset is not newly allocated and should thus not be changed or freed; <a class="el" href="a00217.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a> must be used to obtain a local copy.</dd>
+<dd>
+This is equivalent to retrieving the root object complete nodeset. </dd></dl>
+
+</div>
+</div>
+<a id="ga79212faa07b70dd26588941b17d9fa82"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga79212faa07b70dd26588941b17d9fa82">&#9670;&nbsp;</a></span>hwloc_topology_get_topology_cpuset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> hwloc_topology_get_topology_cpuset </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Get topology CPU set. </p>
+<dl class="section return"><dt>Returns</dt><dd>the CPU set of processors of the system for which hwloc provides topology information. This is equivalent to the cpuset of the system object.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>The returned cpuset is not newly allocated and should thus not be changed or freed; <a class="el" href="a00217.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a> must be used to obtain a local copy.</dd>
+<dd>
+This is equivalent to retrieving the root object CPU-set. </dd></dl>
+
+</div>
+</div>
+<a id="ga3fd37303e99ace8b0d0ea03f95f8c514"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga3fd37303e99ace8b0d0ea03f95f8c514">&#9670;&nbsp;</a></span>hwloc_topology_get_topology_nodeset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00195.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> hwloc_topology_get_topology_nodeset </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Get topology node set. </p>
+<dl class="section return"><dt>Returns</dt><dd>the node set of memory of the system for which hwloc provides topology information. This is equivalent to the nodeset of the system object.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>The returned nodeset is not newly allocated and should thus not be changed or freed; <a class="el" href="a00217.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a> must be used to obtain a local copy.</dd>
+<dd>
+This is equivalent to retrieving the root object nodeset. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00215.html b/doc/doxygen-doc/html/a00215.html
new file mode 100644
index 00000000..6da1431b
--- /dev/null
+++ b/doc/doxygen-doc/html/a00215.html
@@ -0,0 +1,158 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Converting between CPU sets and node sets</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Converting between CPU sets and node sets</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga185751c1653fedbeb7cc480840f38cde"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00215.html#ga185751c1653fedbeb7cc480840f38cde">hwloc_cpuset_to_nodeset</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> _cpuset, <a class="el" href="a00195.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a> nodeset)</td></tr>
+<tr class="separator:ga185751c1653fedbeb7cc480840f38cde"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad5ee8691e08a3538ea7633344c00456d"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00215.html#gad5ee8691e08a3538ea7633344c00456d">hwloc_cpuset_from_nodeset</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> _cpuset, <a class="el" href="a00195.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> nodeset)</td></tr>
+<tr class="separator:gad5ee8691e08a3538ea7633344c00456d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="gad5ee8691e08a3538ea7633344c00456d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gad5ee8691e08a3538ea7633344c00456d">&#9670;&nbsp;</a></span>hwloc_cpuset_from_nodeset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_cpuset_from_nodeset </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>_cpuset</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a>&#160;</td>
+          <td class="paramname"><em>nodeset</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Convert a NUMA node set into a CPU set. </p>
+<p>For each NUMA node included in the input <code>nodeset</code>, set the corresponding local PUs in the output <code>_cpuset</code>.</p>
+<p>If some CPUs have no local NUMA nodes, this function never sets their indexes in the output CPU set, even if a full node set is given in input.</p>
+<p>Hence the entire topology node set is converted into the set of all CPUs that have some local NUMA nodes. </p>
+
+</div>
+</div>
+<a id="ga185751c1653fedbeb7cc480840f38cde"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga185751c1653fedbeb7cc480840f38cde">&#9670;&nbsp;</a></span>hwloc_cpuset_to_nodeset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_cpuset_to_nodeset </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>_cpuset</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a>&#160;</td>
+          <td class="paramname"><em>nodeset</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Convert a CPU set into a NUMA node set. </p>
+<p>For each PU included in the input <code>_cpuset</code>, set the corresponding local NUMA node(s) in the output <code>nodeset</code>.</p>
+<p>If some NUMA nodes have no CPUs at all, this function never sets their indexes in the output node set, even if a full CPU set is given in input.</p>
+<p>Hence the entire topology CPU set is converted into the set of all nodes that have some local CPUs. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00216.html b/doc/doxygen-doc/html/a00216.html
new file mode 100644
index 00000000..5328b4d9
--- /dev/null
+++ b/doc/doxygen-doc/html/a00216.html
@@ -0,0 +1,367 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Finding I/O objects</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Finding I/O objects</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gaf139bb61375178e90cc3f1835b452ab6"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00216.html#gaf139bb61375178e90cc3f1835b452ab6">hwloc_get_non_io_ancestor_obj</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> ioobj)</td></tr>
+<tr class="separator:gaf139bb61375178e90cc3f1835b452ab6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga66470dabce9db19a57c5940a909d0baa"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00216.html#ga66470dabce9db19a57c5940a909d0baa">hwloc_get_next_pcidev</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> prev)</td></tr>
+<tr class="separator:ga66470dabce9db19a57c5940a909d0baa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacdbaf0db98872e224b7883a84bfb0455"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00216.html#gacdbaf0db98872e224b7883a84bfb0455">hwloc_get_pcidev_by_busid</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)</td></tr>
+<tr class="separator:gacdbaf0db98872e224b7883a84bfb0455"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga23a978469353134b3104b846fe2efceb"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00216.html#ga23a978469353134b3104b846fe2efceb">hwloc_get_pcidev_by_busidstring</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const char *busid)</td></tr>
+<tr class="separator:ga23a978469353134b3104b846fe2efceb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8b4584c8949e2c5f1c97ba7fe92b8145"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00216.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> prev)</td></tr>
+<tr class="separator:ga8b4584c8949e2c5f1c97ba7fe92b8145"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9dba22a3f4f701f2a46780ba9a0bbbe7"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00216.html#ga9dba22a3f4f701f2a46780ba9a0bbbe7">hwloc_get_next_bridge</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> prev)</td></tr>
+<tr class="separator:ga9dba22a3f4f701f2a46780ba9a0bbbe7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0d92a9462a3d317f29ecb4442a307fb1"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00216.html#ga0d92a9462a3d317f29ecb4442a307fb1">hwloc_bridge_covers_pcibus</a> (<a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> bridge, unsigned domain, unsigned bus)</td></tr>
+<tr class="separator:ga0d92a9462a3d317f29ecb4442a307fb1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga0d92a9462a3d317f29ecb4442a307fb1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga0d92a9462a3d317f29ecb4442a307fb1">&#9670;&nbsp;</a></span>hwloc_bridge_covers_pcibus()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_bridge_covers_pcibus </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>bridge</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>domain</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>bus</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ga9dba22a3f4f701f2a46780ba9a0bbbe7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga9dba22a3f4f701f2a46780ba9a0bbbe7">&#9670;&nbsp;</a></span>hwloc_get_next_bridge()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_next_bridge </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>prev</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the next bridge in the system. </p>
+<dl class="section return"><dt>Returns</dt><dd>the first bridge if <code>prev</code> is <code>NULL</code>. </dd></dl>
+
+</div>
+</div>
+<a id="ga8b4584c8949e2c5f1c97ba7fe92b8145"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga8b4584c8949e2c5f1c97ba7fe92b8145">&#9670;&nbsp;</a></span>hwloc_get_next_osdev()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_next_osdev </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>prev</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the next OS device in the system. </p>
+<dl class="section return"><dt>Returns</dt><dd>the first OS device if <code>prev</code> is <code>NULL</code>. </dd></dl>
+
+</div>
+</div>
+<a id="ga66470dabce9db19a57c5940a909d0baa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga66470dabce9db19a57c5940a909d0baa">&#9670;&nbsp;</a></span>hwloc_get_next_pcidev()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_next_pcidev </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>prev</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the next PCI device in the system. </p>
+<dl class="section return"><dt>Returns</dt><dd>the first PCI device if <code>prev</code> is <code>NULL</code>. </dd></dl>
+
+</div>
+</div>
+<a id="gaf139bb61375178e90cc3f1835b452ab6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaf139bb61375178e90cc3f1835b452ab6">&#9670;&nbsp;</a></span>hwloc_get_non_io_ancestor_obj()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_non_io_ancestor_obj </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>ioobj</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the first non-I/O ancestor object. </p>
+<p>Given the I/O object <code>ioobj</code>, find the smallest non-I/O ancestor object. This object (normal or memory) may then be used for binding because it has non-NULL CPU and node sets and because its locality is the same as <code>ioobj</code>.</p>
+<dl class="section note"><dt>Note</dt><dd>The resulting object is usually a normal object but it could also be a memory object (e.g. NUMA node) in future platforms if I/O objects ever get attached to memory instead of CPUs. </dd></dl>
+
+</div>
+</div>
+<a id="gacdbaf0db98872e224b7883a84bfb0455"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gacdbaf0db98872e224b7883a84bfb0455">&#9670;&nbsp;</a></span>hwloc_get_pcidev_by_busid()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_pcidev_by_busid </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>domain</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>bus</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>dev</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>func</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Find the PCI device object matching the PCI bus id given domain, bus device and function PCI bus id. </p>
+
+</div>
+</div>
+<a id="ga23a978469353134b3104b846fe2efceb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga23a978469353134b3104b846fe2efceb">&#9670;&nbsp;</a></span>hwloc_get_pcidev_by_busidstring()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_pcidev_by_busidstring </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>busid</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Find the PCI device object matching the PCI bus id given as a string xxxx:yy:zz.t or yy:zz.t. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00217.html b/doc/doxygen-doc/html/a00217.html
new file mode 100644
index 00000000..171e13f3
--- /dev/null
+++ b/doc/doxygen-doc/html/a00217.html
@@ -0,0 +1,1799 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): The bitmap API</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">The bitmap API</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:ga3f6861045a8029ade373510ffa727d2a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga3f6861045a8029ade373510ffa727d2a">hwloc_bitmap_foreach_begin</a>(id,  bitmap)</td></tr>
+<tr class="separator:ga3f6861045a8029ade373510ffa727d2a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gafcf3246db406218d4e155735b3fa6528"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#gafcf3246db406218d4e155735b3fa6528">hwloc_bitmap_foreach_end</a>()</td></tr>
+<tr class="separator:gafcf3246db406218d4e155735b3fa6528"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:gaa3c2bf4c776d603dcebbb61b0c923d84"><td class="memItemLeft" align="right" valign="top">typedef struct hwloc_bitmap_s *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a></td></tr>
+<tr class="separator:gaa3c2bf4c776d603dcebbb61b0c923d84"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae991a108af01d408be2776c5b2c467b2"><td class="memItemLeft" align="right" valign="top">typedef const struct hwloc_bitmap_s *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a></td></tr>
+<tr class="separator:gae991a108af01d408be2776c5b2c467b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gadece3d1eb5199fc2fb99bc7dcf1ccc05"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#gadece3d1eb5199fc2fb99bc7dcf1ccc05">hwloc_bitmap_alloc</a> (void)</td></tr>
+<tr class="separator:gadece3d1eb5199fc2fb99bc7dcf1ccc05"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga02853b4a224970587b9d7a0e20d857c0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga02853b4a224970587b9d7a0e20d857c0">hwloc_bitmap_alloc_full</a> (void)</td></tr>
+<tr class="separator:ga02853b4a224970587b9d7a0e20d857c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga156130d85b3a0674d6e0e6770fe68fbe"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga156130d85b3a0674d6e0e6770fe68fbe">hwloc_bitmap_free</a> (<a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap)</td></tr>
+<tr class="separator:ga156130d85b3a0674d6e0e6770fe68fbe"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae679434c1a5f41d3560a8a7e2c1b0dee"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#gae679434c1a5f41d3560a8a7e2c1b0dee">hwloc_bitmap_dup</a> (<a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
+<tr class="separator:gae679434c1a5f41d3560a8a7e2c1b0dee"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga72a29824798b48784b8217471ec8f14c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a> (<a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> dst, <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> src)</td></tr>
+<tr class="separator:ga72a29824798b48784b8217471ec8f14c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9511644657030a021dce9941e3cda583"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga9511644657030a021dce9941e3cda583">hwloc_bitmap_snprintf</a> (char *restrict buf, size_t buflen, <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
+<tr class="separator:ga9511644657030a021dce9941e3cda583"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0fece972134fdecf2da9bc7a11dd827e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga0fece972134fdecf2da9bc7a11dd827e">hwloc_bitmap_asprintf</a> (char **strp, <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
+<tr class="separator:ga0fece972134fdecf2da9bc7a11dd827e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga064a85c643a364b60acbfa0f3663fc18"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga064a85c643a364b60acbfa0f3663fc18">hwloc_bitmap_sscanf</a> (<a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, const char *restrict string)</td></tr>
+<tr class="separator:ga064a85c643a364b60acbfa0f3663fc18"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga3d06e6447edeb61e56a9ad83f31f0a37"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga3d06e6447edeb61e56a9ad83f31f0a37">hwloc_bitmap_list_snprintf</a> (char *restrict buf, size_t buflen, <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
+<tr class="separator:ga3d06e6447edeb61e56a9ad83f31f0a37"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga39c0f1b02053de66d205c9f8260b3665"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga39c0f1b02053de66d205c9f8260b3665">hwloc_bitmap_list_asprintf</a> (char **strp, <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
+<tr class="separator:ga39c0f1b02053de66d205c9f8260b3665"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf9314311d482c621e17c6a53a9fe993e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#gaf9314311d482c621e17c6a53a9fe993e">hwloc_bitmap_list_sscanf</a> (<a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, const char *restrict string)</td></tr>
+<tr class="separator:gaf9314311d482c621e17c6a53a9fe993e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5beb68a987fe48e5c5edef06ab260e14"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga5beb68a987fe48e5c5edef06ab260e14">hwloc_bitmap_taskset_snprintf</a> (char *restrict buf, size_t buflen, <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
+<tr class="separator:ga5beb68a987fe48e5c5edef06ab260e14"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga391312513f17c985d871f18367c59512"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga391312513f17c985d871f18367c59512">hwloc_bitmap_taskset_asprintf</a> (char **strp, <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
+<tr class="separator:ga391312513f17c985d871f18367c59512"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4f23db5041240e03e348752f8bd6ec2d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga4f23db5041240e03e348752f8bd6ec2d">hwloc_bitmap_taskset_sscanf</a> (<a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, const char *restrict string)</td></tr>
+<tr class="separator:ga4f23db5041240e03e348752f8bd6ec2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa97c5217613c8cae9862287170ea2132"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a> (<a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap)</td></tr>
+<tr class="separator:gaa97c5217613c8cae9862287170ea2132"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga07b2de8786b3cdb22f21d9dd42588275"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga07b2de8786b3cdb22f21d9dd42588275">hwloc_bitmap_fill</a> (<a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap)</td></tr>
+<tr class="separator:ga07b2de8786b3cdb22f21d9dd42588275"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga10be0840cdeb7ce26d862819dd303baa"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga10be0840cdeb7ce26d862819dd303baa">hwloc_bitmap_only</a> (<a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, unsigned id)</td></tr>
+<tr class="separator:ga10be0840cdeb7ce26d862819dd303baa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga06d505f8a1c0a536614f65f503ee6d93"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga06d505f8a1c0a536614f65f503ee6d93">hwloc_bitmap_allbut</a> (<a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, unsigned id)</td></tr>
+<tr class="separator:ga06d505f8a1c0a536614f65f503ee6d93"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad59b0ebeb29c1bfabbb2a379e55c1159"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#gad59b0ebeb29c1bfabbb2a379e55c1159">hwloc_bitmap_from_ulong</a> (<a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, unsigned long mask)</td></tr>
+<tr class="separator:gad59b0ebeb29c1bfabbb2a379e55c1159"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4947c46d47bcfcd3faf3f59569be3e37"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga4947c46d47bcfcd3faf3f59569be3e37">hwloc_bitmap_from_ith_ulong</a> (<a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, unsigned i, unsigned long mask)</td></tr>
+<tr class="separator:ga4947c46d47bcfcd3faf3f59569be3e37"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gabcfef22f6fc4d4b33f068dd91a1c38f5"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#gabcfef22f6fc4d4b33f068dd91a1c38f5">hwloc_bitmap_from_ulongs</a> (<a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, unsigned nr, const unsigned long *masks)</td></tr>
+<tr class="separator:gabcfef22f6fc4d4b33f068dd91a1c38f5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga062dbff93baeff3b425a7260c5463646"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a> (<a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, unsigned id)</td></tr>
+<tr class="separator:ga062dbff93baeff3b425a7260c5463646"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9c9a8433732fb9f24899e7aa4c014d7e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga9c9a8433732fb9f24899e7aa4c014d7e">hwloc_bitmap_set_range</a> (<a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, unsigned begin, int end)</td></tr>
+<tr class="separator:ga9c9a8433732fb9f24899e7aa4c014d7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga3daeed965c35c6d2fd4820a318219985"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga3daeed965c35c6d2fd4820a318219985">hwloc_bitmap_set_ith_ulong</a> (<a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, unsigned i, unsigned long mask)</td></tr>
+<tr class="separator:ga3daeed965c35c6d2fd4820a318219985"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf20bb350b6844d08931a064a73f86743"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#gaf20bb350b6844d08931a064a73f86743">hwloc_bitmap_clr</a> (<a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, unsigned id)</td></tr>
+<tr class="separator:gaf20bb350b6844d08931a064a73f86743"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga833776709df94d727f8c22304b3388cf"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga833776709df94d727f8c22304b3388cf">hwloc_bitmap_clr_range</a> (<a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, unsigned begin, int end)</td></tr>
+<tr class="separator:ga833776709df94d727f8c22304b3388cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa611a77c092e679246afdf9a60d5db8b"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#gaa611a77c092e679246afdf9a60d5db8b">hwloc_bitmap_singlify</a> (<a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap)</td></tr>
+<tr class="separator:gaa611a77c092e679246afdf9a60d5db8b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab6a6bae22a33ec6adfc169a953c13e6c"><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#gab6a6bae22a33ec6adfc169a953c13e6c">hwloc_bitmap_to_ulong</a> (<a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
+<tr class="separator:gab6a6bae22a33ec6adfc169a953c13e6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac92e6404f648d6b99d2c626b05b2ffa4"><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#gac92e6404f648d6b99d2c626b05b2ffa4">hwloc_bitmap_to_ith_ulong</a> (<a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap, unsigned i)</td></tr>
+<tr class="separator:gac92e6404f648d6b99d2c626b05b2ffa4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacd215a2348732de25d94a4ecd76d528c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#gacd215a2348732de25d94a4ecd76d528c">hwloc_bitmap_to_ulongs</a> (<a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap, unsigned nr, unsigned long *masks)</td></tr>
+<tr class="separator:gacd215a2348732de25d94a4ecd76d528c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac0744734d761d65c977aece565364908"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#gac0744734d761d65c977aece565364908">hwloc_bitmap_nr_ulongs</a> (<a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
+<tr class="separator:gac0744734d761d65c977aece565364908"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga11340dd487f110bb84f0a6e4ae90bd06"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga11340dd487f110bb84f0a6e4ae90bd06">hwloc_bitmap_isset</a> (<a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap, unsigned id)</td></tr>
+<tr class="separator:ga11340dd487f110bb84f0a6e4ae90bd06"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5b64be28f5a7176ed8ad0d6a90bdf108"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a> (<a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
+<tr class="separator:ga5b64be28f5a7176ed8ad0d6a90bdf108"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5fdcb8c19c336511c37076d649e74af4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga5fdcb8c19c336511c37076d649e74af4">hwloc_bitmap_isfull</a> (<a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
+<tr class="separator:ga5fdcb8c19c336511c37076d649e74af4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga3ec1ced43afadf8c0a7197320bc016ed"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga3ec1ced43afadf8c0a7197320bc016ed">hwloc_bitmap_first</a> (<a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
+<tr class="separator:ga3ec1ced43afadf8c0a7197320bc016ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaab7240b4b644693b775dad17b44ffd68"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#gaab7240b4b644693b775dad17b44ffd68">hwloc_bitmap_next</a> (<a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap, int prev)</td></tr>
+<tr class="separator:gaab7240b4b644693b775dad17b44ffd68"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga3d9b08b060a59bbab5a4ea6d0a1ed7a6"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga3d9b08b060a59bbab5a4ea6d0a1ed7a6">hwloc_bitmap_last</a> (<a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
+<tr class="separator:ga3d9b08b060a59bbab5a4ea6d0a1ed7a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0200466842c0e1f5da75e84dde460b10"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga0200466842c0e1f5da75e84dde460b10">hwloc_bitmap_weight</a> (<a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
+<tr class="separator:ga0200466842c0e1f5da75e84dde460b10"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae408841487b288e148a478ba0465c99e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#gae408841487b288e148a478ba0465c99e">hwloc_bitmap_first_unset</a> (<a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
+<tr class="separator:gae408841487b288e148a478ba0465c99e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9653af34d1460ef106b7df25af4cdca8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga9653af34d1460ef106b7df25af4cdca8">hwloc_bitmap_next_unset</a> (<a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap, int prev)</td></tr>
+<tr class="separator:ga9653af34d1460ef106b7df25af4cdca8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga45d49aeb45c7da631b1480a93dc3fc92"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga45d49aeb45c7da631b1480a93dc3fc92">hwloc_bitmap_last_unset</a> (<a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
+<tr class="separator:ga45d49aeb45c7da631b1480a93dc3fc92"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga120b8aefb9ce7ef349929656359b1859"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a> (<a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> res, <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2)</td></tr>
+<tr class="separator:ga120b8aefb9ce7ef349929656359b1859"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga674533016ffed922a28b4f0b49b82cd4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga674533016ffed922a28b4f0b49b82cd4">hwloc_bitmap_and</a> (<a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> res, <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2)</td></tr>
+<tr class="separator:ga674533016ffed922a28b4f0b49b82cd4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7ca5c72db65406b85aca032c8a990f9e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga7ca5c72db65406b85aca032c8a990f9e">hwloc_bitmap_andnot</a> (<a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> res, <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2)</td></tr>
+<tr class="separator:ga7ca5c72db65406b85aca032c8a990f9e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga205508218e09cb9befd0687f16409f09"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga205508218e09cb9befd0687f16409f09">hwloc_bitmap_xor</a> (<a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> res, <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2)</td></tr>
+<tr class="separator:ga205508218e09cb9befd0687f16409f09"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga84cfdb4f8ab8c1f7e097728e613a2a3f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga84cfdb4f8ab8c1f7e097728e613a2a3f">hwloc_bitmap_not</a> (<a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> res, <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
+<tr class="separator:ga84cfdb4f8ab8c1f7e097728e613a2a3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaefa070f9232857ba5a57297ea9a08ea2"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#gaefa070f9232857ba5a57297ea9a08ea2">hwloc_bitmap_intersects</a> (<a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2)</td></tr>
+<tr class="separator:gaefa070f9232857ba5a57297ea9a08ea2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0526e03db81956fb02acc8260b66d6a4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a> (<a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> sub_bitmap, <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> super_bitmap)</td></tr>
+<tr class="separator:ga0526e03db81956fb02acc8260b66d6a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga32376b1405e57472b73c3aa53bb39663"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga32376b1405e57472b73c3aa53bb39663">hwloc_bitmap_isequal</a> (<a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2)</td></tr>
+<tr class="separator:ga32376b1405e57472b73c3aa53bb39663"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa39cda1510ab721b5c012c76ead72365"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#gaa39cda1510ab721b5c012c76ead72365">hwloc_bitmap_compare_first</a> (<a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2)</td></tr>
+<tr class="separator:gaa39cda1510ab721b5c012c76ead72365"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga14cdbc0ef0a705e84999bd48a2e649f3"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga14cdbc0ef0a705e84999bd48a2e649f3">hwloc_bitmap_compare</a> (<a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2)</td></tr>
+<tr class="separator:ga14cdbc0ef0a705e84999bd48a2e649f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>The <a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84" title="Set of bits represented as an opaque pointer to an internal bitmap.">hwloc_bitmap_t</a> type represents a set of integers (positive or null). A bitmap may be of infinite size (all bits are set after some point). A bitmap may even be full if all bits are set.</p>
+<p>Bitmaps are used by hwloc for sets of OS processors (which may actually be hardware threads) as by <a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801" title="A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.">hwloc_cpuset_t</a> (a typedef for <a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84" title="Set of bits represented as an opaque pointer to an internal bitmap.">hwloc_bitmap_t</a>), or sets of NUMA memory nodes as <a class="el" href="a00195.html#ga37e35730fa7e775b5bb0afe893d6d508" title="A node set is a bitmap whose bits are set according to NUMA memory node physical OS indexes.">hwloc_nodeset_t</a> (also a typedef for <a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84" title="Set of bits represented as an opaque pointer to an internal bitmap.">hwloc_bitmap_t</a>). Those are used for cpuset and nodeset fields in the <a class="el" href="a00253.html" title="Structure of a topology object.">hwloc_obj</a> structure, see <a class="el" href="a00195.html">Object Sets (hwloc_cpuset_t and hwloc_nodeset_t)</a>.</p>
+<p><em>Both CPU and node sets are always indexed by OS physical number.</em> However users should usually not build CPU and node sets manually (e.g. with <a class="el" href="a00217.html#ga062dbff93baeff3b425a7260c5463646" title="Add index id in bitmap bitmap.">hwloc_bitmap_set()</a>). One should rather use existing object sets and combine them with <a class="el" href="a00217.html#ga120b8aefb9ce7ef349929656359b1859" title="Or bitmaps bitmap1 and bitmap2 and store the result in bitmap res.">hwloc_bitmap_or()</a>, etc. For instance, binding the current thread on a pair of cores may be performed with: </p><div class="fragment"><div class="line"><a class="code" href="a00253.html">hwloc_obj_t</a> core1 = ... , core2 = ... ;</div>
+<div class="line"><a class="code" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set = <a class="code" href="a00217.html#gadece3d1eb5199fc2fb99bc7dcf1ccc05">hwloc_bitmap_alloc</a>();</div>
+<div class="line"><a class="code" href="a00217.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a>(set, core1-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, core2-&gt;cpuset);</div>
+<div class="line"><a class="code" href="a00202.html#ga80bc07473a8edf840cae17bd7ec21d48">hwloc_set_cpubind</a>(topology, set, <a class="code" href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421">HWLOC_CPUBIND_THREAD</a>);</div>
+<div class="line"><a class="code" href="a00217.html#ga156130d85b3a0674d6e0e6770fe68fbe">hwloc_bitmap_free</a>(set);</div>
+<div class="ttc" id="aa00202_html_ga80bc07473a8edf840cae17bd7ec21d48"><div class="ttname"><a href="a00202.html#ga80bc07473a8edf840cae17bd7ec21d48">hwloc_set_cpubind</a></div><div class="ttdeci">int hwloc_set_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t set, int flags)</div><div class="ttdoc">Bind current process or thread on CPUs given in physical bitmap set.</div></div>
+<div class="ttc" id="aa00202_html_gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421"><div class="ttname"><a href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421">HWLOC_CPUBIND_THREAD</a></div><div class="ttdeci">@ HWLOC_CPUBIND_THREAD</div><div class="ttdoc">Bind current thread of current process.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1162</div></div>
+<div class="ttc" id="aa00217_html_ga120b8aefb9ce7ef349929656359b1859"><div class="ttname"><a href="a00217.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a></div><div class="ttdeci">int hwloc_bitmap_or(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Or bitmaps bitmap1 and bitmap2 and store the result in bitmap res.</div></div>
+<div class="ttc" id="aa00217_html_ga156130d85b3a0674d6e0e6770fe68fbe"><div class="ttname"><a href="a00217.html#ga156130d85b3a0674d6e0e6770fe68fbe">hwloc_bitmap_free</a></div><div class="ttdeci">void hwloc_bitmap_free(hwloc_bitmap_t bitmap)</div><div class="ttdoc">Free bitmap bitmap.</div></div>
+<div class="ttc" id="aa00217_html_gaa3c2bf4c776d603dcebbb61b0c923d84"><div class="ttname"><a href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a></div><div class="ttdeci">struct hwloc_bitmap_s * hwloc_bitmap_t</div><div class="ttdoc">Set of bits represented as an opaque pointer to an internal bitmap.</div><div class="ttdef"><b>Definition:</b> bitmap.h:68</div></div>
+<div class="ttc" id="aa00217_html_gadece3d1eb5199fc2fb99bc7dcf1ccc05"><div class="ttname"><a href="a00217.html#gadece3d1eb5199fc2fb99bc7dcf1ccc05">hwloc_bitmap_alloc</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_bitmap_alloc(void)</div><div class="ttdoc">Allocate a new empty bitmap.</div></div>
+<div class="ttc" id="aa00253_html"><div class="ttname"><a href="a00253.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:396</div></div>
+<div class="ttc" id="aa00253_html_a67925e0f2c47f50408fbdb9bddd0790f"><div class="ttname"><a href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">hwloc_obj::cpuset</a></div><div class="ttdeci">hwloc_cpuset_t cpuset</div><div class="ttdoc">CPUs covered by this object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:512</div></div>
+</div><!-- fragment --><dl class="section note"><dt>Note</dt><dd>Most functions below return an int that may be negative in case of error. The usual error case would be an internal failure to realloc/extend the storage of the bitmap (<code>errno</code> would be set to <code>ENOMEM</code>).</dd>
+<dd>
+Several examples of using the bitmap API are available under the doc/examples/ directory in the source tree. Regression tests such as tests/hwloc/hwloc_bitmap*.c also make intensive use of this API. </dd></dl>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a id="ga3f6861045a8029ade373510ffa727d2a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga3f6861045a8029ade373510ffa727d2a">&#9670;&nbsp;</a></span>hwloc_bitmap_foreach_begin</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define hwloc_bitmap_foreach_begin</td>
+          <td>(</td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">id, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">&#160;</td>
+          <td class="paramname">bitmap&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Loop macro iterating on bitmap <code>bitmap</code>. </p>
+<p>The loop must start with <a class="el" href="a00217.html#ga3f6861045a8029ade373510ffa727d2a" title="Loop macro iterating on bitmap bitmap.">hwloc_bitmap_foreach_begin()</a> and end with <a class="el" href="a00217.html#gafcf3246db406218d4e155735b3fa6528" title="End of loop macro iterating on a bitmap.">hwloc_bitmap_foreach_end()</a> followed by a terminating ';'.</p>
+<p><code>id</code> is the loop variable; it should be an unsigned int. The first iteration will set <code>id</code> to the lowest index in the bitmap. Successive iterations will iterate through, in order, all remaining indexes set in the bitmap. To be specific: each iteration will return a value for <code>id</code> such that hwloc_bitmap_isset(bitmap, id) is true.</p>
+<p>The assert prevents the loop from being infinite if the bitmap is infinitely set. </p>
+
+</div>
+</div>
+<a id="gafcf3246db406218d4e155735b3fa6528"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gafcf3246db406218d4e155735b3fa6528">&#9670;&nbsp;</a></span>hwloc_bitmap_foreach_end</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define hwloc_bitmap_foreach_end</td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>End of loop macro iterating on a bitmap. </p>
+<p>Needs a terminating ';'.</p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00217.html#ga3f6861045a8029ade373510ffa727d2a" title="Loop macro iterating on bitmap bitmap.">hwloc_bitmap_foreach_begin()</a> </dd></dl>
+
+</div>
+</div>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a id="gaa3c2bf4c776d603dcebbb61b0c923d84"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaa3c2bf4c776d603dcebbb61b0c923d84">&#9670;&nbsp;</a></span>hwloc_bitmap_t</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef struct hwloc_bitmap_s* <a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Set of bits represented as an opaque pointer to an internal bitmap. </p>
+
+</div>
+</div>
+<a id="gae991a108af01d408be2776c5b2c467b2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gae991a108af01d408be2776c5b2c467b2">&#9670;&nbsp;</a></span>hwloc_const_bitmap_t</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef const struct hwloc_bitmap_s* <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>a non-modifiable <a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84" title="Set of bits represented as an opaque pointer to an internal bitmap.">hwloc_bitmap_t</a> </p>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga06d505f8a1c0a536614f65f503ee6d93"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga06d505f8a1c0a536614f65f503ee6d93">&#9670;&nbsp;</a></span>hwloc_bitmap_allbut()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_allbut </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>id</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Fill the bitmap <code>and</code> clear the index <code>id</code>. </p>
+
+</div>
+</div>
+<a id="gadece3d1eb5199fc2fb99bc7dcf1ccc05"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gadece3d1eb5199fc2fb99bc7dcf1ccc05">&#9670;&nbsp;</a></span>hwloc_bitmap_alloc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> hwloc_bitmap_alloc </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Allocate a new empty bitmap. </p>
+<dl class="section return"><dt>Returns</dt><dd>A valid bitmap or <code>NULL</code>.</dd></dl>
+<p>The bitmap should be freed by a corresponding call to <a class="el" href="a00217.html#ga156130d85b3a0674d6e0e6770fe68fbe" title="Free bitmap bitmap.">hwloc_bitmap_free()</a>. </p>
+
+</div>
+</div>
+<a id="ga02853b4a224970587b9d7a0e20d857c0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga02853b4a224970587b9d7a0e20d857c0">&#9670;&nbsp;</a></span>hwloc_bitmap_alloc_full()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> hwloc_bitmap_alloc_full </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Allocate a new full bitmap. </p>
+
+</div>
+</div>
+<a id="ga674533016ffed922a28b4f0b49b82cd4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga674533016ffed922a28b4f0b49b82cd4">&#9670;&nbsp;</a></span>hwloc_bitmap_and()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_and </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>res</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>And bitmaps <code>bitmap1</code> and <code>bitmap2</code> and store the result in bitmap <code>res</code>. </p>
+<p><code>res</code> can be the same as <code>bitmap1</code> or <code>bitmap2</code> </p>
+
+</div>
+</div>
+<a id="ga7ca5c72db65406b85aca032c8a990f9e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga7ca5c72db65406b85aca032c8a990f9e">&#9670;&nbsp;</a></span>hwloc_bitmap_andnot()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_andnot </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>res</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>And bitmap <code>bitmap1</code> and the negation of <code>bitmap2</code> and store the result in bitmap <code>res</code>. </p>
+<p><code>res</code> can be the same as <code>bitmap1</code> or <code>bitmap2</code> </p>
+
+</div>
+</div>
+<a id="ga0fece972134fdecf2da9bc7a11dd827e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga0fece972134fdecf2da9bc7a11dd827e">&#9670;&nbsp;</a></span>hwloc_bitmap_asprintf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_asprintf </td>
+          <td>(</td>
+          <td class="paramtype">char **&#160;</td>
+          <td class="paramname"><em>strp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Stringify a bitmap into a newly allocated string. </p>
+<dl class="section return"><dt>Returns</dt><dd>-1 on error. </dd></dl>
+
+</div>
+</div>
+<a id="gaf20bb350b6844d08931a064a73f86743"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaf20bb350b6844d08931a064a73f86743">&#9670;&nbsp;</a></span>hwloc_bitmap_clr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_clr </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>id</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Remove index <code>id</code> from bitmap <code>bitmap</code>. </p>
+
+</div>
+</div>
+<a id="ga833776709df94d727f8c22304b3388cf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga833776709df94d727f8c22304b3388cf">&#9670;&nbsp;</a></span>hwloc_bitmap_clr_range()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_clr_range </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>begin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>end</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Remove indexes from <code>begin</code> to <code>end</code> in bitmap <code>bitmap</code>. </p>
+<p>If <code>end</code> is <code>-1</code>, the range is infinite. </p>
+
+</div>
+</div>
+<a id="ga14cdbc0ef0a705e84999bd48a2e649f3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga14cdbc0ef0a705e84999bd48a2e649f3">&#9670;&nbsp;</a></span>hwloc_bitmap_compare()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_compare </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Compare bitmaps <code>bitmap1</code> and <code>bitmap2</code> in lexicographic order. </p>
+<p>Lexicographic comparison of bitmaps, starting for their highest indexes. Compare last indexes first, then second, etc. The empty bitmap is considered lower than anything.</p>
+<dl class="section return"><dt>Returns</dt><dd>-1 if <code>bitmap1</code> is considered smaller than <code>bitmap2</code>. </dd>
+<dd>
+1 if <code>bitmap1</code> is considered larger than <code>bitmap2</code>. </dd>
+<dd>
+0 if bitmaps are equal (contrary to <a class="el" href="a00217.html#gaa39cda1510ab721b5c012c76ead72365" title="Compare bitmaps bitmap1 and bitmap2 using their lowest index.">hwloc_bitmap_compare_first()</a>).</dd></dl>
+<p>For instance comparing binary bitmaps 0011 and 0110 returns -1 (hence 0011 is considered smaller than 0110). Comparing 00101 and 01010 returns -1 too.</p>
+<dl class="section note"><dt>Note</dt><dd>This is different from the non-existing hwloc_bitmap_compare_last() which would only compare the highest index of each bitmap. </dd></dl>
+
+</div>
+</div>
+<a id="gaa39cda1510ab721b5c012c76ead72365"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaa39cda1510ab721b5c012c76ead72365">&#9670;&nbsp;</a></span>hwloc_bitmap_compare_first()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_compare_first </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Compare bitmaps <code>bitmap1</code> and <code>bitmap2</code> using their lowest index. </p>
+<p>A bitmap is considered smaller if its least significant bit is smaller. The empty bitmap is considered higher than anything (because its least significant bit does not exist).</p>
+<dl class="section return"><dt>Returns</dt><dd>-1 if <code>bitmap1</code> is considered smaller than <code>bitmap2</code>. </dd>
+<dd>
+1 if <code>bitmap1</code> is considered larger than <code>bitmap2</code>.</dd></dl>
+<p>For instance comparing binary bitmaps 0011 and 0110 returns -1 (hence 0011 is considered smaller than 0110) because least significant bit of 0011 (0001) is smaller than least significant bit of 0110 (0010). Comparing 01001 and 00110 would also return -1 for the same reason.</p>
+<dl class="section return"><dt>Returns</dt><dd>0 if bitmaps are considered equal, even if they are not strictly equal. They just need to have the same least significant bit. For instance, comparing binary bitmaps 0010 and 0110 returns 0 because they have the same least significant bit. </dd></dl>
+
+</div>
+</div>
+<a id="ga72a29824798b48784b8217471ec8f14c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga72a29824798b48784b8217471ec8f14c">&#9670;&nbsp;</a></span>hwloc_bitmap_copy()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_copy </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>dst</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>src</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Copy the contents of bitmap <code>src</code> into the already allocated bitmap <code>dst</code>. </p>
+
+</div>
+</div>
+<a id="gae679434c1a5f41d3560a8a7e2c1b0dee"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gae679434c1a5f41d3560a8a7e2c1b0dee">&#9670;&nbsp;</a></span>hwloc_bitmap_dup()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> hwloc_bitmap_dup </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Duplicate bitmap <code>bitmap</code> by allocating a new bitmap and copying <code>bitmap</code> contents. </p>
+<p>If <code>bitmap</code> is <code>NULL</code>, <code>NULL</code> is returned. </p>
+
+</div>
+</div>
+<a id="ga07b2de8786b3cdb22f21d9dd42588275"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga07b2de8786b3cdb22f21d9dd42588275">&#9670;&nbsp;</a></span>hwloc_bitmap_fill()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void hwloc_bitmap_fill </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Fill bitmap <code>bitmap</code> with all possible indexes (even if those objects don't exist or are otherwise unavailable) </p>
+
+</div>
+</div>
+<a id="ga3ec1ced43afadf8c0a7197320bc016ed"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga3ec1ced43afadf8c0a7197320bc016ed">&#9670;&nbsp;</a></span>hwloc_bitmap_first()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_first </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Compute the first index (least significant bit) in bitmap <code>bitmap</code>. </p>
+<dl class="section return"><dt>Returns</dt><dd>-1 if no index is set in <code>bitmap</code>. </dd></dl>
+
+</div>
+</div>
+<a id="gae408841487b288e148a478ba0465c99e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gae408841487b288e148a478ba0465c99e">&#9670;&nbsp;</a></span>hwloc_bitmap_first_unset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_first_unset </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Compute the first unset index (least significant bit) in bitmap <code>bitmap</code>. </p>
+<dl class="section return"><dt>Returns</dt><dd>-1 if no index is unset in <code>bitmap</code>. </dd></dl>
+
+</div>
+</div>
+<a id="ga156130d85b3a0674d6e0e6770fe68fbe"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga156130d85b3a0674d6e0e6770fe68fbe">&#9670;&nbsp;</a></span>hwloc_bitmap_free()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void hwloc_bitmap_free </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Free bitmap <code>bitmap</code>. </p>
+<p>If <code>bitmap</code> is <code>NULL</code>, no operation is performed. </p>
+
+</div>
+</div>
+<a id="ga4947c46d47bcfcd3faf3f59569be3e37"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga4947c46d47bcfcd3faf3f59569be3e37">&#9670;&nbsp;</a></span>hwloc_bitmap_from_ith_ulong()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_from_ith_ulong </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>i</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>mask</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Setup bitmap <code>bitmap</code> from unsigned long <code>mask</code> used as <code>i</code> -th subset. </p>
+
+</div>
+</div>
+<a id="gad59b0ebeb29c1bfabbb2a379e55c1159"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gad59b0ebeb29c1bfabbb2a379e55c1159">&#9670;&nbsp;</a></span>hwloc_bitmap_from_ulong()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_from_ulong </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>mask</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Setup bitmap <code>bitmap</code> from unsigned long <code>mask</code>. </p>
+
+</div>
+</div>
+<a id="gabcfef22f6fc4d4b33f068dd91a1c38f5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gabcfef22f6fc4d4b33f068dd91a1c38f5">&#9670;&nbsp;</a></span>hwloc_bitmap_from_ulongs()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_from_ulongs </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>nr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const unsigned long *&#160;</td>
+          <td class="paramname"><em>masks</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Setup bitmap <code>bitmap</code> from unsigned longs <code>masks</code> used as first <code>nr</code> subsets. </p>
+
+</div>
+</div>
+<a id="gaefa070f9232857ba5a57297ea9a08ea2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaefa070f9232857ba5a57297ea9a08ea2">&#9670;&nbsp;</a></span>hwloc_bitmap_intersects()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_intersects </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Test whether bitmaps <code>bitmap1</code> and <code>bitmap2</code> intersects. </p>
+<dl class="section return"><dt>Returns</dt><dd>1 if bitmaps intersect, 0 otherwise. </dd></dl>
+
+</div>
+</div>
+<a id="ga32376b1405e57472b73c3aa53bb39663"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga32376b1405e57472b73c3aa53bb39663">&#9670;&nbsp;</a></span>hwloc_bitmap_isequal()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_isequal </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Test whether bitmap <code>bitmap1</code> is equal to bitmap <code>bitmap2</code>. </p>
+<dl class="section return"><dt>Returns</dt><dd>1 if bitmaps are equal, 0 otherwise. </dd></dl>
+
+</div>
+</div>
+<a id="ga5fdcb8c19c336511c37076d649e74af4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga5fdcb8c19c336511c37076d649e74af4">&#9670;&nbsp;</a></span>hwloc_bitmap_isfull()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_isfull </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Test whether bitmap <code>bitmap</code> is completely full. </p>
+<dl class="section return"><dt>Returns</dt><dd>1 if bitmap is full, 0 otherwise.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>A full bitmap is always infinitely set. </dd></dl>
+
+</div>
+</div>
+<a id="ga0526e03db81956fb02acc8260b66d6a4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga0526e03db81956fb02acc8260b66d6a4">&#9670;&nbsp;</a></span>hwloc_bitmap_isincluded()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_isincluded </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>sub_bitmap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>super_bitmap</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Test whether bitmap <code>sub_bitmap</code> is part of bitmap <code>super_bitmap</code>. </p>
+<dl class="section return"><dt>Returns</dt><dd>1 if <code>sub_bitmap</code> is included in <code>super_bitmap</code>, 0 otherwise.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>The empty bitmap is considered included in any other bitmap. </dd></dl>
+
+</div>
+</div>
+<a id="ga11340dd487f110bb84f0a6e4ae90bd06"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga11340dd487f110bb84f0a6e4ae90bd06">&#9670;&nbsp;</a></span>hwloc_bitmap_isset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_isset </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>id</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Test whether index <code>id</code> is part of bitmap <code>bitmap</code>. </p>
+<dl class="section return"><dt>Returns</dt><dd>1 if the bit at index <code>id</code> is set in bitmap <code>bitmap</code>, 0 otherwise. </dd></dl>
+
+</div>
+</div>
+<a id="ga5b64be28f5a7176ed8ad0d6a90bdf108"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga5b64be28f5a7176ed8ad0d6a90bdf108">&#9670;&nbsp;</a></span>hwloc_bitmap_iszero()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_iszero </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Test whether bitmap <code>bitmap</code> is empty. </p>
+<dl class="section return"><dt>Returns</dt><dd>1 if bitmap is empty, 0 otherwise. </dd></dl>
+
+</div>
+</div>
+<a id="ga3d9b08b060a59bbab5a4ea6d0a1ed7a6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga3d9b08b060a59bbab5a4ea6d0a1ed7a6">&#9670;&nbsp;</a></span>hwloc_bitmap_last()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_last </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Compute the last index (most significant bit) in bitmap <code>bitmap</code>. </p>
+<dl class="section return"><dt>Returns</dt><dd>-1 if no index is set in <code>bitmap</code>, or if <code>bitmap</code> is infinitely set. </dd></dl>
+
+</div>
+</div>
+<a id="ga45d49aeb45c7da631b1480a93dc3fc92"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga45d49aeb45c7da631b1480a93dc3fc92">&#9670;&nbsp;</a></span>hwloc_bitmap_last_unset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_last_unset </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Compute the last unset index (most significant bit) in bitmap <code>bitmap</code>. </p>
+<dl class="section return"><dt>Returns</dt><dd>-1 if no index is unset in <code>bitmap</code>, or if <code>bitmap</code> is infinitely set. </dd></dl>
+
+</div>
+</div>
+<a id="ga39c0f1b02053de66d205c9f8260b3665"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga39c0f1b02053de66d205c9f8260b3665">&#9670;&nbsp;</a></span>hwloc_bitmap_list_asprintf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_list_asprintf </td>
+          <td>(</td>
+          <td class="paramtype">char **&#160;</td>
+          <td class="paramname"><em>strp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Stringify a bitmap into a newly allocated list string. </p>
+<dl class="section return"><dt>Returns</dt><dd>-1 on error. </dd></dl>
+
+</div>
+</div>
+<a id="ga3d06e6447edeb61e56a9ad83f31f0a37"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga3d06e6447edeb61e56a9ad83f31f0a37">&#9670;&nbsp;</a></span>hwloc_bitmap_list_snprintf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_list_snprintf </td>
+          <td>(</td>
+          <td class="paramtype">char *restrict&#160;</td>
+          <td class="paramname"><em>buf</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>buflen</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Stringify a bitmap in the list format. </p>
+<p>Lists are comma-separated indexes or ranges. Ranges are dash separated indexes. The last range may not have an ending indexes if the bitmap is infinitely set.</p>
+<p>Up to <code>buflen</code> characters may be written in buffer <code>buf</code>.</p>
+<p>If <code>buflen</code> is 0, <code>buf</code> may safely be <code>NULL</code>.</p>
+<dl class="section return"><dt>Returns</dt><dd>the number of characters that were actually written if not truncating, or that would have been written (not including the ending \0). </dd></dl>
+
+</div>
+</div>
+<a id="gaf9314311d482c621e17c6a53a9fe993e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaf9314311d482c621e17c6a53a9fe993e">&#9670;&nbsp;</a></span>hwloc_bitmap_list_sscanf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_list_sscanf </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *restrict&#160;</td>
+          <td class="paramname"><em>string</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parse a list string and stores it in bitmap <code>bitmap</code>. </p>
+
+</div>
+</div>
+<a id="gaab7240b4b644693b775dad17b44ffd68"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaab7240b4b644693b775dad17b44ffd68">&#9670;&nbsp;</a></span>hwloc_bitmap_next()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_next </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>prev</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Compute the next index in bitmap <code>bitmap</code> which is after index <code>prev</code>. </p>
+<p>If <code>prev</code> is -1, the first index is returned.</p>
+<dl class="section return"><dt>Returns</dt><dd>-1 if no index with higher index is set in <code>bitmap</code>. </dd></dl>
+
+</div>
+</div>
+<a id="ga9653af34d1460ef106b7df25af4cdca8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga9653af34d1460ef106b7df25af4cdca8">&#9670;&nbsp;</a></span>hwloc_bitmap_next_unset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_next_unset </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>prev</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Compute the next unset index in bitmap <code>bitmap</code> which is after index <code>prev</code>. </p>
+<p>If <code>prev</code> is -1, the first unset index is returned.</p>
+<dl class="section return"><dt>Returns</dt><dd>-1 if no index with higher index is unset in <code>bitmap</code>. </dd></dl>
+
+</div>
+</div>
+<a id="ga84cfdb4f8ab8c1f7e097728e613a2a3f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga84cfdb4f8ab8c1f7e097728e613a2a3f">&#9670;&nbsp;</a></span>hwloc_bitmap_not()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_not </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>res</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Negate bitmap <code>bitmap</code> and store the result in bitmap <code>res</code>. </p>
+<p><code>res</code> can be the same as <code>bitmap</code> </p>
+
+</div>
+</div>
+<a id="gac0744734d761d65c977aece565364908"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gac0744734d761d65c977aece565364908">&#9670;&nbsp;</a></span>hwloc_bitmap_nr_ulongs()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_nr_ulongs </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Return the number of unsigned longs required for storing bitmap <code>bitmap</code> entirely. </p>
+<p>This is the number of contiguous unsigned longs from the very first bit of the bitmap (even if unset) up to the last set bit. This is useful for knowing the <code>nr</code> parameter to pass to <a class="el" href="a00217.html#gacd215a2348732de25d94a4ecd76d528c" title="Convert the first nr subsets of bitmap bitmap into the array of nr unsigned long masks.">hwloc_bitmap_to_ulongs()</a> (or which calls to <a class="el" href="a00217.html#gac92e6404f648d6b99d2c626b05b2ffa4" title="Convert the i -th subset of bitmap bitmap into unsigned long mask.">hwloc_bitmap_to_ith_ulong()</a> are needed) to entirely convert a bitmap into multiple unsigned longs.</p>
+<p>When called on the output of <a class="el" href="a00214.html#ga79212faa07b70dd26588941b17d9fa82" title="Get topology CPU set.">hwloc_topology_get_topology_cpuset()</a>, the returned number is large enough for all cpusets of the topology.</p>
+<dl class="section return"><dt>Returns</dt><dd>-1 if <code>bitmap</code> is infinite. </dd></dl>
+
+</div>
+</div>
+<a id="ga10be0840cdeb7ce26d862819dd303baa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga10be0840cdeb7ce26d862819dd303baa">&#9670;&nbsp;</a></span>hwloc_bitmap_only()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_only </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>id</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Empty the bitmap <code>bitmap</code> and add bit <code>id</code>. </p>
+
+</div>
+</div>
+<a id="ga120b8aefb9ce7ef349929656359b1859"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga120b8aefb9ce7ef349929656359b1859">&#9670;&nbsp;</a></span>hwloc_bitmap_or()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_or </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>res</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Or bitmaps <code>bitmap1</code> and <code>bitmap2</code> and store the result in bitmap <code>res</code>. </p>
+<p><code>res</code> can be the same as <code>bitmap1</code> or <code>bitmap2</code> </p>
+
+</div>
+</div>
+<a id="ga062dbff93baeff3b425a7260c5463646"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga062dbff93baeff3b425a7260c5463646">&#9670;&nbsp;</a></span>hwloc_bitmap_set()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_set </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>id</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Add index <code>id</code> in bitmap <code>bitmap</code>. </p>
+
+</div>
+</div>
+<a id="ga3daeed965c35c6d2fd4820a318219985"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga3daeed965c35c6d2fd4820a318219985">&#9670;&nbsp;</a></span>hwloc_bitmap_set_ith_ulong()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_set_ith_ulong </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>i</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>mask</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Replace <code>i</code> -th subset of bitmap <code>bitmap</code> with unsigned long <code>mask</code>. </p>
+
+</div>
+</div>
+<a id="ga9c9a8433732fb9f24899e7aa4c014d7e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga9c9a8433732fb9f24899e7aa4c014d7e">&#9670;&nbsp;</a></span>hwloc_bitmap_set_range()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_set_range </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>begin</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>end</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Add indexes from <code>begin</code> to <code>end</code> in bitmap <code>bitmap</code>. </p>
+<p>If <code>end</code> is <code>-1</code>, the range is infinite. </p>
+
+</div>
+</div>
+<a id="gaa611a77c092e679246afdf9a60d5db8b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaa611a77c092e679246afdf9a60d5db8b">&#9670;&nbsp;</a></span>hwloc_bitmap_singlify()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_singlify </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Keep a single index among those set in bitmap <code>bitmap</code>. </p>
+<p>May be useful before binding so that the process does not have a chance of migrating between multiple processors in the original mask. Instead of running the task on any PU inside the given CPU set, the operating system scheduler will be forced to run it on a single of these PUs. It avoids a migration overhead and cache-line ping-pongs between PUs.</p>
+<dl class="section note"><dt>Note</dt><dd>This function is NOT meant to distribute multiple processes within a single CPU set. It always return the same single bit when called multiple times on the same input set. <a class="el" href="a00213.html#ga7b0c28f797c2ff17fa2f244ebbd55b33" title="Distribute n items over the topology under roots.">hwloc_distrib()</a> may be used for generating CPU sets to distribute multiple tasks below a single multi-PU object.</dd>
+<dd>
+This function cannot be applied to an object set directly. It should be applied to a copy (which may be obtained with <a class="el" href="a00217.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a>). </dd></dl>
+
+</div>
+</div>
+<a id="ga9511644657030a021dce9941e3cda583"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga9511644657030a021dce9941e3cda583">&#9670;&nbsp;</a></span>hwloc_bitmap_snprintf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_snprintf </td>
+          <td>(</td>
+          <td class="paramtype">char *restrict&#160;</td>
+          <td class="paramname"><em>buf</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>buflen</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Stringify a bitmap. </p>
+<p>Up to <code>buflen</code> characters may be written in buffer <code>buf</code>.</p>
+<p>If <code>buflen</code> is 0, <code>buf</code> may safely be <code>NULL</code>.</p>
+<dl class="section return"><dt>Returns</dt><dd>the number of characters that were actually written if not truncating, or that would have been written (not including the ending \0). </dd></dl>
+
+</div>
+</div>
+<a id="ga064a85c643a364b60acbfa0f3663fc18"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga064a85c643a364b60acbfa0f3663fc18">&#9670;&nbsp;</a></span>hwloc_bitmap_sscanf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_sscanf </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *restrict&#160;</td>
+          <td class="paramname"><em>string</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parse a bitmap string and stores it in bitmap <code>bitmap</code>. </p>
+
+</div>
+</div>
+<a id="ga391312513f17c985d871f18367c59512"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga391312513f17c985d871f18367c59512">&#9670;&nbsp;</a></span>hwloc_bitmap_taskset_asprintf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_taskset_asprintf </td>
+          <td>(</td>
+          <td class="paramtype">char **&#160;</td>
+          <td class="paramname"><em>strp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Stringify a bitmap into a newly allocated taskset-specific string. </p>
+<dl class="section return"><dt>Returns</dt><dd>-1 on error. </dd></dl>
+
+</div>
+</div>
+<a id="ga5beb68a987fe48e5c5edef06ab260e14"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga5beb68a987fe48e5c5edef06ab260e14">&#9670;&nbsp;</a></span>hwloc_bitmap_taskset_snprintf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_taskset_snprintf </td>
+          <td>(</td>
+          <td class="paramtype">char *restrict&#160;</td>
+          <td class="paramname"><em>buf</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>buflen</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Stringify a bitmap in the taskset-specific format. </p>
+<p>The taskset command manipulates bitmap strings that contain a single (possible very long) hexadecimal number starting with 0x.</p>
+<p>Up to <code>buflen</code> characters may be written in buffer <code>buf</code>.</p>
+<p>If <code>buflen</code> is 0, <code>buf</code> may safely be <code>NULL</code>.</p>
+<dl class="section return"><dt>Returns</dt><dd>the number of characters that were actually written if not truncating, or that would have been written (not including the ending \0). </dd></dl>
+
+</div>
+</div>
+<a id="ga4f23db5041240e03e348752f8bd6ec2d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga4f23db5041240e03e348752f8bd6ec2d">&#9670;&nbsp;</a></span>hwloc_bitmap_taskset_sscanf()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_taskset_sscanf </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *restrict&#160;</td>
+          <td class="paramname"><em>string</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parse a taskset-specific bitmap string and stores it in bitmap <code>bitmap</code>. </p>
+
+</div>
+</div>
+<a id="gac92e6404f648d6b99d2c626b05b2ffa4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gac92e6404f648d6b99d2c626b05b2ffa4">&#9670;&nbsp;</a></span>hwloc_bitmap_to_ith_ulong()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned long hwloc_bitmap_to_ith_ulong </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>i</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Convert the <code>i</code> -th subset of bitmap <code>bitmap</code> into unsigned long mask. </p>
+
+</div>
+</div>
+<a id="gab6a6bae22a33ec6adfc169a953c13e6c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gab6a6bae22a33ec6adfc169a953c13e6c">&#9670;&nbsp;</a></span>hwloc_bitmap_to_ulong()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned long hwloc_bitmap_to_ulong </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Convert the beginning part of bitmap <code>bitmap</code> into unsigned long <code>mask</code>. </p>
+
+</div>
+</div>
+<a id="gacd215a2348732de25d94a4ecd76d528c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gacd215a2348732de25d94a4ecd76d528c">&#9670;&nbsp;</a></span>hwloc_bitmap_to_ulongs()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_to_ulongs </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>nr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long *&#160;</td>
+          <td class="paramname"><em>masks</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Convert the first <code>nr</code> subsets of bitmap <code>bitmap</code> into the array of <code>nr</code> unsigned long <code>masks</code>. </p>
+<p><code>nr</code> may be determined earlier with <a class="el" href="a00217.html#gac0744734d761d65c977aece565364908" title="Return the number of unsigned longs required for storing bitmap bitmap entirely.">hwloc_bitmap_nr_ulongs()</a>.</p>
+<dl class="section return"><dt>Returns</dt><dd>0 </dd></dl>
+
+</div>
+</div>
+<a id="ga0200466842c0e1f5da75e84dde460b10"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga0200466842c0e1f5da75e84dde460b10">&#9670;&nbsp;</a></span>hwloc_bitmap_weight()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_weight </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Compute the "weight" of bitmap <code>bitmap</code> (i.e., number of indexes that are in the bitmap). </p>
+<dl class="section return"><dt>Returns</dt><dd>the number of indexes that are in the bitmap.</dd>
+<dd>
+-1 if <code>bitmap</code> is infinitely set. </dd></dl>
+
+</div>
+</div>
+<a id="ga205508218e09cb9befd0687f16409f09"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga205508218e09cb9befd0687f16409f09">&#9670;&nbsp;</a></span>hwloc_bitmap_xor()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_bitmap_xor </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>res</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap2</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Xor bitmaps <code>bitmap1</code> and <code>bitmap2</code> and store the result in bitmap <code>res</code>. </p>
+<p><code>res</code> can be the same as <code>bitmap1</code> or <code>bitmap2</code> </p>
+
+</div>
+</div>
+<a id="gaa97c5217613c8cae9862287170ea2132"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaa97c5217613c8cae9862287170ea2132">&#9670;&nbsp;</a></span>hwloc_bitmap_zero()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void hwloc_bitmap_zero </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>bitmap</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Empty the bitmap <code>bitmap</code>. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00218.html b/doc/doxygen-doc/html/a00218.html
new file mode 100644
index 00000000..bc91cfca
--- /dev/null
+++ b/doc/doxygen-doc/html/a00218.html
@@ -0,0 +1,423 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Exporting Topologies to XML</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Exporting Topologies to XML</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:ga0eb99636aff71fe2704e1fa0ffe8c18d"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html#ga0eb99636aff71fe2704e1fa0ffe8c18d">hwloc_topology_export_xml_flags_e</a> { <a class="el" href="a00218.html#gga0eb99636aff71fe2704e1fa0ffe8c18dae7d6d96546131ef0043867b836b02e0f">HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1</a>
+ }</td></tr>
+<tr class="separator:ga0eb99636aff71fe2704e1fa0ffe8c18d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga333f79975b4eeb28a3d8fad3373583ce"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html#ga333f79975b4eeb28a3d8fad3373583ce">hwloc_topology_export_xml</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const char *xmlpath, unsigned long flags)</td></tr>
+<tr class="separator:ga333f79975b4eeb28a3d8fad3373583ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad33b7f7c11db10459505a3b1634fd3f1"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html#gad33b7f7c11db10459505a3b1634fd3f1">hwloc_topology_export_xmlbuffer</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, char **xmlbuffer, int *buflen, unsigned long flags)</td></tr>
+<tr class="separator:gad33b7f7c11db10459505a3b1634fd3f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga293e4a6489f15fd16ad22a5734561cf1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html#ga293e4a6489f15fd16ad22a5734561cf1">hwloc_free_xmlbuffer</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, char *xmlbuffer)</td></tr>
+<tr class="separator:ga293e4a6489f15fd16ad22a5734561cf1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9d6ff0f7a8dd45be9aa8575ef31978cc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html#ga9d6ff0f7a8dd45be9aa8575ef31978cc">hwloc_topology_set_userdata_export_callback</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, void(*export_cb)(void *reserved, <a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj))</td></tr>
+<tr class="separator:ga9d6ff0f7a8dd45be9aa8575ef31978cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa541bdd628416dbbe97d0df69d3de958"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html#gaa541bdd628416dbbe97d0df69d3de958">hwloc_export_obj_userdata</a> (void *reserved, <a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj, const char *name, const void *buffer, size_t length)</td></tr>
+<tr class="separator:gaa541bdd628416dbbe97d0df69d3de958"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1b7358137cec27bd073f58a606ecbaba"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html#ga1b7358137cec27bd073f58a606ecbaba">hwloc_export_obj_userdata_base64</a> (void *reserved, <a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj, const char *name, const void *buffer, size_t length)</td></tr>
+<tr class="separator:ga1b7358137cec27bd073f58a606ecbaba"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5ac6917ea7289955fb1ffda4353af9b0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html#ga5ac6917ea7289955fb1ffda4353af9b0">hwloc_topology_set_userdata_import_callback</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, void(*import_cb)(<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj, const char *name, const void *buffer, size_t length))</td></tr>
+<tr class="separator:ga5ac6917ea7289955fb1ffda4353af9b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a id="ga0eb99636aff71fe2704e1fa0ffe8c18d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga0eb99636aff71fe2704e1fa0ffe8c18d">&#9670;&nbsp;</a></span>hwloc_topology_export_xml_flags_e</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00218.html#ga0eb99636aff71fe2704e1fa0ffe8c18d">hwloc_topology_export_xml_flags_e</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Flags for exporting XML topologies. </p>
+<p>Flags to be given as a OR'ed set to <a class="el" href="a00218.html#ga333f79975b4eeb28a3d8fad3373583ce" title="Export the topology into an XML file.">hwloc_topology_export_xml()</a>. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga0eb99636aff71fe2704e1fa0ffe8c18dae7d6d96546131ef0043867b836b02e0f"></a>HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1&#160;</td><td class="fielddoc"><p>Export XML that is loadable by hwloc v1.x. However, the export may miss some details about the topology. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="gaa541bdd628416dbbe97d0df69d3de958"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaa541bdd628416dbbe97d0df69d3de958">&#9670;&nbsp;</a></span>hwloc_export_obj_userdata()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_export_obj_userdata </td>
+          <td>(</td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>reserved</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>obj</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const void *&#160;</td>
+          <td class="paramname"><em>buffer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Export some object userdata to XML. </p>
+<p>This function may only be called from within the export() callback passed to <a class="el" href="a00218.html#ga9d6ff0f7a8dd45be9aa8575ef31978cc" title="Set the application-specific callback for exporting object userdata.">hwloc_topology_set_userdata_export_callback()</a>. It may be invoked one of multiple times to export some userdata to XML. The <code>buffer</code> content of length <code>length</code> is stored with optional name <code>name</code>.</p>
+<p>When importing this XML file, the import() callback (if set) will be called exactly as many times as <a class="el" href="a00218.html#gaa541bdd628416dbbe97d0df69d3de958" title="Export some object userdata to XML.">hwloc_export_obj_userdata()</a> was called during export(). It will receive the corresponding <code>name</code>, <code>buffer</code> and <code>length</code> arguments.</p>
+<p><code>reserved</code>, <code>topology</code> and <code>obj</code> must be the first three parameters that were given to the export callback.</p>
+<p>Only printable characters may be exported to XML string attributes. If a non-printable character is passed in <code>name</code> or <code>buffer</code>, the function returns -1 with errno set to EINVAL.</p>
+<p>If exporting binary data, the application should first encode into printable characters only (or use <a class="el" href="a00218.html#ga1b7358137cec27bd073f58a606ecbaba" title="Encode and export some object userdata to XML.">hwloc_export_obj_userdata_base64()</a>). It should also take care of portability issues if the export may be reimported on a different architecture. </p>
+
+</div>
+</div>
+<a id="ga1b7358137cec27bd073f58a606ecbaba"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga1b7358137cec27bd073f58a606ecbaba">&#9670;&nbsp;</a></span>hwloc_export_obj_userdata_base64()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_export_obj_userdata_base64 </td>
+          <td>(</td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>reserved</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>obj</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const void *&#160;</td>
+          <td class="paramname"><em>buffer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>length</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Encode and export some object userdata to XML. </p>
+<p>This function is similar to <a class="el" href="a00218.html#gaa541bdd628416dbbe97d0df69d3de958" title="Export some object userdata to XML.">hwloc_export_obj_userdata()</a> but it encodes the input buffer into printable characters before exporting. On import, decoding is automatically performed before the data is given to the import() callback if any.</p>
+<p>This function may only be called from within the export() callback passed to <a class="el" href="a00218.html#ga9d6ff0f7a8dd45be9aa8575ef31978cc" title="Set the application-specific callback for exporting object userdata.">hwloc_topology_set_userdata_export_callback()</a>.</p>
+<p>The function does not take care of portability issues if the export may be reimported on a different architecture. </p>
+
+</div>
+</div>
+<a id="ga293e4a6489f15fd16ad22a5734561cf1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga293e4a6489f15fd16ad22a5734561cf1">&#9670;&nbsp;</a></span>hwloc_free_xmlbuffer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void hwloc_free_xmlbuffer </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char *&#160;</td>
+          <td class="paramname"><em>xmlbuffer</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Free a buffer allocated by <a class="el" href="a00218.html#gad33b7f7c11db10459505a3b1634fd3f1" title="Export the topology into a newly-allocated XML memory buffer.">hwloc_topology_export_xmlbuffer()</a> </p>
+
+</div>
+</div>
+<a id="ga333f79975b4eeb28a3d8fad3373583ce"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga333f79975b4eeb28a3d8fad3373583ce">&#9670;&nbsp;</a></span>hwloc_topology_export_xml()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_export_xml </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>xmlpath</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Export the topology into an XML file. </p>
+<p>This file may be loaded later through <a class="el" href="a00204.html#ga879439b7ee99407ee911b3ac64e9a25e" title="Enable XML-file based topology.">hwloc_topology_set_xml()</a>.</p>
+<p>By default, the latest export format is used, which means older hwloc releases (e.g. v1.x) will not be able to import it. Exporting to v1.x specific XML format is possible using flag <a class="el" href="a00218.html#gga0eb99636aff71fe2704e1fa0ffe8c18dae7d6d96546131ef0043867b836b02e0f" title="Export XML that is loadable by hwloc v1.x. However, the export may miss some details about the topolo...">HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1</a> but it may miss some details about the topology. If there is any chance that the exported file may ever be imported back by a process using hwloc 1.x, one should consider detecting it at runtime and using the corresponding export format.</p>
+<p><code>flags</code> is a OR'ed set of <a class="el" href="a00218.html#ga0eb99636aff71fe2704e1fa0ffe8c18d" title="Flags for exporting XML topologies.">hwloc_topology_export_xml_flags_e</a>.</p>
+<dl class="section return"><dt>Returns</dt><dd>-1 if a failure occured.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>See also <a class="el" href="a00218.html#ga9d6ff0f7a8dd45be9aa8575ef31978cc" title="Set the application-specific callback for exporting object userdata.">hwloc_topology_set_userdata_export_callback()</a> for exporting application-specific object userdata.</dd>
+<dd>
+The topology-specific userdata pointer is ignored when exporting to XML.</dd>
+<dd>
+Only printable characters may be exported to XML string attributes. Any other character, especially any non-ASCII character, will be silently dropped.</dd>
+<dd>
+If <code>name</code> is "-", the XML output is sent to the standard output. </dd></dl>
+
+</div>
+</div>
+<a id="gad33b7f7c11db10459505a3b1634fd3f1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gad33b7f7c11db10459505a3b1634fd3f1">&#9670;&nbsp;</a></span>hwloc_topology_export_xmlbuffer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_export_xmlbuffer </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char **&#160;</td>
+          <td class="paramname"><em>xmlbuffer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int *&#160;</td>
+          <td class="paramname"><em>buflen</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Export the topology into a newly-allocated XML memory buffer. </p>
+<p><code>xmlbuffer</code> is allocated by the callee and should be freed with <a class="el" href="a00218.html#ga293e4a6489f15fd16ad22a5734561cf1" title="Free a buffer allocated by hwloc_topology_export_xmlbuffer()">hwloc_free_xmlbuffer()</a> later in the caller.</p>
+<p>This memory buffer may be loaded later through <a class="el" href="a00204.html#ga2745616b65595e1c1e579ecc7e461fa8" title="Enable XML based topology using a memory buffer (instead of a file, as with hwloc_topology_set_xml())...">hwloc_topology_set_xmlbuffer()</a>.</p>
+<p>By default, the latest export format is used, which means older hwloc releases (e.g. v1.x) will not be able to import it. Exporting to v1.x specific XML format is possible using flag <a class="el" href="a00218.html#gga0eb99636aff71fe2704e1fa0ffe8c18dae7d6d96546131ef0043867b836b02e0f" title="Export XML that is loadable by hwloc v1.x. However, the export may miss some details about the topolo...">HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1</a> but it may miss some details about the topology. If there is any chance that the exported buffer may ever be imported back by a process using hwloc 1.x, one should consider detecting it at runtime and using the corresponding export format.</p>
+<p>The returned buffer ends with a \0 that is included in the returned length.</p>
+<p><code>flags</code> is a OR'ed set of <a class="el" href="a00218.html#ga0eb99636aff71fe2704e1fa0ffe8c18d" title="Flags for exporting XML topologies.">hwloc_topology_export_xml_flags_e</a>.</p>
+<dl class="section return"><dt>Returns</dt><dd>-1 if a failure occured.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>See also <a class="el" href="a00218.html#ga9d6ff0f7a8dd45be9aa8575ef31978cc" title="Set the application-specific callback for exporting object userdata.">hwloc_topology_set_userdata_export_callback()</a> for exporting application-specific object userdata.</dd>
+<dd>
+The topology-specific userdata pointer is ignored when exporting to XML.</dd>
+<dd>
+Only printable characters may be exported to XML string attributes. Any other character, especially any non-ASCII character, will be silently dropped. </dd></dl>
+
+</div>
+</div>
+<a id="ga9d6ff0f7a8dd45be9aa8575ef31978cc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga9d6ff0f7a8dd45be9aa8575ef31978cc">&#9670;&nbsp;</a></span>hwloc_topology_set_userdata_export_callback()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void hwloc_topology_set_userdata_export_callback </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void(*)(void *reserved, <a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj)&#160;</td>
+          <td class="paramname"><em>export_cb</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Set the application-specific callback for exporting object userdata. </p>
+<p>The object userdata pointer is not exported to XML by default because hwloc does not know what it contains.</p>
+<p>This function lets applications set <code>export_cb</code> to a callback function that converts this opaque userdata into an exportable string.</p>
+<p><code>export_cb</code> is invoked during XML export for each object whose <code>userdata</code> pointer is not <code>NULL</code>. The callback should use <a class="el" href="a00218.html#gaa541bdd628416dbbe97d0df69d3de958" title="Export some object userdata to XML.">hwloc_export_obj_userdata()</a> or <a class="el" href="a00218.html#ga1b7358137cec27bd073f58a606ecbaba" title="Encode and export some object userdata to XML.">hwloc_export_obj_userdata_base64()</a> to actually export something to XML (possibly multiple times per object).</p>
+<p><code>export_cb</code> may be set to <code>NULL</code> if userdata should not be exported to XML.</p>
+<dl class="section note"><dt>Note</dt><dd>The topology-specific userdata pointer is ignored when exporting to XML. </dd></dl>
+
+</div>
+</div>
+<a id="ga5ac6917ea7289955fb1ffda4353af9b0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga5ac6917ea7289955fb1ffda4353af9b0">&#9670;&nbsp;</a></span>hwloc_topology_set_userdata_import_callback()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void hwloc_topology_set_userdata_import_callback </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void(*)(<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj, const char *name, const void *buffer, size_t length)&#160;</td>
+          <td class="paramname"><em>import_cb</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Set the application-specific callback for importing userdata. </p>
+<p>On XML import, userdata is ignored by default because hwloc does not know how to store it in memory.</p>
+<p>This function lets applications set <code>import_cb</code> to a callback function that will get the XML-stored userdata and store it in the object as expected by the application.</p>
+<p><code>import_cb</code> is called during <a class="el" href="a00198.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a> as many times as <a class="el" href="a00218.html#gaa541bdd628416dbbe97d0df69d3de958" title="Export some object userdata to XML.">hwloc_export_obj_userdata()</a> was called during export. The topology is not entirely setup yet. Object attributes are ready to consult, but links between objects are not.</p>
+<p><code>import_cb</code> may be <code>NULL</code> if userdata should be ignored during import.</p>
+<dl class="section note"><dt>Note</dt><dd><code>buffer</code> contains <code>length</code> characters followed by a null byte ('\0').</dd>
+<dd>
+This function should be called before <a class="el" href="a00198.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a>.</dd>
+<dd>
+The topology-specific userdata pointer is ignored when importing from XML. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00219.html b/doc/doxygen-doc/html/a00219.html
new file mode 100644
index 00000000..775ad269
--- /dev/null
+++ b/doc/doxygen-doc/html/a00219.html
@@ -0,0 +1,155 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Exporting Topologies to Synthetic</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Exporting Topologies to Synthetic</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:ga7ac6f97cc40bd50c40285084f869ba63"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00219.html#ga7ac6f97cc40bd50c40285084f869ba63">hwloc_topology_export_synthetic_flags_e</a> { <a class="el" href="a00219.html#gga7ac6f97cc40bd50c40285084f869ba63a3b3bd4ba2ef9990810865e561034ccc9">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_EXTENDED_TYPES</a>
+, <a class="el" href="a00219.html#gga7ac6f97cc40bd50c40285084f869ba63aaa2702ffba050bab079b3041aec737d4">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_ATTRS</a>
+, <a class="el" href="a00219.html#gga7ac6f97cc40bd50c40285084f869ba63a7896bdf4ccfcdcd09a9f76c0f5e3a5b8">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_V1</a>
+, <a class="el" href="a00219.html#gga7ac6f97cc40bd50c40285084f869ba63a22c57cf18e1da4a6c584fb783b552f9f">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_IGNORE_MEMORY</a>
+ }</td></tr>
+<tr class="separator:ga7ac6f97cc40bd50c40285084f869ba63"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga24b7864a1c588309c4749f621f03b4c7"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00219.html#ga24b7864a1c588309c4749f621f03b4c7">hwloc_topology_export_synthetic</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, char *buffer, size_t buflen, unsigned long flags)</td></tr>
+<tr class="separator:ga24b7864a1c588309c4749f621f03b4c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a id="ga7ac6f97cc40bd50c40285084f869ba63"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga7ac6f97cc40bd50c40285084f869ba63">&#9670;&nbsp;</a></span>hwloc_topology_export_synthetic_flags_e</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00219.html#ga7ac6f97cc40bd50c40285084f869ba63">hwloc_topology_export_synthetic_flags_e</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Flags for exporting synthetic topologies. </p>
+<p>Flags to be given as a OR'ed set to <a class="el" href="a00219.html#ga24b7864a1c588309c4749f621f03b4c7" title="Export the topology as a synthetic string.">hwloc_topology_export_synthetic()</a>. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga7ac6f97cc40bd50c40285084f869ba63a3b3bd4ba2ef9990810865e561034ccc9"></a>HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_EXTENDED_TYPES&#160;</td><td class="fielddoc"><p>Export extended types such as L2dcache as basic types such as Cache. </p>
+<p>This is required if loading the synthetic description with hwloc &lt; 1.9. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga7ac6f97cc40bd50c40285084f869ba63aaa2702ffba050bab079b3041aec737d4"></a>HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_ATTRS&#160;</td><td class="fielddoc"><p>Do not export level attributes. </p>
+<p>Ignore level attributes such as memory/cache sizes or PU indexes. This is required if loading the synthetic description with hwloc &lt; 1.10. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga7ac6f97cc40bd50c40285084f869ba63a7896bdf4ccfcdcd09a9f76c0f5e3a5b8"></a>HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_V1&#160;</td><td class="fielddoc"><p>Export the memory hierarchy as expected in hwloc 1.x. </p>
+<p>Instead of attaching memory children to levels, export single NUMA node child as normal intermediate levels, when possible. This is required if loading the synthetic description with hwloc 1.x. However this may fail if some objects have multiple local NUMA nodes. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga7ac6f97cc40bd50c40285084f869ba63a22c57cf18e1da4a6c584fb783b552f9f"></a>HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_IGNORE_MEMORY&#160;</td><td class="fielddoc"><p>Do not export memory information. </p>
+<p>Only export the actual hierarchy of normal CPU-side objects and ignore where memory is attached. This is useful for when the hierarchy of CPUs is what really matters, but it behaves as if there was a single machine-wide NUMA node. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga24b7864a1c588309c4749f621f03b4c7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga24b7864a1c588309c4749f621f03b4c7">&#9670;&nbsp;</a></span>hwloc_topology_export_synthetic()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_export_synthetic </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char *&#160;</td>
+          <td class="paramname"><em>buffer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>buflen</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Export the topology as a synthetic string. </p>
+<p>At most <code>buflen</code> characters will be written in <code>buffer</code>, including the terminating \0.</p>
+<p>This exported string may be given back to <a class="el" href="a00204.html#ga4fab186bb6181a00bcf585825fddd38d" title="Enable synthetic topology.">hwloc_topology_set_synthetic()</a>.</p>
+<p><code>flags</code> is a OR'ed set of <a class="el" href="a00219.html#ga7ac6f97cc40bd50c40285084f869ba63" title="Flags for exporting synthetic topologies.">hwloc_topology_export_synthetic_flags_e</a>.</p>
+<dl class="section return"><dt>Returns</dt><dd>The number of characters that were written, not including the terminating \0.</dd>
+<dd>
+-1 if the topology could not be exported, for instance if it is not symmetric.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>I/O and Misc children are ignored, the synthetic string only describes normal children.</dd>
+<dd>
+A 1024-byte buffer should be large enough for exporting topologies in the vast majority of cases. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00220.html b/doc/doxygen-doc/html/a00220.html
new file mode 100644
index 00000000..d989657c
--- /dev/null
+++ b/doc/doxygen-doc/html/a00220.html
@@ -0,0 +1,494 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Retrieve distances between objects</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Retrieve distances between objects</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00325.html">hwloc_distances_s</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:gab1bb10d3adb85b52cdc6fe5a7f74f108"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#gab1bb10d3adb85b52cdc6fe5a7f74f108">hwloc_distances_kind_e</a> { <br />
+&#160;&#160;<a class="el" href="a00220.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a90dc38248c8d5392d4dd3e88f391e984">HWLOC_DISTANCES_KIND_FROM_OS</a>
+, <a class="el" href="a00220.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a0148d7f9be833a04f5a55455437c227b">HWLOC_DISTANCES_KIND_FROM_USER</a>
+, <a class="el" href="a00220.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108afd6a3503fbc8f7c1a31235373cefc4c6">HWLOC_DISTANCES_KIND_MEANS_LATENCY</a>
+, <a class="el" href="a00220.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a41b19f141a3c0ffe85f9affaca4b0293">HWLOC_DISTANCES_KIND_MEANS_BANDWIDTH</a>
+, <br />
+&#160;&#160;<a class="el" href="a00220.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108aa6cf2b6dfcf148b65952f811814efbe1">HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES</a>
+<br />
+ }</td></tr>
+<tr class="separator:gab1bb10d3adb85b52cdc6fe5a7f74f108"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga42859b651adec5ef0aaacb53ff220b00"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#ga42859b651adec5ef0aaacb53ff220b00">hwloc_distances_transform_e</a> { <a class="el" href="a00220.html#gga42859b651adec5ef0aaacb53ff220b00a4b7bdb7e3ccca30e03b7ae671e7f6dc1">HWLOC_DISTANCES_TRANSFORM_REMOVE_NULL</a>
+, <a class="el" href="a00220.html#gga42859b651adec5ef0aaacb53ff220b00a441e6bb393558319af3bb1f89f51f44d">HWLOC_DISTANCES_TRANSFORM_LINKS</a>
+, <a class="el" href="a00220.html#gga42859b651adec5ef0aaacb53ff220b00a3d2aaf03e17be54eddbb94aab327fded">HWLOC_DISTANCES_TRANSFORM_MERGE_SWITCH_PORTS</a>
+, <a class="el" href="a00220.html#gga42859b651adec5ef0aaacb53ff220b00a1264abf9b9463f252995f37eb1057047">HWLOC_DISTANCES_TRANSFORM_TRANSITIVE_CLOSURE</a>
+ }</td></tr>
+<tr class="separator:ga42859b651adec5ef0aaacb53ff220b00"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga613e6b2a5d0f06626ee8d0c12fa46691"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#ga613e6b2a5d0f06626ee8d0c12fa46691">hwloc_distances_get</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned *nr, struct <a class="el" href="a00325.html">hwloc_distances_s</a> **distances, unsigned long kind, unsigned long flags)</td></tr>
+<tr class="separator:ga613e6b2a5d0f06626ee8d0c12fa46691"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5d1d35eccfcc2ebcef71a10972ce9b03"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#ga5d1d35eccfcc2ebcef71a10972ce9b03">hwloc_distances_get_by_depth</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int depth, unsigned *nr, struct <a class="el" href="a00325.html">hwloc_distances_s</a> **distances, unsigned long kind, unsigned long flags)</td></tr>
+<tr class="separator:ga5d1d35eccfcc2ebcef71a10972ce9b03"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaaa6bfbc20072a4f4de132eec859067f6"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#gaaa6bfbc20072a4f4de132eec859067f6">hwloc_distances_get_by_type</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, unsigned *nr, struct <a class="el" href="a00325.html">hwloc_distances_s</a> **distances, unsigned long kind, unsigned long flags)</td></tr>
+<tr class="separator:gaaa6bfbc20072a4f4de132eec859067f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa457f35b8745ca41ec17797c0d7b20f0"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#gaa457f35b8745ca41ec17797c0d7b20f0">hwloc_distances_get_by_name</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const char *name, unsigned *nr, struct <a class="el" href="a00325.html">hwloc_distances_s</a> **distances, unsigned long flags)</td></tr>
+<tr class="separator:gaa457f35b8745ca41ec17797c0d7b20f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa6f9697028c589cef0458edef5fe273f"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#gaa6f9697028c589cef0458edef5fe273f">hwloc_distances_get_name</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, struct <a class="el" href="a00325.html">hwloc_distances_s</a> *distances)</td></tr>
+<tr class="separator:gaa6f9697028c589cef0458edef5fe273f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1dd78c1f9acd54f26aba0e284e97e51d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#ga1dd78c1f9acd54f26aba0e284e97e51d">hwloc_distances_release</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, struct <a class="el" href="a00325.html">hwloc_distances_s</a> *distances)</td></tr>
+<tr class="separator:ga1dd78c1f9acd54f26aba0e284e97e51d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gabcadd041f3072999d68f2d94e38670f7"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#gabcadd041f3072999d68f2d94e38670f7">hwloc_distances_transform</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, struct <a class="el" href="a00325.html">hwloc_distances_s</a> *distances, enum <a class="el" href="a00220.html#ga42859b651adec5ef0aaacb53ff220b00">hwloc_distances_transform_e</a> transform, void *transform_attr, unsigned long flags)</td></tr>
+<tr class="separator:gabcadd041f3072999d68f2d94e38670f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a id="gab1bb10d3adb85b52cdc6fe5a7f74f108"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gab1bb10d3adb85b52cdc6fe5a7f74f108">&#9670;&nbsp;</a></span>hwloc_distances_kind_e</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00220.html#gab1bb10d3adb85b52cdc6fe5a7f74f108">hwloc_distances_kind_e</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Kinds of distance matrices. </p>
+<p>The <code>kind</code> attribute of struct <a class="el" href="a00325.html" title="Matrix of distances between a set of objects.">hwloc_distances_s</a> is a OR'ed set of kinds.</p>
+<p>A kind of format HWLOC_DISTANCES_KIND_FROM_* specifies where the distance information comes from, if known.</p>
+<p>A kind of format HWLOC_DISTANCES_KIND_MEANS_* specifies whether values are latencies or bandwidths, if applicable. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggab1bb10d3adb85b52cdc6fe5a7f74f108a90dc38248c8d5392d4dd3e88f391e984"></a>HWLOC_DISTANCES_KIND_FROM_OS&#160;</td><td class="fielddoc"><p>These distances were obtained from the operating system or hardware. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggab1bb10d3adb85b52cdc6fe5a7f74f108a0148d7f9be833a04f5a55455437c227b"></a>HWLOC_DISTANCES_KIND_FROM_USER&#160;</td><td class="fielddoc"><p>These distances were provided by the user. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggab1bb10d3adb85b52cdc6fe5a7f74f108afd6a3503fbc8f7c1a31235373cefc4c6"></a>HWLOC_DISTANCES_KIND_MEANS_LATENCY&#160;</td><td class="fielddoc"><p>Distance values are similar to latencies between objects. Values are smaller for closer objects, hence minimal on the diagonal of the matrix (distance between an object and itself). It could also be the number of network hops between objects, etc. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggab1bb10d3adb85b52cdc6fe5a7f74f108a41b19f141a3c0ffe85f9affaca4b0293"></a>HWLOC_DISTANCES_KIND_MEANS_BANDWIDTH&#160;</td><td class="fielddoc"><p>Distance values are similar to bandwidths between objects. Values are higher for closer objects, hence maximal on the diagonal of the matrix (distance between an object and itself). Such values are currently ignored for distance-based grouping. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggab1bb10d3adb85b52cdc6fe5a7f74f108aa6cf2b6dfcf148b65952f811814efbe1"></a>HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES&#160;</td><td class="fielddoc"><p>This distances structure covers objects of different types. This may apply to the "NVLinkBandwidth" structure in presence of a NVSwitch or POWER processor NVLink port. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<a id="ga42859b651adec5ef0aaacb53ff220b00"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga42859b651adec5ef0aaacb53ff220b00">&#9670;&nbsp;</a></span>hwloc_distances_transform_e</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00220.html#ga42859b651adec5ef0aaacb53ff220b00">hwloc_distances_transform_e</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Transformations of distances structures. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga42859b651adec5ef0aaacb53ff220b00a4b7bdb7e3ccca30e03b7ae671e7f6dc1"></a>HWLOC_DISTANCES_TRANSFORM_REMOVE_NULL&#160;</td><td class="fielddoc"><p>Remove <code>NULL</code> objects from the distances structure. </p>
+<p>Every object that was replaced with <code>NULL</code> in the <code>objs</code> array is removed and the <code>values</code> array is updated accordingly.</p>
+<p>At least <code>2</code> objects must remain, otherwise <a class="el" href="a00220.html#gabcadd041f3072999d68f2d94e38670f7" title="Apply a transformation to a distances structure.">hwloc_distances_transform()</a> will return <code>-1</code> with <code>errno</code> set to <code>EINVAL</code>.</p>
+<p><code>kind</code> will be updated with or without <a class="el" href="a00220.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108aa6cf2b6dfcf148b65952f811814efbe1" title="This distances structure covers objects of different types. This may apply to the &quot;NVLinkBandwidth&quot; s...">HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES</a> according to the remaining objects. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga42859b651adec5ef0aaacb53ff220b00a441e6bb393558319af3bb1f89f51f44d"></a>HWLOC_DISTANCES_TRANSFORM_LINKS&#160;</td><td class="fielddoc"><p>Replace bandwidth values with a number of links. </p>
+<p>Usually all values will be either <code>0</code> (no link) or <code>1</code> (one link). However some matrices could get larger values if some pairs of peers are connected by different numbers of links.</p>
+<p>Values on the diagonal are set to <code>0</code>.</p>
+<p>This transformation only applies to bandwidth matrices. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga42859b651adec5ef0aaacb53ff220b00a3d2aaf03e17be54eddbb94aab327fded"></a>HWLOC_DISTANCES_TRANSFORM_MERGE_SWITCH_PORTS&#160;</td><td class="fielddoc"><p>Merge switches with multiple ports into a single object. This currently only applies to NVSwitches where GPUs seem connected to different separate switch ports in the NVLinkBandwidth matrix. This transformation will replace all of them with the same port connected to all GPUs. Other ports are removed by applying <a class="el" href="a00220.html#gga42859b651adec5ef0aaacb53ff220b00a4b7bdb7e3ccca30e03b7ae671e7f6dc1" title="Remove NULL objects from the distances structure.">HWLOC_DISTANCES_TRANSFORM_REMOVE_NULL</a> internally. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga42859b651adec5ef0aaacb53ff220b00a1264abf9b9463f252995f37eb1057047"></a>HWLOC_DISTANCES_TRANSFORM_TRANSITIVE_CLOSURE&#160;</td><td class="fielddoc"><p>Apply a transitive closure to the matrix to connect objects across switches. This currently only applies to GPUs and NVSwitches in the NVLinkBandwidth matrix. All pairs of GPUs will be reported as directly connected. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga613e6b2a5d0f06626ee8d0c12fa46691"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga613e6b2a5d0f06626ee8d0c12fa46691">&#9670;&nbsp;</a></span>hwloc_distances_get()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_distances_get </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned *&#160;</td>
+          <td class="paramname"><em>nr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">struct <a class="el" href="a00325.html">hwloc_distances_s</a> **&#160;</td>
+          <td class="paramname"><em>distances</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>kind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Retrieve distance matrices. </p>
+<p>Retrieve distance matrices from the topology into the <code>distances</code> array.</p>
+<p><code>flags</code> is currently unused, should be <code>0</code>.</p>
+<p><code>kind</code> serves as a filter. If <code>0</code>, all distance matrices are returned. If it contains some HWLOC_DISTANCES_KIND_FROM_*, only distance matrices whose kind matches one of these are returned. If it contains some HWLOC_DISTANCES_KIND_MEANS_*, only distance matrices whose kind matches one of these are returned.</p>
+<p>On input, <code>nr</code> points to the number of distance matrices that may be stored in <code>distances</code>. On output, <code>nr</code> points to the number of distance matrices that were actually found, even if some of them couldn't be stored in <code>distances</code>. Distance matrices that couldn't be stored are ignored, but the function still returns success (<code>0</code>). The caller may find out by comparing the value pointed by <code>nr</code> before and after the function call.</p>
+<p>Each distance matrix returned in the <code>distances</code> array should be released by the caller using <a class="el" href="a00220.html#ga1dd78c1f9acd54f26aba0e284e97e51d" title="Release a distance matrix structure previously returned by hwloc_distances_get().">hwloc_distances_release()</a>. </p>
+
+</div>
+</div>
+<a id="ga5d1d35eccfcc2ebcef71a10972ce9b03"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga5d1d35eccfcc2ebcef71a10972ce9b03">&#9670;&nbsp;</a></span>hwloc_distances_get_by_depth()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_distances_get_by_depth </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>depth</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned *&#160;</td>
+          <td class="paramname"><em>nr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">struct <a class="el" href="a00325.html">hwloc_distances_s</a> **&#160;</td>
+          <td class="paramname"><em>distances</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>kind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Retrieve distance matrices for object at a specific depth in the topology. </p>
+<p>Identical to <a class="el" href="a00220.html#ga613e6b2a5d0f06626ee8d0c12fa46691" title="Retrieve distance matrices.">hwloc_distances_get()</a> with the additional <code>depth</code> filter. </p>
+
+</div>
+</div>
+<a id="gaa457f35b8745ca41ec17797c0d7b20f0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaa457f35b8745ca41ec17797c0d7b20f0">&#9670;&nbsp;</a></span>hwloc_distances_get_by_name()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_distances_get_by_name </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned *&#160;</td>
+          <td class="paramname"><em>nr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">struct <a class="el" href="a00325.html">hwloc_distances_s</a> **&#160;</td>
+          <td class="paramname"><em>distances</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Retrieve a distance matrix with the given name. </p>
+<p>Usually only one distances structure may match a given name.</p>
+<p>The name of the most common structure is "NUMALatency". Others include "XGMIBandwidth", "XGMIHops", "XeLinkBandwidth", and "NVLinkBandwidth". </p>
+
+</div>
+</div>
+<a id="gaaa6bfbc20072a4f4de132eec859067f6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaaa6bfbc20072a4f4de132eec859067f6">&#9670;&nbsp;</a></span>hwloc_distances_get_by_type()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_distances_get_by_type </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
+          <td class="paramname"><em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned *&#160;</td>
+          <td class="paramname"><em>nr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">struct <a class="el" href="a00325.html">hwloc_distances_s</a> **&#160;</td>
+          <td class="paramname"><em>distances</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>kind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Retrieve distance matrices for object of a specific type. </p>
+<p>Identical to <a class="el" href="a00220.html#ga613e6b2a5d0f06626ee8d0c12fa46691" title="Retrieve distance matrices.">hwloc_distances_get()</a> with the additional <code>type</code> filter. </p>
+
+</div>
+</div>
+<a id="gaa6f9697028c589cef0458edef5fe273f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaa6f9697028c589cef0458edef5fe273f">&#9670;&nbsp;</a></span>hwloc_distances_get_name()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const char* hwloc_distances_get_name </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">struct <a class="el" href="a00325.html">hwloc_distances_s</a> *&#160;</td>
+          <td class="paramname"><em>distances</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Get a description of what a distances structure contains. </p>
+<p>For instance "NUMALatency" for hardware-provided NUMA distances (ACPI SLIT), or NULL if unknown. </p>
+
+</div>
+</div>
+<a id="ga1dd78c1f9acd54f26aba0e284e97e51d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga1dd78c1f9acd54f26aba0e284e97e51d">&#9670;&nbsp;</a></span>hwloc_distances_release()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void hwloc_distances_release </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">struct <a class="el" href="a00325.html">hwloc_distances_s</a> *&#160;</td>
+          <td class="paramname"><em>distances</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Release a distance matrix structure previously returned by <a class="el" href="a00220.html#ga613e6b2a5d0f06626ee8d0c12fa46691" title="Retrieve distance matrices.">hwloc_distances_get()</a>. </p>
+<dl class="section note"><dt>Note</dt><dd>This function is not required if the structure is removed with <a class="el" href="a00223.html#ga80bbf6f0db9af48c61780dd5152664c2" title="Release and remove the given distance matrice from the topology.">hwloc_distances_release_remove()</a>. </dd></dl>
+
+</div>
+</div>
+<a id="gabcadd041f3072999d68f2d94e38670f7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gabcadd041f3072999d68f2d94e38670f7">&#9670;&nbsp;</a></span>hwloc_distances_transform()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_distances_transform </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">struct <a class="el" href="a00325.html">hwloc_distances_s</a> *&#160;</td>
+          <td class="paramname"><em>distances</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">enum <a class="el" href="a00220.html#ga42859b651adec5ef0aaacb53ff220b00">hwloc_distances_transform_e</a>&#160;</td>
+          <td class="paramname"><em>transform</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>transform_attr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Apply a transformation to a distances structure. </p>
+<p>Modify a distances structure that was previously obtained with <a class="el" href="a00220.html#ga613e6b2a5d0f06626ee8d0c12fa46691" title="Retrieve distance matrices.">hwloc_distances_get()</a> or one of its variants.</p>
+<p>This modifies the local copy of the distances structures but does not modify the distances information stored inside the topology (retrieved by another call to <a class="el" href="a00220.html#ga613e6b2a5d0f06626ee8d0c12fa46691" title="Retrieve distance matrices.">hwloc_distances_get()</a> or exported to XML). To do so, one should add a new distances structure with same name, kind, objects and values (see <a class="el" href="a00222.html">Add distances between objects</a>) and then remove this old one with <a class="el" href="a00223.html#ga80bbf6f0db9af48c61780dd5152664c2" title="Release and remove the given distance matrice from the topology.">hwloc_distances_release_remove()</a>.</p>
+<p><code>transform</code> must be one of the transformations listed in <a class="el" href="a00220.html#ga42859b651adec5ef0aaacb53ff220b00" title="Transformations of distances structures.">hwloc_distances_transform_e</a>.</p>
+<p>These transformations may modify the contents of the <code>objs</code> or <code>values</code> arrays.</p>
+<p><code>transform_attr</code> must be <code>NULL</code> for now.</p>
+<p><code>flags</code> must be <code>0</code> for now.</p>
+<dl class="section note"><dt>Note</dt><dd>Objects in distances array <code>objs</code> may be directly modified in place without using <a class="el" href="a00220.html#gabcadd041f3072999d68f2d94e38670f7" title="Apply a transformation to a distances structure.">hwloc_distances_transform()</a>. One may use <a class="el" href="a00212.html#gab5df3ad1e8565ea0c2cf06412f6f6233" title="Return an object of a different type with same locality.">hwloc_get_obj_with_same_locality()</a> to easily convert between similar objects of different types. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00221.html b/doc/doxygen-doc/html/a00221.html
new file mode 100644
index 00000000..23bdfc13
--- /dev/null
+++ b/doc/doxygen-doc/html/a00221.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Helpers for consulting distance matrices</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Helpers for consulting distance matrices</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gab9e770c7d56c5d6040f26bd1dc8854cd"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00221.html#gab9e770c7d56c5d6040f26bd1dc8854cd">hwloc_distances_obj_index</a> (struct <a class="el" href="a00325.html">hwloc_distances_s</a> *distances, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj)</td></tr>
+<tr class="separator:gab9e770c7d56c5d6040f26bd1dc8854cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga3c665b23056e3269f777b21a67148c82"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00221.html#ga3c665b23056e3269f777b21a67148c82">hwloc_distances_obj_pair_values</a> (struct <a class="el" href="a00325.html">hwloc_distances_s</a> *distances, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj1, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj2, hwloc_uint64_t *value1to2, hwloc_uint64_t *value2to1)</td></tr>
+<tr class="separator:ga3c665b23056e3269f777b21a67148c82"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="gab9e770c7d56c5d6040f26bd1dc8854cd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gab9e770c7d56c5d6040f26bd1dc8854cd">&#9670;&nbsp;</a></span>hwloc_distances_obj_index()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_distances_obj_index </td>
+          <td>(</td>
+          <td class="paramtype">struct <a class="el" href="a00325.html">hwloc_distances_s</a> *&#160;</td>
+          <td class="paramname"><em>distances</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>obj</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Find the index of an object in a distances structure. </p>
+<dl class="section return"><dt>Returns</dt><dd>-1 if object <code>obj</code> is not involved in structure <code>distances</code>. </dd></dl>
+
+</div>
+</div>
+<a id="ga3c665b23056e3269f777b21a67148c82"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga3c665b23056e3269f777b21a67148c82">&#9670;&nbsp;</a></span>hwloc_distances_obj_pair_values()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_distances_obj_pair_values </td>
+          <td>(</td>
+          <td class="paramtype">struct <a class="el" href="a00325.html">hwloc_distances_s</a> *&#160;</td>
+          <td class="paramname"><em>distances</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>obj1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>obj2</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">hwloc_uint64_t *&#160;</td>
+          <td class="paramname"><em>value1to2</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">hwloc_uint64_t *&#160;</td>
+          <td class="paramname"><em>value2to1</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Find the values between two objects in a distance matrices. </p>
+<p>The distance from <code>obj1</code> to <code>obj2</code> is stored in the value pointed by <code>value1to2</code> and reciprocally.</p>
+<dl class="section return"><dt>Returns</dt><dd>-1 if object <code>obj1</code> or <code>obj2</code> is not involved in structure <code>distances</code>. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00222.html b/doc/doxygen-doc/html/a00222.html
new file mode 100644
index 00000000..d97aa0c3
--- /dev/null
+++ b/doc/doxygen-doc/html/a00222.html
@@ -0,0 +1,288 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Add distances between objects</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Add distances between objects</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga554a4c1e315265f961830e2b616e4989"><td class="memItemLeft" align="right" valign="top">typedef void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#ga554a4c1e315265f961830e2b616e4989">hwloc_distances_add_handle_t</a></td></tr>
+<tr class="separator:ga554a4c1e315265f961830e2b616e4989"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:ga22428b6bab271411e3834e6b4ca22e37"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#ga22428b6bab271411e3834e6b4ca22e37">hwloc_distances_add_flag_e</a> { <a class="el" href="a00222.html#gga22428b6bab271411e3834e6b4ca22e37a7f6baba797d70538d03c9d13052c62ab">HWLOC_DISTANCES_ADD_FLAG_GROUP</a>
+, <a class="el" href="a00222.html#gga22428b6bab271411e3834e6b4ca22e37a5233ccf631c3bc53dd5c3e7a5d5c9b77">HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE</a>
+ }</td></tr>
+<tr class="separator:ga22428b6bab271411e3834e6b4ca22e37"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga823d38fa8d21dc338497fb0f79c96704"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00222.html#ga554a4c1e315265f961830e2b616e4989">hwloc_distances_add_handle_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#ga823d38fa8d21dc338497fb0f79c96704">hwloc_distances_add_create</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const char *name, unsigned long kind, unsigned long flags)</td></tr>
+<tr class="separator:ga823d38fa8d21dc338497fb0f79c96704"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8c9715481b0bce344c8a33c6e6a56469"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#ga8c9715481b0bce344c8a33c6e6a56469">hwloc_distances_add_values</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00222.html#ga554a4c1e315265f961830e2b616e4989">hwloc_distances_add_handle_t</a> handle, unsigned nbobjs, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *objs, hwloc_uint64_t *values, unsigned long flags)</td></tr>
+<tr class="separator:ga8c9715481b0bce344c8a33c6e6a56469"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1f5a29760ebb8f9af831e645315f553c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#ga1f5a29760ebb8f9af831e645315f553c">hwloc_distances_add_commit</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00222.html#ga554a4c1e315265f961830e2b616e4989">hwloc_distances_add_handle_t</a> handle, unsigned long flags)</td></tr>
+<tr class="separator:ga1f5a29760ebb8f9af831e645315f553c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>The usual way to add distances is: </p><div class="fragment"><div class="line"><a class="code" href="a00222.html#ga554a4c1e315265f961830e2b616e4989">hwloc_distances_add_handle_t</a> handle;</div>
+<div class="line"><span class="keywordtype">int</span> err = -1;</div>
+<div class="line">handle = <a class="code" href="a00222.html#ga823d38fa8d21dc338497fb0f79c96704">hwloc_distances_add_create</a>(topology, <span class="stringliteral">&quot;name&quot;</span>, kind, 0);</div>
+<div class="line"><span class="keywordflow">if</span> (handle) {</div>
+<div class="line">  err = <a class="code" href="a00222.html#ga8c9715481b0bce344c8a33c6e6a56469">hwloc_distances_add_values</a>(topology, handle, nbobjs, objs, values, 0);</div>
+<div class="line">  <span class="keywordflow">if</span> (!err)</div>
+<div class="line">    err = <a class="code" href="a00222.html#ga1f5a29760ebb8f9af831e645315f553c">hwloc_distances_add_commit</a>(topology, handle, flags);</div>
+<div class="line">}</div>
+<div class="ttc" id="aa00222_html_ga1f5a29760ebb8f9af831e645315f553c"><div class="ttname"><a href="a00222.html#ga1f5a29760ebb8f9af831e645315f553c">hwloc_distances_add_commit</a></div><div class="ttdeci">int hwloc_distances_add_commit(hwloc_topology_t topology, hwloc_distances_add_handle_t handle, unsigned long flags)</div><div class="ttdoc">Commit a new distances structure.</div></div>
+<div class="ttc" id="aa00222_html_ga554a4c1e315265f961830e2b616e4989"><div class="ttname"><a href="a00222.html#ga554a4c1e315265f961830e2b616e4989">hwloc_distances_add_handle_t</a></div><div class="ttdeci">void * hwloc_distances_add_handle_t</div><div class="ttdoc">Handle to a new distances structure during its addition to the topology.</div><div class="ttdef"><b>Definition:</b> distances.h:331</div></div>
+<div class="ttc" id="aa00222_html_ga823d38fa8d21dc338497fb0f79c96704"><div class="ttname"><a href="a00222.html#ga823d38fa8d21dc338497fb0f79c96704">hwloc_distances_add_create</a></div><div class="ttdeci">hwloc_distances_add_handle_t hwloc_distances_add_create(hwloc_topology_t topology, const char *name, unsigned long kind, unsigned long flags)</div><div class="ttdoc">Create a new empty distances structure.</div></div>
+<div class="ttc" id="aa00222_html_ga8c9715481b0bce344c8a33c6e6a56469"><div class="ttname"><a href="a00222.html#ga8c9715481b0bce344c8a33c6e6a56469">hwloc_distances_add_values</a></div><div class="ttdeci">int hwloc_distances_add_values(hwloc_topology_t topology, hwloc_distances_add_handle_t handle, unsigned nbobjs, hwloc_obj_t *objs, hwloc_uint64_t *values, unsigned long flags)</div><div class="ttdoc">Specify the objects and values in a new empty distances structure.</div></div>
+</div><!-- fragment --><p> If <code>err</code> is <code>0</code> at the end, then addition was successful. </p>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a id="ga554a4c1e315265f961830e2b616e4989"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga554a4c1e315265f961830e2b616e4989">&#9670;&nbsp;</a></span>hwloc_distances_add_handle_t</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef void* <a class="el" href="a00222.html#ga554a4c1e315265f961830e2b616e4989">hwloc_distances_add_handle_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Handle to a new distances structure during its addition to the topology. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a id="ga22428b6bab271411e3834e6b4ca22e37"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga22428b6bab271411e3834e6b4ca22e37">&#9670;&nbsp;</a></span>hwloc_distances_add_flag_e</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00222.html#ga22428b6bab271411e3834e6b4ca22e37">hwloc_distances_add_flag_e</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Flags for adding a new distances to a topology. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga22428b6bab271411e3834e6b4ca22e37a7f6baba797d70538d03c9d13052c62ab"></a>HWLOC_DISTANCES_ADD_FLAG_GROUP&#160;</td><td class="fielddoc"><p>Try to group objects based on the newly provided distance information. This is ignored for distances between objects of different types. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga22428b6bab271411e3834e6b4ca22e37a5233ccf631c3bc53dd5c3e7a5d5c9b77"></a>HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE&#160;</td><td class="fielddoc"><p>If grouping, consider the distance values as inaccurate and relax the comparisons during the grouping algorithms. The actual accuracy may be modified through the HWLOC_GROUPING_ACCURACY environment variable (see <a class="el" href="a00397.html">Environment Variables</a>). </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga1f5a29760ebb8f9af831e645315f553c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga1f5a29760ebb8f9af831e645315f553c">&#9670;&nbsp;</a></span>hwloc_distances_add_commit()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_distances_add_commit </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00222.html#ga554a4c1e315265f961830e2b616e4989">hwloc_distances_add_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Commit a new distances structure. </p>
+<p>This function finalizes the distances structure and inserts in it the topology.</p>
+<p>Parameter <code>handle</code> was previously returned by <a class="el" href="a00222.html#ga823d38fa8d21dc338497fb0f79c96704" title="Create a new empty distances structure.">hwloc_distances_add_create()</a>. Then objects and values were specified with <a class="el" href="a00222.html#ga8c9715481b0bce344c8a33c6e6a56469" title="Specify the objects and values in a new empty distances structure.">hwloc_distances_add_values()</a>.</p>
+<p><code>flags</code> configures the behavior of the function using an optional OR'ed set of <a class="el" href="a00222.html#ga22428b6bab271411e3834e6b4ca22e37" title="Flags for adding a new distances to a topology.">hwloc_distances_add_flag_e</a>. It may be used to request the grouping of existing objects based on distances.</p>
+<p>On error, the temporary distances structure and its content are destroyed.</p>
+<dl class="section return"><dt>Returns</dt><dd><code>0</code> on success. </dd>
+<dd>
+<code>-1</code> on error. </dd></dl>
+
+</div>
+</div>
+<a id="ga823d38fa8d21dc338497fb0f79c96704"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga823d38fa8d21dc338497fb0f79c96704">&#9670;&nbsp;</a></span>hwloc_distances_add_create()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00222.html#ga554a4c1e315265f961830e2b616e4989">hwloc_distances_add_handle_t</a> hwloc_distances_add_create </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>kind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Create a new empty distances structure. </p>
+<p>Create an empty distances structure to be filled with <a class="el" href="a00222.html#ga8c9715481b0bce344c8a33c6e6a56469" title="Specify the objects and values in a new empty distances structure.">hwloc_distances_add_values()</a> and then committed with <a class="el" href="a00222.html#ga1f5a29760ebb8f9af831e645315f553c" title="Commit a new distances structure.">hwloc_distances_add_commit()</a>.</p>
+<p>Parameter <code>name</code> is optional, it may be <code>NULL</code>. Otherwise, it will be copied internally and may later be freed by the caller.</p>
+<p><code>kind</code> specifies the kind of distance as a OR'ed set of <a class="el" href="a00220.html#gab1bb10d3adb85b52cdc6fe5a7f74f108" title="Kinds of distance matrices.">hwloc_distances_kind_e</a>. Kind <a class="el" href="a00220.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108aa6cf2b6dfcf148b65952f811814efbe1" title="This distances structure covers objects of different types. This may apply to the &quot;NVLinkBandwidth&quot; s...">HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES</a> will be automatically set according to objects having different types in <a class="el" href="a00222.html#ga8c9715481b0bce344c8a33c6e6a56469" title="Specify the objects and values in a new empty distances structure.">hwloc_distances_add_values()</a>.</p>
+<p><code>flags</code> must be <code>0</code> for now.</p>
+<dl class="section return"><dt>Returns</dt><dd>A hwloc_distances_add_handle_t that should then be passed to <a class="el" href="a00222.html#ga8c9715481b0bce344c8a33c6e6a56469" title="Specify the objects and values in a new empty distances structure.">hwloc_distances_add_values()</a> and <a class="el" href="a00222.html#ga1f5a29760ebb8f9af831e645315f553c" title="Commit a new distances structure.">hwloc_distances_add_commit()</a>.</dd>
+<dd>
+<code>NULL</code> on error. </dd></dl>
+
+</div>
+</div>
+<a id="ga8c9715481b0bce344c8a33c6e6a56469"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga8c9715481b0bce344c8a33c6e6a56469">&#9670;&nbsp;</a></span>hwloc_distances_add_values()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_distances_add_values </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00222.html#ga554a4c1e315265f961830e2b616e4989">hwloc_distances_add_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>nbobjs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *&#160;</td>
+          <td class="paramname"><em>objs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">hwloc_uint64_t *&#160;</td>
+          <td class="paramname"><em>values</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Specify the objects and values in a new empty distances structure. </p>
+<p>Specify the objects and values for a new distances structure that was returned as a handle by <a class="el" href="a00222.html#ga823d38fa8d21dc338497fb0f79c96704" title="Create a new empty distances structure.">hwloc_distances_add_create()</a>. The structure must then be committed with <a class="el" href="a00222.html#ga1f5a29760ebb8f9af831e645315f553c" title="Commit a new distances structure.">hwloc_distances_add_commit()</a>.</p>
+<p>The number of objects is <code>nbobjs</code> and the array of objects is <code>objs</code>. Distance values are stored as a one-dimension array in <code>values</code>. The distance from object i to object j is in slot i*nbobjs+j.</p>
+<p><code>nbobjs</code> must be at least 2.</p>
+<p>Arrays <code>objs</code> and <code>values</code> will be copied internally, they may later be freed by the caller.</p>
+<p>On error, the temporary distances structure and its content are destroyed.</p>
+<p><code>flags</code> must be <code>0</code> for now.</p>
+<dl class="section return"><dt>Returns</dt><dd><code>0</code> on success. </dd>
+<dd>
+<code>-1</code> on error. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00223.html b/doc/doxygen-doc/html/a00223.html
new file mode 100644
index 00000000..6f137f2c
--- /dev/null
+++ b/doc/doxygen-doc/html/a00223.html
@@ -0,0 +1,191 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Remove distances between objects</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Remove distances between objects</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gac188d9b64d9560255ce5f6d0a20f9c0a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00223.html#gac188d9b64d9560255ce5f6d0a20f9c0a">hwloc_distances_remove</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
+<tr class="separator:gac188d9b64d9560255ce5f6d0a20f9c0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa642a4c1a21c84f38ae23fca8a27845d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00223.html#gaa642a4c1a21c84f38ae23fca8a27845d">hwloc_distances_remove_by_depth</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int depth)</td></tr>
+<tr class="separator:gaa642a4c1a21c84f38ae23fca8a27845d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga93db53773c96f5b83815e8441e2ebb93"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00223.html#ga93db53773c96f5b83815e8441e2ebb93">hwloc_distances_remove_by_type</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
+<tr class="separator:ga93db53773c96f5b83815e8441e2ebb93"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga80bbf6f0db9af48c61780dd5152664c2"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00223.html#ga80bbf6f0db9af48c61780dd5152664c2">hwloc_distances_release_remove</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, struct <a class="el" href="a00325.html">hwloc_distances_s</a> *distances)</td></tr>
+<tr class="separator:ga80bbf6f0db9af48c61780dd5152664c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga80bbf6f0db9af48c61780dd5152664c2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga80bbf6f0db9af48c61780dd5152664c2">&#9670;&nbsp;</a></span>hwloc_distances_release_remove()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_distances_release_remove </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">struct <a class="el" href="a00325.html">hwloc_distances_s</a> *&#160;</td>
+          <td class="paramname"><em>distances</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Release and remove the given distance matrice from the topology. </p>
+<p>This function includes a call to <a class="el" href="a00220.html#ga1dd78c1f9acd54f26aba0e284e97e51d" title="Release a distance matrix structure previously returned by hwloc_distances_get().">hwloc_distances_release()</a>. </p>
+
+</div>
+</div>
+<a id="gac188d9b64d9560255ce5f6d0a20f9c0a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gac188d9b64d9560255ce5f6d0a20f9c0a">&#9670;&nbsp;</a></span>hwloc_distances_remove()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_distances_remove </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Remove all distance matrices from a topology. </p>
+<p>Remove all distance matrices, either provided by the user or gathered through the OS.</p>
+<p>If these distances were used to group objects, these additional Group objects are not removed from the topology. </p>
+
+</div>
+</div>
+<a id="gaa642a4c1a21c84f38ae23fca8a27845d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaa642a4c1a21c84f38ae23fca8a27845d">&#9670;&nbsp;</a></span>hwloc_distances_remove_by_depth()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_distances_remove_by_depth </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>depth</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Remove distance matrices for objects at a specific depth in the topology. </p>
+<p>Identical to <a class="el" href="a00223.html#gac188d9b64d9560255ce5f6d0a20f9c0a" title="Remove all distance matrices from a topology.">hwloc_distances_remove()</a> but only applies to one level of the topology. </p>
+
+</div>
+</div>
+<a id="ga93db53773c96f5b83815e8441e2ebb93"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga93db53773c96f5b83815e8441e2ebb93">&#9670;&nbsp;</a></span>hwloc_distances_remove_by_type()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_distances_remove_by_type </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
+          <td class="paramname"><em>type</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Remove distance matrices for objects of a specific type in the topology. </p>
+<p>Identical to <a class="el" href="a00223.html#gac188d9b64d9560255ce5f6d0a20f9c0a" title="Remove all distance matrices from a topology.">hwloc_distances_remove()</a> but only applies to one level of the topology. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00224.html b/doc/doxygen-doc/html/a00224.html
new file mode 100644
index 00000000..c8d09f8a
--- /dev/null
+++ b/doc/doxygen-doc/html/a00224.html
@@ -0,0 +1,504 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Comparing memory node attributes for finding where to allocate on</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Comparing memory node attributes for finding where to allocate on</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00329.html">hwloc_location</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:gacc82003a8610be554615995f0996c888"><td class="memItemLeft" align="right" valign="top">typedef unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a></td></tr>
+<tr class="separator:gacc82003a8610be554615995f0996c888"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:gab4bde745db676fc2ea4b47011cd9a80e"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html#gab4bde745db676fc2ea4b47011cd9a80e">hwloc_memattr_id_e</a> { <br />
+&#160;&#160;<a class="el" href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80eaa1cfa3ff3d56ff00ecabf7da4f5642cc">HWLOC_MEMATTR_ID_CAPACITY</a>
+, <a class="el" href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80ea9334e3a4c30a67f491c6523255134efe">HWLOC_MEMATTR_ID_LOCALITY</a>
+, <a class="el" href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80ea25fe3c7376ae6f9b584bacdb039f8c0f">HWLOC_MEMATTR_ID_BANDWIDTH</a>
+, <a class="el" href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80eac34dce925d3dadb7e255391d142b4828">HWLOC_MEMATTR_ID_READ_BANDWIDTH</a>
+, <br />
+&#160;&#160;<a class="el" href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80ea44762e8ebe327cfe665cccf1f58f7530">HWLOC_MEMATTR_ID_WRITE_BANDWIDTH</a>
+, <a class="el" href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80ead1796413759b8b87b61ad195a9349b19">HWLOC_MEMATTR_ID_LATENCY</a>
+, <a class="el" href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80ea52cab56571c7fafea42a694d80ad3dd0">HWLOC_MEMATTR_ID_READ_LATENCY</a>
+, <a class="el" href="a00224.html#ggab4bde745db676fc2ea4b47011cd9a80eaaf6cd383da87dc9f5e3a608a535a768e">HWLOC_MEMATTR_ID_WRITE_LATENCY</a>
+, <br />
+&#160;&#160;<b>HWLOC_MEMATTR_ID_MAX</b>
+<br />
+ }</td></tr>
+<tr class="separator:gab4bde745db676fc2ea4b47011cd9a80e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga33099ba58f607fc70925da3777688586"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html#ga33099ba58f607fc70925da3777688586">hwloc_location_type_e</a> { <a class="el" href="a00224.html#gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174">HWLOC_LOCATION_TYPE_CPUSET</a>
+, <a class="el" href="a00224.html#gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84">HWLOC_LOCATION_TYPE_OBJECT</a>
+ }</td></tr>
+<tr class="separator:ga33099ba58f607fc70925da3777688586"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab9c963ca37255da71b00d94e1b106f9d"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html#gab9c963ca37255da71b00d94e1b106f9d">hwloc_local_numanode_flag_e</a> { <a class="el" href="a00224.html#ggab9c963ca37255da71b00d94e1b106f9da200c6c133bb2125ba36d77ce9ca268cc">HWLOC_LOCAL_NUMANODE_FLAG_LARGER_LOCALITY</a>
+, <a class="el" href="a00224.html#ggab9c963ca37255da71b00d94e1b106f9daac9c5e3a2cfb1b193e4acfceaf3bad57">HWLOC_LOCAL_NUMANODE_FLAG_SMALLER_LOCALITY</a>
+, <a class="el" href="a00224.html#ggab9c963ca37255da71b00d94e1b106f9dab5778b34c961a5d56f98f1549edeaed0">HWLOC_LOCAL_NUMANODE_FLAG_ALL</a>
+ }</td></tr>
+<tr class="separator:gab9c963ca37255da71b00d94e1b106f9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga79f44f8e1cfd2f97a19171417a75a137"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html#ga79f44f8e1cfd2f97a19171417a75a137">hwloc_memattr_get_by_name</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const char *name, <a class="el" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> *id)</td></tr>
+<tr class="separator:ga79f44f8e1cfd2f97a19171417a75a137"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga569e80c5be7ef27649b0ef5aa52ffcdc"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html#ga569e80c5be7ef27649b0ef5aa52ffcdc">hwloc_get_local_numanode_objs</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, struct <a class="el" href="a00329.html">hwloc_location</a> *location, unsigned *nr, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *nodes, unsigned long flags)</td></tr>
+<tr class="separator:ga569e80c5be7ef27649b0ef5aa52ffcdc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga297e4a9adc2272446a4c7449dacef0df"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html#ga297e4a9adc2272446a4c7449dacef0df">hwloc_memattr_get_value</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> target_node, struct <a class="el" href="a00329.html">hwloc_location</a> *initiator, unsigned long flags, hwloc_uint64_t *value)</td></tr>
+<tr class="separator:ga297e4a9adc2272446a4c7449dacef0df"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga884d1f2ad745c2fa69c1583c82d28f10"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html#ga884d1f2ad745c2fa69c1583c82d28f10">hwloc_memattr_get_best_target</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute, struct <a class="el" href="a00329.html">hwloc_location</a> *initiator, unsigned long flags, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *best_target, hwloc_uint64_t *value)</td></tr>
+<tr class="separator:ga884d1f2ad745c2fa69c1583c82d28f10"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga9a453879892893cf8a3fcd431ade84cd"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html#ga9a453879892893cf8a3fcd431ade84cd">hwloc_memattr_get_best_initiator</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> target, unsigned long flags, struct <a class="el" href="a00329.html">hwloc_location</a> *best_initiator, hwloc_uint64_t *value)</td></tr>
+<tr class="separator:ga9a453879892893cf8a3fcd431ade84cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Platforms with heterogeneous memory require ways to decide whether a buffer should be allocated on "fast" memory (such as HBM), "normal" memory (DDR) or even "slow" but large-capacity memory (non-volatile memory). These memory nodes are called "Targets" while the CPU accessing them is called the "Initiator". Access performance depends on their locality (NUMA platforms) as well as the intrinsic performance of the targets (heterogeneous platforms).</p>
+<p>The following attributes describe the performance of memory accesses from an Initiator to a memory Target, for instance their latency or bandwidth. Initiators performing these memory accesses are usually some PUs or Cores (described as a CPU set). Hence a Core may choose where to allocate a memory buffer by comparing the attributes of different target memory nodes nearby.</p>
+<p>There are also some attributes that are system-wide. Their value does not depend on a specific initiator performing an access. The memory node Capacity is an example of such attribute without initiator.</p>
+<p>One way to use this API is to start with a cpuset describing the Cores where a program is bound. The best target NUMA node for allocating memory in this program on these Cores may be obtained by passing this cpuset as an initiator to <a class="el" href="a00224.html#ga884d1f2ad745c2fa69c1583c82d28f10" title="Return the best target NUMA node for the given attribute and initiator.">hwloc_memattr_get_best_target()</a> with the relevant memory attribute. For instance, if the code is latency limited, use the Latency attribute.</p>
+<p>A more flexible approach consists in getting the list of local NUMA nodes by passing this cpuset to <a class="el" href="a00224.html#ga569e80c5be7ef27649b0ef5aa52ffcdc" title="Return an array of local NUMA nodes.">hwloc_get_local_numanode_objs()</a>. Attribute values for these nodes, if any, may then be obtained with <a class="el" href="a00224.html#ga297e4a9adc2272446a4c7449dacef0df" title="Return an attribute value for a specific target NUMA node.">hwloc_memattr_get_value()</a> and manually compared with the desired criteria.</p>
+<dl class="section see"><dt>See also</dt><dd>An example is available in doc/examples/memory-attributes.c in the source tree.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>The API also supports specific objects as initiator, but it is currently not used internally by hwloc. Users may for instance use it to provide custom performance values for host memory accesses performed by GPUs.</dd>
+<dd>
+The interface actually also accepts targets that are not NUMA nodes. </dd></dl>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a id="gacc82003a8610be554615995f0996c888"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gacc82003a8610be554615995f0996c888">&#9670;&nbsp;</a></span>hwloc_memattr_id_t</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef unsigned <a class="el" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>A memory attribute identifier. May be either one of <a class="el" href="a00224.html#gab4bde745db676fc2ea4b47011cd9a80e" title="Memory node attributes.">hwloc_memattr_id_e</a> or a new id returned by <a class="el" href="a00225.html#ga770657d1e44b09e93e09f623936c1e5f" title="Register a new memory attribute.">hwloc_memattr_register()</a>. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a id="gab9c963ca37255da71b00d94e1b106f9d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gab9c963ca37255da71b00d94e1b106f9d">&#9670;&nbsp;</a></span>hwloc_local_numanode_flag_e</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00224.html#gab9c963ca37255da71b00d94e1b106f9d">hwloc_local_numanode_flag_e</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Flags for selecting target NUMA nodes. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggab9c963ca37255da71b00d94e1b106f9da200c6c133bb2125ba36d77ce9ca268cc"></a>HWLOC_LOCAL_NUMANODE_FLAG_LARGER_LOCALITY&#160;</td><td class="fielddoc"><p>Select NUMA nodes whose locality is larger than the given cpuset. For instance, if a single PU (or its cpuset) is given in <code>initiator</code>, select all nodes close to the package that contains this PU. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggab9c963ca37255da71b00d94e1b106f9daac9c5e3a2cfb1b193e4acfceaf3bad57"></a>HWLOC_LOCAL_NUMANODE_FLAG_SMALLER_LOCALITY&#160;</td><td class="fielddoc"><p>Select NUMA nodes whose locality is smaller than the given cpuset. For instance, if a package (or its cpuset) is given in <code>initiator</code>, also select nodes that are attached to only a half of that package. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggab9c963ca37255da71b00d94e1b106f9dab5778b34c961a5d56f98f1549edeaed0"></a>HWLOC_LOCAL_NUMANODE_FLAG_ALL&#160;</td><td class="fielddoc"><p>Select all NUMA nodes in the topology. The initiator <code>initiator</code> is ignored. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<a id="ga33099ba58f607fc70925da3777688586"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga33099ba58f607fc70925da3777688586">&#9670;&nbsp;</a></span>hwloc_location_type_e</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00224.html#ga33099ba58f607fc70925da3777688586">hwloc_location_type_e</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Type of location. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174"></a>HWLOC_LOCATION_TYPE_CPUSET&#160;</td><td class="fielddoc"><p>Location is given as a cpuset, in the location cpuset union field. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84"></a>HWLOC_LOCATION_TYPE_OBJECT&#160;</td><td class="fielddoc"><p>Location is given as an object, in the location object union field. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<a id="gab4bde745db676fc2ea4b47011cd9a80e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gab4bde745db676fc2ea4b47011cd9a80e">&#9670;&nbsp;</a></span>hwloc_memattr_id_e</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00224.html#gab4bde745db676fc2ea4b47011cd9a80e">hwloc_memattr_id_e</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Memory node attributes. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggab4bde745db676fc2ea4b47011cd9a80eaa1cfa3ff3d56ff00ecabf7da4f5642cc"></a>HWLOC_MEMATTR_ID_CAPACITY&#160;</td><td class="fielddoc"><p>The "Capacity" is returned in bytes (local_memory attribute in objects). </p>
+<p>Best capacity nodes are nodes with <b>higher capacity</b>.</p>
+<p>No initiator is involved when looking at this attribute. The corresponding attribute flags are <a class="el" href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815" title="The best nodes for this memory attribute are those with the higher values. For instance Bandwidth.">HWLOC_MEMATTR_FLAG_HIGHER_FIRST</a>. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggab4bde745db676fc2ea4b47011cd9a80ea9334e3a4c30a67f491c6523255134efe"></a>HWLOC_MEMATTR_ID_LOCALITY&#160;</td><td class="fielddoc"><p>The "Locality" is returned as the number of PUs in that locality (e.g. the weight of its cpuset). </p>
+<p>Best locality nodes are nodes with <b>smaller locality</b> (nodes that are local to very few PUs). Poor locality nodes are nodes with larger locality (nodes that are local to the entire machine).</p>
+<p>No initiator is involved when looking at this attribute. The corresponding attribute flags are <a class="el" href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815" title="The best nodes for this memory attribute are those with the higher values. For instance Bandwidth.">HWLOC_MEMATTR_FLAG_HIGHER_FIRST</a>. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggab4bde745db676fc2ea4b47011cd9a80ea25fe3c7376ae6f9b584bacdb039f8c0f"></a>HWLOC_MEMATTR_ID_BANDWIDTH&#160;</td><td class="fielddoc"><p>The "Bandwidth" is returned in MiB/s, as seen from the given initiator location. </p>
+<p>Best bandwidth nodes are nodes with <b>higher bandwidth</b>.</p>
+<p>The corresponding attribute flags are <a class="el" href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815" title="The best nodes for this memory attribute are those with the higher values. For instance Bandwidth.">HWLOC_MEMATTR_FLAG_HIGHER_FIRST</a> and <a class="el" href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96" title="The value returned for this memory attribute depends on the given initiator. For instance Bandwidth a...">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a>.</p>
+<p>This is the average bandwidth for read and write accesses. If the platform provides individual read and write bandwidths but no explicit average value, hwloc computes and returns the average. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggab4bde745db676fc2ea4b47011cd9a80eac34dce925d3dadb7e255391d142b4828"></a>HWLOC_MEMATTR_ID_READ_BANDWIDTH&#160;</td><td class="fielddoc"><p>The "ReadBandwidth" is returned in MiB/s, as seen from the given initiator location. </p>
+<p>Best bandwidth nodes are nodes with <b>higher bandwidth</b>.</p>
+<p>The corresponding attribute flags are <a class="el" href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815" title="The best nodes for this memory attribute are those with the higher values. For instance Bandwidth.">HWLOC_MEMATTR_FLAG_HIGHER_FIRST</a> and <a class="el" href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96" title="The value returned for this memory attribute depends on the given initiator. For instance Bandwidth a...">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a>. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggab4bde745db676fc2ea4b47011cd9a80ea44762e8ebe327cfe665cccf1f58f7530"></a>HWLOC_MEMATTR_ID_WRITE_BANDWIDTH&#160;</td><td class="fielddoc"><p>The "WriteBandwidth" is returned in MiB/s, as seen from the given initiator location. </p>
+<p>Best bandwidth nodes are nodes with <b>higher bandwidth</b>.</p>
+<p>The corresponding attribute flags are <a class="el" href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815" title="The best nodes for this memory attribute are those with the higher values. For instance Bandwidth.">HWLOC_MEMATTR_FLAG_HIGHER_FIRST</a> and <a class="el" href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96" title="The value returned for this memory attribute depends on the given initiator. For instance Bandwidth a...">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a>. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggab4bde745db676fc2ea4b47011cd9a80ead1796413759b8b87b61ad195a9349b19"></a>HWLOC_MEMATTR_ID_LATENCY&#160;</td><td class="fielddoc"><p>The "Latency" is returned as nanoseconds, as seen from the given initiator location. </p>
+<p>Best latency nodes are nodes with <b>smaller latency</b>.</p>
+<p>The corresponding attribute flags are <a class="el" href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9601b5b0e1e68635e7e9901f28bd93bf" title="The best nodes for this memory attribute are those with the lower values. For instance Latency.">HWLOC_MEMATTR_FLAG_LOWER_FIRST</a> and <a class="el" href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96" title="The value returned for this memory attribute depends on the given initiator. For instance Bandwidth a...">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a>.</p>
+<p>This is the average latency for read and write accesses. If the platform provides individual read and write latencies but no explicit average value, hwloc computes and returns the average. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggab4bde745db676fc2ea4b47011cd9a80ea52cab56571c7fafea42a694d80ad3dd0"></a>HWLOC_MEMATTR_ID_READ_LATENCY&#160;</td><td class="fielddoc"><p>The "ReadLatency" is returned as nanoseconds, as seen from the given initiator location. </p>
+<p>Best latency nodes are nodes with <b>smaller latency</b>.</p>
+<p>The corresponding attribute flags are <a class="el" href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9601b5b0e1e68635e7e9901f28bd93bf" title="The best nodes for this memory attribute are those with the lower values. For instance Latency.">HWLOC_MEMATTR_FLAG_LOWER_FIRST</a> and <a class="el" href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96" title="The value returned for this memory attribute depends on the given initiator. For instance Bandwidth a...">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a>. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="ggab4bde745db676fc2ea4b47011cd9a80eaaf6cd383da87dc9f5e3a608a535a768e"></a>HWLOC_MEMATTR_ID_WRITE_LATENCY&#160;</td><td class="fielddoc"><p>The "WriteLatency" is returned as nanoseconds, as seen from the given initiator location. </p>
+<p>Best latency nodes are nodes with <b>smaller latency</b>.</p>
+<p>The corresponding attribute flags are <a class="el" href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9601b5b0e1e68635e7e9901f28bd93bf" title="The best nodes for this memory attribute are those with the lower values. For instance Latency.">HWLOC_MEMATTR_FLAG_LOWER_FIRST</a> and <a class="el" href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96" title="The value returned for this memory attribute depends on the given initiator. For instance Bandwidth a...">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a>. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga569e80c5be7ef27649b0ef5aa52ffcdc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga569e80c5be7ef27649b0ef5aa52ffcdc">&#9670;&nbsp;</a></span>hwloc_get_local_numanode_objs()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_get_local_numanode_objs </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">struct <a class="el" href="a00329.html">hwloc_location</a> *&#160;</td>
+          <td class="paramname"><em>location</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned *&#160;</td>
+          <td class="paramname"><em>nr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *&#160;</td>
+          <td class="paramname"><em>nodes</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Return an array of local NUMA nodes. </p>
+<p>By default only select the NUMA nodes whose locality is exactly the given <code>location</code>. More nodes may be selected if additional flags are given as a OR'ed set of <a class="el" href="a00224.html#gab9c963ca37255da71b00d94e1b106f9d" title="Flags for selecting target NUMA nodes.">hwloc_local_numanode_flag_e</a>.</p>
+<p>If <code>location</code> is given as an explicit object, its CPU set is used to find NUMA nodes with the corresponding locality. If the object does not have a CPU set (e.g. I/O object), the CPU parent (where the I/O object is attached) is used.</p>
+<p>On input, <code>nr</code> points to the number of nodes that may be stored in the <code>nodes</code> array. On output, <code>nr</code> will be changed to the number of stored nodes, or the number of nodes that would have been stored if there were enough room.</p>
+<dl class="section note"><dt>Note</dt><dd>Some of these NUMA nodes may not have any memory attribute values and hence not be reported as actual targets in other functions.</dd>
+<dd>
+The number of NUMA nodes in the topology (obtained by <a class="el" href="a00217.html#ga0200466842c0e1f5da75e84dde460b10" title="Compute the &quot;weight&quot; of bitmap bitmap (i.e., number of indexes that are in the bitmap).">hwloc_bitmap_weight()</a> on the root object nodeset) may be used to allocate the <code>nodes</code> array.</dd>
+<dd>
+When an object CPU set is given as locality, for instance a Package, and when flags contain both <a class="el" href="a00224.html#ggab9c963ca37255da71b00d94e1b106f9da200c6c133bb2125ba36d77ce9ca268cc" title="Select NUMA nodes whose locality is larger than the given cpuset. For instance, if a single PU (or it...">HWLOC_LOCAL_NUMANODE_FLAG_LARGER_LOCALITY</a> and <a class="el" href="a00224.html#ggab9c963ca37255da71b00d94e1b106f9daac9c5e3a2cfb1b193e4acfceaf3bad57" title="Select NUMA nodes whose locality is smaller than the given cpuset. For instance, if a package (or its...">HWLOC_LOCAL_NUMANODE_FLAG_SMALLER_LOCALITY</a>, the returned array corresponds to the nodeset of that object. </dd></dl>
+
+</div>
+</div>
+<a id="ga9a453879892893cf8a3fcd431ade84cd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga9a453879892893cf8a3fcd431ade84cd">&#9670;&nbsp;</a></span>hwloc_memattr_get_best_initiator()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_memattr_get_best_initiator </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a>&#160;</td>
+          <td class="paramname"><em>attribute</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>target</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">struct <a class="el" href="a00329.html">hwloc_location</a> *&#160;</td>
+          <td class="paramname"><em>best_initiator</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">hwloc_uint64_t *&#160;</td>
+          <td class="paramname"><em>value</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Return the best initiator for the given attribute and target NUMA node. </p>
+<p>If the attribute does not relate to a specific initiator (it does not have the flag <a class="el" href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96" title="The value returned for this memory attribute depends on the given initiator. For instance Bandwidth a...">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a>), <code>-1</code> is returned and <code>errno</code> is set to <code>EINVAL</code>.</p>
+<p>If <code>value</code> is non <code>NULL</code>, the corresponding value is returned there.</p>
+<p>If multiple initiators have the same attribute values, only one is returned (and there is no way to clarify how that one is chosen). Applications that want to detect initiators with identical/similar values, or that want to look at values for multiple attributes, should rather get all values using <a class="el" href="a00224.html#ga297e4a9adc2272446a4c7449dacef0df" title="Return an attribute value for a specific target NUMA node.">hwloc_memattr_get_value()</a> and manually select the initiator they consider the best.</p>
+<p>The returned initiator should not be modified or freed, it belongs to the topology.</p>
+<p><code>flags</code> must be <code>0</code> for now.</p>
+<p>If there are no matching initiators, <code>-1</code> is returned with <code>errno</code> set to <code>ENOENT</code>; </p>
+
+</div>
+</div>
+<a id="ga884d1f2ad745c2fa69c1583c82d28f10"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga884d1f2ad745c2fa69c1583c82d28f10">&#9670;&nbsp;</a></span>hwloc_memattr_get_best_target()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_memattr_get_best_target </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a>&#160;</td>
+          <td class="paramname"><em>attribute</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">struct <a class="el" href="a00329.html">hwloc_location</a> *&#160;</td>
+          <td class="paramname"><em>initiator</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *&#160;</td>
+          <td class="paramname"><em>best_target</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">hwloc_uint64_t *&#160;</td>
+          <td class="paramname"><em>value</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Return the best target NUMA node for the given attribute and initiator. </p>
+<p>If the attribute does not relate to a specific initiator (it does not have the flag <a class="el" href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96" title="The value returned for this memory attribute depends on the given initiator. For instance Bandwidth a...">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a>), location <code>initiator</code> is ignored and may be <code>NULL</code>.</p>
+<p>If <code>value</code> is non <code>NULL</code>, the corresponding value is returned there.</p>
+<p>If multiple targets have the same attribute values, only one is returned (and there is no way to clarify how that one is chosen). Applications that want to detect targets with identical/similar values, or that want to look at values for multiple attributes, should rather get all values using <a class="el" href="a00224.html#ga297e4a9adc2272446a4c7449dacef0df" title="Return an attribute value for a specific target NUMA node.">hwloc_memattr_get_value()</a> and manually select the target they consider the best.</p>
+<p><code>flags</code> must be <code>0</code> for now.</p>
+<p>If there are no matching targets, <code>-1</code> is returned with <code>errno</code> set to <code>ENOENT</code>;</p>
+<dl class="section note"><dt>Note</dt><dd>The initiator <code>initiator</code> should be of type <a class="el" href="a00224.html#gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174" title="Location is given as a cpuset, in the location cpuset union field.">HWLOC_LOCATION_TYPE_CPUSET</a> when refering to accesses performed by CPU cores. <a class="el" href="a00224.html#gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84" title="Location is given as an object, in the location object union field.">HWLOC_LOCATION_TYPE_OBJECT</a> is currently unused internally by hwloc, but users may for instance use it to provide custom information about host memory accesses performed by GPUs. </dd></dl>
+
+</div>
+</div>
+<a id="ga79f44f8e1cfd2f97a19171417a75a137"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga79f44f8e1cfd2f97a19171417a75a137">&#9670;&nbsp;</a></span>hwloc_memattr_get_by_name()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_memattr_get_by_name </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> *&#160;</td>
+          <td class="paramname"><em>id</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Return the identifier of the memory attribute with the given name. </p>
+
+</div>
+</div>
+<a id="ga297e4a9adc2272446a4c7449dacef0df"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga297e4a9adc2272446a4c7449dacef0df">&#9670;&nbsp;</a></span>hwloc_memattr_get_value()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_memattr_get_value </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a>&#160;</td>
+          <td class="paramname"><em>attribute</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>target_node</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">struct <a class="el" href="a00329.html">hwloc_location</a> *&#160;</td>
+          <td class="paramname"><em>initiator</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">hwloc_uint64_t *&#160;</td>
+          <td class="paramname"><em>value</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Return an attribute value for a specific target NUMA node. </p>
+<p>If the attribute does not relate to a specific initiator (it does not have the flag <a class="el" href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96" title="The value returned for this memory attribute depends on the given initiator. For instance Bandwidth a...">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a>), location <code>initiator</code> is ignored and may be <code>NULL</code>.</p>
+<p><code>flags</code> must be <code>0</code> for now.</p>
+<dl class="section note"><dt>Note</dt><dd>The initiator <code>initiator</code> should be of type <a class="el" href="a00224.html#gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174" title="Location is given as a cpuset, in the location cpuset union field.">HWLOC_LOCATION_TYPE_CPUSET</a> when refering to accesses performed by CPU cores. <a class="el" href="a00224.html#gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84" title="Location is given as an object, in the location object union field.">HWLOC_LOCATION_TYPE_OBJECT</a> is currently unused internally by hwloc, but users may for instance use it to provide custom information about host memory accesses performed by GPUs. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00225.html b/doc/doxygen-doc/html/a00225.html
new file mode 100644
index 00000000..e25e4d2c
--- /dev/null
+++ b/doc/doxygen-doc/html/a00225.html
@@ -0,0 +1,414 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Managing memory attributes</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Managing memory attributes</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:ga78aceb4cac4d614c0f5e82dbfeb779e5"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#ga78aceb4cac4d614c0f5e82dbfeb779e5">hwloc_memattr_flag_e</a> { <a class="el" href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815">HWLOC_MEMATTR_FLAG_HIGHER_FIRST</a> = (1UL&lt;&lt;0)
+, <a class="el" href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9601b5b0e1e68635e7e9901f28bd93bf">HWLOC_MEMATTR_FLAG_LOWER_FIRST</a> = (1UL&lt;&lt;1)
+, <a class="el" href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a> = (1UL&lt;&lt;2)
+ }</td></tr>
+<tr class="separator:ga78aceb4cac4d614c0f5e82dbfeb779e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga5300e9be1abdea2e00c18492148aecd0"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#ga5300e9be1abdea2e00c18492148aecd0">hwloc_memattr_get_name</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute, const char **name)</td></tr>
+<tr class="separator:ga5300e9be1abdea2e00c18492148aecd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4c62b626085adeaffb233e5f2a03a5eb"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#ga4c62b626085adeaffb233e5f2a03a5eb">hwloc_memattr_get_flags</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute, unsigned long *flags)</td></tr>
+<tr class="separator:ga4c62b626085adeaffb233e5f2a03a5eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga770657d1e44b09e93e09f623936c1e5f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#ga770657d1e44b09e93e09f623936c1e5f">hwloc_memattr_register</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const char *name, unsigned long flags, <a class="el" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> *id)</td></tr>
+<tr class="separator:ga770657d1e44b09e93e09f623936c1e5f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga960529c08b25cf15825e0f72ecceb504"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#ga960529c08b25cf15825e0f72ecceb504">hwloc_memattr_set_value</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> target_node, struct <a class="el" href="a00329.html">hwloc_location</a> *initiator, unsigned long flags, hwloc_uint64_t value)</td></tr>
+<tr class="separator:ga960529c08b25cf15825e0f72ecceb504"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac8c06c1c89ab352c5db8e04a75033513"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#gac8c06c1c89ab352c5db8e04a75033513">hwloc_memattr_get_targets</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute, struct <a class="el" href="a00329.html">hwloc_location</a> *initiator, unsigned long flags, unsigned *nr, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *targets, hwloc_uint64_t *values)</td></tr>
+<tr class="separator:gac8c06c1c89ab352c5db8e04a75033513"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga049aaa860dcbbf0792f0fd4251a99ec0"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#ga049aaa860dcbbf0792f0fd4251a99ec0">hwloc_memattr_get_initiators</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> target_node, unsigned long flags, unsigned *nr, struct <a class="el" href="a00329.html">hwloc_location</a> *initiators, hwloc_uint64_t *values)</td></tr>
+<tr class="separator:ga049aaa860dcbbf0792f0fd4251a99ec0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a id="ga78aceb4cac4d614c0f5e82dbfeb779e5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga78aceb4cac4d614c0f5e82dbfeb779e5">&#9670;&nbsp;</a></span>hwloc_memattr_flag_e</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00225.html#ga78aceb4cac4d614c0f5e82dbfeb779e5">hwloc_memattr_flag_e</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Memory attribute flags. Given to <a class="el" href="a00225.html#ga770657d1e44b09e93e09f623936c1e5f" title="Register a new memory attribute.">hwloc_memattr_register()</a> and returned by <a class="el" href="a00225.html#ga4c62b626085adeaffb233e5f2a03a5eb" title="Return the flags of the given attribute.">hwloc_memattr_get_flags()</a>. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815"></a>HWLOC_MEMATTR_FLAG_HIGHER_FIRST&#160;</td><td class="fielddoc"><p>The best nodes for this memory attribute are those with the higher values. For instance Bandwidth. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga78aceb4cac4d614c0f5e82dbfeb779e5a9601b5b0e1e68635e7e9901f28bd93bf"></a>HWLOC_MEMATTR_FLAG_LOWER_FIRST&#160;</td><td class="fielddoc"><p>The best nodes for this memory attribute are those with the lower values. For instance Latency. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96"></a>HWLOC_MEMATTR_FLAG_NEED_INITIATOR&#160;</td><td class="fielddoc"><p>The value returned for this memory attribute depends on the given initiator. For instance Bandwidth and Latency, but not Capacity. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga4c62b626085adeaffb233e5f2a03a5eb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga4c62b626085adeaffb233e5f2a03a5eb">&#9670;&nbsp;</a></span>hwloc_memattr_get_flags()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_memattr_get_flags </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a>&#160;</td>
+          <td class="paramname"><em>attribute</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long *&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Return the flags of the given attribute. </p>
+<p>Flags are a OR'ed set of <a class="el" href="a00225.html#ga78aceb4cac4d614c0f5e82dbfeb779e5" title="Memory attribute flags. Given to hwloc_memattr_register() and returned by hwloc_memattr_get_flags().">hwloc_memattr_flag_e</a>. </p>
+
+</div>
+</div>
+<a id="ga049aaa860dcbbf0792f0fd4251a99ec0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga049aaa860dcbbf0792f0fd4251a99ec0">&#9670;&nbsp;</a></span>hwloc_memattr_get_initiators()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_memattr_get_initiators </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a>&#160;</td>
+          <td class="paramname"><em>attribute</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>target_node</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned *&#160;</td>
+          <td class="paramname"><em>nr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">struct <a class="el" href="a00329.html">hwloc_location</a> *&#160;</td>
+          <td class="paramname"><em>initiators</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">hwloc_uint64_t *&#160;</td>
+          <td class="paramname"><em>values</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Return the initiators that have values for a given attribute for a specific target NUMA node. </p>
+<p>Return initiators for the given attribute and target node in the <code>initiators</code> array. If <code>values</code> is not <code>NULL</code>, the corresponding attribute values are stored in the array it points to.</p>
+<p>On input, <code>nr</code> points to the number of initiators that may be stored in the array <code>initiators</code> (and <code>values</code>). On output, <code>nr</code> points to the number of initiators (and values) that were actually found, even if some of them couldn't be stored in the array. Initiators that couldn't be stored are ignored, but the function still returns success (<code>0</code>). The caller may find out by comparing the value pointed by <code>nr</code> before and after the function call.</p>
+<p>The returned initiators should not be modified or freed, they belong to the topology.</p>
+<p><code>flags</code> must be <code>0</code> for now.</p>
+<p>If the attribute does not relate to a specific initiator (it does not have the flag <a class="el" href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96" title="The value returned for this memory attribute depends on the given initiator. For instance Bandwidth a...">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a>), no initiator is returned.</p>
+<dl class="section note"><dt>Note</dt><dd>This function is meant for tools and debugging (listing internal information) rather than for application queries. Applications should rather select useful NUMA nodes with <a class="el" href="a00224.html#ga569e80c5be7ef27649b0ef5aa52ffcdc" title="Return an array of local NUMA nodes.">hwloc_get_local_numanode_objs()</a> and then look at their attribute values for some relevant initiators. </dd></dl>
+
+</div>
+</div>
+<a id="ga5300e9be1abdea2e00c18492148aecd0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga5300e9be1abdea2e00c18492148aecd0">&#9670;&nbsp;</a></span>hwloc_memattr_get_name()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_memattr_get_name </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a>&#160;</td>
+          <td class="paramname"><em>attribute</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char **&#160;</td>
+          <td class="paramname"><em>name</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Return the name of a memory attribute. </p>
+
+</div>
+</div>
+<a id="gac8c06c1c89ab352c5db8e04a75033513"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gac8c06c1c89ab352c5db8e04a75033513">&#9670;&nbsp;</a></span>hwloc_memattr_get_targets()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_memattr_get_targets </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a>&#160;</td>
+          <td class="paramname"><em>attribute</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">struct <a class="el" href="a00329.html">hwloc_location</a> *&#160;</td>
+          <td class="paramname"><em>initiator</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned *&#160;</td>
+          <td class="paramname"><em>nr</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *&#160;</td>
+          <td class="paramname"><em>targets</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">hwloc_uint64_t *&#160;</td>
+          <td class="paramname"><em>values</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Return the target NUMA nodes that have some values for a given attribute. </p>
+<p>Return targets for the given attribute in the <code>targets</code> array (for the given initiator if any). If <code>values</code> is not <code>NULL</code>, the corresponding attribute values are stored in the array it points to.</p>
+<p>On input, <code>nr</code> points to the number of targets that may be stored in the array <code>targets</code> (and <code>values</code>). On output, <code>nr</code> points to the number of targets (and values) that were actually found, even if some of them couldn't be stored in the array. Targets that couldn't be stored are ignored, but the function still returns success (<code>0</code>). The caller may find out by comparing the value pointed by <code>nr</code> before and after the function call.</p>
+<p>The returned targets should not be modified or freed, they belong to the topology.</p>
+<p>Argument <code>initiator</code> is ignored if the attribute does not relate to a specific initiator (it does not have the flag <a class="el" href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96" title="The value returned for this memory attribute depends on the given initiator. For instance Bandwidth a...">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a>). Otherwise <code>initiator</code> may be non <code>NULL</code> to report only targets that have a value for that initiator.</p>
+<p><code>flags</code> must be <code>0</code> for now.</p>
+<dl class="section note"><dt>Note</dt><dd>This function is meant for tools and debugging (listing internal information) rather than for application queries. Applications should rather select useful NUMA nodes with <a class="el" href="a00224.html#ga569e80c5be7ef27649b0ef5aa52ffcdc" title="Return an array of local NUMA nodes.">hwloc_get_local_numanode_objs()</a> and then look at their attribute values.</dd>
+<dd>
+The initiator <code>initiator</code> should be of type <a class="el" href="a00224.html#gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174" title="Location is given as a cpuset, in the location cpuset union field.">HWLOC_LOCATION_TYPE_CPUSET</a> when referring to accesses performed by CPU cores. <a class="el" href="a00224.html#gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84" title="Location is given as an object, in the location object union field.">HWLOC_LOCATION_TYPE_OBJECT</a> is currently unused internally by hwloc, but users may for instance use it to provide custom information about host memory accesses performed by GPUs. </dd></dl>
+
+</div>
+</div>
+<a id="ga770657d1e44b09e93e09f623936c1e5f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga770657d1e44b09e93e09f623936c1e5f">&#9670;&nbsp;</a></span>hwloc_memattr_register()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_memattr_register </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> *&#160;</td>
+          <td class="paramname"><em>id</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Register a new memory attribute. </p>
+<p>Add a specific memory attribute that is not defined in <a class="el" href="a00224.html#gab4bde745db676fc2ea4b47011cd9a80e" title="Memory node attributes.">hwloc_memattr_id_e</a>. Flags are a OR'ed set of <a class="el" href="a00225.html#ga78aceb4cac4d614c0f5e82dbfeb779e5" title="Memory attribute flags. Given to hwloc_memattr_register() and returned by hwloc_memattr_get_flags().">hwloc_memattr_flag_e</a>. It must contain at least one of <a class="el" href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815" title="The best nodes for this memory attribute are those with the higher values. For instance Bandwidth.">HWLOC_MEMATTR_FLAG_HIGHER_FIRST</a> or <a class="el" href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9601b5b0e1e68635e7e9901f28bd93bf" title="The best nodes for this memory attribute are those with the lower values. For instance Latency.">HWLOC_MEMATTR_FLAG_LOWER_FIRST</a>. </p>
+
+</div>
+</div>
+<a id="ga960529c08b25cf15825e0f72ecceb504"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga960529c08b25cf15825e0f72ecceb504">&#9670;&nbsp;</a></span>hwloc_memattr_set_value()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_memattr_set_value </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00224.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a>&#160;</td>
+          <td class="paramname"><em>attribute</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>target_node</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">struct <a class="el" href="a00329.html">hwloc_location</a> *&#160;</td>
+          <td class="paramname"><em>initiator</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">hwloc_uint64_t&#160;</td>
+          <td class="paramname"><em>value</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Set an attribute value for a specific target NUMA node. </p>
+<p>If the attribute does not relate to a specific initiator (it does not have the flag <a class="el" href="a00225.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96" title="The value returned for this memory attribute depends on the given initiator. For instance Bandwidth a...">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a>), location <code>initiator</code> is ignored and may be <code>NULL</code>.</p>
+<p>The initiator will be copied into the topology, the caller should free anything allocated to store the initiator, for instance the cpuset.</p>
+<p><code>flags</code> must be <code>0</code> for now.</p>
+<dl class="section note"><dt>Note</dt><dd>The initiator <code>initiator</code> should be of type <a class="el" href="a00224.html#gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174" title="Location is given as a cpuset, in the location cpuset union field.">HWLOC_LOCATION_TYPE_CPUSET</a> when referring to accesses performed by CPU cores. <a class="el" href="a00224.html#gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84" title="Location is given as an object, in the location object union field.">HWLOC_LOCATION_TYPE_OBJECT</a> is currently unused internally by hwloc, but users may for instance use it to provide custom information about host memory accesses performed by GPUs. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00226.html b/doc/doxygen-doc/html/a00226.html
new file mode 100644
index 00000000..0a1b5a15
--- /dev/null
+++ b/doc/doxygen-doc/html/a00226.html
@@ -0,0 +1,293 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Kinds of CPU cores</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Kinds of CPU cores</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga7553f7c6d3920b169f3fc18dfe6a33e3"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00226.html#ga7553f7c6d3920b169f3fc18dfe6a33e3">hwloc_cpukinds_get_nr</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned long flags)</td></tr>
+<tr class="separator:ga7553f7c6d3920b169f3fc18dfe6a33e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf979833aab18d2e7f4b17c932cbcf5d8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00226.html#gaf979833aab18d2e7f4b17c932cbcf5d8">hwloc_cpukinds_get_by_cpuset</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> cpuset, unsigned long flags)</td></tr>
+<tr class="separator:gaf979833aab18d2e7f4b17c932cbcf5d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae1b38fbe9c645583fc16052ce6fbb275"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00226.html#gae1b38fbe9c645583fc16052ce6fbb275">hwloc_cpukinds_get_info</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned kind_index, <a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> cpuset, int *efficiency, unsigned *nr_infos, struct <a class="el" href="a00301.html">hwloc_info_s</a> **infos, unsigned long flags)</td></tr>
+<tr class="separator:gae1b38fbe9c645583fc16052ce6fbb275"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6164ba92cfd06f530ec2c4a18a0dd5a9"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00226.html#ga6164ba92cfd06f530ec2c4a18a0dd5a9">hwloc_cpukinds_register</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> cpuset, int forced_efficiency, unsigned nr_infos, struct <a class="el" href="a00301.html">hwloc_info_s</a> *infos, unsigned long flags)</td></tr>
+<tr class="separator:ga6164ba92cfd06f530ec2c4a18a0dd5a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Platforms with heterogeneous CPUs may have some cores with different features or frequencies. This API exposes identical PUs in sets called CPU kinds. Each PU of the topology may only be in a single kind.</p>
+<p>The number of kinds may be obtained with <a class="el" href="a00226.html#ga7553f7c6d3920b169f3fc18dfe6a33e3" title="Get the number of different kinds of CPU cores in the topology.">hwloc_cpukinds_get_nr()</a>. If the platform is homogeneous, there may be a single kind with all PUs. If the platform or operating system does not expose any information about CPU cores, there may be no kind at all.</p>
+<p>The index of the kind that describes a given CPU set (if any, and not partially) may be obtained with <a class="el" href="a00226.html#gaf979833aab18d2e7f4b17c932cbcf5d8" title="Get the index of the CPU kind that contains CPUs listed in cpuset.">hwloc_cpukinds_get_by_cpuset()</a>.</p>
+<p>From the index of a kind, it is possible to retrieve information with <a class="el" href="a00226.html#gae1b38fbe9c645583fc16052ce6fbb275" title="Get the CPU set and infos about a CPU kind in the topology.">hwloc_cpukinds_get_info()</a>: an abstracted efficiency value, and an array of info attributes (for instance the "CoreType" and "FrequencyMaxMHz", see <a class="el" href="a00402.html#topoattrs_cpukinds">CPU Kinds</a>).</p>
+<p>A higher efficiency value means greater intrinsic performance (and possibly less performance/power efficiency). Kinds with lower efficiency values are ranked first: Passing 0 as <code>kind_index</code> to <a class="el" href="a00226.html#gae1b38fbe9c645583fc16052ce6fbb275" title="Get the CPU set and infos about a CPU kind in the topology.">hwloc_cpukinds_get_info()</a> will return information about the CPU kind with lower performance but higher energy-efficiency. Higher <code>kind_index</code> values would rather return information about power-hungry high-performance cores.</p>
+<p>When available, efficiency values are gathered from the operating system. If so, <code>cpukind_efficiency</code> is set in the struct <a class="el" href="a00305.html" title="Flags describing actual discovery support for this topology.">hwloc_topology_discovery_support</a> array. This is currently available on Windows 10, Mac OS X (Darwin), and on some Linux platforms where core "capacity" is exposed in sysfs.</p>
+<p>If the operating system does not expose core efficiencies natively, hwloc tries to compute efficiencies by comparing CPU kinds using frequencies (on ARM), or core types and frequencies (on other architectures). The environment variable HWLOC_CPUKINDS_RANKING may be used to change this heuristics, see <a class="el" href="a00397.html">Environment Variables</a>.</p>
+<p>If hwloc fails to rank any kind, for instance because the operating system does not expose efficiencies and core frequencies, all kinds will have an unknown efficiency (<code>-1</code>), and they are not indexed/ordered in any specific way. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="gaf979833aab18d2e7f4b17c932cbcf5d8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaf979833aab18d2e7f4b17c932cbcf5d8">&#9670;&nbsp;</a></span>hwloc_cpukinds_get_by_cpuset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_cpukinds_get_by_cpuset </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>cpuset</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Get the index of the CPU kind that contains CPUs listed in <code>cpuset</code>. </p>
+<p><code>flags</code> must be <code>0</code> for now.</p>
+<dl class="section return"><dt>Returns</dt><dd>The index of the CPU kind (positive integer or 0) on success. </dd>
+<dd>
+<code>-1</code> with <code>errno</code> set to <code>EXDEV</code> if <code>cpuset</code> is only partially included in the some kind. </dd>
+<dd>
+<code>-1</code> with <code>errno</code> set to <code>ENOENT</code> if <code>cpuset</code> is not included in any kind, even partially. </dd>
+<dd>
+<code>-1</code> with <code>errno</code> set to <code>EINVAL</code> if parameters are invalid. </dd></dl>
+
+</div>
+</div>
+<a id="gae1b38fbe9c645583fc16052ce6fbb275"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gae1b38fbe9c645583fc16052ce6fbb275">&#9670;&nbsp;</a></span>hwloc_cpukinds_get_info()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_cpukinds_get_info </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>kind_index</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>cpuset</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int *&#160;</td>
+          <td class="paramname"><em>efficiency</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned *&#160;</td>
+          <td class="paramname"><em>nr_infos</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">struct <a class="el" href="a00301.html">hwloc_info_s</a> **&#160;</td>
+          <td class="paramname"><em>infos</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Get the CPU set and infos about a CPU kind in the topology. </p>
+<p><code>kind_index</code> identifies one kind of CPU between 0 and the number of kinds returned by <a class="el" href="a00226.html#ga7553f7c6d3920b169f3fc18dfe6a33e3" title="Get the number of different kinds of CPU cores in the topology.">hwloc_cpukinds_get_nr()</a> minus 1.</p>
+<p>If not <code>NULL</code>, the bitmap <code>cpuset</code> will be filled with the set of PUs of this kind.</p>
+<p>The integer pointed by <code>efficiency</code>, if not <code>NULL</code> will, be filled with the ranking of this kind of CPU in term of efficiency (see above). It ranges from <code>0</code> to the number of kinds (as reported by <a class="el" href="a00226.html#ga7553f7c6d3920b169f3fc18dfe6a33e3" title="Get the number of different kinds of CPU cores in the topology.">hwloc_cpukinds_get_nr()</a>) minus 1.</p>
+<p>Kinds with lower efficiency are reported first.</p>
+<p>If there is a single kind in the topology, its efficiency <code>0</code>. If the efficiency of some kinds of cores is unknown, the efficiency of all kinds is set to <code>-1</code>, and kinds are reported in no specific order.</p>
+<p>The array of info attributes (for instance the "CoreType", "FrequencyMaxMHz" or "FrequencyBaseMHz", see <a class="el" href="a00402.html#topoattrs_cpukinds">CPU Kinds</a>) and its length are returned in <code>infos</code> or <code>nr_infos</code>. The array belongs to the topology, it should not be freed or modified.</p>
+<p>If <code>nr_infos</code> or <code>infos</code> is <code>NULL</code>, no info is returned.</p>
+<p><code>flags</code> must be <code>0</code> for now.</p>
+<dl class="section return"><dt>Returns</dt><dd><code>0</code> on success. </dd>
+<dd>
+<code>-1</code> with <code>errno</code> set to <code>ENOENT</code> if <code>kind_index</code> does not match any CPU kind. </dd>
+<dd>
+<code>-1</code> with <code>errno</code> set to <code>EINVAL</code> if parameters are invalid. </dd></dl>
+
+</div>
+</div>
+<a id="ga7553f7c6d3920b169f3fc18dfe6a33e3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga7553f7c6d3920b169f3fc18dfe6a33e3">&#9670;&nbsp;</a></span>hwloc_cpukinds_get_nr()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_cpukinds_get_nr </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Get the number of different kinds of CPU cores in the topology. </p>
+<p><code>flags</code> must be <code>0</code> for now.</p>
+<dl class="section return"><dt>Returns</dt><dd>The number of CPU kinds (positive integer) on success. </dd>
+<dd>
+<code>0</code> if no information about kinds was found. </dd>
+<dd>
+<code>-1</code> with <code>errno</code> set to <code>EINVAL</code> if <code>flags</code> is invalid. </dd></dl>
+
+</div>
+</div>
+<a id="ga6164ba92cfd06f530ec2c4a18a0dd5a9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga6164ba92cfd06f530ec2c4a18a0dd5a9">&#9670;&nbsp;</a></span>hwloc_cpukinds_register()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_cpukinds_register </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>cpuset</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>forced_efficiency</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>nr_infos</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">struct <a class="el" href="a00301.html">hwloc_info_s</a> *&#160;</td>
+          <td class="paramname"><em>infos</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Register a kind of CPU in the topology. </p>
+<p>Mark the PUs listed in <code>cpuset</code> as being of the same kind with respect to the given attributes.</p>
+<p><code>forced_efficiency</code> should be <code>-1</code> if unknown. Otherwise it is an abstracted efficiency value to enforce the ranking of all kinds if all of them have valid (and different) efficiencies.</p>
+<p>The array <code>infos</code> of size <code>nr_infos</code> may be used to provide info names and values describing this kind of PUs.</p>
+<p><code>flags</code> must be <code>0</code> for now.</p>
+<p>Parameters <code>cpuset</code> and <code>infos</code> will be duplicated internally, the caller is responsible for freeing them.</p>
+<p>If <code>cpuset</code> overlaps with some existing kinds, those might get modified or split. For instance if existing kind A contains PUs 0 and 1, and one registers another kind for PU 1 and 2, there will be 3 resulting kinds: existing kind A is restricted to only PU 0; new kind B contains only PU 1 and combines information from A and from the newly-registered kind; new kind C contains only PU 2 and only gets information from the newly-registered kind.</p>
+<dl class="section note"><dt>Note</dt><dd>The efficiency <code>forced_efficiency</code> provided to this function may be different from the one reported later by <a class="el" href="a00226.html#gae1b38fbe9c645583fc16052ce6fbb275" title="Get the CPU set and infos about a CPU kind in the topology.">hwloc_cpukinds_get_info()</a> because hwloc will scale efficiency values down to between 0 and the number of kinds minus 1.</dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><code>0</code> on success. </dd>
+<dd>
+<code>-1</code> with <code>errno</code> set to <code>EINVAL</code> if some parameters are invalid, for instance if <code>cpuset</code> is <code>NULL</code> or empty. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00227.html b/doc/doxygen-doc/html/a00227.html
new file mode 100644
index 00000000..7bf049b3
--- /dev/null
+++ b/doc/doxygen-doc/html/a00227.html
@@ -0,0 +1,216 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Linux-specific helpers</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Linux-specific helpers</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga630e699c56b5f3d2e534b475944c216e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00227.html#ga630e699c56b5f3d2e534b475944c216e">hwloc_linux_set_tid_cpubind</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, pid_t tid, <a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set)</td></tr>
+<tr class="separator:ga630e699c56b5f3d2e534b475944c216e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaddcb985cb56337a4d6693cee72e7bf94"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00227.html#gaddcb985cb56337a4d6693cee72e7bf94">hwloc_linux_get_tid_cpubind</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, pid_t tid, <a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</td></tr>
+<tr class="separator:gaddcb985cb56337a4d6693cee72e7bf94"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacc7945c2d06c6db1e58f8fd953009134"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00227.html#gacc7945c2d06c6db1e58f8fd953009134">hwloc_linux_get_tid_last_cpu_location</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, pid_t tid, <a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set)</td></tr>
+<tr class="separator:gacc7945c2d06c6db1e58f8fd953009134"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf72d83e273803226ce772973e37b85de"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00227.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a> (const char *path, <a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set)</td></tr>
+<tr class="separator:gaf72d83e273803226ce772973e37b85de"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>This includes helpers for manipulating Linux kernel cpumap files, and hwloc equivalents of the Linux sched_setaffinity and sched_getaffinity system calls. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="gaddcb985cb56337a4d6693cee72e7bf94"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaddcb985cb56337a4d6693cee72e7bf94">&#9670;&nbsp;</a></span>hwloc_linux_get_tid_cpubind()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_linux_get_tid_cpubind </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">pid_t&#160;</td>
+          <td class="paramname"><em>tid</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Get the current binding of thread <code>tid</code>. </p>
+<p>The CPU-set <code>set</code> (previously allocated by the caller) is filled with the list of PUs which the thread was last bound to.</p>
+<p>The behavior is exactly the same as the Linux sched_getaffinity system call, but uses a hwloc cpuset.</p>
+<dl class="section note"><dt>Note</dt><dd>This is equivalent to calling <a class="el" href="a00202.html#gac82de91f788fa82dacf99c6e0d4b7158" title="Get the current physical binding of process pid.">hwloc_get_proc_cpubind()</a> with <a class="el" href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421" title="Bind current thread of current process.">HWLOC_CPUBIND_THREAD</a> as flags. </dd></dl>
+
+</div>
+</div>
+<a id="gacc7945c2d06c6db1e58f8fd953009134"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gacc7945c2d06c6db1e58f8fd953009134">&#9670;&nbsp;</a></span>hwloc_linux_get_tid_last_cpu_location()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_linux_get_tid_last_cpu_location </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">pid_t&#160;</td>
+          <td class="paramname"><em>tid</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Get the last physical CPU where thread <code>tid</code> ran. </p>
+<p>The CPU-set <code>set</code> (previously allocated by the caller) is filled with the PU which the thread last ran on.</p>
+<dl class="section note"><dt>Note</dt><dd>This is equivalent to calling <a class="el" href="a00202.html#ga910a05c2d47f68a3155bf176b50fa555" title="Get the last physical CPU where a process ran.">hwloc_get_proc_last_cpu_location()</a> with <a class="el" href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421" title="Bind current thread of current process.">HWLOC_CPUBIND_THREAD</a> as flags. </dd></dl>
+
+</div>
+</div>
+<a id="gaf72d83e273803226ce772973e37b85de"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaf72d83e273803226ce772973e37b85de">&#9670;&nbsp;</a></span>hwloc_linux_read_path_as_cpumask()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_linux_read_path_as_cpumask </td>
+          <td>(</td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>path</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Convert a linux kernel cpumask file <code>path</code> into a hwloc bitmap <code>set</code>. </p>
+<p>Might be used when reading CPU set from sysfs attributes such as topology and caches for processors, or local_cpus for devices.</p>
+<dl class="section note"><dt>Note</dt><dd>This function ignores the HWLOC_FSROOT environment variable. </dd></dl>
+
+</div>
+</div>
+<a id="ga630e699c56b5f3d2e534b475944c216e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga630e699c56b5f3d2e534b475944c216e">&#9670;&nbsp;</a></span>hwloc_linux_set_tid_cpubind()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_linux_set_tid_cpubind </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">pid_t&#160;</td>
+          <td class="paramname"><em>tid</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Bind a thread <code>tid</code> on cpus given in cpuset <code>set</code>. </p>
+<p>The behavior is exactly the same as the Linux sched_setaffinity system call, but uses a hwloc cpuset.</p>
+<dl class="section note"><dt>Note</dt><dd>This is equivalent to calling <a class="el" href="a00202.html#ga296db8a3c6d49b51fb83d6f3e45c02a6" title="Bind a process pid on CPUs given in physical bitmap set.">hwloc_set_proc_cpubind()</a> with HWLOC_CPUBIND_THREAD as flags. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00228.html b/doc/doxygen-doc/html/a00228.html
new file mode 100644
index 00000000..d0a3606e
--- /dev/null
+++ b/doc/doxygen-doc/html/a00228.html
@@ -0,0 +1,280 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Interoperability with Linux libnuma unsigned long masks</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Interoperability with Linux libnuma unsigned long masks</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gae577962390f84b0b12f503314ab0f972"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#gae577962390f84b0b12f503314ab0f972">hwloc_cpuset_to_linux_libnuma_ulongs</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> cpuset, unsigned long *mask, unsigned long *maxnode)</td></tr>
+<tr class="separator:gae577962390f84b0b12f503314ab0f972"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga585ccf818d2f217f4e53f9c6506c3128"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#ga585ccf818d2f217f4e53f9c6506c3128">hwloc_nodeset_to_linux_libnuma_ulongs</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00195.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> nodeset, unsigned long *mask, unsigned long *maxnode)</td></tr>
+<tr class="separator:ga585ccf818d2f217f4e53f9c6506c3128"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0e9d051e068940f722f6fdc61814149d"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#ga0e9d051e068940f722f6fdc61814149d">hwloc_cpuset_from_linux_libnuma_ulongs</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> cpuset, const unsigned long *mask, unsigned long maxnode)</td></tr>
+<tr class="separator:ga0e9d051e068940f722f6fdc61814149d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad8491c672eb2594cc5e7b0a026867192"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#gad8491c672eb2594cc5e7b0a026867192">hwloc_nodeset_from_linux_libnuma_ulongs</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00195.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a> nodeset, const unsigned long *mask, unsigned long maxnode)</td></tr>
+<tr class="separator:gad8491c672eb2594cc5e7b0a026867192"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>This interface helps converting between Linux libnuma unsigned long masks and hwloc cpusets and nodesets.</p>
+<dl class="section note"><dt>Note</dt><dd>Topology <code>topology</code> must match the current machine.</dd>
+<dd>
+The behavior of libnuma is undefined if the kernel is not NUMA-aware. (when CONFIG_NUMA is not set in the kernel configuration). This helper and libnuma may thus not be strictly compatible in this case, which may be detected by checking whether numa_available() returns -1. </dd></dl>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga0e9d051e068940f722f6fdc61814149d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga0e9d051e068940f722f6fdc61814149d">&#9670;&nbsp;</a></span>hwloc_cpuset_from_linux_libnuma_ulongs()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_cpuset_from_linux_libnuma_ulongs </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>cpuset</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const unsigned long *&#160;</td>
+          <td class="paramname"><em>mask</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>maxnode</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Convert the array of unsigned long <code>mask</code> into hwloc CPU set. </p>
+<p><code>mask</code> is a array of unsigned long that will be read. <code>maxnode</code> contains the maximal node number that may be read in <code>mask</code>.</p>
+<p>This function may be used after calling get_mempolicy or any other function that takes an array of unsigned long as output parameter (and possibly a maximal node number as input parameter). </p>
+
+</div>
+</div>
+<a id="gae577962390f84b0b12f503314ab0f972"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gae577962390f84b0b12f503314ab0f972">&#9670;&nbsp;</a></span>hwloc_cpuset_to_linux_libnuma_ulongs()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_cpuset_to_linux_libnuma_ulongs </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>cpuset</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long *&#160;</td>
+          <td class="paramname"><em>mask</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long *&#160;</td>
+          <td class="paramname"><em>maxnode</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Convert hwloc CPU set <code>cpuset</code> into the array of unsigned long <code>mask</code>. </p>
+<p><code>mask</code> is the array of unsigned long that will be filled. <code>maxnode</code> contains the maximal node number that may be stored in <code>mask</code>. <code>maxnode</code> will be set to the maximal node number that was found, plus one.</p>
+<p>This function may be used before calling set_mempolicy, mbind, migrate_pages or any other function that takes an array of unsigned long and a maximal node number as input parameter. </p>
+
+</div>
+</div>
+<a id="gad8491c672eb2594cc5e7b0a026867192"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gad8491c672eb2594cc5e7b0a026867192">&#9670;&nbsp;</a></span>hwloc_nodeset_from_linux_libnuma_ulongs()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_nodeset_from_linux_libnuma_ulongs </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a>&#160;</td>
+          <td class="paramname"><em>nodeset</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const unsigned long *&#160;</td>
+          <td class="paramname"><em>mask</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>maxnode</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Convert the array of unsigned long <code>mask</code> into hwloc NUMA node set. </p>
+<p><code>mask</code> is a array of unsigned long that will be read. <code>maxnode</code> contains the maximal node number that may be read in <code>mask</code>.</p>
+<p>This function may be used after calling get_mempolicy or any other function that takes an array of unsigned long as output parameter (and possibly a maximal node number as input parameter). </p>
+
+</div>
+</div>
+<a id="ga585ccf818d2f217f4e53f9c6506c3128"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga585ccf818d2f217f4e53f9c6506c3128">&#9670;&nbsp;</a></span>hwloc_nodeset_to_linux_libnuma_ulongs()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_nodeset_to_linux_libnuma_ulongs </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a>&#160;</td>
+          <td class="paramname"><em>nodeset</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long *&#160;</td>
+          <td class="paramname"><em>mask</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long *&#160;</td>
+          <td class="paramname"><em>maxnode</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Convert hwloc NUMA node set <code>nodeset</code> into the array of unsigned long <code>mask</code>. </p>
+<p><code>mask</code> is the array of unsigned long that will be filled. <code>maxnode</code> contains the maximal node number that may be stored in <code>mask</code>. <code>maxnode</code> will be set to the maximal node number that was found, plus one.</p>
+<p>This function may be used before calling set_mempolicy, mbind, migrate_pages or any other function that takes an array of unsigned long and a maximal node number as input parameter. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00229.html b/doc/doxygen-doc/html/a00229.html
new file mode 100644
index 00000000..3dd2eefc
--- /dev/null
+++ b/doc/doxygen-doc/html/a00229.html
@@ -0,0 +1,244 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Interoperability with Linux libnuma bitmask</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Interoperability with Linux libnuma bitmask</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gad8769b4544c0aeef154fc8223144e343"><td class="memItemLeft" align="right" valign="top">static struct bitmask *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#gad8769b4544c0aeef154fc8223144e343">hwloc_cpuset_to_linux_libnuma_bitmask</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> cpuset)</td></tr>
+<tr class="separator:gad8769b4544c0aeef154fc8223144e343"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gadfaa14c1bec76965ac2e05f0c3f3473b"><td class="memItemLeft" align="right" valign="top">static struct bitmask *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#gadfaa14c1bec76965ac2e05f0c3f3473b">hwloc_nodeset_to_linux_libnuma_bitmask</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00195.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> nodeset)</td></tr>
+<tr class="separator:gadfaa14c1bec76965ac2e05f0c3f3473b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga37c8421110b1842414809019098794ef"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#ga37c8421110b1842414809019098794ef">hwloc_cpuset_from_linux_libnuma_bitmask</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> cpuset, const struct bitmask *bitmask)</td></tr>
+<tr class="separator:ga37c8421110b1842414809019098794ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaaca6bff3086aad5bdbd2f4c5f0ad14cc"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#gaaca6bff3086aad5bdbd2f4c5f0ad14cc">hwloc_nodeset_from_linux_libnuma_bitmask</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00195.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a> nodeset, const struct bitmask *bitmask)</td></tr>
+<tr class="separator:gaaca6bff3086aad5bdbd2f4c5f0ad14cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>This interface helps converting between Linux libnuma bitmasks and hwloc cpusets and nodesets.</p>
+<dl class="section note"><dt>Note</dt><dd>Topology <code>topology</code> must match the current machine.</dd>
+<dd>
+The behavior of libnuma is undefined if the kernel is not NUMA-aware. (when CONFIG_NUMA is not set in the kernel configuration). This helper and libnuma may thus not be strictly compatible in this case, which may be detected by checking whether numa_available() returns -1. </dd></dl>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga37c8421110b1842414809019098794ef"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga37c8421110b1842414809019098794ef">&#9670;&nbsp;</a></span>hwloc_cpuset_from_linux_libnuma_bitmask()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_cpuset_from_linux_libnuma_bitmask </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>cpuset</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const struct bitmask *&#160;</td>
+          <td class="paramname"><em>bitmask</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Convert libnuma bitmask <code>bitmask</code> into hwloc CPU set <code>cpuset</code>. </p>
+<p>This function may be used after calling many numa_ functions that use a struct bitmask as an output parameter. </p>
+
+</div>
+</div>
+<a id="gad8769b4544c0aeef154fc8223144e343"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gad8769b4544c0aeef154fc8223144e343">&#9670;&nbsp;</a></span>hwloc_cpuset_to_linux_libnuma_bitmask()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static struct bitmask * hwloc_cpuset_to_linux_libnuma_bitmask </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>cpuset</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Convert hwloc CPU set <code>cpuset</code> into the returned libnuma bitmask. </p>
+<p>The returned bitmask should later be freed with numa_bitmask_free.</p>
+<p>This function may be used before calling many numa_ functions that use a struct bitmask as an input parameter.</p>
+<dl class="section return"><dt>Returns</dt><dd>newly allocated struct bitmask. </dd></dl>
+
+</div>
+</div>
+<a id="gaaca6bff3086aad5bdbd2f4c5f0ad14cc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaaca6bff3086aad5bdbd2f4c5f0ad14cc">&#9670;&nbsp;</a></span>hwloc_nodeset_from_linux_libnuma_bitmask()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_nodeset_from_linux_libnuma_bitmask </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a>&#160;</td>
+          <td class="paramname"><em>nodeset</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const struct bitmask *&#160;</td>
+          <td class="paramname"><em>bitmask</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Convert libnuma bitmask <code>bitmask</code> into hwloc NUMA node set <code>nodeset</code>. </p>
+<p>This function may be used after calling many numa_ functions that use a struct bitmask as an output parameter. </p>
+
+</div>
+</div>
+<a id="gadfaa14c1bec76965ac2e05f0c3f3473b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gadfaa14c1bec76965ac2e05f0c3f3473b">&#9670;&nbsp;</a></span>hwloc_nodeset_to_linux_libnuma_bitmask()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static struct bitmask * hwloc_nodeset_to_linux_libnuma_bitmask </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a>&#160;</td>
+          <td class="paramname"><em>nodeset</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Convert hwloc NUMA node set <code>nodeset</code> into the returned libnuma bitmask. </p>
+<p>The returned bitmask should later be freed with numa_bitmask_free.</p>
+<p>This function may be used before calling many numa_ functions that use a struct bitmask as an input parameter.</p>
+<dl class="section return"><dt>Returns</dt><dd>newly allocated struct bitmask. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00230.html b/doc/doxygen-doc/html/a00230.html
new file mode 100644
index 00000000..d5985663
--- /dev/null
+++ b/doc/doxygen-doc/html/a00230.html
@@ -0,0 +1,146 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Windows-specific helpers</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Windows-specific helpers</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gaa4376a1969660a344911d117f645d3dd"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html#gaa4376a1969660a344911d117f645d3dd">hwloc_windows_get_nr_processor_groups</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned long flags)</td></tr>
+<tr class="separator:gaa4376a1969660a344911d117f645d3dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga167d1f28d3bd9defe1ffa940c14e8dd1"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html#ga167d1f28d3bd9defe1ffa940c14e8dd1">hwloc_windows_get_processor_group_cpuset</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned pg_index, <a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> cpuset, unsigned long flags)</td></tr>
+<tr class="separator:ga167d1f28d3bd9defe1ffa940c14e8dd1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>These functions query Windows processor groups. These groups partition the operating system into virtual sets of up to 64 neighbor PUs. Threads and processes may only be bound inside a single group. Although Windows processor groups may be exposed in the hwloc hierarchy as hwloc Groups, they are also often merged into existing hwloc objects such as NUMA nodes or Packages. This API provides explicit information about Windows processor groups so that applications know whether binding to a large set of PUs may fail because it spans over multiple Windows processor groups. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="gaa4376a1969660a344911d117f645d3dd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaa4376a1969660a344911d117f645d3dd">&#9670;&nbsp;</a></span>hwloc_windows_get_nr_processor_groups()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_windows_get_nr_processor_groups </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Get the number of Windows processor groups. </p>
+<p><code>flags</code> must be 0 for now.</p>
+<dl class="section return"><dt>Returns</dt><dd>at least <code>1</code> on success. </dd>
+<dd>
+-1 on error, for instance if the topology does not match the current system (e.g. loaded from another machine through XML). </dd></dl>
+
+</div>
+</div>
+<a id="ga167d1f28d3bd9defe1ffa940c14e8dd1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga167d1f28d3bd9defe1ffa940c14e8dd1">&#9670;&nbsp;</a></span>hwloc_windows_get_processor_group_cpuset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_windows_get_processor_group_cpuset </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>pg_index</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>cpuset</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Get the CPU-set of a Windows processor group. </p>
+<p>Get the set of PU included in the processor group specified by <code>pg_index</code>. <code>pg_index</code> must be between <code>0</code> and the value returned by <a class="el" href="a00230.html#gaa4376a1969660a344911d117f645d3dd" title="Get the number of Windows processor groups.">hwloc_windows_get_nr_processor_groups()</a> minus 1.</p>
+<p><code>flags</code> must be 0 for now.</p>
+<dl class="section return"><dt>Returns</dt><dd><code>0</code> on success. </dd>
+<dd>
+<code>-1</code> on error, for instance if <code>pg_index</code> is invalid, or if the topology does not match the current system (e.g. loaded from another machine through XML). </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00231.html b/doc/doxygen-doc/html/a00231.html
new file mode 100644
index 00000000..ba70be51
--- /dev/null
+++ b/doc/doxygen-doc/html/a00231.html
@@ -0,0 +1,170 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Interoperability with glibc sched affinity</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Interoperability with glibc sched affinity</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga88699a0c86c66a9b7baa3468cd9d24c3"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#ga88699a0c86c66a9b7baa3468cd9d24c3">hwloc_cpuset_to_glibc_sched_affinity</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> hwlocset, cpu_set_t *schedset, size_t schedsetsize)</td></tr>
+<tr class="separator:ga88699a0c86c66a9b7baa3468cd9d24c3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8ec807ec17de57fa77aa5cfd6c8e4bfb"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#ga8ec807ec17de57fa77aa5cfd6c8e4bfb">hwloc_cpuset_from_glibc_sched_affinity</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> hwlocset, const cpu_set_t *schedset, size_t schedsetsize)</td></tr>
+<tr class="separator:ga8ec807ec17de57fa77aa5cfd6c8e4bfb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>This interface offers ways to convert between hwloc cpusets and glibc cpusets such as those manipulated by sched_getaffinity() or pthread_attr_setaffinity_np().</p>
+<dl class="section note"><dt>Note</dt><dd>Topology <code>topology</code> must match the current machine. </dd></dl>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga8ec807ec17de57fa77aa5cfd6c8e4bfb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga8ec807ec17de57fa77aa5cfd6c8e4bfb">&#9670;&nbsp;</a></span>hwloc_cpuset_from_glibc_sched_affinity()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_cpuset_from_glibc_sched_affinity </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>hwlocset</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const cpu_set_t *&#160;</td>
+          <td class="paramname"><em>schedset</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>schedsetsize</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Convert glibc sched affinity CPU set <code>schedset</code> into hwloc CPU set. </p>
+<p>This function may be used before calling sched_setaffinity or any other function that takes a cpu_set_t as input parameter.</p>
+<p><code>schedsetsize</code> should be sizeof(cpu_set_t) unless <code>schedset</code> was dynamically allocated with CPU_ALLOC </p>
+
+</div>
+</div>
+<a id="ga88699a0c86c66a9b7baa3468cd9d24c3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga88699a0c86c66a9b7baa3468cd9d24c3">&#9670;&nbsp;</a></span>hwloc_cpuset_to_glibc_sched_affinity()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_cpuset_to_glibc_sched_affinity </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>hwlocset</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">cpu_set_t *&#160;</td>
+          <td class="paramname"><em>schedset</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>schedsetsize</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Convert hwloc CPU set <code>toposet</code> into glibc sched affinity CPU set <code>schedset</code>. </p>
+<p>This function may be used before calling sched_setaffinity or any other function that takes a cpu_set_t as input parameter.</p>
+<p><code>schedsetsize</code> should be sizeof(cpu_set_t) unless <code>schedset</code> was dynamically allocated with CPU_ALLOC </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00232.html b/doc/doxygen-doc/html/a00232.html
new file mode 100644
index 00000000..9465db05
--- /dev/null
+++ b/doc/doxygen-doc/html/a00232.html
@@ -0,0 +1,270 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Interoperability with OpenCL</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Interoperability with OpenCL</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gab89e4d20f8a353299351b41849e35ac9"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00232.html#gab89e4d20f8a353299351b41849e35ac9">hwloc_opencl_get_device_pci_busid</a> (cl_device_id device, unsigned *domain, unsigned *bus, unsigned *dev, unsigned *func)</td></tr>
+<tr class="separator:gab89e4d20f8a353299351b41849e35ac9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacc32737d4648d16b0d292438f210ec90"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00232.html#gacc32737d4648d16b0d292438f210ec90">hwloc_opencl_get_device_cpuset</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, cl_device_id device, <a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</td></tr>
+<tr class="separator:gacc32737d4648d16b0d292438f210ec90"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae39352d124cb330eb37b84b418ed6cc5"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00232.html#gae39352d124cb330eb37b84b418ed6cc5">hwloc_opencl_get_device_osdev_by_index</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned platform_index, unsigned device_index)</td></tr>
+<tr class="separator:gae39352d124cb330eb37b84b418ed6cc5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gadabfa6516aa12e5d8f79b9b4dd9f3cf8"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00232.html#gadabfa6516aa12e5d8f79b9b4dd9f3cf8">hwloc_opencl_get_device_osdev</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, cl_device_id device)</td></tr>
+<tr class="separator:gadabfa6516aa12e5d8f79b9b4dd9f3cf8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>This interface offers ways to retrieve topology information about OpenCL devices.</p>
+<p>Only AMD and NVIDIA OpenCL implementations currently offer useful locality information about their devices. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="gacc32737d4648d16b0d292438f210ec90"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gacc32737d4648d16b0d292438f210ec90">&#9670;&nbsp;</a></span>hwloc_opencl_get_device_cpuset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_opencl_get_device_cpuset </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">cl_device_id&#160;</td>
+          <td class="paramname"><em>device</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the CPU set of processors that are physically close to OpenCL device <code>device</code>. </p>
+<p>Store in <code>set</code> the CPU-set describing the locality of the OpenCL device <code>device</code>.</p>
+<p>Topology <code>topology</code> and device <code>device</code> must match the local machine. I/O devices detection and the OpenCL component are not needed in the topology.</p>
+<p>The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see <a class="el" href="a00232.html#gadabfa6516aa12e5d8f79b9b4dd9f3cf8" title="Get the hwloc OS device object corresponding to OpenCL device deviceX.">hwloc_opencl_get_device_osdev()</a> and <a class="el" href="a00232.html#gae39352d124cb330eb37b84b418ed6cc5" title="Get the hwloc OS device object corresponding to the OpenCL device for the given indexes.">hwloc_opencl_get_device_osdev_by_index()</a>.</p>
+<p>This function is currently only implemented in a meaningful way for Linux with the AMD or NVIDIA OpenCL implementation; other systems will simply get a full cpuset. </p>
+
+</div>
+</div>
+<a id="gadabfa6516aa12e5d8f79b9b4dd9f3cf8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gadabfa6516aa12e5d8f79b9b4dd9f3cf8">&#9670;&nbsp;</a></span>hwloc_opencl_get_device_osdev()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_opencl_get_device_osdev </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">cl_device_id&#160;</td>
+          <td class="paramname"><em>device</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the hwloc OS device object corresponding to OpenCL device <code>deviceX</code>. </p>
+<dl class="section return"><dt>Returns</dt><dd>The hwloc OS device object corresponding to the given OpenCL device <code>device</code>. </dd>
+<dd>
+<code>NULL</code> if none could be found, for instance if required OpenCL attributes are not available.</dd></dl>
+<p>This function currently only works on AMD and NVIDIA OpenCL devices that support relevant OpenCL extensions. <a class="el" href="a00232.html#gae39352d124cb330eb37b84b418ed6cc5" title="Get the hwloc OS device object corresponding to the OpenCL device for the given indexes.">hwloc_opencl_get_device_osdev_by_index()</a> should be preferred whenever possible, i.e. when platform and device index are known.</p>
+<p>Topology <code>topology</code> and device <code>device</code> must match the local machine. I/O devices detection and the OpenCL component must be enabled in the topology. If not, the locality of the object may still be found using <a class="el" href="a00232.html#gacc32737d4648d16b0d292438f210ec90" title="Get the CPU set of processors that are physically close to OpenCL device device.">hwloc_opencl_get_device_cpuset()</a>.</p>
+<dl class="section note"><dt>Note</dt><dd>This function cannot work if PCI devices are filtered out.</dd>
+<dd>
+The corresponding hwloc PCI device may be found by looking at the result parent pointer (unless PCI devices are filtered out). </dd></dl>
+
+</div>
+</div>
+<a id="gae39352d124cb330eb37b84b418ed6cc5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gae39352d124cb330eb37b84b418ed6cc5">&#9670;&nbsp;</a></span>hwloc_opencl_get_device_osdev_by_index()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_opencl_get_device_osdev_by_index </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>platform_index</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>device_index</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the hwloc OS device object corresponding to the OpenCL device for the given indexes. </p>
+<dl class="section return"><dt>Returns</dt><dd>The hwloc OS device object describing the OpenCL device whose platform index is <code>platform_index</code>, and whose device index within this platform if <code>device_index</code>. </dd>
+<dd>
+<code>NULL</code> if there is none.</dd></dl>
+<p>The topology <code>topology</code> does not necessarily have to match the current machine. For instance the topology may be an XML import of a remote host. I/O devices detection and the OpenCL component must be enabled in the topology.</p>
+<dl class="section note"><dt>Note</dt><dd>The corresponding PCI device object can be obtained by looking at the OS device parent object (unless PCI devices are filtered out). </dd></dl>
+
+</div>
+</div>
+<a id="gab89e4d20f8a353299351b41849e35ac9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gab89e4d20f8a353299351b41849e35ac9">&#9670;&nbsp;</a></span>hwloc_opencl_get_device_pci_busid()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_opencl_get_device_pci_busid </td>
+          <td>(</td>
+          <td class="paramtype">cl_device_id&#160;</td>
+          <td class="paramname"><em>device</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned *&#160;</td>
+          <td class="paramname"><em>domain</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned *&#160;</td>
+          <td class="paramname"><em>bus</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned *&#160;</td>
+          <td class="paramname"><em>dev</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned *&#160;</td>
+          <td class="paramname"><em>func</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Return the domain, bus and device IDs of the OpenCL device <code>device</code>. </p>
+<p>Device <code>device</code> must match the local machine. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00233.html b/doc/doxygen-doc/html/a00233.html
new file mode 100644
index 00000000..4fbeb9da
--- /dev/null
+++ b/doc/doxygen-doc/html/a00233.html
@@ -0,0 +1,308 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Interoperability with the CUDA Driver API</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Interoperability with the CUDA Driver API</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga1084285e8ff8b7df91c28917637481c6"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00233.html#ga1084285e8ff8b7df91c28917637481c6">hwloc_cuda_get_device_pci_ids</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, CUdevice cudevice, int *domain, int *bus, int *dev)</td></tr>
+<tr class="separator:ga1084285e8ff8b7df91c28917637481c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaec41c6b4dc3361156beb7dea2a74f5a3"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00233.html#gaec41c6b4dc3361156beb7dea2a74f5a3">hwloc_cuda_get_device_cpuset</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, CUdevice cudevice, <a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</td></tr>
+<tr class="separator:gaec41c6b4dc3361156beb7dea2a74f5a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga11fed607fa404e29e8da010f3ec128e4"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00233.html#ga11fed607fa404e29e8da010f3ec128e4">hwloc_cuda_get_device_pcidev</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, CUdevice cudevice)</td></tr>
+<tr class="separator:ga11fed607fa404e29e8da010f3ec128e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga252cb72175f1a2d682f883a0add80a66"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00233.html#ga252cb72175f1a2d682f883a0add80a66">hwloc_cuda_get_device_osdev</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, CUdevice cudevice)</td></tr>
+<tr class="separator:ga252cb72175f1a2d682f883a0add80a66"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga12ee892994ed037e8f64bbffda02cf2e"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00233.html#ga12ee892994ed037e8f64bbffda02cf2e">hwloc_cuda_get_device_osdev_by_index</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned idx)</td></tr>
+<tr class="separator:ga12ee892994ed037e8f64bbffda02cf2e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>This interface offers ways to retrieve topology information about CUDA devices when using the CUDA Driver API. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="gaec41c6b4dc3361156beb7dea2a74f5a3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaec41c6b4dc3361156beb7dea2a74f5a3">&#9670;&nbsp;</a></span>hwloc_cuda_get_device_cpuset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_cuda_get_device_cpuset </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">CUdevice&#160;</td>
+          <td class="paramname"><em>cudevice</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the CPU set of processors that are physically close to device <code>cudevice</code>. </p>
+<p>Store in <code>set</code> the CPU-set describing the locality of the CUDA device <code>cudevice</code>.</p>
+<p>Topology <code>topology</code> and device <code>cudevice</code> must match the local machine. I/O devices detection and the CUDA component are not needed in the topology.</p>
+<p>The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see <a class="el" href="a00233.html#ga252cb72175f1a2d682f883a0add80a66" title="Get the hwloc OS device object corresponding to CUDA device cudevice.">hwloc_cuda_get_device_osdev()</a> and <a class="el" href="a00233.html#ga12ee892994ed037e8f64bbffda02cf2e" title="Get the hwloc OS device object corresponding to the CUDA device whose index is idx.">hwloc_cuda_get_device_osdev_by_index()</a>.</p>
+<p>This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset. </p>
+
+</div>
+</div>
+<a id="ga252cb72175f1a2d682f883a0add80a66"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga252cb72175f1a2d682f883a0add80a66">&#9670;&nbsp;</a></span>hwloc_cuda_get_device_osdev()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_cuda_get_device_osdev </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">CUdevice&#160;</td>
+          <td class="paramname"><em>cudevice</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the hwloc OS device object corresponding to CUDA device <code>cudevice</code>. </p>
+<dl class="section return"><dt>Returns</dt><dd>The hwloc OS device object that describes the given CUDA device <code>cudevice</code>. </dd>
+<dd>
+<code>NULL</code> if none could be found.</dd></dl>
+<p>Topology <code>topology</code> and device <code>cudevice</code> must match the local machine. I/O devices detection and the CUDA component must be enabled in the topology. If not, the locality of the object may still be found using <a class="el" href="a00233.html#gaec41c6b4dc3361156beb7dea2a74f5a3" title="Get the CPU set of processors that are physically close to device cudevice.">hwloc_cuda_get_device_cpuset()</a>.</p>
+<dl class="section note"><dt>Note</dt><dd>This function cannot work if PCI devices are filtered out.</dd>
+<dd>
+The corresponding hwloc PCI device may be found by looking at the result parent pointer (unless PCI devices are filtered out). </dd></dl>
+
+</div>
+</div>
+<a id="ga12ee892994ed037e8f64bbffda02cf2e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga12ee892994ed037e8f64bbffda02cf2e">&#9670;&nbsp;</a></span>hwloc_cuda_get_device_osdev_by_index()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_cuda_get_device_osdev_by_index </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>idx</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the hwloc OS device object corresponding to the CUDA device whose index is <code>idx</code>. </p>
+<dl class="section return"><dt>Returns</dt><dd>The hwloc OS device object describing the CUDA device whose index is <code>idx</code>. </dd>
+<dd>
+<code>NULL</code> if none could be found.</dd></dl>
+<p>The topology <code>topology</code> does not necessarily have to match the current machine. For instance the topology may be an XML import of a remote host. I/O devices detection and the CUDA component must be enabled in the topology.</p>
+<dl class="section note"><dt>Note</dt><dd>The corresponding PCI device object can be obtained by looking at the OS device parent object (unless PCI devices are filtered out).</dd>
+<dd>
+This function is identical to <a class="el" href="a00234.html#gac0f3eeaf7712919f298097b1a21307b0" title="Get the hwloc OS device object corresponding to the CUDA device whose index is idx.">hwloc_cudart_get_device_osdev_by_index()</a>. </dd></dl>
+
+</div>
+</div>
+<a id="ga1084285e8ff8b7df91c28917637481c6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga1084285e8ff8b7df91c28917637481c6">&#9670;&nbsp;</a></span>hwloc_cuda_get_device_pci_ids()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_cuda_get_device_pci_ids </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">CUdevice&#160;</td>
+          <td class="paramname"><em>cudevice</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int *&#160;</td>
+          <td class="paramname"><em>domain</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int *&#160;</td>
+          <td class="paramname"><em>bus</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int *&#160;</td>
+          <td class="paramname"><em>dev</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Return the domain, bus and device IDs of the CUDA device <code>cudevice</code>. </p>
+<p>Device <code>cudevice</code> must match the local machine. </p>
+
+</div>
+</div>
+<a id="ga11fed607fa404e29e8da010f3ec128e4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga11fed607fa404e29e8da010f3ec128e4">&#9670;&nbsp;</a></span>hwloc_cuda_get_device_pcidev()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_cuda_get_device_pcidev </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">CUdevice&#160;</td>
+          <td class="paramname"><em>cudevice</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the hwloc PCI device object corresponding to the CUDA device <code>cudevice</code>. </p>
+<dl class="section return"><dt>Returns</dt><dd>The hwloc PCI device object describing the CUDA device <code>cudevice</code>. </dd>
+<dd>
+<code>NULL</code> if none could be found.</dd></dl>
+<p>Topology <code>topology</code> and device <code>cudevice</code> must match the local machine. I/O devices detection must be enabled in topology <code>topology</code>. The CUDA component is not needed in the topology. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00234.html b/doc/doxygen-doc/html/a00234.html
new file mode 100644
index 00000000..9a735bd7
--- /dev/null
+++ b/doc/doxygen-doc/html/a00234.html
@@ -0,0 +1,261 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Interoperability with the CUDA Runtime API</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Interoperability with the CUDA Runtime API</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gad8b701d9a34923e34bd58defd4c1e704"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gad8b701d9a34923e34bd58defd4c1e704">hwloc_cudart_get_device_pci_ids</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int idx, int *domain, int *bus, int *dev)</td></tr>
+<tr class="separator:gad8b701d9a34923e34bd58defd4c1e704"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga187ca00c6e12800a25151ce331620980"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga187ca00c6e12800a25151ce331620980">hwloc_cudart_get_device_cpuset</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int idx, <a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</td></tr>
+<tr class="separator:ga187ca00c6e12800a25151ce331620980"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaeda4e6efbb36b518b2c286434ad23bb2"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaeda4e6efbb36b518b2c286434ad23bb2">hwloc_cudart_get_device_pcidev</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int idx)</td></tr>
+<tr class="separator:gaeda4e6efbb36b518b2c286434ad23bb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac0f3eeaf7712919f298097b1a21307b0"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gac0f3eeaf7712919f298097b1a21307b0">hwloc_cudart_get_device_osdev_by_index</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned idx)</td></tr>
+<tr class="separator:gac0f3eeaf7712919f298097b1a21307b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>This interface offers ways to retrieve topology information about CUDA devices when using the CUDA Runtime API. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga187ca00c6e12800a25151ce331620980"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga187ca00c6e12800a25151ce331620980">&#9670;&nbsp;</a></span>hwloc_cudart_get_device_cpuset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_cudart_get_device_cpuset </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>idx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the CPU set of processors that are physically close to device <code>idx</code>. </p>
+<p>Store in <code>set</code> the CPU-set describing the locality of the CUDA device whose index is <code>idx</code>.</p>
+<p>Topology <code>topology</code> and device <code>idx</code> must match the local machine. I/O devices detection and the CUDA component are not needed in the topology.</p>
+<p>The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see <a class="el" href="a00234.html#gac0f3eeaf7712919f298097b1a21307b0" title="Get the hwloc OS device object corresponding to the CUDA device whose index is idx.">hwloc_cudart_get_device_osdev_by_index()</a>.</p>
+<p>This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset. </p>
+
+</div>
+</div>
+<a id="gac0f3eeaf7712919f298097b1a21307b0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gac0f3eeaf7712919f298097b1a21307b0">&#9670;&nbsp;</a></span>hwloc_cudart_get_device_osdev_by_index()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_cudart_get_device_osdev_by_index </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>idx</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the hwloc OS device object corresponding to the CUDA device whose index is <code>idx</code>. </p>
+<dl class="section return"><dt>Returns</dt><dd>The hwloc OS device object describing the CUDA device whose index is <code>idx</code>. </dd>
+<dd>
+<code>NULL</code> if none could be found.</dd></dl>
+<p>The topology <code>topology</code> does not necessarily have to match the current machine. For instance the topology may be an XML import of a remote host. I/O devices detection and the CUDA component must be enabled in the topology. If not, the locality of the object may still be found using <a class="el" href="a00234.html#ga187ca00c6e12800a25151ce331620980" title="Get the CPU set of processors that are physically close to device idx.">hwloc_cudart_get_device_cpuset()</a>.</p>
+<dl class="section note"><dt>Note</dt><dd>The corresponding PCI device object can be obtained by looking at the OS device parent object (unless PCI devices are filtered out).</dd>
+<dd>
+This function is identical to <a class="el" href="a00233.html#ga12ee892994ed037e8f64bbffda02cf2e" title="Get the hwloc OS device object corresponding to the CUDA device whose index is idx.">hwloc_cuda_get_device_osdev_by_index()</a>. </dd></dl>
+
+</div>
+</div>
+<a id="gad8b701d9a34923e34bd58defd4c1e704"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gad8b701d9a34923e34bd58defd4c1e704">&#9670;&nbsp;</a></span>hwloc_cudart_get_device_pci_ids()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_cudart_get_device_pci_ids </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>idx</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int *&#160;</td>
+          <td class="paramname"><em>domain</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int *&#160;</td>
+          <td class="paramname"><em>bus</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int *&#160;</td>
+          <td class="paramname"><em>dev</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Return the domain, bus and device IDs of the CUDA device whose index is <code>idx</code>. </p>
+<p>Device index <code>idx</code> must match the local machine. </p>
+
+</div>
+</div>
+<a id="gaeda4e6efbb36b518b2c286434ad23bb2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaeda4e6efbb36b518b2c286434ad23bb2">&#9670;&nbsp;</a></span>hwloc_cudart_get_device_pcidev()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_cudart_get_device_pcidev </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>idx</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the hwloc PCI device object corresponding to the CUDA device whose index is <code>idx</code>. </p>
+<dl class="section return"><dt>Returns</dt><dd>The hwloc PCI device object describing the CUDA device whose index is <code>idx</code>. </dd>
+<dd>
+<code>NULL</code> if none could be found.</dd></dl>
+<p>Topology <code>topology</code> and device <code>idx</code> must match the local machine. I/O devices detection must be enabled in topology <code>topology</code>. The CUDA component is not needed in the topology. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00235.html b/doc/doxygen-doc/html/a00235.html
new file mode 100644
index 00000000..77cd2b62
--- /dev/null
+++ b/doc/doxygen-doc/html/a00235.html
@@ -0,0 +1,201 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Interoperability with the NVIDIA Management Library</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Interoperability with the NVIDIA Management Library</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga26cf0036d09ec4d7cb692380fac9659d"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#ga26cf0036d09ec4d7cb692380fac9659d">hwloc_nvml_get_device_cpuset</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, nvmlDevice_t device, <a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</td></tr>
+<tr class="separator:ga26cf0036d09ec4d7cb692380fac9659d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gacd50fd0e2766ee05bc13234b46714756"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#gacd50fd0e2766ee05bc13234b46714756">hwloc_nvml_get_device_osdev_by_index</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned idx)</td></tr>
+<tr class="separator:gacd50fd0e2766ee05bc13234b46714756"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf176159b5760a191871eff23f5a69ee9"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#gaf176159b5760a191871eff23f5a69ee9">hwloc_nvml_get_device_osdev</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, nvmlDevice_t device)</td></tr>
+<tr class="separator:gaf176159b5760a191871eff23f5a69ee9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>This interface offers ways to retrieve topology information about devices managed by the NVIDIA Management Library (NVML). </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga26cf0036d09ec4d7cb692380fac9659d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga26cf0036d09ec4d7cb692380fac9659d">&#9670;&nbsp;</a></span>hwloc_nvml_get_device_cpuset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_nvml_get_device_cpuset </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">nvmlDevice_t&#160;</td>
+          <td class="paramname"><em>device</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the CPU set of processors that are physically close to NVML device <code>device</code>. </p>
+<p>Store in <code>set</code> the CPU-set describing the locality of the NVML device <code>device</code>.</p>
+<p>Topology <code>topology</code> and device <code>device</code> must match the local machine. I/O devices detection and the NVML component are not needed in the topology.</p>
+<p>The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see <a class="el" href="a00235.html#gaf176159b5760a191871eff23f5a69ee9" title="Get the hwloc OS device object corresponding to NVML device device.">hwloc_nvml_get_device_osdev()</a> and <a class="el" href="a00235.html#gacd50fd0e2766ee05bc13234b46714756" title="Get the hwloc OS device object corresponding to the NVML device whose index is idx.">hwloc_nvml_get_device_osdev_by_index()</a>.</p>
+<p>This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset. </p>
+
+</div>
+</div>
+<a id="gaf176159b5760a191871eff23f5a69ee9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaf176159b5760a191871eff23f5a69ee9">&#9670;&nbsp;</a></span>hwloc_nvml_get_device_osdev()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_nvml_get_device_osdev </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">nvmlDevice_t&#160;</td>
+          <td class="paramname"><em>device</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the hwloc OS device object corresponding to NVML device <code>device</code>. </p>
+<dl class="section return"><dt>Returns</dt><dd>The hwloc OS device object that describes the given NVML device <code>device</code>. </dd>
+<dd>
+<code>NULL</code> if none could be found.</dd></dl>
+<p>Topology <code>topology</code> and device <code>device</code> must match the local machine. I/O devices detection and the NVML component must be enabled in the topology. If not, the locality of the object may still be found using <a class="el" href="a00235.html#ga26cf0036d09ec4d7cb692380fac9659d" title="Get the CPU set of processors that are physically close to NVML device device.">hwloc_nvml_get_device_cpuset()</a>.</p>
+<dl class="section note"><dt>Note</dt><dd>The corresponding hwloc PCI device may be found by looking at the result parent pointer (unless PCI devices are filtered out). </dd></dl>
+
+</div>
+</div>
+<a id="gacd50fd0e2766ee05bc13234b46714756"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gacd50fd0e2766ee05bc13234b46714756">&#9670;&nbsp;</a></span>hwloc_nvml_get_device_osdev_by_index()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_nvml_get_device_osdev_by_index </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>idx</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the hwloc OS device object corresponding to the NVML device whose index is <code>idx</code>. </p>
+<dl class="section return"><dt>Returns</dt><dd>The hwloc OS device object describing the NVML device whose index is <code>idx</code>. </dd>
+<dd>
+<code>NULL</code> if none could be found.</dd></dl>
+<p>The topology <code>topology</code> does not necessarily have to match the current machine. For instance the topology may be an XML import of a remote host. I/O devices detection and the NVML component must be enabled in the topology.</p>
+<dl class="section note"><dt>Note</dt><dd>The corresponding PCI device object can be obtained by looking at the OS device parent object (unless PCI devices are filtered out). </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00236.html b/doc/doxygen-doc/html/a00236.html
new file mode 100644
index 00000000..074083ea
--- /dev/null
+++ b/doc/doxygen-doc/html/a00236.html
@@ -0,0 +1,201 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Interoperability with the ROCm SMI Management Library</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Interoperability with the ROCm SMI Management Library</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gaf939e697e3769c3524255318262b9c29"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#gaf939e697e3769c3524255318262b9c29">hwloc_rsmi_get_device_cpuset</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, uint32_t dv_ind, <a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</td></tr>
+<tr class="separator:gaf939e697e3769c3524255318262b9c29"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga507d0acdd5e9ac374a8d120d59604c80"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#ga507d0acdd5e9ac374a8d120d59604c80">hwloc_rsmi_get_device_osdev_by_index</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, uint32_t dv_ind)</td></tr>
+<tr class="separator:ga507d0acdd5e9ac374a8d120d59604c80"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaba05bf9710655bb5b1439bee654340ba"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#gaba05bf9710655bb5b1439bee654340ba">hwloc_rsmi_get_device_osdev</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, uint32_t dv_ind)</td></tr>
+<tr class="separator:gaba05bf9710655bb5b1439bee654340ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>This interface offers ways to retrieve topology information about devices managed by the ROCm SMI Management Library. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="gaf939e697e3769c3524255318262b9c29"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaf939e697e3769c3524255318262b9c29">&#9670;&nbsp;</a></span>hwloc_rsmi_get_device_cpuset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_rsmi_get_device_cpuset </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>dv_ind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the CPU set of logical processors that are physically close to AMD GPU device whose index is <code>dv_ind</code>. </p>
+<p>Store in <code>set</code> the CPU-set describing the locality of the AMD GPU device whose index is <code>dv_ind</code>.</p>
+<p>Topology <code>topology</code> and device <code>dv_ind</code> must match the local machine. I/O devices detection and the ROCm SMI component are not needed in the topology.</p>
+<p>The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see <a class="el" href="a00236.html#gaba05bf9710655bb5b1439bee654340ba" title="Get the hwloc OS device object corresponding to AMD GPU device, whose index is dv_ind.">hwloc_rsmi_get_device_osdev()</a> and <a class="el" href="a00236.html#ga507d0acdd5e9ac374a8d120d59604c80" title="Get the hwloc OS device object corresponding to the AMD GPU device whose index is dv_ind.">hwloc_rsmi_get_device_osdev_by_index()</a>.</p>
+<p>This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset. </p>
+
+</div>
+</div>
+<a id="gaba05bf9710655bb5b1439bee654340ba"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaba05bf9710655bb5b1439bee654340ba">&#9670;&nbsp;</a></span>hwloc_rsmi_get_device_osdev()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_rsmi_get_device_osdev </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>dv_ind</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the hwloc OS device object corresponding to AMD GPU device, whose index is <code>dv_ind</code>. </p>
+<dl class="section return"><dt>Returns</dt><dd>The hwloc OS device object that describes the given AMD GPU, whose index is <code>dv_ind</code>. </dd>
+<dd>
+<code>NULL</code> if none could be found.</dd></dl>
+<p>Topology <code>topology</code> and device <code>dv_ind</code> must match the local machine. I/O devices detection and the ROCm SMI component must be enabled in the topology. If not, the locality of the object may still be found using <a class="el" href="a00236.html#gaf939e697e3769c3524255318262b9c29" title="Get the CPU set of logical processors that are physically close to AMD GPU device whose index is dv_i...">hwloc_rsmi_get_device_cpuset()</a>.</p>
+<dl class="section note"><dt>Note</dt><dd>The corresponding hwloc PCI device may be found by looking at the result parent pointer (unless PCI devices are filtered out). </dd></dl>
+
+</div>
+</div>
+<a id="ga507d0acdd5e9ac374a8d120d59604c80"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga507d0acdd5e9ac374a8d120d59604c80">&#9670;&nbsp;</a></span>hwloc_rsmi_get_device_osdev_by_index()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_rsmi_get_device_osdev_by_index </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint32_t&#160;</td>
+          <td class="paramname"><em>dv_ind</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the hwloc OS device object corresponding to the AMD GPU device whose index is <code>dv_ind</code>. </p>
+<dl class="section return"><dt>Returns</dt><dd>The hwloc OS device object describing the AMD GPU device whose index is <code>dv_ind</code>. </dd>
+<dd>
+<code>NULL</code> if none could be found.</dd></dl>
+<p>The topology <code>topology</code> does not necessarily have to match the current machine. For instance the topology may be an XML import of a remote host. I/O devices detection and the ROCm SMI component must be enabled in the topology.</p>
+<dl class="section note"><dt>Note</dt><dd>The corresponding PCI device object can be obtained by looking at the OS device parent object (unless PCI devices are filtered out). </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00237.html b/doc/doxygen-doc/html/a00237.html
new file mode 100644
index 00000000..c7e320e0
--- /dev/null
+++ b/doc/doxygen-doc/html/a00237.html
@@ -0,0 +1,156 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Interoperability with the oneAPI Level Zero interface.</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Interoperability with the oneAPI Level Zero interface.</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga66281a9ba621357b1c7070b4fa19b5b8"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#ga66281a9ba621357b1c7070b4fa19b5b8">hwloc_levelzero_get_device_cpuset</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, ze_device_handle_t device, <a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</td></tr>
+<tr class="separator:ga66281a9ba621357b1c7070b4fa19b5b8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaf06cb737abcd2dc6db894c8914302d85"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#gaf06cb737abcd2dc6db894c8914302d85">hwloc_levelzero_get_device_osdev</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, ze_device_handle_t device)</td></tr>
+<tr class="separator:gaf06cb737abcd2dc6db894c8914302d85"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>This interface offers ways to retrieve topology information about devices managed by the Level Zero API. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga66281a9ba621357b1c7070b4fa19b5b8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga66281a9ba621357b1c7070b4fa19b5b8">&#9670;&nbsp;</a></span>hwloc_levelzero_get_device_cpuset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_levelzero_get_device_cpuset </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">ze_device_handle_t&#160;</td>
+          <td class="paramname"><em>device</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the CPU set of logical processors that are physically close to the Level Zero device <code>device</code>. </p>
+<p>Store in <code>set</code> the CPU-set describing the locality of the Level Zero device <code>device</code>.</p>
+<p>Topology <code>topology</code> and device <code>device</code> must match the local machine. The Level Zero must have been initialized with Sysman enabled (ZES_ENABLE_SYSMAN=1 in the environment). I/O devices detection and the Level Zero component are not needed in the topology.</p>
+<p>The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see <a class="el" href="a00237.html#gaf06cb737abcd2dc6db894c8914302d85" title="Get the hwloc OS device object corresponding to Level Zero device device.">hwloc_levelzero_get_device_osdev()</a>.</p>
+<p>This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset. </p>
+
+</div>
+</div>
+<a id="gaf06cb737abcd2dc6db894c8914302d85"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaf06cb737abcd2dc6db894c8914302d85">&#9670;&nbsp;</a></span>hwloc_levelzero_get_device_osdev()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_levelzero_get_device_osdev </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">ze_device_handle_t&#160;</td>
+          <td class="paramname"><em>device</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the hwloc OS device object corresponding to Level Zero device <code>device</code>. </p>
+<dl class="section return"><dt>Returns</dt><dd>The hwloc OS device object that describes the given Level Zero device <code>device</code>. </dd>
+<dd>
+<code>NULL</code> if none could be found.</dd></dl>
+<p>Topology <code>topology</code> and device <code>dv_ind</code> must match the local machine. I/O devices detection and the Level Zero component must be enabled in the topology. If not, the locality of the object may still be found using <a class="el" href="a00237.html#ga66281a9ba621357b1c7070b4fa19b5b8" title="Get the CPU set of logical processors that are physically close to the Level Zero device device.">hwloc_levelzero_get_device_cpuset()</a>.</p>
+<dl class="section note"><dt>Note</dt><dd>The corresponding hwloc PCI device may be found by looking at the result parent pointer (unless PCI devices are filtered out). </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00238.html b/doc/doxygen-doc/html/a00238.html
new file mode 100644
index 00000000..58d75201
--- /dev/null
+++ b/doc/doxygen-doc/html/a00238.html
@@ -0,0 +1,213 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Interoperability with OpenGL displays</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Interoperability with OpenGL displays</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga4d66a77e4fe4051d6e5b772c1b8fcec5"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html#ga4d66a77e4fe4051d6e5b772c1b8fcec5">hwloc_gl_get_display_osdev_by_port_device</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned port, unsigned device)</td></tr>
+<tr class="separator:ga4d66a77e4fe4051d6e5b772c1b8fcec5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2d36ef441d1dfddf49cfb5c01bd58d8e"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html#ga2d36ef441d1dfddf49cfb5c01bd58d8e">hwloc_gl_get_display_osdev_by_name</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const char *name)</td></tr>
+<tr class="separator:ga2d36ef441d1dfddf49cfb5c01bd58d8e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga936665ab5f0d29a081c4b78d11f4ad07"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html#ga936665ab5f0d29a081c4b78d11f4ad07">hwloc_gl_get_display_by_osdev</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> osdev, unsigned *port, unsigned *device)</td></tr>
+<tr class="separator:ga936665ab5f0d29a081c4b78d11f4ad07"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>This interface offers ways to retrieve topology information about OpenGL displays.</p>
+<p>Only the NVIDIA display locality information is currently available, using the NV-CONTROL X11 extension and the NVCtrl library. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga936665ab5f0d29a081c4b78d11f4ad07"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga936665ab5f0d29a081c4b78d11f4ad07">&#9670;&nbsp;</a></span>hwloc_gl_get_display_by_osdev()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_gl_get_display_by_osdev </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>osdev</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned *&#160;</td>
+          <td class="paramname"><em>port</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned *&#160;</td>
+          <td class="paramname"><em>device</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the OpenGL display port and device corresponding to the given hwloc OS object. </p>
+<p>Retrieves the OpenGL display port (server) in <code>port</code> and device (screen) in <code>screen</code> that correspond to the given hwloc OS device object.</p>
+<dl class="section return"><dt>Returns</dt><dd><code>-1</code> if none could be found.</dd></dl>
+<p>The topology <code>topology</code> does not necessarily have to match the current machine. For instance the topology may be an XML import of a remote host. I/O devices detection and the GL component must be enabled in the topology. </p>
+
+</div>
+</div>
+<a id="ga2d36ef441d1dfddf49cfb5c01bd58d8e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga2d36ef441d1dfddf49cfb5c01bd58d8e">&#9670;&nbsp;</a></span>hwloc_gl_get_display_osdev_by_name()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_gl_get_display_osdev_by_name </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>name</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the hwloc OS device object corresponding to the OpenGL display given by name. </p>
+<dl class="section return"><dt>Returns</dt><dd>The hwloc OS device object describing the OpenGL display whose name is <code>name</code>, built as ":port.device" such as ":0.0" . </dd>
+<dd>
+<code>NULL</code> if none could be found.</dd></dl>
+<p>The topology <code>topology</code> does not necessarily have to match the current machine. For instance the topology may be an XML import of a remote host. I/O devices detection and the GL component must be enabled in the topology.</p>
+<dl class="section note"><dt>Note</dt><dd>The corresponding PCI device object can be obtained by looking at the OS device parent object (unless PCI devices are filtered out). </dd></dl>
+
+</div>
+</div>
+<a id="ga4d66a77e4fe4051d6e5b772c1b8fcec5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga4d66a77e4fe4051d6e5b772c1b8fcec5">&#9670;&nbsp;</a></span>hwloc_gl_get_display_osdev_by_port_device()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_gl_get_display_osdev_by_port_device </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>port</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>device</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the hwloc OS device object corresponding to the OpenGL display given by port and device index. </p>
+<dl class="section return"><dt>Returns</dt><dd>The hwloc OS device object describing the OpenGL display whose port (server) is <code>port</code> and device (screen) is <code>device</code>. </dd>
+<dd>
+<code>NULL</code> if none could be found.</dd></dl>
+<p>The topology <code>topology</code> does not necessarily have to match the current machine. For instance the topology may be an XML import of a remote host. I/O devices detection and the GL component must be enabled in the topology.</p>
+<dl class="section note"><dt>Note</dt><dd>The corresponding PCI device object can be obtained by looking at the OS device parent object (unless PCI devices are filtered out). </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00239.html b/doc/doxygen-doc/html/a00239.html
new file mode 100644
index 00000000..96866aff
--- /dev/null
+++ b/doc/doxygen-doc/html/a00239.html
@@ -0,0 +1,202 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Interoperability with OpenFabrics</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Interoperability with OpenFabrics</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga3ea0d838c1e7f1671b35687aae2da6ae"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00239.html#ga3ea0d838c1e7f1671b35687aae2da6ae">hwloc_ibv_get_device_cpuset</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, struct ibv_device *ibdev, <a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</td></tr>
+<tr class="separator:ga3ea0d838c1e7f1671b35687aae2da6ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga31d794567f4420bbdc8baa7bf8bf6138"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00239.html#ga31d794567f4420bbdc8baa7bf8bf6138">hwloc_ibv_get_device_osdev_by_name</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const char *ibname)</td></tr>
+<tr class="separator:ga31d794567f4420bbdc8baa7bf8bf6138"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga7324cdfd5db6ed2669c051ef7e1b64e1"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00239.html#ga7324cdfd5db6ed2669c051ef7e1b64e1">hwloc_ibv_get_device_osdev</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, struct ibv_device *ibdev)</td></tr>
+<tr class="separator:ga7324cdfd5db6ed2669c051ef7e1b64e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>This interface offers ways to retrieve topology information about OpenFabrics devices (InfiniBand, Omni-Path, usNIC, etc). </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga3ea0d838c1e7f1671b35687aae2da6ae"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga3ea0d838c1e7f1671b35687aae2da6ae">&#9670;&nbsp;</a></span>hwloc_ibv_get_device_cpuset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_ibv_get_device_cpuset </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">struct ibv_device *&#160;</td>
+          <td class="paramname"><em>ibdev</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
+          <td class="paramname"><em>set</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the CPU set of processors that are physically close to device <code>ibdev</code>. </p>
+<p>Store in <code>set</code> the CPU-set describing the locality of the OpenFabrics device <code>ibdev</code> (InfiniBand, etc).</p>
+<p>Topology <code>topology</code> and device <code>ibdev</code> must match the local machine. I/O devices detection is not needed in the topology.</p>
+<p>The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see <a class="el" href="a00239.html#ga7324cdfd5db6ed2669c051ef7e1b64e1" title="Get the hwloc OS device object corresponding to the OpenFabrics device ibdev.">hwloc_ibv_get_device_osdev()</a> and <a class="el" href="a00239.html#ga31d794567f4420bbdc8baa7bf8bf6138" title="Get the hwloc OS device object corresponding to the OpenFabrics device named ibname.">hwloc_ibv_get_device_osdev_by_name()</a>.</p>
+<p>This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset. </p>
+
+</div>
+</div>
+<a id="ga7324cdfd5db6ed2669c051ef7e1b64e1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga7324cdfd5db6ed2669c051ef7e1b64e1">&#9670;&nbsp;</a></span>hwloc_ibv_get_device_osdev()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_ibv_get_device_osdev </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">struct ibv_device *&#160;</td>
+          <td class="paramname"><em>ibdev</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the hwloc OS device object corresponding to the OpenFabrics device <code>ibdev</code>. </p>
+<dl class="section return"><dt>Returns</dt><dd>The hwloc OS device object describing the OpenFabrics device <code>ibdev</code> (InfiniBand, etc). </dd>
+<dd>
+<code>NULL</code> if none could be found.</dd></dl>
+<p>Topology <code>topology</code> and device <code>ibdev</code> must match the local machine. I/O devices detection must be enabled in the topology. If not, the locality of the object may still be found using <a class="el" href="a00239.html#ga3ea0d838c1e7f1671b35687aae2da6ae" title="Get the CPU set of processors that are physically close to device ibdev.">hwloc_ibv_get_device_cpuset()</a>.</p>
+<dl class="section note"><dt>Note</dt><dd>The corresponding PCI device object can be obtained by looking at the OS device parent object. </dd></dl>
+
+</div>
+</div>
+<a id="ga31d794567f4420bbdc8baa7bf8bf6138"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga31d794567f4420bbdc8baa7bf8bf6138">&#9670;&nbsp;</a></span>hwloc_ibv_get_device_osdev_by_name()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_ibv_get_device_osdev_by_name </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>ibname</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Get the hwloc OS device object corresponding to the OpenFabrics device named <code>ibname</code>. </p>
+<dl class="section return"><dt>Returns</dt><dd>The hwloc OS device object describing the OpenFabrics device (InfiniBand, Omni-Path, usNIC, etc) whose name is <code>ibname</code> (mlx5_0, hfi1_0, usnic_0, qib0, etc). </dd>
+<dd>
+<code>NULL</code> if none could be found.</dd></dl>
+<p>The name <code>ibname</code> is usually obtained from ibv_get_device_name().</p>
+<p>The topology <code>topology</code> does not necessarily have to match the current machine. For instance the topology may be an XML import of a remote host. I/O devices detection must be enabled in the topology.</p>
+<dl class="section note"><dt>Note</dt><dd>The corresponding PCI device object can be obtained by looking at the OS device parent object. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00240.html b/doc/doxygen-doc/html/a00240.html
new file mode 100644
index 00000000..3b7b838e
--- /dev/null
+++ b/doc/doxygen-doc/html/a00240.html
@@ -0,0 +1,513 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Topology differences</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Topology differences</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">union &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00349.html">hwloc_topology_diff_obj_attr_u</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">union &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00365.html">hwloc_topology_diff_u</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga74a3fefbaa17582fea86d76b312d6254"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="a00240.html#ga86f044210b0a9e9fa83acbdbbf7e05fd">hwloc_topology_diff_obj_attr_type_e</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a></td></tr>
+<tr class="separator:ga74a3fefbaa17582fea86d76b312d6254"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8470f631b7365c839d3e40d38c5b6291"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="a00240.html#ga38b28b7423b85a3321e6d0062d5f83d0">hwloc_topology_diff_type_e</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a></td></tr>
+<tr class="separator:ga8470f631b7365c839d3e40d38c5b6291"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1bd6363f26f7961f83153aaa484a9b85"><td class="memItemLeft" align="right" valign="top">typedef union <a class="el" href="a00365.html">hwloc_topology_diff_u</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a></td></tr>
+<tr class="separator:ga1bd6363f26f7961f83153aaa484a9b85"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:ga86f044210b0a9e9fa83acbdbbf7e05fd"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html#ga86f044210b0a9e9fa83acbdbbf7e05fd">hwloc_topology_diff_obj_attr_type_e</a> { <a class="el" href="a00240.html#gga86f044210b0a9e9fa83acbdbbf7e05fdabc7f0c7ed0b6864e902f4b70f2c7bc94">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_SIZE</a>
+, <a class="el" href="a00240.html#gga86f044210b0a9e9fa83acbdbbf7e05fda94a8f37c51d62d15ac6192665dd49310">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_NAME</a>
+, <a class="el" href="a00240.html#gga86f044210b0a9e9fa83acbdbbf7e05fda63430bf932434bc456282f636d39c2c2">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_INFO</a>
+ }</td></tr>
+<tr class="separator:ga86f044210b0a9e9fa83acbdbbf7e05fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga38b28b7423b85a3321e6d0062d5f83d0"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html#ga38b28b7423b85a3321e6d0062d5f83d0">hwloc_topology_diff_type_e</a> { <a class="el" href="a00240.html#gga38b28b7423b85a3321e6d0062d5f83d0accbcaee230f79989debb284c8626f0c0">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR</a>
+, <a class="el" href="a00240.html#gga38b28b7423b85a3321e6d0062d5f83d0a3dc01fdeff355efe3fb2516bb454a147">HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX</a>
+ }</td></tr>
+<tr class="separator:ga38b28b7423b85a3321e6d0062d5f83d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gada4c1273ce020afaf02b649496f7edf5"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html#gada4c1273ce020afaf02b649496f7edf5">hwloc_topology_diff_apply_flags_e</a> { <a class="el" href="a00240.html#ggada4c1273ce020afaf02b649496f7edf5a821a160512d67ea0dd05dab873d2fc54">HWLOC_TOPOLOGY_DIFF_APPLY_REVERSE</a>
+ }</td></tr>
+<tr class="separator:gada4c1273ce020afaf02b649496f7edf5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga8a1754f69fbb31364ea3ea2c39827c9f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html#ga8a1754f69fbb31364ea3ea2c39827c9f">hwloc_topology_diff_build</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> newtopology, unsigned long flags, <a class="el" href="a00240.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a> *diff)</td></tr>
+<tr class="separator:ga8a1754f69fbb31364ea3ea2c39827c9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gae7b350d7e7478a4c6047b08aa6544f40"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html#gae7b350d7e7478a4c6047b08aa6544f40">hwloc_topology_diff_apply</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00240.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a> diff, unsigned long flags)</td></tr>
+<tr class="separator:gae7b350d7e7478a4c6047b08aa6544f40"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga5dcff18f80583ac6505a94ba2877fd1b"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html#ga5dcff18f80583ac6505a94ba2877fd1b">hwloc_topology_diff_destroy</a> (<a class="el" href="a00240.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a> diff)</td></tr>
+<tr class="separator:ga5dcff18f80583ac6505a94ba2877fd1b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2cd902ce8766e90d4f2523a8e87640e9"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html#ga2cd902ce8766e90d4f2523a8e87640e9">hwloc_topology_diff_load_xml</a> (const char *xmlpath, <a class="el" href="a00240.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a> *diff, char **refname)</td></tr>
+<tr class="separator:ga2cd902ce8766e90d4f2523a8e87640e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga8a14dd7d01efbdd97af7fe85e8b84b20"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html#ga8a14dd7d01efbdd97af7fe85e8b84b20">hwloc_topology_diff_export_xml</a> (<a class="el" href="a00240.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a> diff, const char *refname, const char *xmlpath)</td></tr>
+<tr class="separator:ga8a14dd7d01efbdd97af7fe85e8b84b20"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gad693810a5c51628529b9dd56f040fb81"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html#gad693810a5c51628529b9dd56f040fb81">hwloc_topology_diff_load_xmlbuffer</a> (const char *xmlbuffer, int buflen, <a class="el" href="a00240.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a> *diff, char **refname)</td></tr>
+<tr class="separator:gad693810a5c51628529b9dd56f040fb81"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa2f0918df60c1c4a0bef9411f7d92a13"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html#gaa2f0918df60c1c4a0bef9411f7d92a13">hwloc_topology_diff_export_xmlbuffer</a> (<a class="el" href="a00240.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a> diff, const char *refname, char **xmlbuffer, int *buflen)</td></tr>
+<tr class="separator:gaa2f0918df60c1c4a0bef9411f7d92a13"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>Applications that manipulate many similar topologies, for instance one for each node of a homogeneous cluster, may want to compress topologies to reduce the memory footprint.</p>
+<p>This file offers a way to manipulate the difference between topologies and export/import it to/from XML. Compression may therefore be achieved by storing one topology entirely while the others are only described by their differences with the former. The actual topology can be reconstructed when actually needed by applying the precomputed difference to the reference topology.</p>
+<p>This interface targets very similar nodes. Only very simple differences between topologies are actually supported, for instance a change in the memory size, the name of the object, or some info attribute. More complex differences such as adding or removing objects cannot be represented in the difference structures and therefore return errors. Differences between object sets or topology-wide allowed sets, cannot be represented either.</p>
+<p>It means that there is no need to apply the difference when looking at the tree organization (how many levels, how many objects per level, what kind of objects, CPU and node sets, etc) and when binding to objects. However the difference must be applied when looking at object attributes such as the name, the memory size or info attributes. </p>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a id="ga74a3fefbaa17582fea86d76b312d6254"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga74a3fefbaa17582fea86d76b312d6254">&#9670;&nbsp;</a></span>hwloc_topology_diff_obj_attr_type_t</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef enum <a class="el" href="a00240.html#ga86f044210b0a9e9fa83acbdbbf7e05fd">hwloc_topology_diff_obj_attr_type_e</a> <a class="el" href="a00240.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Type of one object attribute difference. </p>
+
+</div>
+</div>
+<a id="ga1bd6363f26f7961f83153aaa484a9b85"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga1bd6363f26f7961f83153aaa484a9b85">&#9670;&nbsp;</a></span>hwloc_topology_diff_t</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef union <a class="el" href="a00365.html">hwloc_topology_diff_u</a> * <a class="el" href="a00240.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>One element of a difference list between two topologies. </p>
+
+</div>
+</div>
+<a id="ga8470f631b7365c839d3e40d38c5b6291"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga8470f631b7365c839d3e40d38c5b6291">&#9670;&nbsp;</a></span>hwloc_topology_diff_type_t</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef enum <a class="el" href="a00240.html#ga38b28b7423b85a3321e6d0062d5f83d0">hwloc_topology_diff_type_e</a> <a class="el" href="a00240.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Type of one element of a difference list. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a id="gada4c1273ce020afaf02b649496f7edf5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gada4c1273ce020afaf02b649496f7edf5">&#9670;&nbsp;</a></span>hwloc_topology_diff_apply_flags_e</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00240.html#gada4c1273ce020afaf02b649496f7edf5">hwloc_topology_diff_apply_flags_e</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Flags to be given to <a class="el" href="a00240.html#gae7b350d7e7478a4c6047b08aa6544f40" title="Apply a topology diff to an existing topology.">hwloc_topology_diff_apply()</a>. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggada4c1273ce020afaf02b649496f7edf5a821a160512d67ea0dd05dab873d2fc54"></a>HWLOC_TOPOLOGY_DIFF_APPLY_REVERSE&#160;</td><td class="fielddoc"><p>Apply topology diff in reverse direction. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<a id="ga86f044210b0a9e9fa83acbdbbf7e05fd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga86f044210b0a9e9fa83acbdbbf7e05fd">&#9670;&nbsp;</a></span>hwloc_topology_diff_obj_attr_type_e</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00240.html#ga86f044210b0a9e9fa83acbdbbf7e05fd">hwloc_topology_diff_obj_attr_type_e</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Type of one object attribute difference. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga86f044210b0a9e9fa83acbdbbf7e05fdabc7f0c7ed0b6864e902f4b70f2c7bc94"></a>HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_SIZE&#160;</td><td class="fielddoc"><p>The object local memory is modified. The union is a <a class="el" href="a00357.html" title="Integer attribute modification with an optional index.">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a> (and the index field is ignored). </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga86f044210b0a9e9fa83acbdbbf7e05fda94a8f37c51d62d15ac6192665dd49310"></a>HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_NAME&#160;</td><td class="fielddoc"><p>The object name is modified. The union is a <a class="el" href="a00361.html" title="String attribute modification with an optional name.">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a> (and the name field is ignored). </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga86f044210b0a9e9fa83acbdbbf7e05fda63430bf932434bc456282f636d39c2c2"></a>HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_INFO&#160;</td><td class="fielddoc"><p>the value of an info attribute is modified. The union is a <a class="el" href="a00361.html" title="String attribute modification with an optional name.">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a>. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<a id="ga38b28b7423b85a3321e6d0062d5f83d0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga38b28b7423b85a3321e6d0062d5f83d0">&#9670;&nbsp;</a></span>hwloc_topology_diff_type_e</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00240.html#ga38b28b7423b85a3321e6d0062d5f83d0">hwloc_topology_diff_type_e</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Type of one element of a difference list. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga38b28b7423b85a3321e6d0062d5f83d0accbcaee230f79989debb284c8626f0c0"></a>HWLOC_TOPOLOGY_DIFF_OBJ_ATTR&#160;</td><td class="fielddoc"><p>An object attribute was changed. The union is a <a class="el" href="a00373.html">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga38b28b7423b85a3321e6d0062d5f83d0a3dc01fdeff355efe3fb2516bb454a147"></a>HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX&#160;</td><td class="fielddoc"><p>The difference is too complex, it cannot be represented. The difference below this object has not been checked. <a class="el" href="a00240.html#ga8a1754f69fbb31364ea3ea2c39827c9f" title="Compute the difference between 2 topologies.">hwloc_topology_diff_build()</a> will return 1. </p>
+<p>The union is a <a class="el" href="a00377.html">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a>. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="gae7b350d7e7478a4c6047b08aa6544f40"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gae7b350d7e7478a4c6047b08aa6544f40">&#9670;&nbsp;</a></span>hwloc_topology_diff_apply()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_diff_apply </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00240.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a>&#160;</td>
+          <td class="paramname"><em>diff</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Apply a topology diff to an existing topology. </p>
+<p><code>flags</code> is an OR'ed set of <a class="el" href="a00240.html#gada4c1273ce020afaf02b649496f7edf5" title="Flags to be given to hwloc_topology_diff_apply().">hwloc_topology_diff_apply_flags_e</a>.</p>
+<p>The new topology is modified in place. <a class="el" href="a00198.html#ga62a161fc5e6f120344dc69a7bee4e587" title="Duplicate a topology.">hwloc_topology_dup()</a> may be used to duplicate it before patching.</p>
+<p>If the difference cannot be applied entirely, all previous applied elements are unapplied before returning.</p>
+<dl class="section return"><dt>Returns</dt><dd>0 on success.</dd>
+<dd>
+-N if applying the difference failed while trying to apply the N-th part of the difference. For instance -1 is returned if the very first difference element could not be applied. </dd></dl>
+
+</div>
+</div>
+<a id="ga8a1754f69fbb31364ea3ea2c39827c9f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga8a1754f69fbb31364ea3ea2c39827c9f">&#9670;&nbsp;</a></span>hwloc_topology_diff_build()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_diff_build </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>newtopology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00240.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a> *&#160;</td>
+          <td class="paramname"><em>diff</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Compute the difference between 2 topologies. </p>
+<p>The difference is stored as a list of <a class="el" href="a00240.html#ga1bd6363f26f7961f83153aaa484a9b85" title="One element of a difference list between two topologies.">hwloc_topology_diff_t</a> entries starting at <code>diff</code>. It is computed by doing a depth-first traversal of both topology trees simultaneously.</p>
+<p>If the difference between 2 objects is too complex to be represented (for instance if some objects have different types, or different numbers of children), a special diff entry of type <a class="el" href="a00240.html#gga38b28b7423b85a3321e6d0062d5f83d0a3dc01fdeff355efe3fb2516bb454a147" title="The difference is too complex, it cannot be represented. The difference below this object has not bee...">HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX</a> is queued. The computation of the diff does not continue below these objects. So each such diff entry means that the difference between two subtrees could not be computed.</p>
+<dl class="section return"><dt>Returns</dt><dd>0 if the difference can be represented properly.</dd>
+<dd>
+0 with <code>diff</code> pointing to NULL if there is no difference between the topologies.</dd>
+<dd>
+1 if the difference is too complex (see above). Some entries in the list will be of type <a class="el" href="a00240.html#gga38b28b7423b85a3321e6d0062d5f83d0a3dc01fdeff355efe3fb2516bb454a147" title="The difference is too complex, it cannot be represented. The difference below this object has not bee...">HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX</a>.</dd>
+<dd>
+-1 on any other error.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd><code>flags</code> is currently not used. It should be 0.</dd>
+<dd>
+The output diff has to be freed with <a class="el" href="a00240.html#ga5dcff18f80583ac6505a94ba2877fd1b" title="Destroy a list of topology differences.">hwloc_topology_diff_destroy()</a>.</dd>
+<dd>
+The output diff can only be exported to XML or passed to <a class="el" href="a00240.html#gae7b350d7e7478a4c6047b08aa6544f40" title="Apply a topology diff to an existing topology.">hwloc_topology_diff_apply()</a> if 0 was returned, i.e. if no entry of type <a class="el" href="a00240.html#gga38b28b7423b85a3321e6d0062d5f83d0a3dc01fdeff355efe3fb2516bb454a147" title="The difference is too complex, it cannot be represented. The difference below this object has not bee...">HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX</a> is listed.</dd>
+<dd>
+The output diff may be modified by removing some entries from the list. The removed entries should be freed by passing them to to <a class="el" href="a00240.html#ga5dcff18f80583ac6505a94ba2877fd1b" title="Destroy a list of topology differences.">hwloc_topology_diff_destroy()</a> (possible as another list). </dd></dl>
+
+</div>
+</div>
+<a id="ga5dcff18f80583ac6505a94ba2877fd1b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga5dcff18f80583ac6505a94ba2877fd1b">&#9670;&nbsp;</a></span>hwloc_topology_diff_destroy()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_diff_destroy </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00240.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a>&#160;</td>
+          <td class="paramname"><em>diff</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Destroy a list of topology differences. </p>
+
+</div>
+</div>
+<a id="ga8a14dd7d01efbdd97af7fe85e8b84b20"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga8a14dd7d01efbdd97af7fe85e8b84b20">&#9670;&nbsp;</a></span>hwloc_topology_diff_export_xml()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_diff_export_xml </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00240.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a>&#160;</td>
+          <td class="paramname"><em>diff</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>refname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>xmlpath</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Export a list of topology differences to a XML file. </p>
+<p>If not <code>NULL</code>, <code>refname</code> defines an identifier string for the reference topology which was used as a base when computing this difference. This identifier is usually the name of the other XML file that contains the reference topology. This attribute is given back when reading the diff from XML. </p>
+
+</div>
+</div>
+<a id="gaa2f0918df60c1c4a0bef9411f7d92a13"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaa2f0918df60c1c4a0bef9411f7d92a13">&#9670;&nbsp;</a></span>hwloc_topology_diff_export_xmlbuffer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_diff_export_xmlbuffer </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00240.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a>&#160;</td>
+          <td class="paramname"><em>diff</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>refname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char **&#160;</td>
+          <td class="paramname"><em>xmlbuffer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int *&#160;</td>
+          <td class="paramname"><em>buflen</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Export a list of topology differences to a XML buffer. </p>
+<p>If not <code>NULL</code>, <code>refname</code> defines an identifier string for the reference topology which was used as a base when computing this difference. This identifier is usually the name of the other XML file that contains the reference topology. This attribute is given back when reading the diff from XML.</p>
+<p>The returned buffer ends with a \0 that is included in the returned length.</p>
+<dl class="section note"><dt>Note</dt><dd>The XML buffer should later be freed with <a class="el" href="a00218.html#ga293e4a6489f15fd16ad22a5734561cf1" title="Free a buffer allocated by hwloc_topology_export_xmlbuffer()">hwloc_free_xmlbuffer()</a>. </dd></dl>
+
+</div>
+</div>
+<a id="ga2cd902ce8766e90d4f2523a8e87640e9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga2cd902ce8766e90d4f2523a8e87640e9">&#9670;&nbsp;</a></span>hwloc_topology_diff_load_xml()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_diff_load_xml </td>
+          <td>(</td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>xmlpath</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00240.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a> *&#160;</td>
+          <td class="paramname"><em>diff</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char **&#160;</td>
+          <td class="paramname"><em>refname</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Load a list of topology differences from a XML file. </p>
+<p>If not <code>NULL</code>, <code>refname</code> will be filled with the identifier string of the reference topology for the difference file, if any was specified in the XML file. This identifier is usually the name of the other XML file that contains the reference topology.</p>
+<dl class="section note"><dt>Note</dt><dd>the pointer returned in refname should later be freed by the caller. </dd></dl>
+
+</div>
+</div>
+<a id="gad693810a5c51628529b9dd56f040fb81"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gad693810a5c51628529b9dd56f040fb81">&#9670;&nbsp;</a></span>hwloc_topology_diff_load_xmlbuffer()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_diff_load_xmlbuffer </td>
+          <td>(</td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>xmlbuffer</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>buflen</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00240.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a> *&#160;</td>
+          <td class="paramname"><em>diff</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">char **&#160;</td>
+          <td class="paramname"><em>refname</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Load a list of topology differences from a XML buffer. </p>
+<p>If not <code>NULL</code>, <code>refname</code> will be filled with the identifier string of the reference topology for the difference file, if any was specified in the XML file. This identifier is usually the name of the other XML file that contains the reference topology.</p>
+<dl class="section note"><dt>Note</dt><dd>the pointer returned in refname should later be freed by the caller. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00241.html b/doc/doxygen-doc/html/a00241.html
new file mode 100644
index 00000000..36cf262a
--- /dev/null
+++ b/doc/doxygen-doc/html/a00241.html
@@ -0,0 +1,241 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Sharing topologies between processes</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Sharing topologies between processes</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga772ab52750cdd0eec85128df24888001"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#ga772ab52750cdd0eec85128df24888001">hwloc_shmem_topology_get_length</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, size_t *lengthp, unsigned long flags)</td></tr>
+<tr class="separator:ga772ab52750cdd0eec85128df24888001"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga61b20e346fc76f76420e3a88cc80a671"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#ga61b20e346fc76f76420e3a88cc80a671">hwloc_shmem_topology_write</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int fd, hwloc_uint64_t fileoffset, void *mmap_address, size_t length, unsigned long flags)</td></tr>
+<tr class="separator:ga61b20e346fc76f76420e3a88cc80a671"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga21545bd0f09d9b554c8e60a630e0e629"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#ga21545bd0f09d9b554c8e60a630e0e629">hwloc_shmem_topology_adopt</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> *topologyp, int fd, hwloc_uint64_t fileoffset, void *mmap_address, size_t length, unsigned long flags)</td></tr>
+<tr class="separator:ga21545bd0f09d9b554c8e60a630e0e629"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<p>These functions are used to share a topology between processes by duplicating it into a file-backed shared-memory buffer.</p>
+<p>The master process must first get the required shared-memory size for storing this topology with <a class="el" href="a00241.html#ga772ab52750cdd0eec85128df24888001" title="Get the required shared memory length for storing a topology.">hwloc_shmem_topology_get_length()</a>.</p>
+<p>Then it must find a virtual memory area of that size that is available in all processes (identical virtual addresses in all processes). On Linux, this can be done by comparing holes found in /proc/&lt;pid&gt;/maps for each process.</p>
+<p>Once found, it must open a destination file for storing the buffer, and pass it to <a class="el" href="a00241.html#ga61b20e346fc76f76420e3a88cc80a671" title="Duplicate a topology to a shared memory file.">hwloc_shmem_topology_write()</a> together with virtual memory address and length obtained above.</p>
+<p>Other processes may then adopt this shared topology by opening the same file and passing it to <a class="el" href="a00241.html#ga21545bd0f09d9b554c8e60a630e0e629" title="Adopt a shared memory topology stored in a file.">hwloc_shmem_topology_adopt()</a> with the exact same virtual memory address and length. </p>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga21545bd0f09d9b554c8e60a630e0e629"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga21545bd0f09d9b554c8e60a630e0e629">&#9670;&nbsp;</a></span>hwloc_shmem_topology_adopt()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_shmem_topology_adopt </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> *&#160;</td>
+          <td class="paramname"><em>topologyp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>fd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">hwloc_uint64_t&#160;</td>
+          <td class="paramname"><em>fileoffset</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>mmap_address</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Adopt a shared memory topology stored in a file. </p>
+<p>Map a file in virtual memory and adopt the topology that was previously stored there with <a class="el" href="a00241.html#ga61b20e346fc76f76420e3a88cc80a671" title="Duplicate a topology to a shared memory file.">hwloc_shmem_topology_write()</a>.</p>
+<p>The returned adopted topology in <code>topologyp</code> can be used just like any topology. And it must be destroyed with <a class="el" href="a00198.html#ga9f34a640b6fd28d23699d4d084667b15" title="Terminate and free a topology context.">hwloc_topology_destroy()</a> as usual.</p>
+<p>However the topology is read-only. For instance, it cannot be modified with <a class="el" href="a00206.html#ga6db81ed13ac0a9d70cc80372ab537815" title="Restrict the topology to the given CPU set or nodeset.">hwloc_topology_restrict()</a> and object userdata pointers cannot be changed.</p>
+<p>The segment of the file pointed by descriptor <code>fd</code>, starting at offset <code>fileoffset</code>, and of length <code>length</code> (in bytes), will be mapped at virtual address <code>mmap_address</code>.</p>
+<p>The file pointed by descriptor <code>fd</code>, the offset <code>fileoffset</code>, the requested mapping virtual address <code>mmap_address</code> and the length <code>length</code> must be identical to what was given to <a class="el" href="a00241.html#ga61b20e346fc76f76420e3a88cc80a671" title="Duplicate a topology to a shared memory file.">hwloc_shmem_topology_write()</a> earlier.</p>
+<dl class="section note"><dt>Note</dt><dd>Flags <code>flags</code> are currently unused, must be 0.</dd>
+<dd>
+The object userdata pointer should not be used unless the process that created the shared topology also placed userdata-pointed buffers in shared memory.</dd>
+<dd>
+This function takes care of calling <a class="el" href="a00198.html#ga0647ae66458fe68172eb5a320042f870" title="Verify that the topology is compatible with the current hwloc library.">hwloc_topology_abi_check()</a>.</dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>-1 with errno set to EBUSY if the virtual memory mapping defined by <code>mmap_address</code> and <code>length</code> isn't available in the process.</dd>
+<dd>
+-1 with errno set to EINVAL if <code>fileoffset</code>, <code>mmap_address</code> or <code>length</code> aren't page-aligned, or do not match what was given to <a class="el" href="a00241.html#ga61b20e346fc76f76420e3a88cc80a671" title="Duplicate a topology to a shared memory file.">hwloc_shmem_topology_write()</a> earlier.</dd>
+<dd>
+-1 with errno set to EINVAL if the layout of the topology structure is different between the writer process and the adopter process. </dd></dl>
+
+</div>
+</div>
+<a id="ga772ab52750cdd0eec85128df24888001"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga772ab52750cdd0eec85128df24888001">&#9670;&nbsp;</a></span>hwloc_shmem_topology_get_length()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_shmem_topology_get_length </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t *&#160;</td>
+          <td class="paramname"><em>lengthp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Get the required shared memory length for storing a topology. </p>
+<p>This length (in bytes) must be used in <a class="el" href="a00241.html#ga61b20e346fc76f76420e3a88cc80a671" title="Duplicate a topology to a shared memory file.">hwloc_shmem_topology_write()</a> and <a class="el" href="a00241.html#ga21545bd0f09d9b554c8e60a630e0e629" title="Adopt a shared memory topology stored in a file.">hwloc_shmem_topology_adopt()</a> later.</p>
+<dl class="section note"><dt>Note</dt><dd>Flags <code>flags</code> are currently unused, must be 0. </dd></dl>
+
+</div>
+</div>
+<a id="ga61b20e346fc76f76420e3a88cc80a671"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga61b20e346fc76f76420e3a88cc80a671">&#9670;&nbsp;</a></span>hwloc_shmem_topology_write()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_shmem_topology_write </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>fd</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">hwloc_uint64_t&#160;</td>
+          <td class="paramname"><em>fileoffset</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">void *&#160;</td>
+          <td class="paramname"><em>mmap_address</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>length</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Duplicate a topology to a shared memory file. </p>
+<p>Temporarily map a file in virtual memory and duplicate the topology <code>topology</code> by allocating duplicates in there.</p>
+<p>The segment of the file pointed by descriptor <code>fd</code>, starting at offset <code>fileoffset</code>, and of length <code>length</code> (in bytes), will be temporarily mapped at virtual address <code>mmap_address</code> during the duplication.</p>
+<p>The mapping length <code>length</code> must have been previously obtained with <a class="el" href="a00241.html#ga772ab52750cdd0eec85128df24888001" title="Get the required shared memory length for storing a topology.">hwloc_shmem_topology_get_length()</a> and the topology must not have been modified in the meantime.</p>
+<dl class="section note"><dt>Note</dt><dd>Flags <code>flags</code> are currently unused, must be 0.</dd>
+<dd>
+The object userdata pointer is duplicated but the pointed buffer is not. However the caller may also allocate it manually in shared memory to share it as well.</dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>-1 with errno set to EBUSY if the virtual memory mapping defined by <code>mmap_address</code> and <code>length</code> isn't available in the process. </dd>
+<dd>
+-1 with errno set to EINVAL if <code>fileoffset</code>, <code>mmap_address</code> or <code>length</code> aren't page-aligned. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00242.html b/doc/doxygen-doc/html/a00242.html
new file mode 100644
index 00000000..49694dab
--- /dev/null
+++ b/doc/doxygen-doc/html/a00242.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Components and Plugins: Discovery components</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a>  </div>
+  <div class="headertitle">
+<div class="title">Components and Plugins: Discovery components</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00381.html">hwloc_disc_component</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<dl class="section note"><dt>Note</dt><dd>These structures and functions may change when <a class="el" href="a00194.html#gaac5bc1f46f55e10ef0141a68ce70e21f" title="Current component and plugin ABI version (see hwloc/plugins.h)">HWLOC_COMPONENT_ABI</a> is modified. </dd></dl>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00243.html b/doc/doxygen-doc/html/a00243.html
new file mode 100644
index 00000000..9b02ceaf
--- /dev/null
+++ b/doc/doxygen-doc/html/a00243.html
@@ -0,0 +1,221 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Components and Plugins: Discovery backends</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#enum-members">Enumerations</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Components and Plugins: Discovery backends</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00385.html">hwloc_disc_status</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00389.html">hwloc_backend</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga600bba1a62022d5f516800649b1edb61"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="a00243.html#ga8c314121c2fc478161bcce758688b9a1">hwloc_disc_phase_e</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#ga600bba1a62022d5f516800649b1edb61">hwloc_disc_phase_t</a></td></tr>
+<tr class="separator:ga600bba1a62022d5f516800649b1edb61"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:ga8c314121c2fc478161bcce758688b9a1"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#ga8c314121c2fc478161bcce758688b9a1">hwloc_disc_phase_e</a> { <br />
+&#160;&#160;<a class="el" href="a00243.html#gga8c314121c2fc478161bcce758688b9a1ab41c626c79e9ccb1e7d41e7076972283">HWLOC_DISC_PHASE_GLOBAL</a>
+, <a class="el" href="a00243.html#gga8c314121c2fc478161bcce758688b9a1a6360474df197027761a69bd5fc620250">HWLOC_DISC_PHASE_CPU</a>
+, <a class="el" href="a00243.html#gga8c314121c2fc478161bcce758688b9a1ac4264a243844c5fbbff495cdb1b4d51d">HWLOC_DISC_PHASE_MEMORY</a>
+, <a class="el" href="a00243.html#gga8c314121c2fc478161bcce758688b9a1a677c52064dd987af4988346319b3675a">HWLOC_DISC_PHASE_PCI</a>
+, <br />
+&#160;&#160;<a class="el" href="a00243.html#gga8c314121c2fc478161bcce758688b9a1aa8e10626cba9af72f5605a1acbdc0015">HWLOC_DISC_PHASE_IO</a>
+, <a class="el" href="a00243.html#gga8c314121c2fc478161bcce758688b9a1a8a7cde9bff0ab0d085b102a3e934939b">HWLOC_DISC_PHASE_MISC</a>
+, <a class="el" href="a00243.html#gga8c314121c2fc478161bcce758688b9a1a68ca5c7ad75a6d9e5355689411621773">HWLOC_DISC_PHASE_ANNOTATE</a>
+, <a class="el" href="a00243.html#gga8c314121c2fc478161bcce758688b9a1ada3ed3f00e74909353d6ea4a96cde5ad">HWLOC_DISC_PHASE_TWEAK</a>
+<br />
+ }</td></tr>
+<tr class="separator:ga8c314121c2fc478161bcce758688b9a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaae1b38cf9b12e489884ce2a07275964b"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#gaae1b38cf9b12e489884ce2a07275964b">hwloc_disc_status_flag_e</a> { <a class="el" href="a00243.html#ggaae1b38cf9b12e489884ce2a07275964ba205d644d54a0840bd9165fce7d19e6b1">HWLOC_DISC_STATUS_FLAG_GOT_ALLOWED_RESOURCES</a>
+ }</td></tr>
+<tr class="separator:gaae1b38cf9b12e489884ce2a07275964b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gadb068565ab6043cbe4d16bfcce067a61"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00389.html">hwloc_backend</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#gadb068565ab6043cbe4d16bfcce067a61">hwloc_backend_alloc</a> (struct hwloc_topology *topology, struct <a class="el" href="a00381.html">hwloc_disc_component</a> *component)</td></tr>
+<tr class="separator:gadb068565ab6043cbe4d16bfcce067a61"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4715779d7191833e9b1a7490989a7497"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#ga4715779d7191833e9b1a7490989a7497">hwloc_backend_enable</a> (struct <a class="el" href="a00389.html">hwloc_backend</a> *backend)</td></tr>
+<tr class="separator:ga4715779d7191833e9b1a7490989a7497"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<dl class="section note"><dt>Note</dt><dd>These structures and functions may change when <a class="el" href="a00194.html#gaac5bc1f46f55e10ef0141a68ce70e21f" title="Current component and plugin ABI version (see hwloc/plugins.h)">HWLOC_COMPONENT_ABI</a> is modified. </dd></dl>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a id="ga600bba1a62022d5f516800649b1edb61"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga600bba1a62022d5f516800649b1edb61">&#9670;&nbsp;</a></span>hwloc_disc_phase_t</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef enum <a class="el" href="a00243.html#ga8c314121c2fc478161bcce758688b9a1">hwloc_disc_phase_e</a> <a class="el" href="a00243.html#ga600bba1a62022d5f516800649b1edb61">hwloc_disc_phase_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Discovery phase. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a id="ga8c314121c2fc478161bcce758688b9a1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga8c314121c2fc478161bcce758688b9a1">&#9670;&nbsp;</a></span>hwloc_disc_phase_e</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00243.html#ga8c314121c2fc478161bcce758688b9a1">hwloc_disc_phase_e</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Discovery phase. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga8c314121c2fc478161bcce758688b9a1ab41c626c79e9ccb1e7d41e7076972283"></a>HWLOC_DISC_PHASE_GLOBAL&#160;</td><td class="fielddoc"><p>xml or synthetic, platform-specific components such as bgq. Discovers everything including CPU, memory, I/O and everything else. A component with a Global phase usually excludes all other phases. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga8c314121c2fc478161bcce758688b9a1a6360474df197027761a69bd5fc620250"></a>HWLOC_DISC_PHASE_CPU&#160;</td><td class="fielddoc"><p>CPU discovery. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga8c314121c2fc478161bcce758688b9a1ac4264a243844c5fbbff495cdb1b4d51d"></a>HWLOC_DISC_PHASE_MEMORY&#160;</td><td class="fielddoc"><p>Attach memory to existing CPU objects. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga8c314121c2fc478161bcce758688b9a1a677c52064dd987af4988346319b3675a"></a>HWLOC_DISC_PHASE_PCI&#160;</td><td class="fielddoc"><p>Attach PCI devices and bridges to existing CPU objects. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga8c314121c2fc478161bcce758688b9a1aa8e10626cba9af72f5605a1acbdc0015"></a>HWLOC_DISC_PHASE_IO&#160;</td><td class="fielddoc"><p>I/O discovery that requires PCI devices (OS devices such as OpenCL, CUDA, etc.). </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga8c314121c2fc478161bcce758688b9a1a8a7cde9bff0ab0d085b102a3e934939b"></a>HWLOC_DISC_PHASE_MISC&#160;</td><td class="fielddoc"><p>Misc objects that gets added below anything else. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga8c314121c2fc478161bcce758688b9a1a68ca5c7ad75a6d9e5355689411621773"></a>HWLOC_DISC_PHASE_ANNOTATE&#160;</td><td class="fielddoc"><p>Annotating existing objects, adding distances, etc. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga8c314121c2fc478161bcce758688b9a1ada3ed3f00e74909353d6ea4a96cde5ad"></a>HWLOC_DISC_PHASE_TWEAK&#160;</td><td class="fielddoc"><p>Final tweaks to a ready-to-use topology. This phase runs once the topology is loaded, before it is returned to the topology. Hence it may only use the main hwloc API for modifying the topology, for instance by restricting it, adding info attributes, etc. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<a id="gaae1b38cf9b12e489884ce2a07275964b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaae1b38cf9b12e489884ce2a07275964b">&#9670;&nbsp;</a></span>hwloc_disc_status_flag_e</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00243.html#gaae1b38cf9b12e489884ce2a07275964b">hwloc_disc_status_flag_e</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Discovery status flags. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggaae1b38cf9b12e489884ce2a07275964ba205d644d54a0840bd9165fce7d19e6b1"></a>HWLOC_DISC_STATUS_FLAG_GOT_ALLOWED_RESOURCES&#160;</td><td class="fielddoc"><p>The sets of allowed resources were already retrieved. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="gadb068565ab6043cbe4d16bfcce067a61"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gadb068565ab6043cbe4d16bfcce067a61">&#9670;&nbsp;</a></span>hwloc_backend_alloc()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00389.html">hwloc_backend</a>* hwloc_backend_alloc </td>
+          <td>(</td>
+          <td class="paramtype">struct hwloc_topology *&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">struct <a class="el" href="a00381.html">hwloc_disc_component</a> *&#160;</td>
+          <td class="paramname"><em>component</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Allocate a backend structure, set good default values, initialize backend-&gt;component and topology, etc. The caller will then modify whatever needed, and call <a class="el" href="a00243.html#ga4715779d7191833e9b1a7490989a7497" title="Enable a previously allocated and setup backend.">hwloc_backend_enable()</a>. </p>
+
+</div>
+</div>
+<a id="ga4715779d7191833e9b1a7490989a7497"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga4715779d7191833e9b1a7490989a7497">&#9670;&nbsp;</a></span>hwloc_backend_enable()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_backend_enable </td>
+          <td>(</td>
+          <td class="paramtype">struct <a class="el" href="a00389.html">hwloc_backend</a> *&#160;</td>
+          <td class="paramname"><em>backend</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Enable a previously allocated and setup backend. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00244.html b/doc/doxygen-doc/html/a00244.html
new file mode 100644
index 00000000..4473a91e
--- /dev/null
+++ b/doc/doxygen-doc/html/a00244.html
@@ -0,0 +1,116 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Components and Plugins: Generic components</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#enum-members">Enumerations</a>  </div>
+  <div class="headertitle">
+<div class="title">Components and Plugins: Generic components</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00393.html">hwloc_component</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:ga31a5a455f4e666b936f0a9e8fb9a0f47"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="a00244.html#ga397a1bf7d21dd073320ad0045340f463">hwloc_component_type_e</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#ga31a5a455f4e666b936f0a9e8fb9a0f47">hwloc_component_type_t</a></td></tr>
+<tr class="separator:ga31a5a455f4e666b936f0a9e8fb9a0f47"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:ga397a1bf7d21dd073320ad0045340f463"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#ga397a1bf7d21dd073320ad0045340f463">hwloc_component_type_e</a> { <a class="el" href="a00244.html#gga397a1bf7d21dd073320ad0045340f463a5d6e561f467fe9795a29e7368b613900">HWLOC_COMPONENT_TYPE_DISC</a>
+, <a class="el" href="a00244.html#gga397a1bf7d21dd073320ad0045340f463adea00cd839c2141c032e1569fd5592bd">HWLOC_COMPONENT_TYPE_XML</a>
+ }</td></tr>
+<tr class="separator:ga397a1bf7d21dd073320ad0045340f463"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<dl class="section note"><dt>Note</dt><dd>These structures and functions may change when <a class="el" href="a00194.html#gaac5bc1f46f55e10ef0141a68ce70e21f" title="Current component and plugin ABI version (see hwloc/plugins.h)">HWLOC_COMPONENT_ABI</a> is modified. </dd></dl>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a id="ga31a5a455f4e666b936f0a9e8fb9a0f47"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga31a5a455f4e666b936f0a9e8fb9a0f47">&#9670;&nbsp;</a></span>hwloc_component_type_t</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef enum <a class="el" href="a00244.html#ga397a1bf7d21dd073320ad0045340f463">hwloc_component_type_e</a> <a class="el" href="a00244.html#ga31a5a455f4e666b936f0a9e8fb9a0f47">hwloc_component_type_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Generic component type. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a id="ga397a1bf7d21dd073320ad0045340f463"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga397a1bf7d21dd073320ad0045340f463">&#9670;&nbsp;</a></span>hwloc_component_type_e</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00244.html#ga397a1bf7d21dd073320ad0045340f463">hwloc_component_type_e</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Generic component type. </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga397a1bf7d21dd073320ad0045340f463a5d6e561f467fe9795a29e7368b613900"></a>HWLOC_COMPONENT_TYPE_DISC&#160;</td><td class="fielddoc"><p>The data field must point to a struct <a class="el" href="a00381.html" title="Discovery component structure.">hwloc_disc_component</a>. </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga397a1bf7d21dd073320ad0045340f463adea00cd839c2141c032e1569fd5592bd"></a>HWLOC_COMPONENT_TYPE_XML&#160;</td><td class="fielddoc"><p>The data field must point to a struct hwloc_xml_component. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00245.html b/doc/doxygen-doc/html/a00245.html
new file mode 100644
index 00000000..4e92a86e
--- /dev/null
+++ b/doc/doxygen-doc/html/a00245.html
@@ -0,0 +1,373 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Components and Plugins: Core functions to be used by components</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Components and Plugins: Core functions to be used by components</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:gafce07a2a959190a6c7126b321bef202f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00245.html#gafce07a2a959190a6c7126b321bef202f">HWLOC_SHOW_CRITICAL_ERRORS</a>()&#160;&#160;&#160;(<a class="el" href="a00245.html#gab527c1e0f243f057d31a724794ad9f88">hwloc_hide_errors</a>() &lt; 2)</td></tr>
+<tr class="separator:gafce07a2a959190a6c7126b321bef202f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga3e48b6ac00ed6a40aea975e23eddcdbb"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00245.html#ga3e48b6ac00ed6a40aea975e23eddcdbb">HWLOC_SHOW_ALL_ERRORS</a>()&#160;&#160;&#160;(<a class="el" href="a00245.html#gab527c1e0f243f057d31a724794ad9f88">hwloc_hide_errors</a>() == 0)</td></tr>
+<tr class="separator:ga3e48b6ac00ed6a40aea975e23eddcdbb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:gab527c1e0f243f057d31a724794ad9f88"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00245.html#gab527c1e0f243f057d31a724794ad9f88">hwloc_hide_errors</a> (void)</td></tr>
+<tr class="separator:gab527c1e0f243f057d31a724794ad9f88"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1e105cfe3c8e77f34cc6df3841deebbc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00245.html#ga1e105cfe3c8e77f34cc6df3841deebbc">hwloc__insert_object_by_cpuset</a> (struct hwloc_topology *topology, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> root, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj, const char *reason)</td></tr>
+<tr class="separator:ga1e105cfe3c8e77f34cc6df3841deebbc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0ef97debde503b56367689b07bb3e901"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00245.html#ga0ef97debde503b56367689b07bb3e901">hwloc_insert_object_by_parent</a> (struct hwloc_topology *topology, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> parent, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj)</td></tr>
+<tr class="separator:ga0ef97debde503b56367689b07bb3e901"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga0b5c75b2dc37cea2e8a29c4812baf4b3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00245.html#ga0b5c75b2dc37cea2e8a29c4812baf4b3">hwloc_alloc_setup_object</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, unsigned os_index)</td></tr>
+<tr class="separator:ga0b5c75b2dc37cea2e8a29c4812baf4b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga754b61041ceee9685534a2c5d3cd0156"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00245.html#ga754b61041ceee9685534a2c5d3cd0156">hwloc_obj_add_children_sets</a> (<a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj)</td></tr>
+<tr class="separator:ga754b61041ceee9685534a2c5d3cd0156"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga120d8bd74922e1030b621409a6b0be61"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00245.html#ga120d8bd74922e1030b621409a6b0be61">hwloc_topology_reconnect</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned long flags)</td></tr>
+<tr class="separator:ga120d8bd74922e1030b621409a6b0be61"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac2eaed287bb215cf0bd33014e9e1d374"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00245.html#gac2eaed287bb215cf0bd33014e9e1d374">hwloc_plugin_check_namespace</a> (const char *pluginname, const char *symbol)</td></tr>
+<tr class="separator:gac2eaed287bb215cf0bd33014e9e1d374"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<dl class="section note"><dt>Note</dt><dd>These structures and functions may change when <a class="el" href="a00194.html#gaac5bc1f46f55e10ef0141a68ce70e21f" title="Current component and plugin ABI version (see hwloc/plugins.h)">HWLOC_COMPONENT_ABI</a> is modified. </dd></dl>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a id="ga3e48b6ac00ed6a40aea975e23eddcdbb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga3e48b6ac00ed6a40aea975e23eddcdbb">&#9670;&nbsp;</a></span>HWLOC_SHOW_ALL_ERRORS</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define HWLOC_SHOW_ALL_ERRORS</td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td>&#160;&#160;&#160;(<a class="el" href="a00245.html#gab527c1e0f243f057d31a724794ad9f88">hwloc_hide_errors</a>() == 0)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="gafce07a2a959190a6c7126b321bef202f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gafce07a2a959190a6c7126b321bef202f">&#9670;&nbsp;</a></span>HWLOC_SHOW_CRITICAL_ERRORS</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define HWLOC_SHOW_CRITICAL_ERRORS</td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td>&#160;&#160;&#160;(<a class="el" href="a00245.html#gab527c1e0f243f057d31a724794ad9f88">hwloc_hide_errors</a>() &lt; 2)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga1e105cfe3c8e77f34cc6df3841deebbc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga1e105cfe3c8e77f34cc6df3841deebbc">&#9670;&nbsp;</a></span>hwloc__insert_object_by_cpuset()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc__insert_object_by_cpuset </td>
+          <td>(</td>
+          <td class="paramtype">struct hwloc_topology *&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>root</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>obj</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>reason</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Add an object to the topology. </p>
+<p>Insert new object <code>obj</code> in the topology starting under existing object <code>root</code> (if <code>NULL</code>, the topology root object is used).</p>
+<p>It is sorted along the tree of other objects according to the inclusion of cpusets, to eventually be added as a child of the smallest object including this object.</p>
+<p>If the cpuset is empty, the type of the object (and maybe some attributes) must be enough to find where to insert the object. This is especially true for NUMA nodes with memory and no CPUs.</p>
+<p>The given object should not have children.</p>
+<p>This shall only be called before levels are built.</p>
+<p>The caller should check whether the object type is filtered-out before calling this function.</p>
+<p>The topology cpuset/nodesets will be enlarged to include the object sets.</p>
+<p><code>reason</code> is a unique string identifying where and why this insertion call was performed (it will be displayed in case of internal insertion error).</p>
+<p>Returns the object on success. Returns NULL and frees obj on error. Returns another object and frees obj if it was merged with an identical pre-existing object. </p>
+
+</div>
+</div>
+<a id="ga0b5c75b2dc37cea2e8a29c4812baf4b3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga0b5c75b2dc37cea2e8a29c4812baf4b3">&#9670;&nbsp;</a></span>hwloc_alloc_setup_object()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_alloc_setup_object </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
+          <td class="paramname"><em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>os_index</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Allocate and initialize an object of the given type and physical index. </p>
+<p>If <code>os_index</code> is unknown or irrelevant, use <code>HWLOC_UNKNOWN_INDEX</code>. </p>
+
+</div>
+</div>
+<a id="gab527c1e0f243f057d31a724794ad9f88"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gab527c1e0f243f057d31a724794ad9f88">&#9670;&nbsp;</a></span>hwloc_hide_errors()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_hide_errors </td>
+          <td>(</td>
+          <td class="paramtype">void&#160;</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Check whether error messages are hidden. </p>
+<p>Callers should print critical error messages (e.g. invalid hw topo info, invalid config) only if this function returns strictly less than 2.</p>
+<p>Callers should print non-critical error messages (e.g. failure to initialize CUDA) if this function returns 0.</p>
+<p>This function return 1 by default (show critical only), 0 in lstopo (show all), or anything set in HWLOC_HIDE_ERRORS in the environment.</p>
+<p>Use macros <a class="el" href="a00245.html#gafce07a2a959190a6c7126b321bef202f">HWLOC_SHOW_CRITICAL_ERRORS()</a> and <a class="el" href="a00245.html#ga3e48b6ac00ed6a40aea975e23eddcdbb">HWLOC_SHOW_ALL_ERRORS()</a> for clarity. </p>
+
+</div>
+</div>
+<a id="ga0ef97debde503b56367689b07bb3e901"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga0ef97debde503b56367689b07bb3e901">&#9670;&nbsp;</a></span>hwloc_insert_object_by_parent()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void hwloc_insert_object_by_parent </td>
+          <td>(</td>
+          <td class="paramtype">struct hwloc_topology *&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>parent</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>obj</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Insert an object somewhere in the topology. </p>
+<p>It is added as the last child of the given parent. The cpuset is completely ignored, so strange objects such as I/O devices should preferably be inserted with this.</p>
+<p>When used for "normal" children with cpusets (when importing from XML when duplicating a topology), the caller should make sure that:</p><ul>
+<li>children are inserted in order,</li>
+<li>children cpusets do not intersect.</li>
+</ul>
+<p>The given object may have normal, I/O or Misc children, as long as they are in order as well. These children must have valid parent and next_sibling pointers.</p>
+<p>The caller should check whether the object type is filtered-out before calling this function. </p>
+
+</div>
+</div>
+<a id="ga754b61041ceee9685534a2c5d3cd0156"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga754b61041ceee9685534a2c5d3cd0156">&#9670;&nbsp;</a></span>hwloc_obj_add_children_sets()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_obj_add_children_sets </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>obj</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Setup object cpusets/nodesets by OR'ing its children. </p>
+<p>Used when adding an object late in the topology. Will update the new object by OR'ing all its new children sets.</p>
+<p>Used when PCI backend adds a hostbridge parent, when distances add a new Group, etc. </p>
+
+</div>
+</div>
+<a id="gac2eaed287bb215cf0bd33014e9e1d374"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gac2eaed287bb215cf0bd33014e9e1d374">&#9670;&nbsp;</a></span>hwloc_plugin_check_namespace()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_plugin_check_namespace </td>
+          <td>(</td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>pluginname</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>symbol</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Make sure that plugins can lookup core symbols. </p>
+<p>This is a sanity check to avoid lazy-lookup failures when libhwloc is loaded within a plugin, and later tries to load its own plugins. This may fail (and abort the program) if libhwloc symbols are in a private namespace.</p>
+<dl class="section return"><dt>Returns</dt><dd>0 on success. </dd>
+<dd>
+-1 if the plugin cannot be successfully loaded. The caller plugin init() callback should return a negative error code as well.</dd></dl>
+<p>Plugins should call this function in their init() callback to avoid later crashes if lazy symbol resolution is used by the upper layer that loaded hwloc (e.g. OpenCL implementations using dlopen with RTLD_LAZY).</p>
+<dl class="section note"><dt>Note</dt><dd>The build system must define HWLOC_INSIDE_PLUGIN if and only if building the caller as a plugin.</dd>
+<dd>
+This function should remain inline so plugins can call it even when they cannot find libhwloc symbols. </dd></dl>
+
+</div>
+</div>
+<a id="ga120d8bd74922e1030b621409a6b0be61"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga120d8bd74922e1030b621409a6b0be61">&#9670;&nbsp;</a></span>hwloc_topology_reconnect()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_reconnect </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Request a reconnection of children and levels in the topology. </p>
+<p>May be used by backends during discovery if they need arrays or lists of object within levels or children to be fully connected.</p>
+<p><code>flags</code> is currently unused, must 0. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00246.html b/doc/doxygen-doc/html/a00246.html
new file mode 100644
index 00000000..69673726
--- /dev/null
+++ b/doc/doxygen-doc/html/a00246.html
@@ -0,0 +1,206 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Components and Plugins: Filtering objects</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Components and Plugins: Filtering objects</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga60203db6459ebf275bf48c40a37661a0"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00246.html#ga60203db6459ebf275bf48c40a37661a0">hwloc_filter_check_pcidev_subtype_important</a> (unsigned classid)</td></tr>
+<tr class="separator:ga60203db6459ebf275bf48c40a37661a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gac7d57a6d669820f360cf2a070a396560"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00246.html#gac7d57a6d669820f360cf2a070a396560">hwloc_filter_check_osdev_subtype_important</a> (<a class="el" href="a00196.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a> subtype)</td></tr>
+<tr class="separator:gac7d57a6d669820f360cf2a070a396560"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga2f402a43025a8a91e8513be1a15e4635"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00246.html#ga2f402a43025a8a91e8513be1a15e4635">hwloc_filter_check_keep_object_type</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
+<tr class="separator:ga2f402a43025a8a91e8513be1a15e4635"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga4d2fdce071e5646ef147c9ff1539d1c9"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00246.html#ga4d2fdce071e5646ef147c9ff1539d1c9">hwloc_filter_check_keep_object</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj)</td></tr>
+<tr class="separator:ga4d2fdce071e5646ef147c9ff1539d1c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<dl class="section note"><dt>Note</dt><dd>These structures and functions may change when <a class="el" href="a00194.html#gaac5bc1f46f55e10ef0141a68ce70e21f" title="Current component and plugin ABI version (see hwloc/plugins.h)">HWLOC_COMPONENT_ABI</a> is modified. </dd></dl>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga4d2fdce071e5646ef147c9ff1539d1c9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga4d2fdce071e5646ef147c9ff1539d1c9">&#9670;&nbsp;</a></span>hwloc_filter_check_keep_object()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_filter_check_keep_object </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
+          <td class="paramname"><em>obj</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Check whether the given object should be filtered-out. </p>
+<dl class="section return"><dt>Returns</dt><dd>1 if the object type should be kept, 0 otherwise. </dd></dl>
+
+</div>
+</div>
+<a id="ga2f402a43025a8a91e8513be1a15e4635"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga2f402a43025a8a91e8513be1a15e4635">&#9670;&nbsp;</a></span>hwloc_filter_check_keep_object_type()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_filter_check_keep_object_type </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
+          <td class="paramname"><em>type</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Check whether a non-I/O object type should be filtered-out. </p>
+<p>Cannot be used for I/O objects.</p>
+<dl class="section return"><dt>Returns</dt><dd>1 if the object type should be kept, 0 otherwise. </dd></dl>
+
+</div>
+</div>
+<a id="gac7d57a6d669820f360cf2a070a396560"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gac7d57a6d669820f360cf2a070a396560">&#9670;&nbsp;</a></span>hwloc_filter_check_osdev_subtype_important()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_filter_check_osdev_subtype_important </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00196.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a>&#160;</td>
+          <td class="paramname"><em>subtype</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Check whether the given OS device subtype is important. </p>
+<dl class="section return"><dt>Returns</dt><dd>1 if important, 0 otherwise. </dd></dl>
+
+</div>
+</div>
+<a id="ga60203db6459ebf275bf48c40a37661a0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga60203db6459ebf275bf48c40a37661a0">&#9670;&nbsp;</a></span>hwloc_filter_check_pcidev_subtype_important()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static int hwloc_filter_check_pcidev_subtype_important </td>
+          <td>(</td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>classid</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Check whether the given PCI device classid is important. </p>
+<dl class="section return"><dt>Returns</dt><dd>1 if important, 0 otherwise. </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00247.html b/doc/doxygen-doc/html/a00247.html
new file mode 100644
index 00000000..188aa39c
--- /dev/null
+++ b/doc/doxygen-doc/html/a00247.html
@@ -0,0 +1,296 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Components and Plugins: helpers for PCI discovery</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Components and Plugins: helpers for PCI discovery</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga706f71cfea09d547d2cbafa642d6e03b"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00247.html#ga706f71cfea09d547d2cbafa642d6e03b">hwloc_pcidisc_find_cap</a> (const unsigned char *config, unsigned cap)</td></tr>
+<tr class="separator:ga706f71cfea09d547d2cbafa642d6e03b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga51d1ebcbf9729987c9d17df3aa57d209"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00247.html#ga51d1ebcbf9729987c9d17df3aa57d209">hwloc_pcidisc_find_linkspeed</a> (const unsigned char *config, unsigned offset, float *linkspeed)</td></tr>
+<tr class="separator:ga51d1ebcbf9729987c9d17df3aa57d209"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga6c55fb80c3d0c8c8e61078b3f38adde8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00247.html#ga6c55fb80c3d0c8c8e61078b3f38adde8">hwloc_pcidisc_check_bridge_type</a> (unsigned device_class, const unsigned char *config)</td></tr>
+<tr class="separator:ga6c55fb80c3d0c8c8e61078b3f38adde8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga95acf6822a49447c11067d0b843965ba"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00247.html#ga95acf6822a49447c11067d0b843965ba">hwloc_pcidisc_find_bridge_buses</a> (unsigned domain, unsigned bus, unsigned dev, unsigned func, unsigned *secondary_busp, unsigned *subordinate_busp, const unsigned char *config)</td></tr>
+<tr class="separator:ga95acf6822a49447c11067d0b843965ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gab76ddc4f55db8101ef0d44317965128c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00247.html#gab76ddc4f55db8101ef0d44317965128c">hwloc_pcidisc_tree_insert_by_busid</a> (struct <a class="el" href="a00253.html">hwloc_obj</a> **treep, struct <a class="el" href="a00253.html">hwloc_obj</a> *obj)</td></tr>
+<tr class="separator:gab76ddc4f55db8101ef0d44317965128c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gabda1d6c1799e50b9226f8a4da9bd29ea"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00247.html#gabda1d6c1799e50b9226f8a4da9bd29ea">hwloc_pcidisc_tree_attach</a> (struct hwloc_topology *topology, struct <a class="el" href="a00253.html">hwloc_obj</a> *tree)</td></tr>
+<tr class="separator:gabda1d6c1799e50b9226f8a4da9bd29ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<dl class="section note"><dt>Note</dt><dd>These structures and functions may change when <a class="el" href="a00194.html#gaac5bc1f46f55e10ef0141a68ce70e21f" title="Current component and plugin ABI version (see hwloc/plugins.h)">HWLOC_COMPONENT_ABI</a> is modified. </dd></dl>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga6c55fb80c3d0c8c8e61078b3f38adde8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga6c55fb80c3d0c8c8e61078b3f38adde8">&#9670;&nbsp;</a></span>hwloc_pcidisc_check_bridge_type()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> hwloc_pcidisc_check_bridge_type </td>
+          <td>(</td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>device_class</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const unsigned char *&#160;</td>
+          <td class="paramname"><em>config</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Return the hwloc object type (PCI device or Bridge) for the given class and configuration space. </p>
+<p>This function requires 16 bytes of common configuration header at the beginning of config. </p>
+
+</div>
+</div>
+<a id="ga95acf6822a49447c11067d0b843965ba"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga95acf6822a49447c11067d0b843965ba">&#9670;&nbsp;</a></span>hwloc_pcidisc_find_bridge_buses()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_pcidisc_find_bridge_buses </td>
+          <td>(</td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>domain</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>bus</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>dev</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>func</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned *&#160;</td>
+          <td class="paramname"><em>secondary_busp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned *&#160;</td>
+          <td class="paramname"><em>subordinate_busp</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const unsigned char *&#160;</td>
+          <td class="paramname"><em>config</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Fills the attributes of the given PCI bridge using the given PCI config space. </p>
+<p>This function requires 32 bytes of common configuration header at the beginning of config.</p>
+<p>Returns -1 and destroys /p obj if bridge fields are invalid. </p>
+
+</div>
+</div>
+<a id="ga706f71cfea09d547d2cbafa642d6e03b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga706f71cfea09d547d2cbafa642d6e03b">&#9670;&nbsp;</a></span>hwloc_pcidisc_find_cap()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned hwloc_pcidisc_find_cap </td>
+          <td>(</td>
+          <td class="paramtype">const unsigned char *&#160;</td>
+          <td class="paramname"><em>config</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>cap</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Return the offset of the given capability in the PCI config space buffer. </p>
+<p>This function requires a 256-bytes config space. Unknown/unavailable bytes should be set to 0xff. </p>
+
+</div>
+</div>
+<a id="ga51d1ebcbf9729987c9d17df3aa57d209"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga51d1ebcbf9729987c9d17df3aa57d209">&#9670;&nbsp;</a></span>hwloc_pcidisc_find_linkspeed()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_pcidisc_find_linkspeed </td>
+          <td>(</td>
+          <td class="paramtype">const unsigned char *&#160;</td>
+          <td class="paramname"><em>config</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>offset</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">float *&#160;</td>
+          <td class="paramname"><em>linkspeed</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Fill linkspeed by reading the PCI config space where PCI_CAP_ID_EXP is at position offset. </p>
+<p>Needs 20 bytes of EXP capability block starting at offset in the config space for registers up to link status. </p>
+
+</div>
+</div>
+<a id="gabda1d6c1799e50b9226f8a4da9bd29ea"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gabda1d6c1799e50b9226f8a4da9bd29ea">&#9670;&nbsp;</a></span>hwloc_pcidisc_tree_attach()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_pcidisc_tree_attach </td>
+          <td>(</td>
+          <td class="paramtype">struct hwloc_topology *&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">struct <a class="el" href="a00253.html">hwloc_obj</a> *&#160;</td>
+          <td class="paramname"><em>tree</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Add some hostbridges on top of the given tree of PCI objects and attach them to the topology. </p>
+<p>Other backends may lookup PCI objects or localities (for instance to attach OS devices) by using hwloc_pcidisc_find_by_busid() or hwloc_pcidisc_find_busid_parent(). </p>
+
+</div>
+</div>
+<a id="gab76ddc4f55db8101ef0d44317965128c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gab76ddc4f55db8101ef0d44317965128c">&#9670;&nbsp;</a></span>hwloc_pcidisc_tree_insert_by_busid()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void hwloc_pcidisc_tree_insert_by_busid </td>
+          <td>(</td>
+          <td class="paramtype">struct <a class="el" href="a00253.html">hwloc_obj</a> **&#160;</td>
+          <td class="paramname"><em>treep</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">struct <a class="el" href="a00253.html">hwloc_obj</a> *&#160;</td>
+          <td class="paramname"><em>obj</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Insert a PCI object in the given PCI tree by looking at PCI bus IDs. </p>
+<p>If <code>treep</code> points to <code>NULL</code>, the new object is inserted there. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00248.html b/doc/doxygen-doc/html/a00248.html
new file mode 100644
index 00000000..9201faf6
--- /dev/null
+++ b/doc/doxygen-doc/html/a00248.html
@@ -0,0 +1,329 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Components and Plugins: finding PCI objects during other discoveries</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#typedef-members">Typedefs</a> &#124;
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">Components and Plugins: finding PCI objects during other discoveries</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr class="memitem:gafe5e49d32dd0a28ead94b6e31048e042"><td class="memItemLeft" align="right" valign="top">typedef void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00248.html#gafe5e49d32dd0a28ead94b6e31048e042">hwloc_backend_distances_add_handle_t</a></td></tr>
+<tr class="separator:gafe5e49d32dd0a28ead94b6e31048e042"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ga7964833550947636ab8975909de3fa98"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00253.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00248.html#ga7964833550947636ab8975909de3fa98">hwloc_pci_find_parent_by_busid</a> (struct hwloc_topology *topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)</td></tr>
+<tr class="separator:ga7964833550947636ab8975909de3fa98"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1cc465a010c5f75e0f280cdc8e27197d"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00253.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00248.html#ga1cc465a010c5f75e0f280cdc8e27197d">hwloc_pci_find_by_busid</a> (struct hwloc_topology *topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)</td></tr>
+<tr class="separator:ga1cc465a010c5f75e0f280cdc8e27197d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa66a0bd519a5b1183a3e9b0c35a7f6cc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00248.html#gafe5e49d32dd0a28ead94b6e31048e042">hwloc_backend_distances_add_handle_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00248.html#gaa66a0bd519a5b1183a3e9b0c35a7f6cc">hwloc_backend_distances_add_create</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const char *name, unsigned long kind, unsigned long flags)</td></tr>
+<tr class="separator:gaa66a0bd519a5b1183a3e9b0c35a7f6cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:gaa27036bd83102f8e406f1051d560da6c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00248.html#gaa27036bd83102f8e406f1051d560da6c">hwloc_backend_distances_add_values</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00248.html#gafe5e49d32dd0a28ead94b6e31048e042">hwloc_backend_distances_add_handle_t</a> handle, unsigned nbobjs, <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *objs, hwloc_uint64_t *values, unsigned long flags)</td></tr>
+<tr class="separator:gaa27036bd83102f8e406f1051d560da6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ga1468ac5f0bfb0e18bfc04c9ce5a5a4a3"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00248.html#ga1468ac5f0bfb0e18bfc04c9ce5a5a4a3">hwloc_backend_distances_add_commit</a> (<a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00248.html#gafe5e49d32dd0a28ead94b6e31048e042">hwloc_backend_distances_add_handle_t</a> handle, unsigned long flags)</td></tr>
+<tr class="separator:ga1468ac5f0bfb0e18bfc04c9ce5a5a4a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<dl class="section note"><dt>Note</dt><dd>These structures and functions may change when <a class="el" href="a00194.html#gaac5bc1f46f55e10ef0141a68ce70e21f" title="Current component and plugin ABI version (see hwloc/plugins.h)">HWLOC_COMPONENT_ABI</a> is modified. </dd></dl>
+<h2 class="groupheader">Typedef Documentation</h2>
+<a id="gafe5e49d32dd0a28ead94b6e31048e042"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gafe5e49d32dd0a28ead94b6e31048e042">&#9670;&nbsp;</a></span>hwloc_backend_distances_add_handle_t</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">typedef void* <a class="el" href="a00248.html#gafe5e49d32dd0a28ead94b6e31048e042">hwloc_backend_distances_add_handle_t</a></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Handle to a new distances structure during its addition to the topology. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="ga1468ac5f0bfb0e18bfc04c9ce5a5a4a3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga1468ac5f0bfb0e18bfc04c9ce5a5a4a3">&#9670;&nbsp;</a></span>hwloc_backend_distances_add_commit()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_backend_distances_add_commit </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00248.html#gafe5e49d32dd0a28ead94b6e31048e042">hwloc_backend_distances_add_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Commit a new distances structure. </p>
+<p>This is similar to <a class="el" href="a00222.html#ga1f5a29760ebb8f9af831e645315f553c" title="Commit a new distances structure.">hwloc_distances_add_commit()</a> but this variant is designed for backend inserting distances during topology discovery. </p>
+
+</div>
+</div>
+<a id="gaa66a0bd519a5b1183a3e9b0c35a7f6cc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaa66a0bd519a5b1183a3e9b0c35a7f6cc">&#9670;&nbsp;</a></span>hwloc_backend_distances_add_create()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00248.html#gafe5e49d32dd0a28ead94b6e31048e042">hwloc_backend_distances_add_handle_t</a> hwloc_backend_distances_add_create </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const char *&#160;</td>
+          <td class="paramname"><em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>kind</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Create a new empty distances structure. </p>
+<p>This is identical to <a class="el" href="a00222.html#ga823d38fa8d21dc338497fb0f79c96704" title="Create a new empty distances structure.">hwloc_distances_add_create()</a> but this variant is designed for backend inserting distances during topology discovery. </p>
+
+</div>
+</div>
+<a id="gaa27036bd83102f8e406f1051d560da6c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#gaa27036bd83102f8e406f1051d560da6c">&#9670;&nbsp;</a></span>hwloc_backend_distances_add_values()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_backend_distances_add_values </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00248.html#gafe5e49d32dd0a28ead94b6e31048e042">hwloc_backend_distances_add_handle_t</a>&#160;</td>
+          <td class="paramname"><em>handle</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>nbobjs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *&#160;</td>
+          <td class="paramname"><em>objs</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">hwloc_uint64_t *&#160;</td>
+          <td class="paramname"><em>values</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned long&#160;</td>
+          <td class="paramname"><em>flags</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Specify the objects and values in a new empty distances structure. </p>
+<p>This is similar to <a class="el" href="a00222.html#ga8c9715481b0bce344c8a33c6e6a56469" title="Specify the objects and values in a new empty distances structure.">hwloc_distances_add_values()</a> but this variant is designed for backend inserting distances during topology discovery.</p>
+<p>The only semantical difference is that <code>objs</code> and <code>values</code> are not duplicated, but directly attached to the topology. On success, these arrays are given to the core and should not ever be freed by the caller anymore. </p>
+
+</div>
+</div>
+<a id="ga1cc465a010c5f75e0f280cdc8e27197d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga1cc465a010c5f75e0f280cdc8e27197d">&#9670;&nbsp;</a></span>hwloc_pci_find_by_busid()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00253.html">hwloc_obj</a>* hwloc_pci_find_by_busid </td>
+          <td>(</td>
+          <td class="paramtype">struct hwloc_topology *&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>domain</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>bus</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>dev</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>func</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Find the PCI device or bridge matching a PCI bus ID exactly. </p>
+<p>This is useful for adding specific information about some objects based on their PCI id. When it comes to attaching objects based on PCI locality, <a class="el" href="a00248.html#ga7964833550947636ab8975909de3fa98" title="Find the object or a parent of a PCI bus ID.">hwloc_pci_find_parent_by_busid()</a> should be preferred. </p>
+
+</div>
+</div>
+<a id="ga7964833550947636ab8975909de3fa98"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga7964833550947636ab8975909de3fa98">&#9670;&nbsp;</a></span>hwloc_pci_find_parent_by_busid()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00253.html">hwloc_obj</a>* hwloc_pci_find_parent_by_busid </td>
+          <td>(</td>
+          <td class="paramtype">struct hwloc_topology *&#160;</td>
+          <td class="paramname"><em>topology</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>domain</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>bus</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>dev</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">unsigned&#160;</td>
+          <td class="paramname"><em>func</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Find the object or a parent of a PCI bus ID. </p>
+<p>When attaching a new object (typically an OS device) whose locality is specified by PCI bus ID, this function returns the PCI object to use as a parent for attaching.</p>
+<p>If the exact PCI device with this bus ID exists, it is returned. Otherwise (for instance if it was filtered out), the function returns another object with similar locality (for instance a parent bridge, or the local CPU Package). </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00249.html b/doc/doxygen-doc/html/a00249.html
new file mode 100644
index 00000000..786c9ed8
--- /dev/null
+++ b/doc/doxygen-doc/html/a00249.html
@@ -0,0 +1,113 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Netloc API</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#enum-members">Enumerations</a>  </div>
+  <div class="headertitle">
+<div class="title">Netloc API</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:ga61dadd085c1777f559549e05962b2c9e"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom">{ <br />
+&#160;&#160;<a class="el" href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea4deb864e4b46fe70b83c3220442a627c">NETLOC_SUCCESS</a> = 0
+, <a class="el" href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea4b33f8da6efc963562a93569ac8b349a">NETLOC_ERROR</a> = -1
+, <a class="el" href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea6e4322619d38dec18dbd16a606b14aa8">NETLOC_ERROR_NOTDIR</a> = -2
+, <a class="el" href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea81bc77a77d1a42054dc64b11a4cc8612">NETLOC_ERROR_NOENT</a> = -3
+, <br />
+&#160;&#160;<a class="el" href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea0dc7c18a5a3d027bf3f835eacdbed932">NETLOC_ERROR_EMPTY</a> = -4
+, <a class="el" href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea4485021555c6cb24d5f6e391b1bd6dee">NETLOC_ERROR_MULTIPLE</a> = -5
+, <a class="el" href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea4a55d10dfc1eb5c84027de7d48dfac4d">NETLOC_ERROR_NOT_IMPL</a> = -6
+, <a class="el" href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea67dfc8498fa899900e2231fad4538556">NETLOC_ERROR_EXISTS</a> = -7
+, <br />
+&#160;&#160;<a class="el" href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea61b43e2553779d3610f894fd6698a6ee">NETLOC_ERROR_NOT_FOUND</a> = -8
+, <a class="el" href="a00249.html#gga61dadd085c1777f559549e05962b2c9ea39974c6110bed527cb7658672b8eeeb9">NETLOC_ERROR_MAX</a> = -9
+<br />
+ }</td></tr>
+<tr class="separator:ga61dadd085c1777f559549e05962b2c9e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<h2 class="groupheader">Enumeration Type Documentation</h2>
+<a id="ga61dadd085c1777f559549e05962b2c9e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ga61dadd085c1777f559549e05962b2c9e">&#9670;&nbsp;</a></span>anonymous enum</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">anonymous enum</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Return codes </p>
+<table class="fieldtable">
+<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga61dadd085c1777f559549e05962b2c9ea4deb864e4b46fe70b83c3220442a627c"></a>NETLOC_SUCCESS&#160;</td><td class="fielddoc"><p>Success </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga61dadd085c1777f559549e05962b2c9ea4b33f8da6efc963562a93569ac8b349a"></a>NETLOC_ERROR&#160;</td><td class="fielddoc"><p>Error: General condition </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga61dadd085c1777f559549e05962b2c9ea6e4322619d38dec18dbd16a606b14aa8"></a>NETLOC_ERROR_NOTDIR&#160;</td><td class="fielddoc"><p>Error: URI is not a directory </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga61dadd085c1777f559549e05962b2c9ea81bc77a77d1a42054dc64b11a4cc8612"></a>NETLOC_ERROR_NOENT&#160;</td><td class="fielddoc"><p>Error: URI is invalid, no such entry </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga61dadd085c1777f559549e05962b2c9ea0dc7c18a5a3d027bf3f835eacdbed932"></a>NETLOC_ERROR_EMPTY&#160;</td><td class="fielddoc"><p>Error: No networks found </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga61dadd085c1777f559549e05962b2c9ea4485021555c6cb24d5f6e391b1bd6dee"></a>NETLOC_ERROR_MULTIPLE&#160;</td><td class="fielddoc"><p>Error: Multiple matching networks found </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga61dadd085c1777f559549e05962b2c9ea4a55d10dfc1eb5c84027de7d48dfac4d"></a>NETLOC_ERROR_NOT_IMPL&#160;</td><td class="fielddoc"><p>Error: Interface not implemented </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga61dadd085c1777f559549e05962b2c9ea67dfc8498fa899900e2231fad4538556"></a>NETLOC_ERROR_EXISTS&#160;</td><td class="fielddoc"><p>Error: If the entry already exists when trying to add to a lookup table </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga61dadd085c1777f559549e05962b2c9ea61b43e2553779d3610f894fd6698a6ee"></a>NETLOC_ERROR_NOT_FOUND&#160;</td><td class="fielddoc"><p>Error: No path found </p>
+</td></tr>
+<tr><td class="fieldname"><a id="gga61dadd085c1777f559549e05962b2c9ea39974c6110bed527cb7658672b8eeeb9"></a>NETLOC_ERROR_MAX&#160;</td><td class="fielddoc"><p>Error: Enum upper bound marker. No errors less than this number Will not be returned externally. </p>
+</td></tr>
+</table>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00253.html b/doc/doxygen-doc/html/a00253.html
new file mode 100644
index 00000000..2288ef41
--- /dev/null
+++ b/doc/doxygen-doc/html/a00253.html
@@ -0,0 +1,687 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc_obj Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">hwloc_obj Struct Reference<div class="ingroups"><a class="el" href="a00197.html">Object Structure and Attributes</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00125_source.html">hwloc.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:acc4f0803f244867e68fe0036800be5de"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a></td></tr>
+<tr class="separator:acc4f0803f244867e68fe0036800be5de"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5d4f97e76723a9ec8d38046f19e00d33"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a5d4f97e76723a9ec8d38046f19e00d33">subtype</a></td></tr>
+<tr class="separator:a5d4f97e76723a9ec8d38046f19e00d33"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a61a7a80a68eaccbaaa28269e678c81a9"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a></td></tr>
+<tr class="separator:a61a7a80a68eaccbaaa28269e678c81a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abb709ec38f2970677e4e57d1d30be96d"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">name</a></td></tr>
+<tr class="separator:abb709ec38f2970677e4e57d1d30be96d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a75603fc36c9284ba48ce814b772a58b6"><td class="memItemLeft" align="right" valign="top">hwloc_uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a75603fc36c9284ba48ce814b772a58b6">total_memory</a></td></tr>
+<tr class="separator:a75603fc36c9284ba48ce814b772a58b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:accd40e29f71f19e88db62ea3df02adc8"><td class="memItemLeft" align="right" valign="top">union <a class="el" href="a00257.html">hwloc_obj_attr_u</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a></td></tr>
+<tr class="separator:accd40e29f71f19e88db62ea3df02adc8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4876fd165b4fff35521f07ebd85355ed"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">depth</a></td></tr>
+<tr class="separator:a4876fd165b4fff35521f07ebd85355ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0d07fb7b8935e137c94d75a3eb492ae9"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a0d07fb7b8935e137c94d75a3eb492ae9">logical_index</a></td></tr>
+<tr class="separator:a0d07fb7b8935e137c94d75a3eb492ae9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a85a788017457129589318b6c39451acf"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00253.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a85a788017457129589318b6c39451acf">next_cousin</a></td></tr>
+<tr class="separator:a85a788017457129589318b6c39451acf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac715989f55ff5a0eb6be2969ee477ec0"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00253.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#ac715989f55ff5a0eb6be2969ee477ec0">prev_cousin</a></td></tr>
+<tr class="separator:ac715989f55ff5a0eb6be2969ee477ec0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adc494f6aed939992be1c55cca5822900"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00253.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#adc494f6aed939992be1c55cca5822900">parent</a></td></tr>
+<tr class="separator:adc494f6aed939992be1c55cca5822900"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaa6043eee6f55869933c1d974efd9acd"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#aaa6043eee6f55869933c1d974efd9acd">sibling_rank</a></td></tr>
+<tr class="separator:aaa6043eee6f55869933c1d974efd9acd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7f2343ed476fe4942e6fffd4cade1b40"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00253.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a7f2343ed476fe4942e6fffd4cade1b40">next_sibling</a></td></tr>
+<tr class="separator:a7f2343ed476fe4942e6fffd4cade1b40"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7b89e8c189876c0158a9282aaaf17f50"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00253.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a7b89e8c189876c0158a9282aaaf17f50">prev_sibling</a></td></tr>
+<tr class="separator:a7b89e8c189876c0158a9282aaaf17f50"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0f41a1d67dc6b661906f2217563637f3"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a0f41a1d67dc6b661906f2217563637f3">symmetric_subtree</a></td></tr>
+<tr class="separator:a0f41a1d67dc6b661906f2217563637f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a67925e0f2c47f50408fbdb9bddd0790f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a></td></tr>
+<tr class="separator:a67925e0f2c47f50408fbdb9bddd0790f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a91788a9da687beb7224cc1fd7b75208c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a91788a9da687beb7224cc1fd7b75208c">complete_cpuset</a></td></tr>
+<tr class="separator:a91788a9da687beb7224cc1fd7b75208c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a08f0d0e16c619a6e653526cbee4ffea3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00195.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a08f0d0e16c619a6e653526cbee4ffea3">nodeset</a></td></tr>
+<tr class="separator:a08f0d0e16c619a6e653526cbee4ffea3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac38c4012127525ef74c5615c526f4c2e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00195.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#ac38c4012127525ef74c5615c526f4c2e">complete_nodeset</a></td></tr>
+<tr class="separator:ac38c4012127525ef74c5615c526f4c2e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8604654c38b7a720efae5025d3a96ee6"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00301.html">hwloc_info_s</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a8604654c38b7a720efae5025d3a96ee6">infos</a></td></tr>
+<tr class="separator:a8604654c38b7a720efae5025d3a96ee6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9843acc28cfbba903b63ea14b137ff70"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a9843acc28cfbba903b63ea14b137ff70">infos_count</a></td></tr>
+<tr class="separator:a9843acc28cfbba903b63ea14b137ff70"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a76fd3ac94401cf32dfccc3a3a8de68a5"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a76fd3ac94401cf32dfccc3a3a8de68a5">userdata</a></td></tr>
+<tr class="separator:a76fd3ac94401cf32dfccc3a3a8de68a5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a957984a355fa61c85f46605c336e7551"><td class="memItemLeft" align="right" valign="top">hwloc_uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a957984a355fa61c85f46605c336e7551">gp_index</a></td></tr>
+<tr class="separator:a957984a355fa61c85f46605c336e7551"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr><td colspan="2"><div class="groupHeader">List and array of normal children below this object (except Memory, I/O and Misc children).</div></td></tr>
+<tr class="memitem:aac3f6da35c9b57599909a44ce2b716c1"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#aac3f6da35c9b57599909a44ce2b716c1">arity</a></td></tr>
+<tr class="separator:aac3f6da35c9b57599909a44ce2b716c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a04d05403da37bfe17cd63b7c7dd07b1f"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00253.html">hwloc_obj</a> **&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a04d05403da37bfe17cd63b7c7dd07b1f">children</a></td></tr>
+<tr class="separator:a04d05403da37bfe17cd63b7c7dd07b1f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af51d08a0a79dba517c06c5afedc8d2dc"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00253.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#af51d08a0a79dba517c06c5afedc8d2dc">first_child</a></td></tr>
+<tr class="separator:af51d08a0a79dba517c06c5afedc8d2dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a84bd65634dbc55f4158b74443a9bd04f"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00253.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a84bd65634dbc55f4158b74443a9bd04f">last_child</a></td></tr>
+<tr class="separator:a84bd65634dbc55f4158b74443a9bd04f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr><td colspan="2"><div class="groupHeader">List of Memory children below this object.</div></td></tr>
+<tr class="memitem:a6f834ea4dd26553cdea601d2fae6d3b7"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a6f834ea4dd26553cdea601d2fae6d3b7">memory_arity</a></td></tr>
+<tr class="separator:a6f834ea4dd26553cdea601d2fae6d3b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac0e8200dba25b90d5954bd4ec61f97d3"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00253.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#ac0e8200dba25b90d5954bd4ec61f97d3">memory_first_child</a></td></tr>
+<tr class="separator:ac0e8200dba25b90d5954bd4ec61f97d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr><td colspan="2"><div class="groupHeader">List of I/O children below this object.</div></td></tr>
+<tr class="memitem:a7b3b29f0be377c7d2d52262019fc7d11"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a7b3b29f0be377c7d2d52262019fc7d11">io_arity</a></td></tr>
+<tr class="separator:a7b3b29f0be377c7d2d52262019fc7d11"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8d14c88e1ebc4ae67cc69f9e928558b3"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00253.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a8d14c88e1ebc4ae67cc69f9e928558b3">io_first_child</a></td></tr>
+<tr class="separator:a8d14c88e1ebc4ae67cc69f9e928558b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr><td colspan="2"><div class="groupHeader">List of Misc children below this object.</div></td></tr>
+<tr class="memitem:a2bb7862ce722d7ceda23cfa153da165a"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a2bb7862ce722d7ceda23cfa153da165a">misc_arity</a></td></tr>
+<tr class="separator:a2bb7862ce722d7ceda23cfa153da165a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a57812a313fe9b1a9500489f47c3011cc"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00253.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00253.html#a57812a313fe9b1a9500489f47c3011cc">misc_first_child</a></td></tr>
+<tr class="separator:a57812a313fe9b1a9500489f47c3011cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Structure of a topology object. </p>
+<p>Applications must not modify any field except <code><a class="el" href="a00253.html#a76fd3ac94401cf32dfccc3a3a8de68a5" title="Application-given private data pointer, initialized to NULL, use it as you wish. See hwloc_topology_s...">hwloc_obj.userdata</a></code>. </p>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a id="aac3f6da35c9b57599909a44ce2b716c1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aac3f6da35c9b57599909a44ce2b716c1">&#9670;&nbsp;</a></span>arity</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned hwloc_obj::arity</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Number of normal children. Memory, Misc and I/O children are not listed here but rather in their dedicated children list. </p>
+
+</div>
+</div>
+<a id="accd40e29f71f19e88db62ea3df02adc8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#accd40e29f71f19e88db62ea3df02adc8">&#9670;&nbsp;</a></span>attr</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">union <a class="el" href="a00257.html">hwloc_obj_attr_u</a>* hwloc_obj::attr</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Object type-specific Attributes, may be <code>NULL</code> if no attribute value was found. </p>
+
+</div>
+</div>
+<a id="a04d05403da37bfe17cd63b7c7dd07b1f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a04d05403da37bfe17cd63b7c7dd07b1f">&#9670;&nbsp;</a></span>children</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00253.html">hwloc_obj</a>** hwloc_obj::children</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Normal children, <code>children</code>[0 .. arity -1]. </p>
+
+</div>
+</div>
+<a id="a91788a9da687beb7224cc1fd7b75208c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a91788a9da687beb7224cc1fd7b75208c">&#9670;&nbsp;</a></span>complete_cpuset</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> hwloc_obj::complete_cpuset</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>The complete CPU set of processors of this object,. </p>
+<p>This may include not only the same as the cpuset field, but also some CPUs for which topology information is unknown or incomplete, some offlines CPUs, and the CPUs that are ignored when the <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258" title="Detect the whole system, ignore reservations, include disallowed objects.">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a> flag is not set. Thus no corresponding PU object may be found in the topology, because the precise position is undefined. It is however known that it would be somewhere under this object.</p>
+<dl class="section note"><dt>Note</dt><dd>Its value must not be changed, <a class="el" href="a00217.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a> must be used instead. </dd></dl>
+
+</div>
+</div>
+<a id="ac38c4012127525ef74c5615c526f4c2e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac38c4012127525ef74c5615c526f4c2e">&#9670;&nbsp;</a></span>complete_nodeset</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00195.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a> hwloc_obj::complete_nodeset</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>The complete NUMA node set of this object,. </p>
+<p>This may include not only the same as the nodeset field, but also some NUMA nodes for which topology information is unknown or incomplete, some offlines nodes, and the nodes that are ignored when the <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258" title="Detect the whole system, ignore reservations, include disallowed objects.">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a> flag is not set. Thus no corresponding NUMA node object may be found in the topology, because the precise position is undefined. It is however known that it would be somewhere under this object.</p>
+<p>If there are no NUMA nodes in the machine, all the memory is close to this object, so only the first bit is set in <code>complete_nodeset</code>.</p>
+<dl class="section note"><dt>Note</dt><dd>Its value must not be changed, <a class="el" href="a00217.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a> must be used instead. </dd></dl>
+
+</div>
+</div>
+<a id="a67925e0f2c47f50408fbdb9bddd0790f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a67925e0f2c47f50408fbdb9bddd0790f">&#9670;&nbsp;</a></span>cpuset</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> hwloc_obj::cpuset</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>CPUs covered by this object. </p>
+<p>This is the set of CPUs for which there are PU objects in the topology under this object, i.e. which are known to be physically contained in this object and known how (the children path between this object and the PU objects).</p>
+<p>If the <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258" title="Detect the whole system, ignore reservations, include disallowed objects.">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a> configuration flag is set, some of these CPUs may be online but not allowed for binding, see <a class="el" href="a00214.html#ga517d5d68ec9f24583d8933aab713be8e" title="Get allowed CPU set.">hwloc_topology_get_allowed_cpuset()</a>.</p>
+<dl class="section note"><dt>Note</dt><dd>All objects have non-NULL CPU and node sets except Misc and I/O objects.</dd>
+<dd>
+Its value must not be changed, <a class="el" href="a00217.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a> must be used instead. </dd></dl>
+
+</div>
+</div>
+<a id="a4876fd165b4fff35521f07ebd85355ed"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4876fd165b4fff35521f07ebd85355ed">&#9670;&nbsp;</a></span>depth</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_obj::depth</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Vertical index in the hierarchy. </p>
+<p>For normal objects, this is the depth of the horizontal level that contains this object and its cousins of the same type. If the topology is symmetric, this is equal to the parent depth plus one, and also equal to the number of parent/child links from the root object to here.</p>
+<p>For special objects (NUMA nodes, I/O and Misc) that are not in the main tree, this is a special negative value that corresponds to their dedicated level, see <a class="el" href="a00199.html#ga8bec782e21be313750da70cf7428b374" title="Returns the depth of objects of type type.">hwloc_get_type_depth()</a> and <a class="el" href="a00199.html#gaf4e663cf42bbe20756b849c6293ef575">hwloc_get_type_depth_e</a>. Those special values can be passed to hwloc functions such <a class="el" href="a00199.html#ga1d5ceafe8130fe6e8657bf0bc666ba50" title="Returns the width of level at depth depth.">hwloc_get_nbobjs_by_depth()</a> as usual. </p>
+
+</div>
+</div>
+<a id="af51d08a0a79dba517c06c5afedc8d2dc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af51d08a0a79dba517c06c5afedc8d2dc">&#9670;&nbsp;</a></span>first_child</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00253.html">hwloc_obj</a>* hwloc_obj::first_child</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>First normal child. </p>
+
+</div>
+</div>
+<a id="a957984a355fa61c85f46605c336e7551"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a957984a355fa61c85f46605c336e7551">&#9670;&nbsp;</a></span>gp_index</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">hwloc_uint64_t hwloc_obj::gp_index</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Global persistent index. Generated by hwloc, unique across the topology (contrary to os_index) and persistent across topology changes (contrary to logical_index). Mostly used internally, but could also be used by application to identify objects. </p>
+
+</div>
+</div>
+<a id="a8604654c38b7a720efae5025d3a96ee6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8604654c38b7a720efae5025d3a96ee6">&#9670;&nbsp;</a></span>infos</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00301.html">hwloc_info_s</a>* hwloc_obj::infos</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Array of stringified info type=name. </p>
+
+</div>
+</div>
+<a id="a9843acc28cfbba903b63ea14b137ff70"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9843acc28cfbba903b63ea14b137ff70">&#9670;&nbsp;</a></span>infos_count</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned hwloc_obj::infos_count</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Size of infos array. </p>
+
+</div>
+</div>
+<a id="a7b3b29f0be377c7d2d52262019fc7d11"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7b3b29f0be377c7d2d52262019fc7d11">&#9670;&nbsp;</a></span>io_arity</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned hwloc_obj::io_arity</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Number of I/O children. These children are listed in <code>io_first_child</code>. </p>
+
+</div>
+</div>
+<a id="a8d14c88e1ebc4ae67cc69f9e928558b3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8d14c88e1ebc4ae67cc69f9e928558b3">&#9670;&nbsp;</a></span>io_first_child</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00253.html">hwloc_obj</a>* hwloc_obj::io_first_child</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>First I/O child. Bridges, PCI and OS devices are listed here (<code>io_arity</code> and <code>io_first_child</code>) instead of in the normal children list. See also <a class="el" href="a00210.html#gac8a954ed37a4376097234c828068cbef" title="Check whether an object type is I/O.">hwloc_obj_type_is_io()</a>. </p>
+
+</div>
+</div>
+<a id="a84bd65634dbc55f4158b74443a9bd04f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a84bd65634dbc55f4158b74443a9bd04f">&#9670;&nbsp;</a></span>last_child</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00253.html">hwloc_obj</a>* hwloc_obj::last_child</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Last normal child. </p>
+
+</div>
+</div>
+<a id="a0d07fb7b8935e137c94d75a3eb492ae9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0d07fb7b8935e137c94d75a3eb492ae9">&#9670;&nbsp;</a></span>logical_index</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned hwloc_obj::logical_index</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Horizontal index in the whole list of similar objects, hence guaranteed unique across the entire machine. Could be a "cousin_rank" since it's the rank within the "cousin" list below Note that this index may change when restricting the topology or when inserting a group. </p>
+
+</div>
+</div>
+<a id="a6f834ea4dd26553cdea601d2fae6d3b7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6f834ea4dd26553cdea601d2fae6d3b7">&#9670;&nbsp;</a></span>memory_arity</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned hwloc_obj::memory_arity</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Number of Memory children. These children are listed in <code>memory_first_child</code>. </p>
+
+</div>
+</div>
+<a id="ac0e8200dba25b90d5954bd4ec61f97d3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac0e8200dba25b90d5954bd4ec61f97d3">&#9670;&nbsp;</a></span>memory_first_child</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00253.html">hwloc_obj</a>* hwloc_obj::memory_first_child</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>First Memory child. NUMA nodes and Memory-side caches are listed here (<code>memory_arity</code> and <code>memory_first_child</code>) instead of in the normal children list. See also <a class="el" href="a00210.html#ga1d074390c8a3dc3088d84f73fb73f966" title="Check whether an object type is Memory.">hwloc_obj_type_is_memory()</a>. </p>
+<p>A memory hierarchy starts from a normal CPU-side object (e.g. Package) and ends with NUMA nodes as leaves. There might exist some memory-side caches between them in the middle of the memory subtree. </p>
+
+</div>
+</div>
+<a id="a2bb7862ce722d7ceda23cfa153da165a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2bb7862ce722d7ceda23cfa153da165a">&#9670;&nbsp;</a></span>misc_arity</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned hwloc_obj::misc_arity</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Number of Misc children. These children are listed in <code>misc_first_child</code>. </p>
+
+</div>
+</div>
+<a id="a57812a313fe9b1a9500489f47c3011cc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a57812a313fe9b1a9500489f47c3011cc">&#9670;&nbsp;</a></span>misc_first_child</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00253.html">hwloc_obj</a>* hwloc_obj::misc_first_child</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>First Misc child. Misc objects are listed here (<code>misc_arity</code> and <code>misc_first_child</code>) instead of in the normal children list. </p>
+
+</div>
+</div>
+<a id="abb709ec38f2970677e4e57d1d30be96d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abb709ec38f2970677e4e57d1d30be96d">&#9670;&nbsp;</a></span>name</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">char* hwloc_obj::name</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name string is more useful than numerical indexes. </p>
+
+</div>
+</div>
+<a id="a85a788017457129589318b6c39451acf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a85a788017457129589318b6c39451acf">&#9670;&nbsp;</a></span>next_cousin</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00253.html">hwloc_obj</a>* hwloc_obj::next_cousin</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Next object of same type and depth. </p>
+
+</div>
+</div>
+<a id="a7f2343ed476fe4942e6fffd4cade1b40"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7f2343ed476fe4942e6fffd4cade1b40">&#9670;&nbsp;</a></span>next_sibling</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00253.html">hwloc_obj</a>* hwloc_obj::next_sibling</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Next object below the same parent (inside the same list of children). </p>
+
+</div>
+</div>
+<a id="a08f0d0e16c619a6e653526cbee4ffea3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a08f0d0e16c619a6e653526cbee4ffea3">&#9670;&nbsp;</a></span>nodeset</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00195.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a> hwloc_obj::nodeset</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>NUMA nodes covered by this object or containing this object. </p>
+<p>This is the set of NUMA nodes for which there are NUMA node objects in the topology under or above this object, i.e. which are known to be physically contained in this object or containing it and known how (the children path between this object and the NUMA node objects).</p>
+<p>In the end, these nodes are those that are close to the current object. Function <a class="el" href="a00224.html#ga569e80c5be7ef27649b0ef5aa52ffcdc" title="Return an array of local NUMA nodes.">hwloc_get_local_numanode_objs()</a> may be used to list those NUMA nodes more precisely.</p>
+<p>If the <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258" title="Detect the whole system, ignore reservations, include disallowed objects.">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a> configuration flag is set, some of these nodes may be online but not allowed for allocation, see <a class="el" href="a00214.html#ga21a4d7237a11e76b912ed4524ab78cbd" title="Get allowed node set.">hwloc_topology_get_allowed_nodeset()</a>.</p>
+<p>If there are no NUMA nodes in the machine, all the memory is close to this object, so only the first bit may be set in <code>nodeset</code>.</p>
+<dl class="section note"><dt>Note</dt><dd>All objects have non-NULL CPU and node sets except Misc and I/O objects.</dd>
+<dd>
+Its value must not be changed, <a class="el" href="a00217.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a> must be used instead. </dd></dl>
+
+</div>
+</div>
+<a id="a61a7a80a68eaccbaaa28269e678c81a9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a61a7a80a68eaccbaaa28269e678c81a9">&#9670;&nbsp;</a></span>os_index</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned hwloc_obj::os_index</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>OS-provided physical index number. It is not guaranteed unique across the entire machine, except for PUs and NUMA nodes. Set to HWLOC_UNKNOWN_INDEX if unknown or irrelevant for this object. </p>
+
+</div>
+</div>
+<a id="adc494f6aed939992be1c55cca5822900"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adc494f6aed939992be1c55cca5822900">&#9670;&nbsp;</a></span>parent</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00253.html">hwloc_obj</a>* hwloc_obj::parent</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Parent, <code>NULL</code> if root (Machine object) </p>
+
+</div>
+</div>
+<a id="ac715989f55ff5a0eb6be2969ee477ec0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac715989f55ff5a0eb6be2969ee477ec0">&#9670;&nbsp;</a></span>prev_cousin</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00253.html">hwloc_obj</a>* hwloc_obj::prev_cousin</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Previous object of same type and depth. </p>
+
+</div>
+</div>
+<a id="a7b89e8c189876c0158a9282aaaf17f50"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7b89e8c189876c0158a9282aaaf17f50">&#9670;&nbsp;</a></span>prev_sibling</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00253.html">hwloc_obj</a>* hwloc_obj::prev_sibling</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Previous object below the same parent (inside the same list of children). </p>
+
+</div>
+</div>
+<a id="aaa6043eee6f55869933c1d974efd9acd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaa6043eee6f55869933c1d974efd9acd">&#9670;&nbsp;</a></span>sibling_rank</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned hwloc_obj::sibling_rank</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Index in parent's <code>children</code>[] array. Or the index in parent's Memory, I/O or Misc children list. </p>
+
+</div>
+</div>
+<a id="a5d4f97e76723a9ec8d38046f19e00d33"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5d4f97e76723a9ec8d38046f19e00d33">&#9670;&nbsp;</a></span>subtype</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">char* hwloc_obj::subtype</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Subtype string to better describe the type field. </p>
+
+</div>
+</div>
+<a id="a0f41a1d67dc6b661906f2217563637f3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0f41a1d67dc6b661906f2217563637f3">&#9670;&nbsp;</a></span>symmetric_subtree</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_obj::symmetric_subtree</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Set if the subtree of normal objects below this object is symmetric, which means all normal children and their children have identical subtrees. </p>
+<p>Memory, I/O and Misc children are ignored.</p>
+<p>If set in the topology root object, lstopo may export the topology as a synthetic string. </p>
+
+</div>
+</div>
+<a id="a75603fc36c9284ba48ce814b772a58b6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a75603fc36c9284ba48ce814b772a58b6">&#9670;&nbsp;</a></span>total_memory</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">hwloc_uint64_t hwloc_obj::total_memory</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Total memory (in bytes) in NUMA nodes below this object. </p>
+
+</div>
+</div>
+<a id="acc4f0803f244867e68fe0036800be5de"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acc4f0803f244867e68fe0036800be5de">&#9670;&nbsp;</a></span>type</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> hwloc_obj::type</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Type of object. </p>
+
+</div>
+</div>
+<a id="a76fd3ac94401cf32dfccc3a3a8de68a5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a76fd3ac94401cf32dfccc3a3a8de68a5">&#9670;&nbsp;</a></span>userdata</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* hwloc_obj::userdata</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Application-given private data pointer, initialized to <code>NULL</code>, use it as you wish. See <a class="el" href="a00218.html#ga9d6ff0f7a8dd45be9aa8575ef31978cc" title="Set the application-specific callback for exporting object userdata.">hwloc_topology_set_userdata_export_callback()</a> in <a class="el" href="a00134_source.html">hwloc/export.h</a> if you wish to export this field to XML. </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00125_source.html">hwloc.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00257.html b/doc/doxygen-doc/html/a00257.html
new file mode 100644
index 00000000..8dd1ba61
--- /dev/null
+++ b/doc/doxygen-doc/html/a00257.html
@@ -0,0 +1,178 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc_obj_attr_u Union Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">hwloc_obj_attr_u Union Reference<div class="ingroups"><a class="el" href="a00197.html">Object Structure and Attributes</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00125_source.html">hwloc.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00281.html">hwloc_bridge_attr_s</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html">hwloc_cache_attr_s</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html">hwloc_group_attr_s</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html">hwloc_numanode_attr_s</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00297.html">hwloc_osdev_attr_s</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00277.html">hwloc_pcidev_attr_s</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:ad066b9612802ffa01e132dc3a8e6cc86"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00261.html">hwloc_obj_attr_u::hwloc_numanode_attr_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html#ad066b9612802ffa01e132dc3a8e6cc86">numanode</a></td></tr>
+<tr class="separator:ad066b9612802ffa01e132dc3a8e6cc86"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a23f553f3252c9d13f2338231cd354ea9"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00269.html">hwloc_obj_attr_u::hwloc_cache_attr_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html#a23f553f3252c9d13f2338231cd354ea9">cache</a></td></tr>
+<tr class="separator:a23f553f3252c9d13f2338231cd354ea9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9eddbd69e34cd2ef6af6d2ac31b6eff3"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00273.html">hwloc_obj_attr_u::hwloc_group_attr_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html#a9eddbd69e34cd2ef6af6d2ac31b6eff3">group</a></td></tr>
+<tr class="separator:a9eddbd69e34cd2ef6af6d2ac31b6eff3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0b66da7ab072f7c016f8ed86701f5a7c"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00277.html">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a></td></tr>
+<tr class="separator:a0b66da7ab072f7c016f8ed86701f5a7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a207e6359497b7116d6f4baa9e8bbeb43"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00281.html">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html#a207e6359497b7116d6f4baa9e8bbeb43">bridge</a></td></tr>
+<tr class="separator:a207e6359497b7116d6f4baa9e8bbeb43"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaf7a5c38b5185703ff18c46ad2761dcf"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00297.html">hwloc_obj_attr_u::hwloc_osdev_attr_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00257.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a></td></tr>
+<tr class="separator:aaf7a5c38b5185703ff18c46ad2761dcf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Object type-specific Attributes. </p>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a id="a207e6359497b7116d6f4baa9e8bbeb43"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a207e6359497b7116d6f4baa9e8bbeb43">&#9670;&nbsp;</a></span>bridge</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00281.html">hwloc_obj_attr_u::hwloc_bridge_attr_s</a> hwloc_obj_attr_u::bridge</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a23f553f3252c9d13f2338231cd354ea9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a23f553f3252c9d13f2338231cd354ea9">&#9670;&nbsp;</a></span>cache</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00269.html">hwloc_obj_attr_u::hwloc_cache_attr_s</a> hwloc_obj_attr_u::cache</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a9eddbd69e34cd2ef6af6d2ac31b6eff3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9eddbd69e34cd2ef6af6d2ac31b6eff3">&#9670;&nbsp;</a></span>group</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00273.html">hwloc_obj_attr_u::hwloc_group_attr_s</a> hwloc_obj_attr_u::group</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ad066b9612802ffa01e132dc3a8e6cc86"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad066b9612802ffa01e132dc3a8e6cc86">&#9670;&nbsp;</a></span>numanode</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00261.html">hwloc_obj_attr_u::hwloc_numanode_attr_s</a> hwloc_obj_attr_u::numanode</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aaf7a5c38b5185703ff18c46ad2761dcf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaf7a5c38b5185703ff18c46ad2761dcf">&#9670;&nbsp;</a></span>osdev</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00297.html">hwloc_obj_attr_u::hwloc_osdev_attr_s</a> hwloc_obj_attr_u::osdev</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a0b66da7ab072f7c016f8ed86701f5a7c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0b66da7ab072f7c016f8ed86701f5a7c">&#9670;&nbsp;</a></span>pcidev</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00277.html">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a> hwloc_obj_attr_u::pcidev</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this union was generated from the following file:<ul>
+<li><a class="el" href="a00125_source.html">hwloc.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00261.html b/doc/doxygen-doc/html/a00261.html
new file mode 100644
index 00000000..bd1a4332
--- /dev/null
+++ b/doc/doxygen-doc/html/a00261.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc_obj_attr_u::hwloc_numanode_attr_s Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="a00257.html">hwloc_obj_attr_u</a></li><li class="navelem"><a class="el" href="a00261.html">hwloc_numanode_attr_s</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">hwloc_obj_attr_u::hwloc_numanode_attr_s Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00125_source.html">hwloc.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00265.html">hwloc_memory_page_type_s</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a6703cbf2afbf63c9d60c5ff4dc0c73aa"><td class="memItemLeft" align="right" valign="top">hwloc_uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a6703cbf2afbf63c9d60c5ff4dc0c73aa">local_memory</a></td></tr>
+<tr class="separator:a6703cbf2afbf63c9d60c5ff4dc0c73aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a513078122d403904e16723d30f583cb2"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a513078122d403904e16723d30f583cb2">page_types_len</a></td></tr>
+<tr class="separator:a513078122d403904e16723d30f583cb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7e53c5024da2d7741a5cc1e7016bb8d2"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00265.html">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00261.html#a7e53c5024da2d7741a5cc1e7016bb8d2">page_types</a></td></tr>
+<tr class="separator:a7e53c5024da2d7741a5cc1e7016bb8d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>NUMA node-specific Object Attributes. </p>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a id="a6703cbf2afbf63c9d60c5ff4dc0c73aa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6703cbf2afbf63c9d60c5ff4dc0c73aa">&#9670;&nbsp;</a></span>local_memory</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">hwloc_uint64_t hwloc_obj_attr_u::hwloc_numanode_attr_s::local_memory</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Local memory (in bytes) </p>
+
+</div>
+</div>
+<a id="a7e53c5024da2d7741a5cc1e7016bb8d2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7e53c5024da2d7741a5cc1e7016bb8d2">&#9670;&nbsp;</a></span>page_types</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00265.html">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s</a> * hwloc_obj_attr_u::hwloc_numanode_attr_s::page_types</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a513078122d403904e16723d30f583cb2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a513078122d403904e16723d30f583cb2">&#9670;&nbsp;</a></span>page_types_len</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned hwloc_obj_attr_u::hwloc_numanode_attr_s::page_types_len</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Size of array <code>page_types</code>. </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00125_source.html">hwloc.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00265.html b/doc/doxygen-doc/html/a00265.html
new file mode 100644
index 00000000..21c0457f
--- /dev/null
+++ b/doc/doxygen-doc/html/a00265.html
@@ -0,0 +1,107 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="a00257.html">hwloc_obj_attr_u</a></li><li class="navelem"><a class="el" href="a00261.html">hwloc_numanode_attr_s</a></li><li class="navelem"><a class="el" href="a00265.html">hwloc_memory_page_type_s</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00125_source.html">hwloc.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a8ea7ebe9d91c7378bba03da57efc25cb"><td class="memItemLeft" align="right" valign="top">hwloc_uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00265.html#a8ea7ebe9d91c7378bba03da57efc25cb">size</a></td></tr>
+<tr class="separator:a8ea7ebe9d91c7378bba03da57efc25cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a98514e37d57a325b78e21ffd8d7419e0"><td class="memItemLeft" align="right" valign="top">hwloc_uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00265.html#a98514e37d57a325b78e21ffd8d7419e0">count</a></td></tr>
+<tr class="separator:a98514e37d57a325b78e21ffd8d7419e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Array of local memory page types, <code>NULL</code> if no local memory and <code>page_types</code> is 0. </p>
+<p>The array is sorted by increasing <code>size</code> fields. It contains <code>page_types_len</code> slots. </p>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a id="a98514e37d57a325b78e21ffd8d7419e0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a98514e37d57a325b78e21ffd8d7419e0">&#9670;&nbsp;</a></span>count</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">hwloc_uint64_t hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s::count</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Number of pages of this size. </p>
+
+</div>
+</div>
+<a id="a8ea7ebe9d91c7378bba03da57efc25cb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8ea7ebe9d91c7378bba03da57efc25cb">&#9670;&nbsp;</a></span>size</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">hwloc_uint64_t hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s::size</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Size of pages. </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00125_source.html">hwloc.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00269.html b/doc/doxygen-doc/html/a00269.html
new file mode 100644
index 00000000..5dfa9d15
--- /dev/null
+++ b/doc/doxygen-doc/html/a00269.html
@@ -0,0 +1,160 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc_obj_attr_u::hwloc_cache_attr_s Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="a00257.html">hwloc_obj_attr_u</a></li><li class="navelem"><a class="el" href="a00269.html">hwloc_cache_attr_s</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">hwloc_obj_attr_u::hwloc_cache_attr_s Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00125_source.html">hwloc.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:abe5e788943ed04302976740c829674c0"><td class="memItemLeft" align="right" valign="top">hwloc_uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#abe5e788943ed04302976740c829674c0">size</a></td></tr>
+<tr class="separator:abe5e788943ed04302976740c829674c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5c8f7f39193736c2187ed626940835d5"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#a5c8f7f39193736c2187ed626940835d5">depth</a></td></tr>
+<tr class="separator:a5c8f7f39193736c2187ed626940835d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a801e8a668e28caf06c8b88e9ae5c10db"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#a801e8a668e28caf06c8b88e9ae5c10db">linesize</a></td></tr>
+<tr class="separator:a801e8a668e28caf06c8b88e9ae5c10db"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad06525e474d1e2d1423ed71bb998592d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#ad06525e474d1e2d1423ed71bb998592d">associativity</a></td></tr>
+<tr class="separator:ad06525e474d1e2d1423ed71bb998592d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad8edc8ded2b7a70d6abbc874801930f4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00196.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00269.html#ad8edc8ded2b7a70d6abbc874801930f4">type</a></td></tr>
+<tr class="separator:ad8edc8ded2b7a70d6abbc874801930f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Cache-specific Object Attributes. </p>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a id="ad06525e474d1e2d1423ed71bb998592d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad06525e474d1e2d1423ed71bb998592d">&#9670;&nbsp;</a></span>associativity</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_obj_attr_u::hwloc_cache_attr_s::associativity</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Ways of associativity, -1 if fully associative, 0 if unknown. </p>
+
+</div>
+</div>
+<a id="a5c8f7f39193736c2187ed626940835d5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5c8f7f39193736c2187ed626940835d5">&#9670;&nbsp;</a></span>depth</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned hwloc_obj_attr_u::hwloc_cache_attr_s::depth</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Depth of cache (e.g., L1, L2, ...etc.) </p>
+
+</div>
+</div>
+<a id="a801e8a668e28caf06c8b88e9ae5c10db"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a801e8a668e28caf06c8b88e9ae5c10db">&#9670;&nbsp;</a></span>linesize</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned hwloc_obj_attr_u::hwloc_cache_attr_s::linesize</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Cache-line size in bytes. 0 if unknown. </p>
+
+</div>
+</div>
+<a id="abe5e788943ed04302976740c829674c0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abe5e788943ed04302976740c829674c0">&#9670;&nbsp;</a></span>size</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">hwloc_uint64_t hwloc_obj_attr_u::hwloc_cache_attr_s::size</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Size of cache in bytes. </p>
+
+</div>
+</div>
+<a id="ad8edc8ded2b7a70d6abbc874801930f4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad8edc8ded2b7a70d6abbc874801930f4">&#9670;&nbsp;</a></span>type</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00196.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a> hwloc_obj_attr_u::hwloc_cache_attr_s::type</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Cache type. </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00125_source.html">hwloc.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00273.html b/doc/doxygen-doc/html/a00273.html
new file mode 100644
index 00000000..158f14a3
--- /dev/null
+++ b/doc/doxygen-doc/html/a00273.html
@@ -0,0 +1,142 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc_obj_attr_u::hwloc_group_attr_s Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="a00257.html">hwloc_obj_attr_u</a></li><li class="navelem"><a class="el" href="a00273.html">hwloc_group_attr_s</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">hwloc_obj_attr_u::hwloc_group_attr_s Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00125_source.html">hwloc.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:ad914eac61c77481e1b7037877bcc5579"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#ad914eac61c77481e1b7037877bcc5579">depth</a></td></tr>
+<tr class="separator:ad914eac61c77481e1b7037877bcc5579"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3229f269c4cc7e63492c168535e4f0c1"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#a3229f269c4cc7e63492c168535e4f0c1">kind</a></td></tr>
+<tr class="separator:a3229f269c4cc7e63492c168535e4f0c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad514d943960a4036ed5e44dc187c74ed"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#ad514d943960a4036ed5e44dc187c74ed">subkind</a></td></tr>
+<tr class="separator:ad514d943960a4036ed5e44dc187c74ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afa253d4b70f92e940c226d61f192054f"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00273.html#afa253d4b70f92e940c226d61f192054f">dont_merge</a></td></tr>
+<tr class="separator:afa253d4b70f92e940c226d61f192054f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Group-specific Object Attributes. </p>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a id="ad914eac61c77481e1b7037877bcc5579"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad914eac61c77481e1b7037877bcc5579">&#9670;&nbsp;</a></span>depth</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned hwloc_obj_attr_u::hwloc_group_attr_s::depth</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Depth of group object. It may change if intermediate Group objects are added. </p>
+
+</div>
+</div>
+<a id="afa253d4b70f92e940c226d61f192054f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afa253d4b70f92e940c226d61f192054f">&#9670;&nbsp;</a></span>dont_merge</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_obj_attr_u::hwloc_group_attr_s::dont_merge</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Flag preventing groups from being automatically merged with identical parent or children. </p>
+
+</div>
+</div>
+<a id="a3229f269c4cc7e63492c168535e4f0c1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3229f269c4cc7e63492c168535e4f0c1">&#9670;&nbsp;</a></span>kind</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned hwloc_obj_attr_u::hwloc_group_attr_s::kind</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Internally-used kind of group. </p>
+
+</div>
+</div>
+<a id="ad514d943960a4036ed5e44dc187c74ed"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad514d943960a4036ed5e44dc187c74ed">&#9670;&nbsp;</a></span>subkind</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned hwloc_obj_attr_u::hwloc_group_attr_s::subkind</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Internally-used subkind to distinguish different levels of groups with same kind. </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00125_source.html">hwloc.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00277.html b/doc/doxygen-doc/html/a00277.html
new file mode 100644
index 00000000..329496a4
--- /dev/null
+++ b/doc/doxygen-doc/html/a00277.html
@@ -0,0 +1,246 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc_obj_attr_u::hwloc_pcidev_attr_s Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="a00257.html">hwloc_obj_attr_u</a></li><li class="navelem"><a class="el" href="a00277.html">hwloc_pcidev_attr_s</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">hwloc_obj_attr_u::hwloc_pcidev_attr_s Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00125_source.html">hwloc.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a8fba44988deb98613c1505a4019a34dc"><td class="memItemLeft" align="right" valign="top">unsigned short&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00277.html#a8fba44988deb98613c1505a4019a34dc">domain</a></td></tr>
+<tr class="separator:a8fba44988deb98613c1505a4019a34dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aae99e035e8d1387d7b8768aaa8eceb0a"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00277.html#aae99e035e8d1387d7b8768aaa8eceb0a">bus</a></td></tr>
+<tr class="separator:aae99e035e8d1387d7b8768aaa8eceb0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3d70c84a12f7e93d14c8d47bf4fd9dc5"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00277.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">dev</a></td></tr>
+<tr class="separator:a3d70c84a12f7e93d14c8d47bf4fd9dc5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a695f32df53f4ef728670bfcf31b74e0f"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00277.html#a695f32df53f4ef728670bfcf31b74e0f">func</a></td></tr>
+<tr class="separator:a695f32df53f4ef728670bfcf31b74e0f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aee735352d9f1686fd290fc6d6397c334"><td class="memItemLeft" align="right" valign="top">unsigned short&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00277.html#aee735352d9f1686fd290fc6d6397c334">class_id</a></td></tr>
+<tr class="separator:aee735352d9f1686fd290fc6d6397c334"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aad970ad19b62eb2d5df30e4802da4f4c"><td class="memItemLeft" align="right" valign="top">unsigned short&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00277.html#aad970ad19b62eb2d5df30e4802da4f4c">vendor_id</a></td></tr>
+<tr class="separator:aad970ad19b62eb2d5df30e4802da4f4c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a35b66064ab7d768caf7154e410caf0fa"><td class="memItemLeft" align="right" valign="top">unsigned short&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00277.html#a35b66064ab7d768caf7154e410caf0fa">device_id</a></td></tr>
+<tr class="separator:a35b66064ab7d768caf7154e410caf0fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a499db3d8cc89eaba04fcaef3df1cba97"><td class="memItemLeft" align="right" valign="top">unsigned short&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00277.html#a499db3d8cc89eaba04fcaef3df1cba97">subvendor_id</a></td></tr>
+<tr class="separator:a499db3d8cc89eaba04fcaef3df1cba97"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acac741aecd7a6db64f33409427e3971f"><td class="memItemLeft" align="right" valign="top">unsigned short&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00277.html#acac741aecd7a6db64f33409427e3971f">subdevice_id</a></td></tr>
+<tr class="separator:acac741aecd7a6db64f33409427e3971f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a13ad54c93d08d8ac808e4de9674c5ee7"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00277.html#a13ad54c93d08d8ac808e4de9674c5ee7">revision</a></td></tr>
+<tr class="separator:a13ad54c93d08d8ac808e4de9674c5ee7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a59b2fce35f7cbde86c4fd305d0ccda5f"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00277.html#a59b2fce35f7cbde86c4fd305d0ccda5f">linkspeed</a></td></tr>
+<tr class="separator:a59b2fce35f7cbde86c4fd305d0ccda5f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>PCI Device specific Object Attributes. </p>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a id="aae99e035e8d1387d7b8768aaa8eceb0a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aae99e035e8d1387d7b8768aaa8eceb0a">&#9670;&nbsp;</a></span>bus</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_obj_attr_u::hwloc_pcidev_attr_s::bus</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aee735352d9f1686fd290fc6d6397c334"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aee735352d9f1686fd290fc6d6397c334">&#9670;&nbsp;</a></span>class_id</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned short hwloc_obj_attr_u::hwloc_pcidev_attr_s::class_id</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a3d70c84a12f7e93d14c8d47bf4fd9dc5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3d70c84a12f7e93d14c8d47bf4fd9dc5">&#9670;&nbsp;</a></span>dev</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_obj_attr_u::hwloc_pcidev_attr_s::dev</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a35b66064ab7d768caf7154e410caf0fa"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a35b66064ab7d768caf7154e410caf0fa">&#9670;&nbsp;</a></span>device_id</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned short hwloc_obj_attr_u::hwloc_pcidev_attr_s::device_id</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8fba44988deb98613c1505a4019a34dc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8fba44988deb98613c1505a4019a34dc">&#9670;&nbsp;</a></span>domain</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned short hwloc_obj_attr_u::hwloc_pcidev_attr_s::domain</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a695f32df53f4ef728670bfcf31b74e0f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a695f32df53f4ef728670bfcf31b74e0f">&#9670;&nbsp;</a></span>func</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_obj_attr_u::hwloc_pcidev_attr_s::func</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a59b2fce35f7cbde86c4fd305d0ccda5f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a59b2fce35f7cbde86c4fd305d0ccda5f">&#9670;&nbsp;</a></span>linkspeed</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">float hwloc_obj_attr_u::hwloc_pcidev_attr_s::linkspeed</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a13ad54c93d08d8ac808e4de9674c5ee7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a13ad54c93d08d8ac808e4de9674c5ee7">&#9670;&nbsp;</a></span>revision</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_obj_attr_u::hwloc_pcidev_attr_s::revision</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="acac741aecd7a6db64f33409427e3971f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acac741aecd7a6db64f33409427e3971f">&#9670;&nbsp;</a></span>subdevice_id</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned short hwloc_obj_attr_u::hwloc_pcidev_attr_s::subdevice_id</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a499db3d8cc89eaba04fcaef3df1cba97"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a499db3d8cc89eaba04fcaef3df1cba97">&#9670;&nbsp;</a></span>subvendor_id</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned short hwloc_obj_attr_u::hwloc_pcidev_attr_s::subvendor_id</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aad970ad19b62eb2d5df30e4802da4f4c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aad970ad19b62eb2d5df30e4802da4f4c">&#9670;&nbsp;</a></span>vendor_id</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned short hwloc_obj_attr_u::hwloc_pcidev_attr_s::vendor_id</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00125_source.html">hwloc.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00281.html b/doc/doxygen-doc/html/a00281.html
new file mode 100644
index 00000000..e2e5ae71
--- /dev/null
+++ b/doc/doxygen-doc/html/a00281.html
@@ -0,0 +1,233 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc_obj_attr_u::hwloc_bridge_attr_s Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="a00257.html">hwloc_obj_attr_u</a></li><li class="navelem"><a class="el" href="a00281.html">hwloc_bridge_attr_s</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">hwloc_obj_attr_u::hwloc_bridge_attr_s Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00125_source.html">hwloc.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:ab62888c880f8bb730292722f5811958d"><td class="memItemLeft" >union {</td></tr>
+<tr class="memitem:afbfb960b5aaf2b6e10d8d5d424b227d7"><td class="memItemLeft" >&#160;&#160;&#160;struct <a class="el" href="a00277.html">hwloc_pcidev_attr_s</a>&#160;&#160;&#160;<a class="el" href="a00281.html#ab5c564e7c95b747dae9eb84ec0a2c31e">pci</a></td></tr>
+<tr class="separator:afbfb960b5aaf2b6e10d8d5d424b227d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab62888c880f8bb730292722f5811958d"><td class="memItemLeft" valign="top">}&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00281.html#ab62888c880f8bb730292722f5811958d">upstream</a></td></tr>
+<tr class="separator:ab62888c880f8bb730292722f5811958d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a265dd2164aa2df4972e25a029da72125"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00196.html#gab34362c7a23296c3f12c5756747abda3">hwloc_obj_bridge_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00281.html#a265dd2164aa2df4972e25a029da72125">upstream_type</a></td></tr>
+<tr class="separator:a265dd2164aa2df4972e25a029da72125"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7d5db91d655ba23ffe9bda7a2cbcb9a8"><td class="memItemLeft" >union {</td></tr>
+<tr class="memitem:a9bfa9c4f529c8d9798aca8d02705fd8f"><td class="memItemLeft" >&#160;&#160;&#160;struct {</td></tr>
+<tr class="memitem:afcdd4077c7c574e4791eefbdf8fb5d9e"><td class="memItemLeft" >&#160;&#160;&#160;&#160;&#160;&#160;unsigned short&#160;&#160;&#160;<a class="el" href="a00281.html#a2c31e565a5f0d23d0a0a3dd3ec8f4b17">domain</a></td></tr>
+<tr class="separator:afcdd4077c7c574e4791eefbdf8fb5d9e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5e2836eb053bf87e3f7430b5470dedca"><td class="memItemLeft" >&#160;&#160;&#160;&#160;&#160;&#160;unsigned char&#160;&#160;&#160;<a class="el" href="a00281.html#ae2d9dd73ef1d32045c584a8e66d2f83f">secondary_bus</a></td></tr>
+<tr class="separator:a5e2836eb053bf87e3f7430b5470dedca"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aae5989d9a424dd74ff22da89e6ed245b"><td class="memItemLeft" >&#160;&#160;&#160;&#160;&#160;&#160;unsigned char&#160;&#160;&#160;<a class="el" href="a00281.html#af3f3f7d76bf03e8d2afa721c2b8d6771">subordinate_bus</a></td></tr>
+<tr class="separator:aae5989d9a424dd74ff22da89e6ed245b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9bfa9c4f529c8d9798aca8d02705fd8f"><td class="memItemLeft" valign="top">&#160;&#160;&#160;}&#160;&#160;&#160;<a class="el" href="a00281.html#a2fdc40034b915d504724b35cc776a4ec">pci</a></td></tr>
+<tr class="separator:a9bfa9c4f529c8d9798aca8d02705fd8f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7d5db91d655ba23ffe9bda7a2cbcb9a8"><td class="memItemLeft" valign="top">}&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00281.html#a7d5db91d655ba23ffe9bda7a2cbcb9a8">downstream</a></td></tr>
+<tr class="separator:a7d5db91d655ba23ffe9bda7a2cbcb9a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac6a169b672d0e9f75756fd5665828b93"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00196.html#gab34362c7a23296c3f12c5756747abda3">hwloc_obj_bridge_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00281.html#ac6a169b672d0e9f75756fd5665828b93">downstream_type</a></td></tr>
+<tr class="separator:ac6a169b672d0e9f75756fd5665828b93"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a336c8b22893d5d734d8c9dfca4066b46"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00281.html#a336c8b22893d5d734d8c9dfca4066b46">depth</a></td></tr>
+<tr class="separator:a336c8b22893d5d734d8c9dfca4066b46"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Bridge specific Object Attributes. </p>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a id="a336c8b22893d5d734d8c9dfca4066b46"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a336c8b22893d5d734d8c9dfca4066b46">&#9670;&nbsp;</a></span>depth</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned hwloc_obj_attr_u::hwloc_bridge_attr_s::depth</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2c31e565a5f0d23d0a0a3dd3ec8f4b17"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2c31e565a5f0d23d0a0a3dd3ec8f4b17">&#9670;&nbsp;</a></span>domain</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned short hwloc_obj_attr_u::hwloc_bridge_attr_s::domain</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7d5db91d655ba23ffe9bda7a2cbcb9a8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7d5db91d655ba23ffe9bda7a2cbcb9a8">&#9670;&nbsp;</a></span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">union { ... }  hwloc_obj_attr_u::hwloc_bridge_attr_s::downstream</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac6a169b672d0e9f75756fd5665828b93"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac6a169b672d0e9f75756fd5665828b93">&#9670;&nbsp;</a></span>downstream_type</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00196.html#gab34362c7a23296c3f12c5756747abda3">hwloc_obj_bridge_type_t</a> hwloc_obj_attr_u::hwloc_bridge_attr_s::downstream_type</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a2fdc40034b915d504724b35cc776a4ec"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2fdc40034b915d504724b35cc776a4ec">&#9670;&nbsp;</a></span> <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct { ... }  hwloc_obj_attr_u::hwloc_bridge_attr_s::pci</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab5c564e7c95b747dae9eb84ec0a2c31e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab5c564e7c95b747dae9eb84ec0a2c31e">&#9670;&nbsp;</a></span>pci <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00277.html">hwloc_pcidev_attr_s</a> hwloc_obj_attr_u::hwloc_bridge_attr_s::pci</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae2d9dd73ef1d32045c584a8e66d2f83f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae2d9dd73ef1d32045c584a8e66d2f83f">&#9670;&nbsp;</a></span>secondary_bus</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_obj_attr_u::hwloc_bridge_attr_s::secondary_bus</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af3f3f7d76bf03e8d2afa721c2b8d6771"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af3f3f7d76bf03e8d2afa721c2b8d6771">&#9670;&nbsp;</a></span>subordinate_bus</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_obj_attr_u::hwloc_bridge_attr_s::subordinate_bus</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab62888c880f8bb730292722f5811958d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab62888c880f8bb730292722f5811958d">&#9670;&nbsp;</a></span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">union { ... }  hwloc_obj_attr_u::hwloc_bridge_attr_s::upstream</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a265dd2164aa2df4972e25a029da72125"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a265dd2164aa2df4972e25a029da72125">&#9670;&nbsp;</a></span>upstream_type</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00196.html#gab34362c7a23296c3f12c5756747abda3">hwloc_obj_bridge_type_t</a> hwloc_obj_attr_u::hwloc_bridge_attr_s::upstream_type</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00125_source.html">hwloc.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00297.html b/doc/doxygen-doc/html/a00297.html
new file mode 100644
index 00000000..1247d6e9
--- /dev/null
+++ b/doc/doxygen-doc/html/a00297.html
@@ -0,0 +1,86 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc_obj_attr_u::hwloc_osdev_attr_s Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="a00257.html">hwloc_obj_attr_u</a></li><li class="navelem"><a class="el" href="a00297.html">hwloc_osdev_attr_s</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">hwloc_obj_attr_u::hwloc_osdev_attr_s Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00125_source.html">hwloc.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a31e019e27e54ac6138d04be639bb96f9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00196.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00297.html#a31e019e27e54ac6138d04be639bb96f9">type</a></td></tr>
+<tr class="separator:a31e019e27e54ac6138d04be639bb96f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>OS Device specific Object Attributes. </p>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a id="a31e019e27e54ac6138d04be639bb96f9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a31e019e27e54ac6138d04be639bb96f9">&#9670;&nbsp;</a></span>type</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00196.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a> hwloc_obj_attr_u::hwloc_osdev_attr_s::type</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00125_source.html">hwloc.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00301.html b/doc/doxygen-doc/html/a00301.html
new file mode 100644
index 00000000..790893b9
--- /dev/null
+++ b/doc/doxygen-doc/html/a00301.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc_info_s Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">hwloc_info_s Struct Reference<div class="ingroups"><a class="el" href="a00197.html">Object Structure and Attributes</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00125_source.html">hwloc.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a12ce1309e4381ae38b5c15d242a47124"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00301.html#a12ce1309e4381ae38b5c15d242a47124">name</a></td></tr>
+<tr class="separator:a12ce1309e4381ae38b5c15d242a47124"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a788a0073bafe660645e7b69f31a43bbb"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00301.html#a788a0073bafe660645e7b69f31a43bbb">value</a></td></tr>
+<tr class="separator:a788a0073bafe660645e7b69f31a43bbb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Object info. </p>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00201.html">Consulting and Adding Key-Value Info Attributes</a> </dd></dl>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a id="a12ce1309e4381ae38b5c15d242a47124"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a12ce1309e4381ae38b5c15d242a47124">&#9670;&nbsp;</a></span>name</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">char* hwloc_info_s::name</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Info name. </p>
+
+</div>
+</div>
+<a id="a788a0073bafe660645e7b69f31a43bbb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a788a0073bafe660645e7b69f31a43bbb">&#9670;&nbsp;</a></span>value</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">char* hwloc_info_s::value</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Info value. </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00125_source.html">hwloc.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00305.html b/doc/doxygen-doc/html/a00305.html
new file mode 100644
index 00000000..650cb46a
--- /dev/null
+++ b/doc/doxygen-doc/html/a00305.html
@@ -0,0 +1,174 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc_topology_discovery_support Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">hwloc_topology_discovery_support Struct Reference<div class="ingroups"><a class="el" href="a00205.html">Topology Detection Configuration and Query</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00125_source.html">hwloc.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:ad7bb4ecf7a82f5a04fc632e9592ad3ab"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00305.html#ad7bb4ecf7a82f5a04fc632e9592ad3ab">pu</a></td></tr>
+<tr class="separator:ad7bb4ecf7a82f5a04fc632e9592ad3ab"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a955f96066cb9e4cd34e2a3710ad43e80"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00305.html#a955f96066cb9e4cd34e2a3710ad43e80">numa</a></td></tr>
+<tr class="separator:a955f96066cb9e4cd34e2a3710ad43e80"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af193eb858e40e12ef4923f5ed0e1f11a"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00305.html#af193eb858e40e12ef4923f5ed0e1f11a">numa_memory</a></td></tr>
+<tr class="separator:af193eb858e40e12ef4923f5ed0e1f11a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af3c97b28781a2972cf8eaaf94a6617da"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00305.html#af3c97b28781a2972cf8eaaf94a6617da">disallowed_pu</a></td></tr>
+<tr class="separator:af3c97b28781a2972cf8eaaf94a6617da"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a970e65235873bcdb9669a9805161ce03"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00305.html#a970e65235873bcdb9669a9805161ce03">disallowed_numa</a></td></tr>
+<tr class="separator:a970e65235873bcdb9669a9805161ce03"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aba80d6f9c15e2395f9ed61db9ff3b75d"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00305.html#aba80d6f9c15e2395f9ed61db9ff3b75d">cpukind_efficiency</a></td></tr>
+<tr class="separator:aba80d6f9c15e2395f9ed61db9ff3b75d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Flags describing actual discovery support for this topology. </p>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a id="aba80d6f9c15e2395f9ed61db9ff3b75d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aba80d6f9c15e2395f9ed61db9ff3b75d">&#9670;&nbsp;</a></span>cpukind_efficiency</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_discovery_support::cpukind_efficiency</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Detecting the efficiency of CPU kinds is supported, see <a class="el" href="a00226.html">Kinds of CPU cores</a>. </p>
+
+</div>
+</div>
+<a id="a970e65235873bcdb9669a9805161ce03"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a970e65235873bcdb9669a9805161ce03">&#9670;&nbsp;</a></span>disallowed_numa</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_discovery_support::disallowed_numa</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Detecting and identifying NUMA nodes that are not available to the current process is supported. </p>
+
+</div>
+</div>
+<a id="af3c97b28781a2972cf8eaaf94a6617da"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af3c97b28781a2972cf8eaaf94a6617da">&#9670;&nbsp;</a></span>disallowed_pu</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_discovery_support::disallowed_pu</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Detecting and identifying PU objects that are not available to the current process is supported. </p>
+
+</div>
+</div>
+<a id="a955f96066cb9e4cd34e2a3710ad43e80"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a955f96066cb9e4cd34e2a3710ad43e80">&#9670;&nbsp;</a></span>numa</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_discovery_support::numa</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Detecting the number of NUMA nodes is supported. </p>
+
+</div>
+</div>
+<a id="af193eb858e40e12ef4923f5ed0e1f11a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af193eb858e40e12ef4923f5ed0e1f11a">&#9670;&nbsp;</a></span>numa_memory</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_discovery_support::numa_memory</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Detecting the amount of memory in NUMA nodes is supported. </p>
+
+</div>
+</div>
+<a id="ad7bb4ecf7a82f5a04fc632e9592ad3ab"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad7bb4ecf7a82f5a04fc632e9592ad3ab">&#9670;&nbsp;</a></span>pu</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_discovery_support::pu</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Detecting the number of PU objects is supported. </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00125_source.html">hwloc.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00309.html b/doc/doxygen-doc/html/a00309.html
new file mode 100644
index 00000000..dbbe1fdf
--- /dev/null
+++ b/doc/doxygen-doc/html/a00309.html
@@ -0,0 +1,254 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc_topology_cpubind_support Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">hwloc_topology_cpubind_support Struct Reference<div class="ingroups"><a class="el" href="a00205.html">Topology Detection Configuration and Query</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00125_source.html">hwloc.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a9403d51657a4d546b3ea9553a2973a27"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00309.html#a9403d51657a4d546b3ea9553a2973a27">set_thisproc_cpubind</a></td></tr>
+<tr class="separator:a9403d51657a4d546b3ea9553a2973a27"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a77a09ddd78ee3e9ff5f532a6ac74f7eb"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00309.html#a77a09ddd78ee3e9ff5f532a6ac74f7eb">get_thisproc_cpubind</a></td></tr>
+<tr class="separator:a77a09ddd78ee3e9ff5f532a6ac74f7eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa166223d1c2a6de7256ab2d8b675a87e"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00309.html#aa166223d1c2a6de7256ab2d8b675a87e">set_proc_cpubind</a></td></tr>
+<tr class="separator:aa166223d1c2a6de7256ab2d8b675a87e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aae705bc447adc163ead377362c4dfe9f"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00309.html#aae705bc447adc163ead377362c4dfe9f">get_proc_cpubind</a></td></tr>
+<tr class="separator:aae705bc447adc163ead377362c4dfe9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a57a89a4b5f1f74fa6cfe176f1e8b0798"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00309.html#a57a89a4b5f1f74fa6cfe176f1e8b0798">set_thisthread_cpubind</a></td></tr>
+<tr class="separator:a57a89a4b5f1f74fa6cfe176f1e8b0798"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a80d762e532d677dff262d83cc7bb1c60"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00309.html#a80d762e532d677dff262d83cc7bb1c60">get_thisthread_cpubind</a></td></tr>
+<tr class="separator:a80d762e532d677dff262d83cc7bb1c60"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a46fba33e307909ce256624687799dd6d"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00309.html#a46fba33e307909ce256624687799dd6d">set_thread_cpubind</a></td></tr>
+<tr class="separator:a46fba33e307909ce256624687799dd6d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8dd4d8531ed2eebdce1507e7d104154e"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00309.html#a8dd4d8531ed2eebdce1507e7d104154e">get_thread_cpubind</a></td></tr>
+<tr class="separator:a8dd4d8531ed2eebdce1507e7d104154e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad2d5c94b738d92b7d2ede87e4e96321d"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00309.html#ad2d5c94b738d92b7d2ede87e4e96321d">get_thisproc_last_cpu_location</a></td></tr>
+<tr class="separator:ad2d5c94b738d92b7d2ede87e4e96321d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2554620148b7992a5093f338f5ae254f"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00309.html#a2554620148b7992a5093f338f5ae254f">get_proc_last_cpu_location</a></td></tr>
+<tr class="separator:a2554620148b7992a5093f338f5ae254f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6be1f042fdce6bf41b4ea39f6f193808"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00309.html#a6be1f042fdce6bf41b4ea39f6f193808">get_thisthread_last_cpu_location</a></td></tr>
+<tr class="separator:a6be1f042fdce6bf41b4ea39f6f193808"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Flags describing actual PU binding support for this topology. </p>
+<p>A flag may be set even if the feature isn't supported in all cases (e.g. binding to random sets of non-contiguous objects). </p>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a id="aae705bc447adc163ead377362c4dfe9f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aae705bc447adc163ead377362c4dfe9f">&#9670;&nbsp;</a></span>get_proc_cpubind</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_cpubind_support::get_proc_cpubind</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Getting the binding of a whole given process is supported. </p>
+
+</div>
+</div>
+<a id="a2554620148b7992a5093f338f5ae254f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2554620148b7992a5093f338f5ae254f">&#9670;&nbsp;</a></span>get_proc_last_cpu_location</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_cpubind_support::get_proc_last_cpu_location</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Getting the last processors where a whole process ran is supported </p>
+
+</div>
+</div>
+<a id="a77a09ddd78ee3e9ff5f532a6ac74f7eb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a77a09ddd78ee3e9ff5f532a6ac74f7eb">&#9670;&nbsp;</a></span>get_thisproc_cpubind</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_cpubind_support::get_thisproc_cpubind</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Getting the binding of the whole current process is supported. </p>
+
+</div>
+</div>
+<a id="ad2d5c94b738d92b7d2ede87e4e96321d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad2d5c94b738d92b7d2ede87e4e96321d">&#9670;&nbsp;</a></span>get_thisproc_last_cpu_location</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_cpubind_support::get_thisproc_last_cpu_location</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Getting the last processors where the whole current process ran is supported </p>
+
+</div>
+</div>
+<a id="a80d762e532d677dff262d83cc7bb1c60"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a80d762e532d677dff262d83cc7bb1c60">&#9670;&nbsp;</a></span>get_thisthread_cpubind</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_cpubind_support::get_thisthread_cpubind</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Getting the binding of the current thread only is supported. </p>
+
+</div>
+</div>
+<a id="a6be1f042fdce6bf41b4ea39f6f193808"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6be1f042fdce6bf41b4ea39f6f193808">&#9670;&nbsp;</a></span>get_thisthread_last_cpu_location</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_cpubind_support::get_thisthread_last_cpu_location</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Getting the last processors where the current thread ran is supported </p>
+
+</div>
+</div>
+<a id="a8dd4d8531ed2eebdce1507e7d104154e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8dd4d8531ed2eebdce1507e7d104154e">&#9670;&nbsp;</a></span>get_thread_cpubind</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_cpubind_support::get_thread_cpubind</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Getting the binding of a given thread only is supported. </p>
+
+</div>
+</div>
+<a id="aa166223d1c2a6de7256ab2d8b675a87e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa166223d1c2a6de7256ab2d8b675a87e">&#9670;&nbsp;</a></span>set_proc_cpubind</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_cpubind_support::set_proc_cpubind</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Binding a whole given process is supported. </p>
+
+</div>
+</div>
+<a id="a9403d51657a4d546b3ea9553a2973a27"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9403d51657a4d546b3ea9553a2973a27">&#9670;&nbsp;</a></span>set_thisproc_cpubind</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_cpubind_support::set_thisproc_cpubind</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Binding the whole current process is supported. </p>
+
+</div>
+</div>
+<a id="a57a89a4b5f1f74fa6cfe176f1e8b0798"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a57a89a4b5f1f74fa6cfe176f1e8b0798">&#9670;&nbsp;</a></span>set_thisthread_cpubind</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_cpubind_support::set_thisthread_cpubind</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Binding the current thread only is supported. </p>
+
+</div>
+</div>
+<a id="a46fba33e307909ce256624687799dd6d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a46fba33e307909ce256624687799dd6d">&#9670;&nbsp;</a></span>set_thread_cpubind</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_cpubind_support::set_thread_cpubind</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Binding a given thread only is supported. </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00125_source.html">hwloc.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00313.html b/doc/doxygen-doc/html/a00313.html
new file mode 100644
index 00000000..41742547
--- /dev/null
+++ b/doc/doxygen-doc/html/a00313.html
@@ -0,0 +1,322 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc_topology_membind_support Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">hwloc_topology_membind_support Struct Reference<div class="ingroups"><a class="el" href="a00205.html">Topology Detection Configuration and Query</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00125_source.html">hwloc.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a36b3e388df9c6a249427cab7e3724749"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00313.html#a36b3e388df9c6a249427cab7e3724749">set_thisproc_membind</a></td></tr>
+<tr class="separator:a36b3e388df9c6a249427cab7e3724749"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3fd51e6fa5f0dd800322301b46b08559"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00313.html#a3fd51e6fa5f0dd800322301b46b08559">get_thisproc_membind</a></td></tr>
+<tr class="separator:a3fd51e6fa5f0dd800322301b46b08559"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a756f44912894b176bf979a1b65f12aac"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00313.html#a756f44912894b176bf979a1b65f12aac">set_proc_membind</a></td></tr>
+<tr class="separator:a756f44912894b176bf979a1b65f12aac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9880cd2d605e316fc020167c49ca69ad"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00313.html#a9880cd2d605e316fc020167c49ca69ad">get_proc_membind</a></td></tr>
+<tr class="separator:a9880cd2d605e316fc020167c49ca69ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0697af2e41f2e82b8ce71e3cc13f7eac"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00313.html#a0697af2e41f2e82b8ce71e3cc13f7eac">set_thisthread_membind</a></td></tr>
+<tr class="separator:a0697af2e41f2e82b8ce71e3cc13f7eac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a63b0b2e26157b472f5717ee93cc7c535"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00313.html#a63b0b2e26157b472f5717ee93cc7c535">get_thisthread_membind</a></td></tr>
+<tr class="separator:a63b0b2e26157b472f5717ee93cc7c535"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a476c06f96b65c08b287cf2369966123b"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00313.html#a476c06f96b65c08b287cf2369966123b">set_area_membind</a></td></tr>
+<tr class="separator:a476c06f96b65c08b287cf2369966123b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0a84e24a06f2fa487fe8c9605c6f68b3"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00313.html#a0a84e24a06f2fa487fe8c9605c6f68b3">get_area_membind</a></td></tr>
+<tr class="separator:a0a84e24a06f2fa487fe8c9605c6f68b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae551abb27d2aa9ce008583488b845b98"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00313.html#ae551abb27d2aa9ce008583488b845b98">alloc_membind</a></td></tr>
+<tr class="separator:ae551abb27d2aa9ce008583488b845b98"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a221098c339dbfab27bd2c9f5d32f123b"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00313.html#a221098c339dbfab27bd2c9f5d32f123b">firsttouch_membind</a></td></tr>
+<tr class="separator:a221098c339dbfab27bd2c9f5d32f123b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae7cdb1f1b5f0242a69f85b5a5538c764"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00313.html#ae7cdb1f1b5f0242a69f85b5a5538c764">bind_membind</a></td></tr>
+<tr class="separator:ae7cdb1f1b5f0242a69f85b5a5538c764"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3c44c6012860bbeba8a0f4c19710858d"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00313.html#a3c44c6012860bbeba8a0f4c19710858d">interleave_membind</a></td></tr>
+<tr class="separator:a3c44c6012860bbeba8a0f4c19710858d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab0921af6e0cd6975812a80b8e5c7435c"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00313.html#ab0921af6e0cd6975812a80b8e5c7435c">nexttouch_membind</a></td></tr>
+<tr class="separator:ab0921af6e0cd6975812a80b8e5c7435c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aafa7683871a6a760246f9b35209caec5"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00313.html#aafa7683871a6a760246f9b35209caec5">migrate_membind</a></td></tr>
+<tr class="separator:aafa7683871a6a760246f9b35209caec5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a30173553a68e0a4dd1672d26f8e892b1"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00313.html#a30173553a68e0a4dd1672d26f8e892b1">get_area_memlocation</a></td></tr>
+<tr class="separator:a30173553a68e0a4dd1672d26f8e892b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Flags describing actual memory binding support for this topology. </p>
+<p>A flag may be set even if the feature isn't supported in all cases (e.g. binding to random sets of non-contiguous objects). </p>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a id="ae551abb27d2aa9ce008583488b845b98"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae551abb27d2aa9ce008583488b845b98">&#9670;&nbsp;</a></span>alloc_membind</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_membind_support::alloc_membind</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Allocating a bound memory area is supported. </p>
+
+</div>
+</div>
+<a id="ae7cdb1f1b5f0242a69f85b5a5538c764"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae7cdb1f1b5f0242a69f85b5a5538c764">&#9670;&nbsp;</a></span>bind_membind</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_membind_support::bind_membind</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Bind policy is supported. </p>
+
+</div>
+</div>
+<a id="a221098c339dbfab27bd2c9f5d32f123b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a221098c339dbfab27bd2c9f5d32f123b">&#9670;&nbsp;</a></span>firsttouch_membind</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_membind_support::firsttouch_membind</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>First-touch policy is supported. </p>
+
+</div>
+</div>
+<a id="a0a84e24a06f2fa487fe8c9605c6f68b3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0a84e24a06f2fa487fe8c9605c6f68b3">&#9670;&nbsp;</a></span>get_area_membind</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_membind_support::get_area_membind</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Getting the binding of a given memory area is supported. </p>
+
+</div>
+</div>
+<a id="a30173553a68e0a4dd1672d26f8e892b1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a30173553a68e0a4dd1672d26f8e892b1">&#9670;&nbsp;</a></span>get_area_memlocation</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_membind_support::get_area_memlocation</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Getting the last NUMA nodes where a memory area was allocated is supported </p>
+
+</div>
+</div>
+<a id="a9880cd2d605e316fc020167c49ca69ad"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9880cd2d605e316fc020167c49ca69ad">&#9670;&nbsp;</a></span>get_proc_membind</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_membind_support::get_proc_membind</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Getting the binding of a whole given process is supported. </p>
+
+</div>
+</div>
+<a id="a3fd51e6fa5f0dd800322301b46b08559"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3fd51e6fa5f0dd800322301b46b08559">&#9670;&nbsp;</a></span>get_thisproc_membind</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_membind_support::get_thisproc_membind</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Getting the binding of the whole current process is supported. </p>
+
+</div>
+</div>
+<a id="a63b0b2e26157b472f5717ee93cc7c535"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a63b0b2e26157b472f5717ee93cc7c535">&#9670;&nbsp;</a></span>get_thisthread_membind</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_membind_support::get_thisthread_membind</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Getting the binding of the current thread only is supported. </p>
+
+</div>
+</div>
+<a id="a3c44c6012860bbeba8a0f4c19710858d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3c44c6012860bbeba8a0f4c19710858d">&#9670;&nbsp;</a></span>interleave_membind</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_membind_support::interleave_membind</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Interleave policy is supported. </p>
+
+</div>
+</div>
+<a id="aafa7683871a6a760246f9b35209caec5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aafa7683871a6a760246f9b35209caec5">&#9670;&nbsp;</a></span>migrate_membind</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_membind_support::migrate_membind</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Migration flags is supported. </p>
+
+</div>
+</div>
+<a id="ab0921af6e0cd6975812a80b8e5c7435c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab0921af6e0cd6975812a80b8e5c7435c">&#9670;&nbsp;</a></span>nexttouch_membind</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_membind_support::nexttouch_membind</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Next-touch migration policy is supported. </p>
+
+</div>
+</div>
+<a id="a476c06f96b65c08b287cf2369966123b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a476c06f96b65c08b287cf2369966123b">&#9670;&nbsp;</a></span>set_area_membind</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_membind_support::set_area_membind</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Binding a given memory area is supported. </p>
+
+</div>
+</div>
+<a id="a756f44912894b176bf979a1b65f12aac"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a756f44912894b176bf979a1b65f12aac">&#9670;&nbsp;</a></span>set_proc_membind</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_membind_support::set_proc_membind</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Binding a whole given process is supported. </p>
+
+</div>
+</div>
+<a id="a36b3e388df9c6a249427cab7e3724749"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a36b3e388df9c6a249427cab7e3724749">&#9670;&nbsp;</a></span>set_thisproc_membind</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_membind_support::set_thisproc_membind</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Binding the whole current process is supported. </p>
+
+</div>
+</div>
+<a id="a0697af2e41f2e82b8ce71e3cc13f7eac"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0697af2e41f2e82b8ce71e3cc13f7eac">&#9670;&nbsp;</a></span>set_thisthread_membind</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_membind_support::set_thisthread_membind</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Binding the current thread only is supported. </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00125_source.html">hwloc.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00317.html b/doc/doxygen-doc/html/a00317.html
new file mode 100644
index 00000000..e9d4de8b
--- /dev/null
+++ b/doc/doxygen-doc/html/a00317.html
@@ -0,0 +1,83 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc_topology_misc_support Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">hwloc_topology_misc_support Struct Reference<div class="ingroups"><a class="el" href="a00205.html">Topology Detection Configuration and Query</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00125_source.html">hwloc.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:adf54a6dbe8e9dd5033dfe9c93df726c4"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00317.html#adf54a6dbe8e9dd5033dfe9c93df726c4">imported_support</a></td></tr>
+<tr class="separator:adf54a6dbe8e9dd5033dfe9c93df726c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Flags describing miscellaneous features. </p>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a id="adf54a6dbe8e9dd5033dfe9c93df726c4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adf54a6dbe8e9dd5033dfe9c93df726c4">&#9670;&nbsp;</a></span>imported_support</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned char hwloc_topology_misc_support::imported_support</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+<p>Support was imported when importing another topology, see <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdead93e82b8668ee90e4f9354e201a2ed9c" title="Import support from the imported topology.">HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT</a>. </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00125_source.html">hwloc.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00321.html b/doc/doxygen-doc/html/a00321.html
new file mode 100644
index 00000000..a7d86f39
--- /dev/null
+++ b/doc/doxygen-doc/html/a00321.html
@@ -0,0 +1,131 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc_topology_support Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">hwloc_topology_support Struct Reference<div class="ingroups"><a class="el" href="a00205.html">Topology Detection Configuration and Query</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00125_source.html">hwloc.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:aea3fbd7653d987d81f848636c420504d"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00305.html">hwloc_topology_discovery_support</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00321.html#aea3fbd7653d987d81f848636c420504d">discovery</a></td></tr>
+<tr class="separator:aea3fbd7653d987d81f848636c420504d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adef2bb91f74c3e70a2a071393caf5f56"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00309.html">hwloc_topology_cpubind_support</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00321.html#adef2bb91f74c3e70a2a071393caf5f56">cpubind</a></td></tr>
+<tr class="separator:adef2bb91f74c3e70a2a071393caf5f56"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac6eb62ae8bc0a68dce679a7107a36194"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00313.html">hwloc_topology_membind_support</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00321.html#ac6eb62ae8bc0a68dce679a7107a36194">membind</a></td></tr>
+<tr class="separator:ac6eb62ae8bc0a68dce679a7107a36194"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab9d08df4b0b03994f21b893ece826e78"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00317.html">hwloc_topology_misc_support</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00321.html#ab9d08df4b0b03994f21b893ece826e78">misc</a></td></tr>
+<tr class="separator:ab9d08df4b0b03994f21b893ece826e78"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Set of flags describing actual support for this topology. </p>
+<p>This is retrieved with <a class="el" href="a00205.html#gab8c76173c4a8ce1a9a9366012b1388e6" title="Retrieve the topology support.">hwloc_topology_get_support()</a> and will be valid until the topology object is destroyed. Note: the values are correct only after discovery. </p>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a id="adef2bb91f74c3e70a2a071393caf5f56"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adef2bb91f74c3e70a2a071393caf5f56">&#9670;&nbsp;</a></span>cpubind</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00309.html">hwloc_topology_cpubind_support</a>* hwloc_topology_support::cpubind</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aea3fbd7653d987d81f848636c420504d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aea3fbd7653d987d81f848636c420504d">&#9670;&nbsp;</a></span>discovery</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00305.html">hwloc_topology_discovery_support</a>* hwloc_topology_support::discovery</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac6eb62ae8bc0a68dce679a7107a36194"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac6eb62ae8bc0a68dce679a7107a36194">&#9670;&nbsp;</a></span>membind</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00313.html">hwloc_topology_membind_support</a>* hwloc_topology_support::membind</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ab9d08df4b0b03994f21b893ece826e78"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab9d08df4b0b03994f21b893ece826e78">&#9670;&nbsp;</a></span>misc</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00317.html">hwloc_topology_misc_support</a>* hwloc_topology_support::misc</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00125_source.html">hwloc.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00325.html b/doc/doxygen-doc/html/a00325.html
new file mode 100644
index 00000000..737d810b
--- /dev/null
+++ b/doc/doxygen-doc/html/a00325.html
@@ -0,0 +1,142 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc_distances_s Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">hwloc_distances_s Struct Reference<div class="ingroups"><a class="el" href="a00220.html">Retrieve distances between objects</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00137_source.html">distances.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a4ca2af858cebbce7324ec49903d09474"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00325.html#a4ca2af858cebbce7324ec49903d09474">nbobjs</a></td></tr>
+<tr class="separator:a4ca2af858cebbce7324ec49903d09474"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af1e78b2d628d191fa6cae3fbfe891078"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00325.html#af1e78b2d628d191fa6cae3fbfe891078">objs</a></td></tr>
+<tr class="separator:af1e78b2d628d191fa6cae3fbfe891078"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aef9c83cf467da1b1fa4c36493febb3b5"><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00325.html#aef9c83cf467da1b1fa4c36493febb3b5">kind</a></td></tr>
+<tr class="separator:aef9c83cf467da1b1fa4c36493febb3b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae43e19b2c743de05c93d71a30beaca75"><td class="memItemLeft" align="right" valign="top">hwloc_uint64_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00325.html#ae43e19b2c743de05c93d71a30beaca75">values</a></td></tr>
+<tr class="separator:ae43e19b2c743de05c93d71a30beaca75"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Matrix of distances between a set of objects. </p>
+<p>This matrix often contains latencies between NUMA nodes (as reported in the System Locality Distance Information Table (SLIT) in the ACPI specification), which may or may not be physically accurate. It corresponds to the latency for accessing the memory of one node from a core in another node. The corresponding kind is <a class="el" href="a00220.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a90dc38248c8d5392d4dd3e88f391e984" title="These distances were obtained from the operating system or hardware.">HWLOC_DISTANCES_KIND_FROM_OS</a> | <a class="el" href="a00220.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a0148d7f9be833a04f5a55455437c227b" title="These distances were provided by the user.">HWLOC_DISTANCES_KIND_FROM_USER</a>. The name of this distances structure is "NUMALatency". Others distance structures include and "XGMIBandwidth", "XGMIHops", "XeLinkBandwidth" and "NVLinkBandwidth".</p>
+<p>The matrix may also contain bandwidths between random sets of objects, possibly provided by the user, as specified in the <code>kind</code> attribute.</p>
+<p>Pointers <code>objs</code> and <code>values</code> should not be replaced, reallocated, freed, etc. However callers are allowed to modify <code>kind</code> as well as the contents of <code>objs</code> and <code>values</code> arrays. For instance, if there is a single NUMA node per Package, <a class="el" href="a00212.html#gab5df3ad1e8565ea0c2cf06412f6f6233" title="Return an object of a different type with same locality.">hwloc_get_obj_with_same_locality()</a> may be used to convert between them and replace NUMA nodes in the <code>objs</code> array with the corresponding Packages. See also <a class="el" href="a00220.html#gabcadd041f3072999d68f2d94e38670f7" title="Apply a transformation to a distances structure.">hwloc_distances_transform()</a> for applying some transformations to the structure. </p>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a id="aef9c83cf467da1b1fa4c36493febb3b5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aef9c83cf467da1b1fa4c36493febb3b5">&#9670;&nbsp;</a></span>kind</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned long hwloc_distances_s::kind</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>OR'ed set of <a class="el" href="a00220.html#gab1bb10d3adb85b52cdc6fe5a7f74f108" title="Kinds of distance matrices.">hwloc_distances_kind_e</a>. </p>
+
+</div>
+</div>
+<a id="a4ca2af858cebbce7324ec49903d09474"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4ca2af858cebbce7324ec49903d09474">&#9670;&nbsp;</a></span>nbobjs</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned hwloc_distances_s::nbobjs</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Number of objects described by the distance matrix. </p>
+
+</div>
+</div>
+<a id="af1e78b2d628d191fa6cae3fbfe891078"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af1e78b2d628d191fa6cae3fbfe891078">&#9670;&nbsp;</a></span>objs</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>* hwloc_distances_s::objs</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Array of objects described by the distance matrix. These objects are not in any particular order, see <a class="el" href="a00221.html#gab9e770c7d56c5d6040f26bd1dc8854cd" title="Find the index of an object in a distances structure.">hwloc_distances_obj_index()</a> and <a class="el" href="a00221.html#ga3c665b23056e3269f777b21a67148c82" title="Find the values between two objects in a distance matrices.">hwloc_distances_obj_pair_values()</a> for easy ways to find objects in this array and their corresponding values. </p>
+
+</div>
+</div>
+<a id="ae43e19b2c743de05c93d71a30beaca75"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae43e19b2c743de05c93d71a30beaca75">&#9670;&nbsp;</a></span>values</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">hwloc_uint64_t* hwloc_distances_s::values</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Matrix of distances between objects, stored as a one-dimension array. </p>
+<p>Distance from i-th to j-th object is stored in slot i*nbobjs+j. The meaning of the value depends on the <code>kind</code> attribute. </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00137_source.html">distances.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00329.html b/doc/doxygen-doc/html/a00329.html
new file mode 100644
index 00000000..2a7a0439
--- /dev/null
+++ b/doc/doxygen-doc/html/a00329.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc_location Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">hwloc_location Struct Reference<div class="ingroups"><a class="el" href="a00224.html">Comparing memory node attributes for finding where to allocate on</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00140_source.html">memattrs.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">union &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00333.html">hwloc_location_u</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:aeb9c0ab74a7d3506a76d0b82600a28a7"><td class="memItemLeft" align="right" valign="top">enum <a class="el" href="a00224.html#ga33099ba58f607fc70925da3777688586">hwloc_location_type_e</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00329.html#aeb9c0ab74a7d3506a76d0b82600a28a7">type</a></td></tr>
+<tr class="separator:aeb9c0ab74a7d3506a76d0b82600a28a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a707a25a5b65177e4d081be49aa0777a2"><td class="memItemLeft" align="right" valign="top">union <a class="el" href="a00333.html">hwloc_location::hwloc_location_u</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00329.html#a707a25a5b65177e4d081be49aa0777a2">location</a></td></tr>
+<tr class="separator:a707a25a5b65177e4d081be49aa0777a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Where to measure attributes from. </p>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a id="a707a25a5b65177e4d081be49aa0777a2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a707a25a5b65177e4d081be49aa0777a2">&#9670;&nbsp;</a></span>location</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">union <a class="el" href="a00333.html">hwloc_location::hwloc_location_u</a> hwloc_location::location</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="aeb9c0ab74a7d3506a76d0b82600a28a7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aeb9c0ab74a7d3506a76d0b82600a28a7">&#9670;&nbsp;</a></span>type</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">enum <a class="el" href="a00224.html#ga33099ba58f607fc70925da3777688586">hwloc_location_type_e</a> hwloc_location::type</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Type of location. </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00140_source.html">memattrs.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00333.html b/doc/doxygen-doc/html/a00333.html
new file mode 100644
index 00000000..88702413
--- /dev/null
+++ b/doc/doxygen-doc/html/a00333.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc_location::hwloc_location_u Union Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="a00329.html">hwloc_location</a></li><li class="navelem"><a class="el" href="a00333.html">hwloc_location_u</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">hwloc_location::hwloc_location_u Union Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00140_source.html">memattrs.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a033bad8f6b891992f0c18b85a88c5561"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00333.html#a033bad8f6b891992f0c18b85a88c5561">cpuset</a></td></tr>
+<tr class="separator:a033bad8f6b891992f0c18b85a88c5561"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acf2ebf75869f0a53a884ac2ab3374122"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00333.html#acf2ebf75869f0a53a884ac2ab3374122">object</a></td></tr>
+<tr class="separator:acf2ebf75869f0a53a884ac2ab3374122"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Actual location. </p>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a id="a033bad8f6b891992f0c18b85a88c5561"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a033bad8f6b891992f0c18b85a88c5561">&#9670;&nbsp;</a></span>cpuset</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> hwloc_location::hwloc_location_u::cpuset</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Location as a cpuset, when the location type is <a class="el" href="a00224.html#gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174" title="Location is given as a cpuset, in the location cpuset union field.">HWLOC_LOCATION_TYPE_CPUSET</a>. </p>
+
+</div>
+</div>
+<a id="acf2ebf75869f0a53a884ac2ab3374122"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acf2ebf75869f0a53a884ac2ab3374122">&#9670;&nbsp;</a></span>object</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_location::hwloc_location_u::object</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Location as an object, when the location type is <a class="el" href="a00224.html#gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84" title="Location is given as an object, in the location object union field.">HWLOC_LOCATION_TYPE_OBJECT</a>. </p>
+
+</div>
+</div>
+<hr/>The documentation for this union was generated from the following file:<ul>
+<li><a class="el" href="a00140_source.html">memattrs.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00337.html b/doc/doxygen-doc/html/a00337.html
new file mode 100644
index 00000000..5ee53060
--- /dev/null
+++ b/doc/doxygen-doc/html/a00337.html
@@ -0,0 +1,196 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc_cl_device_topology_amd Union Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">hwloc_cl_device_topology_amd Union Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00158_source.html">opencl.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a7bba6ab297b6f44e43c5937b80b4cfb6"><td class="memItemLeft" >struct {</td></tr>
+<tr class="memitem:a02fc93c4d8d6f9732c7b71ebb3a8ac5c"><td class="memItemLeft" >&#160;&#160;&#160;cl_uint&#160;&#160;&#160;<a class="el" href="a00337.html#a8ec4ea89b862bb271845b48063f332b4">type</a></td></tr>
+<tr class="separator:a02fc93c4d8d6f9732c7b71ebb3a8ac5c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aeb68174a5abc630add0c26cd6cdfb8f6"><td class="memItemLeft" >&#160;&#160;&#160;cl_uint&#160;&#160;&#160;<a class="el" href="a00337.html#afbd6b814607b06fc5b2f36ad14420398">data</a> [5]</td></tr>
+<tr class="separator:aeb68174a5abc630add0c26cd6cdfb8f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7bba6ab297b6f44e43c5937b80b4cfb6"><td class="memItemLeft" valign="top">}&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00337.html#a7bba6ab297b6f44e43c5937b80b4cfb6">raw</a></td></tr>
+<tr class="separator:a7bba6ab297b6f44e43c5937b80b4cfb6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a05e9a845012cd9d1f13a39cc35ab40a1"><td class="memItemLeft" >struct {</td></tr>
+<tr class="memitem:ac42c3aa1f24394b4ff8be15679522760"><td class="memItemLeft" >&#160;&#160;&#160;cl_uint&#160;&#160;&#160;<a class="el" href="a00337.html#a8ec4ea89b862bb271845b48063f332b4">type</a></td></tr>
+<tr class="separator:ac42c3aa1f24394b4ff8be15679522760"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4cf69135f9778f990424eddfc9ec1850"><td class="memItemLeft" >&#160;&#160;&#160;cl_char&#160;&#160;&#160;<a class="el" href="a00337.html#ac8650d7eea96eef290481fee980d1d47">unused</a> [17]</td></tr>
+<tr class="separator:a4cf69135f9778f990424eddfc9ec1850"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aff0e249c4dc5c7253faaa67bd4120aa1"><td class="memItemLeft" >&#160;&#160;&#160;cl_char&#160;&#160;&#160;<a class="el" href="a00337.html#a4a23e3cc034b7ab105cab0e863dcab69">bus</a></td></tr>
+<tr class="separator:aff0e249c4dc5c7253faaa67bd4120aa1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2838ee92e3a3c08869461f368e21f423"><td class="memItemLeft" >&#160;&#160;&#160;cl_char&#160;&#160;&#160;<a class="el" href="a00337.html#a017033a953d71455b067007cabb92e9c">device</a></td></tr>
+<tr class="separator:a2838ee92e3a3c08869461f368e21f423"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab5264a700bed4a93be4ed1aadb62fd1d"><td class="memItemLeft" >&#160;&#160;&#160;cl_char&#160;&#160;&#160;<a class="el" href="a00337.html#a77a67ac73cff98d330ef7258b240bac3">function</a></td></tr>
+<tr class="separator:ab5264a700bed4a93be4ed1aadb62fd1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a05e9a845012cd9d1f13a39cc35ab40a1"><td class="memItemLeft" valign="top">}&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00337.html#a05e9a845012cd9d1f13a39cc35ab40a1">pcie</a></td></tr>
+<tr class="separator:a05e9a845012cd9d1f13a39cc35ab40a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a id="a4a23e3cc034b7ab105cab0e863dcab69"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4a23e3cc034b7ab105cab0e863dcab69">&#9670;&nbsp;</a></span>bus</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">cl_char hwloc_cl_device_topology_amd::bus</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="afbd6b814607b06fc5b2f36ad14420398"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afbd6b814607b06fc5b2f36ad14420398">&#9670;&nbsp;</a></span>data</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">cl_uint hwloc_cl_device_topology_amd::data[5]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a017033a953d71455b067007cabb92e9c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a017033a953d71455b067007cabb92e9c">&#9670;&nbsp;</a></span>device</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">cl_char hwloc_cl_device_topology_amd::device</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a77a67ac73cff98d330ef7258b240bac3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a77a67ac73cff98d330ef7258b240bac3">&#9670;&nbsp;</a></span>function</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">cl_char hwloc_cl_device_topology_amd::function</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a05e9a845012cd9d1f13a39cc35ab40a1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a05e9a845012cd9d1f13a39cc35ab40a1">&#9670;&nbsp;</a></span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct { ... }  hwloc_cl_device_topology_amd::pcie</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a7bba6ab297b6f44e43c5937b80b4cfb6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7bba6ab297b6f44e43c5937b80b4cfb6">&#9670;&nbsp;</a></span></h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct { ... }  hwloc_cl_device_topology_amd::raw</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a8ec4ea89b862bb271845b48063f332b4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8ec4ea89b862bb271845b48063f332b4">&#9670;&nbsp;</a></span>type</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">cl_uint hwloc_cl_device_topology_amd::type</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ac8650d7eea96eef290481fee980d1d47"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac8650d7eea96eef290481fee980d1d47">&#9670;&nbsp;</a></span>unused</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">cl_char hwloc_cl_device_topology_amd::unused[17]</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this union was generated from the following file:<ul>
+<li><a class="el" href="a00158_source.html">opencl.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00349.html b/doc/doxygen-doc/html/a00349.html
new file mode 100644
index 00000000..74a4f97e
--- /dev/null
+++ b/doc/doxygen-doc/html/a00349.html
@@ -0,0 +1,124 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc_topology_diff_obj_attr_u Union Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">hwloc_topology_diff_obj_attr_u Union Reference<div class="ingroups"><a class="el" href="a00240.html">Topology differences</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00182_source.html">diff.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00353.html">hwloc_topology_diff_obj_attr_generic_s</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00361.html">hwloc_topology_diff_obj_attr_string_s</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00357.html">hwloc_topology_diff_obj_attr_uint64_s</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:aeb449c0e04b14ebf8c3126756b6364f9"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00353.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00349.html#aeb449c0e04b14ebf8c3126756b6364f9">generic</a></td></tr>
+<tr class="separator:aeb449c0e04b14ebf8c3126756b6364f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4608ade88460f5f208887775e5a69a0a"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00357.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00349.html#a4608ade88460f5f208887775e5a69a0a">uint64</a></td></tr>
+<tr class="separator:a4608ade88460f5f208887775e5a69a0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a42fa15c37f1f59ef638066c4c62c3154"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00361.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00349.html#a42fa15c37f1f59ef638066c4c62c3154">string</a></td></tr>
+<tr class="separator:a42fa15c37f1f59ef638066c4c62c3154"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>One object attribute difference. </p>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a id="aeb449c0e04b14ebf8c3126756b6364f9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aeb449c0e04b14ebf8c3126756b6364f9">&#9670;&nbsp;</a></span>generic</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00353.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s</a> hwloc_topology_diff_obj_attr_u::generic</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a42fa15c37f1f59ef638066c4c62c3154"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a42fa15c37f1f59ef638066c4c62c3154">&#9670;&nbsp;</a></span>string</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00361.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a> hwloc_topology_diff_obj_attr_u::string</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a4608ade88460f5f208887775e5a69a0a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4608ade88460f5f208887775e5a69a0a">&#9670;&nbsp;</a></span>uint64</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00357.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a> hwloc_topology_diff_obj_attr_u::uint64</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this union was generated from the following file:<ul>
+<li><a class="el" href="a00182_source.html">diff.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00353.html b/doc/doxygen-doc/html/a00353.html
new file mode 100644
index 00000000..f02f12f8
--- /dev/null
+++ b/doc/doxygen-doc/html/a00353.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="a00349.html">hwloc_topology_diff_obj_attr_u</a></li><li class="navelem"><a class="el" href="a00353.html">hwloc_topology_diff_obj_attr_generic_s</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00182_source.html">diff.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a43f8133b7c30129b002c2d295e6580fc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00240.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00353.html#a43f8133b7c30129b002c2d295e6580fc">type</a></td></tr>
+<tr class="separator:a43f8133b7c30129b002c2d295e6580fc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a id="a43f8133b7c30129b002c2d295e6580fc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a43f8133b7c30129b002c2d295e6580fc">&#9670;&nbsp;</a></span>type</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00240.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a> hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s::type</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00182_source.html">diff.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00357.html b/doc/doxygen-doc/html/a00357.html
new file mode 100644
index 00000000..ddca97d7
--- /dev/null
+++ b/doc/doxygen-doc/html/a00357.html
@@ -0,0 +1,134 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="a00349.html">hwloc_topology_diff_obj_attr_u</a></li><li class="navelem"><a class="el" href="a00357.html">hwloc_topology_diff_obj_attr_uint64_s</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00182_source.html">diff.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:afe262b9aa558fe7bfecbd37a7a129197"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00240.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00357.html#afe262b9aa558fe7bfecbd37a7a129197">type</a></td></tr>
+<tr class="separator:afe262b9aa558fe7bfecbd37a7a129197"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adb772c3f1761ecadf496c80ae14afce3"><td class="memItemLeft" align="right" valign="top">hwloc_uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00357.html#adb772c3f1761ecadf496c80ae14afce3">index</a></td></tr>
+<tr class="separator:adb772c3f1761ecadf496c80ae14afce3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a44c0894dce563335d347fde6595c49c9"><td class="memItemLeft" align="right" valign="top">hwloc_uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00357.html#a44c0894dce563335d347fde6595c49c9">oldvalue</a></td></tr>
+<tr class="separator:a44c0894dce563335d347fde6595c49c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae63aa59ad65aa783b730a4f213304eb4"><td class="memItemLeft" align="right" valign="top">hwloc_uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00357.html#ae63aa59ad65aa783b730a4f213304eb4">newvalue</a></td></tr>
+<tr class="separator:ae63aa59ad65aa783b730a4f213304eb4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Integer attribute modification with an optional index. </p>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a id="adb772c3f1761ecadf496c80ae14afce3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adb772c3f1761ecadf496c80ae14afce3">&#9670;&nbsp;</a></span>index</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">hwloc_uint64_t hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s::index</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="ae63aa59ad65aa783b730a4f213304eb4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae63aa59ad65aa783b730a4f213304eb4">&#9670;&nbsp;</a></span>newvalue</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">hwloc_uint64_t hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s::newvalue</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a44c0894dce563335d347fde6595c49c9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a44c0894dce563335d347fde6595c49c9">&#9670;&nbsp;</a></span>oldvalue</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">hwloc_uint64_t hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s::oldvalue</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="afe262b9aa558fe7bfecbd37a7a129197"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afe262b9aa558fe7bfecbd37a7a129197">&#9670;&nbsp;</a></span>type</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00240.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a> hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s::type</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00182_source.html">diff.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00361.html b/doc/doxygen-doc/html/a00361.html
new file mode 100644
index 00000000..57f9de05
--- /dev/null
+++ b/doc/doxygen-doc/html/a00361.html
@@ -0,0 +1,134 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="a00349.html">hwloc_topology_diff_obj_attr_u</a></li><li class="navelem"><a class="el" href="a00361.html">hwloc_topology_diff_obj_attr_string_s</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00182_source.html">diff.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a784ab5827c1bf531b86d1f02f199d04d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00240.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00361.html#a784ab5827c1bf531b86d1f02f199d04d">type</a></td></tr>
+<tr class="separator:a784ab5827c1bf531b86d1f02f199d04d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7ef48c66ccddf34d90edb4e4314b41c6"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00361.html#a7ef48c66ccddf34d90edb4e4314b41c6">name</a></td></tr>
+<tr class="separator:a7ef48c66ccddf34d90edb4e4314b41c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a33cc281d4417129064295a6ae7b79818"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00361.html#a33cc281d4417129064295a6ae7b79818">oldvalue</a></td></tr>
+<tr class="separator:a33cc281d4417129064295a6ae7b79818"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a75f37f4add21cece50fee2701c3b77db"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00361.html#a75f37f4add21cece50fee2701c3b77db">newvalue</a></td></tr>
+<tr class="separator:a75f37f4add21cece50fee2701c3b77db"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>String attribute modification with an optional name. </p>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a id="a7ef48c66ccddf34d90edb4e4314b41c6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7ef48c66ccddf34d90edb4e4314b41c6">&#9670;&nbsp;</a></span>name</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">char* hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s::name</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a75f37f4add21cece50fee2701c3b77db"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a75f37f4add21cece50fee2701c3b77db">&#9670;&nbsp;</a></span>newvalue</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">char* hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s::newvalue</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a33cc281d4417129064295a6ae7b79818"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a33cc281d4417129064295a6ae7b79818">&#9670;&nbsp;</a></span>oldvalue</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">char* hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s::oldvalue</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a784ab5827c1bf531b86d1f02f199d04d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a784ab5827c1bf531b86d1f02f199d04d">&#9670;&nbsp;</a></span>type</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00240.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a> hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s::type</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00182_source.html">diff.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00365.html b/doc/doxygen-doc/html/a00365.html
new file mode 100644
index 00000000..1e189df2
--- /dev/null
+++ b/doc/doxygen-doc/html/a00365.html
@@ -0,0 +1,124 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc_topology_diff_u Union Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">hwloc_topology_diff_u Union Reference<div class="ingroups"><a class="el" href="a00240.html">Topology differences</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00182_source.html">diff.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00369.html">hwloc_topology_diff_generic_s</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00373.html">hwloc_topology_diff_obj_attr_s</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00377.html">hwloc_topology_diff_too_complex_s</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a0dd2cbfba0eca2fc7a2645668bcae0f8"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00369.html">hwloc_topology_diff_u::hwloc_topology_diff_generic_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00365.html#a0dd2cbfba0eca2fc7a2645668bcae0f8">generic</a></td></tr>
+<tr class="separator:a0dd2cbfba0eca2fc7a2645668bcae0f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a01dca644feea48448b36baa60cf4c07f"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00373.html">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00365.html#a01dca644feea48448b36baa60cf4c07f">obj_attr</a></td></tr>
+<tr class="separator:a01dca644feea48448b36baa60cf4c07f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af7dc1148eb656c56e9678218cafd027b"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00377.html">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00365.html#af7dc1148eb656c56e9678218cafd027b">too_complex</a></td></tr>
+<tr class="separator:af7dc1148eb656c56e9678218cafd027b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>One element of a difference list between two topologies. </p>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a id="a0dd2cbfba0eca2fc7a2645668bcae0f8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0dd2cbfba0eca2fc7a2645668bcae0f8">&#9670;&nbsp;</a></span>generic</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00369.html">hwloc_topology_diff_u::hwloc_topology_diff_generic_s</a> hwloc_topology_diff_u::generic</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a01dca644feea48448b36baa60cf4c07f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a01dca644feea48448b36baa60cf4c07f">&#9670;&nbsp;</a></span>obj_attr</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00373.html">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a> hwloc_topology_diff_u::obj_attr</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="af7dc1148eb656c56e9678218cafd027b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af7dc1148eb656c56e9678218cafd027b">&#9670;&nbsp;</a></span>too_complex</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00377.html">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a> hwloc_topology_diff_u::too_complex</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this union was generated from the following file:<ul>
+<li><a class="el" href="a00182_source.html">diff.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00369.html b/doc/doxygen-doc/html/a00369.html
new file mode 100644
index 00000000..3afb7aa5
--- /dev/null
+++ b/doc/doxygen-doc/html/a00369.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc_topology_diff_u::hwloc_topology_diff_generic_s Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="a00365.html">hwloc_topology_diff_u</a></li><li class="navelem"><a class="el" href="a00369.html">hwloc_topology_diff_generic_s</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">hwloc_topology_diff_u::hwloc_topology_diff_generic_s Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00182_source.html">diff.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a373005489fcddeba6319163e60263ae8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00240.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00369.html#a373005489fcddeba6319163e60263ae8">type</a></td></tr>
+<tr class="separator:a373005489fcddeba6319163e60263ae8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a720aa94eb73cddfd8d6bf9fcbbfc035e"><td class="memItemLeft" align="right" valign="top">union <a class="el" href="a00365.html">hwloc_topology_diff_u</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00369.html#a720aa94eb73cddfd8d6bf9fcbbfc035e">next</a></td></tr>
+<tr class="separator:a720aa94eb73cddfd8d6bf9fcbbfc035e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a id="a720aa94eb73cddfd8d6bf9fcbbfc035e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a720aa94eb73cddfd8d6bf9fcbbfc035e">&#9670;&nbsp;</a></span>next</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">union <a class="el" href="a00365.html">hwloc_topology_diff_u</a>* hwloc_topology_diff_u::hwloc_topology_diff_generic_s::next</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a373005489fcddeba6319163e60263ae8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a373005489fcddeba6319163e60263ae8">&#9670;&nbsp;</a></span>type</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00240.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a> hwloc_topology_diff_u::hwloc_topology_diff_generic_s::type</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00182_source.html">diff.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00373.html b/doc/doxygen-doc/html/a00373.html
new file mode 100644
index 00000000..1454e1c4
--- /dev/null
+++ b/doc/doxygen-doc/html/a00373.html
@@ -0,0 +1,148 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="a00365.html">hwloc_topology_diff_u</a></li><li class="navelem"><a class="el" href="a00373.html">hwloc_topology_diff_obj_attr_s</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00182_source.html">diff.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a70a118ad288bd98f18c8ce6dc52e2d10"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00240.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00373.html#a70a118ad288bd98f18c8ce6dc52e2d10">type</a></td></tr>
+<tr class="separator:a70a118ad288bd98f18c8ce6dc52e2d10"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acb9170a8eb3392656d70f7f3ef3e3eed"><td class="memItemLeft" align="right" valign="top">union <a class="el" href="a00365.html">hwloc_topology_diff_u</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00373.html#acb9170a8eb3392656d70f7f3ef3e3eed">next</a></td></tr>
+<tr class="separator:acb9170a8eb3392656d70f7f3ef3e3eed"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a82c1d4bab80b9e0bf301a9d8291893e0"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00373.html#a82c1d4bab80b9e0bf301a9d8291893e0">obj_depth</a></td></tr>
+<tr class="separator:a82c1d4bab80b9e0bf301a9d8291893e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:adb9f4d414470b6670cde8d90759a6c1c"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00373.html#adb9f4d414470b6670cde8d90759a6c1c">obj_index</a></td></tr>
+<tr class="separator:adb9f4d414470b6670cde8d90759a6c1c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a91f0645f9062e892652357cd141c8ebb"><td class="memItemLeft" align="right" valign="top">union <a class="el" href="a00349.html">hwloc_topology_diff_obj_attr_u</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00373.html#a91f0645f9062e892652357cd141c8ebb">diff</a></td></tr>
+<tr class="separator:a91f0645f9062e892652357cd141c8ebb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a id="a91f0645f9062e892652357cd141c8ebb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a91f0645f9062e892652357cd141c8ebb">&#9670;&nbsp;</a></span>diff</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">union <a class="el" href="a00349.html">hwloc_topology_diff_obj_attr_u</a> hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s::diff</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="acb9170a8eb3392656d70f7f3ef3e3eed"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acb9170a8eb3392656d70f7f3ef3e3eed">&#9670;&nbsp;</a></span>next</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">union <a class="el" href="a00365.html">hwloc_topology_diff_u</a>* hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s::next</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a82c1d4bab80b9e0bf301a9d8291893e0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a82c1d4bab80b9e0bf301a9d8291893e0">&#9670;&nbsp;</a></span>obj_depth</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s::obj_depth</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="adb9f4d414470b6670cde8d90759a6c1c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#adb9f4d414470b6670cde8d90759a6c1c">&#9670;&nbsp;</a></span>obj_index</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s::obj_index</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a70a118ad288bd98f18c8ce6dc52e2d10"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a70a118ad288bd98f18c8ce6dc52e2d10">&#9670;&nbsp;</a></span>type</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00240.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a> hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s::type</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00182_source.html">diff.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00377.html b/doc/doxygen-doc/html/a00377.html
new file mode 100644
index 00000000..be172c95
--- /dev/null
+++ b/doc/doxygen-doc/html/a00377.html
@@ -0,0 +1,132 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="a00365.html">hwloc_topology_diff_u</a></li><li class="navelem"><a class="el" href="a00377.html">hwloc_topology_diff_too_complex_s</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s Struct Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00182_source.html">diff.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a92084295a4d6faf17a95a7eea526ddbd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00240.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00377.html#a92084295a4d6faf17a95a7eea526ddbd">type</a></td></tr>
+<tr class="separator:a92084295a4d6faf17a95a7eea526ddbd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a375afbaa043b109be689a7d9a3c7d153"><td class="memItemLeft" align="right" valign="top">union <a class="el" href="a00365.html">hwloc_topology_diff_u</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00377.html#a375afbaa043b109be689a7d9a3c7d153">next</a></td></tr>
+<tr class="separator:a375afbaa043b109be689a7d9a3c7d153"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a94c6498caeaafbb79927395d918d6cb3"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00377.html#a94c6498caeaafbb79927395d918d6cb3">obj_depth</a></td></tr>
+<tr class="separator:a94c6498caeaafbb79927395d918d6cb3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6dc6b3c4adb10db74d993e37afaa0580"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00377.html#a6dc6b3c4adb10db74d993e37afaa0580">obj_index</a></td></tr>
+<tr class="separator:a6dc6b3c4adb10db74d993e37afaa0580"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Field Documentation</h2>
+<a id="a375afbaa043b109be689a7d9a3c7d153"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a375afbaa043b109be689a7d9a3c7d153">&#9670;&nbsp;</a></span>next</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">union <a class="el" href="a00365.html">hwloc_topology_diff_u</a>* hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s::next</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a94c6498caeaafbb79927395d918d6cb3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a94c6498caeaafbb79927395d918d6cb3">&#9670;&nbsp;</a></span>obj_depth</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s::obj_depth</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a6dc6b3c4adb10db74d993e37afaa0580"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6dc6b3c4adb10db74d993e37afaa0580">&#9670;&nbsp;</a></span>obj_index</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s::obj_index</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="a92084295a4d6faf17a95a7eea526ddbd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a92084295a4d6faf17a95a7eea526ddbd">&#9670;&nbsp;</a></span>type</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00240.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a> hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s::type</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00182_source.html">diff.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00381.html b/doc/doxygen-doc/html/a00381.html
new file mode 100644
index 00000000..ad259d10
--- /dev/null
+++ b/doc/doxygen-doc/html/a00381.html
@@ -0,0 +1,178 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc_disc_component Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">hwloc_disc_component Struct Reference<div class="ingroups"><a class="el" href="a00242.html">Components and Plugins: Discovery components</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00188_source.html">plugins.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a4064c3b5d9213027e87caebef380a840"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00381.html#a4064c3b5d9213027e87caebef380a840">name</a></td></tr>
+<tr class="separator:a4064c3b5d9213027e87caebef380a840"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a61ad3151efa02e3dbad5d919758f9c90"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00381.html#a61ad3151efa02e3dbad5d919758f9c90">phases</a></td></tr>
+<tr class="separator:a61ad3151efa02e3dbad5d919758f9c90"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acbb9957914dbf7b8f504215aa0c8d3fe"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00381.html#acbb9957914dbf7b8f504215aa0c8d3fe">excluded_phases</a></td></tr>
+<tr class="separator:acbb9957914dbf7b8f504215aa0c8d3fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab133956219739a1032a17131757d1961"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00389.html">hwloc_backend</a> *(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00381.html#ab133956219739a1032a17131757d1961">instantiate</a> )(struct hwloc_topology *topology, struct <a class="el" href="a00381.html">hwloc_disc_component</a> *component, unsigned <a class="el" href="a00381.html#acbb9957914dbf7b8f504215aa0c8d3fe">excluded_phases</a>, const void *data1, const void *data2, const void *data3)</td></tr>
+<tr class="separator:ab133956219739a1032a17131757d1961"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae86d283c272c5ae24073a235efbf6b59"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00381.html#ae86d283c272c5ae24073a235efbf6b59">priority</a></td></tr>
+<tr class="separator:ae86d283c272c5ae24073a235efbf6b59"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ace80cafe2b1732b047b3fc3da47e6517"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00381.html#ace80cafe2b1732b047b3fc3da47e6517">enabled_by_default</a></td></tr>
+<tr class="separator:ace80cafe2b1732b047b3fc3da47e6517"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Discovery component structure. </p>
+<p>This is the major kind of components, taking care of the discovery. They are registered by generic components, either statically-built or as plugins. </p>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a id="ace80cafe2b1732b047b3fc3da47e6517"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ace80cafe2b1732b047b3fc3da47e6517">&#9670;&nbsp;</a></span>enabled_by_default</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned hwloc_disc_component::enabled_by_default</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Enabled by default. If unset, if will be disabled unless explicitly requested. </p>
+
+</div>
+</div>
+<a id="acbb9957914dbf7b8f504215aa0c8d3fe"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acbb9957914dbf7b8f504215aa0c8d3fe">&#9670;&nbsp;</a></span>excluded_phases</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned hwloc_disc_component::excluded_phases</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Component phases to exclude, as an OR'ed set of <a class="el" href="a00243.html#ga600bba1a62022d5f516800649b1edb61" title="Discovery phase.">hwloc_disc_phase_t</a>. </p>
+<p>For a GLOBAL component, this usually includes all other phases (<code>~UL</code>).</p>
+<p>Other components only exclude types that may bring conflicting topology information. MISC components should likely not be excluded since they usually bring non-primary additional information. </p>
+
+</div>
+</div>
+<a id="ab133956219739a1032a17131757d1961"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab133956219739a1032a17131757d1961">&#9670;&nbsp;</a></span>instantiate</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">struct <a class="el" href="a00389.html">hwloc_backend</a>*(* hwloc_disc_component::instantiate) (struct hwloc_topology *topology, struct <a class="el" href="a00381.html">hwloc_disc_component</a> *component, unsigned <a class="el" href="a00381.html#acbb9957914dbf7b8f504215aa0c8d3fe">excluded_phases</a>, const void *data1, const void *data2, const void *data3)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Instantiate callback to create a backend from the component. Parameters data1, data2, data3 are NULL except for components that have special enabling routines such as <a class="el" href="a00204.html#ga879439b7ee99407ee911b3ac64e9a25e" title="Enable XML-file based topology.">hwloc_topology_set_xml()</a>. </p>
+
+</div>
+</div>
+<a id="a4064c3b5d9213027e87caebef380a840"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4064c3b5d9213027e87caebef380a840">&#9670;&nbsp;</a></span>name</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">const char* hwloc_disc_component::name</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Name. If this component is built as a plugin, this name does not have to match the plugin filename. </p>
+
+</div>
+</div>
+<a id="a61ad3151efa02e3dbad5d919758f9c90"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a61ad3151efa02e3dbad5d919758f9c90">&#9670;&nbsp;</a></span>phases</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned hwloc_disc_component::phases</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Discovery phases performed by this component. OR'ed set of <a class="el" href="a00243.html#ga600bba1a62022d5f516800649b1edb61" title="Discovery phase.">hwloc_disc_phase_t</a>. </p>
+
+</div>
+</div>
+<a id="ae86d283c272c5ae24073a235efbf6b59"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae86d283c272c5ae24073a235efbf6b59">&#9670;&nbsp;</a></span>priority</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned hwloc_disc_component::priority</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Component priority. Used to sort topology-&gt;components, higher priority first. Also used to decide between two components with the same name. </p>
+<p>Usual values are 50 for native OS (or platform) components, 45 for x86, 40 for no-OS fallback, 30 for global components (xml, synthetic), 20 for pci, 10 for other misc components (opencl etc.). </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00188_source.html">plugins.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00385.html b/doc/doxygen-doc/html/a00385.html
new file mode 100644
index 00000000..3d8cf801
--- /dev/null
+++ b/doc/doxygen-doc/html/a00385.html
@@ -0,0 +1,121 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc_disc_status Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">hwloc_disc_status Struct Reference<div class="ingroups"><a class="el" href="a00243.html">Components and Plugins: Discovery backends</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00188_source.html">plugins.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:abaf7c8c082d43e133171f0723dbf824b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00243.html#ga600bba1a62022d5f516800649b1edb61">hwloc_disc_phase_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00385.html#abaf7c8c082d43e133171f0723dbf824b">phase</a></td></tr>
+<tr class="separator:abaf7c8c082d43e133171f0723dbf824b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0f95fa42d46a6e7cf8dee8af12afee3a"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00385.html#a0f95fa42d46a6e7cf8dee8af12afee3a">excluded_phases</a></td></tr>
+<tr class="separator:a0f95fa42d46a6e7cf8dee8af12afee3a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad8b123cecb945a9182eb824ccf8ef9d7"><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00385.html#ad8b123cecb945a9182eb824ccf8ef9d7">flags</a></td></tr>
+<tr class="separator:ad8b123cecb945a9182eb824ccf8ef9d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Discovery status structure. </p>
+<p>Used by the core and backends to inform about what has been/is being done during the discovery process. </p>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a id="a0f95fa42d46a6e7cf8dee8af12afee3a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0f95fa42d46a6e7cf8dee8af12afee3a">&#9670;&nbsp;</a></span>excluded_phases</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned hwloc_disc_status::excluded_phases</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Dynamically excluded phases. If a component decides during discovery that some phases are no longer needed. </p>
+
+</div>
+</div>
+<a id="ad8b123cecb945a9182eb824ccf8ef9d7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad8b123cecb945a9182eb824ccf8ef9d7">&#9670;&nbsp;</a></span>flags</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned long hwloc_disc_status::flags</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>OR'ed set of hwloc_disc_status_flag_e. </p>
+
+</div>
+</div>
+<a id="abaf7c8c082d43e133171f0723dbf824b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abaf7c8c082d43e133171f0723dbf824b">&#9670;&nbsp;</a></span>phase</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00243.html#ga600bba1a62022d5f516800649b1edb61">hwloc_disc_phase_t</a> hwloc_disc_status::phase</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>The current discovery phase that is performed. Must match one of the phases in the component phases field. </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00188_source.html">plugins.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00389.html b/doc/doxygen-doc/html/a00389.html
new file mode 100644
index 00000000..d6db70d9
--- /dev/null
+++ b/doc/doxygen-doc/html/a00389.html
@@ -0,0 +1,195 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc_backend Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">hwloc_backend Struct Reference<div class="ingroups"><a class="el" href="a00243.html">Components and Plugins: Discovery backends</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00188_source.html">plugins.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:aeca769840a6ff03e96462a9533adbccd"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00389.html#aeca769840a6ff03e96462a9533adbccd">phases</a></td></tr>
+<tr class="separator:aeca769840a6ff03e96462a9533adbccd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaa8eafe495aadd81c2e3c4ec527c10ba"><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00389.html#aaa8eafe495aadd81c2e3c4ec527c10ba">flags</a></td></tr>
+<tr class="separator:aaa8eafe495aadd81c2e3c4ec527c10ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab8806f6db077f1bb2e9d63ec99223f7a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00389.html#ab8806f6db077f1bb2e9d63ec99223f7a">is_thissystem</a></td></tr>
+<tr class="separator:ab8806f6db077f1bb2e9d63ec99223f7a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2ea5bd36b7f06efdb65b98b32af16c68"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00389.html#a2ea5bd36b7f06efdb65b98b32af16c68">private_data</a></td></tr>
+<tr class="separator:a2ea5bd36b7f06efdb65b98b32af16c68"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a36c4fa86350525b46340c67b802c69c7"><td class="memItemLeft" align="right" valign="top">void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00389.html#a36c4fa86350525b46340c67b802c69c7">disable</a> )(struct <a class="el" href="a00389.html">hwloc_backend</a> *backend)</td></tr>
+<tr class="separator:a36c4fa86350525b46340c67b802c69c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:accff2cd8404be43c3b44cec05e6f609b"><td class="memItemLeft" align="right" valign="top">int(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00389.html#accff2cd8404be43c3b44cec05e6f609b">discover</a> )(struct <a class="el" href="a00389.html">hwloc_backend</a> *backend, struct <a class="el" href="a00385.html">hwloc_disc_status</a> *status)</td></tr>
+<tr class="separator:accff2cd8404be43c3b44cec05e6f609b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaac253491264c20930f44817270bc502"><td class="memItemLeft" align="right" valign="top">int(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00389.html#aaac253491264c20930f44817270bc502">get_pci_busid_cpuset</a> )(struct <a class="el" href="a00389.html">hwloc_backend</a> *backend, struct hwloc_pcidev_attr_s *busid, <a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> cpuset)</td></tr>
+<tr class="separator:aaac253491264c20930f44817270bc502"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Discovery backend structure. </p>
+<p>A backend is the instantiation of a discovery component. When a component gets enabled for a topology, its instantiate() callback creates a backend.</p>
+<p><a class="el" href="a00243.html#gadb068565ab6043cbe4d16bfcce067a61" title="Allocate a backend structure, set good default values, initialize backend-&gt;component and topology,...">hwloc_backend_alloc()</a> initializes all fields to default values that the component may change (except "component" and "next") before enabling the backend with <a class="el" href="a00243.html#ga4715779d7191833e9b1a7490989a7497" title="Enable a previously allocated and setup backend.">hwloc_backend_enable()</a>.</p>
+<p>Most backends assume that the topology is_thissystem flag is set because they talk to the underlying operating system. However they may still be used in topologies without the is_thissystem flag for debugging reasons. In practice, they are usually auto-disabled in such cases (excluded by xml or synthetic backends, or by environment variables when changing the Linux fsroot or the x86 cpuid path). </p>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a id="a36c4fa86350525b46340c67b802c69c7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a36c4fa86350525b46340c67b802c69c7">&#9670;&nbsp;</a></span>disable</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void(* hwloc_backend::disable) (struct <a class="el" href="a00389.html">hwloc_backend</a> *backend)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Callback for freeing the private_data. May be NULL. </p>
+
+</div>
+</div>
+<a id="accff2cd8404be43c3b44cec05e6f609b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#accff2cd8404be43c3b44cec05e6f609b">&#9670;&nbsp;</a></span>discover</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int(* hwloc_backend::discover) (struct <a class="el" href="a00389.html">hwloc_backend</a> *backend, struct <a class="el" href="a00385.html">hwloc_disc_status</a> *status)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Main discovery callback. returns -1 on error, either because it couldn't add its objects ot the existing topology, or because of an actual discovery/gathering failure. May be NULL. </p>
+
+</div>
+</div>
+<a id="aaa8eafe495aadd81c2e3c4ec527c10ba"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaa8eafe495aadd81c2e3c4ec527c10ba">&#9670;&nbsp;</a></span>flags</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned long hwloc_backend::flags</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Backend flags, currently always 0. </p>
+
+</div>
+</div>
+<a id="aaac253491264c20930f44817270bc502"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaac253491264c20930f44817270bc502">&#9670;&nbsp;</a></span>get_pci_busid_cpuset</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int(* hwloc_backend::get_pci_busid_cpuset) (struct <a class="el" href="a00389.html">hwloc_backend</a> *backend, struct hwloc_pcidev_attr_s *busid, <a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> cpuset)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Callback to retrieve the locality of a PCI object. Called by the PCI core when attaching PCI hierarchy to CPU objects. May be NULL. </p>
+
+</div>
+</div>
+<a id="ab8806f6db077f1bb2e9d63ec99223f7a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab8806f6db077f1bb2e9d63ec99223f7a">&#9670;&nbsp;</a></span>is_thissystem</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int hwloc_backend::is_thissystem</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Backend-specific 'is_thissystem' property. Set to 0 if the backend disables the thissystem flag for this topology (e.g. loading from xml or synthetic string, or using a different fsroot on Linux, or a x86 CPUID dump). Set to -1 if the backend doesn't care (default). </p>
+
+</div>
+</div>
+<a id="aeca769840a6ff03e96462a9533adbccd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aeca769840a6ff03e96462a9533adbccd">&#9670;&nbsp;</a></span>phases</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned hwloc_backend::phases</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Discovery phases performed by this component, possibly without some of them if excluded by other components. OR'ed set of <a class="el" href="a00243.html#ga600bba1a62022d5f516800649b1edb61" title="Discovery phase.">hwloc_disc_phase_t</a>. </p>
+
+</div>
+</div>
+<a id="a2ea5bd36b7f06efdb65b98b32af16c68"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2ea5bd36b7f06efdb65b98b32af16c68">&#9670;&nbsp;</a></span>private_data</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* hwloc_backend::private_data</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Backend private data, or NULL if none. </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00188_source.html">plugins.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00393.html b/doc/doxygen-doc/html/a00393.html
new file mode 100644
index 00000000..d775e4e9
--- /dev/null
+++ b/doc/doxygen-doc/html/a00393.html
@@ -0,0 +1,183 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc_component Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="summary">
+<a href="#pub-attribs">Data Fields</a>  </div>
+  <div class="headertitle">
+<div class="title">hwloc_component Struct Reference<div class="ingroups"><a class="el" href="a00244.html">Components and Plugins: Generic components</a></div></div>  </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="a00188_source.html">plugins.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a3250bd6fc9713946991d805e48091b2e"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00393.html#a3250bd6fc9713946991d805e48091b2e">abi</a></td></tr>
+<tr class="separator:a3250bd6fc9713946991d805e48091b2e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aea613546886d9b8221cadba920fe3ebc"><td class="memItemLeft" align="right" valign="top">int(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00393.html#aea613546886d9b8221cadba920fe3ebc">init</a> )(unsigned long <a class="el" href="a00393.html#ab8043c5b4cc0e81aabba586ccb194335">flags</a>)</td></tr>
+<tr class="separator:aea613546886d9b8221cadba920fe3ebc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4612015451a1c706e8ba19114cb8baae"><td class="memItemLeft" align="right" valign="top">void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00393.html#a4612015451a1c706e8ba19114cb8baae">finalize</a> )(unsigned long <a class="el" href="a00393.html#ab8043c5b4cc0e81aabba586ccb194335">flags</a>)</td></tr>
+<tr class="separator:a4612015451a1c706e8ba19114cb8baae"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a789208ada7e17492cfd3a5a88a6bb0ee"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00244.html#ga31a5a455f4e666b936f0a9e8fb9a0f47">hwloc_component_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00393.html#a789208ada7e17492cfd3a5a88a6bb0ee">type</a></td></tr>
+<tr class="separator:a789208ada7e17492cfd3a5a88a6bb0ee"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab8043c5b4cc0e81aabba586ccb194335"><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00393.html#ab8043c5b4cc0e81aabba586ccb194335">flags</a></td></tr>
+<tr class="separator:ab8043c5b4cc0e81aabba586ccb194335"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4b8cffd1d943c29fdc102b841b8598d4"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00393.html#a4b8cffd1d943c29fdc102b841b8598d4">data</a></td></tr>
+<tr class="separator:a4b8cffd1d943c29fdc102b841b8598d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p>Generic component structure. </p>
+<p>Generic components structure, either statically listed by configure in static-components.h or dynamically loaded as a plugin. </p>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a id="a3250bd6fc9713946991d805e48091b2e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3250bd6fc9713946991d805e48091b2e">&#9670;&nbsp;</a></span>abi</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned hwloc_component::abi</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Component ABI version, set to <a class="el" href="a00194.html#gaac5bc1f46f55e10ef0141a68ce70e21f" title="Current component and plugin ABI version (see hwloc/plugins.h)">HWLOC_COMPONENT_ABI</a>. </p>
+
+</div>
+</div>
+<a id="a4b8cffd1d943c29fdc102b841b8598d4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4b8cffd1d943c29fdc102b841b8598d4">&#9670;&nbsp;</a></span>data</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void* hwloc_component::data</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Component data, pointing to a struct <a class="el" href="a00381.html" title="Discovery component structure.">hwloc_disc_component</a> or struct hwloc_xml_component. </p>
+
+</div>
+</div>
+<a id="a4612015451a1c706e8ba19114cb8baae"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4612015451a1c706e8ba19114cb8baae">&#9670;&nbsp;</a></span>finalize</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void(* hwloc_component::finalize) (unsigned long <a class="el" href="a00393.html#ab8043c5b4cc0e81aabba586ccb194335">flags</a>)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Process-wide component termination callback. </p>
+<p>This optional callback is called after unregistering the component from the hwloc core (before unloading the plugin).</p>
+<p><code>flags</code> is always 0 for now.</p>
+<dl class="section note"><dt>Note</dt><dd>If the component uses ltdl for loading its own plugins, it should load/unload them only in <a class="el" href="a00393.html#aea613546886d9b8221cadba920fe3ebc" title="Process-wide component initialization callback.">init()</a> and <a class="el" href="a00393.html#a4612015451a1c706e8ba19114cb8baae" title="Process-wide component termination callback.">finalize()</a>, to avoid race conditions with hwloc's use of ltdl. </dd></dl>
+
+</div>
+</div>
+<a id="ab8043c5b4cc0e81aabba586ccb194335"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab8043c5b4cc0e81aabba586ccb194335">&#9670;&nbsp;</a></span>flags</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">unsigned long hwloc_component::flags</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Component flags, unused for now. </p>
+
+</div>
+</div>
+<a id="aea613546886d9b8221cadba920fe3ebc"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aea613546886d9b8221cadba920fe3ebc">&#9670;&nbsp;</a></span>init</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">int(* hwloc_component::init) (unsigned long <a class="el" href="a00393.html#ab8043c5b4cc0e81aabba586ccb194335">flags</a>)</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Process-wide component initialization callback. </p>
+<p>This optional callback is called when the component is registered to the hwloc core (after loading the plugin).</p>
+<p>When the component is built as a plugin, this callback should call hwloc_check_plugin_namespace() and return an negative error code on error.</p>
+<p><code>flags</code> is always 0 for now.</p>
+<dl class="section return"><dt>Returns</dt><dd>0 on success, or a negative code on error.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>If the component uses ltdl for loading its own plugins, it should load/unload them only in <a class="el" href="a00393.html#aea613546886d9b8221cadba920fe3ebc" title="Process-wide component initialization callback.">init()</a> and <a class="el" href="a00393.html#a4612015451a1c706e8ba19114cb8baae" title="Process-wide component termination callback.">finalize()</a>, to avoid race conditions with hwloc's use of ltdl. </dd></dl>
+
+</div>
+</div>
+<a id="a789208ada7e17492cfd3a5a88a6bb0ee"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a789208ada7e17492cfd3a5a88a6bb0ee">&#9670;&nbsp;</a></span>type</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="a00244.html#ga31a5a455f4e666b936f0a9e8fb9a0f47">hwloc_component_type_t</a> hwloc_component::type</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Component type. </p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="a00188_source.html">plugins.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00394.html b/doc/doxygen-doc/html/a00394.html
new file mode 100644
index 00000000..f40cb39a
--- /dev/null
+++ b/doc/doxygen-doc/html/a00394.html
@@ -0,0 +1,567 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Hardware Locality (hwloc) Introduction</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="PageDoc"><div class="header">
+  <div class="headertitle">
+<div class="title">Hardware Locality (hwloc) Introduction </div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><h1 class="sub">Portable abstraction of hierarchical architectures for high-performance computing</h1>
+<hr  />
+<p> 
+<div class="section">
+ See also <a class="el" href="a00394.html#further_reading">Further Reading</a>  
+or the Related pages tab above
+ for links to more sections about hwloc concepts.  
+</div>
+</p>
+<p> 
+<div class="section" id="hwloc_summary">
+ </p>
+<h1><a class="anchor" id="hwloc_summary"></a>
+hwloc Summary</h1>
+<p>hwloc provides command line tools and a C API to obtain the hierarchical map of key computing elements within a node, such as: NUMA memory nodes, shared caches, processor packages, dies and cores, processing units (logical processors or "threads") and even I/O devices. hwloc also gathers various attributes such as cache and memory information, and is portable across a variety of different operating systems and platforms.</p>
+<p>hwloc primarily aims at helping high-performance computing (HPC) applications, but is also applicable to any project seeking to exploit code and/or data locality on modern computing platforms.</p>
+<p>hwloc supports the following operating systems:</p>
+<ul>
+<li>
+Linux (including old kernels not having sysfs topology information, with knowledge of cpusets, ScaleMP vSMP support, etc.) on all supported hardware, including Intel Xeon Phi and NumaScale NumaConnect. </li>
+<li>
+Solaris (with support for processor sets and logical domains) </li>
+<li>
+AIX </li>
+<li>
+Darwin / OS X </li>
+<li>
+FreeBSD and its variants (such as kFreeBSD/GNU) </li>
+<li>
+NetBSD </li>
+<li>
+HP-UX </li>
+<li>
+Microsoft Windows </li>
+<li>
+IBM BlueGene/Q Compute Node Kernel (CNK) </li>
+</ul>
+<p>Since it uses standard Operating System information, hwloc's support is mostly independant from the processor type (x86, powerpc, ...) and just relies on the Operating System support. The main exception is BSD operating systems (NetBSD, FreeBSD, etc.) because they do not provide support topology information, hence hwloc uses an x86-only CPUID-based backend (which can be used for other OSes too, see the <a class="el" href="a00407.html">Components and plugins</a> section).</p>
+<p>To check whether hwloc works on a particular machine, just try to build it and run <code>lstopo</code> or <code>lstopo-no-graphics</code>. If some things do not look right (e.g. bogus or missing cache information), see <a class="el" href="index.html#bugs">Questions and Bugs</a>.</p>
+<p>hwloc only reports the number of processors on unsupported operating systems; no topology information is available.</p>
+<p>For development and debugging purposes, hwloc also offers the ability to work on "fake" topologies:</p>
+<ul>
+<li>
+Symmetrical tree of resources generated from a list of level arities, see <a class="el" href="a00404.html">Synthetic topologies</a>. </li>
+<li>
+Remote machine simulation through the gathering of topology as XML files, see <a class="el" href="a00403.html">Importing and exporting topologies from/to XML files</a>. </li>
+</ul>
+<p>hwloc can display the topology in a human-readable format, either in graphical mode (X11), or by exporting in one of several different formats, including: plain text, LaTeX tikzpicture, PDF, PNG, and FIG (see <a class="el" href="a00394.html#cli_examples">Command-line Examples</a> below). Note that some of the export formats require additional support libraries.</p>
+<p>hwloc offers a programming interface for manipulating topologies and objects. It also brings a powerful CPU bitmap API that is used to describe topology objects location on physical/logical processors. See the <a class="el" href="a00394.html#interface">Programming Interface</a> below. It may also be used to binding applications onto certain cores or memory nodes. Several utility programs are also provided to ease command-line manipulation of topology objects, binding of processes, and so on.</p>
+<p>Perl bindings are available from Bernd Kallies on <a href="http://search.cpan.org/~bka/Sys-Hwloc-0.10/">CPAN</a>.</p>
+<p>Python bindings are available from Guy Streeter: </p><ul>
+<li>
+<a href="http://people.redhat.com/streeter/">Fedora RPM and tarball</a>. </li>
+<li>
+<a href="git://git.fedorahosted.org/python-hwloc.git">git tree</a> (<a href="http://git.fedorahosted.org/git/python-hwloc.git">html</a>). </li>
+</ul>
+<p> 
+</div><div class="section" id="hwloc_installation">
+ </p>
+<h1><a class="anchor" id="hwloc_installation"></a>
+hwloc Installation</h1>
+<p>The generic installation procedure for both hwloc and netloc is described in <a class="el" href="index.html#common_installation">Installation</a>.</p>
+<p>The hwloc command-line tool "lstopo" produces human-readable topology maps, as mentioned above. It can also export maps to the "fig" file format. Support for PDF, Postscript, and PNG exporting is provided if the "Cairo" development package (usually <code>cairo-devel</code> or <code>libcairo2-dev</code>) can be found in "lstopo" when hwloc is configured and build.</p>
+<p>The hwloc core may also benefit from the following development packages: </p><ul>
+<li>
+<p class="startli">libpciaccess for full I/O device discovery (<code>libpciaccess-devel</code> or <code>libpciaccess-dev</code> package). On Linux, PCI discovery may still be performed (without vendor/device names) even if libpciaccess cannot be used. </p>
+<p class="endli"></p>
+</li>
+<li>
+AMD or NVIDIA OpenCL implementations for OpenCL device discovery.  </li>
+<li>
+the NVIDIA CUDA Toolkit for CUDA device discovery. See <a class="el" href="a00409.html#faq_cuda_build">How do I enable CUDA and select which CUDA version to use?</a>.  </li>
+<li>
+the NVIDIA Management Library (NVML) for NVML device discovery. It is included in CUDA since version 8.0. Older NVML releases were available within the NVIDIA GPU Deployment Kit from <a href="https://developer.nvidia.com/gpu-deployment-kit">https://developer.nvidia.com/gpu-deployment-kit</a> .  </li>
+<li>
+the NV-CONTROL X extension library (NVCtrl) for NVIDIA display discovery. The relevant development package is usually <code>libXNVCtrl-devel</code> or <code>libxnvctrl-dev</code>. It is also available within nvidia-settings from <a href="ftp://download.nvidia.com/XFree86/nvidia-settings/">ftp://download.nvidia.com/XFree86/nvidia-settings/</a> and <a href="https://github.com/NVIDIA/nvidia-settings/">https://github.com/NVIDIA/nvidia-settings/</a> .  </li>
+<li>
+the AMD ROCm SMI library for RSMI device discovery. The relevant development package is usually <code>rocm-smi-lib64</code> or <code>librocm-smi-dev</code>. See <a class="el" href="a00409.html#faq_rocm_build">How do I enable ROCm SMI and select which version to use?</a>.  </li>
+<li>
+the oneAPI Level Zero library. The relevant development package is usually <code>level-zero-dev</code> or <code>level-zero-devel</code>.  </li>
+<li>
+libxml2 for full XML import/export support (otherwise, the internal minimalistic parser will only be able to import XML files that were exported by the same hwloc release). See <a class="el" href="a00403.html">Importing and exporting topologies from/to XML files</a> for details. The relevant development package is usually <code>libxml2-devel</code> or <code>libxml2-dev</code>.  </li>
+<li>
+libudev on Linux for easier discovery of OS device information (otherwise hwloc will try to manually parse udev raw files). The relevant development package is usually <code>libudev-devel</code> or <code>libudev-dev</code>.  </li>
+<li>
+libtool's ltdl library for dynamic plugin loading if the native dlopen cannot be used. The relevant development package is usually <code>libtool-ltdl-devel</code> or <code>libltdl-dev</code>.  </li>
+</ul>
+<p>PCI and XML support may be statically built inside the main hwloc library, or as separate dynamically-loaded plugins (see the <a class="el" href="a00407.html">Components and plugins</a> section).</p>
+<p>Note that because of the possibility of GPL taint, the <code>pciutils</code> library <code>libpci</code> will not be used (remember that hwloc is BSD-licensed).</p>
+<p> 
+</div><div class="section" id="cli_examples">
+ </p>
+<h1><a class="anchor" id="cli_examples"></a>
+Command-line Examples</h1>
+<p>On a 4-package 2-core machine with hyper-threading, the <code>lstopo</code> tool may show the following graphical output:</p>
+<div class="image">
+<img src="dudley.png" alt=""/>
+</div>
+ <p>Here's the equivalent output in textual form:</p>
+<pre class="fragment">Machine
+  NUMANode L#0 (P#0)
+  Package L#0 + L3 L#0 (4096KB)
+    L2 L#0 (1024KB) + L1 L#0 (16KB) + Core L#0
+      PU L#0 (P#0)
+      PU L#1 (P#8)
+    L2 L#1 (1024KB) + L1 L#1 (16KB) + Core L#1
+      PU L#2 (P#4)
+      PU L#3 (P#12)
+  Package L#1 + L3 L#1 (4096KB)
+    L2 L#2 (1024KB) + L1 L#2 (16KB) + Core L#2
+      PU L#4 (P#1)
+      PU L#5 (P#9)
+    L2 L#3 (1024KB) + L1 L#3 (16KB) + Core L#3
+      PU L#6 (P#5)
+      PU L#7 (P#13)
+  Package L#2 + L3 L#2 (4096KB)
+    L2 L#4 (1024KB) + L1 L#4 (16KB) + Core L#4
+      PU L#8 (P#2)
+      PU L#9 (P#10)
+    L2 L#5 (1024KB) + L1 L#5 (16KB) + Core L#5
+      PU L#10 (P#6)
+      PU L#11 (P#14)
+  Package L#3 + L3 L#3 (4096KB)
+    L2 L#6 (1024KB) + L1 L#6 (16KB) + Core L#6
+      PU L#12 (P#3)
+      PU L#13 (P#11)
+    L2 L#7 (1024KB) + L1 L#7 (16KB) + Core L#7
+      PU L#14 (P#7)
+      PU L#15 (P#15)
+</pre><p>Note that there is also an equivalent output in XML that is meant for exporting/importing topologies but it is hardly readable to human-beings (see <a class="el" href="a00403.html">Importing and exporting topologies from/to XML files</a> for details).</p>
+<p>On a 4-package 2-core Opteron NUMA machine (with two core cores disallowed by the administrator), the <code>lstopo</code> tool may show the following graphical output (with <code>--disallowed</code> for displaying disallowed objects):</p>
+<div class="image">
+<img src="hagrid.png" alt=""/>
+</div>
+ <p>Here's the equivalent output in textual form:</p>
+<pre class="fragment">Machine (32GB total)
+  Package L#0
+    NUMANode L#0 (P#0 8190MB)
+    L2 L#0 (1024KB) + L1 L#0 (64KB) + Core L#0 + PU L#0 (P#0)
+    L2 L#1 (1024KB) + L1 L#1 (64KB) + Core L#1 + PU L#1 (P#1)
+  Package L#1
+    NUMANode L#1 (P#1 8192MB)
+    L2 L#2 (1024KB) + L1 L#2 (64KB) + Core L#2 + PU L#2 (P#2)
+    L2 L#3 (1024KB) + L1 L#3 (64KB) + Core L#3 + PU L#3 (P#3)
+  Package L#2
+    NUMANode L#2 (P#2 8192MB)
+    L2 L#4 (1024KB) + L1 L#4 (64KB) + Core L#4 + PU L#4 (P#4)
+    L2 L#5 (1024KB) + L1 L#5 (64KB) + Core L#5 + PU L#5 (P#5)
+  Package L#3
+    NUMANode L#3 (P#3 8192MB)
+    L2 L#6 (1024KB) + L1 L#6 (64KB) + Core L#6 + PU L#6 (P#6)
+    L2 L#7 (1024KB) + L1 L#7 (64KB) + Core L#7 + PU L#7 (P#7)
+</pre><p>On a 2-package quad-core Xeon (pre-Nehalem, with 2 dual-core dies into each package):</p>
+<div class="image">
+<img src="emmett.png" alt=""/>
+</div>
+ <p>Here's the same output in textual form:</p>
+<pre class="fragment">Machine (total 16GB)
+  NUMANode L#0 (P#0 16GB)
+  Package L#0
+    L2 L#0 (4096KB)
+      L1 L#0 (32KB) + Core L#0 + PU L#0 (P#0)
+      L1 L#1 (32KB) + Core L#1 + PU L#1 (P#4)
+    L2 L#1 (4096KB)
+      L1 L#2 (32KB) + Core L#2 + PU L#2 (P#2)
+      L1 L#3 (32KB) + Core L#3 + PU L#3 (P#6)
+  Package L#1
+    L2 L#2 (4096KB)
+      L1 L#4 (32KB) + Core L#4 + PU L#4 (P#1)
+      L1 L#5 (32KB) + Core L#5 + PU L#5 (P#5)
+    L2 L#3 (4096KB)
+      L1 L#6 (32KB) + Core L#6 + PU L#6 (P#3)
+      L1 L#7 (32KB) + Core L#7 + PU L#7 (P#7)
+</pre><p> 
+</div><div class="section" id="interface">
+ </p>
+<h1><a class="anchor" id="interface"></a>
+Programming Interface</h1>
+<p>The basic interface is available in <a class="el" href="a00125_source.html">hwloc.h</a>. Some higher-level functions are available in <a class="el" href="a00128_source.html">hwloc/helper.h</a> to reduce the need to manually manipulate objects and follow links between them. Documentation for all these is provided later in this document. Developers may also want to look at hwloc/inlines.h which contains the actual inline code of some <a class="el" href="a00125_source.html">hwloc.h</a> routines, and at this document, which provides good higher-level topology traversal examples.</p>
+<p>To precisely define the vocabulary used by hwloc, a <a class="el" href="a00395.html">Terms and Definitions</a> section is available and should probably be read first.</p>
+<p>Each hwloc object contains a cpuset describing the list of processing units that it contains. These bitmaps may be used for <a class="el" href="a00202.html">CPU binding</a> and <a class="el" href="a00203.html">Memory binding</a>. hwloc offers an extensive bitmap manipulation interface in <a class="el" href="a00131_source.html">hwloc/bitmap.h</a>.</p>
+<p>Moreover, hwloc also comes with additional helpers for interoperability with several commonly used environments. See the <a class="el" href="a00405.html">Interoperability With Other Software</a> section for details.</p>
+<p>The complete API documentation is available in a full set of HTML pages, man pages, and self-contained PDF files (formatted for both both US letter and A4 formats) in the source tarball in doc/doxygen-doc/.</p>
+<p><b>NOTE:</b> If you are building the documentation from a Git clone, you will need to have Doxygen and pdflatex installed &ndash; the documentation will be built during the normal "make" process. The documentation is installed during "make install" to $prefix/share/doc/hwloc/ and your systems default man page tree (under $prefix, of course).</p>
+<h2><a class="anchor" id="portability"></a>
+Portability</h2>
+<p>Operating System have varying support for CPU and memory binding, e.g. while some Operating Systems provide interfaces for all kinds of CPU and memory bindings, some others provide only interfaces for a limited number of kinds of CPU and memory binding, and some do not provide any binding interface at all. Hwloc's binding functions would then simply return the ENOSYS error (Function not implemented), meaning that the underlying Operating System does not provide any interface for them. <a class="el" href="a00202.html">CPU binding</a> and <a class="el" href="a00203.html">Memory binding</a> provide more information on which hwloc binding functions should be preferred because interfaces for them are usually available on the supported Operating Systems.</p>
+<p>Similarly, the ability of reporting topology information varies from one platform to another. As shown in <a class="el" href="a00394.html#cli_examples">Command-line Examples</a>, hwloc can obtain information on a wide variety of hardware topologies. However, some platforms and/or operating system versions will only report a subset of this information. For example, on an PPC64-based system with 8 cores (each with 2 hardware threads) running a default 2.6.18-based kernel from RHEL 5.4, hwloc is only able to glean information about NUMA nodes and processor units (PUs). No information about caches, packages, or cores is available.</p>
+<p>Here's the graphical output from lstopo on this platform when Simultaneous Multi-Threading (SMT) is enabled:</p>
+<div class="image">
+<img src="ppc64-with-smt.png" alt=""/>
+</div>
+ <p>And here's the graphical output from lstopo on this platform when SMT is disabled:</p>
+<div class="image">
+<img src="ppc64-without-smt.png" alt=""/>
+</div>
+ <p>Notice that hwloc only sees half the PUs when SMT is disabled. PU L#6, for example, seems to change location from NUMA node #0 to #1. In reality, no PUs "moved" &ndash; they were simply re-numbered when hwloc only saw half as many (see also Logical index in <a class="el" href="a00395.html#termsanddefs_indexes">Indexes and Sets</a>). Hence, PU L#6 in the SMT-disabled picture probably corresponds to PU L#12 in the SMT-enabled picture.</p>
+<p>This same "PUs have disappeared" effect can be seen on other platforms &ndash; even platforms / OSs that provide much more information than the above PPC64 system. This is an unfortunate side-effect of how operating systems report information to hwloc.</p>
+<p>Note that upgrading the Linux kernel on the same PPC64 system mentioned above to 2.6.34, hwloc is able to discover all the topology information. The following picture shows the entire topology layout when SMT is enabled:</p>
+<div class="image">
+<img src="ppc64-full-with-smt.png" alt=""/>
+</div>
+ <p>Developers using the hwloc API or XML output for portable applications should therefore be extremely careful to not make any assumptions about the structure of data that is returned. For example, per the above reported PPC topology, it is not safe to assume that PUs will always be descendants of cores.</p>
+<p>Additionally, future hardware may insert new topology elements that are not available in this version of hwloc. Long-lived applications that are meant to span multiple different hardware platforms should also be careful about making structure assumptions. For example, a new element may someday exist between a core and a PU.</p>
+<h2><a class="anchor" id="interface_example"></a>
+API Example</h2>
+<p>The following small C example (available in the source tree as ``doc/examples/hwloc-hello.c'') prints the topology of the machine and performs some thread and memory binding. More examples are available in the doc/examples/ directory of the source tree.</p>
+<div class="fragment"><div class="line"><span class="comment">/* Example hwloc API program.</span></div>
+<div class="line"><span class="comment"> *</span></div>
+<div class="line"><span class="comment"> * See other examples under doc/examples/ in the source tree</span></div>
+<div class="line"><span class="comment"> * for more details.</span></div>
+<div class="line"><span class="comment"> *</span></div>
+<div class="line"><span class="comment"> * Copyright © 2009-2016 Inria.  All rights reserved.</span></div>
+<div class="line"><span class="comment"> * Copyright © 2009-2011 Université Bordeaux</span></div>
+<div class="line"><span class="comment"> * Copyright © 2009-2010 Cisco Systems, Inc.  All rights reserved.</span></div>
+<div class="line"><span class="comment"> * See COPYING in top-level directory.</span></div>
+<div class="line"><span class="comment"> *</span></div>
+<div class="line"><span class="comment"> * hwloc-hello.c</span></div>
+<div class="line"><span class="comment"> */</span></div>
+<div class="line"> </div>
+<div class="line"><span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
+<div class="line"> </div>
+<div class="line"><span class="preprocessor">#include &lt;errno.h&gt;</span></div>
+<div class="line"><span class="preprocessor">#include &lt;stdio.h&gt;</span></div>
+<div class="line"><span class="preprocessor">#include &lt;string.h&gt;</span></div>
+<div class="line"> </div>
+<div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> print_children(<a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00253.html">hwloc_obj_t</a> obj,</div>
+<div class="line">                           <span class="keywordtype">int</span> depth)</div>
+<div class="line">{</div>
+<div class="line">    <span class="keywordtype">char</span> type[32], attr[1024];</div>
+<div class="line">    <span class="keywordtype">unsigned</span> i;</div>
+<div class="line"> </div>
+<div class="line">    <a class="code" href="a00200.html#gadb8765c260edea80c52cd06a76639ba4">hwloc_obj_type_snprintf</a>(type, <span class="keyword">sizeof</span>(type), obj, 0);</div>
+<div class="line">    printf(<span class="stringliteral">&quot;%*s%s&quot;</span>, 2*depth, <span class="stringliteral">&quot;&quot;</span>, type);</div>
+<div class="line">    <span class="keywordflow">if</span> (obj-&gt;<a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> != (<span class="keywordtype">unsigned</span>) -1)</div>
+<div class="line">      printf(<span class="stringliteral">&quot;#%u&quot;</span>, obj-&gt;<a class="code" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>);</div>
+<div class="line">    <a class="code" href="a00200.html#ga870e876931c282a1c7aee2f031912ce3">hwloc_obj_attr_snprintf</a>(attr, <span class="keyword">sizeof</span>(attr), obj, <span class="stringliteral">&quot; &quot;</span>, 0);</div>
+<div class="line">    <span class="keywordflow">if</span> (*attr)</div>
+<div class="line">      printf(<span class="stringliteral">&quot;(%s)&quot;</span>, attr);</div>
+<div class="line">    printf(<span class="stringliteral">&quot;\n&quot;</span>);</div>
+<div class="line">    <span class="keywordflow">for</span> (i = 0; i &lt; obj-&gt;<a class="code" href="a00253.html#aac3f6da35c9b57599909a44ce2b716c1">arity</a>; i++) {</div>
+<div class="line">        print_children(topology, obj-&gt;<a class="code" href="a00253.html#a04d05403da37bfe17cd63b7c7dd07b1f">children</a>[i], depth + 1);</div>
+<div class="line">    }</div>
+<div class="line">}</div>
+<div class="line"> </div>
+<div class="line"><span class="keywordtype">int</span> main(<span class="keywordtype">void</span>)</div>
+<div class="line">{</div>
+<div class="line">    <span class="keywordtype">int</span> depth;</div>
+<div class="line">    <span class="keywordtype">unsigned</span> i, n;</div>
+<div class="line">    <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> size;</div>
+<div class="line">    <span class="keywordtype">int</span> levels;</div>
+<div class="line">    <span class="keywordtype">char</span> <span class="keywordtype">string</span>[128];</div>
+<div class="line">    <span class="keywordtype">int</span> topodepth;</div>
+<div class="line">    <span class="keywordtype">void</span> *m;</div>
+<div class="line">    <a class="code" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology;</div>
+<div class="line">    <a class="code" href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> cpuset;</div>
+<div class="line">    <a class="code" href="a00253.html">hwloc_obj_t</a> obj;</div>
+<div class="line"> </div>
+<div class="line">    <span class="comment">/* Allocate and initialize topology object. */</span></div>
+<div class="line">    <a class="code" href="a00198.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa">hwloc_topology_init</a>(&amp;topology);</div>
+<div class="line"> </div>
+<div class="line">    <span class="comment">/* ... Optionally, put detection configuration here to ignore</span></div>
+<div class="line"><span class="comment">       some objects types, define a synthetic topology, etc....</span></div>
+<div class="line"><span class="comment"></span> </div>
+<div class="line"><span class="comment">       The default is to detect all the objects of the machine that</span></div>
+<div class="line"><span class="comment">       the caller is allowed to access.  See Configure Topology</span></div>
+<div class="line"><span class="comment">       Detection. */</span></div>
+<div class="line"> </div>
+<div class="line">    <span class="comment">/* Perform the topology detection. */</span></div>
+<div class="line">    <a class="code" href="a00198.html#gabdf58d87ad77f6615fccdfe0535ff826">hwloc_topology_load</a>(topology);</div>
+<div class="line"> </div>
+<div class="line">    <span class="comment">/* Optionally, get some additional topology information</span></div>
+<div class="line"><span class="comment">       in case we need the topology depth later. */</span></div>
+<div class="line">    topodepth = <a class="code" href="a00199.html#gae54d1782ca9b54bea915f5c18a9158fa">hwloc_topology_get_depth</a>(topology);</div>
+<div class="line"> </div>
+<div class="line"><span class="comment">    /*****************************************************************</span></div>
+<div class="line"><span class="comment">     * First example:</span></div>
+<div class="line"><span class="comment">     * Walk the topology with an array style, from level 0 (always</span></div>
+<div class="line"><span class="comment">     * the system level) to the lowest level (always the proc level).</span></div>
+<div class="line"><span class="comment">     *****************************************************************/</span></div>
+<div class="line">    <span class="keywordflow">for</span> (depth = 0; depth &lt; topodepth; depth++) {</div>
+<div class="line">        printf(<span class="stringliteral">&quot;*** Objects at level %d\n&quot;</span>, depth);</div>
+<div class="line">        <span class="keywordflow">for</span> (i = 0; i &lt; <a class="code" href="a00199.html#ga1d5ceafe8130fe6e8657bf0bc666ba50">hwloc_get_nbobjs_by_depth</a>(topology, depth);</div>
+<div class="line">             i++) {</div>
+<div class="line">            <a class="code" href="a00200.html#gadb8765c260edea80c52cd06a76639ba4">hwloc_obj_type_snprintf</a>(<span class="keywordtype">string</span>, <span class="keyword">sizeof</span>(<span class="keywordtype">string</span>),</div>
+<div class="line">                                    <a class="code" href="a00199.html#ga391f6b2613f0065673eaa4069b93d4e0">hwloc_get_obj_by_depth</a>(topology, depth, i), 0);</div>
+<div class="line">            printf(<span class="stringliteral">&quot;Index %u: %s\n&quot;</span>, i, <span class="keywordtype">string</span>);</div>
+<div class="line">        }</div>
+<div class="line">    }</div>
+<div class="line"> </div>
+<div class="line"><span class="comment">    /*****************************************************************</span></div>
+<div class="line"><span class="comment">     * Second example:</span></div>
+<div class="line"><span class="comment">     * Walk the topology with a tree style.</span></div>
+<div class="line"><span class="comment">     *****************************************************************/</span></div>
+<div class="line">    printf(<span class="stringliteral">&quot;*** Printing overall tree\n&quot;</span>);</div>
+<div class="line">    print_children(topology, <a class="code" href="a00199.html#ga2d4b12fc187dfc53b35f2fa21d21044d">hwloc_get_root_obj</a>(topology), 0);</div>
+<div class="line"> </div>
+<div class="line"><span class="comment">    /*****************************************************************</span></div>
+<div class="line"><span class="comment">     * Third example:</span></div>
+<div class="line"><span class="comment">     * Print the number of packages.</span></div>
+<div class="line"><span class="comment">     *****************************************************************/</span></div>
+<div class="line">    depth = <a class="code" href="a00199.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55ab16ab8c0dbffc234921d86f3dfb63129">HWLOC_OBJ_PACKAGE</a>);</div>
+<div class="line">    <span class="keywordflow">if</span> (depth == <a class="code" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a>) {</div>
+<div class="line">        printf(<span class="stringliteral">&quot;*** The number of packages is unknown\n&quot;</span>);</div>
+<div class="line">    } <span class="keywordflow">else</span> {</div>
+<div class="line">        printf(<span class="stringliteral">&quot;*** %u package(s)\n&quot;</span>,</div>
+<div class="line">               <a class="code" href="a00199.html#ga1d5ceafe8130fe6e8657bf0bc666ba50">hwloc_get_nbobjs_by_depth</a>(topology, depth));</div>
+<div class="line">    }</div>
+<div class="line"> </div>
+<div class="line"><span class="comment">    /*****************************************************************</span></div>
+<div class="line"><span class="comment">     * Fourth example:</span></div>
+<div class="line"><span class="comment">     * Compute the amount of cache that the first logical processor</span></div>
+<div class="line"><span class="comment">     * has above it.</span></div>
+<div class="line"><span class="comment">     *****************************************************************/</span></div>
+<div class="line">    levels = 0;</div>
+<div class="line">    size = 0;</div>
+<div class="line">    <span class="keywordflow">for</span> (obj = <a class="code" href="a00199.html#ga6f414dd80a2b943967a0ac92da3181a2">hwloc_get_obj_by_type</a>(topology, <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661">HWLOC_OBJ_PU</a>, 0);</div>
+<div class="line">         obj;</div>
+<div class="line">         obj = obj-&gt;<a class="code" href="a00253.html#adc494f6aed939992be1c55cca5822900">parent</a>)</div>
+<div class="line">      <span class="keywordflow">if</span> (<a class="code" href="a00210.html#ga2ed589bea28711e80b92066510a5607d">hwloc_obj_type_is_cache</a>(obj-&gt;<a class="code" href="a00253.html#acc4f0803f244867e68fe0036800be5de">type</a>)) {</div>
+<div class="line">        levels++;</div>
+<div class="line">        size += obj-&gt;<a class="code" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00257.html#a23f553f3252c9d13f2338231cd354ea9">cache</a>.<a class="code" href="a00269.html#abe5e788943ed04302976740c829674c0">size</a>;</div>
+<div class="line">      }</div>
+<div class="line">    printf(<span class="stringliteral">&quot;*** Logical processor 0 has %d caches totaling %luKB\n&quot;</span>,</div>
+<div class="line">           levels, size / 1024);</div>
+<div class="line"> </div>
+<div class="line"><span class="comment">    /*****************************************************************</span></div>
+<div class="line"><span class="comment">     * Fifth example:</span></div>
+<div class="line"><span class="comment">     * Bind to only one thread of the last core of the machine.</span></div>
+<div class="line"><span class="comment">     *</span></div>
+<div class="line"><span class="comment">     * First find out where cores are, or else smaller sets of CPUs if</span></div>
+<div class="line"><span class="comment">     * the OS doesn&#39;t have the notion of a &quot;core&quot;.</span></div>
+<div class="line"><span class="comment">     *****************************************************************/</span></div>
+<div class="line">    depth = <a class="code" href="a00199.html#ga8125328e69eba709c33ea8055c12589b">hwloc_get_type_or_below_depth</a>(topology, <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55ac793958f330bca371aa1535de8aff45f">HWLOC_OBJ_CORE</a>);</div>
+<div class="line"> </div>
+<div class="line">    <span class="comment">/* Get last core. */</span></div>
+<div class="line">    obj = <a class="code" href="a00199.html#ga391f6b2613f0065673eaa4069b93d4e0">hwloc_get_obj_by_depth</a>(topology, depth,</div>
+<div class="line">                   <a class="code" href="a00199.html#ga1d5ceafe8130fe6e8657bf0bc666ba50">hwloc_get_nbobjs_by_depth</a>(topology, depth) - 1);</div>
+<div class="line">    <span class="keywordflow">if</span> (obj) {</div>
+<div class="line">        <span class="comment">/* Get a copy of its cpuset that we may modify. */</span></div>
+<div class="line">        cpuset = <a class="code" href="a00217.html#gae679434c1a5f41d3560a8a7e2c1b0dee">hwloc_bitmap_dup</a>(obj-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>);</div>
+<div class="line"> </div>
+<div class="line">        <span class="comment">/* Get only one logical processor (in case the core is</span></div>
+<div class="line"><span class="comment">           SMT/hyper-threaded). */</span></div>
+<div class="line">        <a class="code" href="a00217.html#gaa611a77c092e679246afdf9a60d5db8b">hwloc_bitmap_singlify</a>(cpuset);</div>
+<div class="line"> </div>
+<div class="line">        <span class="comment">/* And try to bind ourself there. */</span></div>
+<div class="line">        <span class="keywordflow">if</span> (<a class="code" href="a00202.html#ga80bc07473a8edf840cae17bd7ec21d48">hwloc_set_cpubind</a>(topology, cpuset, 0)) {</div>
+<div class="line">            <span class="keywordtype">char</span> *str;</div>
+<div class="line">            <span class="keywordtype">int</span> error = errno;</div>
+<div class="line">            <a class="code" href="a00217.html#ga0fece972134fdecf2da9bc7a11dd827e">hwloc_bitmap_asprintf</a>(&amp;str, obj-&gt;<a class="code" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>);</div>
+<div class="line">            printf(<span class="stringliteral">&quot;Couldn&#39;t bind to cpuset %s: %s\n&quot;</span>, str, strerror(error));</div>
+<div class="line">            free(str);</div>
+<div class="line">        }</div>
+<div class="line"> </div>
+<div class="line">        <span class="comment">/* Free our cpuset copy */</span></div>
+<div class="line">        <a class="code" href="a00217.html#ga156130d85b3a0674d6e0e6770fe68fbe">hwloc_bitmap_free</a>(cpuset);</div>
+<div class="line">    }</div>
+<div class="line"> </div>
+<div class="line"><span class="comment">    /*****************************************************************</span></div>
+<div class="line"><span class="comment">     * Sixth example:</span></div>
+<div class="line"><span class="comment">     * Allocate some memory on the last NUMA node, bind some existing</span></div>
+<div class="line"><span class="comment">     * memory to the last NUMA node.</span></div>
+<div class="line"><span class="comment">     *****************************************************************/</span></div>
+<div class="line">    <span class="comment">/* Get last node. There&#39;s always at least one. */</span></div>
+<div class="line">    n = <a class="code" href="a00199.html#ga789a3f65aedff644be64a18526a03065">hwloc_get_nbobjs_by_type</a>(topology, <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
+<div class="line">    obj = <a class="code" href="a00199.html#ga6f414dd80a2b943967a0ac92da3181a2">hwloc_get_obj_by_type</a>(topology, <a class="code" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>, n - 1);</div>
+<div class="line"> </div>
+<div class="line">    size = 1024*1024;</div>
+<div class="line">    m = <a class="code" href="a00203.html#ga04736461780fadcf193af218c0122273">hwloc_alloc_membind</a>(topology, size, obj-&gt;<a class="code" href="a00253.html#a08f0d0e16c619a6e653526cbee4ffea3">nodeset</a>,</div>
+<div class="line">                            <a class="code" href="a00203.html#ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c">HWLOC_MEMBIND_BIND</a>, <a class="code" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256">HWLOC_MEMBIND_BYNODESET</a>);</div>
+<div class="line">    <a class="code" href="a00203.html#ga32dbd4f54e9e4a7179f2dde37ffe6ad7">hwloc_free</a>(topology, m, size);</div>
+<div class="line"> </div>
+<div class="line">    m = malloc(size);</div>
+<div class="line">    <a class="code" href="a00203.html#gaf881faefe20701229f07dd7dbd0125ed">hwloc_set_area_membind</a>(topology, m, size, obj-&gt;<a class="code" href="a00253.html#a08f0d0e16c619a6e653526cbee4ffea3">nodeset</a>,</div>
+<div class="line">                           <a class="code" href="a00203.html#ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c">HWLOC_MEMBIND_BIND</a>, <a class="code" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256">HWLOC_MEMBIND_BYNODESET</a>);</div>
+<div class="line">    free(m);</div>
+<div class="line"> </div>
+<div class="line">    <span class="comment">/* Destroy topology object. */</span></div>
+<div class="line">    <a class="code" href="a00198.html#ga9f34a640b6fd28d23699d4d084667b15">hwloc_topology_destroy</a>(topology);</div>
+<div class="line"> </div>
+<div class="line">    <span class="keywordflow">return</span> 0;</div>
+<div class="line">}</div>
+<div class="ttc" id="aa00195_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00195.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a></div><div class="ttdeci">@ HWLOC_OBJ_NUMANODE</div><div class="ttdoc">NUMA node. An object that contains memory that is directly and byte-accessible to the host processors...</div><div class="ttdef"><b>Definition:</b> hwloc.h:236</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55ab16ab8c0dbffc234921d86f3dfb63129"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55ab16ab8c0dbffc234921d86f3dfb63129">HWLOC_OBJ_PACKAGE</a></div><div class="ttdeci">@ HWLOC_OBJ_PACKAGE</div><div class="ttdoc">Physical package. The physical package that usually gets inserted into a socket on the motherboard....</div><div class="ttdef"><b>Definition:</b> hwloc.h:191</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661">HWLOC_OBJ_PU</a></div><div class="ttdeci">@ HWLOC_OBJ_PU</div><div class="ttdoc">Processing Unit, or (Logical) Processor. An execution unit (may share a core with some other logical ...</div><div class="ttdef"><b>Definition:</b> hwloc.h:201</div></div>
+<div class="ttc" id="aa00196_html_ggacd37bb612667dc437d66bfb175a8dc55ac793958f330bca371aa1535de8aff45f"><div class="ttname"><a href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55ac793958f330bca371aa1535de8aff45f">HWLOC_OBJ_CORE</a></div><div class="ttdeci">@ HWLOC_OBJ_CORE</div><div class="ttdoc">Core. A computation unit (may be shared by several PUs, aka logical processors).</div><div class="ttdef"><b>Definition:</b> hwloc.h:197</div></div>
+<div class="ttc" id="aa00198_html_ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa"><div class="ttname"><a href="a00198.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa">hwloc_topology_init</a></div><div class="ttdeci">int hwloc_topology_init(hwloc_topology_t *topologyp)</div><div class="ttdoc">Allocate a topology context.</div></div>
+<div class="ttc" id="aa00198_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:692</div></div>
+<div class="ttc" id="aa00198_html_ga9f34a640b6fd28d23699d4d084667b15"><div class="ttname"><a href="a00198.html#ga9f34a640b6fd28d23699d4d084667b15">hwloc_topology_destroy</a></div><div class="ttdeci">void hwloc_topology_destroy(hwloc_topology_t topology)</div><div class="ttdoc">Terminate and free a topology context.</div></div>
+<div class="ttc" id="aa00198_html_gabdf58d87ad77f6615fccdfe0535ff826"><div class="ttname"><a href="a00198.html#gabdf58d87ad77f6615fccdfe0535ff826">hwloc_topology_load</a></div><div class="ttdeci">int hwloc_topology_load(hwloc_topology_t topology)</div><div class="ttdoc">Build the actual topology.</div></div>
+<div class="ttc" id="aa00199_html_ga1d5ceafe8130fe6e8657bf0bc666ba50"><div class="ttname"><a href="a00199.html#ga1d5ceafe8130fe6e8657bf0bc666ba50">hwloc_get_nbobjs_by_depth</a></div><div class="ttdeci">unsigned hwloc_get_nbobjs_by_depth(hwloc_topology_t topology, int depth)</div><div class="ttdoc">Returns the width of level at depth depth.</div></div>
+<div class="ttc" id="aa00199_html_ga2d4b12fc187dfc53b35f2fa21d21044d"><div class="ttname"><a href="a00199.html#ga2d4b12fc187dfc53b35f2fa21d21044d">hwloc_get_root_obj</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_root_obj(hwloc_topology_t topology)</div><div class="ttdoc">Returns the top-object of the topology-tree.</div></div>
+<div class="ttc" id="aa00199_html_ga391f6b2613f0065673eaa4069b93d4e0"><div class="ttname"><a href="a00199.html#ga391f6b2613f0065673eaa4069b93d4e0">hwloc_get_obj_by_depth</a></div><div class="ttdeci">hwloc_obj_t hwloc_get_obj_by_depth(hwloc_topology_t topology, int depth, unsigned idx)</div><div class="ttdoc">Returns the topology object at logical index idx from depth depth.</div></div>
+<div class="ttc" id="aa00199_html_ga6f414dd80a2b943967a0ac92da3181a2"><div class="ttname"><a href="a00199.html#ga6f414dd80a2b943967a0ac92da3181a2">hwloc_get_obj_by_type</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_obj_by_type(hwloc_topology_t topology, hwloc_obj_type_t type, unsigned idx)</div><div class="ttdoc">Returns the topology object at logical index idx with type type.</div></div>
+<div class="ttc" id="aa00199_html_ga789a3f65aedff644be64a18526a03065"><div class="ttname"><a href="a00199.html#ga789a3f65aedff644be64a18526a03065">hwloc_get_nbobjs_by_type</a></div><div class="ttdeci">static int hwloc_get_nbobjs_by_type(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Returns the width of level type type.</div></div>
+<div class="ttc" id="aa00199_html_ga8125328e69eba709c33ea8055c12589b"><div class="ttname"><a href="a00199.html#ga8125328e69eba709c33ea8055c12589b">hwloc_get_type_or_below_depth</a></div><div class="ttdeci">static int hwloc_get_type_or_below_depth(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Returns the depth of objects of type type or below.</div></div>
+<div class="ttc" id="aa00199_html_ga8bec782e21be313750da70cf7428b374"><div class="ttname"><a href="a00199.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a></div><div class="ttdeci">int hwloc_get_type_depth(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Returns the depth of objects of type type.</div></div>
+<div class="ttc" id="aa00199_html_gae54d1782ca9b54bea915f5c18a9158fa"><div class="ttname"><a href="a00199.html#gae54d1782ca9b54bea915f5c18a9158fa">hwloc_topology_get_depth</a></div><div class="ttdeci">int hwloc_topology_get_depth(hwloc_topology_t restrict topology)</div><div class="ttdoc">Get the depth of the hierarchical tree of objects.</div></div>
+<div class="ttc" id="aa00199_html_ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad"><div class="ttname"><a href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_UNKNOWN</div><div class="ttdoc">No object of given type exists in the topology.</div><div class="ttdef"><b>Definition:</b> hwloc.h:822</div></div>
+<div class="ttc" id="aa00200_html_ga870e876931c282a1c7aee2f031912ce3"><div class="ttname"><a href="a00200.html#ga870e876931c282a1c7aee2f031912ce3">hwloc_obj_attr_snprintf</a></div><div class="ttdeci">int hwloc_obj_attr_snprintf(char *restrict string, size_t size, hwloc_obj_t obj, const char *restrict separator, int verbose)</div><div class="ttdoc">Stringify the attributes of a given topology object into a human-readable form.</div></div>
+<div class="ttc" id="aa00200_html_gadb8765c260edea80c52cd06a76639ba4"><div class="ttname"><a href="a00200.html#gadb8765c260edea80c52cd06a76639ba4">hwloc_obj_type_snprintf</a></div><div class="ttdeci">int hwloc_obj_type_snprintf(char *restrict string, size_t size, hwloc_obj_t obj, int verbose)</div><div class="ttdoc">Stringify the type of a given topology object into a human-readable form.</div></div>
+<div class="ttc" id="aa00202_html_ga80bc07473a8edf840cae17bd7ec21d48"><div class="ttname"><a href="a00202.html#ga80bc07473a8edf840cae17bd7ec21d48">hwloc_set_cpubind</a></div><div class="ttdeci">int hwloc_set_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t set, int flags)</div><div class="ttdoc">Bind current process or thread on CPUs given in physical bitmap set.</div></div>
+<div class="ttc" id="aa00203_html_ga04736461780fadcf193af218c0122273"><div class="ttname"><a href="a00203.html#ga04736461780fadcf193af218c0122273">hwloc_alloc_membind</a></div><div class="ttdeci">void * hwloc_alloc_membind(hwloc_topology_t topology, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</div><div class="ttdoc">Allocate some memory on NUMA memory nodes specified by set.</div></div>
+<div class="ttc" id="aa00203_html_ga32dbd4f54e9e4a7179f2dde37ffe6ad7"><div class="ttname"><a href="a00203.html#ga32dbd4f54e9e4a7179f2dde37ffe6ad7">hwloc_free</a></div><div class="ttdeci">int hwloc_free(hwloc_topology_t topology, void *addr, size_t len)</div><div class="ttdoc">Free memory that was previously allocated by hwloc_alloc() or hwloc_alloc_membind().</div></div>
+<div class="ttc" id="aa00203_html_gaf881faefe20701229f07dd7dbd0125ed"><div class="ttname"><a href="a00203.html#gaf881faefe20701229f07dd7dbd0125ed">hwloc_set_area_membind</a></div><div class="ttdeci">int hwloc_set_area_membind(hwloc_topology_t topology, const void *addr, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</div><div class="ttdoc">Bind the already-allocated memory identified by (addr, len) to the NUMA node(s) specified by set.</div></div>
+<div class="ttc" id="aa00203_html_ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256"><div class="ttname"><a href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256">HWLOC_MEMBIND_BYNODESET</a></div><div class="ttdeci">@ HWLOC_MEMBIND_BYNODESET</div><div class="ttdoc">Consider the bitmap argument as a nodeset.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1509</div></div>
+<div class="ttc" id="aa00203_html_ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c"><div class="ttname"><a href="a00203.html#ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c">HWLOC_MEMBIND_BIND</a></div><div class="ttdeci">@ HWLOC_MEMBIND_BIND</div><div class="ttdoc">Allocate memory on the specified nodes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1421</div></div>
+<div class="ttc" id="aa00210_html_ga2ed589bea28711e80b92066510a5607d"><div class="ttname"><a href="a00210.html#ga2ed589bea28711e80b92066510a5607d">hwloc_obj_type_is_cache</a></div><div class="ttdeci">int hwloc_obj_type_is_cache(hwloc_obj_type_t type)</div><div class="ttdoc">Check whether an object type is a CPU Cache (Data, Unified or Instruction).</div></div>
+<div class="ttc" id="aa00217_html_ga0fece972134fdecf2da9bc7a11dd827e"><div class="ttname"><a href="a00217.html#ga0fece972134fdecf2da9bc7a11dd827e">hwloc_bitmap_asprintf</a></div><div class="ttdeci">int hwloc_bitmap_asprintf(char **strp, hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Stringify a bitmap into a newly allocated string.</div></div>
+<div class="ttc" id="aa00217_html_ga156130d85b3a0674d6e0e6770fe68fbe"><div class="ttname"><a href="a00217.html#ga156130d85b3a0674d6e0e6770fe68fbe">hwloc_bitmap_free</a></div><div class="ttdeci">void hwloc_bitmap_free(hwloc_bitmap_t bitmap)</div><div class="ttdoc">Free bitmap bitmap.</div></div>
+<div class="ttc" id="aa00217_html_gaa611a77c092e679246afdf9a60d5db8b"><div class="ttname"><a href="a00217.html#gaa611a77c092e679246afdf9a60d5db8b">hwloc_bitmap_singlify</a></div><div class="ttdeci">int hwloc_bitmap_singlify(hwloc_bitmap_t bitmap)</div><div class="ttdoc">Keep a single index among those set in bitmap bitmap.</div></div>
+<div class="ttc" id="aa00217_html_gae679434c1a5f41d3560a8a7e2c1b0dee"><div class="ttname"><a href="a00217.html#gae679434c1a5f41d3560a8a7e2c1b0dee">hwloc_bitmap_dup</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_bitmap_dup(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.</div></div>
+<div class="ttc" id="aa00253_html"><div class="ttname"><a href="a00253.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:396</div></div>
+<div class="ttc" id="aa00253_html_a04d05403da37bfe17cd63b7c7dd07b1f"><div class="ttname"><a href="a00253.html#a04d05403da37bfe17cd63b7c7dd07b1f">hwloc_obj::children</a></div><div class="ttdeci">struct hwloc_obj ** children</div><div class="ttdoc">Normal children, children[0 .. arity -1].</div><div class="ttdef"><b>Definition:</b> hwloc.h:456</div></div>
+<div class="ttc" id="aa00253_html_a08f0d0e16c619a6e653526cbee4ffea3"><div class="ttname"><a href="a00253.html#a08f0d0e16c619a6e653526cbee4ffea3">hwloc_obj::nodeset</a></div><div class="ttdeci">hwloc_nodeset_t nodeset</div><div class="ttdoc">NUMA nodes covered by this object or containing this object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:540</div></div>
+<div class="ttc" id="aa00253_html_a61a7a80a68eaccbaaa28269e678c81a9"><div class="ttname"><a href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">hwloc_obj::os_index</a></div><div class="ttdeci">unsigned os_index</div><div class="ttdoc">OS-provided physical index number. It is not guaranteed unique across the entire machine,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:401</div></div>
+<div class="ttc" id="aa00253_html_a67925e0f2c47f50408fbdb9bddd0790f"><div class="ttname"><a href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">hwloc_obj::cpuset</a></div><div class="ttdeci">hwloc_cpuset_t cpuset</div><div class="ttdoc">CPUs covered by this object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:512</div></div>
+<div class="ttc" id="aa00253_html_aac3f6da35c9b57599909a44ce2b716c1"><div class="ttname"><a href="a00253.html#aac3f6da35c9b57599909a44ce2b716c1">hwloc_obj::arity</a></div><div class="ttdeci">unsigned arity</div><div class="ttdoc">Number of normal children. Memory, Misc and I/O children are not listed here but rather in their dedi...</div><div class="ttdef"><b>Definition:</b> hwloc.h:452</div></div>
+<div class="ttc" id="aa00253_html_acc4f0803f244867e68fe0036800be5de"><div class="ttname"><a href="a00253.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj::type</a></div><div class="ttdeci">hwloc_obj_type_t type</div><div class="ttdoc">Type of object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:398</div></div>
+<div class="ttc" id="aa00253_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:415</div></div>
+<div class="ttc" id="aa00253_html_adc494f6aed939992be1c55cca5822900"><div class="ttname"><a href="a00253.html#adc494f6aed939992be1c55cca5822900">hwloc_obj::parent</a></div><div class="ttdeci">struct hwloc_obj * parent</div><div class="ttdoc">Parent, NULL if root (Machine object)</div><div class="ttdef"><b>Definition:</b> hwloc.h:446</div></div>
+<div class="ttc" id="aa00257_html_a23f553f3252c9d13f2338231cd354ea9"><div class="ttname"><a href="a00257.html#a23f553f3252c9d13f2338231cd354ea9">hwloc_obj_attr_u::cache</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_cache_attr_s cache</div></div>
+<div class="ttc" id="aa00269_html_abe5e788943ed04302976740c829674c0"><div class="ttname"><a href="a00269.html#abe5e788943ed04302976740c829674c0">hwloc_obj_attr_u::hwloc_cache_attr_s::size</a></div><div class="ttdeci">hwloc_uint64_t size</div><div class="ttdoc">Size of cache in bytes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:617</div></div>
+</div><!-- fragment --><p>hwloc provides a <code>pkg-config</code> executable to obtain relevant compiler and linker flags. For example, it can be used thusly to compile applications that utilize the hwloc library (assuming GNU Make):</p>
+<pre class="fragment">CFLAGS += $(shell pkg-config --cflags hwloc)
+LDLIBS += $(shell pkg-config --libs hwloc)
+
+hwloc-hello: hwloc-hello.c
+        $(CC) hwloc-hello.c $(CFLAGS) -o hwloc-hello $(LDLIBS)
+</pre><p>On a machine 2 processor packages &ndash; each package of which has two processing cores &ndash; the output from running <code>hwloc-hello</code> could be something like the following:</p>
+<pre class="fragment">shell$ ./hwloc-hello
+*** Objects at level 0
+Index 0: Machine
+*** Objects at level 1
+Index 0: Package#0
+Index 1: Package#1
+*** Objects at level 2
+Index 0: Core#0
+Index 1: Core#1
+Index 2: Core#3
+Index 3: Core#2
+*** Objects at level 3
+Index 0: PU#0
+Index 1: PU#1
+Index 2: PU#2
+Index 3: PU#3
+*** Printing overall tree
+Machine
+  Package#0
+    Core#0
+      PU#0
+    Core#1
+      PU#1
+  Package#1
+    Core#3
+      PU#2
+    Core#2
+      PU#3
+*** 2 package(s)
+*** Logical processor 0 has 0 caches totaling 0KB
+shell$ 
+</pre><p> 
+</div><div class="section" id="history">
+ </p>
+<h1><a class="anchor" id="history"></a>
+History / Credits</h1>
+<p>hwloc is the evolution and merger of the libtopology project and the Portable Linux Processor Affinity (PLPA) (<a href="https://www.open-mpi.org/projects/plpa/">https://www.open-mpi.org/projects/plpa/</a>) project. Because of functional and ideological overlap, these two code bases and ideas were merged and released under the name "hwloc" as an Open MPI sub-project.</p>
+<p>libtopology was initially developed by the Inria Runtime Team-Project. PLPA was initially developed by the Open MPI development team as a sub-project. Both are now deprecated in favor of hwloc, which is distributed as an Open MPI sub-project.</p>
+<p> 
+</div><div class="section" id="further_reading">
+ </p>
+<h1><a class="anchor" id="further_reading"></a>
+Further Reading</h1>
+<p>The documentation chapters include</p>
+<ul>
+<li>
+<a class="el" href="a00395.html">Terms and Definitions</a> </li>
+<li>
+<a class="el" href="a00396.html">Command-Line Tools</a> </li>
+<li>
+<a class="el" href="a00397.html">Environment Variables</a> </li>
+<li>
+<a class="el" href="a00398.html">CPU and Memory Binding Overview</a> </li>
+<li>
+<a class="el" href="a00399.html">I/O Devices</a> </li>
+<li>
+<a class="el" href="a00400.html">Miscellaneous objects</a> </li>
+<li>
+<a class="el" href="a00401.html">Object attributes</a> </li>
+<li>
+<a class="el" href="a00402.html">Topology Attributes: Distances, Memory Attributes and CPU Kinds</a> </li>
+<li>
+<a class="el" href="a00403.html">Importing and exporting topologies from/to XML files</a> </li>
+<li>
+<a class="el" href="a00404.html">Synthetic topologies</a> </li>
+<li>
+<a class="el" href="a00405.html">Interoperability With Other Software</a> </li>
+<li>
+<a class="el" href="a00406.html">Thread Safety</a> </li>
+<li>
+<a class="el" href="a00407.html">Components and plugins</a> </li>
+<li>
+<a class="el" href="a00408.html">Embedding hwloc in Other Software</a> </li>
+<li>
+<a class="el" href="a00409.html">Frequently Asked Questions (FAQ)</a> </li>
+<li>
+<a class="el" href="a00410.html">Upgrading to the hwloc 2.0 API</a> </li>
+</ul>
+<p>Make sure to have had a look at those too!</p>
+<p> 
+</div>
+ </p>
+</div></div><!-- contents -->
+</div><!-- PageDoc -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00395.html b/doc/doxygen-doc/html/a00395.html
new file mode 100644
index 00000000..50e40734
--- /dev/null
+++ b/doc/doxygen-doc/html/a00395.html
@@ -0,0 +1,166 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Terms and Definitions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="PageDoc"><div class="header">
+  <div class="headertitle">
+<div class="title">Terms and Definitions </div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p> 
+<div class="section" id="termsanddefs_objects">
+ </p>
+<h1><a class="anchor" id="termsanddefs_objects"></a>
+Objects</h1>
+<dl>
+<dt>Object </dt>
+<dd><p class="startdd">Interesting kind of part of the system, such as a Core, a L2Cache, a NUMA memory node, etc. The different types detected by hwloc are detailed in the <a class="el" href="a00196.html#gacd37bb612667dc437d66bfb175a8dc55" title="Type of topology object.">hwloc_obj_type_t</a> enumeration.</p>
+<p class="interdd">There are four kinds of Objects: Memory (NUMA nodes and Memory-side caches), I/O (Bridges, PCI and OS devices), Misc, and Normal (everything else, including Machine, Package, Die, Core, PU, CPU Caches, etc.). Normal and Memory objects have (non-NULL) CPU sets and nodesets, while I/O and Misc don't.</p>
+<p class="interdd">Objects are topologically sorted by locality (CPU and node sets) into a tree (see <a class="el" href="a00395.html#termsanddefs_tree">Hierarchy, Tree and Levels</a>). </p>
+<p class="enddd"></p>
+</dd>
+<dt>Processing Unit (PU) </dt>
+<dd><p class="startdd">The smallest processing element that can be represented by a hwloc object. It may be a single-core processor, a core of a multicore processor, or a single thread in a SMT processor (also sometimes called "Logical processor", not to be confused with "Logical index of a processor"). hwloc's PU acronym stands for Processing Unit. </p>
+<p class="enddd"></p>
+</dd>
+<dt>Package </dt>
+<dd><p class="startdd">A processor Package is the physical package that usually gets inserted into a socket on the motherboard. It is also often called a physical processor or a CPU even if these names bring confusion with respect to cores and processing units. A processor package usually contains multiple cores (and may also be composed of multiple dies). hwloc Package objects were called Sockets up to hwloc 1.10. </p>
+<p class="enddd"></p>
+</dd>
+<dt>NUMA Node </dt>
+<dd><p class="startdd">An object that contains memory that is directly and byte-accessible to the host processors. It is usually close to some cores as specified by its CPU set. Hence it is attached as a memory child of the object that groups those cores together, for instance a Package objects with 4 Core children (see <a class="el" href="a00395.html#termsanddefs_tree">Hierarchy, Tree and Levels</a>). </p>
+<p class="enddd"></p>
+</dd>
+<dt>Memory-side Cache </dt>
+<dd><p class="startdd">A cache in front of a specific memory region (e.g. a range of physical addresses). It caches all accesses to that region without caring about which core issued the request. This is the opposite of usual CPU caches where only accesses from the local cores are cached, without caring about the target memory.</p>
+<p class="enddd">In hwloc, memory-side caches are memory objects placed between their local CPU objects (parent) and the target NUMA node memory (child).  </p>
+</dd>
+</dl>
+<p> 
+</div><div class="section" id="termsanddefs_indexes">
+ </p>
+<h1><a class="anchor" id="termsanddefs_indexes"></a>
+Indexes and Sets</h1>
+<dl>
+<dt>OS or physical index </dt>
+<dd><p class="startdd">The index that the operating system (OS) uses to identify the object. This may be completely arbitrary, non-unique, non-contiguous, not representative of logical proximity, and may depend on the BIOS configuration. That is why hwloc almost never uses them, only in the default lstopo output (<code>P#x</code>) and cpuset masks. See also <a class="el" href="a00409.html#faq_indexes">Should I use logical or physical/OS indexes? and how?</a>.</p>
+<p class="enddd"></p>
+</dd>
+<dt>Logical index </dt>
+<dd><p class="startdd">Index to uniquely identify objects of the same type and depth, automatically computed by hwloc according to the topology. It expresses logical proximity in a generic way, i.e. objects which have adjacent logical indexes are adjacent in the topology. That is why hwloc almost always uses it in its API, since it expresses logical proximity. They can be shown (as <code>L#x</code>) by <code>lstopo</code> thanks to the <code>-l</code> option. This index is always linear and in the range [0, num_objs_same_type_same_level-1]. Think of it as ``cousin rank.'' The ordering is based on topology first, and then on OS CPU numbers, so it is stable across everything except firmware CPU renumbering. "Logical index" should not be confused with "Logical processor". A "Logical
+  processor" (which in hwloc we rather call "processing unit" to avoid the confusion) has both a physical index (as chosen arbitrarily by BIOS/OS) and a logical index (as computed according to logical proximity by hwloc). See also <a class="el" href="a00409.html#faq_indexes">Should I use logical or physical/OS indexes? and how?</a>.</p>
+<p class="enddd"></p>
+</dd>
+<dt>CPU set </dt>
+<dd><p class="startdd">The set of processing units (PU) logically included in an object (if it makes sense). They are always expressed using physical processor numbers (as announced by the OS). They are implemented as the <a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84" title="Set of bits represented as an opaque pointer to an internal bitmap.">hwloc_bitmap_t</a> opaque structure. hwloc CPU sets are just masks, they do <em>not</em> have any relation with an operating system actual binding notion like Linux' cpusets. I/O and Misc objects do not have CPU sets while all Normal and Memory objects have non-NULL CPU sets.</p>
+<p class="enddd"></p>
+</dd>
+<dt>Node set </dt>
+<dd><p class="startdd">The set of NUMA memory nodes logically included in an object (if it makes sense). They are always expressed using physical node numbers (as announced by the OS). They are implemented with the <a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84" title="Set of bits represented as an opaque pointer to an internal bitmap.">hwloc_bitmap_t</a> opaque structure. as bitmaps. I/O and Misc objects do not have Node sets while all Normal and Memory objects have non-NULL nodesets.</p>
+<p class="enddd"></p>
+</dd>
+<dt>Bitmap </dt>
+<dd><p class="startdd">A possibly-infinite set of bits used for describing sets of objects such as CPUs (CPU sets) or memory nodes (Node sets). They are implemented with the <a class="el" href="a00217.html#gaa3c2bf4c776d603dcebbb61b0c923d84" title="Set of bits represented as an opaque pointer to an internal bitmap.">hwloc_bitmap_t</a> opaque structure. </p>
+<p class="enddd"></p>
+</dd>
+</dl>
+<p> 
+</div><div class="section" id="termsanddefs_tree">
+ </p>
+<h1><a class="anchor" id="termsanddefs_tree"></a>
+Hierarchy, Tree and Levels</h1>
+<dl>
+<dt>Parent object </dt>
+<dd><p class="startdd">The object logically containing the current object, for example because its CPU set includes the CPU set of the current object. All objects have a non-NULL parent, except the root of the topology (Machine object). </p>
+<p class="enddd"></p>
+</dd>
+<dt>Ancestor object </dt>
+<dd><p class="startdd">The parent object, or its own parent, and so on.</p>
+<p class="enddd"></p>
+</dd>
+<dt>Children object(s) </dt>
+<dd><p class="startdd">The object (or objects) contained in the current object because their CPU set is included in the CPU set of the current object. Each object may also contain separated lists for Memory, I/O and Misc object children. </p>
+<p class="enddd"></p>
+</dd>
+<dt>Arity </dt>
+<dd><p class="startdd">The number of normal children of an object. There are also specific arities for Memory, I/O and Misc children. </p>
+<p class="enddd"></p>
+</dd>
+<dt>Sibling objects </dt>
+<dd><p class="startdd">Objects in the same children list, which all of them are normal children of the same parent, or all of them are Memory children of the same parent, or I/O children, or Misc. They usually have the same type (and hence are cousins, as well). But they may not if the topology is asymmetric. </p>
+<p class="enddd"></p>
+</dd>
+<dt>Sibling rank </dt>
+<dd><p class="startdd">Index to uniquely identify objects which have the same parent, and is always in the range [0, arity-1] (respectively memory_arity, io_arity or misc_arity for Memory, I/O and Misc children of a parent).</p>
+<p class="enddd"></p>
+</dd>
+<dt>Cousin objects </dt>
+<dd><p class="startdd">Objects of the same type (and depth) as the current object, even if they do not have the same parent.</p>
+<p class="enddd"></p>
+</dd>
+<dt>Level </dt>
+<dd><p class="startdd">Set of objects of the same type and depth. All these objects are cousins.</p>
+<p class="interdd">Memory, I/O and Misc objects also have their own specific levels and (virtual) depth. </p>
+<p class="enddd"></p>
+</dd>
+<dt>Depth </dt>
+<dd><p class="startdd">Nesting level in the object tree, starting from the root object. If the topology is symmetric, the depth of a child is equal to the parent depth plus one, and an object depth is also equal to the number of parent/child links between the root object and the given object. If the topology is asymmetric, the difference between some parent and child depths may be larger than one when some intermediate levels (for instance groups) are missing in only some parts of the machine.</p>
+<p class="interdd">The depth of the Machine object is always 0 since it is always the root of the topology. The depth of PU objects is equal to the number of levels in the topology minus one.</p>
+<p class="interdd">Memory, I/O and Misc objects also have their own specific levels and depth. </p>
+<p class="enddd"></p>
+</dd>
+</dl>
+<p>The following diagram can help to understand the vocabulary of the relationships by showing the example of a machine with two dual core packages (with no hardware threads); thus, a topology with 5 levels. Each box with rounded corner corresponds to one <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d" title="Convenience typedef; a pointer to a struct hwloc_obj.">hwloc_obj_t</a>, containing the values of the different integer fields (depth, logical_index, etc.), and arrows show to which other <a class="el" href="a00197.html#ga79b8ab56877ef99ac59b833203391c7d" title="Convenience typedef; a pointer to a struct hwloc_obj.">hwloc_obj_t</a> pointers point to (first_child, parent, etc.).</p>
+<p>The topology always starts with a Machine object as root (depth 0) and ends with PU objects at the bottom (depth 4 here).</p>
+<p>Objects of the same level (cousins) are listed in red boxes and linked with red arrows. Children of the same parent (siblings) are linked with blue arrows.</p>
+<p>The L2 cache of the last core is intentionally missing to show how asymmetric topologies are handled. See <a class="el" href="a00409.html#faq_asymmetric">What happens if my topology is asymmetric?</a> for more information about such strange topologies.</p>
+<div class="image">
+<img src="diagram.png" alt=""/>
+</div>
+ <p>It should be noted that for PU objects, the logical index &ndash; as computed linearly by hwloc &ndash; is not the same as the OS index.</p>
+<p>The NUMA node is on the side because it is not part of the main tree but rather attached to the object that corresponds to its locality (the entire machine here, hence the root object). It is attached as a <em>Memory</em> child (in green) and has a virtual depth (negative). It could also have siblings if there were multiple local NUMA nodes, or cousins if other NUMA nodes were attached somewhere else in the machine.</p>
+<p>I/O or Misc objects could be attached in a similar manner. </p>
+</div></div><!-- contents -->
+</div><!-- PageDoc -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00396.html b/doc/doxygen-doc/html/a00396.html
new file mode 100644
index 00000000..a0d201a0
--- /dev/null
+++ b/doc/doxygen-doc/html/a00396.html
@@ -0,0 +1,139 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Command-Line Tools</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="PageDoc"><div class="header">
+  <div class="headertitle">
+<div class="title">Command-Line Tools </div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p> 
+<div class="section">
+</p>
+<p>hwloc comes with an extensive C programming interface and several command line utilities. Each of them is fully documented in its own manual page; the following is a summary of the available command line tools.</p>
+<p> 
+</div><div class="section" id="cli_lstopo">
+ </p>
+<h1><a class="anchor" id="cli_lstopo"></a>
+lstopo and lstopo-no-graphics</h1>
+<p>lstopo (also known as hwloc-ls) displays the hierarchical topology map of the current system. The output may be graphical, ascii-art or textual, and can also be exported to numerous file formats such as PDF, PNG, XML, and others. Advanced graphical outputs require the "Cairo" development package (usually <code>cairo-devel</code> or <code>libcairo2-dev</code>).</p>
+<p>lstopo and lstopo-no-graphics accept the same command-line options. However, graphical outputs are only available in lstopo. Textual outputs (those that do not depend on heavy external libraries such as Cairo) are supported in both lstopo and lstopo-no-graphics.</p>
+<p>This command can also display the processes currently bound to a part of the machine (via the <code>--ps</code> option).</p>
+<p>Note that lstopo can read XML files and/or alternate chroot filesystems and display topological maps representing those systems (e.g., use lstopo to output an XML file on one system, and then use lstopo to read in that XML file and display it on a different system).</p>
+<p> 
+</div><div class="section" id="cli_hwloc_bind">
+ </p>
+<h1><a class="anchor" id="cli_hwloc_bind"></a>
+hwloc-bind</h1>
+<p>hwloc-bind binds processes to specific hardware objects through a flexible syntax. A simple example is binding an executable to specific cores (or packages or bitmaps or ...). The hwloc-bind(1) man page provides much more detail on what is possible.</p>
+<p>hwloc-bind can also be used to retrieve the current process' binding, or retrieve the last CPU(s) where a process ran, or operate on memory binding.</p>
+<p>Just like hwloc-calc, the input locations given to hwloc-bind may be either objects or cpusets (bitmaps as reported by hwloc-calc or hwloc-distrib).</p>
+<p> 
+</div><div class="section" id="cli_hwloc_calc">
+ </p>
+<h1><a class="anchor" id="cli_hwloc_calc"></a>
+hwloc-calc</h1>
+<p>hwloc-calc is hwloc's Swiss Army Knife command-line tool for converting things. The input may be either objects or cpusets (bitmaps as reported by another hwloc-calc instance or by hwloc-distrib), that may be combined by addition, intersection or subtraction. The output may be expressed as: </p><ul>
+<li>
+a cpuset bitmap: This compact opaque representation of objects is useful for shell scripts etc. It may passed to hwloc command-line tools such as hwloc-calc or hwloc-bind, or to hwloc command-line options such as <code>lstopo --restrict</code>. </li>
+<li>
+a nodeset bitmap: Another opaque representation that represents memory locality more precisely, especially if some NUMA nodes are CPU less or if multiple NUMA nodes are local to the same CPUs. </li>
+<li>
+the amount of the equivalent hwloc objects from a specific type, or the list of their indexes. This is useful for iterating over all similar objects (for instance all cores) within a given part of a platform. </li>
+<li>
+a hierarchical description of objects, for instance a thread index within a core within a package. This gives a better view of the actual location of an object. </li>
+</ul>
+<p>Moreover, input and/or output may be use either physical/OS object indexes or as hwloc's logical object indexes. It eases cooperation with external tools such as taskset or numactl by exporting hwloc specifications into list of processor or NUMA node physical indexes. See also <a class="el" href="a00409.html#faq_indexes">Should I use logical or physical/OS indexes? and how?</a>.</p>
+<p> 
+</div><div class="section" id="cli_hwloc_info">
+ </p>
+<h1><a class="anchor" id="cli_hwloc_info"></a>
+hwloc-info</h1>
+<p>hwloc-info dumps information about the given objects, as well as all its specific attributes. It is intended to be used with tools such as grep for filtering certain attribute lines. When no object is specified, or when <code>--topology</code> is passed, hwloc-info prints a summary of the topology. When <code>--support</code> is passed, hwloc-info lists the supported features for the topology.</p>
+<p> 
+</div><div class="section" id="cli_hwloc_distrib">
+ </p>
+<h1><a class="anchor" id="cli_hwloc_distrib"></a>
+hwloc-distrib</h1>
+<p>hwloc-distrib generates a set of cpuset bitmaps that are uniformly distributed across the machine for the given number of processes. These strings may be used with hwloc-bind to run processes to maximize their memory bandwidth by properly distributing them across the machine.</p>
+<p> 
+</div><div class="section" id="cli_hwloc_ps">
+ </p>
+<h1><a class="anchor" id="cli_hwloc_ps"></a>
+hwloc-ps</h1>
+<p>hwloc-ps is a tool to display the bindings of processes that are currently running on the local machine. By default, hwloc-ps only lists processes that are bound; unbound process (and Linux kernel threads) are not displayed.</p>
+<p> 
+</div><div class="section" id="cli_hwloc_annotate">
+ </p>
+<h1><a class="anchor" id="cli_hwloc_annotate"></a>
+hwloc-annotate</h1>
+<p>hwloc-annotate may modify object (and topology) attributes such as string information (see <a class="el" href="a00401.html#attributes_info">Custom string infos</a> for details) or Misc children objects. It may also add distances, memory attributes, etc. to the topology. It reads an input topology from a XML file and outputs the annotated topology as another XML file.</p>
+<p> 
+</div><div class="section" id="cli_hwloc_diffpatchcompress">
+ </p>
+<h1><a class="anchor" id="cli_hwloc_diffpatchcompress"></a>
+hwloc-diff, hwloc-patch and hwloc-compress-dir</h1>
+<p>hwloc-diff computes the difference between two topologies and outputs it to another XML file.</p>
+<p>hwloc-patch reads such a difference file and applies to another topology.</p>
+<p>hwloc-compress-dir compresses an entire directory of XML files by using hwloc-diff to save the differences between topologies instead of entire topologies.</p>
+<p> 
+</div><div class="section" id="cli_hwloc_dump_hwdata">
+ </p>
+<h1><a class="anchor" id="cli_hwloc_dump_hwdata"></a>
+hwloc-dump-hwdata</h1>
+<p>hwloc-dump-hwdata is a Linux and x86-specific tool that dumps (during boot, privileged) some topology and locality information from raw hardware files (SMBIOS and ACPI tables) to human-readable and world-accessible files that the hwloc library will later reuse.</p>
+<p>Currently only used on Intel Xeon Phi processor platforms. See <a class="el" href="a00409.html#faq_knl_dump">Why do I need hwloc-dump-hwdata for memory on Intel Xeon Phi processor?</a>.</p>
+<p>See <code>HWLOC_DUMPED_HWDATA_DIR</code> in <a class="el" href="a00397.html">Environment Variables</a> for details about the location of dumped files.</p>
+<p> 
+</div><div class="section" id="cli_hwloc_gather">
+ </p>
+<h1><a class="anchor" id="cli_hwloc_gather"></a>
+hwloc-gather-topology and hwloc-gather-cpuid</h1>
+<p>hwloc-gather-topology is a Linux-specific tool that saves the relevant topology files of the current machine into a tarball (and the corresponding lstopo outputs).</p>
+<p>hwloc-gather-cpuid is a x86-specific tool that dumps the result of CPUID instructions on the current machine into a directory.</p>
+<p>The output of hwloc-gather-cpuid is included in the tarball saved by hwloc-gather-topology when running on Linux/x86.</p>
+<p>These files may be used later (possibly offline) for simulating or debugging a machine without actually running on it. </p>
+</div></div><!-- contents -->
+</div><!-- PageDoc -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00397.html b/doc/doxygen-doc/html/a00397.html
new file mode 100644
index 00000000..41a490a6
--- /dev/null
+++ b/doc/doxygen-doc/html/a00397.html
@@ -0,0 +1,201 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Environment Variables</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="PageDoc"><div class="header">
+  <div class="headertitle">
+<div class="title">Environment Variables </div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p> 
+<div class="section">
+</p>
+<p>The behavior of the hwloc library and tools may be tuned thanks to the following environment variables.</p>
+<dl>
+<dt>HWLOC_XMLFILE=/path/to/file.xml </dt>
+<dd><p class="startdd">enforces the discovery from the given XML file as if <a class="el" href="a00204.html#ga879439b7ee99407ee911b3ac64e9a25e" title="Enable XML-file based topology.">hwloc_topology_set_xml()</a> had been called. This file may have been generated earlier with lstopo file.xml. For convenience, this backend provides empty binding hooks which just return success. To have hwloc still actually call OS-specific hooks, HWLOC_THISSYSTEM should be set 1 in the environment too, to assert that the loaded file is really the underlying system. See also <a class="el" href="a00403.html">Importing and exporting topologies from/to XML files</a>. </p>
+<p class="enddd"></p>
+</dd>
+<dt>HWLOC_SYNTHETIC=synthetic_description </dt>
+<dd><p class="startdd">enforces the discovery through a synthetic description string as if <a class="el" href="a00204.html#ga4fab186bb6181a00bcf585825fddd38d" title="Enable synthetic topology.">hwloc_topology_set_synthetic()</a> had been called. For convenience, this backend provides empty binding hooks which just return success. See also <a class="el" href="a00404.html">Synthetic topologies</a>. </p>
+<p class="enddd"></p>
+</dd>
+<dt>HWLOC_XML_VERBOSE=1 </dt>
+<dd></dd>
+<dt>HWLOC_SYNTHETIC_VERBOSE=1 </dt>
+<dd><p class="startdd">enables verbose messages in the XML or synthetic topology backends. hwloc XML backends (see <a class="el" href="a00403.html">Importing and exporting topologies from/to XML files</a>) can emit some error messages to the error output stream. Enabling these verbose messages within hwloc can be useful for understanding failures to parse input XML topologies. Similarly, enabling verbose messages in the synthetic topology backend can help understand why the description string is invalid. See also <a class="el" href="a00404.html">Synthetic topologies</a>. </p>
+<p class="enddd"></p>
+</dd>
+<dt>HWLOC_THISSYSTEM=1 </dt>
+<dd><p class="startdd">enforces the return value of <a class="el" href="a00205.html#ga68ffdcfd9175cdf40709801092f18017" title="Does the topology context come from this system?">hwloc_topology_is_thissystem()</a>, as if <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b" title="Assume that the selected backend provides the topology for the system on which we are running.">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a> was set with <a class="el" href="a00205.html#gaaeed4df656979e5f16befea9d29b814b" title="Set OR&#39;ed flags to non-yet-loaded topology.">hwloc_topology_set_flags()</a>. It means that it makes hwloc assume that the selected backend provides the topology for the system on which we are running, even if it is not the OS-specific backend but the XML backend for instance. This means making the binding functions actually call the OS-specific system calls and really do binding, while the XML backend would otherwise provide empty hooks just returning success. This can be used for efficiency reasons to first detect the topology once, save it to a XML file, and quickly reload it later through the XML backend, but still having binding functions actually do bind. This also enables support for the variable HWLOC_THISSYSTEM_ALLOWED_RESOURCES. </p>
+<p class="enddd"></p>
+</dd>
+<dt>HWLOC_THISSYSTEM_ALLOWED_RESOURCES=1 </dt>
+<dd><p class="startdd">Get the set of allowed resources from the native operating system even if the topology was loaded from XML or synthetic description, as if <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea1b66bbd66e900e5c837f71defb32ad89" title="Get the set of allowed resources from the local operating system even if the topology was loaded from...">HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES</a> was set with <a class="el" href="a00205.html#gaaeed4df656979e5f16befea9d29b814b" title="Set OR&#39;ed flags to non-yet-loaded topology.">hwloc_topology_set_flags()</a>. This variable requires the topology to match the current system (see the variable HWLOC_THISSYSTEM). This is useful when the topology is not loaded directly from the local machine (e.g. for performance reason) and it comes with all resources, but the running process is restricted to only a part of the machine (for instance because of Linux Cgroup/Cpuset). </p>
+<p class="enddd"></p>
+</dd>
+<dt>HWLOC_ALLOW=all </dt>
+<dd><p class="startdd">Totally ignore administrative restrictions such as Linux Cgroups and consider all resources (PUs and NUMA nodes) as allowed. This is different from setting HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED which gathers all resources but marks the unavailable ones as disallowed. </p>
+<p class="enddd"></p>
+</dd>
+<dt>HWLOC_HIDE_ERRORS=1 </dt>
+<dd><p class="startdd">enables or disables verbose reporting of errors. The hwloc library may issue warnings to the standard error stream when it detects a problem during topology discovery, for instance if the operating system (or user) gives contradictory topology information.</p>
+<p class="interdd">By default (1), hwloc only shows critical errors such as invalid hardware topology information or invalid configuration. If set to 0 (default in lstopo), more errors are displayed, for instance a failure to initialize CUDA or NVML. If set to 2, no hwloc error messages are shown.</p>
+<p class="interdd">Note that additional verbose messages may be enabled with other variables such as HWLOC_GROUPING_VERBOSE. </p>
+<p class="enddd"></p>
+</dd>
+<dt>HWLOC_USE_NUMA_DISTANCES=7 </dt>
+<dd><p class="startdd">enables or disables the use of NUMA distances. NUMA distances and memory target/initiator information may be used to improve the locality of NUMA nodes, especially CPU-less nodes. Bits in the value of this environment variable enable different features: Bit 0 enables the gathering of NUMA distances from the operating system. Bit 1 further enables the use of NUMA distances to improve the locality of CPU-less nodes. Bit 2 enables the use of target/initiator information. </p>
+<p class="enddd"></p>
+</dd>
+<dt>HWLOC_GROUPING=1 </dt>
+<dd><p class="startdd">enables or disables objects grouping based on distances. By default, hwloc uses distance matrices between objects (either read from the OS or given by the user) to find groups of close objects. These groups are described by adding intermediate Group objects in the topology. Setting this environment variable to 0 will disable this grouping. This variable supersedes the obsolete HWLOC_IGNORE_DISTANCES variable. </p>
+<p class="enddd"></p>
+</dd>
+<dt>HWLOC_GROUPING_ACCURACY=0.05 </dt>
+<dd><p class="startdd">relaxes distance comparison during grouping. By default, objects may be grouped if their distances form a minimal distance graph. When setting this variable to 0.02, and when <a class="el" href="a00222.html#gga22428b6bab271411e3834e6b4ca22e37a5233ccf631c3bc53dd5c3e7a5d5c9b77" title="If grouping, consider the distance values as inaccurate and relax the comparisons during the grouping...">HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE</a> is given, these distances do not have to be strictly equal anymore, they may just be equal with a 2% error. If set to <code>try</code> instead of a numerical value, hwloc will try to group with perfect accuracy (0, the default), then with 0.01, 0.02, 0.05 and finally 0.1. Numbers given in this environment variable should always use a dot as a decimal mark (for instance 0.01 instead of 0,01).</p>
+<p class="enddd"></p>
+</dd>
+<dt>HWLOC_GROUPING_VERBOSE=0 </dt>
+<dd><p class="startdd">enables or disables some verbose messages during grouping. If this variable is set to 1, some debug messages will be displayed during distance-based grouping of objects even if debug was not specific at configure time. This is useful when trying to find an interesting distance grouping accuracy.</p>
+<p class="enddd"></p>
+</dd>
+<dt>HWLOC_CPUKINDS_RANKING=default </dt>
+<dd><p class="startdd">change the ranking policy for CPU kinds. hwloc tries to rank CPU kinds that are energy efficiency first, and then CPUs that are rather high-performance and power hungry. <br  />
+ By default, if available, the OS-provided efficiency is used for ranking. Otherwise, the frequency and/or core types are used when available. <br  />
+ This environment variable may be set to <code>coretype+frequency</code>, <code>coretype+frequency_strict</code>, <code>coretype</code>, <code>frequency</code>, <code>frequency_base</code>, <code>frequency_max</code>, <code>forced_efficiency</code>, <code>no_forced_efficiency</code>, <code>default</code>, or <code>none</code>. </p>
+<p class="enddd"></p>
+</dd>
+<dt>HWLOC_CPUKINDS_MAXFREQ=adjust=10 </dt>
+<dd><p class="startdd">change the use of the max frequency in the Linux backend. hwloc tries to read the base and max frequencies of each core on Linux. Some hardware features such as Intel Turbo Boost Max 3.0 make some cores report slightly higher max frequencies than others in the same CPU package. Despite having slightly different frequencies, these cores are considered identical instead of exposing an hybrid CPU. Hence, by default, hwloc uniformizes the max frequencies of cores that have the same base frequency (higher values are downgraded by up to 10%).</p>
+<p class="interdd">If this environment variable is set to <code>adjust=X</code>, the 10% threshold is replaced with X. If set to 1, max frequencies are not adjusted anymore, some homogeneous processors may appear hybrid because of this. If set to 0, max frequencies are entirely ignored. </p>
+<p class="enddd"></p>
+</dd>
+<dt>HWLOC_PCI_LOCALITY=&lt;domain/bus&gt; &lt;cpuset&gt;;... </dt>
+<dd></dd>
+<dt>HWLOC_PCI_LOCALITY=/path/to/pci/locality/file </dt>
+<dd><p class="startdd">changes the locality of I/O devices behing the specified PCI buses. If no I/O locality information is available or if the BIOS reports incorrect information, it is possible to move a I/O device tree (OS and/or PCI devices with optional bridges) near a custom set of processors. <br  />
+ Localities are given either inside the environment variable itself, or in the pointed file. They may be separated either by semi-colons or by line-breaks. Invalid localities are silently ignored, hence it is possible to insert comments between actual localities. <br  />
+ Each locality contains a domain/bus specification (in hexadecimal numbers as usual) followed by a whitespace and a cpuset: </p><ul>
+<li>
+<code>0001 &lt;cpuset&gt;</code> specifies the locality of all buses in PCI domain 0000. </li>
+<li>
+<code>0000:0f &lt;cpuset&gt;</code> specifies only PCI bus 0f in domain 0000. </li>
+<li>
+<code>0002:04-0a &lt;cpuset&gt;</code> specifies a range of buses (from 04 to 0a) within domain 0002. </li>
+</ul>
+<p>Domain/bus specifications should usually match entire hierarchies of buses behind a bridge (including primary, secondary and subordinate buses). For instance, if hostbridge 0000:00 is above other bridges/switches with buses 0000:01 to 0000:09, the variable should be HWLOC_PCI_LOCALITY="0000:00-09 &lt;cpuset&gt;". It supersedes the old HWLOC_PCI_0000_00_LOCALCPUS=&lt;cpuset&gt; which only works when hostbridges exist in the topology. <br  />
+ If the variable is defined to empty or invalid, no forced PCI locality is applied but hwloc's internal automatic locality quirks are disabled, which means the exact PCI locality reported by the platform is used. </p>
+<p class="enddd"></p>
+</dd>
+<dt>HWLOC_X86_TOPOEXT_NUMANODES=0 </dt>
+<dd><p class="startdd">use AMD topoext CPUID leaf in the x86 backend to detect NUMA nodes. When using the x86 backend, setting this variable to 1 enables the building of NUMA nodes from AMD processor CPUID instructions. However this strategy does not always reflect BIOS configuration such as NUMA interleaving. And node indexes may be different from those of the operating system. Hence this should only be used when OS backends are wrong and the user is sure that CPUID returns correct NUMA information. </p>
+<p class="enddd"></p>
+</dd>
+<dt>HWLOC_KEEP_NVIDIA_GPU_NUMA_NODES=0 </dt>
+<dd><p class="startdd">show or hide NUMA nodes that correspond to NVIDIA GPU memory. By default they are ignored to avoid interleaved memory being allocated on GPU by mistake. Setting this environment variable to 1 exposes these NUMA nodes. They may be recognized by the <em>GPUMemory</em> subtype. They also have a <em>PCIBusID</em> info attribute to identify the corresponding GPU. </p>
+<p class="enddd"></p>
+</dd>
+<dt>HWLOC_KNL_MSCACHE_L3=0 </dt>
+<dd><p class="startdd">Expose the KNL MCDRAM in cache mode as a Memory-side Cache instead of a L3. hwloc releases prior to 2.1 exposed the MCDRAM cache as a CPU-side L3 cache. Now that Memory-side caches are supported by hwloc, it is still exposed as a L3 by default to avoid breaking existing applications. Setting this environment variable to 1 will expose it as a proper Memory-side cache. </p>
+<p class="enddd"></p>
+</dd>
+<dt>HWLOC_WINDOWS_PROCESSOR_GROUP_OBJS=0 </dt>
+<dd><p class="startdd">Expose Windows processor groups as hwloc Group objects. By default, these groups are disabled because they may be incompatible with the hierarchy of resources that hwloc builds (leading to warnings). Setting this variable to 1 reenables the addition of these groups to the topology.</p>
+<p class="interdd">This variable does not impact the querying of Windows processor groups using the dedicated API in <a class="el" href="a00152_source.html">hwloc/windows.h</a>, this feature is always supported. </p>
+<p class="enddd"></p>
+</dd>
+<dt>HWLOC_ANNOTATE_GLOBAL_COMPONENTS=0 </dt>
+<dd><p class="startdd">Allow components to annotate the topology even if they are usually excluded by global components by default. Setting this variable to 1 and also setting <code>HWLOC_COMPONENTS=xml,pci,stop</code> enables the addition of PCI vendor and model info attributes to a XML topology that was generated without those names (if pciaccess was missing). </p>
+<p class="enddd"></p>
+</dd>
+<dt>HWLOC_FSROOT=/path/to/linux/filesystem-root/ </dt>
+<dd><p class="startdd">switches to reading the topology from the specified Linux filesystem root instead of the main file-system root. This directory may have been saved previously from another machine with <code>hwloc-gather-topology</code>. <br  />
+ One should likely also set <code>HWLOC_COMPONENTS=linux,stop</code> so that non-Linux backends are disabled (the <code>-i</code> option of command-line tools takes care of both). <br  />
+ Not using the main file-system root causes <a class="el" href="a00205.html#ga68ffdcfd9175cdf40709801092f18017" title="Does the topology context come from this system?">hwloc_topology_is_thissystem()</a> to return 0. For convenience, this backend provides empty binding hooks which just return success. To have hwloc still actually call OS-specific hooks, HWLOC_THISSYSTEM should be set 1 in the environment too, to assert that the loaded file is really the underlying system. </p>
+<p class="enddd"></p>
+</dd>
+<dt>HWLOC_CPUID_PATH=/path/to/cpuid/ </dt>
+<dd><p class="startdd">forces the x86 backend to read dumped CPUIDs from the given directory instead of executing actual x86 CPUID instructions. This directory may have been saved previously from another machine with <code>hwloc-gather-cpuid</code>. <br  />
+ One should likely also set <code>HWLOC_COMPONENTS=x86,stop</code> so that non-x86 backends are disabled (the <code>-i</code> option of command-line tools takes care of both). <br  />
+ It causes <a class="el" href="a00205.html#ga68ffdcfd9175cdf40709801092f18017" title="Does the topology context come from this system?">hwloc_topology_is_thissystem()</a> to return 0. For convenience, this backend provides empty binding hooks which just return success. To have hwloc still actually call OS-specific hooks, HWLOC_THISSYSTEM should be set 1 in the environment too, to assert that the loaded CPUID dump is really the underlying system. </p>
+<p class="enddd"></p>
+</dd>
+<dt>HWLOC_DUMPED_HWDATA_DIR=/path/to/dumped/files/ </dt>
+<dd><p class="startdd">loads files dumped by <code>hwloc-dump-hwdata</code> (on Linux) from the given directory. The default dump/load directory is configured during build based on --runstatedir, --localstatedir, and --prefix options. It usually points to <code>/var/run/hwloc/</code> in Linux distribution packages, but it may also point to <code>$prefix/var/run/hwloc/</code> when manually installing and only specifying --prefix. </p>
+<p class="enddd"></p>
+</dd>
+<dt>HWLOC_COMPONENTS=list,of,components </dt>
+<dd><p class="startdd">forces a list of components to enable or disable. Enable or disable the given comma-separated list of components (if they do not conflict with each other). Component names prefixed with <code>-</code> are disabled (a single phase may also be disabled).</p>
+<p class="interdd">Once the end of the list is reached, hwloc falls back to enabling the remaining components (sorted by priority) that do not conflict with the already enabled ones, and unless explicitly disabled in the list. If <code>stop</code> is met, the enabling loop immediately stops, no more component is enabled.</p>
+<p class="interdd">If <code>xml</code> or <code>synthetic</code> components are selected, the corresponding XML filename or synthetic description string should be pass in <code>HWLOC_XMLFILE</code> or <code>HWLOC_SYNTHETIC</code> respectively.</p>
+<p class="interdd">Since this variable is the low-level and more generic way to select components, it takes precedence over environment variables for selecting components.</p>
+<p class="interdd">If the variable is set to an empty string (or set to a single comma), no specific component is loaded first, all components are loaded in priority order.</p>
+<p class="interdd">See <a class="el" href="a00407.html#plugins_select">Selecting which components to use</a> for details. </p>
+<p class="enddd"></p>
+</dd>
+<dt>HWLOC_COMPONENTS_VERBOSE=1 </dt>
+<dd><p class="startdd">displays verbose information about components. Display messages when components are registered or enabled. This is the recommended way to list the available components with their priority (all of them are <em>registered</em> at startup). </p>
+<p class="enddd"></p>
+</dd>
+<dt>HWLOC_PLUGINS_PATH=/path/to/hwloc/plugins/:... </dt>
+<dd><p class="startdd">changes the default search directory for plugins. By default, <code>$libdir/hwloc</code> is used. The variable may contain several colon-separated directories. </p>
+<p class="enddd"></p>
+</dd>
+<dt>HWLOC_PLUGINS_VERBOSE=1 </dt>
+<dd><p class="startdd">displays verbose information about plugins. List which directories are scanned, which files are loaded, and which components are successfully loaded. </p>
+<p class="enddd"></p>
+</dd>
+<dt>HWLOC_PLUGINS_BLACKLIST=filename1,filename2,... </dt>
+<dd><p class="startdd">prevents plugins from being loaded if their filename (without path) is listed. Plugin filenames may be found in verbose messages outputted when HWLOC_PLUGINS_VERBOSE=1. </p>
+<p class="enddd"></p>
+</dd>
+<dt>HWLOC_DEBUG_VERBOSE=0 </dt>
+<dd><p class="startdd">disables all verbose messages that are enabled by default when <code>&ndash;enable-debug</code> is passed to configure. When set to more than 1, even more verbose messages are displayed. The default is 1. </p>
+<p class="enddd"></p>
+</dd>
+</dl>
+</div></div><!-- contents -->
+</div><!-- PageDoc -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00398.html b/doc/doxygen-doc/html/a00398.html
new file mode 100644
index 00000000..091bf4a6
--- /dev/null
+++ b/doc/doxygen-doc/html/a00398.html
@@ -0,0 +1,70 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): CPU and Memory Binding Overview</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="PageDoc"><div class="header">
+  <div class="headertitle">
+<div class="title">CPU and Memory Binding Overview </div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p> 
+<div class="section">
+</p>
+<p>Some operating systems do not systematically provide separate functions for CPU and memory binding. This means that CPU binding functions may have have effects on the memory binding policy. Likewise, changing the memory binding policy may change the CPU binding of the current thread. This is often not a problem for applications, so by default hwloc will make use of these functions when they provide better binding support.</p>
+<p>If the application does not want the CPU binding to change when changing the memory policy, it needs to use the <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2aad6b9eaf2ee324ca58dc8f58094b9997" title="Avoid any effect on CPU binding.">HWLOC_MEMBIND_NOCPUBIND</a> flag to prevent hwloc from using OS functions which would change the CPU binding. Additionally, <a class="el" href="a00202.html#gga217dc8d373f8958cc93c154ebce1c71ca41ce440443cc3087caed95ab60edcad6" title="Avoid any effect on memory binding.">HWLOC_CPUBIND_NOMEMBIND</a> can be passed to CPU binding function to prevent hwloc from using OS functions would change the memory binding policy. Of course, using these flags will reduce hwloc's overall support for binding, so their use is discouraged.</p>
+<p>One can avoid using these flags but still closely control both memory and CPU binding by allocating memory, touching each page in the allocated memory, and then changing the CPU binding. The already-really-allocated memory will then be "locked" to physical memory and will not be migrated. Thus, even if the memory binding policy gets changed by the CPU binding order, the already-allocated memory will not change with it. When binding and allocating further memory, the CPU binding should be performed again in case the memory binding altered the previously-selected CPU binding.</p>
+<p>Not all operating systems support the notion of a "current" memory binding policy for the current process, but such operating systems often still provide a way to allocate data on a given node set. Conversely, some operating systems support the notion of a "current" memory binding policy and do not permit allocating data on a specific node set without changing the current policy and allocate the data. To provide the most powerful coverage of these facilities, hwloc provides:</p>
+<ul>
+<li>
+functions that set/get the current memory binding policies (if supported): hwloc_set/get_membind() and hwloc_set/get_proc_membind() </li>
+<li>
+a function that allocates memory bound to specific node set without changing the current memory binding policy (if supported): <a class="el" href="a00203.html#ga04736461780fadcf193af218c0122273" title="Allocate some memory on NUMA memory nodes specified by set.">hwloc_alloc_membind()</a>. </li>
+<li>
+a helper which, if needed, changes the current memory binding policy of the process in order to obtain memory binding: <a class="el" href="a00203.html#gab1b77b8408bacaf03c7e8878f7577922" title="Allocate some memory on NUMA memory nodes specified by set.">hwloc_alloc_membind_policy()</a>. </li>
+</ul>
+<p>An application can thus use the two first sets of functions if it wants to manage separately the global process binding policy and directed allocation, or use the third set of functions if it does not care about the process memory binding policy.</p>
+<p>See <a class="el" href="a00202.html">CPU binding</a> and <a class="el" href="a00203.html">Memory binding</a> for hwloc's API functions regarding CPU and memory binding, respectively. There are some examples under doc/examples/ in the source tree. </p>
+</div></div><!-- contents -->
+</div><!-- PageDoc -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00399.html b/doc/doxygen-doc/html/a00399.html
new file mode 100644
index 00000000..62ddbd57
--- /dev/null
+++ b/doc/doxygen-doc/html/a00399.html
@@ -0,0 +1,207 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): I/O Devices</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="PageDoc"><div class="header">
+  <div class="headertitle">
+<div class="title">I/O Devices </div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p> 
+<div class="section">
+</p>
+<p>hwloc usually manipulates processing units and memory but it can also discover I/O devices and report their locality as well. This is useful for placing I/O intensive applications on cores near the I/O devices they use, or for gathering information about all platform components.</p>
+<p> 
+</div><div class="section" id="iodevices_enabling">
+ </p>
+<h1><a class="anchor" id="iodevices_enabling"></a>
+Enabling and requirements</h1>
+<p>I/O discovery is disabled by default (except in lstopo) for performance reasons. It can be enabled by changing the filtering of I/O object types to <code><a class="el" href="a00205.html#gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5" title="Only keep likely-important objects of the given type.">HWLOC_TYPE_FILTER_KEEP_IMPORTANT</a></code> or <code><a class="el" href="a00205.html#gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e" title="Keep all objects of this type.">HWLOC_TYPE_FILTER_KEEP_ALL</a></code> before loading the topology, for instance with <code><a class="el" href="a00205.html#ga0ab38705357bc1203abe829da8a12ad3" title="Set the filtering for all I/O object types.">hwloc_topology_set_io_types_filter()</a></code>.</p>
+<p>Note that I/O discovery requires significant help from the operating system. The pciaccess library (the development package is usually <code>libpciaccess-devel</code> or <code>libpciaccess-dev</code>) is needed to fully detect PCI devices and bridges/switches. On Linux, PCI discovery may still be performed even if <code>libpciaccess</code> cannot be used. But it misses PCI device names. Moreover, some operating systems require privileges for probing PCI devices, see <a class="el" href="a00409.html#faq_privileged">Does hwloc require privileged access?</a> for details.</p>
+<p>The actual locality of I/O devices is only currently detected on Linux. Other operating system will just report I/O devices as being attached to the topology root object.</p>
+<p> 
+</div><div class="section" id="iodevices_objects">
+ </p>
+<h1><a class="anchor" id="iodevices_objects"></a>
+I/O objects</h1>
+<p>When I/O discovery is enabled and supported, some additional objects are added to the topology. The corresponding I/O object types are: </p><ul>
+<li>
+<code><a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075" title="Operating system device (filtered out by default).">HWLOC_OBJ_OS_DEVICE</a></code> describes an operating-system-specific handle such as the <em>sda</em> drive or the <em>eth0</em> network interface. See <a class="el" href="a00399.html#iodevices_osdev">OS devices</a>. </li>
+<li>
+<code><a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9" title="PCI device (filtered out by default).">HWLOC_OBJ_PCI_DEVICE</a></code> and <code><a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0" title="Bridge (filtered out by default). Any bridge (or PCI switch) that connects the host or an I/O bus,...">HWLOC_OBJ_BRIDGE</a></code> build up a PCI hierarchy made of bridges (that may be actually be switches) and devices. See <a class="el" href="a00399.html#iodevices_pci">PCI devices and bridges</a>. </li>
+</ul>
+<p>Any of these types may be filtered individually with <code><a class="el" href="a00205.html#gad894e70f15f8d4aada7be8d1aba38b7e" title="Set the filtering for the given object type.">hwloc_topology_set_type_filter()</a></code>.</p>
+<p>hwloc tries to attach these new objects to normal objects (usually NUMA nodes) to match their actual physical location. For instance, if a I/O hub (or root complex) is physically connected to a package, the corresponding hwloc bridge object (and its PCI bridges and devices children) is inserted as a child of the corresponding hwloc Package object. <b>These children are not in the normal children list but rather in the I/O-specific children list.</b></p>
+<p>I/O objects also have neither CPU sets nor node sets (NULL pointers) because they are not directly usable by the user applications for binding. Moreover I/O hierarchies may be highly complex (asymmetric trees of bridges). So I/O objects are placed in specific levels with custom depths. Their lists may still be traversed with regular helpers such as <a class="el" href="a00199.html#ga759e88eaf5a230ad283e9d4c42486735" title="Returns the next object of type type.">hwloc_get_next_obj_by_type()</a>. However, hwloc offers some dedicated helpers such as <a class="el" href="a00216.html#ga66470dabce9db19a57c5940a909d0baa" title="Get the next PCI device in the system.">hwloc_get_next_pcidev()</a> and <a class="el" href="a00216.html#ga8b4584c8949e2c5f1c97ba7fe92b8145" title="Get the next OS device in the system.">hwloc_get_next_osdev()</a> for convenience (see <a class="el" href="a00216.html">Finding I/O objects</a>).</p>
+<p> 
+</div><div class="section" id="iodevices_osdev">
+ </p>
+<h1><a class="anchor" id="iodevices_osdev"></a>
+OS devices</h1>
+<p>Although each PCI device is uniquely identified by its bus ID (e.g. 0000:01:02.3), a user-space application can hardly find out which PCI device it is actually using. Applications rather use software handles (such as the <em>eth0</em> network interface, the <em>sda</em> hard drive, or the <em>mlx4_0</em> OpenFabrics HCA). Therefore hwloc tries to add software devices (<code><a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075" title="Operating system device (filtered out by default).">HWLOC_OBJ_OS_DEVICE</a></code>, also known as OS devices).</p>
+<p>OS devices may be attached below PCI devices, but they may also be attached directly to normal objects. Indeed some OS devices are not related to PCI. For instance, NVDIMM block devices (such as <em>pmem0s</em> on Linux) are directly attached near their NUMA node (I/O child of the parent whose memory child is the NUMA node). Also, if hwloc could not discover PCI for some reason, PCI-related OS devices may also be attached directly to normal objects.</p>
+<p>Finally, OS <em>subdevices</em> may be exposed as OS devices children of another OS device. This is the case of LevelZero subdevices for instance.</p>
+<p>hwloc first tries to discover OS devices from the operating system, e.g. <em>eth0</em>, <em>sda</em> or <em>mlx4_0</em>. However, this ability is currently only available on Linux for some classes of devices.</p>
+<p>hwloc then tries to discover software devices through additional I/O components using external libraries. For instance proprietary graphics drivers do not expose any named OS device, but hwloc may still create one OS object per software handle when supported. For instance the <code>opencl</code> and <code>cuda</code> components may add some <em>opencl0d0</em> and <em>cuda0</em> OS device objects.</p>
+<p>Here is a list of OS device objects commonly created by hwloc components when I/O discovery is enabled and supported.</p>
+<ul>
+<li>
+Hard disks or non-volatile memory devices (<a class="el" href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0a689b0488c3c0d08d116751c6b9cb8871" title="Operating system block device, or non-volatile memory device. For instance &quot;sda&quot; or &quot;dax2....">HWLOC_OBJ_OSDEV_BLOCK</a>) <ul>
+<li>
+<em>sda</em> or <em>dax2.0</em> (Linux component) </li>
+</ul>
+</li>
+<li>
+Network interfaces (<a class="el" href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0ab715d81155f771573c8682dffc65021b" title="Operating system network device. For instance the &quot;eth0&quot; interface on Linux.">HWLOC_OBJ_OSDEV_NETWORK</a>) <ul>
+<li>
+<em>eth0</em>, <em>wlan0</em>, <em>ib0</em> (Linux component) </li>
+<li>
+<em>hsn0</em> with "Slingshot" subtype for HPE Cray HSNs (Linux component). </li>
+</ul>
+</li>
+<li>
+OpenFabrics (InfiniBand, Omni-Path, usNIC, etc) HCAs (<a class="el" href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0a52157d03694fdae82dddd57ca8c973b6" title="Operating system openfabrics device. For instance the &quot;mlx4_0&quot; InfiniBand HCA, &quot;hfi1_0&quot; Omni-Path int...">HWLOC_OBJ_OSDEV_OPENFABRICS</a>) <ul>
+<li>
+<em>mlx5_0</em>, <em>hfi1_0</em>, <em>qib0</em>, <em>usnic_0</em> (Linux component) </li>
+<li>
+<em>bxi0</em> with "BXI" subtype for Atos/Bull BXI HCAs (Linux component) even if those are not really OpenFabrics. </li>
+</ul>
+</li>
+<li>
+GPUs (<a class="el" href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90" title="Operating system GPU device. For instance &quot;:0.0&quot; for a GL display, &quot;card0&quot; for a Linux DRM device.">HWLOC_OBJ_OSDEV_GPU</a>) <ul>
+<li>
+<em>rsmi0</em> for the first RSMI device ("RSMI" subtype, from the RSMI component, using the AMD ROCm SMI library) </li>
+<li>
+<em>nvml0</em> for the first NVML device ("NVML" subtype, from the NVML component, using the NVIDIA Management Library) </li>
+<li>
+<em>:0.0</em> for the first display ("Display" subtype, from the GL component, using the NV-CONTROL X extension library, NVCtrl) </li>
+<li>
+<em>card0</em> and <em>renderD128</em> for DRM device files (from the Linux component, filtered-out by default because considered non-important) </li>
+</ul>
+</li>
+<li>
+Co-Processors (<a class="el" href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83" title="Operating system co-processor device. For instance &quot;opencl0d0&quot; for a OpenCL device,...">HWLOC_OBJ_OSDEV_COPROC</a>) <ul>
+<li>
+<em>opencl0d0</em> for the first device of the first OpenCL platform, <em>opencl1d3</em> for the fourth device of the second OpenCL platform ("OpenCL" subtype, from the OpenCL component) </li>
+<li>
+<em>ze0</em> for the first Level Zero device ("LevelZero" subtype, from the levelzero component, using the oneAPI Level Zero library), and <em>ze0.1</em> for its second subdevice (if any). </li>
+<li>
+<em>cuda0</em> for the first NVIDIA CUDA device ("CUDA" subtype, from the CUDA component, using the NVIDIA CUDA Library) </li>
+<li>
+<em>ve0</em> for the first NEC Vector Engine device ("VectorEngine" subtype, from the Linux component) </li>
+</ul>
+</li>
+<li>
+DMA engine channel (<a class="el" href="a00196.html#gga64f5d539df299c97ae80ce53fc4b56c0a827ad1643360711a8b6c6af671366791" title="Operating system dma engine device. For instance the &quot;dma0chan0&quot; DMA channel on Linux.">HWLOC_OBJ_OSDEV_DMA</a>) <ul>
+<li>
+<em>dma0chan0</em> (Linux component) when all OS devices are enabled (<a class="el" href="a00205.html#gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e" title="Keep all objects of this type.">HWLOC_TYPE_FILTER_KEEP_ALL</a>) </li>
+</ul>
+</li>
+</ul>
+<p>Note that some PCI devices may contain multiple software devices (see the example below).</p>
+<p>See also <a class="el" href="a00405.html">Interoperability With Other Software</a> for managing these devices without considering them as hwloc objects.</p>
+<p> 
+</div><div class="section" id="iodevices_pci">
+ </p>
+<h1><a class="anchor" id="iodevices_pci"></a>
+PCI devices and bridges</h1>
+<p>A PCI hierarchy is usually organized as follows: A hostbridge object ( <code><a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0" title="Bridge (filtered out by default). Any bridge (or PCI switch) that connects the host or an I/O bus,...">HWLOC_OBJ_BRIDGE</a></code> object with upstream type <em>Host</em> and downstream type <em>PCI</em>) is attached below a normal object (usually the entire machine or a NUMA node). There may be multiple hostbridges in the machine, attached to different places, but all PCI devices are below one of them (unless the Bridge object type is filtered-out).</p>
+<p>Each hostbridge contains one or several children, either other bridges (usually PCI to PCI switches) or PCI devices (<code><a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9" title="PCI device (filtered out by default).">HWLOC_OBJ_PCI_DEVICE</a></code>). The number of bridges between the hostbridge and a PCI device depends on the machine.</p>
+<p> 
+</div><div class="section" id="iodevices_consult">
+ </p>
+<h1><a class="anchor" id="iodevices_consult"></a>
+Consulting I/O devices and binding</h1>
+<p>I/O devices may be consulted by traversing the topology manually (with usual routines such as <a class="el" href="a00199.html#ga6f414dd80a2b943967a0ac92da3181a2" title="Returns the topology object at logical index idx with type type.">hwloc_get_obj_by_type()</a>) or by using dedicated helpers (such as <a class="el" href="a00216.html#gacdbaf0db98872e224b7883a84bfb0455" title="Find the PCI device object matching the PCI bus id given domain, bus device and function PCI bus id.">hwloc_get_pcidev_by_busid()</a>, see <a class="el" href="a00216.html">Finding I/O objects</a>).</p>
+<p>I/O objects do not actually contain any locality information because their CPU sets and node sets are NULL. Their locality must be retrieved by walking up the object tree (through the <code>parent</code> link) until a non-I/O object is found (see <a class="el" href="a00216.html#gaf139bb61375178e90cc3f1835b452ab6" title="Get the first non-I/O ancestor object.">hwloc_get_non_io_ancestor_obj()</a>). This normal object should have non-NULL CPU sets and node sets which describe the processing units and memory that are immediately close to the I/O device. For instance the path from a OS device to its locality may go across a PCI device parent, one or several bridges, up to a Package node with the same locality.</p>
+<p>Command-line tools are also aware of I/O devices. lstopo displays the interesting ones by default (passing <code>--no-io</code> disables it).</p>
+<p>hwloc-calc and hwloc-bind may manipulate I/O devices specified by PCI bus ID or by OS device name. </p><ul>
+<li>
+<code>pci=0000:02:03.0</code> is replaced by the set of CPUs that are close to the PCI device whose bus ID is given.  </li>
+<li>
+<code>os=eth0</code> is replaced by CPUs that are close to the I/O device whose software handle is called <code>eth0</code>.  </li>
+</ul>
+<p>This enables easy binding of I/O-intensive applications near the device they use.</p>
+<p> 
+</div><div class="section" id="iodevices_examples">
+ </p>
+<h1><a class="anchor" id="iodevices_examples"></a>
+Examples</h1>
+<p>The following picture shows a dual-package dual-core host whose PCI bus is connected to the first package and NUMA node.</p>
+<div class="image">
+<img src="devel09-pci.png" alt=""/>
+</div>
+ <p>Six interesting PCI devices were discovered. However, hwloc found some corresponding software devices (<em>eth0</em>, <em>eth1</em>, <em>sda</em>, <em>mlx4_0</em>, <em>ib0</em>, and <em>ib1</em>) for only four of these physical devices. The other ones (<em>PCI 102b:0532</em> and <em>PCI 8086:3a20</em>) are an unused IDE controller (no disk attached) and a graphic card (no corresponding software device reported to the user by the operating system).</p>
+<p>On the contrary, it should be noted that three different software devices were found for the last PCI device (<em>PCI 15b3:634a</em>). Indeed this OpenFabrics HCA PCI device object contains one one OpenFabrics software device (<em>mlx4_0</em>) and two virtual network interface software devices (<em>ib0</em> and <em>ib1</em>).</p>
+<p>Here is the corresponding textual output:</p>
+<pre class="fragment">Machine (24GB total)
+  Package L#0
+    NUMANode L#0 (P#0 12GB)
+    L3 L#0 (8192KB)
+      L2 L#0 (256KB) + L1 L#0 (32KB) + Core L#0 + PU L#0 (P#0)
+      L2 L#1 (256KB) + L1 L#1 (32KB) + Core L#1 + PU L#1 (P#2)
+    HostBridge
+      PCIBridge
+        PCI 01:00.0 (Ethernet)
+          Net "eth0"
+        PCI 01:00.1 (Ethernet)
+          Net "eth1"
+      PCIBridge
+        PCI 03:00.0 (RAID)
+          Block "sda"
+      PCIBridge
+        PCI 04:03.0 (VGA)
+      PCI 00:1f.2 (IDE)
+      PCI 51:00.0 (InfiniBand)
+        Net "ib0"
+        Net "ib1"
+        Net "mlx4_0"
+  Package L#1
+    NUMANode L#1 (P#1 12GB)
+    L3 L#1 (8192KB)
+      L2 L#2 (256KB) + L1 L#2 (32KB) + Core L#2 + PU L#2 (P#1)
+      L2 L#3 (256KB) + L1 L#3 (32KB) + Core L#3 + PU L#3 (P#3)
+</pre> </div></div><!-- contents -->
+</div><!-- PageDoc -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00400.html b/doc/doxygen-doc/html/a00400.html
new file mode 100644
index 00000000..3638375c
--- /dev/null
+++ b/doc/doxygen-doc/html/a00400.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Miscellaneous objects</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="PageDoc"><div class="header">
+  <div class="headertitle">
+<div class="title">Miscellaneous objects </div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p> 
+<div class="section">
+</p>
+<p>hwloc topologies may be annotated with Misc objects (of type <code><a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d" title="Miscellaneous objects (filtered out by default). Objects without particular meaning,...">HWLOC_OBJ_MISC</a></code>) either automatically or by the user. This is a flexible way to annotate topologies with large sets of information since Misc objects may be inserted anywhere in the topology (to annotate specific objects or parts of the topology), even below other Misc objects, and each of them may contain multiple attributes (see also <a class="el" href="a00409.html#faq_annotate">How do I annotate the topology with private notes?</a>).</p>
+<p>These Misc objects may have a <code>subtype</code> field to replace <code>Misc</code> with something else in the lstopo output.</p>
+<p> 
+</div><div class="section" id="miscobjs_auto">
+ </p>
+<h1><a class="anchor" id="miscobjs_auto"></a>
+Misc objects added by hwloc</h1>
+<p>hwloc only uses Misc objects when other object types are not sufficient, and when the Misc object type is not filtered-out anymore. This currently includes: </p><ul>
+<li>
+Memory modules (DIMMs), on Linux when privileged and when <code>dmi-sysfs</code> is supported by the kernel. These objects have a <code>subtype</code> field of value <code>MemoryModule</code>. They are currently always attached to the root object. Their attributes describe the DIMM vendor, model, etc. <code>lstopo -v</code> displays them as: <div class="fragment"><div class="line">Misc(MemoryModule) (P#1 DeviceLocation=<span class="stringliteral">&quot;Bottom-Slot 2(right)&quot;</span> BankLocation=<span class="stringliteral">&quot;BANK 2&quot;</span> Vendor=Elpida SerialNumber=21733667 AssetTag=9876543210 PartNumber=<span class="stringliteral">&quot;EBJ81UG8EFU0-GN-F &quot;</span>)</div>
+</div><!-- fragment -->  </li>
+<li>
+Displaying process binding in <code>lstopo --top</code>. These objects have a <code>subtype</code> field of value <code>Process</code> and a name attribute made of their PID and program name. They are attached below the object they are bound to. The textual <code>lstopo</code> displays them as: <div class="fragment"><div class="line">PU L#0 (P#0)</div>
+<div class="line">  Misc(Process) 4445 myprogram</div>
+</div><!-- fragment -->  </li>
+</ul>
+<p> 
+</div><div class="section" id="miscobjs_annotate">
+ </p>
+<h1><a class="anchor" id="miscobjs_annotate"></a>
+Annotating topologies with Misc objects</h1>
+<p>The user may annotate hwloc topologies with its own Misc objects. This can be achieved with <code><a class="el" href="a00206.html#gad980782ade737900c5cf208946768c30" title="Add a MISC object as a leaf of the topology.">hwloc_topology_insert_misc_object()</a></code> as well as hwloc-annotate command-line tool. </p>
+</div></div><!-- contents -->
+</div><!-- PageDoc -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00401.html b/doc/doxygen-doc/html/a00401.html
new file mode 100644
index 00000000..34eed450
--- /dev/null
+++ b/doc/doxygen-doc/html/a00401.html
@@ -0,0 +1,267 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Object attributes</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="PageDoc"><div class="header">
+  <div class="headertitle">
+<div class="title">Object attributes </div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p> 
+<div class="section" id="attributes_normal">
+ </p>
+<h1><a class="anchor" id="attributes_normal"></a>
+Normal attributes</h1>
+<p>hwloc objects have many generic attributes in the <a class="el" href="a00253.html" title="Structure of a topology object.">hwloc_obj</a> structure, for instance their <code>logical_index</code> or <code>os_index</code> (see <a class="el" href="a00409.html#faq_indexes">Should I use logical or physical/OS indexes? and how?</a>), <code>depth</code> or <code>name</code>.</p>
+<p>The kind of object is first described by the <code>obj-&gt;type</code> generic attribute (an integer). OS devices also have a specific <code>obj-&gt;attr-&gt;osdev.type</code> integer for distinguishing between NICs, GPUs, etc.</p>
+<p>Objects may also have an optional <code>obj-&gt;subtype</code> pointing to a better description string (displayed by lstopo either in place or after the main <code>obj-&gt;type</code> attribute): </p><ul>
+<li>
+NUMA nodes: subtype <code>DRAM</code> (for usual main memory), <code>HBM</code> (high-bandwidth memory), <code>SPM</code> (specific-purpose memory, usually reserved for some custom applications), <code>NVM</code> (non-volatile memory when used as main memory), <code>MCDRAM</code> (on KNL) or <code>GPUMemory</code> (on POWER architecture with NVIDIA GPU memory shared over NVLink).  </li>
+<li>
+Groups: subtype <code>Cluster</code>, <code>Module</code>, <code>Tile</code>, <code>Compute Unit</code>, <code>Book</code> or <code>Drawer</code> for different architecture-specific groups of CPUs (see also <a class="el" href="a00409.html#faq_groups">What are these Group objects in my topology?</a>).  </li>
+<li>
+OS devices (see also <a class="el" href="a00399.html#iodevices_osdev">OS devices</a>): <ul>
+<li>
+Co-processor: subtype <code>OpenCL</code>, <code>LevelZero</code>, <code>CUDA</code>, or <code>VectorEngine</code>. </li>
+<li>
+GPU: subtype <code>RSMI</code> (AMD GPU) or <code>NVML</code> (NVIDIA GPU). </li>
+<li>
+OpenFabrics: subtype <code>BXI</code> (Bull/Atos BXI HCA). </li>
+<li>
+Network: subtype <code>Slingshot</code> (HPE Cray Slingshot Cassini HSN). </li>
+<li>
+Block: subtype <code>Disk</code>, <code>NVM</code> (non-volatile memory), <code>SPM</code> (specific-purpose memory), <code>CXLMem</code> (CXL volatile ou persistent memory), <code>Tape</code>, or <code>Removable Media Device</code>. </li>
+</ul>
+</li>
+<li>
+L3 Caches: subtype <code>MemorySideCache</code> when hwloc is configured to expose the KNL MCDRAM in Cache mode as a L3.  </li>
+<li>
+PCI devices: subtype <code>NVSwitch</code> for NVLink switches (see also NVLinkBandwidth in <a class="el" href="a00402.html#topoattrs_distances">Distances</a>).  </li>
+<li>
+Misc devices: subtype <code>MemoryModule</code> (see also <a class="el" href="a00400.html#miscobjs_auto">Misc objects added by hwloc</a>)  </li>
+</ul>
+<p>Each object also contains an <code>attr</code> field that, if non NULL, points to a union <a class="el" href="a00257.html" title="Object type-specific Attributes.">hwloc_obj_attr_u</a> of type-specific attribute structures. For instance, a L2Cache object <code>obj</code> contains cache-specific information in <code>obj-&gt;attr-&gt;cache</code>, such as its size and associativity, cache type. See <a class="el" href="a00257.html" title="Object type-specific Attributes.">hwloc_obj_attr_u</a> for details.</p>
+<p> 
+</div><div class="section" id="attributes_info">
+ </p>
+<h1><a class="anchor" id="attributes_info"></a>
+Custom string infos</h1>
+<p>Aside os these generic attribute fields, hwloc annotates many objects with string attributes that are made of a key and a value. Each object contains a list of such pairs that may be consulted manually (looking at the object <code>infos</code> array field) or using the <a class="el" href="a00201.html#gab358661a92bb27d8542b255cc9f6f25e" title="Search the given key name in object infos and return the corresponding value.">hwloc_obj_get_info_by_name()</a>. The user may additionally add new key-value pairs to any object using <a class="el" href="a00201.html#gace7654bb8a9002caae1a4b8a59e7452e" title="Add the given info name and value pair to the given object.">hwloc_obj_add_info()</a> or the <a class="el" href="a00396.html#cli_hwloc_annotate">hwloc-annotate</a> program.</p>
+<p>Here is a non-exhaustive list of attributes that may be automatically added by hwloc. Note that these attributes heavily depend on the ability of the operating system to report them. Many of them will therefore be missing on some OS.</p>
+<p> 
+</div><div class="subsection" id="attributes_info_platform">
+ </p>
+<h2><a class="anchor" id="attributes_info_platform"></a>
+Hardware Platform Information</h2>
+<p>These info attributes are attached to the root object (Machine).</p>
+<dl>
+<dt>PlatformName, PlatformModel, PlatformVendor, PlatformBoardID, PlatformRevision, </dt>
+<dd></dd>
+<dt>SystemVersionRegister, ProcessorVersionRegister (Machine) </dt>
+<dd>Some POWER/PowerPC-specific attributes describing the platform and processor. Currently only available on Linux. Usually added to Package objects, but can be in Machine instead if hwloc failed to discover any package.  </dd>
+<dt>DMIBoardVendor, DMIBoardName, etc. </dt>
+<dd>DMI hardware information such as the motherboard and chassis models and vendors, the BIOS revision, etc., as reported by Linux under <code>/sys/class/dmi/id/</code>.  </dd>
+<dt>MemoryMode, ClusterMode </dt>
+<dd><p class="startdd">Intel Xeon Phi processor configuration modes. Available if hwloc-dump-hwdata was used (see <a class="el" href="a00409.html#faq_knl_dump">Why do I need hwloc-dump-hwdata for memory on Intel Xeon Phi processor?</a>) or if hwloc managed to guess them from the NUMA configuration.</p>
+<p class="enddd">The memory mode may be <em>Cache</em>, <em>Flat</em>, <em>Hybrid50</em> (half the MCDRAM is used as a cache) or <em>Hybrid25</em> (25% of MCDRAM as cache). The cluster mode may be <em>Quadrant</em>, <em>Hemisphere</em>, <em>All2All</em>, <em>SNC2</em> or <em>SNC4</em>. See doc/examples/get-knl-modes.c in the source directory for an example of retrieving these attributes.  </p>
+</dd>
+</dl>
+<p> 
+</div><div class="subsection" id="attributes_info_os">
+ </p>
+<h2><a class="anchor" id="attributes_info_os"></a>
+Operating System Information</h2>
+<p>These info attributes are attached to the root object (Machine).</p>
+<dl>
+<dt>OSName, OSRelease, OSVersion, HostName, Architecture </dt>
+<dd>The operating system name, release, version, the hostname and the architecture name, as reported by the Unix <code>uname</code> command.  </dd>
+<dt>LinuxCgroup </dt>
+<dd>The name the Linux control group where the calling process is placed.  </dd>
+<dt>WindowsBuildEnvironment </dt>
+<dd>Either MinGW or Cygwin when one of these environments was used during build.  </dd>
+</dl>
+<p> 
+</div><div class="subsection" id="attributes_info_hwloc">
+ </p>
+<h2><a class="anchor" id="attributes_info_hwloc"></a>
+hwloc Information</h2>
+<p>Unless specified, these info attributes are attached to the root object (Machine).</p>
+<dl>
+<dt>Backend (topology root, or specific object added by that backend) </dt>
+<dd>The name of the hwloc backend/component that filled the topology. If several components were combined, multiple Backend keys may exist, with different values, for instance <code>x86</code> and <code>Linux</code> in the root object and <code>CUDA</code> in CUDA OS device objects.  </dd>
+<dt>SyntheticDescription </dt>
+<dd>The description string that was given to hwloc to build this synthetic topology.  </dd>
+<dt>hwlocVersion </dt>
+<dd>The version number of the hwloc library that was used to generate the topology. If the topology was loaded from XML, this is not the hwloc version that loaded it, but rather the first hwloc instance that exported the topology to XML earlier.  </dd>
+<dt>ProcessName </dt>
+<dd>The name of the process that contains the hwloc library that was used to generate the topology. If the topology was from XML, this is not the hwloc process that loaded it, but rather the first process that exported the topology to XML earlier.  </dd>
+</dl>
+<p> 
+</div><div class="subsection" id="attributes_info_cpu">
+ </p>
+<h2><a class="anchor" id="attributes_info_cpu"></a>
+CPU Information</h2>
+<p>These info attributes are attached to Package objects, or to the root object (Machine) if package locality information is missing.</p>
+<dl>
+<dt>CPUModel </dt>
+<dd>The processor model name. </dd>
+<dt>CPUVendor, CPUModelNumber, CPUFamilyNumber, CPUStepping </dt>
+<dd>The processor vendor name, model number, family number, and stepping number. Currently available for x86 and Xeon Phi processors on most systems, and for ia64 processors on Linux (except CPUStepping).  </dd>
+<dt>CPURevision </dt>
+<dd>A POWER/PowerPC-specific general processor revision number, currently only available on Linux.  </dd>
+<dt>CPUType </dt>
+<dd>A Solaris-specific general processor type name, such as "i86pc".  </dd>
+</dl>
+<p> 
+</div><div class="subsection" id="attributes_info_osdev">
+ </p>
+<h2><a class="anchor" id="attributes_info_osdev"></a>
+OS Device Information</h2>
+<p>These info attributes are attached to OS device objects specified in parentheses.</p>
+<dl>
+<dt>Vendor, Model, Revision, SerialNumber, Size, SectorSize (Block OS devices) </dt>
+<dd>The vendor and model names, revision, serial number, size (in KiB = 1024 bytes) and SectorSize (in bytes).  </dd>
+<dt>LinuxDeviceID (Block OS devices) </dt>
+<dd>The major/minor device number such as 8:0 of Linux device.  </dd>
+<dt>CXLRAMSize, CXLPMEMSize (CXL Memory Block OS devices) </dt>
+<dd>The size of the volatile (RAM) or persistent (PMEM) memory in a CXL Type-3 device . Sizes are in KiB (1024 bytes).  </dd>
+<dt>GPUVendor, GPUModel (GPU or Co-Processor OS devices) </dt>
+<dd>The vendor and model names of the GPU device.  </dd>
+<dt>OpenCLDeviceType, OpenCLPlatformIndex, </dt>
+<dd></dd>
+<dt>OpenCLPlatformName, OpenCLPlatformDeviceIndex (OpenCL OS devices) </dt>
+<dd>The type of OpenCL device, the OpenCL platform index and name, and the index of the device within the platform.  </dd>
+<dt>OpenCLComputeUnits, OpenCLGlobalMemorySize (OpenCL OS devices) </dt>
+<dd>The number of compute units and global memory size of an OpenCL device. Sizes are in KiB (1024 bytes).  </dd>
+<dt>LevelZeroVendor, LevelZeroModel, LevelZeroBrand, </dt>
+<dd></dd>
+<dt>LevelZeroSerialNumber, LevelZeroBoardNumber (LevelZero OS devices) </dt>
+<dd>The name of the vendor, device model, brand of a Level Zero device, and its serial and board numbers.  </dd>
+<dt>LevelZeroDriverIndex, LevelZeroDriverDeviceIndex (LevelZero OS devices) </dt>
+<dd>The index of the Level Zero driver within the list of drivers, and the index of the device within the list of devices managed by this driver.  </dd>
+<dt>LevelZeroUUID (LevelZero OS devices or subdevices) </dt>
+<dd>The UUID of the device or subdevice.  </dd>
+<dt>LevelZeroSubdevices (LevelZero OS devices) </dt>
+<dd>The number of subdevices below this OS device.  </dd>
+<dt>LevelZeroSubdeviceID (LevelZero OS subdevices) </dt>
+<dd>The index of this subdevice within its parent.  </dd>
+<dt>LevelZeroDeviceType (LevelZero OS devices or subdevices) </dt>
+<dd>A string describing the type of device, for instance "GPU", "CPU", "FPGA", etc.  </dd>
+<dt>LevelZeroNumSlices, LevelZeroNumSubslicesPerSlice, </dt>
+<dd></dd>
+<dt>LevelZeroNumEUsPerSubslice, LevelZeroNumThreadsPerEU (LevelZero OS devices or subdevices) </dt>
+<dd>The number of slices in the device, of subslices per slice, of execution units (EU) per subslice, and of threads per EU.  </dd>
+<dt>LevelZeroHBMSize, LevelZeroDDRSize, LevelZeroMemorySize (LevelZero OS devices or subdevices) </dt>
+<dd>The amount of HBM or DDR memory of a LevelZero device or subdevice. Sizes are in KiB (1024 bytes). If the type of memory could not be determined, the generic name LevelZeroMemorySize is used. For devices that contain subdevices, the amount reported in the root device includes the memories of all its subdevices.  </dd>
+<dt>LevelZeroCQGroups, LevelZeroCQGroup2 (LevelZero OS devices or subdevices) </dt>
+<dd>The number of completion queue groups, and the description of the third group (as <code>N*0xX</code> where <code>N</code> is the number of queues in the group, and <code>0xX</code> is the hexadecimal bitmask of <code>ze_command_queue_group_property_flag_t</code> listing properties of those queues).  </dd>
+<dt>AMDUUID, AMDSerial (RSMI GPU OS devices) </dt>
+<dd>The UUID and serial number of AMD GPUs.  </dd>
+<dt>RSMIVRAMSize, RSMIVisibleVRAMSize, RSMIGTTSize (RSMI GPU OS devices) </dt>
+<dd>The amount of GPU memory (VRAM), of GPU memory that is visible from the host (Visible VRAM), and of system memory that is usable by the GPU (Graphics Translation Table). Sizes are in KiB (1024 bytes).  </dd>
+<dt>XGMIHiveID (RSMI GPU OS devices) </dt>
+<dd>The ID of the group of GPUs (Hive) interconnected by XGMI links  </dd>
+<dt>XGMIPeers (RSMI GPU OS devices) </dt>
+<dd>The list of RSMI OS devices that are directly connected to the current device through XGMI links. They are given as a space-separated list of object names, for instance <em>rsmi2 rsmi3</em>.  </dd>
+<dt>NVIDIAUUID, NVIDIASerial (NVML GPU OS devices) </dt>
+<dd>The UUID and serial number of NVIDIA GPUs.  </dd>
+<dt>CUDAMultiProcessors, CUDACoresPerMP, </dt>
+<dd></dd>
+<dt>CUDAGlobalMemorySize, CUDAL2CacheSize, CUDASharedMemorySizePerMP (CUDA OS devices) </dt>
+<dd>The number of shared multiprocessors, the number of cores per multiprocessor, the global memory size, the (global) L2 cache size, and size of the shared memory in each multiprocessor of a CUDA device. Sizes are in KiB (1024 bytes).  </dd>
+<dt>VectorEngineModel, VectorEngineSerialNumber (VectorEngine OS devices) </dt>
+<dd>The model and serial number of a VectorEngine device.  </dd>
+<dt>VectorEngineCores, VectorEngineMemorySize, VectorEngineLLCSize, </dt>
+<dd></dd>
+<dt>VectorEngineL2Size, VectorEngineL1dSize, VectorEngineL1iSize (VectorEngine OS devices) </dt>
+<dd>The number of cores, memory size, and the sizes of the (global) last level cache and of L2, L1d and L1i caches of a VectorEngine device. Sizes are in KiB (1024 bytes).  </dd>
+<dt>VectorEngineNUMAPartitioned (VectorEngine OS devices) </dt>
+<dd>If this attribute exists, the VectorEngine device is configured in partitioned mode with multiple NUMA nodes.  </dd>
+<dt>Address, Port (Network interface OS devices) </dt>
+<dd>The MAC address and the port number of a software network interface, such as <code>eth4</code> on Linux.  </dd>
+<dt>NodeGUID, SysImageGUID, Port1State, Port2LID, Port2LMC, Port3GID1 (OpenFabrics OS devices) </dt>
+<dd>The node GUID and GUID mask, the state of a port #1 (value is 4 when active), the LID and LID mask count of port #2, and GID #1 of port #3.  </dd>
+<dt>BXIUUID (OpenFabrics BXI OS devices) </dt>
+<dd>The UUID of an Atos/Bull BXI HCA.  </dd>
+</dl>
+<p> 
+</div><div class="subsection" id="attributes_info_otherobjs">
+ </p>
+<h2><a class="anchor" id="attributes_info_otherobjs"></a>
+Other Object-specific Information</h2>
+<p>These info attributes are attached to objects specified in parentheses.</p>
+<dl>
+<dt>DAXDevice (NUMA Nodes) </dt>
+<dd>The name of the Linux DAX device that was used to expose a non-volatile memory region as a volatile NUMA node.  </dd>
+<dt>DAXType (NUMA Nodes or DAX OS devices) </dt>
+<dd>The type of memory exposed in a Linux DAX device or in the corresponding NUMA node, either "NVM" (non-volatile memory) or "SPM" (specific-purpose memory).  </dd>
+<dt>DAXParent (NUMA Nodes or DAX OS devices) </dt>
+<dd>A string describing the Linux sysfs hierarchy that exposes the DAX device, for instance containing "hmem1" for specific-purpose memory or "ndbus0" for NVDIMMs.  </dd>
+<dt></dt>
+<dd></dd>
+<dt>PCIBusID (GPUMemory NUMA Nodes) </dt>
+<dd>The PCI bus ID of the GPU whose memory is exposed in this NUMA node.  </dd>
+<dt>Inclusive (Caches) </dt>
+<dd>The inclusiveness of a cache (1 if inclusive, 0 otherwise). Currently only available on x86 processors.  </dd>
+<dt>SolarisProcessorGroup (Group) </dt>
+<dd>The Solaris kstat processor group name that was used to build this Group object.  </dd>
+<dt>PCIVendor, PCIDevice (PCI devices and bridges) </dt>
+<dd>The vendor and device names of the PCI device.  </dd>
+<dt>PCISlot (PCI devices or Bridges) </dt>
+<dd>The name/number of the physical slot where the device is plugged. If the physical device contains PCI bridges above the actual PCI device, the attribute may be attached to the highest bridge (i.e. the first object that actually appears below the physical slot).  </dd>
+<dt>Vendor, AssetTag, PartNumber, DeviceLocation, BankLocation (MemoryModule Misc objects) </dt>
+<dd>Information about memory modules (DIMMs) extracted from SMBIOS.  </dd>
+</dl>
+<p> 
+</div><div class="subsection" id="attributes_info_user">
+ </p>
+<h2><a class="anchor" id="attributes_info_user"></a>
+User-Given Information</h2>
+<p>Here is a non-exhaustive list of user-provided info attributes that have a special meaning: </p><dl>
+<dt>lstopoStyle </dt>
+<dd>Enforces the style of an object (background and text colors) in the graphical output of lstopo. See CUSTOM COLORS in the lstopo(1) manpage for details.  </dd>
+</dl>
+</div></div><!-- contents -->
+</div><!-- PageDoc -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00402.html b/doc/doxygen-doc/html/a00402.html
new file mode 100644
index 00000000..becfb013
--- /dev/null
+++ b/doc/doxygen-doc/html/a00402.html
@@ -0,0 +1,121 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Topology Attributes: Distances, Memory Attributes and CPU Kinds</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="PageDoc"><div class="header">
+  <div class="headertitle">
+<div class="title">Topology Attributes: Distances, Memory Attributes and CPU Kinds </div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p> 
+<div class="section">
+</p>
+<p>Besides the hierarchy of objects and individual object attributes (see <a class="el" href="a00401.html">Object attributes</a>), hwloc may also expose finer information about the hardware organization.</p>
+<p> 
+</div><div class="section" id="topoattrs_distances">
+ </p>
+<h1><a class="anchor" id="topoattrs_distances"></a>
+Distances</h1>
+<p>A machine with 4 CPUs may have identical links between every pairs of CPUs, or those CPUs could also only be connected through a ring. In the ring case, accessing the memory of nearby CPUs is slower than local memory, but it is also faster than accessing the memory of CPU on the opposite side of the ring. These deep details cannot be exposed in the hwloc hierarchy, that is why hwloc also exposes distances.</p>
+<p>Distances are matrices of values between sets of objects, usually latencies or bandwidths. By default, hwloc tries to get a matrix of relative latencies between NUMA nodes when exposed by the hardware.</p>
+<p>In the aforementioned ring case, the matrix could report 10 for latency between a NUMA node and itself, 20 for nearby nodes, and 30 for nodes that are opposites on the ring. Those are theoretical values exposed by hardware vendors (in the System Locality Distance Information Table (SLIT) in the ACPI) rather than physical latencies. They are mostly meant for comparing node relative distances.</p>
+<p>Distances structures currently created by hwloc are: </p><dl>
+<dt>NUMALatency (Linux, Solaris, FreeBSD) </dt>
+<dd>This is the matrix of theoretical latencies described above.  </dd>
+<dt>XGMIBandwidth (RSMI) </dt>
+<dd><p class="startdd">This is the matrix of unidirectional XGMI bandwidths between AMD GPUs (in MB/s). It contains 0 when there is no direct XGMI link between objects. Values on the diagonal are artificially set to very high so that local access always appears faster than remote access.</p>
+<p class="interdd">GPUs are identified by RSMI OS devices such as "rsmi0". They may be converted into the corresponding OpenCL or PCI devices using <a class="el" href="a00212.html#gab5df3ad1e8565ea0c2cf06412f6f6233" title="Return an object of a different type with same locality.">hwloc_get_obj_with_same_locality()</a> or the hwloc-annotate tool.</p>
+<p class="enddd"><a class="el" href="a00220.html#gabcadd041f3072999d68f2d94e38670f7" title="Apply a transformation to a distances structure.">hwloc_distances_transform()</a> or hwloc-annotate may also be used to transform this matrix into something more convenient, for instance by replacing bandwidths with numbers of links between peers.  </p>
+</dd>
+<dt>XGMIHops (RSMI) </dt>
+<dd>This matrix lists the number of XGMI hops between AMD GPUs. It reports 1 when there is a direct link between two distinct GPUs. If there is no XGMI route between them, the value is 0. The number of hops between a GPU and itself (on the diagonal) is 0 as well.  </dd>
+<dt>XeLinkBandwidth (LevelZero) </dt>
+<dd><p class="startdd">This is the matrix of unidirectional XeLink bandwidths between Intel GPUs (in MB/s). It contains 0 when there is no direct XeLink between objects. When there are multiple links, their bandwidth is aggregated.</p>
+<p class="interdd">Values on the diagonal are artificially set to very high so that local access always appears faster than remote access. This includes bandwidths between a (sub)device and itself, between a subdevice and its parent device, or between two subdevices of the same parent.</p>
+<p class="enddd">The matrix interconnects all LevelZero devices and subdevices (if any), even if some of them may have no link at all.  </p>
+</dd>
+<dt>NVLinkBandwidth (NVML) </dt>
+<dd><p class="startdd">This is the matrix of unidirectional NVLink bandwidths between NVIDIA GPUs (in MB/s). It contains 0 when there is no direct NVLink between objects. When there are multiple links, their bandwidth is aggregated. Values on the diagonal are artificially set to very high so that local access always appears faster than remote access.</p>
+<p class="interdd">On POWER platforms, NVLinks may also connects GPUs to CPUs. On NVIDIA platforms such as DGX-2, a NVSwitch may interconnect GPUs through NVLinks. In these cases, the distances structure is heterogeneous. GPUs always appear first in the matrix (as NVML OS devices such as "nvml0"), and non-GPU objects may appear at the end (Package for POWER processors, PCI device for NVSwitch).</p>
+<p class="interdd">NVML OS devices may be converted into the corresponding CUDA, OpenCL or PCI devices using <a class="el" href="a00212.html#gab5df3ad1e8565ea0c2cf06412f6f6233" title="Return an object of a different type with same locality.">hwloc_get_obj_with_same_locality()</a> or the hwloc-annotate tool.</p>
+<p class="interdd"><a class="el" href="a00220.html#gabcadd041f3072999d68f2d94e38670f7" title="Apply a transformation to a distances structure.">hwloc_distances_transform()</a> or hwloc-annotate may also be used to transform this matrix into something more convenient, for instance by removing switches or CPU ports, or by replacing bandwidths with numbers of links between peers.</p>
+<p class="enddd">When a NVSwitch interconnects GPUs, only links between one GPU and different NVSwitch ports are reported. They may be merged into a single switch port with <a class="el" href="a00220.html#gabcadd041f3072999d68f2d94e38670f7" title="Apply a transformation to a distances structure.">hwloc_distances_transform()</a> or hwloc-annotate. Or a transitive closure may also be applied to report the bandwidth between GPUs across the NVSwitch. </p>
+</dd>
+</dl>
+<p>Users may also specify their own matrices between any set of objects, even if these objects are of different types (e.g. bandwidths between GPUs and CPUs).</p>
+<p>The entire API is located in <a class="el" href="a00137_source.html">hwloc/distances.h</a>. See also <a class="el" href="a00220.html">Retrieve distances between objects</a>, as well as <a class="el" href="a00221.html">Helpers for consulting distance matrices</a> and <a class="el" href="a00222.html">Add distances between objects</a>.</p>
+<p> 
+</div><div class="section" id="topoattrs_memattrs">
+ </p>
+<h1><a class="anchor" id="topoattrs_memattrs"></a>
+Memory Attributes</h1>
+<p>Machines with heterogeneous memory, for instance high-bandwidth memory (HBM), normal memory (DDR), and/or high-capacity slow memory (such as non-volatile memory DIMMs, NVDIMMs) require applications to allocate buffers in the appropriate target memory depending on performance and capacity needs. Those target nodes may be exposed in the hwloc hierarchy as different memory children but there is a need for performance information to select the appropriate one.</p>
+<p>hwloc memory attributes are designed to expose memory information such as latency, bandwidth, etc. Users may also specify their own attributes and values.</p>
+<p>The memory attributes API is located in <a class="el" href="a00140_source.html">hwloc/memattrs.h</a>, see <a class="el" href="a00224.html">Comparing memory node attributes for finding where to allocate on</a> and <a class="el" href="a00225.html">Managing memory attributes</a> for details. See also an example in doc/examples/memory-attributes.c in the source tree.</p>
+<p> 
+</div><div class="section" id="topoattrs_cpukinds">
+ </p>
+<h1><a class="anchor" id="topoattrs_cpukinds"></a>
+CPU Kinds</h1>
+<p>Hybrid CPUs may contain different kinds of cores. The CPU kinds API in <a class="el" href="a00143_source.html">hwloc/cpukinds.h</a> provides a way to list the sets of PUs in each kind and get some optional information about their hardware characteristics and efficiency.</p>
+<p>If the operating system provides efficiency information (e.g. Windows 10, MacOS X / Darwin and some Linux kernels), it is used to rank hwloc CPU kinds by efficiency. Otherwise, hwloc implements several heuristics based on frequencies and core types (see HWLOC_CPUKINDS_RANKING in <a class="el" href="a00397.html">Environment Variables</a>).</p>
+<p>The ranking shows energy-efficient CPUs first, and high-performance power-hungry cores last.</p>
+<p>These CPU kinds may be annotated with the following native attributes: </p><dl>
+<dt>FrequencyMaxMHz (Linux) </dt>
+<dd>The maximal operating frequency of the core, as reported by <code>cpufreq</code> drivers on Linux.  </dd>
+<dt>FrequencyBaseMHz (Linux) </dt>
+<dd>The base operating frequency of the core, as reported by some <code>cpufreq</code> drivers on Linux (e.g. <code>intel_pstate</code>).  </dd>
+<dt>CoreType (x86) </dt>
+<dd>A string describing the kind of core, currently <code>IntelAtom</code> or <code>IntelCore</code>, as reported by the x86 CPUID instruction on some Intel processors.  </dd>
+<dt>LinuxCapacity (Linux) </dt>
+<dd>The Linux-specific CPU capacity found in sysfs, as reported by the Linux kernel on some recent platforms. Higher values usually mean that the Linux scheduler considers the core as high-performance rather than energy-efficient.  </dd>
+<dt>LinuxCPUType (Linux) </dt>
+<dd>The Linux-specific CPU type found in sysfs, such as <code>intel_atom_0</code>, as reported by future Linux kernels on some Intel processors.  </dd>
+<dt>DarwinCompatible (Darwin / Mac OS X) </dt>
+<dd>The compatibility attribute of the CPUs as found in the IO registry on Darwin / Mac OS X. For instance <code>apple,icestorm;ARM,v8</code> for energy-efficient cores and <code>apple,firestorm;ARM,v8</code> on performance cores on Apple M1 CPU.  </dd>
+</dl>
+<p>See <a class="el" href="a00226.html">Kinds of CPU cores</a> for details. </p>
+</div></div><!-- contents -->
+</div><!-- PageDoc -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00403.html b/doc/doxygen-doc/html/a00403.html
new file mode 100644
index 00000000..7c6bc06f
--- /dev/null
+++ b/doc/doxygen-doc/html/a00403.html
@@ -0,0 +1,85 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Importing and exporting topologies from/to XML files</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="PageDoc"><div class="header">
+  <div class="headertitle">
+<div class="title">Importing and exporting topologies from/to XML files </div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p> 
+<div class="section">
+</p>
+<p>hwloc offers the ability to export topologies to XML files and reload them later. This is for instance useful for loading topologies faster (see <a class="el" href="a00409.html#faq_xml">I do not want hwloc to rediscover my enormous machine topology every time I rerun a process</a>), manipulating other nodes' topology, or avoiding the need for privileged processes (see <a class="el" href="a00409.html#faq_privileged">Does hwloc require privileged access?</a>).</p>
+<p>Topologies may be exported to XML files thanks to <a class="el" href="a00218.html#ga333f79975b4eeb28a3d8fad3373583ce" title="Export the topology into an XML file.">hwloc_topology_export_xml()</a>, or to a XML memory buffer with <a class="el" href="a00218.html#gad33b7f7c11db10459505a3b1634fd3f1" title="Export the topology into a newly-allocated XML memory buffer.">hwloc_topology_export_xmlbuffer()</a>. The lstopo program can also serve as a XML topology export tool.</p>
+<p>XML topologies may then be reloaded later with <a class="el" href="a00204.html#ga879439b7ee99407ee911b3ac64e9a25e" title="Enable XML-file based topology.">hwloc_topology_set_xml()</a> and <a class="el" href="a00204.html#ga2745616b65595e1c1e579ecc7e461fa8" title="Enable XML based topology using a memory buffer (instead of a file, as with hwloc_topology_set_xml())...">hwloc_topology_set_xmlbuffer()</a>. The HWLOC_XMLFILE environment variable also tells hwloc to load the topology from the given XML file (see <a class="el" href="a00397.html">Environment Variables</a>).</p>
+<dl class="section note"><dt>Note</dt><dd>Loading XML topologies disables binding because the loaded topology may not correspond to the physical machine that loads it. This behavior may be reverted by asserting that loaded file really matches the underlying system with the HWLOC_THISSYSTEM environment variable or the <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b" title="Assume that the selected backend provides the topology for the system on which we are running.">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a> topology flag.</dd>
+<dd>
+The topology flag <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea1b66bbd66e900e5c837f71defb32ad89" title="Get the set of allowed resources from the local operating system even if the topology was loaded from...">HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES</a> may be used to load a XML topology that contains the entire machine and restrict it to the part that is actually available to the current process (e.g. when Linux Cgroup/Cpuset are used to restrict the set of resources).</dd>
+<dd>
+hwloc also offers the ability to export/import <a class="el" href="a00240.html">Topology differences</a>.</dd>
+<dd>
+XML topology files are not localized. They use a dot as a decimal separator. Therefore any exported topology can be reloaded on any other machine without requiring to change the locale.</dd>
+<dd>
+XML exports contain all details about the platform. It means that two very similar nodes still have different XML exports (e.g. some serial numbers or MAC addresses are different). If a less precise exporting/importing is required, one may want to look at <a class="el" href="a00404.html">Synthetic topologies</a> instead.</dd></dl>
+<p> 
+</div><div class="section" id="xml_backends">
+ </p>
+<h1><a class="anchor" id="xml_backends"></a>
+libxml2 and minimalistic XML backends</h1>
+<p>hwloc offers two backends for importing/exporting XML.</p>
+<p>First, it can use the libxml2 library for importing/exporting XML files. It features full XML support, for instance when those files have to be manipulated by non-hwloc software (e.g. a XSLT parser). The libxml2 backend is enabled by default if libxml2 development headers are available (the relevant development package is usually <code>libxml2-devel</code> or <code>libxml2-dev</code>).</p>
+<p>If libxml2 is not available at configure time, or if <code>--disable-libxml2</code> is passed, hwloc falls back to a custom backend. Contrary to the aforementioned full XML backend with libxml2, this minimalistic XML backend cannot be guaranteed to work with external programs. It should only be assumed to be compatible with the same hwloc release (even if using the libxml2 backend). Its advantage is, however, to always be available without requiring any external dependency.</p>
+<p>If libxml2 is available but the core hwloc library should not directly depend on it, the libxml2 support may be built as a dynamicall-loaded plugin. One should pass <code>--enable-plugins</code> to enable plugin support (when supported) and build as plugins all component that support it. Or pass <code>--enable-plugins=xml_libxml</code> to only build this libxml2 support as a plugin.</p>
+<p> 
+</div><div class="section" id="xml_errors">
+ </p>
+<h1><a class="anchor" id="xml_errors"></a>
+XML import error management</h1>
+<p>Importing XML files can fail at least because of file access errors, invalid XML syntax, non-hwloc-valid XML contents, or incompatibilities between hwloc releases (see <a class="el" href="a00409.html#faq_version_xml">Are XML topology files compatible between hwloc releases?</a>).</p>
+<p>Both backend cannot detect all these errors when the input XML file or buffer is selected (when <a class="el" href="a00204.html#ga879439b7ee99407ee911b3ac64e9a25e" title="Enable XML-file based topology.">hwloc_topology_set_xml()</a> or <a class="el" href="a00204.html#ga2745616b65595e1c1e579ecc7e461fa8" title="Enable XML based topology using a memory buffer (instead of a file, as with hwloc_topology_set_xml())...">hwloc_topology_set_xmlbuffer()</a> is called). Some errors such non-hwloc-valid contents can only be detected later when loading the topology with <a class="el" href="a00198.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a>.</p>
+<p>It is therefore strongly recommended to check the return value of both <a class="el" href="a00204.html#ga879439b7ee99407ee911b3ac64e9a25e" title="Enable XML-file based topology.">hwloc_topology_set_xml()</a> (or <a class="el" href="a00204.html#ga2745616b65595e1c1e579ecc7e461fa8" title="Enable XML based topology using a memory buffer (instead of a file, as with hwloc_topology_set_xml())...">hwloc_topology_set_xmlbuffer()</a>) and <a class="el" href="a00198.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a> to handle all these errors. </p>
+</div></div><!-- contents -->
+</div><!-- PageDoc -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00404.html b/doc/doxygen-doc/html/a00404.html
new file mode 100644
index 00000000..1d38a4df
--- /dev/null
+++ b/doc/doxygen-doc/html/a00404.html
@@ -0,0 +1,116 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Synthetic topologies</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="PageDoc"><div class="header">
+  <div class="headertitle">
+<div class="title">Synthetic topologies </div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p> 
+<div class="section">
+</p>
+<p>hwloc may load fake or remote topologies so as to consult them without having the underlying hardware available. Aside from loading XML topologies, hwloc also enables the building of <em>synthetic</em> topologies that are described by a single string listing the arity of each levels.</p>
+<p>For instance, lstopo may create a topology made of 2 packages, containing a single NUMA node and a L2 cache above two single-threaded cores:</p>
+<pre class="fragment">$ lstopo -i "pack:2 node:1 l2:1 core:2 pu:1" -
+Machine (2048MB)
+  Package L#0
+    NUMANode L#0 (P#0 1024MB)
+    L2 L#0 (4096KB)
+      Core L#0 + PU L#0 (P#0)
+      Core L#1 + PU L#1 (P#1)
+  Package L#1
+    NUMANode L#1 (P#1 1024MB)
+    L2 L#1 (4096KB)
+      Core L#2 + PU L#2 (P#2)
+      Core L#3 + PU L#3 (P#3)
+</pre><p>Replacing <code>-</code> with <code>file.xml</code> in this command line will export this topology to XML as usual.</p>
+<dl class="section note"><dt>Note</dt><dd>Synthetic topologies offer a very basic way to export a topology and reimport it on another machine. It is a lot less precise than XML but may still be enough when only the hierarchy of resources matters.</dd></dl>
+<p> 
+</div><div class="section" id="synthetic_string">
+ </p>
+<h1><a class="anchor" id="synthetic_string"></a>
+Synthetic description string</h1>
+<p>Each item in the description string gives the type of the level and the number of such children under each object of the previous level. That is why the above topology contains 4 cores (2 cores times 2 nodes).</p>
+<p>These type names must be written as <code>numanode</code>, <code>package</code>, <code>core</code>, <code>l2u</code>, <code>l1i</code>, <code>pu</code>, <code>group</code> (hwloc_obj_type_sscanf() is used for parsing the type names). They do not need to be written case-sensitively, nor entirely (as long as there is no ambiguity, 2 characters such as <code>ma</code> select a Machine level). Note that I/O and Misc objects are not available.</p>
+<p>Instead of specifying the type of each level, it is possible to just specify the arities and let hwloc choose all types according to usual topologies. The following examples are therefore equivalent: </p><pre class="fragment">$ lstopo -i "2 3 4 5 6"
+$ lstopo -i "Package:2 NUMANode:3 L2Cache:4 Core:5 PU:6"
+</pre><p>NUMA nodes are handled in a special way since they are not part of the main CPU hierarchy but rather attached below it as memory children. Thus, <code>NUMANode:3</code> actually means <code>Group:3</code> where one NUMA node is attached below each group. These groups are merged back into the parent when possible (typically when a single NUMA node is requested below each parent).</p>
+<p>It is also possible the explicitly attach NUMA nodes to specific levels. For instance, a topology similar to a Intel Xeon Phi processor (with 2 NUMA nodes per 16-core group) may be created with: </p><pre class="fragment">$ lstopo -i "package:1 group:4 [numa] [numa] core:16 pu:4"
+</pre><p>The root object does not appear in the synthetic description string since it is always a Machine object. Therefore the Machine type is disallowed in the description as well.</p>
+<p>A NUMA level (with a single NUMA node) is automatically added if needed.</p>
+<p>Each item may be followed parentheses containing a list of space-separated attributes. For instance: </p><ul>
+<li>
+<code>L2iCache:2(size=32kB)</code> specifies 2 children of 32kB level-2 instruction caches. The size may be specified in bytes (without any unit suffix) or as kB, KiB, MB, MiB, etc.  </li>
+<li>
+<code>NUMANode:3(memory=16MB)</code> specifies 3 NUMA nodes with 16MB each. The size may be specified in bytes (without any unit suffix) or as GB, GiB, TB, TiB, etc.  </li>
+<li>
+<code>PU:2(indexes=0,2,1,3)</code> specifies 2 PU children and the full list of OS indexes among the entire set of 4 PU objects.  </li>
+<li>
+<code>PU:2(indexes=numa:core)</code> specifies 2 PU children whose OS indexes are interleaved by NUMA node first and then by package.  </li>
+<li>
+Attributes in parentheses at the very beginning of the description apply to the root object.  </li>
+</ul>
+<p>hwloc command-line tools may modify a synthetic topology, for instance to customize object attributes, or to remove some objects to make the topology heterogeneous or asymmetric. See many examples in <a class="el" href="a00409.html#faq_create_asymmetric">How do I create a custom heterogeneous and asymmetric topology?</a>.</p>
+<p> 
+</div><div class="section" id="synthetic_use">
+ </p>
+<h1><a class="anchor" id="synthetic_use"></a>
+Loading a synthetic topology</h1>
+<p>Aside from lstopo, the hwloc programming interface offers the same ability by passing the synthetic description string to <a class="el" href="a00204.html#ga4fab186bb6181a00bcf585825fddd38d" title="Enable synthetic topology.">hwloc_topology_set_synthetic()</a> before <a class="el" href="a00198.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a>.</p>
+<p>Synthetic topologies are created by the <code>synthetic</code> component. This component may be enabled by force by setting the HWLOC_SYNTHETIC environment variable to something such as <code>node:2 core:3 pu:4</code>.</p>
+<p>Loading a synthetic topology disables binding support since the topology usually does not match the underlying hardware. Binding may be reenabled as usual by setting HWLOC_THISSYSTEM=1 in the environment or by setting the <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b" title="Assume that the selected backend provides the topology for the system on which we are running.">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a> topology flag.</p>
+<p> 
+</div><div class="section" id="synthetic_export">
+ </p>
+<h1><a class="anchor" id="synthetic_export"></a>
+Exporting a topology as a synthetic string</h1>
+<p>The function <a class="el" href="a00219.html#ga24b7864a1c588309c4749f621f03b4c7" title="Export the topology as a synthetic string.">hwloc_topology_export_synthetic()</a> may export a topology as a synthetic string. It offers a convenient way to quickly describe the contents of a machine. The lstopo tool may also perform such an export by forcing the output format.</p>
+<pre class="fragment">$ lstopo --of synthetic --no-io
+Package:1 L3Cache:1 L2Cache:2 L1dCache:1 L1iCache:1 Core:1 PU:2
+</pre><p>The exported string may be passed back to hwloc for recreating another similar topology (see also <a class="el" href="a00409.html#faq_version_synthetic">Are synthetic strings compatible between hwloc releases?</a>). The entire tree will be similar, but some attributes such as the processor model will be missing.</p>
+<p>Such an export is only possible if the topology is totally symmetric. It means that the <code>symmetric_subtree</code> field of the root object is set. Also memory children should be attached in a symmetric way (e.g. the same number of memory children below each Package object, etc.). However, I/O devices and Misc objects are ignored when looking at symmetry and exporting the string. </p>
+</div></div><!-- contents -->
+</div><!-- PageDoc -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00405.html b/doc/doxygen-doc/html/a00405.html
new file mode 100644
index 00000000..924e7a6b
--- /dev/null
+++ b/doc/doxygen-doc/html/a00405.html
@@ -0,0 +1,110 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Interoperability With Other Software</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="PageDoc"><div class="header">
+  <div class="headertitle">
+<div class="title">Interoperability With Other Software </div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p> 
+<div class="section">
+</p>
+<p>Although hwloc offers its own portable interface, it still may have to interoperate with specific or non-portable libraries that manipulate similar kinds of objects. hwloc therefore offers several specific "helpers" to assist converting between those specific interfaces and hwloc.</p>
+<p>Some external libraries may be specific to a particular OS; others may not always be available. The hwloc core therefore generally does not explicitly depend on these types of libraries. However, when a custom application uses or otherwise depends on such a library, it may optionally include the corresponding hwloc helper to extend the hwloc interface with dedicated helpers.</p>
+<p>Most of these helpers use structures that are specific to these external libraries and only meaningful on the local machine. If so, the helper requires the input topology to match the current machine. Some helpers also require I/O device discovery to be supported and enabled for the current topology.</p>
+<dl>
+<dt>Linux specific features </dt>
+<dd><p class="startdd"><a class="el" href="a00146_source.html">hwloc/linux.h</a> offers Linux-specific helpers that utilize some non-portable features of the Linux system, such as binding threads through their thread ID ("tid") or parsing kernel CPU mask files. See <a class="el" href="a00227.html">Linux-specific helpers</a>. </p>
+<p class="enddd"></p>
+</dd>
+<dt>Windows specific features </dt>
+<dd><p class="startdd"><a class="el" href="a00152_source.html">hwloc/windows.h</a> offers Windows-specific helpers to query information about Windows processor groups. See <a class="el" href="a00230.html">Windows-specific helpers</a>. </p>
+<p class="enddd"></p>
+</dd>
+<dt>Linux libnuma </dt>
+<dd><p class="startdd"><a class="el" href="a00149_source.html">hwloc/linux-libnuma.h</a> provides conversion helpers between hwloc CPU sets and libnuma-specific types, such as bitmasks. It helps you use libnuma memory-binding functions with hwloc CPU sets. See <a class="el" href="a00229.html">Interoperability with Linux libnuma bitmask</a> and <a class="el" href="a00228.html">Interoperability with Linux libnuma unsigned long masks</a>. </p>
+<p class="enddd"></p>
+</dd>
+<dt>Glibc </dt>
+<dd><p class="startdd"><a class="el" href="a00155_source.html">hwloc/glibc-sched.h</a> offers conversion routines between Glibc and hwloc CPU sets in order to use hwloc with functions such as sched_getaffinity() or pthread_attr_setaffinity_np(). See <a class="el" href="a00231.html">Interoperability with glibc sched affinity</a>. </p>
+<p class="enddd"></p>
+</dd>
+<dt>OpenFabrics Verbs </dt>
+<dd><p class="startdd"><a class="el" href="a00179_source.html">hwloc/openfabrics-verbs.h</a> helps interoperability with the OpenFabrics Verbs interface. For example, it can return a list of processors near an OpenFabrics device. It may also return the corresponding OS device hwloc object for further information (if I/O device discovery is enabled). See <a class="el" href="a00239.html">Interoperability with OpenFabrics</a>. </p>
+<p class="enddd"></p>
+</dd>
+<dt>OpenCL </dt>
+<dd><p class="startdd"><a class="el" href="a00158_source.html">hwloc/opencl.h</a> enables interoperability with the OpenCL interface. Only the AMD and NVIDIA implementations currently offer locality information. It may return the list of processors near a GPU given as a <code>cl_device_id</code>. It may also return the corresponding OS device hwloc object for further information (if I/O device discovery is enabled). See <a class="el" href="a00232.html">Interoperability with OpenCL</a>. </p>
+<p class="enddd"></p>
+</dd>
+<dt>oneAPI Level Zero </dt>
+<dd><p class="startdd"><a class="el" href="a00173_source.html">hwloc/levelzero.h</a> enables interoperability with the oneAPI Level Zero interface. It may return the list of processors near an accelerator or GPU. It may also return the corresponding OS device hwloc object for further information (if I/O device discovery is enabled). See <a class="el" href="a00237.html">Interoperability with the oneAPI Level Zero interface.</a>. </p>
+<p class="enddd"></p>
+</dd>
+<dt>AMD ROCm SMI Library (RSMI) </dt>
+<dd><p class="startdd"><a class="el" href="a00170_source.html">hwloc/rsmi.h</a> enables interoperability with the AMD ROCm SMI interface. It may return the list of processors near an AMD GPU. It may also return the corresponding OS device hwloc object for further information (if I/O device discovery is enabled). See <a class="el" href="a00236.html">Interoperability with the ROCm SMI Management Library</a>. </p>
+<p class="enddd"></p>
+</dd>
+<dt>NVIDIA CUDA </dt>
+<dd><p class="startdd"><a class="el" href="a00161_source.html">hwloc/cuda.h</a> and <a class="el" href="a00164_source.html">hwloc/cudart.h</a> enable interoperability with NVIDIA CUDA Driver and Runtime interfaces. For instance, it may return the list of processors near NVIDIA GPUs. It may also return the corresponding OS device hwloc object for further information (if I/O device discovery is enabled). See <a class="el" href="a00233.html">Interoperability with the CUDA Driver API</a> and <a class="el" href="a00234.html">Interoperability with the CUDA Runtime API</a>. </p>
+<p class="enddd"></p>
+</dd>
+<dt>NVIDIA Management Library (NVML) </dt>
+<dd><p class="startdd"><a class="el" href="a00167_source.html">hwloc/nvml.h</a> enables interoperability with the NVIDIA NVML interface. It may return the list of processors near a NVIDIA GPU given as a <code>nvmlDevice_t</code>. It may also return the corresponding OS device hwloc object for further information (if I/O device discovery is enabled). See <a class="el" href="a00235.html">Interoperability with the NVIDIA Management Library</a>. </p>
+<p class="enddd"></p>
+</dd>
+<dt>NVIDIA displays </dt>
+<dd><p class="startdd"><a class="el" href="a00176_source.html">hwloc/gl.h</a> enables interoperability with NVIDIA displays using the NV-CONTROL X extension (NVCtrl library). If I/O device discovery is enabled, it may return the OS device hwloc object that corresponds to a display given as a name such as <em>:0.0</em> or given as a port/device pair (server/screen). See <a class="el" href="a00238.html">Interoperability with OpenGL displays</a>. </p>
+<p class="enddd"></p>
+</dd>
+<dt>Taskset command-line tool </dt>
+<dd><p class="startdd">The taskset command-line tool is widely used for binding processes. It manipulates CPU set strings in a format that is slightly different from hwloc's one (it does not divide the string in fixed-size subsets and separates them with commas). To ease interoperability, hwloc offers routines to convert hwloc CPU sets from/to taskset-specific string format. See for instance <a class="el" href="a00217.html#ga5beb68a987fe48e5c5edef06ab260e14" title="Stringify a bitmap in the taskset-specific format.">hwloc_bitmap_taskset_snprintf()</a> in <a class="el" href="a00217.html">The bitmap API</a>.</p>
+<p class="interdd">Most hwloc command-line tools also support the <code>--taskset</code> option to manipulate taskset-specific strings. </p>
+<p class="enddd"></p>
+</dd>
+</dl>
+</div></div><!-- contents -->
+</div><!-- PageDoc -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00406.html b/doc/doxygen-doc/html/a00406.html
new file mode 100644
index 00000000..369c3de5
--- /dev/null
+++ b/doc/doxygen-doc/html/a00406.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Thread Safety</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="PageDoc"><div class="header">
+  <div class="headertitle">
+<div class="title">Thread Safety </div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p> 
+<div class="section">
+</p>
+<p>Like most libraries that mainly fill data structures, hwloc is not thread safe but rather reentrant: all state is held in a <a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38" title="Topology context.">hwloc_topology_t</a> instance without mutex protection. That means, for example, that two threads can safely operate on and modify two different <a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38" title="Topology context.">hwloc_topology_t</a> instances, but they should not simultaneously invoke functions that modify the <em>same</em> instance. Similarly, one thread should not modify a <a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38" title="Topology context.">hwloc_topology_t</a> instance while another thread is reading or traversing it. However, two threads can safely read or traverse the same <a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38" title="Topology context.">hwloc_topology_t</a> instance concurrently.</p>
+<p>When running in multiprocessor environments, be aware that proper thread synchronization and/or memory coherency protection is needed to pass hwloc data (such as <a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38" title="Topology context.">hwloc_topology_t</a> pointers) from one processor to another (e.g., a mutex, semaphore, or a memory barrier). Note that this is not a hwloc-specific requirement, but it is worth mentioning.</p>
+<p>For reference, <a class="el" href="a00198.html#ga9d1e76ee15a7dee158b786c30b6a6e38" title="Topology context.">hwloc_topology_t</a> modification operations include (but may not be limited to):</p>
+<dl>
+<dt>Creation and destruction </dt>
+<dd><p class="startdd"><code><a class="el" href="a00198.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa" title="Allocate a topology context.">hwloc_topology_init()</a>, <a class="el" href="a00198.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a>, <a class="el" href="a00198.html#ga9f34a640b6fd28d23699d4d084667b15" title="Terminate and free a topology context.">hwloc_topology_destroy()</a></code> (see <a class="el" href="a00198.html">Topology Creation and Destruction</a>) imply major modifications of the structure, including freeing some objects. No other thread cannot access the topology or any of its objects at the same time.</p>
+<p class="interdd">Also references to objects inside the topology are not valid anymore after these functions return. </p>
+<p class="enddd"></p>
+</dd>
+<dt>Runtime topology modifications </dt>
+<dd><p class="startdd"><code><a class="el" href="a00206.html#gad980782ade737900c5cf208946768c30" title="Add a MISC object as a leaf of the topology.">hwloc_topology_insert_misc_object()</a></code>, <code><a class="el" href="a00206.html#ga4cea4741165faf5323931a9ed8786ef7" title="Allocate a Group object to insert later with hwloc_topology_insert_group_object().">hwloc_topology_alloc_group_object()</a></code>, and <code><a class="el" href="a00206.html#ga1fc6012b3e1c249b83f48cb7bcacaa5b" title="Add more structure to the topology by adding an intermediate Group.">hwloc_topology_insert_group_object()</a></code> (see <a class="el" href="a00206.html">Modifying a loaded Topology</a>) may modify the topology significantly by adding objects inside the tree, changing the topology depth, etc.</p>
+<p class="interdd"><code><a class="el" href="a00222.html#ga1f5a29760ebb8f9af831e645315f553c" title="Commit a new distances structure.">hwloc_distances_add_commit()</a></code> and <code><a class="el" href="a00223.html#gac188d9b64d9560255ce5f6d0a20f9c0a" title="Remove all distance matrices from a topology.">hwloc_distances_remove()</a></code> (see <a class="el" href="a00222.html">Add distances between objects</a>) modify the list of distance structures in the topology, and the former may even insert new Group objects.</p>
+<p class="interdd"><code><a class="el" href="a00225.html#ga770657d1e44b09e93e09f623936c1e5f" title="Register a new memory attribute.">hwloc_memattr_register()</a></code> and <code><a class="el" href="a00225.html#ga960529c08b25cf15825e0f72ecceb504" title="Set an attribute value for a specific target NUMA node.">hwloc_memattr_set_value()</a></code> (see <a class="el" href="a00225.html">Managing memory attributes</a>) modify the memory attributes of the topology.</p>
+<p class="interdd"><code><a class="el" href="a00206.html#ga6db81ed13ac0a9d70cc80372ab537815" title="Restrict the topology to the given CPU set or nodeset.">hwloc_topology_restrict()</a></code> modifies the topology even more dramatically by removing some objects.</p>
+<p class="interdd"><code><a class="el" href="a00206.html#ga698ecd640d2b76742bba3829a145cd9a" title="Refresh internal structures after topology modification.">hwloc_topology_refresh()</a></code> updates some internal cached structures. (see below).</p>
+<p class="interdd">Although references to former objects <em>may</em> still be valid after insertion or restriction, it is strongly advised to not rely on any such guarantee and always re-consult the topology to reacquire new instances of objects. </p>
+<p class="enddd"></p>
+</dd>
+<dt>Consulting distances </dt>
+<dd><p class="startdd"><code><a class="el" href="a00220.html#ga613e6b2a5d0f06626ee8d0c12fa46691" title="Retrieve distance matrices.">hwloc_distances_get()</a></code> and its variants are thread-safe except if the topology was recently modified (because distances may involve objects that were removed).</p>
+<p class="interdd">Whenever the topology is modified (see above), <code><a class="el" href="a00206.html#ga698ecd640d2b76742bba3829a145cd9a" title="Refresh internal structures after topology modification.">hwloc_topology_refresh()</a></code> should be called in the same thread-safe context to force the refresh of internal distances structures. A call to <code><a class="el" href="a00220.html#ga613e6b2a5d0f06626ee8d0c12fa46691" title="Retrieve distance matrices.">hwloc_distances_get()</a></code> may also refresh distances-related structures.</p>
+<p class="interdd">Once this refresh has been performed, multiple <code><a class="el" href="a00220.html#ga613e6b2a5d0f06626ee8d0c12fa46691" title="Retrieve distance matrices.">hwloc_distances_get()</a></code> may then be performed concurrently by multiple threads. </p>
+<p class="enddd"></p>
+</dd>
+<dt>Consulting memory attributes </dt>
+<dd><p class="startdd">Functions consulting memory attributes in <a class="el" href="a00140_source.html">hwloc/memattrs.h</a> are thread-safe except if the topology was recently modified (because memory attributes may involve objects that were removed).</p>
+<p class="interdd">Whenever the topology is modified (see above), <code><a class="el" href="a00206.html#ga698ecd640d2b76742bba3829a145cd9a" title="Refresh internal structures after topology modification.">hwloc_topology_refresh()</a></code> should be called in the same thread-safe context to force the refresh of internal memory attribute structures. A call to <code><a class="el" href="a00224.html#ga297e4a9adc2272446a4c7449dacef0df" title="Return an attribute value for a specific target NUMA node.">hwloc_memattr_get_value()</a></code> or <code><a class="el" href="a00225.html#gac8c06c1c89ab352c5db8e04a75033513" title="Return the target NUMA nodes that have some values for a given attribute.">hwloc_memattr_get_targets()</a></code> may also refresh internal structures for a given memory attribute.</p>
+<p class="interdd">Once this refresh has been performed, multiple functions consulting memory attributes may then be performed concurrently by multiple threads. </p>
+<p class="enddd"></p>
+</dd>
+<dt>Locating topologies  </dt>
+<dd><p class="startdd"><code>hwloc_topology_set_*</code> (see <a class="el" href="a00205.html">Topology Detection Configuration and Query</a>) do not modify the topology directly, but they do modify internal structures describing the behavior of the upcoming invocation of <code><a class="el" href="a00198.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a></code>. Hence, all of these functions should not be used concurrently. </p>
+<p class="enddd"></p>
+</dd>
+</dl>
+</div></div><!-- contents -->
+</div><!-- PageDoc -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00407.html b/doc/doxygen-doc/html/a00407.html
new file mode 100644
index 00000000..4f1e3abe
--- /dev/null
+++ b/doc/doxygen-doc/html/a00407.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Components and plugins</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="PageDoc"><div class="header">
+  <div class="headertitle">
+<div class="title">Components and plugins </div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p> 
+<div class="section">
+</p>
+<p>hwloc is organized in components that are responsible for discovering objects. Depending on the topology configuration, some components will be used, some will be ignored. The usual default is to enable the native operating system component, (e.g. <code>linux</code> or <code>solaris</code>) and the <code>pci</code> miscellaneous component. If available, an architecture-specific component (such as <code>x86</code>) may also improve the topology detection.</p>
+<p>If a XML topology is loaded, the <code>xml</code> discovery component will be used instead of all other components. It internally uses a specific class of components for the actual XML import/export routines (<code>xml_libxml</code> and <code>xml_nolibxml</code>) but these will not be discussed here (see <a class="el" href="a00403.html#xml_backends">libxml2 and minimalistic XML backends</a>).</p>
+<p> 
+</div><div class="section" id="plugins_default">
+ </p>
+<h1><a class="anchor" id="plugins_default"></a>
+Components enabled by default</h1>
+<p>The hwloc core contains a list of components sorted by priority. Each one is enabled as long as it does not conflict with the previously enabled ones. This includes native operating system components, architecture-specific ones, and if available, I/O components such as <code>pci</code>.</p>
+<p>Usually the native operating system component (when it exists, e.g. <code>linux</code> or <code>aix</code>) is enabled first. Then hwloc looks for an architecture specific component (e.g. <code>x86</code>). Finally there also exist a basic component (<code>no_os</code>) that just tries to discover the number of PUs in the system.</p>
+<p>Each component discovers as much topology information as possible. Most of them, including most native OS components, do nothing unless the topology is still empty. Some others, such as <code>x86</code> and <code>pci</code>, can complete and annotate what other backends found earlier. Discovery is performed by phases: CPUs are first discovered, then memory is attached, then PCI, etc.</p>
+<p>Default priorities ensure that clever components are invoked first. Native operating system components have higher priorities, and are therefore invoked first, because they likely offer very detailed topology information. If needed, it will be later extended by architecture-specific information (e.g. from the <code>x86</code> component).</p>
+<p>If any configuration function such as <a class="el" href="a00204.html#ga879439b7ee99407ee911b3ac64e9a25e" title="Enable XML-file based topology.">hwloc_topology_set_xml()</a> is used before loading the topology, the corresponding component is enabled first. Then, as usual, hwloc enables any other component (based on priorities) that does not conflict.</p>
+<p>Certain components that manage a virtual topology, for instance XML topology import or synthetic topology description, conflict with all other components. Therefore, one of them may only be loaded (e.g. with <code><a class="el" href="a00204.html#ga879439b7ee99407ee911b3ac64e9a25e" title="Enable XML-file based topology.">hwloc_topology_set_xml()</a></code>) if no other component is enabled.</p>
+<p>The environment variable <code>HWLOC_COMPONENTS_VERBOSE</code> may be set to get verbose messages about component registration (including their priority) and enabling.</p>
+<p> 
+</div><div class="section" id="plugins_select">
+ </p>
+<h1><a class="anchor" id="plugins_select"></a>
+Selecting which components to use</h1>
+<p>If no topology configuration functions such as <code><a class="el" href="a00204.html#ga4fab186bb6181a00bcf585825fddd38d" title="Enable synthetic topology.">hwloc_topology_set_synthetic()</a></code> have been called, plugins may be selected with environment variables such as <code>HWLOC_XMLFILE</code>, <code>HWLOC_SYNTHETIC</code>, <code>HWLOC_FSROOT</code>, or <code>HWLOC_CPUID_PATH</code> (see <a class="el" href="a00397.html">Environment Variables</a>).</p>
+<p>Finally, the environment variable <code>HWLOC_COMPONENTS</code> resets the list of selected components. If the variable is set and empty (or set to a single comma separating nothing, since some operating systems do not accept empty variables), the normal plugin priority order is used.</p>
+<p>If the variable is set to <code>x86</code> in this variable will cause the <code>x86</code> component to take precedence over any other component, including the native operating system component. It is therefore loaded first, before hwloc tries to load all remaining non-conflicting components. In this case, <code>x86</code> would take care of discovering everything it supports, instead of only completing what the native OS information. This may be useful if the native component is buggy on some platforms.</p>
+<p>It is possible to prevent some components from being loaded by prefixing their name with <code>-</code> in the list. For instance <code>x86,-pci</code> will load the <code>x86</code> component, then let hwloc load all the usual components except <code>pci</code>. A single component phase may also be blacklisted, for instance with <code>-linux:io</code>. <a class="el" href="a00204.html#ga9ad41adf418cee1c0ee32ba9bd4a3d36" title="Prevent a discovery component from being used for a topology.">hwloc_topology_set_components()</a> may also be used inside the program to prevent the loading of a specific component (or phases) for the target topology.</p>
+<p>It is possible to prevent all remaining components from being loaded by placing <code>stop</code> in the environment variable. Only the components listed before this keyword will be enabled.</p>
+<p> 
+</div><div class="section" id="plugins_load">
+ </p>
+<h1><a class="anchor" id="plugins_load"></a>
+Loading components from plugins</h1>
+<p>Components may optionally be built as plugins so that the hwloc core library does not directly depend on their dependencies (for instance the <code>libpciaccess</code> library). Plugin support may be enabled with the <code>--enable-plugins</code> configure option. All components buildable as plugins will then be built as plugins. The configure option may be given a comma-separated list of component names to specify the exact list of components to build as plugins.</p>
+<p>Plugins are built as independent dynamic libraries that are installed in <code>$libdir/hwloc</code>. All plugins found in this directory are loaded during <code>topology_init()</code> (unless blacklisted in <code>HWLOC_PLUGINS_BLACKLIST</code>, see <a class="el" href="a00397.html">Environment Variables</a>). A specific list of directories (colon-separated) to scan may be specified in the <code>HWLOC_PLUGINS_PATH</code> environment variable.</p>
+<p>Note that loading a plugin just means that the corresponding component is registered to the hwloc core. Components are then only enabled if the topology configuration requests it, as explained in the previous sections.</p>
+<p>Also note that plugins should carefully be enabled and used when embedding hwloc in another project, see <a class="el" href="a00408.html">Embedding hwloc in Other Software</a> for details.</p>
+<p> 
+</div><div class="section" id="plugins_list">
+ </p>
+<h1><a class="anchor" id="plugins_list"></a>
+Existing components and plugins</h1>
+<p>All components distributed within hwloc are listed below. The list of actually available components may be listed at running with the <code>HWLOC_COMPONENTS_VERBOSE</code> environment variable (see <a class="el" href="a00397.html">Environment Variables</a>).</p>
+<dl>
+<dt>linux </dt>
+<dd>The official component for discovering CPU, memory and I/O devices on Linux. It discovers PCI devices without the help of external libraries such as libpciaccess, but requires the pci component for adding vendor/device names to PCI objects. It also discovers many kinds of Linux-specific OS devices.  </dd>
+<dt>aix, darwin, freebsd, hpux, netbsd, solaris, windows </dt>
+<dd>Each officially supported operating system has its own native component, which is statically built when supported, and which is used by default.  </dd>
+<dt>x86 </dt>
+<dd>The x86 architecture (either 32 or 64 bits) has its own component that may complete or replace the previously-found CPU information. It is statically built when supported.  </dd>
+<dt>bgq </dt>
+<dd>This component is specific to IBM BlueGene/Q compute node (running CNK). It is built and enabled by default when <code>--host=powerpc64-bgq-linux</code> is passed to configure (see <a class="el" href="a00409.html#faq_bgq">How do I build hwloc for BlueGene/Q?</a>).  </dd>
+<dt>no_os </dt>
+<dd>A basic component that just tries to detect the number of processing units in the system. It mostly serves on operating systems that are not natively supported. It is always statically built.  </dd>
+<dt>pci </dt>
+<dd>PCI object discovery uses the external pciaccess library (aka libpciaccess); see <a class="el" href="a00399.html">I/O Devices</a>. It may also annotate existing PCI devices with vendor and device names. <b>It may be built as a plugin</b>.  </dd>
+<dt>opencl </dt>
+<dd>The OpenCL component creates co-processor OS device objects such as <em>opencl0d0</em> (first device of the first OpenCL platform) or <em>opencl1d3</em> (fourth device of the second platform). Only the AMD and NVIDIA OpenCL implementations currently offer locality information. <b>It may be built as a plugin</b>.  </dd>
+<dt>rsmi </dt>
+<dd>This component creates GPU OS device objects such as <em>rsmi0</em> for describing AMD GPUs. <b>It may be built as a plugin</b>.  </dd>
+<dt>levelzero </dt>
+<dd>This component creates co-processor OS device objects such as <em>ze0</em> for describing oneAPI Level Zero devices. It may also create sub-OS-devices such as <em>ze0.0</em> inside those devices. <b>It may be built as a plugin</b>.  </dd>
+<dt>cuda </dt>
+<dd>This component creates co-processor OS device objects such as <em>cuda0</em> that correspond to NVIDIA GPUs used with CUDA library. <b>It may be built as a plugin</b>.  </dd>
+<dt>nvml </dt>
+<dd>Probing the NVIDIA Management Library creates OS device objects such as <em>nvml0</em> that are useful for batch schedulers. It also detects the actual PCIe link bandwidth without depending on power management state and without requiring administrator privileges. <b>It may be built as a plugin</b>.  </dd>
+<dt>gl </dt>
+<dd>Probing the NV-CONTROL X extension (NVCtrl library) creates OS device objects such as <em>:0.0</em> corresponding to NVIDIA displays. They are useful for graphical applications that need to place computation and/or data near a rendering GPU. <b>It may be built as a plugin</b>.  </dd>
+<dt>synthetic </dt>
+<dd>Synthetic topology support (see <a class="el" href="a00404.html">Synthetic topologies</a>) is always built statically.  </dd>
+<dt>xml </dt>
+<dd>XML topology import (see <a class="el" href="a00403.html">Importing and exporting topologies from/to XML files</a>) is always built statically. It internally uses one of the XML backends (see <a class="el" href="a00403.html#xml_backends">libxml2 and minimalistic XML backends</a>). <ul>
+<li>
+<b>xml_nolibxml</b> is a basic and hwloc-specific XML import/export. It is always statically built.  </li>
+<li>
+<b>xml_libxml</b> relies on the external libxml2 library for provinding a feature-complete XML import/export. <b>It may be built as a plugin</b>.   </li>
+</ul>
+</dd>
+<dt>fake </dt>
+<dd>A dummy plugin that does nothing but is used for debugging plugin support.  </dd>
+</dl>
+</div></div><!-- contents -->
+</div><!-- PageDoc -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00408.html b/doc/doxygen-doc/html/a00408.html
new file mode 100644
index 00000000..902ec5f5
--- /dev/null
+++ b/doc/doxygen-doc/html/a00408.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Embedding hwloc in Other Software</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="PageDoc"><div class="header">
+  <div class="headertitle">
+<div class="title">Embedding hwloc in Other Software </div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p> 
+<div class="section">
+</p>
+<p>It can be desirable to include hwloc in a larger software package (be sure to check out the LICENSE file) so that users don't have to separately download and install it before installing your software. This can be advantageous to ensure that your software uses a known-tested/good version of hwloc, or for use on systems that do not have hwloc pre-installed.</p>
+<p>When used in "embedded" mode, hwloc will:</p>
+<ul>
+<li>not install any header files</li>
+<li>not build any documentation files</li>
+<li>not build or install any executables or tests</li>
+<li>not build <code>libhwloc.*</code> &ndash; instead, it will build <code>libhwloc_embedded.*</code></li>
+</ul>
+<p>There are two ways to put hwloc into "embedded" mode. The first is directly from the configure command line:</p>
+<pre class="fragment">shell$ ./configure --enable-embedded-mode ...
+</pre><p>The second requires that your software project uses the GNU Autoconf / Automake / Libtool tool chain to build your software. If you do this, you can directly integrate hwloc's m4 configure macro into your configure script. You can then invoke hwloc's configuration tests and build setup by calling a m4 macro (see below).</p>
+<p>Although hwloc dynamic shared object plugins may be used in embedded mode, the embedder project will have to manually setup dlopen or libltdl in its build system so that hwloc can load its plugins at run time. Also, embedders should be aware of complications that can arise due to public and private linker namespaces (e.g., if the embedder project is loaded into a private namespace and then hwloc tries to dynamically load its plugins, such loading may fail since the hwloc plugins can't find the hwloc symbols they need). The embedder project is <b>strongly</b> advised not to use hwloc's dynamically loading plugins / dlopen / libltdl capability.</p>
+<p> 
+</div><div class="section" id="embedding_m4">
+ </p>
+<h1><a class="anchor" id="embedding_m4"></a>
+Using hwloc's M4 Embedding Capabilities</h1>
+<p>Every project is different, and there are many different ways of integrating hwloc into yours. What follows is <em>one</em> example of how to do it.</p>
+<p>If your project uses recent versions Autoconf, Automake, and Libtool to build, you can use hwloc's embedded m4 capabilities. We have tested the embedded m4 with projects that use Autoconf 2.65, Automake 1.11.1, and Libtool 2.2.6b. Slightly earlier versions of may also work but are untested. Autoconf versions prior to 2.65 are almost certain to not work.</p>
+<p>You can either copy all the config/hwloc*m4 files from the hwloc source tree to the directory where your project's m4 files reside, or you can tell aclocal to find more m4 files in the embedded hwloc's "config" subdirectory (e.g., add "-Ipath/to/embedded/hwloc/config" to your Makefile.am's ACLOCAL_AMFLAGS).</p>
+<p>The following macros can then be used from your configure script (only HWLOC_SETUP_CORE <em>must</em> be invoked if using the m4 macros):</p>
+<ul>
+<li><p class="startli">HWLOC_SETUP_CORE(config-dir-prefix, action-upon-success, action-upon-failure, print_banner_or_not): Invoke the hwloc configuration tests and setup the hwloc tree to build. The first argument is the prefix to use for AC_OUTPUT files &ndash; it's where the hwloc tree is located relative to <code>$top_srcdir</code>. Hence, if your embedded hwloc is located in the source tree at contrib/hwloc, you should pass <code>[contrib/hwloc]</code> as the first argument. If HWLOC_SETUP_CORE and the rest of <code>configure</code> completes successfully, then "make" traversals of the hwloc tree with standard Automake targets (all, clean, install, etc.) should behave as expected. For example, it is safe to list the hwloc directory in the SUBDIRS of a higher-level Makefile.am. The last argument, if not empty, will cause the macro to display an announcement banner that it is starting the hwloc core configuration tests.</p>
+<p class="startli">HWLOC_SETUP_CORE will set the following environment variables and AC_SUBST them: HWLOC_EMBEDDED_CFLAGS, HWLOC_EMBEDDED_CPPFLAGS, and HWLOC_EMBEDDED_LIBS. These flags are filled with the values discovered in the hwloc-specific m4 tests, and can be used in your build process as relevant. The _CFLAGS, _CPPFLAGS, and _LIBS variables are necessary to build libhwloc (or libhwloc_embedded) itself.</p>
+<p class="startli">HWLOC_SETUP_CORE also sets HWLOC_EMBEDDED_LDADD environment variable (and AC_SUBSTs it) to contain the location of the libhwloc_embedded.la convenience Libtool archive. It can be used in your build process to link an application or other library against the embedded hwloc library.</p>
+<p class="startli"><b>NOTE: If the HWLOC_SET_SYMBOL_PREFIX macro is used, it must be invoked <em>before</em> HWLOC_SETUP_CORE.</b></p>
+</li>
+<li>HWLOC_BUILD_STANDALONE: HWLOC_SETUP_CORE defaults to building hwloc in an "embedded" mode (described above). If HWLOC_BUILD_STANDALONE is invoked *before* HWLOC_SETUP_CORE, the embedded definitions will not apply (e.g., libhwloc.la will be built, not libhwloc_embedded.la).</li>
+<li>HWLOC_SET_SYMBOL_PREFIX(foo_): Tells the hwloc to prefix all of hwloc's types and public symbols with "foo_"; meaning that function hwloc_init() becomes foo_hwloc_init(). Enum values are prefixed with an upper-case translation if the prefix supplied; HWLOC_OBJ_CORE becomes FOO_hwloc_OBJ_CORE. This is recommended behavior if you are including hwloc in middleware &ndash; it is possible that your software will be combined with other software that links to another copy of hwloc. If both uses of hwloc utilize different symbol prefixes, there will be no type/symbol clashes, and everything will compile, link, and run successfully. If you both embed hwloc without changing the symbol prefix and also link against an external hwloc, you may get multiple symbol definitions when linking your final library or application.</li>
+<li>HWLOC_SETUP_DOCS, HWLOC_SETUP_UTILS, HWLOC_SETUP_TESTS: These three macros only apply when hwloc is built in "standalone" mode (i.e., they should NOT be invoked unless HWLOC_BUILD_STANDALONE has already been invoked).</li>
+<li>HWLOC_DO_AM_CONDITIONALS: If you embed hwloc in a larger project and build it conditionally with Automake (e.g., if HWLOC_SETUP_CORE is invoked conditionally), you must unconditionally invoke HWLOC_DO_AM_CONDITIONALS to avoid warnings from Automake (for the cases where hwloc is not selected to be built). This macro is necessary because hwloc uses some AM_CONDITIONALs to build itself, and AM_CONDITIONALs cannot be defined conditionally. Note that it is safe (but unnecessary) to call HWLOC_DO_AM_CONDITIONALS even if HWLOC_SETUP_CORE is invoked unconditionally. If you are not using Automake to build hwloc, this macro is unnecessary (and will actually cause errors because it invoked AM_* macros that will be undefined).</li>
+</ul>
+<p><b>NOTE:</b> When using the HWLOC_SETUP_CORE m4 macro, it may be necessary to explicitly invoke AC_CANONICAL_TARGET (which requires config.sub and config.guess) and/or AC_USE_SYSTEM_EXTENSIONS macros early in the configure script (e.g., after AC_INIT but before AM_INIT_AUTOMAKE). See the Autoconf documentation for further information.</p>
+<p>Also note that hwloc's top-level configure.ac script uses exactly the macros described above to build hwloc in a standalone mode (by default). You may want to examine it for one example of how these macros are used.</p>
+<p> 
+</div><div class="section" id="embedding_example">
+ </p>
+<h1><a class="anchor" id="embedding_example"></a>
+Example Embedding hwloc</h1>
+<p>Here's an example of integrating with a larger project named sandbox that already uses Autoconf, Automake, and Libtool to build itself:</p>
+<pre class="fragment"># First, cd into the sandbox project source tree
+shell$ cd sandbox
+shell$ cp -r /somewhere/else/hwloc-&lt;version&gt; my-embedded-hwloc
+shell$ edit Makefile.am
+  1. Add "-Imy-embedded-hwloc/config" to ACLOCAL_AMFLAGS
+  2. Add "my-embedded-hwloc" to SUBDIRS
+  3. Add "$(HWLOC_EMBEDDED_LDADD)" and "$(HWLOC_EMBEDDED_LIBS)" to 
+     sandbox's executable's LDADD line.  The former is the name of the 
+     Libtool convenience library that hwloc will generate.  The latter 
+     is any dependent support libraries that may be needed by 
+     $(HWLOC_EMBEDDED_LDADD).
+  4. Add "$(HWLOC_EMBEDDED_CFLAGS)" to AM_CFLAGS
+  5. Add "$(HWLOC_EMBEDDED_CPPFLAGS)" to AM_CPPFLAGS
+shell$ edit configure.ac
+  1. Add "HWLOC_SET_SYMBOL_PREFIX(sandbox_hwloc_)" line
+  2. Add "HWLOC_SETUP_CORE([my-embedded-hwloc], [happy=yes], [happy=no])" line
+  3. Add error checking for happy=no case
+shell$ edit sandbox.c
+  1. Add #include &lt;hwloc.h&gt;
+  2. Add calls to sandbox_hwloc_init() and other hwloc API functions
+</pre><p>Now you can bootstrap, configure, build, and run the sandbox as normal &ndash; all calls to "sandbox_hwloc_*" will use the embedded hwloc rather than any system-provided copy of hwloc. </p>
+</div></div><!-- contents -->
+</div><!-- PageDoc -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00409.html b/doc/doxygen-doc/html/a00409.html
new file mode 100644
index 00000000..e39be4bd
--- /dev/null
+++ b/doc/doxygen-doc/html/a00409.html
@@ -0,0 +1,420 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Frequently Asked Questions (FAQ)</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="PageDoc"><div class="header">
+  <div class="headertitle">
+<div class="title">Frequently Asked Questions (FAQ) </div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p> 
+<div class="section" id="faq1">
+ </p>
+<h1><a class="anchor" id="faq1"></a>
+Concepts</h1>
+<h2><a class="anchor" id="faq_why"></a>
+I only need binding, why should I use hwloc ?</h2>
+<p>hwloc is its portable API that works on a variety of operating systems. It supports binding of threads, processes and memory buffers (see <a class="el" href="a00202.html">CPU binding</a> and <a class="el" href="a00203.html">Memory binding</a>). Even if some features are not supported on some systems, using hwloc is much easier than reimplementing your own portability layer.</p>
+<p>Moreover, hwloc provides knowledge of cores and hardware threads. It offers easy ways to bind tasks to individual hardware threads, or to entire multithreaded cores, etc. See <a class="el" href="a00409.html#faq_smt">How may I ignore symmetric multithreading, hyper-threading, etc. in hwloc?</a>. Most alternative software for binding do not even know whether each core is single-threaded, multithreaded or hyper-threaded. They would bind to individual threads without any way to know whether multiple tasks are in the same physical core.</p>
+<p>However, using hwloc comes with an overhead since a topology must be loaded before gathering information and binding tasks or memory. Fortunately this overhead may be significantly reduced by filtering non-interesting information out of the topology.</p>
+<p><br  />
+ For instance, the default configuration is to keep all objects enabled (except I/Os and instruction caches). The following code tells hwloc to build a much smaller topology that only contains Cores (explicitly filtered-in below), hardware threads (PUs, cannot be filtered-out), NUMA nodes (cannot be filtered-out), and the root object (usually a Machine; the root cannot be removed without breaking the tree):</p>
+<pre class="fragment">hwloc_topology_t topology;
+hwloc_topology_init(&amp;topology);
+/* filter everything out */
+hwloc_topology_set_all_types_filter(topology, HWLOC_TYPE_FILTER_KEEP_NONE);
+/* filter Cores back in */
+hwloc_topology_set_type_filter(topology, HWLOC_OBJ_CORE, HWLOC_TYPE_FILTER_KEEP_ALL);
+hwloc_topology_load(topology);
+</pre><p>However, one should remember that filtering such objects out removes locality information from the hwloc tree. For instance, we do not know anymore which PU is close to which NUMA node. This would be useful to applications that explicitly want to place specific memory buffers close to specific tasks. Those applications should also tell hwloc to keep Group objects that bring structure information: </p><pre class="fragment">hwloc_topology_set_type_filter(topology, HWLOC_OBJ_GROUP, HWLOC_TYPE_FILTER_KEEP_STRUCTURE);
+</pre><p><br  />
+ Starting with hwloc 2.8, it is also possible to ignore distances between objects, memory performance attributes, and kinds of CPU cores, by setting topology flags before load: </p><pre class="fragment">[...]
+/* disable distances, memory attributes and CPU kinds */
+hwloc_topology_set_flags(topology, HWLOC_TOPOLOGY_FLAG_NO_DISTANCES
+                                   |HWLOC_TOPOLOGY_FLAG_NO_MEMATTRS
+                                   |HWLOC_TOPOLOGY_FLAG_NO_CPUKINDS);
+[...]
+hwloc_topology_load(topology);
+</pre><h2><a class="anchor" id="faq_indexes"></a>
+Should I use logical or physical/OS indexes? and how?</h2>
+<p>One of the original reasons why hwloc was created is that <b>physical/OS indexes</b> (<code>obj-&gt;os_index</code>) are often crazy and unpredictable: processors numbers are usually non-contiguous (processors 0 and 1 are not physically close), they vary from one machine to another, and may even change after a BIOS or system update. This numbers make task placement hardly portable. Moreover some objects have no physical/OS numbers (caches), and some objects have non-unique numbers (core numbers are only unique within a socket). Physical/OS indexes are only guaranteed to exist and be unique for PU and NUMA nodes.</p>
+<p>hwloc therefore introduces <b>logical indexes</b> (<code>obj-&gt;logical_index</code>) which are portable, contiguous and logically ordered (based on the resource organization in the locality tree). In general, one should only use logical indexes and just let hwloc do the internal conversion when really needed (when talking to the OS and hardware).</p>
+<p>hwloc developers recommends that users do not use physical/OS indexes unless they really know what they are doing. The main reason for still using physical/OS indexes is when interacting with non-hwloc tools such as numactl or taskset, or when reading hardware information from raw sources such as /proc/cpuinfo.</p>
+<p>lstopo options <code>-l</code> and <code>-p</code> may be used to switch between logical indexes (prefixed with <code>L#</code>) and physical/OS indexes (<code>P#</code>). Converting one into the other may also be achieved with hwloc-calc which may manipulate either logical or physical indexes as input or output. See also <a class="el" href="a00396.html#cli_hwloc_calc">hwloc-calc</a>.</p>
+<pre class="fragment"># Convert PU with physical number 3 into logical number
+$ hwloc-calc -I pu --physical-input --logical-output pu:3
+5
+
+# Convert a set of NUMA nodes from logical to physical
+# (beware that the output order may not match the input order)
+$ hwloc-calc -I numa --logical-input --physical-output numa:2-3 numa:7
+0,2,5
+</pre><h2><a class="anchor" id="faq_structural"></a>
+hwloc is only a structural model, it ignores performance models, memory bandwidth, etc.?</h2>
+<p>hwloc is indeed designed to provide applications with a structural model of the platform. This is an orthogonal approach to describing the machine with performance models, for instance using memory bandwidth or latencies measured by benchmarks. We believe that both approaches are important for helping application make the most of the hardware.</p>
+<p>For instance, on a dual-processor host with four cores each, hwloc clearly shows which four cores are together. Latencies between all pairs of cores of the same processor are likely identical, and also likely lower than the latency between cores of different processors. However, the structural model cannot guarantee such implementation details. On the other side, performance models would reveal such details without always clearly identifying which cores are in the same processor.</p>
+<p>The focus of hwloc is mainly of the structural modeling side. However, hwloc lets user adds performance information to the topology through distances (see <a class="el" href="a00402.html#topoattrs_distances">Distances</a>), memory attributes (see <a class="el" href="a00402.html#topoattrs_memattrs">Memory Attributes</a>) or even custom annotations (see <a class="el" href="a00409.html#faq_annotate">How do I annotate the topology with private notes?</a>). hwloc may also use such distance information for grouping objects together (see <a class="el" href="a00409.html#faq_onedim">hwloc only has a one-dimensional view of the architecture, it ignores distances?</a> and <a class="el" href="a00409.html#faq_groups">What are these Group objects in my topology?</a>).</p>
+<h2><a class="anchor" id="faq_onedim"></a>
+hwloc only has a one-dimensional view of the architecture, it ignores distances?</h2>
+<p>hwloc places all objects in a tree. Each level is a one-dimensional view of a set of similar objects. All children of the same object (siblings) are assumed to be equally interconnected (same distance between any of them), while the distance between children of different objects (cousins) is supposed to be larger.</p>
+<p>Modern machines exhibit complex hardware interconnects, so this tree may miss some information about the actual physical distances between objects. The hwloc topology may therefore be annotated with distance information that may be used to build a more realistic representation (multi-dimensional) of each level. For instance, there can be a distance matrix that representing the latencies between any pair of NUMA nodes if the BIOS and/or operating system reports them.</p>
+<p>For more information about the hwloc distances, see <a class="el" href="a00402.html#topoattrs_distances">Distances</a>.</p>
+<h2><a class="anchor" id="faq_groups"></a>
+What are these Group objects in my topology?</h2>
+<p>hwloc comes with a set of predefined object types (Core, Package, NUMA node, Caches) that match the vast majority of hardware platforms. The <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56" title="Group objects. Objects which do not fit in the above but are detected by hwloc and are useful to take...">HWLOC_OBJ_GROUP</a> type was designed for cases where this set is not sufficient. Groups may be used anywhere to add more structure information to the topology, for instance to show that 2 out of 4 NUMA nodes are actually closer than the others. When applicable, the <code>subtype</code> field describes why a Group was actually added (see also <a class="el" href="a00401.html#attributes_normal">Normal attributes</a>).</p>
+<p>hwloc currently uses Groups for the following reasons: </p><ul>
+<li>
+NUMA parents when memory locality does not match any existing object. </li>
+<li>
+I/O parents when I/O locality does not match any existing object. </li>
+<li>
+Distance-based groups made of close objects. </li>
+<li>
+AMD Bulldozer dual-core compute units (<code>subtype</code> is <code>ComputeUnit</code>, in the x86 backend), but these objects are usually merged with the L2 caches. </li>
+<li>
+Intel Extended Topology Enumeration levels (in the x86 backend). </li>
+<li>
+Windows processor groups when HWLOC_WINDOWS_PROCESSOR_GROUP_OBJS=1 is set in the environment (except if they contain exactly a single NUMA node, or a single Package, etc.). </li>
+<li>
+IBM S/390 "Books" on Linux (<code>subtype</code> is <code>Book</code>). </li>
+<li>
+Linux Clusters of CPUs (<code>subtype</code> is <code>Cluster</code>), for instance for ARM cores sharing of some internal cache or bus, or x86 cores sharing a L2 cache (since Linux kernel 5.16). <code>HWLOC_DONT_MERGE_CLUSTER_GROUPS=1</code> may be set in the environment to disable the automerging of these groups with identical caches, etc.  </li>
+<li>
+AIX unknown hierarchy levels. </li>
+</ul>
+<p>hwloc Groups are only kept if no other object has the same locality information. It means that a Group containing a single child is merged into that child. And a Group is merged into its parent if it is its only child. For instance a Windows processor group containing a single NUMA node would be merged with that NUMA node since it already contains the relevant hierarchy information.</p>
+<p>When inserting a custom Group with hwloc_hwloc_topology_insert_group_object(), this merging may be disabled by setting its <code>dont_merge</code> attribute.</p>
+<h2><a class="anchor" id="faq_asymmetric"></a>
+What happens if my topology is asymmetric?</h2>
+<p>hwloc supports asymmetric topologies even if most platforms are usually symmetric. For example, there could be different types of processors in a single machine, each with different numbers of cores, symmetric multithreading, or levels of caches.</p>
+<p>In practice, asymmetric topologies are rare but occur for at least two reasons: </p><ul>
+<li>
+Intermediate groups may added for I/O affinity: on a 4-package machine, an I/O bus may be connected to 2 packages. These packages are below an additional Group object, while the other packages are not (see also <a class="el" href="a00409.html#faq_groups">What are these Group objects in my topology?</a>). </li>
+<li>
+If only part of a node is available to the current process, for instance because the resource manager uses Linux Cgroups to restrict process resources, some cores (or NUMA nodes) will disappear from the topology (unless flag <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258" title="Detect the whole system, ignore reservations, include disallowed objects.">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a> was passed). On a 32-core machine where 12 cores were allocated to the process, this may lead to one CPU package with 8 cores, another one with only 4 cores, and two missing packages.  </li>
+</ul>
+<p>To understand how hwloc manages such cases, one should first remember the meaning of levels and cousin objects. All objects of the same type are gathered as horizontal levels with a given depth. They are also connected through the cousin pointers of the <a class="el" href="a00253.html" title="Structure of a topology object.">hwloc_obj</a> structure. Object attribute (cache depth and type, group depth) are also taken in account when gathering objects as horizontal levels. To be clear: there will be one level for L1i caches, another level for L1d caches, another one for L2, etc.</p>
+<p>If the topology is asymmetric (e.g., if a group is missing above some processors), a given horizontal level will still exist if there exist any objects of that type. However, some branches of the overall tree may not have an object located in that horizontal level. Note that this specific hole within one horizontal level does not imply anything for other levels. All objects of the same type are gathered in horizontal levels even if their parents or children have different depths and types.</p>
+<p>See the diagram in <a class="el" href="a00395.html">Terms and Definitions</a> for a graphical representation of such topologies.</p>
+<p>Moreover, it is important to understand that a same parent object may have children of different types (and therefore, different depths). <b>These children are therefore siblings (because they have the same parent), but they are <em>not</em> cousins (because they do not belong to the same horizontal level).</b></p>
+<h2><a class="anchor" id="faq_nosmt"></a>
+What happens to my topology if I disable symmetric multithreading, hyper-threading, etc. in the system?</h2>
+<p>hwloc creates one PU (processing unit) object per hardware thread. If your machine supports symmetric multithreading, for instance Hyper-Threading, each Core object may contain multiple PU objects: </p><pre class="fragment">$ lstopo -
+...
+  Core L#0
+    PU L#0 (P#0)
+    PU L#1 (P#2)
+  Core L#1
+    PU L#2 (P#1)
+    PU L#3 (P#3)
+</pre><p>x86 machines usually offer the ability to disable hyper-threading in the BIOS. Or it can be disabled on the Linux kernel command-line at boot time, or later by writing in sysfs virtual files.</p>
+<p>If you do so, the hwloc topology structure does not significantly change, but some PU objects will not appear anymore. No level will disappear, you will see the same number of Core objects, but each of them will contain a single PU now. The PU level does not disappear either (remember that hwloc topologies always contain a PU level at the bottom of the topology) even if there is a single PU object per Core parent. </p><pre class="fragment">$ lstopo -
+...
+  Core L#0
+    PU L#0 (P#0)
+  Core L#1
+    PU L#1 (P#1)
+</pre><h2><a class="anchor" id="faq_smt"></a>
+How may I ignore symmetric multithreading, hyper-threading, etc. in hwloc?</h2>
+<p>First, see <a class="el" href="a00409.html#faq_nosmt">What happens to my topology if I disable symmetric multithreading, hyper-threading, etc. in the system?</a> for more information about multithreading.</p>
+<p>If you need to ignore symmetric multithreading in software, you should likely manipulate hwloc Core objects directly: </p><pre class="fragment">/* get the number of cores */
+unsigned nbcores = hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_CORE);
+...
+/* get the third core below the first package */
+hwloc_obj_t package, core;
+package = hwloc_get_obj_by_type(topology, HWLOC_OBJ_PACKAGE, 0);
+core = hwloc_get_obj_inside_cpuset_by_type(topology, package-&gt;cpuset,
+                                           HWLOC_OBJ_CORE, 2);
+</pre><p>Whenever you want to bind a process or thread to a core, make sure you singlify its cpuset first, so that the task is actually bound to a single thread within this core (to avoid useless migrations). </p><pre class="fragment">/* bind on the second core */
+hwloc_obj_t core = hwloc_get_obj_by_type(topology, HWLOC_OBJ_CORE, 1);
+hwloc_cpuset_t set = hwloc_bitmap_dup(core-&gt;cpuset);
+hwloc_bitmap_singlify(set);
+hwloc_set_cpubind(topology, set, 0);
+hwloc_bitmap_free(set);
+</pre><p>With hwloc-calc or hwloc-bind command-line tools, you may specify that you only want a single-thread within each core by asking for their first PU object: </p><pre class="fragment">$ hwloc-calc core:4-7
+0x0000ff00
+$ hwloc-calc core:4-7.pu:0
+0x00005500
+</pre><p>When binding a process on the command-line, you may either specify the exact thread that you want to use, or ask hwloc-bind to singlify the cpuset before binding </p><pre class="fragment">$ hwloc-bind core:3.pu:0 -- echo "hello from first thread on core #3"
+hello from first thread on core #3
+...
+$ hwloc-bind core:3 --single -- echo "hello from a single thread on core #3"
+hello from a single thread on core #3
+</pre><p> 
+</div><div class="section" id="faq2">
+ </p>
+<h1><a class="anchor" id="faq2"></a>
+Advanced</h1>
+<h2><a class="anchor" id="faq_xml"></a>
+I do not want hwloc to rediscover my enormous machine topology every time I rerun a process</h2>
+<p>Although the topology discovery is not expensive on common machines, its overhead may become significant when multiple processes repeat the discovery on large machines (for instance when starting one process per core in a parallel application). The machine topology usually does not vary much, except if some cores are stopped/restarted or if the administrator restrictions are modified. Thus rediscovering the whole topology again and again may look useless.</p>
+<p>For this purpose, hwloc offers XML import/export and shared memory features.</p>
+<p>XML lets you save the discovered topology to a file (for instance with the lstopo program) and reload it later by setting the HWLOC_XMLFILE environment variable. The HWLOC_THISSYSTEM environment variable should also be set to 1 to assert that loaded file is really the underlying system.</p>
+<p>Loading a XML topology is usually much faster than querying multiple files or calling multiple functions of the operating system. It is also possible to manipulate such XML files with the C programming interface, and the import/export may also be directed to memory buffer (that may for instance be transmitted between applications through a package). See also <a class="el" href="a00403.html">Importing and exporting topologies from/to XML files</a>.</p>
+<dl class="section note"><dt>Note</dt><dd>The environment variable HWLOC_THISSYSTEM_ALLOWED_RESOURCES may be used to load a XML topology that contains the entire machine and restrict it to the part that is actually available to the current process (e.g. when Linux Cgroup/Cpuset are used to restrict the set of resources). See <a class="el" href="a00397.html">Environment Variables</a>.</dd></dl>
+<p>Shared-memory topologies consist in one process exposing its topology in a shared-memory buffer so that other processes (running on the same machine) may use it directly. This has the advantage of reducing the memory footprint since a single topology is stored in physical memory for multiple processes. However, it requires all processes to map this shared-memory buffer at the same virtual address, which may be difficult in some cases. This API is described in <a class="el" href="a00241.html">Sharing topologies between processes</a>.</p>
+<h2><a class="anchor" id="faq_multitopo"></a>
+How many topologies may I use in my program?</h2>
+<p>hwloc lets you manipulate multiple topologies at the same time. However, these topologies consume memory and system resources (for instance file descriptors) until they are destroyed. It is therefore discouraged to open the same topology multiple times.</p>
+<p>Sharing a single topology between threads is easy (see <a class="el" href="a00406.html">Thread Safety</a>) since the vast majority of accesses are read-only.</p>
+<p>If multiple topologies of different (but similar) nodes are needed in your program, have a look at <a class="el" href="a00409.html#faq_diff">How to avoid memory waste when manipulating multiple similar topologies?</a>.</p>
+<h2><a class="anchor" id="faq_diff"></a>
+How to avoid memory waste when manipulating multiple similar topologies?</h2>
+<p>hwloc does not share information between topologies. If multiple similar topologies are loaded in memory, for instance the topologies of different identical nodes of a cluster, lots of information will be duplicated.</p>
+<p><a class="el" href="a00182_source.html">hwloc/diff.h</a> (see also <a class="el" href="a00240.html">Topology differences</a>) offers the ability to compute topology differences, apply or unapply them, or export/import to/from XML. However, this feature is limited to basic differences such as attribute changes. It does not support complex modifications such as adding or removing some objects.</p>
+<h2><a class="anchor" id="faq_annotate"></a>
+How do I annotate the topology with private notes?</h2>
+<p>Each hwloc object contains a <code>userdata</code> field that may be used by applications to store private pointers. This field is only valid during the lifetime of these container object and topology. It becomes invalid as soon the topology is destroyed, or as soon as the object disappears, for instance when restricting the topology. The userdata field is not exported/imported to/from XML by default since hwloc does not know what it contains. This behavior may be changed by specifying application-specific callbacks with <code><a class="el" href="a00218.html#ga9d6ff0f7a8dd45be9aa8575ef31978cc" title="Set the application-specific callback for exporting object userdata.">hwloc_topology_set_userdata_export_callback()</a></code> and <code><a class="el" href="a00218.html#ga5ac6917ea7289955fb1ffda4353af9b0" title="Set the application-specific callback for importing userdata.">hwloc_topology_set_userdata_import_callback()</a></code>.</p>
+<p>Each object may also contain some <em>info</em> attributes (key name and value) that are setup by hwloc during discovery and that may be extended by the user with <code><a class="el" href="a00201.html#gace7654bb8a9002caae1a4b8a59e7452e" title="Add the given info name and value pair to the given object.">hwloc_obj_add_info()</a></code> (see also <a class="el" href="a00401.html">Object attributes</a>). Contrary to the <code>userdata</code> field which is unique, multiple info attributes may exist for each object, even with the same name. These attributes are always exported to XML. However, only character strings may be used as key names and values.</p>
+<p>It is also possible to insert Misc objects with a custom name anywhere as a leaf of the topology (see <a class="el" href="a00400.html">Miscellaneous objects</a>). And Misc objects may have their own userdata and info attributes just like any other object.</p>
+<p>The hwloc-annotate command-line tool may be used for adding Misc objects and info attributes.</p>
+<p>There is also a topology-specific userdata pointer that can be used to recognize different topologies by storing a custom pointer. It may be manipulated with <code><a class="el" href="a00205.html#ga2cc7b7b155cba58dda203e54f1637b9c" title="Set the topology-specific userdata pointer.">hwloc_topology_set_userdata()</a></code> and <code><a class="el" href="a00205.html#ga91f992f8d6c4905b2d3c4f43e509c2a3" title="Retrieve the topology-specific userdata pointer.">hwloc_topology_get_userdata()</a></code>.</p>
+<h2><a class="anchor" id="faq_create_asymmetric"></a>
+How do I create a custom heterogeneous and asymmetric topology?</h2>
+<p>Synthetic topologies (see <a class="el" href="a00404.html">Synthetic topologies</a>) allow to create custom topologies but they are always symmetric: same numbers of cores in each package, same local NUMA nodes, same shared cache, etc. To create an asymmetric topology, for instance to simulate hybrid CPUs, one may want to start from a larger symmetric topology and restrict it. <br  />
+</p>
+<p>Assuming we want two packages, one with 4 dual-threaded cores, and one with 8 single-threaded cores, first we create a topology with two identical packages, each with 8 dual-threaded cores: </p><pre class="fragment">$ lstopo -i "pack:2 core:8 pu:2" topo.xml
+</pre><p> Then create the bitmask representing the PUs that we wish to keep and pass it to lstopo's restrict option: </p><pre class="fragment">$ hwloc-calc -i topo.xml pack:0.core:0-3.pu:0-1 pack:1.core:0-7.pu:0
+0x555500ff
+$ lstopo -i topo.xml --restrict 0x555500ff topo2.xml
+$ mv -f topo2.xml topo.xml
+</pre><p> To mark the cores of first package as Big (power hungry) and those of second package as Little (energy efficient), define CPU kinds: </p><pre class="fragment">$ hwloc-annotate topo.xml topo.xml -- none -- cpukind $(hwloc-calc -i topo.xml pack:0) 1 0 CoreType Big
+$ hwloc-annotate topo.xml topo.xml -- none -- cpukind $(hwloc-calc -i topo.xml pack:1) 0 0 CoreType Little
+</pre><p> <br  />
+</p>
+<p>A similar method may be used for heterogeneous memory. First we specify 2 NUMA nodes per package in our synthetic description: </p><pre class="fragment">$ lstopo -i "pack:2 [numa(memory=100GB)] [numa(memory=10GB)] core:8 pu:2" topo.xml
+</pre><p> Then remove the second node of first package: </p><pre class="fragment">$ hwloc-calc -i topo.xml --nodeset node:all ~pack:0.node:1
+0x0000000e
+$ lstopo -i topo.xml --restrict nodeset=0xe topo2.xml
+$ mv -f topo2.xml topo.xml
+</pre><p> Then make one large node even bigger: </p><pre class="fragment">$ hwloc-annotate topo.xml topo.xml -- pack:0.numa:0 -- size 200GB
+</pre><p> Now we have 200GB in first package, and 100GB+10GB in second package. <br  />
+</p>
+<p>Next we may specify that the small NUMA node (second of second package) is HBM while the large ones are DRAM: </p><pre class="fragment">$ hwloc-annotate topo.xml topo.xml -- pack:0.numa:0 pack:1.numa:0 -- subtype DRAM
+$ hwloc-annotate topo.xml topo.xml -- pack:1.numa:1 -- subtype HBM
+</pre><p> Finally we may define memory performance attributes to specify that the HBM bandwidth (200GB/s) from local cores is higher than the DRAM bandwidth (50GB/s): </p><pre class="fragment">$ hwloc-annotate topo.xml topo.xml -- pack:0.numa:0 -- memattr Bandwidth pack:0 50000
+$ hwloc-annotate topo.xml topo.xml -- pack:1.numa:0 -- memattr Bandwidth pack:1 50000
+$ hwloc-annotate topo.xml topo.xml -- pack:1.numa:1 -- memattr Bandwidth pack:1 200000
+</pre><p> <br  />
+</p>
+<p>There is currently no way to create or modify I/O devices attached to such fake topologies. There is also no way to have some <em>partial levels</em>, e.g. a L3 cache in one package but not in the other. <br  />
+</p>
+<p>More changes may obviously be performed by manually modifying the XML export file. Simple operations such as modifying object attributes (cache size, memory size info keypairs, etc.), moving I/O subtrees, moving Misc objects, or removing objects are easy to perform.</p>
+<p>However, modifying CPU and Memory objects requires care since cpusets and nodesets are supposed to remain consistent between parents and children. Similarly, PCI bus IDs should remain consistent between bridges and children within an I/O subtree.</p>
+<p> 
+</div><div class="section" id="faq3">
+ </p>
+<h1><a class="anchor" id="faq3"></a>
+Caveats</h1>
+<h2><a class="anchor" id="faq_slow_lstopo"></a>
+Why is hwloc slow?</h2>
+<p>Building a hwloc topology on a large machine may be slow because the discovery of hundreds of hardware cores or threads takes time (especially when reading thousands of sysfs files on Linux). Ignoring some objects (for instance caches) that aren't useful to the current application may improve this overhead (see <a class="el" href="a00409.html#faq_why">I only need binding, why should I use hwloc ?</a>). One should also consider using XML (see <a class="el" href="a00409.html#faq_xml">I do not want hwloc to rediscover my enormous machine topology every time I rerun a process</a>) to work around such issues.</p>
+<p>Additionally, lstopo enables most hwloc objects and discovery flags by default so that the output topology is as precise as possible (while hwloc disables many of them by default). This includes I/O device discovery through PCI libraries as well as external libraries such as NVML. To speed up lstopo, you may disable such features with command-line options such as <code>--no-io</code>.</p>
+<p>When NVIDIA GPU probing is enabled with CUDA or NVML, one should make sure that the <em>Persistent</em> mode is enabled (with <code>nvidia-smi -pm 1</code>) to avoid significant GPU initialization overhead.</p>
+<p>When AMD GPU discovery is enabled with OpenCL and hwloc is used remotely over ssh, some spurious round-trips on the network may significantly increase the discovery time. Forcing the <code>DISPLAY</code> environment variable to the remote X server display (usually <code>:0</code>) instead of only setting the <code>COMPUTE</code> variable may avoid this.</p>
+<p>Also remember that these components may be disabled at build-time with configure flags such as <code>--disable-opencl</code>, <code>--disable-cuda</code> or <code>--disable-nvml</code>, and at runtime with the environment variable <code>HWLOC_COMPONENTS=-opencl,-cuda,-nvml</code> or with <a class="el" href="a00204.html#ga9ad41adf418cee1c0ee32ba9bd4a3d36" title="Prevent a discovery component from being used for a topology.">hwloc_topology_set_components()</a>.</p>
+<h2><a class="anchor" id="faq_privileged"></a>
+Does hwloc require privileged access?</h2>
+<p>hwloc discovers the topology by querying the operating system. Some minor features may require privileged access to the operation system. For instance memory module discovery on Linux is reserved to root, and the entire PCI discovery on Solaris and BSDs requires access to some special files that are usually restricted to root (/dev/pci* or /devices/pci*).</p>
+<p>To workaround this limitation, it is recommended to export the topology as a XML file generated by the administrator (with the lstopo program) and make it available to all users (see <a class="el" href="a00403.html">Importing and exporting topologies from/to XML files</a>). It will offer all discovery information to any application without requiring any privileged access anymore. Only the necessary hardware characteristics will be exported, no sensitive information will be disclosed through this XML export.</p>
+<p>This XML-based model also has the advantage of speeding up the discovery because reading a XML topology is usually much faster than querying the operating system again.</p>
+<p>The utility <code>hwloc-dump-hwdata</code> is also involved in gathering privileged information at boot time and making it available to non-privileged users (note that this may require a specific SELinux MLS policy module). However, it only applies to Intel Xeon Phi processors for now (see <a class="el" href="a00409.html#faq_knl_dump">Why do I need hwloc-dump-hwdata for memory on Intel Xeon Phi processor?</a>). See also <code>HWLOC_DUMPED_HWDATA_DIR</code> in <a class="el" href="a00397.html">Environment Variables</a> for details about the location of dumped files.</p>
+<h2><a class="anchor" id="faq_os_error"></a>
+What should I do when hwloc reports "operating system" warnings?</h2>
+<p>When the operating system reports invalid locality information (because of either software or hardware bugs), hwloc may fail to insert some objects in the topology because they cannot fit in the already built tree of resources. If so, hwloc will report a warning like the following. The object causing this error is ignored, the discovery continues but the resulting topology will miss some objects and may be asymmetric (see also <a class="el" href="a00409.html#faq_asymmetric">What happens if my topology is asymmetric?</a>).</p>
+<pre class="fragment">****************************************************************************
+* hwloc received invalid information from the operating system.
+*
+* L3 (cpuset 0x000003f0) intersects with NUMANode (P#0 cpuset 0x0000003f) without inclusion!
+* Error occurred in topology.c line 940
+*
+* Please report this error message to the hwloc user's mailing list,
+* along with the files generated by the hwloc-gather-topology script.
+*
+* hwloc will now ignore this invalid topology information and continue.
+****************************************************************************
+</pre><p>These errors are common on large AMD platforms because of BIOS and/or Linux kernel bugs causing invalid L3 cache information. In the above example, the hardware reports a L3 cache that is shared by 2 cores in the first NUMA node and 4 cores in the second NUMA node. That's wrong, it should actually be shared by all 6 cores in a single NUMA node. The resulting topology will miss some L3 caches.</p>
+<p>If your application does not care about cache sharing, or if you do not plan to request cache-aware binding in your process launcher, you may likely ignore this error (and hide it by setting HWLOC_HIDE_ERRORS=1 in your environment).</p>
+<p>Some platforms report similar warnings about conflicting Packages and NUMANodes.</p>
+<p>On x86 hosts, passing <code>HWLOC_COMPONENTS=x86</code> in the environment may workaround some of these issues by switching to a different way to discover the topology.</p>
+<p>Upgrading the BIOS and/or the operating system may help. Otherwise, as explained in the message, reporting this issue to the hwloc developers (by sending the tarball that is generated by the hwloc-gather-topology script on this platform) is a good way to make sure that this is a software (operating system) or hardware bug (BIOS, etc).</p>
+<p>See also <a class="el" href="index.html#bugs">Questions and Bugs</a>. Opening an issue on GitHub automatically displays hints on what information you should provide when reporting such bugs.</p>
+<h2><a class="anchor" id="faq_valgrind"></a>
+Why does Valgrind complain about hwloc memory leaks?</h2>
+<p>If you are debugging your application with Valgrind, you want to avoid memory leak reports that are caused by hwloc and not by your program.</p>
+<p>hwloc itself is often checked with Valgrind to make sure it does not leak memory. However, some global variables in hwloc dependencies are never freed. For instance libz allocates its global state once at startup and never frees it so that it may be reused later. Some libxml2 global state is also never freed because hwloc does not know whether it can safely ask libxml2 to free it (the application may also be using libxml2 outside of hwloc).</p>
+<p>These unfreed variables cause leak reports in Valgrind. hwloc installs a Valgrind <em>suppressions</em> file to hide them. You should pass the following command-line option to Valgrind to use it: </p><pre class="fragment">  --suppressions=/path/to/hwloc-valgrind.supp
+</pre><p> 
+</div><div class="section" id="faq4">
+ </p>
+<h1><a class="anchor" id="faq4"></a>
+Platform-specific</h1>
+<h2><a class="anchor" id="faq_rocm_build"></a>
+How do I enable ROCm SMI and select which version to use?</h2>
+<p>hwloc enables ROCm SMI as soon as it finds its development headers and libraries on the system. This detection consists in looking in <code>/opt/rocm</code> by default. If a ROCm version was specified with <code>--with-rocm-version=4.4.0</code> or in the <code>ROCM_VERSION</code> environment variable, then <code>/opt/rocm-&lt;version&gt;</code> is used instead. Finally, a specific installation path may be specified with <code>--with-rocm=/path/to/rocm</code>.</p>
+<p>As usual, developer header and library paths may also be set through environment variables such as <code>LIBRARY_PATH</code> and <code>C_INCLUDE_PATH</code>.</p>
+<p>To find out whether ROCm SMI was detected and enabled, look in <em>Probe / display I/O devices</em> at the end of the configure script output. Passing <code>--enable-rsmi</code> will also cause configure to fail if RSMI could not be found and enabled in hwloc.</p>
+<h2><a class="anchor" id="faq_cuda_build"></a>
+How do I enable CUDA and select which CUDA version to use?</h2>
+<p>hwloc enables CUDA as soon as it finds CUDA development headers and libraries on the system. This detection may be performed thanks to <code>pkg-config</code> but it requires hwloc to know which CUDA version to look for. This may be done by passing <code>--with-cuda-version=11.0</code> to the configure script. Otherwise hwloc will also look for the <code>CUDA_VERSION</code> environment variable.</p>
+<p>If <code>pkg-config</code> does not work, passing <code>--with-cuda=/path/to/cuda</code> to the configure script is another way to define the corresponding library and header paths. Finally, these paths may also be set through environment variables such as <code>LIBRARY_PATH</code> and <code>C_INCLUDE_PATH</code>.</p>
+<p>These paths, either detected by <code>pkg-config</code> or given manually, will also be used to detect NVML and OpenCL libraries and enable their hwloc backends.</p>
+<p>To find out whether CUDA was detected and enabled, look in <em>Probe / display I/O devices</em> at the end of the configure script output. Passing <code>--enable-cuda</code> will also cause configure to fail if CUDA could not be found and enabled in hwloc.</p>
+<p>Note that <code>--with-cuda=/nonexisting</code> may be used to disable all dependencies that are installed by CUDA, i.e. the CUDA, NVML and NVIDIA OpenCL backends, since the given directory does not exist.</p>
+<h2><a class="anchor" id="faq_knl_numa"></a>
+How do I find the local MCDRAM NUMA node on Intel Xeon Phi processor?</h2>
+<p>Intel Xeon Phi processors introduced a new memory architecture by possibly having two distinct local memories: some normal memory (DDR) and some high-bandwidth on-package memory (MCDRAM). Processors can be configured in various clustering modes to have up to 4 <em>Clusters</em>. Moreover, each <em>Cluster</em> (quarter, half or whole processor) of the processor may have its own local parts of the DDR and of the MCDRAM. This memory and clustering configuration may be probed by looking at MemoryMode and ClusterMode attributes, see <a class="el" href="a00401.html#attributes_info_platform">Hardware Platform Information</a> and doc/examples/get-knl-modes.c in the source directory.</p>
+<p>Starting with version 2.0, hwloc properly exposes this memory configuration. DDR and MCDRAM are attached as two memory children of the same parent, DDR first, and MCDRAM second if any. Depending on the processor configuration, that parent may be a Package, a Cache, or a Group object of type <code>Cluster</code>.</p>
+<p>Hence cores may have one or two local NUMA nodes, listed by the core nodeset. An application may allocate local memory from a core by using that nodeset. The operating system will actually allocate from the DDR when possible, or fallback to the MCDRAM.</p>
+<p>To allocate specifically on one of these memories, one should walk up the parent pointers until finding an object with some memory children. Looking at these memory children will give the DDR first, then the MCDRAM if any. Their nodeset may then be used for allocating or binding memory buffers.</p>
+<p>One may also traverse the list of NUMA nodes until finding some whose cpuset matches the target core or PUs. The MCDRAM NUMA nodes may be identified thanks to the <code>subtype</code> field which is set to <code>MCDRAM</code>.</p>
+<p>Command-line tools such as <code>hwloc-bind</code> may bind memory on the MCDRAM by using the <em>hbm</em> keyword. For instance, to bind on the first MCDRAM NUMA node:</p>
+<pre class="fragment">$ hwloc-bind --membind --hbm numa:0 -- myprogram
+$ hwloc-bind --membind numa:0 -- myprogram
+</pre><h2><a class="anchor" id="faq_knl_dump"></a>
+Why do I need hwloc-dump-hwdata for memory on Intel Xeon Phi processor?</h2>
+<p>Intel Xeon Phi processors may use the on-package memory (MCDRAM) as either memory or a memory-side cache (reported as a L3 cache by hwloc by default, see <code>HWLOC_KNL_MSCACHE_L3</code> in <a class="el" href="a00397.html">Environment Variables</a>). There are also several clustering modes that significantly affect the memory organization (see <a class="el" href="a00409.html#faq_knl_numa">How do I find the local MCDRAM NUMA node on Intel Xeon Phi processor?</a> for more information about these modes). Details about these are currently only available to privileged users. Without them, hwloc relies on a heuristic for guessing the modes.</p>
+<p>The hwloc-dump-hwdata utility may be used to dump this privileged binary information into human-readable and world-accessible files that the hwloc library will later load. The utility should usually run as root once during boot, in order to update dumped information (stored under /var/run/hwloc by default) in case the MCDRAM or clustering configuration changed between reboots.</p>
+<p>When SELinux MLS policy is enabled, a specific hwloc policy module may be required so that all users get access to the dumped files (in /var/run/hwloc by default). One may use hwloc policy files from the SELinux Reference Policy at <a href="https://github.com/TresysTechnology/refpolicy-contrib">https://github.com/TresysTechnology/refpolicy-contrib</a> (see also the documentation at <a href="https://github.com/TresysTechnology/refpolicy/wiki/GettingStarted">https://github.com/TresysTechnology/refpolicy/wiki/GettingStarted</a>).</p>
+<p>hwloc-dump-hwdata requires <code>dmi-sysfs</code> kernel module loaded.</p>
+<p>The utility is currently unneeded on platforms without Intel Xeon Phi processors.</p>
+<p>See <code>HWLOC_DUMPED_HWDATA_DIR</code> in <a class="el" href="a00397.html">Environment Variables</a> for details about the location of dumped files.</p>
+<h2><a class="anchor" id="faq_bgq"></a>
+How do I build hwloc for BlueGene/Q?</h2>
+<p>IBM BlueGene/Q machines run a standard Linux on the login/frontend nodes and a custom CNK (<em>Compute Node Kernel</em>) on the compute nodes.</p>
+<p>To discover the topology of a login/frontend node, hwloc should be configured as usual, without any BlueGene/Q-specific option.</p>
+<p>However, one would likely rather discover the topology of the compute nodes where parallel jobs are actually running. If so, hwloc must be cross-compiled with the following configuration line: </p><pre class="fragment">./configure --host=powerpc64-bgq-linux --disable-shared --enable-static \
+  CPPFLAGS='-I/bgsys/drivers/ppcfloor -I/bgsys/drivers/ppcfloor/spi/include/kernel/cnk/'
+</pre><p>CPPFLAGS may have to be updated if your platform headers are installed in a different directory.</p>
+<h2><a class="anchor" id="faq_windows"></a>
+How do I build hwloc for Windows?</h2>
+<p><b>hwloc binary releases for Windows are available on the website download pages</b> (as pre-built ZIPs for both 32bits and 64bits x86 platforms). However hwloc also offers several ways to build on Windows:</p>
+<ul>
+<li>
+The usual Unix build steps (<code>configure</code>, <code>make</code> and <code>make install</code>) work on the <b>MSYS2/MinGW</b> environment on Windows (the official hwloc binary releases are built this way). Some environment variables and options must be configured, see <code>contrib/ci.inria.fr/job-3-mingw.sh</code> in the hwloc repository for an example (used for nightly testing).  </li>
+<li>
+hwloc also supports such Unix-like builds in <b>Cygwin</b> (environment for porting Unix code to Windows).  </li>
+<li>
+Windows build is also possible with <b>CMake</b> (<code>CMakeLists.txt</code> available under <code>contrib/windows-cmake/</code>).  </li>
+<li>
+hwloc also comes with an example of <b>Microsoft Visual Studio solution</b> (under <code>contrib/windows/</code>) that may serve as a base for custom builds.  </li>
+</ul>
+<h2><a class="anchor" id="faq_netbsd_bind"></a>
+How to get useful topology information on NetBSD?</h2>
+<p>The NetBSD (and FreeBSD) backend uses x86-specific topology discovery (through the x86 component). This implementation requires CPU binding so as to query topology information from each individual processor. This means that hwloc cannot find any useful topology information unless user-level process binding is allowed by the NetBSD kernel. The <code>security.models.extensions.user_set_cpu_affinity</code> sysctl variable must be set to 1 to do so. Otherwise, only the number of processors will be detected.</p>
+<h2><a class="anchor" id="faq_aix_bind"></a>
+Why does binding fail on AIX?</h2>
+<p>The AIX operating system requires specific user capabilities for attaching processes to resource sets (CAP_NUMA_ATTACH). Otherwise functions such as <a class="el" href="a00202.html#ga80bc07473a8edf840cae17bd7ec21d48" title="Bind current process or thread on CPUs given in physical bitmap set.">hwloc_set_cpubind()</a> fail (return -1 with errno set to EPERM).</p>
+<p>This capability must also be inherited (through the additional CAP_PROPAGATE capability) if you plan to bind a process before forking another process, for instance with <code>hwloc-bind</code>.</p>
+<p>These capabilities may be given by the administrator with: </p><pre class="fragment">chuser "capabilities=CAP_PROPAGATE,CAP_NUMA_ATTACH" &lt;username&gt;
+</pre><p> 
+</div><div class="section" id="faq5">
+ </p>
+<h1><a class="anchor" id="faq5"></a>
+Compatibility between hwloc versions</h1>
+<h2><a class="anchor" id="faq_version_api"></a>
+How do I handle API changes?</h2>
+<p>The hwloc interface is extended with every new major release. Any application using the hwloc API should be prepared to check at compile-time whether some features are available in the currently installed hwloc distribution.</p>
+<p>For instance, to check whether the hwloc version is at least 2.0, you should use: </p><pre class="fragment">#include &lt;hwloc.h&gt;
+#if HWLOC_API_VERSION &gt;= 0x00020000
+...
+#endif
+</pre><p>To check for the API of release X.Y.Z at build time, you may compare <a class="el" href="a00194.html#ga8f4dfb8eef138af55dd1a0fa802e5476" title="Indicate at build time which hwloc API version is being used.">HWLOC_API_VERSION</a> with <code>(X&lt;&lt;16)+(Y&lt;&lt;8)+Z</code>.</p>
+<p>For supporting older releases that do not have <code>HWLOC_OBJ_NUMANODE</code> and <code>HWLOC_OBJ_PACKAGE</code> yet, you may use:</p>
+<pre class="fragment">#include &lt;hwloc.h&gt;
+#if HWLOC_API_VERSION &lt; 0x00010b00
+#define HWLOC_OBJ_NUMANODE HWLOC_OBJ_NODE
+#define HWLOC_OBJ_PACKAGE HWLOC_OBJ_SOCKET
+#endif
+</pre><p>Once a program is built against a hwloc library, it may also dynamically link with compatible libraries from other hwloc releases. The version of that runtime library may be queried with <a class="el" href="a00194.html#ga9c0b50c98add1adf57ed1ce85bb5190d" title="Indicate at runtime which hwloc API version was used at build time.">hwloc_get_api_version()</a>. For instance, the following code enables the topology flag <a class="el" href="a00205.html#ggada025d3ec20b4b420f8038d23d6e7bdea5796b4909eba80f9727b66d07d3a7a05" title="Ignore distances.">HWLOC_TOPOLOGY_FLAG_NO_DISTANCES</a> when compiling on hwloc 2.8 or later, but it disables it at runtime if running on an older hwloc (otherwise <a class="el" href="a00205.html#gaaeed4df656979e5f16befea9d29b814b" title="Set OR&#39;ed flags to non-yet-loaded topology.">hwloc_topology_set_flags()</a> would fail).</p>
+<pre class="fragment">unsigned long topology_flags = ...; /* wanted flags that were supported before 2.8 */
+#if HWLOC_API_VERSION &gt;= 0x20800
+if (hwloc_get_api_version() &gt;= 0x20800)
+  topology_flags |= HWLOC_TOPOLOGY_FLAG_NO_DISTANCES; /* wanted flags only supported in 2.8+ */
+#endif
+hwloc_topology_set_flags(topology, topology_flags);
+</pre><p>See also <a class="el" href="a00409.html#faq_version_abi">How do I handle ABI breaks?</a> for using <a class="el" href="a00194.html#ga9c0b50c98add1adf57ed1ce85bb5190d" title="Indicate at runtime which hwloc API version was used at build time.">hwloc_get_api_version()</a> for testing ABI compatibility.</p>
+<h2><a class="anchor" id="faq_version"></a>
+What is the difference between API and library version numbers?</h2>
+<p><a class="el" href="a00194.html#ga8f4dfb8eef138af55dd1a0fa802e5476" title="Indicate at build time which hwloc API version is being used.">HWLOC_API_VERSION</a> is the version of the API. It changes when functions are added, modified, etc. However it does not necessarily change from one release to another. For instance, two releases of the same series (e.g. 2.0.3 and 2.0.4) usually have the same <a class="el" href="a00194.html#ga8f4dfb8eef138af55dd1a0fa802e5476" title="Indicate at build time which hwloc API version is being used.">HWLOC_API_VERSION</a> (<code>0x00020000</code>). However their HWLOC_VERSION strings are different (<code>"2.0.3"</code> and <code>"2.0.4"</code> respectively).</p>
+<h2><a class="anchor" id="faq_version_abi"></a>
+How do I handle ABI breaks?</h2>
+<p>The hwloc interface was deeply modified in release 2.0 to fix several issues of the 1.x interface (see <a class="el" href="a00410.html">Upgrading to the hwloc 2.0 API</a> and the NEWS file in the source directory for details). The ABI was broken, which means <b>applications must be recompiled against the new 2.0 interface</b>.</p>
+<p>To check that you are not mixing old/recent headers with a recent/old runtime library, check the major revision number in the API version: </p><pre class="fragment">#include &lt;hwloc.h&gt;
+  unsigned version = hwloc_get_api_version();
+  if ((version &gt;&gt; 16) != (HWLOC_API_VERSION &gt;&gt; 16)) {
+    fprintf(stderr,
+           "%s compiled for hwloc API 0x%x but running on library API 0x%x.\n"
+           "You may need to point LD_LIBRARY_PATH to the right hwloc library.\n"
+           "Aborting since the new ABI is not backward compatible.\n",
+           callname, HWLOC_API_VERSION, version);
+    exit(EXIT_FAILURE);
+  }
+</pre><p> To specifically detect v2.0 issues: </p><pre class="fragment">#include &lt;hwloc.h&gt;
+#if HWLOC_API_VERSION &gt;= 0x00020000
+  /* headers are recent */
+  if (hwloc_get_api_version() &lt; 0x20000)
+    ... error out, the hwloc runtime library is older than 2.0 ...
+#else
+  /* headers are pre-2.0 */
+  if (hwloc_get_api_version() &gt;= 0x20000)
+    ... error out, the hwloc runtime library is more recent than 2.0 ...
+#endif
+</pre><p>In theory, library sonames prevent linking with incompatible libraries. However custom hwloc installations or improperly configured build environments may still lead to such issues. Hence running one of the above (cheap) checks before initializing hwloc topology may be useful.</p>
+<h2><a class="anchor" id="faq_version_xml"></a>
+Are XML topology files compatible between hwloc releases?</h2>
+<p>XML topology files are forward-compatible: a XML file may be loaded by a hwloc library that is more recent than the hwloc release that exported that file.</p>
+<p>However, hwloc XMLs are not always backward-compatible: Topologies exported by hwloc 2.x cannot be imported by 1.x by default (see <a class="el" href="a00410.html#upgrade_to_api_2x_xml">XML changes</a> for working around such issues). There are also some corner cases where backward compatibility is not guaranteed because of changes between major releases (for instance 1.11 XMLs could not be imported in 1.10).</p>
+<p>XMLs are exchanged at runtime between some components of the HPC software stack (for instance the resource managers and MPI processes). Building all these components on the same (cluster-wide) hwloc installation is a good way to avoid such incompatibilities.</p>
+<h2><a class="anchor" id="faq_version_synthetic"></a>
+Are synthetic strings compatible between hwloc releases?</h2>
+<p>Synthetic strings (see <a class="el" href="a00404.html">Synthetic topologies</a>) are forward-compatible: a synthetic string generated by a release may be imported by future hwloc libraries.</p>
+<p>However they are often not backward-compatible because new details may have been added to synthetic descriptions in recent releases. Some flags may be given to <a class="el" href="a00219.html#ga24b7864a1c588309c4749f621f03b4c7" title="Export the topology as a synthetic string.">hwloc_topology_export_synthetic()</a> to avoid such details and stay backward compatible.</p>
+<h2><a class="anchor" id="faq_version_shmem"></a>
+Is it possible to share a shared-memory topology between different hwloc releases?</h2>
+<p>Shared-memory topologies (see <a class="el" href="a00241.html">Sharing topologies between processes</a>) have strong requirements on compatibility between hwloc libraries. Adopting a shared-memory topology fails if it was exported by a non-compatible hwloc release. Releases with same major revision are usually compatible (e.g. hwloc 2.0.4 may adopt a topology exported by 2.0.3) but different major revisions may be incompatible (e.g. hwloc 2.1.0 cannot adopt from 2.0.x).</p>
+<p>Topologies are shared at runtime between some components of the HPC software stack (for instance the resource managers and MPI processes). Building all these components on the same (system-wide) hwloc installation is a good way to avoid such incompatibilities. </p>
+</div></div><!-- contents -->
+</div><!-- PageDoc -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00410.html b/doc/doxygen-doc/html/a00410.html
new file mode 100644
index 00000000..6ab41df9
--- /dev/null
+++ b/doc/doxygen-doc/html/a00410.html
@@ -0,0 +1,349 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Upgrading to the hwloc 2.0 API</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="PageDoc"><div class="header">
+  <div class="headertitle">
+<div class="title">Upgrading to the hwloc 2.0 API </div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p> 
+<div class="section">
+</p>
+<p>See <a class="el" href="a00409.html#faq5">Compatibility between hwloc versions</a> for detecting the hwloc version that you are compiling and/or running against.</p>
+<p> 
+</div><div class="section" id="upgrade_to_api_2x_memory">
+ </p>
+<h1><a class="anchor" id="upgrade_to_api_2x_memory"></a>
+New Organization of NUMA nodes and Memory</h1>
+<h2><a class="anchor" id="upgrade_to_api_2x_memory_children"></a>
+Memory children</h2>
+<p>In hwloc v1.x, NUMA nodes were inside the tree, for instance Packages contained 2 NUMA nodes which contained a L3 and several cache.</p>
+<p>Starting with hwloc v2.0, NUMA nodes are not in the main tree anymore. They are attached under objects as <em>Memory Children</em> on the side of normal children. This memory children list starts at <code>obj-&gt;memory_first_child</code> and its size is <code>obj-&gt;memory_arity</code>. Hence there can now exist two local NUMA nodes, for instance on Intel Xeon Phi processors.</p>
+<p>The normal list of children (starting at <code>obj-&gt;first_child</code>, ending at <code>obj-&gt;last_child</code>, of size <code>obj-&gt;arity</code>, and available as the array <code>obj-&gt;children</code>) now only contains CPU-side objects: PUs, Cores, Packages, Caches, Groups, Machine and System. <a class="el" href="a00209.html#ga12d8565a3436c565e791ed02a0353621" title="Return the next child.">hwloc_get_next_child()</a> may still be used to iterate over all children of all lists.</p>
+<p>Hence the CPU-side hierarchy is built using normal children, while memory is attached to that hierarchy depending on its affinity.</p>
+<h2><a class="anchor" id="upgrade_to_api_2x_memory_examples"></a>
+Examples</h2>
+<ul>
+<li>
+<p class="startli">a UMA machine with 2 packages and a single NUMA node is now modeled as a "Machine" object with two "Package" children and one "NUMANode" memory children (displayed first in lstopo below): </p><pre class="fragment">Machine (1024MB total)
+  NUMANode L#0 (P#0 1024MB)
+  Package L#0
+    Core L#0 + PU L#0 (P#0)
+    Core L#1 + PU L#1 (P#1)
+  Package L#1
+    Core L#2 + PU L#2 (P#2)
+    Core L#3 + PU L#3 (P#3)
+</pre> <p class="endli"></p>
+</li>
+<li>
+<p class="startli">a machine with 2 packages with one NUMA node and 2 cores in each is now: </p><pre class="fragment">Machine (2048MB total)
+  Package L#0
+    NUMANode L#0 (P#0 1024MB)
+    Core L#0 + PU L#0 (P#0)
+    Core L#1 + PU L#1 (P#1)
+  Package L#1
+    NUMANode L#1 (P#1 1024MB)
+    Core L#2 + PU L#2 (P#2)
+    Core L#3 + PU L#3 (P#3)
+</pre> <p class="endli"></p>
+</li>
+<li>
+<p class="startli">if there are two NUMA nodes per package, a Group object may be added to keep cores together with their local NUMA node: </p><pre class="fragment">Machine (4096MB total)
+  Package L#0
+    Group0 L#0
+      NUMANode L#0 (P#0 1024MB)
+      Core L#0 + PU L#0 (P#0)
+      Core L#1 + PU L#1 (P#1)
+    Group0 L#1
+      NUMANode L#1 (P#1 1024MB)
+      Core L#2 + PU L#2 (P#2)
+      Core L#3 + PU L#3 (P#3)
+  Package L#1
+    [...]
+</pre> <p class="endli"></p>
+</li>
+<li>
+if the platform has L3 caches whose localities are identical to NUMA nodes, Groups aren't needed: <pre class="fragment">Machine (4096MB total)
+  Package L#0
+    L3 L#0 (16MB)
+      NUMANode L#0 (P#0 1024MB)
+      Core L#0 + PU L#0 (P#0)
+      Core L#1 + PU L#1 (P#1)
+    L3 L#1 (16MB)
+      NUMANode L#1 (P#1 1024MB)
+      Core L#2 + PU L#2 (P#2)
+      Core L#3 + PU L#3 (P#3)
+  Package L#1
+    [...]
+</pre>  </li>
+</ul>
+<h2><a class="anchor" id="upgrade_to_api_2x_numa_level"></a>
+NUMA level and depth</h2>
+<p>NUMA nodes are not in "main" tree of normal objects anymore. Hence, they don't have a meaningful depth anymore (like I/O and Misc objects). They have a virtual (negative) depth (<a class="el" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575a245c34ec9884c2cf5de5049b2153ed9c" title="Virtual depth for NUMA nodes.">HWLOC_TYPE_DEPTH_NUMANODE</a>) so that functions manipulating depths and level still work, and so that we can still iterate over the level of NUMA nodes just like for any other level.</p>
+<p>For instance we can still use lines such as </p><pre class="fragment">int depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NUMANODE);
+hwloc_obj_t obj = hwloc_get_obj_by_type(topology, HWLOC_OBJ_NUMANODE, 4);
+hwloc_obj_t node = hwloc_get_next_obj_by_depth(topology, HWLOC_TYPE_DEPTH_NUMANODE, prev);
+</pre><p>The NUMA depth should not be compared with others. An unmodified code that still compares NUMA and Package depths (to find out whether Packages contain NUMA or the contrary) would now always assume Packages contain NUMA (because the NUMA depth is negative).</p>
+<p>However, the depth of the Normal parents of NUMA nodes may be used instead. In the last example above, NUMA nodes are attached to L3 caches, hence one may compare the depth of Packages and L3 to find out that NUMA nodes are contained in Packages. This depth of parents may be retrieved with <a class="el" href="a00199.html#gae85786340b88e24835f8c403a1e2e54b" title="Return the depth of parents where memory objects are attached.">hwloc_get_memory_parents_depth()</a>. However, this function may return <a class="el" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c" title="Objects of given type exist at different depth in the topology (only for Groups).">HWLOC_TYPE_DEPTH_MULTIPLE</a> on future platforms if NUMA nodes are attached to different levels.</p>
+<h2><a class="anchor" id="upgrade_to_api_2x_memory_find"></a>
+Finding Local NUMA nodes and looking at Children and Parents</h2>
+<p>Applications that walked up/down to find NUMANode parent/children must now be updated. Instead of looking directly for a NUMA node, one should now look for an object that has some memory children. NUMA node(s) will be attached there. For instance, when looking for a NUMA node above a given core <code>core</code>: </p><pre class="fragment">hwloc_obj_t parent = core-&gt;parent;
+while (parent &amp;&amp; !parent-&gt;memory_arity)
+  parent = parent-&gt;parent; /* no memory child, walk up */
+if (parent)
+  /* use parent-&gt;memory_first_child (and its siblings if there are multiple local NUMA nodes) */
+</pre><p>The list of local NUMA nodes (usually a single one) is also described by the <code>nodeset</code> attribute of each object (which contains the physical indexes of these nodes). Iterating over the NUMA level is also an easy way to find local NUMA nodes: </p><pre class="fragment">hwloc_obj_t tmp = NULL;
+while ((tmp = hwloc_get_next_obj_by_type(topology, HWLOC_OBJ_NUMANODE, tmp)) != NULL) {
+  if (hwloc_bitmap_isset(obj-&gt;nodeset, tmp-&gt;os_index))
+    /* tmp is a NUMA node local to obj, use it */
+}
+</pre><p>Similarly finding objects that are close to a given NUMA nodes should be updated too. Instead of looking at the NUMA node parents/children, one should now find a Normal parent above that NUMA node, and then look at its parents/children as usual: </p><pre class="fragment">hwloc_obj_t tmp = obj-&gt;parent;
+while (hwloc_obj_type_is_memory(tmp))
+  tmp = tmp-&gt;parent;
+/* now use tmp instead of obj */
+</pre><p>To avoid such hwloc v2.x-specific and NUMA-specific cases in the code, a <b>generic lookup for any kind of object, including NUMA nodes</b>, might also be implemented by iterating over a level. For instance finding an object of type <code>type</code> which either contains or is included in object <code>obj</code> can be performed by traversing the level of that type and comparing CPU sets: </p><pre class="fragment">hwloc_obj_t tmp = NULL;
+while ((tmp = hwloc_get_next_obj_by_type(topology, type, tmp)) != NULL) {
+  if (hwloc_bitmap_intersects(tmp-&gt;cpuset, obj-&gt;cpuset))
+    /* tmp matches, use it */
+}
+</pre><p> <b> This generic lookup works whenever <code>type</code> or <code>obj</code> are Normal or Memory objects since both have CPU sets. Moreover, it is compatible with the hwloc v1.x API. </b></p>
+<p> 
+</div><div class="section" id="upgrade_to_api_2x_children">
+ </p>
+<h1><a class="anchor" id="upgrade_to_api_2x_children"></a>
+4 Kinds of Objects and Children</h1>
+<h2><a class="anchor" id="upgrade_to_api_2x_io_misc_children"></a>
+I/O and Misc children</h2>
+<p>I/O children are not in the main object children list anymore either. They are in the list starting at <code>obj-&gt;io_first_child</code> and its size is <code>obj-&gt;io_arity</code>.</p>
+<p>Misc children are not in the main object children list anymore. They are in the list starting at <code>obj-&gt;misc_first_child</code> and its size is <code>obj-&gt;misc_arity</code>.</p>
+<p>See <a class="el" href="a00253.html" title="Structure of a topology object.">hwloc_obj</a> for details about children lists.</p>
+<p><a class="el" href="a00209.html#ga12d8565a3436c565e791ed02a0353621" title="Return the next child.">hwloc_get_next_child()</a> may still be used to iterate over all children of all lists.</p>
+<h2><a class="anchor" id="upgrade_to_api_2x_kinds_subsec"></a>
+Kinds of objects</h2>
+<p>Given the above, objects may now be of 4 kinds: </p><ul>
+<li>
+Normal (everything not listed below, including Machine, Package, Core, PU, CPU Caches, etc); </li>
+<li>
+Memory (currently NUMA nodes or Memory-side Caches), attached to parents as Memory children; </li>
+<li>
+I/O (Bridges, PCI and OS devices), attached to parents as I/O children; </li>
+<li>
+Misc objects, attached to parents as Misc children. </li>
+</ul>
+<p>See <a class="el" href="a00253.html" title="Structure of a topology object.">hwloc_obj</a> for details about children lists.</p>
+<p>For a given object type, the kind may be found with <a class="el" href="a00210.html#ga52ef38431eba383b048b98c669b59a16" title="Check whether an object type is Normal.">hwloc_obj_type_is_normal()</a>, <a class="el" href="a00210.html#ga1d074390c8a3dc3088d84f73fb73f966" title="Check whether an object type is Memory.">hwloc_obj_type_is_memory()</a>, <a class="el" href="a00210.html#ga52ef38431eba383b048b98c669b59a16" title="Check whether an object type is Normal.">hwloc_obj_type_is_normal()</a>, or comparing with <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d" title="Miscellaneous objects (filtered out by default). Objects without particular meaning,...">HWLOC_OBJ_MISC</a>.</p>
+<p>Normal and Memory objects have (non-NULL) CPU sets and nodesets, while I/O and Misc objects don't have any sets (they are NULL).</p>
+<p> 
+</div><div class="section" id="upgrade_to_api_2x_cache">
+ </p>
+<h1><a class="anchor" id="upgrade_to_api_2x_cache"></a>
+HWLOC_OBJ_CACHE replaced</h1>
+<p>Instead of a single HWLOC_OBJ_CACHE, there are now 8 types <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a56389b8eb2e2f74f288bb657c4e72140" title="Level 1 Data (or Unified) Cache.">HWLOC_OBJ_L1CACHE</a>, ..., <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a67194c9de5e3e581c64c11d2eb1c109d" title="Level 5 Data (or Unified) Cache.">HWLOC_OBJ_L5CACHE</a>, <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55afa834a85d9e53836cf0db6d0bd8329b4" title="Level 1 instruction Cache (filtered out by default).">HWLOC_OBJ_L1ICACHE</a>, ..., <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55ac22850c717f07bf7ffb316fadd08d218" title="Level 3 instruction Cache (filtered out by default).">HWLOC_OBJ_L3ICACHE</a>.</p>
+<p>Cache object attributes are unchanged.</p>
+<p><a class="el" href="a00211.html#gad108a09ce400222fe45545257d575489" title="Find the depth of cache objects matching cache level and type.">hwloc_get_cache_type_depth()</a> is not needed to disambiguate cache types anymore since new types can be passed to <a class="el" href="a00199.html#ga8bec782e21be313750da70cf7428b374" title="Returns the depth of objects of type type.">hwloc_get_type_depth()</a> without ever getting <a class="el" href="a00199.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c" title="Objects of given type exist at different depth in the topology (only for Groups).">HWLOC_TYPE_DEPTH_MULTIPLE</a> anymore.</p>
+<p><a class="el" href="a00210.html#ga2ed589bea28711e80b92066510a5607d" title="Check whether an object type is a CPU Cache (Data, Unified or Instruction).">hwloc_obj_type_is_cache()</a>, <a class="el" href="a00210.html#ga395e48cd221d107e5891689624e1aec4" title="Check whether an object type is a CPU Data or Unified Cache.">hwloc_obj_type_is_dcache()</a> and <a class="el" href="a00210.html#ga8abcee67b9b074332c1866405a3648a9" title="Check whether an object type is a CPU Instruction Cache,.">hwloc_obj_type_is_icache()</a> may be used to check whether a given type is a cache, data/unified cache or instruction cache.</p>
+<p> 
+</div><div class="section" id="upgrade_to_api_2x_allowed">
+ </p>
+<h1><a class="anchor" id="upgrade_to_api_2x_allowed"></a>
+allowed_cpuset and allowed_nodeset only in the main topology</h1>
+<p>Objects do not have <code>allowed_cpuset</code> and <code>allowed_nodeset</code> anymore. They are only available for the entire topology using <a class="el" href="a00214.html#ga517d5d68ec9f24583d8933aab713be8e" title="Get allowed CPU set.">hwloc_topology_get_allowed_cpuset()</a> and <a class="el" href="a00214.html#ga21a4d7237a11e76b912ed4524ab78cbd" title="Get allowed node set.">hwloc_topology_get_allowed_nodeset()</a>.</p>
+<p>As usual, those are only needed when the INCLUDE_DISALLOWED topology flag is given, which means disallowed objects are kept in the topology. If so, one may find out whether some PUs inside an object is allowed by checking </p><pre class="fragment">hwloc_bitmap_intersects(obj-&gt;cpuset, hwloc_topology_get_allowed_cpuset(topology))
+</pre><p> Replace cpusets with nodesets for NUMA nodes. To find out which ones, replace intersects() with and() to get the actual intersection.</p>
+<p> 
+</div><div class="section" id="upgrade_to_api_2x_depth">
+ </p>
+<h1><a class="anchor" id="upgrade_to_api_2x_depth"></a>
+Object depths are now signed int</h1>
+<p><code>obj-&gt;depth</code> as well as depths given to functions such as <a class="el" href="a00199.html#ga391f6b2613f0065673eaa4069b93d4e0" title="Returns the topology object at logical index idx from depth depth.">hwloc_get_obj_by_depth()</a> or returned by <a class="el" href="a00199.html#gae54d1782ca9b54bea915f5c18a9158fa" title="Get the depth of the hierarchical tree of objects.">hwloc_topology_get_depth()</a> are now <b>signed int</b>.</p>
+<p>Other depth such as cache-specific depth attribute are still unsigned.</p>
+<p> 
+</div><div class="section" id="upgrade_to_api_2x_memory_attrs">
+ </p>
+<h1><a class="anchor" id="upgrade_to_api_2x_memory_attrs"></a>
+Memory attributes become NUMANode-specific</h1>
+<p>Memory attributes such as <code>obj-&gt;memory.local_memory</code> are now only available in NUMANode-specific attributes in <code>obj-&gt;attr-&gt;numanode.local_memory</code>.</p>
+<p><code>obj-&gt;memory.total_memory</code> is available in all objects as <code>obj-&gt;total_memory</code>.</p>
+<p>See <a class="el" href="a00261.html" title="NUMA node-specific Object Attributes.">hwloc_obj_attr_u::hwloc_numanode_attr_s</a> and <a class="el" href="a00253.html" title="Structure of a topology object.">hwloc_obj</a> for details.</p>
+<p> 
+</div><div class="section" id="upgrade_to_api_2x_config">
+ </p>
+<h1><a class="anchor" id="upgrade_to_api_2x_config"></a>
+Topology configuration changes</h1>
+<p>The old ignoring API as well as several configuration flags are replaced with the new filtering API, see <a class="el" href="a00205.html#gad894e70f15f8d4aada7be8d1aba38b7e" title="Set the filtering for the given object type.">hwloc_topology_set_type_filter()</a> and its variants, and <a class="el" href="a00205.html#ga9a5a1f0140cd1952544477833733195b" title="Type filtering flags.">hwloc_type_filter_e</a> for details.</p>
+<ul>
+<li>
+<p class="startli">hwloc_topology_ignore_type(), hwloc_topology_ignore_type_keep_structure() and hwloc_topology_ignore_all_keep_structure() are respectively superseded by </p><pre class="fragment">hwloc_topology_set_type_filter(topology, type, HWLOC_TYPE_FILTER_KEEP_NONE);
+hwloc_topology_set_type_filter(topology, type, HWLOC_TYPE_FILTER_KEEP_STRUCTURE);
+hwloc_topology_set_all_types_filter(topology, HWLOC_TYPE_FILTER_KEEP_STRUCTURE);
+</pre><p class="interli">Also, the meaning of KEEP_STRUCTURE has changed (only entire levels may be ignored, instead of single objects), the old behavior is not available anymore. </p>
+<p class="endli"></p>
+</li>
+<li>
+<p class="startli">HWLOC_TOPOLOGY_FLAG_ICACHES is superseded by </p><pre class="fragment">hwloc_topology_set_icache_types_filter(topology, HWLOC_TYPE_FILTER_KEEP_ALL);
+</pre> <p class="endli"></p>
+</li>
+<li>
+<p class="startli">HWLOC_TOPOLOGY_FLAG_WHOLE_IO, HWLOC_TOPOLOGY_FLAG_IO_DEVICES and HWLOC_TOPOLOGY_FLAG_IO_BRIDGES replaced.</p>
+<p class="interli">To keep all I/O devices (PCI, Bridges, and OS devices), use: </p><pre class="fragment">hwloc_topology_set_io_types_filter(topology, HWLOC_TYPE_FILTER_KEEP_ALL);
+</pre><p class="interli">To only keep important devices (Bridges with children, common PCI devices and OS devices): </p><pre class="fragment">hwloc_topology_set_io_types_filter(topology, HWLOC_TYPE_FILTER_KEEP_IMPORTANT);
+</pre> <p class="endli"></p>
+</li>
+</ul>
+<p> 
+</div><div class="section" id="upgrade_to_api_2x_xml">
+ </p>
+<h1><a class="anchor" id="upgrade_to_api_2x_xml"></a>
+XML changes</h1>
+<p>2.0 XML files are not compatible with 1.x</p>
+<p>2.0 can load 1.x files, but only NUMA distances are imported. Other distance matrices are ignored (they were never used by default anyway).</p>
+<p>2.0 can export 1.x-compatible files, but only distances attached to the root object are exported (i.e. distances that cover the entire machine). Other distance matrices are dropped (they were never used by default anyway).</p>
+<p><b>Users are advised to negociate hwloc versions between exporter and importer:</b> If the importer isn't 2.x, the exporter should export to 1.x. Otherwise, things should work by default.</p>
+<p>Hence <a class="el" href="a00218.html#ga333f79975b4eeb28a3d8fad3373583ce" title="Export the topology into an XML file.">hwloc_topology_export_xml()</a> and <a class="el" href="a00218.html#gad33b7f7c11db10459505a3b1634fd3f1" title="Export the topology into a newly-allocated XML memory buffer.">hwloc_topology_export_xmlbuffer()</a> have a new flags argument. to force a hwloc-1.x-compatible XML export. </p><ul>
+<li>
+If both always support 2.0, don't pass any flag.  </li>
+<li>
+When the importer uses hwloc 1.x, export with <a class="el" href="a00218.html#gga0eb99636aff71fe2704e1fa0ffe8c18dae7d6d96546131ef0043867b836b02e0f" title="Export XML that is loadable by hwloc v1.x. However, the export may miss some details about the topolo...">HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1</a>. Otherwise the importer will fail to import.  </li>
+<li>
+When the exporter uses hwloc 1.x, it cannot pass any flag, and a 2.0 importer can import without problem.  </li>
+</ul>
+<pre class="fragment">#if HWLOC_API_VERSION &gt;= 0x20000
+   if (need 1.x compatible XML export)
+      hwloc_topology_export_xml(...., HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1);
+   else /* need 2.x compatible XML export */
+      hwloc_topology_export_xml(...., 0);
+#else
+   hwloc_topology_export_xml(....);
+#endif
+</pre><p>Additionally, <a class="el" href="a00240.html#ga2cd902ce8766e90d4f2523a8e87640e9" title="Load a list of topology differences from a XML file.">hwloc_topology_diff_load_xml()</a>, <a class="el" href="a00240.html#gad693810a5c51628529b9dd56f040fb81" title="Load a list of topology differences from a XML buffer.">hwloc_topology_diff_load_xmlbuffer()</a>, <a class="el" href="a00240.html#ga8a14dd7d01efbdd97af7fe85e8b84b20" title="Export a list of topology differences to a XML file.">hwloc_topology_diff_export_xml()</a>, <a class="el" href="a00240.html#gaa2f0918df60c1c4a0bef9411f7d92a13" title="Export a list of topology differences to a XML buffer.">hwloc_topology_diff_export_xmlbuffer()</a> and <a class="el" href="a00240.html#ga5dcff18f80583ac6505a94ba2877fd1b" title="Destroy a list of topology differences.">hwloc_topology_diff_destroy()</a> lost the topology argument: The first argument (topology) isn't needed anymore.</p>
+<p> 
+</div><div class="section" id="upgrade_to_api_2x_distances">
+ </p>
+<h1><a class="anchor" id="upgrade_to_api_2x_distances"></a>
+Distances API totally rewritten</h1>
+<p>The new distances API is in <a class="el" href="a00137_source.html">hwloc/distances.h</a>.</p>
+<p>Distances are not accessible directly from objects anymore. One should first call <a class="el" href="a00220.html#ga613e6b2a5d0f06626ee8d0c12fa46691" title="Retrieve distance matrices.">hwloc_distances_get()</a> (or a variant) to retrieve distances (possibly with one call to get the number of available distances structures, and another call to actually get them). Then it may consult these structures, and finally release them.</p>
+<p>The set of object involved in a distances structure is specified by an array of objects, it may not always cover the entire machine or so.</p>
+<p> 
+</div><div class="section" id="upgrade_to_api_2x_return">
+ </p>
+<h1><a class="anchor" id="upgrade_to_api_2x_return"></a>
+Return values of functions</h1>
+<p>Bitmap functions (and a couple other functions) can return errors (in theory).</p>
+<p>Most bitmap functions may have to reallocate the internal bitmap storage. In v1.x, they would silently crash if realloc failed. In v2.0, they now return an int that can be negative on error. However, the preallocated storage is 512 bits, hence realloc will not even be used unless you run hwloc on machines with larger PU or NUMAnode indexes.</p>
+<p><a class="el" href="a00201.html#gace7654bb8a9002caae1a4b8a59e7452e" title="Add the given info name and value pair to the given object.">hwloc_obj_add_info()</a>, <a class="el" href="a00215.html#gad5ee8691e08a3538ea7633344c00456d" title="Convert a NUMA node set into a CPU set.">hwloc_cpuset_from_nodeset()</a> and <a class="el" href="a00215.html#gad5ee8691e08a3538ea7633344c00456d" title="Convert a NUMA node set into a CPU set.">hwloc_cpuset_from_nodeset()</a> also return an int, which would be -1 in case of allocation errors.</p>
+<p> 
+</div><div class="section" id="upgrade_to_api_2x_misc">
+ </p>
+<h1><a class="anchor" id="upgrade_to_api_2x_misc"></a>
+Misc API changes</h1>
+<ul>
+<li>
+<p class="startli"><a class="el" href="a00200.html#ga510f21b066fba2dab12b8c9b173b1dfd" title="Return an object type and attributes from a type string.">hwloc_type_sscanf()</a> extends hwloc_obj_type_sscanf() by passing a union <a class="el" href="a00257.html" title="Object type-specific Attributes.">hwloc_obj_attr_u</a> which may receive Cache, Group, Bridge or OS device attributes. </p>
+<p class="endli"></p>
+</li>
+<li>
+<p class="startli"><a class="el" href="a00200.html#ga52c63cd7203e55b804c1314affc9bd12" title="Return an object type and its level depth from a type string.">hwloc_type_sscanf_as_depth()</a> is also added to directly return the corresponding level depth within a topology. </p>
+<p class="endli"></p>
+</li>
+<li>
+<p class="startli">hwloc_topology_insert_misc_object_by_cpuset() is replaced with <a class="el" href="a00206.html#ga4cea4741165faf5323931a9ed8786ef7" title="Allocate a Group object to insert later with hwloc_topology_insert_group_object().">hwloc_topology_alloc_group_object()</a> and <a class="el" href="a00206.html#ga1fc6012b3e1c249b83f48cb7bcacaa5b" title="Add more structure to the topology by adding an intermediate Group.">hwloc_topology_insert_group_object()</a>. </p>
+<p class="endli"></p>
+</li>
+<li>
+<p class="startli">hwloc_topology_insert_misc_object_by_parent() is replaced with <a class="el" href="a00206.html#gad980782ade737900c5cf208946768c30" title="Add a MISC object as a leaf of the topology.">hwloc_topology_insert_misc_object()</a>. </p>
+<p class="endli"></p>
+</li>
+</ul>
+<p> 
+</div><div class="section" id="upgrade_to_api_2x_removals">
+ </p>
+<h1><a class="anchor" id="upgrade_to_api_2x_removals"></a>
+API removals and deprecations</h1>
+<ul>
+<li>
+<p class="startli">HWLOC_OBJ_SYSTEM removed: The root object is always <a class="el" href="a00196.html#ggacd37bb612667dc437d66bfb175a8dc55a3f4e83ffc4a259354959ae8a9eaa2a80" title="Machine. A set of processors and memory with cache coherency.">HWLOC_OBJ_MACHINE</a> </p>
+<p class="endli"></p>
+</li>
+<li>
+<p class="startli">_membind_nodeset() memory binding interfaces deprecated: One should use the variant without _nodeset suffix and pass the <a class="el" href="a00203.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> flag. </p>
+<p class="endli"></p>
+</li>
+<li>
+<p class="startli">HWLOC_MEMBIND_REPLICATE removed: no supported operating system supports it anymore. </p>
+<p class="endli"></p>
+</li>
+<li>
+<p class="startli">hwloc_obj_snprintf() removed because it was long-deprecated by <a class="el" href="a00200.html#gadb8765c260edea80c52cd06a76639ba4" title="Stringify the type of a given topology object into a human-readable form.">hwloc_obj_type_snprintf()</a> and <a class="el" href="a00200.html#ga870e876931c282a1c7aee2f031912ce3" title="Stringify the attributes of a given topology object into a human-readable form.">hwloc_obj_attr_snprintf()</a>. </p>
+<p class="endli"></p>
+</li>
+<li>
+<p class="startli">hwloc_obj_type_sscanf() deprecated, hwloc_obj_type_of_string() removed. </p>
+<p class="endli"></p>
+</li>
+<li>
+<p class="startli">hwloc_cpuset_from/to_nodeset_strict() deprecated: Now useless since all topologies are NUMA. Use the variant without the _strict suffix </p>
+<p class="endli"></p>
+</li>
+<li>
+<p class="startli">hwloc_distribute() and hwloc_distributev() removed, deprecated by <a class="el" href="a00213.html#ga7b0c28f797c2ff17fa2f244ebbd55b33" title="Distribute n items over the topology under roots.">hwloc_distrib()</a>. </p>
+<p class="endli"></p>
+</li>
+<li>
+<p class="startli">The Custom interface (hwloc_topology_set_custom(), etc.) was removed, as well as the corresponding command-line tools (hwloc-assembler, etc.). Topologies always start with object with valid cpusets and nodesets. </p>
+<p class="endli"></p>
+</li>
+<li>
+<p class="startli"><code>obj-&gt;online_cpuset</code> removed: Offline PUs are simply listed in the <code>complete_cpuset</code> as previously. </p>
+<p class="endli"></p>
+</li>
+<li>
+<p class="startli"><code>obj-&gt;os_level</code> removed. </p>
+<p class="endli"></p>
+</li>
+</ul>
+</div></div><!-- contents -->
+</div><!-- PageDoc -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00411.html b/doc/doxygen-doc/html/a00411.html
new file mode 100644
index 00000000..5b3993a3
--- /dev/null
+++ b/doc/doxygen-doc/html/a00411.html
@@ -0,0 +1,187 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Network Locality (netloc)</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="PageDoc"><div class="header">
+  <div class="headertitle">
+<div class="title">Network Locality (netloc) </div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p> 
+<div class="section">
+</p>
+<p>Portable abstraction of network topologies for high-performance computing.</p>
+<p>The netloc documentation spans of these sections: </p><ul>
+<li>
+<a class="el" href="a00411.html">Network Locality (netloc)</a>, this section below  </li>
+<li>
+<a class="el" href="a00412.html">Netloc with Scotch</a>  </li>
+</ul>
+<p> 
+</div><div class="section" id="netloc_summary">
+ </p>
+<h1><a class="anchor" id="netloc_summary"></a>
+Netloc Summary</h1>
+<p>The Portable Network Locality (netloc) software package provides network topology discovery tools, and an abstract representation of those networks topologies for a range of network types and configurations. It is provided as a companion to the Portable Hardware Locality (hwloc) package. These two software packages work together to provide a comprehensive view of the HPC system topology, spanning from the processor cores in one server to the cores in another - including the complex network(s) in between.</p>
+<p>Towards this end, netloc is divided into two sets of components. The first tools are for the admin to extract the information about the topology of the machines with topology discovery tools for each network type and discovery technique (called readers). The second set of tools is for the user to exploit the collected information: to display the topology or create a topology-aware mapping of the processes of an application.</p>
+<div class="image">
+<img src="netloc_design.png" alt=""/>
+</div>
+ <p> 
+</div><div class="section" id="supportednetworks">
+ </p>
+<h2><a class="anchor" id="supportednetworks"></a>
+Supported Networks</h2>
+<p>For now, only InfiniBand (See <a class="el" href="a00411.html#netloc_setup">Setup</a>) is supported, but it is planned to be extended it very soon.</p>
+<p> 
+</div><div class="section" id="netloc_installation">
+ </p>
+<h1><a class="anchor" id="netloc_installation"></a>
+Netloc Installation</h1>
+<p>The generic installation procedure for both hwloc and netloc is described in <a class="el" href="index.html#common_installation">Installation</a>.</p>
+<p>Note that netloc is currently not supported on as many platforms as the original hwloc project. netloc is enabled by default when supported, or can be disabled by passing <code>--disable-netloc</code> to the configure command-line.</p>
+<p> 
+</div><div class="section" id="netloc_setup">
+ </p>
+<h1><a class="anchor" id="netloc_setup"></a>
+Setup</h1>
+<p>To use Netloc tools, we need two steps. The first step consists in getting information about network directly from tools distributed by manufacturers. For Infiniband, for instance, this operation needs privileges to access to the network device. For this step we have wrappers in Netloc that will call the right tools with the right options.</p>
+<p>The second step will transform the raw files generated by manufacturer tools, into files in a format readable by Netloc tools, and that will not depend on network technologies.</p>
+<p>To be clear, let's take an example with Infiniband. This first step is handled by <code>netloc_ib_gather_raw</code> that will call <code>ibnetdiscover</code> and <code>ibroutes</code> tools to generate the necessary raw data files. The step has to be run by an administrator, since the Infiniband tools need to access to the network device.</p>
+<pre class="fragment">shell$ netloc_ib_gather_raw --help
+Usage: netloc_ib_gather_raw [options] &lt;outdir&gt;
+  Dumps topology information to &lt;outdir&gt;/ib-raw/
+  Subnets are guessed from the &lt;outdir&gt;/hwloc/ directory where
+  the hwloc XML exports of some nodes are stored.
+Options:
+ --sudo
+    Pass sudo to internal ibnetdiscover and ibroute invocations.
+    Useful when the entire script cannot run as root.
+ --hwloc-dir &lt;dir&gt;
+    Use &lt;dir&gt; instead of &lt;outdir&gt;/hwloc/ for hwloc XML exports.
+ --force-subnet [&lt;subnet&gt;:]&lt;board&gt;:&lt;port&gt; to force the discovery
+    Do not guess subnets from hwloc XML exports.
+    Force discovery on local board &lt;board&gt; port &lt;port&gt;
+    and optionally force the subnet id &lt;subnet&gt;
+    instead of reading it from the first GID.
+    Examples: --force-subnet mlx4_0:1
+              --force-subnet fe80:0000:0000:0000:mlx4_0:1
+ --ibnetdiscover /path/to/ibnetdiscover
+ --ibroute /path/to/ibroute
+    Specify exact location of programs. Default is /usr/bin/&lt;program&gt;
+ --sleep &lt;n&gt;
+    Sleep for &lt;n&gt; seconds between invocations of programs probing the network
+ --ignore-errors
+    Ignore errors from ibnetdiscover and ibroute, assume their outputs are ok
+ --force -f
+    Always rediscover to overwrite existing files without asking
+ --verbose -v
+    Add verbose messages
+ --dry-run
+    Do not actually run programs or modify anything
+ --help -h
+    Show this help
+
+shell$ ./netloc_ib_gather_raw /home/netloc/data
+WARNING: Not running as root.
+Using /home/netloc/data/hwloc as hwloc lstopo XML directory.
+
+Exporting local node hwloc XML...
+  Running lstopo-no-graphics...
+
+Found 1 subnets in hwloc directory:
+ Subnet fe80:0000:0000:0000 is locally accessible from board qib0 port 1.
+
+Looking at fe80:0000:0000:0000 (through local board qib0 port 1)...
+ Running ibnetdiscover...
+ Getting routes...
+  Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L112' LID 18...
+  Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L108' LID 20...
+  Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L102' LID 23...
+  Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L104' LID 25...
+  Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L106' LID 24...
+  Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L114' LID 22...
+  Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L116' LID 21...
+  Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L109' LID 12...
+  Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L111' LID 11...
+  Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L107' LID 13...
+  Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L103' LID 17...
+  Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L105' LID 16...
+  Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L113' LID 15...
+</pre><p>The second step, that can be done by a regular user, is done by the tool <code>netloc_ib_extract_dats</code>.</p>
+<pre class="fragment">shell$ netloc_ib_extract_dats --help
+Usage: netloc_ib_extract_dats &lt;path to input raw data files&gt; &lt;output path&gt; [--hwloc-dir
+&lt;hwloc xml path&gt;]
+        hwloc-dir can be an absolute path or a relative path from output path
+
+shell$ netloc_ib_extract_dats /home/netloc/data/ib-raw /home/netloc/data/netloc \
+  --hwloc-dir ../hwloc
+Read subnet: fe80:0000:0000:0000
+2 partitions found
+        'node'
+        'admin'
+</pre><p> 
+</div><div class="section" id="netloc_draw">
+ </p>
+<h1><a class="anchor" id="netloc_draw"></a>
+Topology display</h1>
+<p>Netloc provides a tool, <code>netloc_draw.html</code>, that displays a topology in a web browser, by using a JSON file.</p>
+<h2><a class="anchor" id="netloc_draw_setup"></a>
+Generate the JSON file</h2>
+<p>In order to display a topology, Netloc needs to generate a JSON file corresponding to a topology. For this operation, the user must run <code>netloc_draw_to_json</code>.</p>
+<pre class="fragment">shell$ netloc_draw_to_json --help
+Usage: netloc_draw_to_json &lt;path to topology directory&gt;
+
+shell$ netloc_draw_to_json /home/netloc/data/netloc
+</pre><p>The <code>netloc_draw_to_json</code> command will write a JSON file for each topology file found in the input directory. The output files, written also in the input directory, can be open by <code>netloc_draw.html</code> in a web browser.</p>
+<h2><a class="anchor" id="netloc_draw_tool"></a>
+Using netloc_draw</h2>
+<p>Once the JSON file is opened, the rendering is generated by the Javascript vis library for computing the position of the nodes. From the interface, it is possible to search for a specific node, to color the nodes, to expand merged switches, to show statistics, to export as an image... The user can interact with the nodes by moving them. For now, there are bugs and other nodes might move too.</p>
+<p>The placement of the nodes is done statically if the topology is detected as a tree. If not, vis.js will use physics to find good positions, and it can be very time consuming.</p>
+<div class="image">
+<img src="netloc_draw.png" alt=""/>
+</div>
+  </div></div><!-- contents -->
+</div><!-- PageDoc -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/a00412.html b/doc/doxygen-doc/html/a00412.html
new file mode 100644
index 00000000..de806966
--- /dev/null
+++ b/doc/doxygen-doc/html/a00412.html
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Netloc with Scotch</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="PageDoc"><div class="header">
+  <div class="headertitle">
+<div class="title">Netloc with Scotch </div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p> 
+<div class="section">
+</p>
+<p>Scotch is a toolbox for graph partitioning [XXX], that can do mapping between a communication graph and an architecture. Netloc interfaces with Scotch, by getting the topology of the machine and building the Scotch architecture. It is also possible to directly build a mapping file that can be given to <code>mpirun</code>.</p>
+<p> 
+</div><div class="section" id="scotch_intro">
+ </p>
+<h1><a class="anchor" id="scotch_intro"></a>
+Introduction</h1>
+<p>Scotch is able to deal architectures to represent the topology of a complete machine. Scotch handles several types of topologies: complete graphs, hypercubes, fat trees, meshes, torus, and random graphs. Moreover, Scotch is able to manage parts of architectures that are called sub-architectures. Thus, from a complete architecture, we can create a sub-architecture that will represent the available resources of the complete machine.</p>
+<p> 
+</div><div class="section" id="scotch_setup">
+ </p>
+<h1><a class="anchor" id="scotch_setup"></a>
+Setup</h1>
+<p>The first step in order to use Netloc tools is to discover the network. For this task, we provide tools called netloc_gather that are wrappers to the dedicated tools provided by the manufacturer of the network, that generate the raw data given by the devices. This task needs privileges to access to the network devices. Once, this task is completed, the raw data is converted in a generic format independent to the fabric by extract_dats. Figure 1 shows how the different modules of Netloc are linked, and what are the tools provided by Netloc.</p>
+<p> 
+</div><div class="section" id="scotch_tools_api">
+ </p>
+<h1><a class="anchor" id="scotch_tools_api"></a>
+Tools and API</h1>
+<p>When the machine is discovered and all the needed files are generated as seen previously, a user can call the netlocscotch functions from the API and interact with Scotch.</p>
+<h2><a class="anchor" id="netlocscotch_arch"></a>
+Build Scotch architectures</h2>
+<p>Netloc provides a function to export the built topology into the Scotch format. That will give the possibility to the user to play with the topology in Scotch. Since Netloc matches the discovered topology with known topologies, the Scotch architecture won’t be random graphs but known topologies also in Scotch that will lead to optimized graph algorithms. This function is called netlocscotch_build_arch.</p>
+<p>When the network topology is a tree, the topology converted by netlocscotch is the complete topology of the machine containing intranode topologies from hwloc. In this case, merging the two levels results in a bigger tree. For other network topologies, the global graph created for Scotch is a generic graph since it not not (at this moment) possible to create nested known architectures.</p>
+<h2><a class="anchor" id="netlocscotch_subarch"></a>
+Build Scotch sub-architectures</h2>
+<p>Most of the time, the user does not have access to the complete machine. He uses a resource manager to run his application and he will gain access only to a set of nodes. In this case getting the Scotch architecture of the complete machine is not relevant. Fortunately, Netloc is also able to build a Scotch sub-architecture that will contain only the available nodes. For this operation the user needs to run a specific program, netloc_get_resources, that will record in a file, the lists of available nodes and available cores by using MPI and hwloc. From this file, the function netlocscotch_build_subarch will build the Scotch sub-architecture.</p>
+<h2><a class="anchor" id="netlocscotch_mapping"></a>
+Mapping of processes</h2>
+<p>A main goal in having all these data about the network topology, especially in Scotch structures, is to help the process placement. For that, we use the mapping of a process graph to the architecture provided by Scotch. As we have seen previously, Netloc is able to detect the structure of the topology and will build the adapted Scotch architecture that will be more efficient than a random structure.</p>
+<p>In case, the network topology is not a tree, netlocscotch converts the complete topology into a generic graph. The drawback in that is the Scotch graph algorithms are less efficient. To overcome that, netlocscotch does two steps of mapping: first it maps the processes to the nodes, and then for each node maps the processes to the cores. We have to conduct tests to check if the method gives better results than using a generic graph directly.</p>
+<p>The other input needed in Scotch is the process graph. Since we want to optimize the placement to decrease the communication time, a good metric for building the application graph is the amount of communications between all pairs of processes. Studies still have to be done to choose, in the most efficient way, what we take into account to define the amount of communications between the number of messages, the size of messages... This information will be transformed into a process graph.</p>
+<p>Once we have a good mapping computed by Scotch, we can give it to the user, or Netloc can even generate the corresponding rank file useful to MPI. </p>
+</div></div><!-- contents -->
+</div><!-- PageDoc -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/annotated.html b/doc/doxygen-doc/html/annotated.html
new file mode 100644
index 00000000..27d3fe77
--- /dev/null
+++ b/doc/doxygen-doc/html/annotated.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Data Structures</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Data Structures</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here are the data structures with brief descriptions:</div><div class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00389.html" target="_self">hwloc_backend</a></td><td class="desc">Discovery backend structure </td></tr>
+<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00337.html" target="_self">hwloc_cl_device_topology_amd</a></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00393.html" target="_self">hwloc_component</a></td><td class="desc">Generic component structure </td></tr>
+<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00381.html" target="_self">hwloc_disc_component</a></td><td class="desc">Discovery component structure </td></tr>
+<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00385.html" target="_self">hwloc_disc_status</a></td><td class="desc">Discovery status structure </td></tr>
+<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00325.html" target="_self">hwloc_distances_s</a></td><td class="desc">Matrix of distances between a set of objects </td></tr>
+<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00301.html" target="_self">hwloc_info_s</a></td><td class="desc">Object info </td></tr>
+<tr id="row_7_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_7_" class="arrow" onclick="toggleFolder('7_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00329.html" target="_self">hwloc_location</a></td><td class="desc">Where to measure attributes from </td></tr>
+<tr id="row_7_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00333.html" target="_self">hwloc_location_u</a></td><td class="desc">Actual location </td></tr>
+<tr id="row_8_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00253.html" target="_self">hwloc_obj</a></td><td class="desc">Structure of a topology object </td></tr>
+<tr id="row_9_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_9_" class="arrow" onclick="toggleFolder('9_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00257.html" target="_self">hwloc_obj_attr_u</a></td><td class="desc">Object type-specific Attributes </td></tr>
+<tr id="row_9_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00281.html" target="_self">hwloc_bridge_attr_s</a></td><td class="desc">Bridge specific Object Attributes </td></tr>
+<tr id="row_9_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00269.html" target="_self">hwloc_cache_attr_s</a></td><td class="desc">Cache-specific Object Attributes </td></tr>
+<tr id="row_9_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00273.html" target="_self">hwloc_group_attr_s</a></td><td class="desc">Group-specific Object Attributes </td></tr>
+<tr id="row_9_3_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_9_3_" class="arrow" onclick="toggleFolder('9_3_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00261.html" target="_self">hwloc_numanode_attr_s</a></td><td class="desc">NUMA node-specific Object Attributes </td></tr>
+<tr id="row_9_3_0_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00265.html" target="_self">hwloc_memory_page_type_s</a></td><td class="desc">Array of local memory page types, <code>NULL</code> if no local memory and <code>page_types</code> is 0 </td></tr>
+<tr id="row_9_4_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00297.html" target="_self">hwloc_osdev_attr_s</a></td><td class="desc">OS Device specific Object Attributes </td></tr>
+<tr id="row_9_5_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00277.html" target="_self">hwloc_pcidev_attr_s</a></td><td class="desc">PCI Device specific Object Attributes </td></tr>
+<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00309.html" target="_self">hwloc_topology_cpubind_support</a></td><td class="desc">Flags describing actual PU binding support for this topology </td></tr>
+<tr id="row_11_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_11_" class="arrow" onclick="toggleFolder('11_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00349.html" target="_self">hwloc_topology_diff_obj_attr_u</a></td><td class="desc">One object attribute difference </td></tr>
+<tr id="row_11_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00353.html" target="_self">hwloc_topology_diff_obj_attr_generic_s</a></td><td class="desc"></td></tr>
+<tr id="row_11_1_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00361.html" target="_self">hwloc_topology_diff_obj_attr_string_s</a></td><td class="desc">String attribute modification with an optional name </td></tr>
+<tr id="row_11_2_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00357.html" target="_self">hwloc_topology_diff_obj_attr_uint64_s</a></td><td class="desc">Integer attribute modification with an optional index </td></tr>
+<tr id="row_12_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_12_" class="arrow" onclick="toggleFolder('12_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00365.html" target="_self">hwloc_topology_diff_u</a></td><td class="desc">One element of a difference list between two topologies </td></tr>
+<tr id="row_12_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00369.html" target="_self">hwloc_topology_diff_generic_s</a></td><td class="desc"></td></tr>
+<tr id="row_12_1_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00373.html" target="_self">hwloc_topology_diff_obj_attr_s</a></td><td class="desc"></td></tr>
+<tr id="row_12_2_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00377.html" target="_self">hwloc_topology_diff_too_complex_s</a></td><td class="desc"></td></tr>
+<tr id="row_13_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00305.html" target="_self">hwloc_topology_discovery_support</a></td><td class="desc">Flags describing actual discovery support for this topology </td></tr>
+<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00313.html" target="_self">hwloc_topology_membind_support</a></td><td class="desc">Flags describing actual memory binding support for this topology </td></tr>
+<tr id="row_15_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00317.html" target="_self">hwloc_topology_misc_support</a></td><td class="desc">Flags describing miscellaneous features </td></tr>
+<tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00321.html" target="_self">hwloc_topology_support</a></td><td class="desc">Set of flags describing actual support for this topology </td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/bc_s.png b/doc/doxygen-doc/html/bc_s.png
new file mode 100644
index 00000000..224b29aa
Binary files /dev/null and b/doc/doxygen-doc/html/bc_s.png differ
diff --git a/doc/doxygen-doc/html/bdwn.png b/doc/doxygen-doc/html/bdwn.png
new file mode 100644
index 00000000..940a0b95
Binary files /dev/null and b/doc/doxygen-doc/html/bdwn.png differ
diff --git a/doc/doxygen-doc/html/classes.html b/doc/doxygen-doc/html/classes.html
new file mode 100644
index 00000000..3109517f
--- /dev/null
+++ b/doc/doxygen-doc/html/classes.html
@@ -0,0 +1,58 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Data Structure Index</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Data Structure Index</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="qindex"><a class="qindex" href="#letter_H">H</a></div>
+<div class="classindex">
+<dl class="classindex even">
+<dt class="alphachar"><a name="letter_H">H</a></dt>
+<dd><a class="el" href="a00389.html">hwloc_backend</a></dd><dd><a class="el" href="a00281.html">hwloc_obj_attr_u::hwloc_bridge_attr_s</a></dd><dd><a class="el" href="a00269.html">hwloc_obj_attr_u::hwloc_cache_attr_s</a></dd><dd><a class="el" href="a00337.html">hwloc_cl_device_topology_amd</a></dd><dd><a class="el" href="a00393.html">hwloc_component</a></dd><dd><a class="el" href="a00381.html">hwloc_disc_component</a></dd><dd><a class="el" href="a00385.html">hwloc_disc_status</a></dd><dd><a class="el" href="a00325.html">hwloc_distances_s</a></dd><dd><a class="el" href="a00273.html">hwloc_obj_attr_u::hwloc_group_attr_s</a></dd><dd><a class="el" href="a00301.html">hwloc_info_s</a></dd><dd><a class="el" href="a00329.html">hwloc_location</a></dd><dd><a class="el" href="a00333.html">hwloc_location::hwloc_location_u</a></dd><dd><a class="el" href="a00265.html">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s</a></dd><dd><a class="el" href="a00261.html">hwloc_obj_attr_u::hwloc_numanode_attr_s</a></dd><dd><a class="el" href="a00253.html">hwloc_obj</a></dd><dd><a class="el" href="a00257.html">hwloc_obj_attr_u</a></dd><dd><a class="el" href="a00297.html">hwloc_obj_attr_u::hwloc_osdev_attr_s</a></dd><dd><a class="el" href="a00277.html">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a></dd><dd><a class="el" href="a00309.html">hwloc_topology_cpubind_support</a></dd><dd><a class="el" href="a00369.html">hwloc_topology_diff_u::hwloc_topology_diff_generic_s</a></dd><dd><a class="el" href="a00353.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s</a></dd><dd><a class="el" href="a00373.html">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a></dd><dd><a class="el" href="a00361.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a></dd><dd><a class="el" href="a00349.html">hwloc_topology_diff_obj_attr_u</a></dd><dd><a class="el" href="a00357.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a></dd><dd><a class="el" href="a00377.html">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a></dd><dd><a class="el" href="a00365.html">hwloc_topology_diff_u</a></dd><dd><a class="el" href="a00305.html">hwloc_topology_discovery_support</a></dd><dd><a class="el" href="a00313.html">hwloc_topology_membind_support</a></dd><dd><a class="el" href="a00317.html">hwloc_topology_misc_support</a></dd><dd><a class="el" href="a00321.html">hwloc_topology_support</a></dd></dl>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/closed.png b/doc/doxygen-doc/html/closed.png
new file mode 100644
index 00000000..98cc2c90
Binary files /dev/null and b/doc/doxygen-doc/html/closed.png differ
diff --git a/doc/doxygen-doc/html/devel09-pci.png b/doc/doxygen-doc/html/devel09-pci.png
new file mode 100644
index 00000000..50ae351c
Binary files /dev/null and b/doc/doxygen-doc/html/devel09-pci.png differ
diff --git a/doc/doxygen-doc/html/diagram.png b/doc/doxygen-doc/html/diagram.png
new file mode 100644
index 00000000..2eb38491
Binary files /dev/null and b/doc/doxygen-doc/html/diagram.png differ
diff --git a/doc/doxygen-doc/html/dir_5cb306d949c7931a3b6c77517393dd34.html b/doc/doxygen-doc/html/dir_5cb306d949c7931a3b6c77517393dd34.html
new file mode 100644
index 00000000..8bf409e6
--- /dev/null
+++ b/doc/doxygen-doc/html/dir_5cb306d949c7931a3b6c77517393dd34.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): hwloc Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_5cb306d949c7931a3b6c77517393dd34.html">hwloc</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">hwloc Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:a00131"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>bitmap.h</b> <a href="a00131_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a00143"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>cpukinds.h</b> <a href="a00143_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a00161"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>cuda.h</b> <a href="a00161_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a00164"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>cudart.h</b> <a href="a00164_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a00182"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>diff.h</b> <a href="a00182_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a00137"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>distances.h</b> <a href="a00137_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a00134"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>export.h</b> <a href="a00134_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a00176"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>gl.h</b> <a href="a00176_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a00155"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>glibc-sched.h</b> <a href="a00155_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a00128"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>helper.h</b> <a href="a00128_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a00173"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>levelzero.h</b> <a href="a00173_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a00149"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>linux-libnuma.h</b> <a href="a00149_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a00146"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>linux.h</b> <a href="a00146_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a00140"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>memattrs.h</b> <a href="a00140_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a00167"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>nvml.h</b> <a href="a00167_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a00158"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>opencl.h</b> <a href="a00158_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a00179"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>openfabrics-verbs.h</b> <a href="a00179_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a00188"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>plugins.h</b> <a href="a00188_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a00170"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>rsmi.h</b> <a href="a00170_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a00185"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>shmem.h</b> <a href="a00185_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a00152"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>windows.h</b> <a href="a00152_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/dir_d44c64559bbebec7f509842c48db8b23.html b/doc/doxygen-doc/html/dir_d44c64559bbebec7f509842c48db8b23.html
new file mode 100644
index 00000000..0730fcb3
--- /dev/null
+++ b/doc/doxygen-doc/html/dir_d44c64559bbebec7f509842c48db8b23.html
@@ -0,0 +1,69 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): include Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">include Directory Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_5cb306d949c7931a3b6c77517393dd34"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_5cb306d949c7931a3b6c77517393dd34.html">hwloc</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:a00125"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>hwloc.h</b> <a href="a00125_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a00191"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>netloc.h</b> <a href="a00191_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/doc.png b/doc/doxygen-doc/html/doc.png
new file mode 100644
index 00000000..17edabff
Binary files /dev/null and b/doc/doxygen-doc/html/doc.png differ
diff --git a/doc/doxygen-doc/html/doxygen.css b/doc/doxygen-doc/html/doxygen.css
new file mode 100644
index 00000000..3958a6c1
--- /dev/null
+++ b/doc/doxygen-doc/html/doxygen.css
@@ -0,0 +1,146 @@
+body {
+	font-size: 13px;
+/*	margin-top: 0px; */
+}
+
+div.menu {
+	text-align: center;
+	margin-top: 12px;
+	margin-bottom: 3px;
+	background: #eeeeff;
+	font-variant: small-caps;
+/*	position: fixed;*/
+	width: 100%;
+}
+div.menu a {
+	text-decoration: none;
+	color: #0020a0;
+}
+div.menu hr.menu {
+	height: 4px;
+	background: #fe0;
+	border: 0px;
+	margin-top: 0px;
+	margin-bottom: 0px;
+}
+
+div.title {
+	font: bold normal 2em sans-serif ;
+	margin: 0px;
+	color: #0020a0;
+}
+
+h1 {
+	font: bold normal 1.7em sans-serif ;
+	margin: 0px;
+	color: #0020a0;
+}
+h1.sub {
+	font: bold normal 1.3em sans-serif ;
+	text-align: right ;
+	color: #0020a0;
+}
+h1 a {
+	color: #0020a0;
+	text-decoration: none;
+}
+
+h2 {
+	font: bold normal small-caps 1.3em sans-serif ;
+	color: #0020a0;
+	margin-top: 8px;
+	margin-bottom: 8px;
+}
+
+h4 {
+	font: bold normal small-caps 1em sans-serif ;
+	color: #0020a0;
+	margin-top: 8px;
+	margin-bottom: 4px;
+}
+
+h6.mirrors {
+	text-align: right;
+	margin: 0px;
+	font-size: 10px;
+}
+
+div.section {
+	background: #eeeeff;
+	padding-left: 2px;
+	padding-bottom: 2px;
+	margin-top: 12px;
+	margin-bottom: 12px;
+}
+
+p {
+	margin-top: 8px;
+	margin-bottom: 4px;
+	margin-left: 6px;
+	margin-right: 6px;
+}
+
+hr {
+	height: 8px;
+	background: #fe0;
+	border: 0px;
+	margin-top: 6px;
+	margin-bottom: 6px;
+}
+
+pre {
+	font-size: 12px;
+	background: #dddddd;
+	padding: 3px;
+	padding-left: 0px;
+	margin-left: 12px;
+}
+
+a {
+	font-weight: bold;
+}
+
+div.publis-desc {
+	text-align: right;
+	font-style: italic;
+	font-size: 12px;
+	padding-left: 15%;
+}
+
+p.updated {
+	text-align: right;
+	font-size: 10px;
+	font-style: italic;
+}
+
+div.line {
+        font-family: monospace, fixed;
+        font-size: 13px;
+        min-height: 13px;
+        line-height: 1.0;
+        text-wrap: unrestricted;
+        white-space: -moz-pre-wrap; /* Moz */
+        white-space: -pre-wrap;     /* Opera 4-6 */
+        white-space: -o-pre-wrap;   /* Opera 7 */
+        white-space: pre-wrap;      /* CSS3  */
+        word-wrap: break-word;      /* IE 5.5+ */
+        text-indent: -53px;
+        padding-left: 53px;
+        padding-bottom: 0px;
+        margin: 0px;
+        -webkit-transition-property: background-color, box-shadow;
+        -webkit-transition-duration: 0.5s;
+        -moz-transition-property: background-color, box-shadow;
+        -moz-transition-duration: 0.5s;
+        -ms-transition-property: background-color, box-shadow;
+        -ms-transition-duration: 0.5s;
+        -o-transition-property: background-color, box-shadow;
+        -o-transition-duration: 0.5s;
+        transition-property: background-color, box-shadow;
+        transition-duration: 0.5s;
+}
+
+div.line.glow {
+        background-color: cyan;
+        box-shadow: 0 0 10px cyan;
+}
diff --git a/doc/doxygen-doc/html/doxygen.svg b/doc/doxygen-doc/html/doxygen.svg
new file mode 100644
index 00000000..d42dad52
--- /dev/null
+++ b/doc/doxygen-doc/html/doxygen.svg
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 104 31" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+  <linearGradient id="a">
+   <stop stop-color="#5373B4" offset="0"/>
+   <stop stop-color="#7C95C6" offset="1"/>
+  </linearGradient>
+  <linearGradient id="d" x1="31.474" x2="31.474" y1="24.821" y2="26.773" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
+  <linearGradient id="c" x1="31.474" x2="31.474" y1="24.821" y2="26.773" gradientTransform="matrix(.6816 0 0 1.0248 72.391 -.91809)" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
+  <linearGradient id="b" x1="56.295" x2="56.295" y1="24.622" y2="26.574" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
+  <linearGradient id="e" x1="49.067" x2="48.956" y1="19.719" y2="9.5227" gradientTransform="matrix(.97968 0 0 1.0207 -.25579 -.25579)" gradientUnits="userSpaceOnUse">
+   <stop stop-color="#C0CCE3" offset="0"/>
+   <stop stop-color="#EEF1F7" offset="1"/>
+  </linearGradient>
+  <filter id="f" x="-.010676" y="-.045304" width="1.0214" height="1.0906" color-interpolation-filters="sRGB">
+   <feGaussianBlur stdDeviation="0.45293203"/>
+  </filter>
+ </defs>
+ <g>
+  <path transform="translate(-2.5759 -27.848)" d="m13.609 32.203v6.8633h-0.05078c-0.40533-0.66867-0.96254-1.1715-1.6719-1.5059-0.69244-0.35193-1.4282-0.52734-2.2051-0.52734-0.96267 0-1.807 0.2027-2.5332 0.60742-0.72622 0.38713-1.3344 0.90556-1.8242 1.5566-0.47289 0.65108-0.83456 1.4092-1.0879 2.2715-0.23644 0.84464-0.35547 1.7236-0.35547 2.6387 0 0.95022 0.11902 1.8643 0.35547 2.7441 0.25333 0.87983 0.615 1.6633 1.0879 2.3496 0.48978 0.66867 1.1065 1.2066 1.8496 1.6113 0.74311 0.38713 1.6044 0.58008 2.584 0.58008 0.86133 0 1.6311-0.15787 2.3066-0.47461 0.69244-0.33434 1.2497-0.87227 1.6719-1.6113h0.05078v1.7422h3.4199v-18.846zm12.875 4.8301c-1.0302 0-1.9596 0.17541-2.7871 0.52734-0.82756 0.33434-1.5358 0.81965-2.127 1.4531-0.59111 0.61588-1.0483 1.3721-1.3691 2.2695-0.32089 0.87983-0.48047 1.866-0.48047 2.957s0.15958 2.0752 0.48047 2.9551c0.32089 0.87983 0.77803 1.6361 1.3691 2.2695 0.59111 0.61588 1.2994 1.0914 2.127 1.4258 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.0302 0 1.9596-0.16762 2.7871-0.50195 0.84444-0.33434 1.5612-0.8099 2.1523-1.4258 0.59111-0.63348 1.0483-1.3897 1.3691-2.2695 0.32089-0.87983 0.48047-1.8641 0.48047-2.9551s-0.15958-2.0772-0.48047-2.957c-0.32089-0.89743-0.77803-1.6536-1.3691-2.2695-0.59111-0.63348-1.3079-1.1188-2.1523-1.4531-0.82756-0.35193-1.7569-0.52734-2.7871-0.52734zm41.715 0c-0.912 0-1.7223 0.18516-2.4316 0.55469-0.69244 0.36953-1.2752 0.87043-1.748 1.5039-0.47289 0.61588-0.83651 1.337-1.0898 2.1641-0.23645 0.80944-0.35352 1.6553-0.35352 2.5352 0 0.93262 0.10007 1.8214 0.30273 2.666 0.21956 0.82704 0.55767 1.556 1.0137 2.1895 0.456 0.61588 1.0387 1.109 1.748 1.4785 0.70933 0.35193 1.5536 0.5293 2.5332 0.5293 0.79378 0 1.5446-0.16762 2.2539-0.50195 0.72622-0.35193 1.2834-0.88986 1.6719-1.6113h0.05078v1.7949c0.01689 0.96782-0.21071 1.7689-0.68359 2.4023-0.456 0.63348-1.1898 0.95117-2.2031 0.95117-0.64178 0-1.2075-0.14228-1.6973-0.42383-0.48978-0.26395-0.81939-0.74731-0.98828-1.4512h-3.5723c0.05067 0.77425 0.25276 1.435 0.60742 1.9805 0.37156 0.56309 0.8287 1.0192 1.3691 1.3711 0.55733 0.35193 1.1656 0.60726 1.8242 0.76562 0.67556 0.17597 1.3328 0.26562 1.9746 0.26562 1.5031 0 2.7025-0.21245 3.5977-0.63477 0.89511-0.42232 1.5798-0.94076 2.0527-1.5566 0.47289-0.59829 0.777-1.2493 0.91211-1.9531 0.152-0.70386 0.22656-1.3295 0.22656-1.875v-12.775h-3.4199v1.8223h-0.05078c-0.43911-0.79185-0.98782-1.3551-1.6465-1.6895-0.64178-0.33434-1.3926-0.50195-2.2539-0.50195zm16.523 0c-0.99644 0-1.9088 0.18516-2.7363 0.55469-0.81067 0.36953-1.5124 0.88018-2.1035 1.5312-0.59111 0.63348-1.0463 1.3897-1.3672 2.2695s-0.48047 1.831-0.48047 2.8516c0 1.0558 0.15108 2.0225 0.45508 2.9023 0.32089 0.87983 0.76758 1.6361 1.3418 2.2695 0.57422 0.63348 1.276 1.1266 2.1035 1.4785 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.4862 0 2.7517-0.35277 3.7988-1.0566 1.0471-0.70387 1.8254-1.8733 2.332-3.5098h-3.168c-0.11822 0.42232-0.43934 0.82772-0.96289 1.2148-0.52355 0.36953-1.1468 0.55274-1.873 0.55273-1.0133 0-1.7916-0.27286-2.332-0.81836-0.54044-0.5455-0.83605-1.4245-0.88672-2.6387h9.4492c0.06756-1.0558-0.01551-2.0673-0.25195-3.0352-0.23644-0.96782-0.62557-1.8293-1.166-2.5859-0.52356-0.75666-1.1998-1.355-2.0273-1.7949-0.82756-0.45751-1.7974-0.6875-2.9121-0.6875zm16.189 0c-0.76 0-1.5023 0.18516-2.2285 0.55469-0.72622 0.35193-1.3174 0.92299-1.7734 1.7148h-0.07617v-1.9004h-3.4199v13.646h3.5977v-7.1523c0-1.3901 0.21909-2.3841 0.6582-2.9824 0.43911-0.61588 1.1494-0.92383 2.1289-0.92383 0.86133 0 1.4611 0.28066 1.7988 0.84375 0.33777 0.5455 0.50586 1.3816 0.50586 2.5078v7.707h3.5976v-8.3926c0-0.84464-0.0765-1.6106-0.22851-2.2969-0.13511-0.70387-0.37971-1.2925-0.73438-1.7676-0.35466-0.49271-0.84386-0.87277-1.4688-1.1367-0.608-0.28155-1.3948-0.42188-2.3574-0.42188zm-66.063 0.36914 4.3066 6.4668-4.7129 7.1797h4.0293l2.7363-4.3027 2.7344 4.3027h4.1055l-4.8398-7.2578 4.3066-6.3887h-3.9766l-2.2793 3.5645-2.3066-3.5645zm13.275 0 4.584 12.803c0.10133 0.26395 0.15234 0.54461 0.15234 0.84375 0 0.40472-0.11707 0.77504-0.35352 1.1094-0.21956 0.33434-0.56617 0.52729-1.0391 0.58008-0.35467 0.0176-0.70979 0.0098-1.0645-0.02539-0.35467-0.03519-0.70128-0.07028-1.0391-0.10547v3.0879c0.37156 0.03519 0.73518 0.06051 1.0898 0.07813 0.37156 0.03519 0.74368 0.05273 1.1152 0.05273 1.2329 0 2.1943-0.23778 2.8867-0.71289 0.69244-0.47511 1.2326-1.2664 1.6211-2.375l5.4727-15.336h-3.7246l-2.8613 9.3438h-0.05078l-2.9648-9.3438zm-37.48 2.4551c0.59111 0 1.0823 0.12279 1.4707 0.36914 0.38844 0.24635 0.6991 0.57184 0.93555 0.97656 0.25333 0.38713 0.43187 0.84515 0.5332 1.373 0.10133 0.5103 0.15234 1.0482 0.15234 1.6113 0 0.56309-0.05101 1.1069-0.15234 1.6348-0.10133 0.5279-0.27137 1.0035-0.50781 1.4258-0.23644 0.40472-0.5556 0.73021-0.96094 0.97656-0.38844 0.24635-0.87959 0.36914-1.4707 0.36914-0.55733 0-1.038-0.12279-1.4434-0.36914-0.38844-0.26395-0.71806-0.59723-0.98828-1.002-0.25333-0.42232-0.43842-0.89788-0.55664-1.4258s-0.17773-1.0561-0.17773-1.584c-1e-7 -0.56309 0.05101-1.0991 0.15234-1.6094 0.11822-0.5279 0.29481-0.99567 0.53125-1.4004 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.24635 0.90303-0.36914 1.4941-0.36914zm15.84 0c0.608 0 1.1142 0.13253 1.5195 0.39648 0.42222 0.24635 0.75184 0.57184 0.98828 0.97656 0.25333 0.40472 0.42992 0.87054 0.53125 1.3984 0.10133 0.5279 0.15234 1.0658 0.15234 1.6113 0 0.5455-0.05101 1.0815-0.15234 1.6094-0.10134 0.5103-0.27792 0.97612-0.53125 1.3984-0.23644 0.40472-0.56606 0.73021-0.98828 0.97656-0.40533 0.24635-0.91153 0.36914-1.5195 0.36914-0.608 0-1.1142-0.12279-1.5195-0.36914s-0.73495-0.57184-0.98828-0.97656c-0.23644-0.42232-0.40648-0.88814-0.50781-1.3984-0.10133-0.5279-0.15234-1.0639-0.15234-1.6094 0-0.5455 0.05101-1.0834 0.15234-1.6113 0.10133-0.5279 0.27137-0.99371 0.50781-1.3984 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.26395 0.91153-0.39648 1.5195-0.39648zm42.602 0c0.59111 0 1.0803 0.11499 1.4688 0.34375 0.38844 0.22876 0.70105 0.5367 0.9375 0.92383 0.23644 0.38713 0.40648 0.8354 0.50781 1.3457 0.10133 0.49271 0.15039 1.0209 0.15039 1.584 0 0.4927-0.06606 0.96827-0.20117 1.4258-0.11822 0.43992-0.30526 0.83557-0.55859 1.1875-0.25333 0.35193-0.57445 0.63259-0.96289 0.84375-0.38844 0.21116-0.83513 0.31836-1.3418 0.31836-0.55733 0-1.021-0.12474-1.3926-0.37109-0.37156-0.24635-0.67566-0.56209-0.91211-0.94922-0.21956-0.38713-0.38109-0.81786-0.48242-1.293-0.08444-0.49271-0.12695-0.98581-0.12695-1.4785 0-0.5103 0.05101-0.99366 0.15234-1.4512 0.11822-0.47511 0.29676-0.89025 0.5332-1.2422 0.25333-0.36953 0.55744-0.65993 0.91211-0.87109 0.37156-0.21116 0.80974-0.31641 1.3164-0.31641zm15.535 0c0.87822 0 1.529 0.24753 1.9512 0.74023 0.43911 0.49271 0.74322 1.2138 0.91211 2.1641h-5.8535c0.01689-0.26395 0.0679-0.5641 0.15234-0.89844 0.10133-0.33434 0.26287-0.65008 0.48242-0.94922 0.23644-0.29914 0.54055-0.54667 0.91211-0.74023 0.38845-0.21116 0.86914-0.31641 1.4434-0.31641z" filter="url(#f)" opacity=".3" stroke="#969696" xlink:href="#path141"/>
+  <path d="m0.97202 24.161 43.605-0.0019 0.0508 3.3061-43.6 0.04174z" fill="url(#d)" stroke="#000" stroke-width=".5"/>
+  <path d="m10.283 3.5547v6.8633h-0.05078c-0.40533-0.66867-0.96254-1.1715-1.6719-1.5059-0.69244-0.35193-1.4282-0.52734-2.2051-0.52734-0.96267 0-1.807 0.2027-2.5332 0.60742-0.72622 0.38713-1.3344 0.90556-1.8242 1.5566-0.47289 0.65108-0.83456 1.4092-1.0879 2.2715-0.23644 0.84464-0.35547 1.7236-0.35547 2.6387 0 0.95022 0.11902 1.8643 0.35547 2.7441 0.25333 0.87983 0.615 1.6633 1.0879 2.3496 0.48978 0.66867 1.1065 1.2066 1.8496 1.6113 0.74311 0.38713 1.6044 0.58008 2.584 0.58008 0.86133 0 1.6311-0.15787 2.3066-0.47461 0.69244-0.33434 1.2497-0.87227 1.6719-1.6113h0.05078v1.7422h3.4199v-18.846zm12.875 4.8301c-1.0302 0-1.9596 0.17541-2.7871 0.52734-0.82756 0.33434-1.5358 0.81965-2.127 1.4531-0.59111 0.61588-1.0483 1.3721-1.3691 2.2695-0.32089 0.87983-0.48047 1.866-0.48047 2.957s0.15958 2.0752 0.48047 2.9551c0.32089 0.87983 0.77803 1.6361 1.3691 2.2695 0.59111 0.61588 1.2994 1.0914 2.127 1.4258 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.0302 0 1.9596-0.16762 2.7871-0.50195 0.84444-0.33434 1.5612-0.8099 2.1523-1.4258 0.59111-0.63348 1.0483-1.3897 1.3691-2.2695 0.32089-0.87983 0.48047-1.8641 0.48047-2.9551s-0.15958-2.0772-0.48047-2.957c-0.32089-0.89743-0.77803-1.6536-1.3691-2.2695-0.59111-0.63348-1.3079-1.1188-2.1523-1.4531-0.82756-0.35193-1.7569-0.52734-2.7871-0.52734zm41.715 0c-0.912 0-1.7223 0.18516-2.4316 0.55469-0.69244 0.36953-1.2752 0.87043-1.748 1.5039-0.47289 0.61588-0.83651 1.337-1.0898 2.1641-0.23644 0.80944-0.35352 1.6553-0.35352 2.5352 0 0.93262 0.10007 1.8214 0.30273 2.666 0.21956 0.82704 0.55767 1.556 1.0137 2.1895 0.456 0.61588 1.0387 1.109 1.748 1.4785 0.70933 0.35193 1.5536 0.5293 2.5332 0.5293 0.79378 0 1.5446-0.16762 2.2539-0.50195 0.72622-0.35193 1.2834-0.88986 1.6719-1.6113h0.05078v1.7949c0.01689 0.96782-0.21071 1.7689-0.68359 2.4023-0.456 0.63348-1.1898 0.95117-2.2031 0.95117-0.64178 0-1.2075-0.14228-1.6973-0.42383-0.48978-0.26395-0.81939-0.74731-0.98828-1.4512h-3.5723c0.05067 0.77425 0.25276 1.435 0.60742 1.9805 0.37156 0.56309 0.8287 1.0192 1.3691 1.3711 0.55733 0.35193 1.1656 0.60726 1.8242 0.76562 0.67556 0.17597 1.3328 0.26562 1.9746 0.26562 1.5031 0 2.7025-0.21245 3.5977-0.63477 0.89511-0.42232 1.5798-0.94076 2.0527-1.5566 0.47289-0.59829 0.777-1.2493 0.91211-1.9531 0.152-0.70386 0.22656-1.3295 0.22656-1.875v-12.775h-3.4199v1.8223h-0.05078c-0.43911-0.79185-0.98782-1.3551-1.6465-1.6895-0.64178-0.33434-1.3926-0.50195-2.2539-0.50195zm16.523 0c-0.99644 0-1.9088 0.18516-2.7363 0.55469-0.81067 0.36953-1.5124 0.88017-2.1035 1.5312-0.59111 0.63348-1.0463 1.3897-1.3672 2.2695s-0.48047 1.831-0.48047 2.8516c0 1.0558 0.15108 2.0225 0.45508 2.9023 0.32089 0.87983 0.76758 1.6361 1.3418 2.2695 0.57422 0.63348 1.276 1.1266 2.1035 1.4785 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.4862 0 2.7517-0.35278 3.7988-1.0566 1.0471-0.70386 1.8254-1.8733 2.332-3.5098h-3.168c-0.11822 0.42232-0.43934 0.82772-0.96289 1.2148-0.52355 0.36953-1.1468 0.55274-1.873 0.55273-1.0133 0-1.7916-0.27286-2.332-0.81836-0.54044-0.5455-0.83605-1.4245-0.88672-2.6387h9.4492c0.06756-1.0558-0.01551-2.0673-0.25195-3.0352-0.23644-0.96782-0.62557-1.8293-1.166-2.5859-0.52356-0.75666-1.1998-1.355-2.0273-1.7949-0.82756-0.45751-1.7974-0.6875-2.9121-0.6875zm16.189 0c-0.76 0-1.5023 0.18516-2.2285 0.55469-0.72622 0.35193-1.3174 0.923-1.7734 1.7148h-0.07617v-1.9004h-3.4199v13.646h3.5977v-7.1523c0-1.3901 0.21909-2.3841 0.6582-2.9824 0.43911-0.61588 1.1494-0.92383 2.1289-0.92383 0.86133 0 1.461 0.28066 1.7988 0.84375 0.33778 0.5455 0.50586 1.3816 0.50586 2.5078v7.707h3.5977v-8.3926c0-0.84464-0.0765-1.6106-0.22852-2.2969-0.13511-0.70387-0.3797-1.2925-0.73437-1.7676-0.35466-0.49271-0.84386-0.87277-1.4688-1.1367-0.608-0.28155-1.3948-0.42188-2.3574-0.42188zm-66.062 0.36914 4.3066 6.4668-4.7129 7.1797h4.0293l2.7363-4.3027 2.7344 4.3027h4.1055l-4.8398-7.2578 4.3066-6.3887h-3.9766l-2.2793 3.5645-2.3066-3.5645zm13.275 0 4.584 12.803c0.10133 0.26395 0.15234 0.54461 0.15234 0.84375 0 0.40472-0.11707 0.77504-0.35352 1.1094-0.21956 0.33434-0.56617 0.52729-1.0391 0.58008-0.35467 0.0176-0.70979 0.0098-1.0645-0.02539-0.35467-0.03519-0.70128-0.07027-1.0391-0.10547v3.0879c0.37156 0.03519 0.73518 0.06052 1.0898 0.07813 0.37156 0.03519 0.74368 0.05273 1.1152 0.05273 1.2329 0 2.1943-0.23778 2.8867-0.71289 0.69244-0.47511 1.2326-1.2664 1.6211-2.375l5.4727-15.336h-3.7246l-2.8613 9.3437h-0.05078l-2.9648-9.3437zm-37.48 2.4551c0.59111 0 1.0823 0.12279 1.4707 0.36914s0.6991 0.57184 0.93555 0.97656c0.25333 0.38713 0.43187 0.84515 0.5332 1.373 0.10133 0.5103 0.15234 1.0482 0.15234 1.6113 0 0.56309-0.05101 1.1069-0.15234 1.6348-0.10133 0.5279-0.27137 1.0035-0.50781 1.4258-0.23644 0.40472-0.5556 0.73021-0.96094 0.97656-0.38844 0.24635-0.87959 0.36914-1.4707 0.36914-0.55733 0-1.038-0.12279-1.4434-0.36914-0.38844-0.26395-0.71806-0.59723-0.98828-1.002-0.25333-0.42232-0.43842-0.89788-0.55664-1.4258s-0.17773-1.0561-0.17773-1.584c-1e-7 -0.56309 0.05101-1.0991 0.15234-1.6094 0.11822-0.5279 0.29481-0.99567 0.53125-1.4004 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.24635 0.90303-0.36914 1.4941-0.36914zm15.84 0c0.608 0 1.1142 0.13254 1.5195 0.39648 0.42222 0.24635 0.75184 0.57184 0.98828 0.97656 0.25333 0.40472 0.42992 0.87054 0.53125 1.3984 0.10133 0.5279 0.15234 1.0658 0.15234 1.6113 0 0.5455-0.05101 1.0815-0.15234 1.6094-0.10133 0.5103-0.27792 0.97612-0.53125 1.3984-0.23644 0.40472-0.56606 0.73021-0.98828 0.97656-0.40533 0.24635-0.91153 0.36914-1.5195 0.36914-0.608 0-1.1142-0.12279-1.5195-0.36914s-0.73495-0.57184-0.98828-0.97656c-0.23644-0.42232-0.40648-0.88813-0.50781-1.3984-0.10133-0.5279-0.15234-1.0639-0.15234-1.6094 0-0.5455 0.05101-1.0834 0.15234-1.6113 0.10133-0.5279 0.27137-0.99371 0.50781-1.3984 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.26395 0.91153-0.39648 1.5195-0.39648zm42.602 0c0.59111 0 1.0803 0.11499 1.4688 0.34375 0.38844 0.22876 0.70106 0.5367 0.9375 0.92383 0.23644 0.38713 0.40648 0.8354 0.50781 1.3457 0.10133 0.49271 0.15039 1.0209 0.15039 1.584 0 0.49271-0.06606 0.96827-0.20117 1.4258-0.11822 0.43992-0.30526 0.83557-0.55859 1.1875-0.25333 0.35193-0.57445 0.63259-0.96289 0.84375-0.38844 0.21116-0.83513 0.31836-1.3418 0.31836-0.55733 0-1.021-0.12474-1.3926-0.37109-0.37156-0.24635-0.67566-0.56209-0.91211-0.94922-0.21956-0.38713-0.38109-0.81786-0.48242-1.293-0.08444-0.49271-0.12695-0.98581-0.12695-1.4785 0-0.5103 0.05101-0.99366 0.15234-1.4512 0.11822-0.47511 0.29676-0.89026 0.5332-1.2422 0.25333-0.36953 0.55744-0.65993 0.91211-0.87109 0.37156-0.21116 0.80974-0.31641 1.3164-0.31641zm15.535 0c0.87822 0 1.529 0.24753 1.9512 0.74024 0.43911 0.49271 0.74322 1.2138 0.91211 2.1641h-5.8535c0.01689-0.26395 0.0679-0.5641 0.15234-0.89844 0.10133-0.33434 0.26287-0.65008 0.48242-0.94922 0.23644-0.29914 0.54055-0.54667 0.91211-0.74023 0.38845-0.21116 0.86914-0.31641 1.4434-0.31641z" fill="url(#e)" stroke="#4665A2" stroke-width=".7"/>
+  <path d="m52.988 27.291c0.99602-1.0359 1.3944-1.8725 1.7928-3.1076l3.8247-0.03984c0.3113 1.6096 0.82413 2.5137 1.6335 3.1474z" fill="url(#b)" stroke="#000" stroke-width=".5"/>
+  <path d="m73.89 24.04 28.885-0.2011-0.12476 3.3879-31.033 0.16229c1.2621-1.0234 1.9665-2.2859 2.2724-3.3491z" fill="url(#c)" stroke="#000" stroke-width=".41788"/>
+ </g>
+</svg>
diff --git a/doc/doxygen-doc/html/dudley.png b/doc/doxygen-doc/html/dudley.png
new file mode 100644
index 00000000..a1df53f9
Binary files /dev/null and b/doc/doxygen-doc/html/dudley.png differ
diff --git a/doc/doxygen-doc/html/dynsections.js b/doc/doxygen-doc/html/dynsections.js
new file mode 100644
index 00000000..3174bd7b
--- /dev/null
+++ b/doc/doxygen-doc/html/dynsections.js
@@ -0,0 +1,121 @@
+/*
+ @licstart  The following is the entire license notice for the JavaScript code in this file.
+
+ The MIT License (MIT)
+
+ Copyright (C) 1997-2020 by Dimitri van Heesch
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend  The above is the entire license notice for the JavaScript code in this file
+ */
+function toggleVisibility(linkObj)
+{
+ var base = $(linkObj).attr('id');
+ var summary = $('#'+base+'-summary');
+ var content = $('#'+base+'-content');
+ var trigger = $('#'+base+'-trigger');
+ var src=$(trigger).attr('src');
+ if (content.is(':visible')===true) {
+   content.hide();
+   summary.show();
+   $(linkObj).addClass('closed').removeClass('opened');
+   $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+   content.show();
+   summary.hide();
+   $(linkObj).removeClass('closed').addClass('opened');
+   $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
+ }
+ return false;
+}
+
+function updateStripes()
+{
+  $('table.directory tr').
+       removeClass('even').filter(':visible:even').addClass('even');
+}
+
+function toggleLevel(level)
+{
+  $('table.directory tr').each(function() {
+    var l = this.id.split('_').length-1;
+    var i = $('#img'+this.id.substring(3));
+    var a = $('#arr'+this.id.substring(3));
+    if (l<level+1) {
+      i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
+      a.html('&#9660;');
+      $(this).show();
+    } else if (l==level+1) {
+      i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
+      a.html('&#9658;');
+      $(this).show();
+    } else {
+      $(this).hide();
+    }
+  });
+  updateStripes();
+}
+
+function toggleFolder(id)
+{
+  // the clicked row
+  var currentRow = $('#row_'+id);
+
+  // all rows after the clicked row
+  var rows = currentRow.nextAll("tr");
+
+  var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
+
+  // only match elements AFTER this one (can't hide elements before)
+  var childRows = rows.filter(function() { return this.id.match(re); });
+
+  // first row is visible we are HIDING
+  if (childRows.filter(':first').is(':visible')===true) {
+    // replace down arrow by right arrow for current row
+    var currentRowSpans = currentRow.find("span");
+    currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+    currentRowSpans.filter(".arrow").html('&#9658;');
+    rows.filter("[id^=row_"+id+"]").hide(); // hide all children
+  } else { // we are SHOWING
+    // replace right arrow by down arrow for current row
+    var currentRowSpans = currentRow.find("span");
+    currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
+    currentRowSpans.filter(".arrow").html('&#9660;');
+    // replace down arrows by right arrows for child rows
+    var childRowsSpans = childRows.find("span");
+    childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+    childRowsSpans.filter(".arrow").html('&#9658;');
+    childRows.show(); //show all children
+  }
+  updateStripes();
+}
+
+
+function toggleInherit(id)
+{
+  var rows = $('tr.inherit.'+id);
+  var img = $('tr.inherit_header.'+id+' img');
+  var src = $(img).attr('src');
+  if (rows.filter(':first').is(':visible')===true) {
+    rows.css('display','none');
+    $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
+  } else {
+    rows.css('display','table-row'); // using show() causes jump in firefox
+    $(img).attr('src',src.substring(0,src.length-10)+'open.png');
+  }
+}
+/* @license-end */
diff --git a/doc/doxygen-doc/html/emmett.png b/doc/doxygen-doc/html/emmett.png
new file mode 100644
index 00000000..7d5c13eb
Binary files /dev/null and b/doc/doxygen-doc/html/emmett.png differ
diff --git a/doc/doxygen-doc/html/folderclosed.png b/doc/doxygen-doc/html/folderclosed.png
new file mode 100644
index 00000000..bb8ab35e
Binary files /dev/null and b/doc/doxygen-doc/html/folderclosed.png differ
diff --git a/doc/doxygen-doc/html/folderopen.png b/doc/doxygen-doc/html/folderopen.png
new file mode 100644
index 00000000..d6c7f676
Binary files /dev/null and b/doc/doxygen-doc/html/folderopen.png differ
diff --git a/doc/doxygen-doc/html/functions.html b/doc/doxygen-doc/html/functions.html
new file mode 100644
index 00000000..e81400da
--- /dev/null
+++ b/doc/doxygen-doc/html/functions.html
@@ -0,0 +1,587 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div>
+
+<h3><a id="index_a"></a>- a -</h3><ul>
+<li>abi
+: <a class="el" href="a00393.html#a3250bd6fc9713946991d805e48091b2e">hwloc_component</a>
+</li>
+<li>alloc_membind
+: <a class="el" href="a00313.html#ae551abb27d2aa9ce008583488b845b98">hwloc_topology_membind_support</a>
+</li>
+<li>arity
+: <a class="el" href="a00253.html#aac3f6da35c9b57599909a44ce2b716c1">hwloc_obj</a>
+</li>
+<li>associativity
+: <a class="el" href="a00269.html#ad06525e474d1e2d1423ed71bb998592d">hwloc_obj_attr_u::hwloc_cache_attr_s</a>
+</li>
+<li>attr
+: <a class="el" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj</a>
+</li>
+</ul>
+
+
+<h3><a id="index_b"></a>- b -</h3><ul>
+<li>bind_membind
+: <a class="el" href="a00313.html#ae7cdb1f1b5f0242a69f85b5a5538c764">hwloc_topology_membind_support</a>
+</li>
+<li>bridge
+: <a class="el" href="a00257.html#a207e6359497b7116d6f4baa9e8bbeb43">hwloc_obj_attr_u</a>
+</li>
+<li>bus
+: <a class="el" href="a00337.html#a4a23e3cc034b7ab105cab0e863dcab69">hwloc_cl_device_topology_amd</a>
+, <a class="el" href="a00277.html#aae99e035e8d1387d7b8768aaa8eceb0a">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
+</li>
+</ul>
+
+
+<h3><a id="index_c"></a>- c -</h3><ul>
+<li>cache
+: <a class="el" href="a00257.html#a23f553f3252c9d13f2338231cd354ea9">hwloc_obj_attr_u</a>
+</li>
+<li>children
+: <a class="el" href="a00253.html#a04d05403da37bfe17cd63b7c7dd07b1f">hwloc_obj</a>
+</li>
+<li>class_id
+: <a class="el" href="a00277.html#aee735352d9f1686fd290fc6d6397c334">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
+</li>
+<li>complete_cpuset
+: <a class="el" href="a00253.html#a91788a9da687beb7224cc1fd7b75208c">hwloc_obj</a>
+</li>
+<li>complete_nodeset
+: <a class="el" href="a00253.html#ac38c4012127525ef74c5615c526f4c2e">hwloc_obj</a>
+</li>
+<li>count
+: <a class="el" href="a00265.html#a98514e37d57a325b78e21ffd8d7419e0">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s</a>
+</li>
+<li>cpubind
+: <a class="el" href="a00321.html#adef2bb91f74c3e70a2a071393caf5f56">hwloc_topology_support</a>
+</li>
+<li>cpukind_efficiency
+: <a class="el" href="a00305.html#aba80d6f9c15e2395f9ed61db9ff3b75d">hwloc_topology_discovery_support</a>
+</li>
+<li>cpuset
+: <a class="el" href="a00333.html#a033bad8f6b891992f0c18b85a88c5561">hwloc_location::hwloc_location_u</a>
+, <a class="el" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">hwloc_obj</a>
+</li>
+</ul>
+
+
+<h3><a id="index_d"></a>- d -</h3><ul>
+<li>data
+: <a class="el" href="a00337.html#afbd6b814607b06fc5b2f36ad14420398">hwloc_cl_device_topology_amd</a>
+, <a class="el" href="a00393.html#a4b8cffd1d943c29fdc102b841b8598d4">hwloc_component</a>
+</li>
+<li>depth
+: <a class="el" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">hwloc_obj</a>
+, <a class="el" href="a00281.html#a336c8b22893d5d734d8c9dfca4066b46">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
+, <a class="el" href="a00269.html#a5c8f7f39193736c2187ed626940835d5">hwloc_obj_attr_u::hwloc_cache_attr_s</a>
+, <a class="el" href="a00273.html#ad914eac61c77481e1b7037877bcc5579">hwloc_obj_attr_u::hwloc_group_attr_s</a>
+</li>
+<li>dev
+: <a class="el" href="a00277.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
+</li>
+<li>device
+: <a class="el" href="a00337.html#a017033a953d71455b067007cabb92e9c">hwloc_cl_device_topology_amd</a>
+</li>
+<li>device_id
+: <a class="el" href="a00277.html#a35b66064ab7d768caf7154e410caf0fa">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
+</li>
+<li>diff
+: <a class="el" href="a00373.html#a91f0645f9062e892652357cd141c8ebb">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>
+</li>
+<li>disable
+: <a class="el" href="a00389.html#a36c4fa86350525b46340c67b802c69c7">hwloc_backend</a>
+</li>
+<li>disallowed_numa
+: <a class="el" href="a00305.html#a970e65235873bcdb9669a9805161ce03">hwloc_topology_discovery_support</a>
+</li>
+<li>disallowed_pu
+: <a class="el" href="a00305.html#af3c97b28781a2972cf8eaaf94a6617da">hwloc_topology_discovery_support</a>
+</li>
+<li>discover
+: <a class="el" href="a00389.html#accff2cd8404be43c3b44cec05e6f609b">hwloc_backend</a>
+</li>
+<li>discovery
+: <a class="el" href="a00321.html#aea3fbd7653d987d81f848636c420504d">hwloc_topology_support</a>
+</li>
+<li>domain
+: <a class="el" href="a00281.html#a2c31e565a5f0d23d0a0a3dd3ec8f4b17">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
+, <a class="el" href="a00277.html#a8fba44988deb98613c1505a4019a34dc">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
+</li>
+<li>dont_merge
+: <a class="el" href="a00273.html#afa253d4b70f92e940c226d61f192054f">hwloc_obj_attr_u::hwloc_group_attr_s</a>
+</li>
+<li>downstream
+: <a class="el" href="a00281.html#a7d5db91d655ba23ffe9bda7a2cbcb9a8">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
+</li>
+<li>downstream_type
+: <a class="el" href="a00281.html#ac6a169b672d0e9f75756fd5665828b93">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
+</li>
+</ul>
+
+
+<h3><a id="index_e"></a>- e -</h3><ul>
+<li>enabled_by_default
+: <a class="el" href="a00381.html#ace80cafe2b1732b047b3fc3da47e6517">hwloc_disc_component</a>
+</li>
+<li>excluded_phases
+: <a class="el" href="a00381.html#acbb9957914dbf7b8f504215aa0c8d3fe">hwloc_disc_component</a>
+, <a class="el" href="a00385.html#a0f95fa42d46a6e7cf8dee8af12afee3a">hwloc_disc_status</a>
+</li>
+</ul>
+
+
+<h3><a id="index_f"></a>- f -</h3><ul>
+<li>finalize
+: <a class="el" href="a00393.html#a4612015451a1c706e8ba19114cb8baae">hwloc_component</a>
+</li>
+<li>first_child
+: <a class="el" href="a00253.html#af51d08a0a79dba517c06c5afedc8d2dc">hwloc_obj</a>
+</li>
+<li>firsttouch_membind
+: <a class="el" href="a00313.html#a221098c339dbfab27bd2c9f5d32f123b">hwloc_topology_membind_support</a>
+</li>
+<li>flags
+: <a class="el" href="a00389.html#aaa8eafe495aadd81c2e3c4ec527c10ba">hwloc_backend</a>
+, <a class="el" href="a00393.html#ab8043c5b4cc0e81aabba586ccb194335">hwloc_component</a>
+, <a class="el" href="a00385.html#ad8b123cecb945a9182eb824ccf8ef9d7">hwloc_disc_status</a>
+</li>
+<li>func
+: <a class="el" href="a00277.html#a695f32df53f4ef728670bfcf31b74e0f">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
+</li>
+<li>function
+: <a class="el" href="a00337.html#a77a67ac73cff98d330ef7258b240bac3">hwloc_cl_device_topology_amd</a>
+</li>
+</ul>
+
+
+<h3><a id="index_g"></a>- g -</h3><ul>
+<li>generic
+: <a class="el" href="a00349.html#aeb449c0e04b14ebf8c3126756b6364f9">hwloc_topology_diff_obj_attr_u</a>
+, <a class="el" href="a00365.html#a0dd2cbfba0eca2fc7a2645668bcae0f8">hwloc_topology_diff_u</a>
+</li>
+<li>get_area_membind
+: <a class="el" href="a00313.html#a0a84e24a06f2fa487fe8c9605c6f68b3">hwloc_topology_membind_support</a>
+</li>
+<li>get_area_memlocation
+: <a class="el" href="a00313.html#a30173553a68e0a4dd1672d26f8e892b1">hwloc_topology_membind_support</a>
+</li>
+<li>get_pci_busid_cpuset
+: <a class="el" href="a00389.html#aaac253491264c20930f44817270bc502">hwloc_backend</a>
+</li>
+<li>get_proc_cpubind
+: <a class="el" href="a00309.html#aae705bc447adc163ead377362c4dfe9f">hwloc_topology_cpubind_support</a>
+</li>
+<li>get_proc_last_cpu_location
+: <a class="el" href="a00309.html#a2554620148b7992a5093f338f5ae254f">hwloc_topology_cpubind_support</a>
+</li>
+<li>get_proc_membind
+: <a class="el" href="a00313.html#a9880cd2d605e316fc020167c49ca69ad">hwloc_topology_membind_support</a>
+</li>
+<li>get_thisproc_cpubind
+: <a class="el" href="a00309.html#a77a09ddd78ee3e9ff5f532a6ac74f7eb">hwloc_topology_cpubind_support</a>
+</li>
+<li>get_thisproc_last_cpu_location
+: <a class="el" href="a00309.html#ad2d5c94b738d92b7d2ede87e4e96321d">hwloc_topology_cpubind_support</a>
+</li>
+<li>get_thisproc_membind
+: <a class="el" href="a00313.html#a3fd51e6fa5f0dd800322301b46b08559">hwloc_topology_membind_support</a>
+</li>
+<li>get_thisthread_cpubind
+: <a class="el" href="a00309.html#a80d762e532d677dff262d83cc7bb1c60">hwloc_topology_cpubind_support</a>
+</li>
+<li>get_thisthread_last_cpu_location
+: <a class="el" href="a00309.html#a6be1f042fdce6bf41b4ea39f6f193808">hwloc_topology_cpubind_support</a>
+</li>
+<li>get_thisthread_membind
+: <a class="el" href="a00313.html#a63b0b2e26157b472f5717ee93cc7c535">hwloc_topology_membind_support</a>
+</li>
+<li>get_thread_cpubind
+: <a class="el" href="a00309.html#a8dd4d8531ed2eebdce1507e7d104154e">hwloc_topology_cpubind_support</a>
+</li>
+<li>gp_index
+: <a class="el" href="a00253.html#a957984a355fa61c85f46605c336e7551">hwloc_obj</a>
+</li>
+<li>group
+: <a class="el" href="a00257.html#a9eddbd69e34cd2ef6af6d2ac31b6eff3">hwloc_obj_attr_u</a>
+</li>
+</ul>
+
+
+<h3><a id="index_i"></a>- i -</h3><ul>
+<li>imported_support
+: <a class="el" href="a00317.html#adf54a6dbe8e9dd5033dfe9c93df726c4">hwloc_topology_misc_support</a>
+</li>
+<li>index
+: <a class="el" href="a00357.html#adb772c3f1761ecadf496c80ae14afce3">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a>
+</li>
+<li>infos
+: <a class="el" href="a00253.html#a8604654c38b7a720efae5025d3a96ee6">hwloc_obj</a>
+</li>
+<li>infos_count
+: <a class="el" href="a00253.html#a9843acc28cfbba903b63ea14b137ff70">hwloc_obj</a>
+</li>
+<li>init
+: <a class="el" href="a00393.html#aea613546886d9b8221cadba920fe3ebc">hwloc_component</a>
+</li>
+<li>instantiate
+: <a class="el" href="a00381.html#ab133956219739a1032a17131757d1961">hwloc_disc_component</a>
+</li>
+<li>interleave_membind
+: <a class="el" href="a00313.html#a3c44c6012860bbeba8a0f4c19710858d">hwloc_topology_membind_support</a>
+</li>
+<li>io_arity
+: <a class="el" href="a00253.html#a7b3b29f0be377c7d2d52262019fc7d11">hwloc_obj</a>
+</li>
+<li>io_first_child
+: <a class="el" href="a00253.html#a8d14c88e1ebc4ae67cc69f9e928558b3">hwloc_obj</a>
+</li>
+<li>is_thissystem
+: <a class="el" href="a00389.html#ab8806f6db077f1bb2e9d63ec99223f7a">hwloc_backend</a>
+</li>
+</ul>
+
+
+<h3><a id="index_k"></a>- k -</h3><ul>
+<li>kind
+: <a class="el" href="a00325.html#aef9c83cf467da1b1fa4c36493febb3b5">hwloc_distances_s</a>
+, <a class="el" href="a00273.html#a3229f269c4cc7e63492c168535e4f0c1">hwloc_obj_attr_u::hwloc_group_attr_s</a>
+</li>
+</ul>
+
+
+<h3><a id="index_l"></a>- l -</h3><ul>
+<li>last_child
+: <a class="el" href="a00253.html#a84bd65634dbc55f4158b74443a9bd04f">hwloc_obj</a>
+</li>
+<li>linesize
+: <a class="el" href="a00269.html#a801e8a668e28caf06c8b88e9ae5c10db">hwloc_obj_attr_u::hwloc_cache_attr_s</a>
+</li>
+<li>linkspeed
+: <a class="el" href="a00277.html#a59b2fce35f7cbde86c4fd305d0ccda5f">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
+</li>
+<li>local_memory
+: <a class="el" href="a00261.html#a6703cbf2afbf63c9d60c5ff4dc0c73aa">hwloc_obj_attr_u::hwloc_numanode_attr_s</a>
+</li>
+<li>location
+: <a class="el" href="a00329.html#a707a25a5b65177e4d081be49aa0777a2">hwloc_location</a>
+</li>
+<li>logical_index
+: <a class="el" href="a00253.html#a0d07fb7b8935e137c94d75a3eb492ae9">hwloc_obj</a>
+</li>
+</ul>
+
+
+<h3><a id="index_m"></a>- m -</h3><ul>
+<li>membind
+: <a class="el" href="a00321.html#ac6eb62ae8bc0a68dce679a7107a36194">hwloc_topology_support</a>
+</li>
+<li>memory_arity
+: <a class="el" href="a00253.html#a6f834ea4dd26553cdea601d2fae6d3b7">hwloc_obj</a>
+</li>
+<li>memory_first_child
+: <a class="el" href="a00253.html#ac0e8200dba25b90d5954bd4ec61f97d3">hwloc_obj</a>
+</li>
+<li>migrate_membind
+: <a class="el" href="a00313.html#aafa7683871a6a760246f9b35209caec5">hwloc_topology_membind_support</a>
+</li>
+<li>misc
+: <a class="el" href="a00321.html#ab9d08df4b0b03994f21b893ece826e78">hwloc_topology_support</a>
+</li>
+<li>misc_arity
+: <a class="el" href="a00253.html#a2bb7862ce722d7ceda23cfa153da165a">hwloc_obj</a>
+</li>
+<li>misc_first_child
+: <a class="el" href="a00253.html#a57812a313fe9b1a9500489f47c3011cc">hwloc_obj</a>
+</li>
+</ul>
+
+
+<h3><a id="index_n"></a>- n -</h3><ul>
+<li>name
+: <a class="el" href="a00381.html#a4064c3b5d9213027e87caebef380a840">hwloc_disc_component</a>
+, <a class="el" href="a00301.html#a12ce1309e4381ae38b5c15d242a47124">hwloc_info_s</a>
+, <a class="el" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj</a>
+, <a class="el" href="a00361.html#a7ef48c66ccddf34d90edb4e4314b41c6">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a>
+</li>
+<li>nbobjs
+: <a class="el" href="a00325.html#a4ca2af858cebbce7324ec49903d09474">hwloc_distances_s</a>
+</li>
+<li>newvalue
+: <a class="el" href="a00361.html#a75f37f4add21cece50fee2701c3b77db">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a>
+, <a class="el" href="a00357.html#ae63aa59ad65aa783b730a4f213304eb4">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a>
+</li>
+<li>next
+: <a class="el" href="a00369.html#a720aa94eb73cddfd8d6bf9fcbbfc035e">hwloc_topology_diff_u::hwloc_topology_diff_generic_s</a>
+, <a class="el" href="a00373.html#acb9170a8eb3392656d70f7f3ef3e3eed">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>
+, <a class="el" href="a00377.html#a375afbaa043b109be689a7d9a3c7d153">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a>
+</li>
+<li>next_cousin
+: <a class="el" href="a00253.html#a85a788017457129589318b6c39451acf">hwloc_obj</a>
+</li>
+<li>next_sibling
+: <a class="el" href="a00253.html#a7f2343ed476fe4942e6fffd4cade1b40">hwloc_obj</a>
+</li>
+<li>nexttouch_membind
+: <a class="el" href="a00313.html#ab0921af6e0cd6975812a80b8e5c7435c">hwloc_topology_membind_support</a>
+</li>
+<li>nodeset
+: <a class="el" href="a00253.html#a08f0d0e16c619a6e653526cbee4ffea3">hwloc_obj</a>
+</li>
+<li>numa
+: <a class="el" href="a00305.html#a955f96066cb9e4cd34e2a3710ad43e80">hwloc_topology_discovery_support</a>
+</li>
+<li>numa_memory
+: <a class="el" href="a00305.html#af193eb858e40e12ef4923f5ed0e1f11a">hwloc_topology_discovery_support</a>
+</li>
+<li>numanode
+: <a class="el" href="a00257.html#ad066b9612802ffa01e132dc3a8e6cc86">hwloc_obj_attr_u</a>
+</li>
+</ul>
+
+
+<h3><a id="index_o"></a>- o -</h3><ul>
+<li>obj_attr
+: <a class="el" href="a00365.html#a01dca644feea48448b36baa60cf4c07f">hwloc_topology_diff_u</a>
+</li>
+<li>obj_depth
+: <a class="el" href="a00373.html#a82c1d4bab80b9e0bf301a9d8291893e0">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>
+, <a class="el" href="a00377.html#a94c6498caeaafbb79927395d918d6cb3">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a>
+</li>
+<li>obj_index
+: <a class="el" href="a00373.html#adb9f4d414470b6670cde8d90759a6c1c">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>
+, <a class="el" href="a00377.html#a6dc6b3c4adb10db74d993e37afaa0580">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a>
+</li>
+<li>object
+: <a class="el" href="a00333.html#acf2ebf75869f0a53a884ac2ab3374122">hwloc_location::hwloc_location_u</a>
+</li>
+<li>objs
+: <a class="el" href="a00325.html#af1e78b2d628d191fa6cae3fbfe891078">hwloc_distances_s</a>
+</li>
+<li>oldvalue
+: <a class="el" href="a00361.html#a33cc281d4417129064295a6ae7b79818">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a>
+, <a class="el" href="a00357.html#a44c0894dce563335d347fde6595c49c9">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a>
+</li>
+<li>os_index
+: <a class="el" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">hwloc_obj</a>
+</li>
+<li>osdev
+: <a class="el" href="a00257.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u</a>
+</li>
+</ul>
+
+
+<h3><a id="index_p"></a>- p -</h3><ul>
+<li>page_types
+: <a class="el" href="a00261.html#a7e53c5024da2d7741a5cc1e7016bb8d2">hwloc_obj_attr_u::hwloc_numanode_attr_s</a>
+</li>
+<li>page_types_len
+: <a class="el" href="a00261.html#a513078122d403904e16723d30f583cb2">hwloc_obj_attr_u::hwloc_numanode_attr_s</a>
+</li>
+<li>parent
+: <a class="el" href="a00253.html#adc494f6aed939992be1c55cca5822900">hwloc_obj</a>
+</li>
+<li>pci
+: <a class="el" href="a00281.html#ab5c564e7c95b747dae9eb84ec0a2c31e">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
+</li>
+<li>pcidev
+: <a class="el" href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">hwloc_obj_attr_u</a>
+</li>
+<li>pcie
+: <a class="el" href="a00337.html#a05e9a845012cd9d1f13a39cc35ab40a1">hwloc_cl_device_topology_amd</a>
+</li>
+<li>phase
+: <a class="el" href="a00385.html#abaf7c8c082d43e133171f0723dbf824b">hwloc_disc_status</a>
+</li>
+<li>phases
+: <a class="el" href="a00389.html#aeca769840a6ff03e96462a9533adbccd">hwloc_backend</a>
+, <a class="el" href="a00381.html#a61ad3151efa02e3dbad5d919758f9c90">hwloc_disc_component</a>
+</li>
+<li>prev_cousin
+: <a class="el" href="a00253.html#ac715989f55ff5a0eb6be2969ee477ec0">hwloc_obj</a>
+</li>
+<li>prev_sibling
+: <a class="el" href="a00253.html#a7b89e8c189876c0158a9282aaaf17f50">hwloc_obj</a>
+</li>
+<li>priority
+: <a class="el" href="a00381.html#ae86d283c272c5ae24073a235efbf6b59">hwloc_disc_component</a>
+</li>
+<li>private_data
+: <a class="el" href="a00389.html#a2ea5bd36b7f06efdb65b98b32af16c68">hwloc_backend</a>
+</li>
+<li>pu
+: <a class="el" href="a00305.html#ad7bb4ecf7a82f5a04fc632e9592ad3ab">hwloc_topology_discovery_support</a>
+</li>
+</ul>
+
+
+<h3><a id="index_r"></a>- r -</h3><ul>
+<li>raw
+: <a class="el" href="a00337.html#a7bba6ab297b6f44e43c5937b80b4cfb6">hwloc_cl_device_topology_amd</a>
+</li>
+<li>revision
+: <a class="el" href="a00277.html#a13ad54c93d08d8ac808e4de9674c5ee7">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
+</li>
+</ul>
+
+
+<h3><a id="index_s"></a>- s -</h3><ul>
+<li>secondary_bus
+: <a class="el" href="a00281.html#ae2d9dd73ef1d32045c584a8e66d2f83f">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
+</li>
+<li>set_area_membind
+: <a class="el" href="a00313.html#a476c06f96b65c08b287cf2369966123b">hwloc_topology_membind_support</a>
+</li>
+<li>set_proc_cpubind
+: <a class="el" href="a00309.html#aa166223d1c2a6de7256ab2d8b675a87e">hwloc_topology_cpubind_support</a>
+</li>
+<li>set_proc_membind
+: <a class="el" href="a00313.html#a756f44912894b176bf979a1b65f12aac">hwloc_topology_membind_support</a>
+</li>
+<li>set_thisproc_cpubind
+: <a class="el" href="a00309.html#a9403d51657a4d546b3ea9553a2973a27">hwloc_topology_cpubind_support</a>
+</li>
+<li>set_thisproc_membind
+: <a class="el" href="a00313.html#a36b3e388df9c6a249427cab7e3724749">hwloc_topology_membind_support</a>
+</li>
+<li>set_thisthread_cpubind
+: <a class="el" href="a00309.html#a57a89a4b5f1f74fa6cfe176f1e8b0798">hwloc_topology_cpubind_support</a>
+</li>
+<li>set_thisthread_membind
+: <a class="el" href="a00313.html#a0697af2e41f2e82b8ce71e3cc13f7eac">hwloc_topology_membind_support</a>
+</li>
+<li>set_thread_cpubind
+: <a class="el" href="a00309.html#a46fba33e307909ce256624687799dd6d">hwloc_topology_cpubind_support</a>
+</li>
+<li>sibling_rank
+: <a class="el" href="a00253.html#aaa6043eee6f55869933c1d974efd9acd">hwloc_obj</a>
+</li>
+<li>size
+: <a class="el" href="a00269.html#abe5e788943ed04302976740c829674c0">hwloc_obj_attr_u::hwloc_cache_attr_s</a>
+, <a class="el" href="a00265.html#a8ea7ebe9d91c7378bba03da57efc25cb">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s</a>
+</li>
+<li>string
+: <a class="el" href="a00349.html#a42fa15c37f1f59ef638066c4c62c3154">hwloc_topology_diff_obj_attr_u</a>
+</li>
+<li>subdevice_id
+: <a class="el" href="a00277.html#acac741aecd7a6db64f33409427e3971f">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
+</li>
+<li>subkind
+: <a class="el" href="a00273.html#ad514d943960a4036ed5e44dc187c74ed">hwloc_obj_attr_u::hwloc_group_attr_s</a>
+</li>
+<li>subordinate_bus
+: <a class="el" href="a00281.html#af3f3f7d76bf03e8d2afa721c2b8d6771">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
+</li>
+<li>subtype
+: <a class="el" href="a00253.html#a5d4f97e76723a9ec8d38046f19e00d33">hwloc_obj</a>
+</li>
+<li>subvendor_id
+: <a class="el" href="a00277.html#a499db3d8cc89eaba04fcaef3df1cba97">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
+</li>
+<li>symmetric_subtree
+: <a class="el" href="a00253.html#a0f41a1d67dc6b661906f2217563637f3">hwloc_obj</a>
+</li>
+</ul>
+
+
+<h3><a id="index_t"></a>- t -</h3><ul>
+<li>too_complex
+: <a class="el" href="a00365.html#af7dc1148eb656c56e9678218cafd027b">hwloc_topology_diff_u</a>
+</li>
+<li>total_memory
+: <a class="el" href="a00253.html#a75603fc36c9284ba48ce814b772a58b6">hwloc_obj</a>
+</li>
+<li>type
+: <a class="el" href="a00337.html#a8ec4ea89b862bb271845b48063f332b4">hwloc_cl_device_topology_amd</a>
+, <a class="el" href="a00393.html#a789208ada7e17492cfd3a5a88a6bb0ee">hwloc_component</a>
+, <a class="el" href="a00329.html#aeb9c0ab74a7d3506a76d0b82600a28a7">hwloc_location</a>
+, <a class="el" href="a00253.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj</a>
+, <a class="el" href="a00269.html#ad8edc8ded2b7a70d6abbc874801930f4">hwloc_obj_attr_u::hwloc_cache_attr_s</a>
+, <a class="el" href="a00297.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s</a>
+, <a class="el" href="a00353.html#a43f8133b7c30129b002c2d295e6580fc">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s</a>
+, <a class="el" href="a00361.html#a784ab5827c1bf531b86d1f02f199d04d">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a>
+, <a class="el" href="a00357.html#afe262b9aa558fe7bfecbd37a7a129197">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a>
+, <a class="el" href="a00369.html#a373005489fcddeba6319163e60263ae8">hwloc_topology_diff_u::hwloc_topology_diff_generic_s</a>
+, <a class="el" href="a00373.html#a70a118ad288bd98f18c8ce6dc52e2d10">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>
+, <a class="el" href="a00377.html#a92084295a4d6faf17a95a7eea526ddbd">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a>
+</li>
+</ul>
+
+
+<h3><a id="index_u"></a>- u -</h3><ul>
+<li>uint64
+: <a class="el" href="a00349.html#a4608ade88460f5f208887775e5a69a0a">hwloc_topology_diff_obj_attr_u</a>
+</li>
+<li>unused
+: <a class="el" href="a00337.html#ac8650d7eea96eef290481fee980d1d47">hwloc_cl_device_topology_amd</a>
+</li>
+<li>upstream
+: <a class="el" href="a00281.html#ab62888c880f8bb730292722f5811958d">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
+</li>
+<li>upstream_type
+: <a class="el" href="a00281.html#a265dd2164aa2df4972e25a029da72125">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
+</li>
+<li>userdata
+: <a class="el" href="a00253.html#a76fd3ac94401cf32dfccc3a3a8de68a5">hwloc_obj</a>
+</li>
+</ul>
+
+
+<h3><a id="index_v"></a>- v -</h3><ul>
+<li>value
+: <a class="el" href="a00301.html#a788a0073bafe660645e7b69f31a43bbb">hwloc_info_s</a>
+</li>
+<li>values
+: <a class="el" href="a00325.html#ae43e19b2c743de05c93d71a30beaca75">hwloc_distances_s</a>
+</li>
+<li>vendor_id
+: <a class="el" href="a00277.html#aad970ad19b62eb2d5df30e4802da4f4c">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/functions_vars.html b/doc/doxygen-doc/html/functions_vars.html
new file mode 100644
index 00000000..bbae483d
--- /dev/null
+++ b/doc/doxygen-doc/html/functions_vars.html
@@ -0,0 +1,587 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Data Fields - Variables</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="contents">
+&#160;
+
+<h3><a id="index_a"></a>- a -</h3><ul>
+<li>abi
+: <a class="el" href="a00393.html#a3250bd6fc9713946991d805e48091b2e">hwloc_component</a>
+</li>
+<li>alloc_membind
+: <a class="el" href="a00313.html#ae551abb27d2aa9ce008583488b845b98">hwloc_topology_membind_support</a>
+</li>
+<li>arity
+: <a class="el" href="a00253.html#aac3f6da35c9b57599909a44ce2b716c1">hwloc_obj</a>
+</li>
+<li>associativity
+: <a class="el" href="a00269.html#ad06525e474d1e2d1423ed71bb998592d">hwloc_obj_attr_u::hwloc_cache_attr_s</a>
+</li>
+<li>attr
+: <a class="el" href="a00253.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj</a>
+</li>
+</ul>
+
+
+<h3><a id="index_b"></a>- b -</h3><ul>
+<li>bind_membind
+: <a class="el" href="a00313.html#ae7cdb1f1b5f0242a69f85b5a5538c764">hwloc_topology_membind_support</a>
+</li>
+<li>bridge
+: <a class="el" href="a00257.html#a207e6359497b7116d6f4baa9e8bbeb43">hwloc_obj_attr_u</a>
+</li>
+<li>bus
+: <a class="el" href="a00337.html#a4a23e3cc034b7ab105cab0e863dcab69">hwloc_cl_device_topology_amd</a>
+, <a class="el" href="a00277.html#aae99e035e8d1387d7b8768aaa8eceb0a">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
+</li>
+</ul>
+
+
+<h3><a id="index_c"></a>- c -</h3><ul>
+<li>cache
+: <a class="el" href="a00257.html#a23f553f3252c9d13f2338231cd354ea9">hwloc_obj_attr_u</a>
+</li>
+<li>children
+: <a class="el" href="a00253.html#a04d05403da37bfe17cd63b7c7dd07b1f">hwloc_obj</a>
+</li>
+<li>class_id
+: <a class="el" href="a00277.html#aee735352d9f1686fd290fc6d6397c334">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
+</li>
+<li>complete_cpuset
+: <a class="el" href="a00253.html#a91788a9da687beb7224cc1fd7b75208c">hwloc_obj</a>
+</li>
+<li>complete_nodeset
+: <a class="el" href="a00253.html#ac38c4012127525ef74c5615c526f4c2e">hwloc_obj</a>
+</li>
+<li>count
+: <a class="el" href="a00265.html#a98514e37d57a325b78e21ffd8d7419e0">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s</a>
+</li>
+<li>cpubind
+: <a class="el" href="a00321.html#adef2bb91f74c3e70a2a071393caf5f56">hwloc_topology_support</a>
+</li>
+<li>cpukind_efficiency
+: <a class="el" href="a00305.html#aba80d6f9c15e2395f9ed61db9ff3b75d">hwloc_topology_discovery_support</a>
+</li>
+<li>cpuset
+: <a class="el" href="a00333.html#a033bad8f6b891992f0c18b85a88c5561">hwloc_location::hwloc_location_u</a>
+, <a class="el" href="a00253.html#a67925e0f2c47f50408fbdb9bddd0790f">hwloc_obj</a>
+</li>
+</ul>
+
+
+<h3><a id="index_d"></a>- d -</h3><ul>
+<li>data
+: <a class="el" href="a00337.html#afbd6b814607b06fc5b2f36ad14420398">hwloc_cl_device_topology_amd</a>
+, <a class="el" href="a00393.html#a4b8cffd1d943c29fdc102b841b8598d4">hwloc_component</a>
+</li>
+<li>depth
+: <a class="el" href="a00253.html#a4876fd165b4fff35521f07ebd85355ed">hwloc_obj</a>
+, <a class="el" href="a00281.html#a336c8b22893d5d734d8c9dfca4066b46">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
+, <a class="el" href="a00269.html#a5c8f7f39193736c2187ed626940835d5">hwloc_obj_attr_u::hwloc_cache_attr_s</a>
+, <a class="el" href="a00273.html#ad914eac61c77481e1b7037877bcc5579">hwloc_obj_attr_u::hwloc_group_attr_s</a>
+</li>
+<li>dev
+: <a class="el" href="a00277.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
+</li>
+<li>device
+: <a class="el" href="a00337.html#a017033a953d71455b067007cabb92e9c">hwloc_cl_device_topology_amd</a>
+</li>
+<li>device_id
+: <a class="el" href="a00277.html#a35b66064ab7d768caf7154e410caf0fa">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
+</li>
+<li>diff
+: <a class="el" href="a00373.html#a91f0645f9062e892652357cd141c8ebb">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>
+</li>
+<li>disable
+: <a class="el" href="a00389.html#a36c4fa86350525b46340c67b802c69c7">hwloc_backend</a>
+</li>
+<li>disallowed_numa
+: <a class="el" href="a00305.html#a970e65235873bcdb9669a9805161ce03">hwloc_topology_discovery_support</a>
+</li>
+<li>disallowed_pu
+: <a class="el" href="a00305.html#af3c97b28781a2972cf8eaaf94a6617da">hwloc_topology_discovery_support</a>
+</li>
+<li>discover
+: <a class="el" href="a00389.html#accff2cd8404be43c3b44cec05e6f609b">hwloc_backend</a>
+</li>
+<li>discovery
+: <a class="el" href="a00321.html#aea3fbd7653d987d81f848636c420504d">hwloc_topology_support</a>
+</li>
+<li>domain
+: <a class="el" href="a00281.html#a2c31e565a5f0d23d0a0a3dd3ec8f4b17">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
+, <a class="el" href="a00277.html#a8fba44988deb98613c1505a4019a34dc">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
+</li>
+<li>dont_merge
+: <a class="el" href="a00273.html#afa253d4b70f92e940c226d61f192054f">hwloc_obj_attr_u::hwloc_group_attr_s</a>
+</li>
+<li>downstream
+: <a class="el" href="a00281.html#a7d5db91d655ba23ffe9bda7a2cbcb9a8">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
+</li>
+<li>downstream_type
+: <a class="el" href="a00281.html#ac6a169b672d0e9f75756fd5665828b93">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
+</li>
+</ul>
+
+
+<h3><a id="index_e"></a>- e -</h3><ul>
+<li>enabled_by_default
+: <a class="el" href="a00381.html#ace80cafe2b1732b047b3fc3da47e6517">hwloc_disc_component</a>
+</li>
+<li>excluded_phases
+: <a class="el" href="a00381.html#acbb9957914dbf7b8f504215aa0c8d3fe">hwloc_disc_component</a>
+, <a class="el" href="a00385.html#a0f95fa42d46a6e7cf8dee8af12afee3a">hwloc_disc_status</a>
+</li>
+</ul>
+
+
+<h3><a id="index_f"></a>- f -</h3><ul>
+<li>finalize
+: <a class="el" href="a00393.html#a4612015451a1c706e8ba19114cb8baae">hwloc_component</a>
+</li>
+<li>first_child
+: <a class="el" href="a00253.html#af51d08a0a79dba517c06c5afedc8d2dc">hwloc_obj</a>
+</li>
+<li>firsttouch_membind
+: <a class="el" href="a00313.html#a221098c339dbfab27bd2c9f5d32f123b">hwloc_topology_membind_support</a>
+</li>
+<li>flags
+: <a class="el" href="a00389.html#aaa8eafe495aadd81c2e3c4ec527c10ba">hwloc_backend</a>
+, <a class="el" href="a00393.html#ab8043c5b4cc0e81aabba586ccb194335">hwloc_component</a>
+, <a class="el" href="a00385.html#ad8b123cecb945a9182eb824ccf8ef9d7">hwloc_disc_status</a>
+</li>
+<li>func
+: <a class="el" href="a00277.html#a695f32df53f4ef728670bfcf31b74e0f">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
+</li>
+<li>function
+: <a class="el" href="a00337.html#a77a67ac73cff98d330ef7258b240bac3">hwloc_cl_device_topology_amd</a>
+</li>
+</ul>
+
+
+<h3><a id="index_g"></a>- g -</h3><ul>
+<li>generic
+: <a class="el" href="a00349.html#aeb449c0e04b14ebf8c3126756b6364f9">hwloc_topology_diff_obj_attr_u</a>
+, <a class="el" href="a00365.html#a0dd2cbfba0eca2fc7a2645668bcae0f8">hwloc_topology_diff_u</a>
+</li>
+<li>get_area_membind
+: <a class="el" href="a00313.html#a0a84e24a06f2fa487fe8c9605c6f68b3">hwloc_topology_membind_support</a>
+</li>
+<li>get_area_memlocation
+: <a class="el" href="a00313.html#a30173553a68e0a4dd1672d26f8e892b1">hwloc_topology_membind_support</a>
+</li>
+<li>get_pci_busid_cpuset
+: <a class="el" href="a00389.html#aaac253491264c20930f44817270bc502">hwloc_backend</a>
+</li>
+<li>get_proc_cpubind
+: <a class="el" href="a00309.html#aae705bc447adc163ead377362c4dfe9f">hwloc_topology_cpubind_support</a>
+</li>
+<li>get_proc_last_cpu_location
+: <a class="el" href="a00309.html#a2554620148b7992a5093f338f5ae254f">hwloc_topology_cpubind_support</a>
+</li>
+<li>get_proc_membind
+: <a class="el" href="a00313.html#a9880cd2d605e316fc020167c49ca69ad">hwloc_topology_membind_support</a>
+</li>
+<li>get_thisproc_cpubind
+: <a class="el" href="a00309.html#a77a09ddd78ee3e9ff5f532a6ac74f7eb">hwloc_topology_cpubind_support</a>
+</li>
+<li>get_thisproc_last_cpu_location
+: <a class="el" href="a00309.html#ad2d5c94b738d92b7d2ede87e4e96321d">hwloc_topology_cpubind_support</a>
+</li>
+<li>get_thisproc_membind
+: <a class="el" href="a00313.html#a3fd51e6fa5f0dd800322301b46b08559">hwloc_topology_membind_support</a>
+</li>
+<li>get_thisthread_cpubind
+: <a class="el" href="a00309.html#a80d762e532d677dff262d83cc7bb1c60">hwloc_topology_cpubind_support</a>
+</li>
+<li>get_thisthread_last_cpu_location
+: <a class="el" href="a00309.html#a6be1f042fdce6bf41b4ea39f6f193808">hwloc_topology_cpubind_support</a>
+</li>
+<li>get_thisthread_membind
+: <a class="el" href="a00313.html#a63b0b2e26157b472f5717ee93cc7c535">hwloc_topology_membind_support</a>
+</li>
+<li>get_thread_cpubind
+: <a class="el" href="a00309.html#a8dd4d8531ed2eebdce1507e7d104154e">hwloc_topology_cpubind_support</a>
+</li>
+<li>gp_index
+: <a class="el" href="a00253.html#a957984a355fa61c85f46605c336e7551">hwloc_obj</a>
+</li>
+<li>group
+: <a class="el" href="a00257.html#a9eddbd69e34cd2ef6af6d2ac31b6eff3">hwloc_obj_attr_u</a>
+</li>
+</ul>
+
+
+<h3><a id="index_i"></a>- i -</h3><ul>
+<li>imported_support
+: <a class="el" href="a00317.html#adf54a6dbe8e9dd5033dfe9c93df726c4">hwloc_topology_misc_support</a>
+</li>
+<li>index
+: <a class="el" href="a00357.html#adb772c3f1761ecadf496c80ae14afce3">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a>
+</li>
+<li>infos
+: <a class="el" href="a00253.html#a8604654c38b7a720efae5025d3a96ee6">hwloc_obj</a>
+</li>
+<li>infos_count
+: <a class="el" href="a00253.html#a9843acc28cfbba903b63ea14b137ff70">hwloc_obj</a>
+</li>
+<li>init
+: <a class="el" href="a00393.html#aea613546886d9b8221cadba920fe3ebc">hwloc_component</a>
+</li>
+<li>instantiate
+: <a class="el" href="a00381.html#ab133956219739a1032a17131757d1961">hwloc_disc_component</a>
+</li>
+<li>interleave_membind
+: <a class="el" href="a00313.html#a3c44c6012860bbeba8a0f4c19710858d">hwloc_topology_membind_support</a>
+</li>
+<li>io_arity
+: <a class="el" href="a00253.html#a7b3b29f0be377c7d2d52262019fc7d11">hwloc_obj</a>
+</li>
+<li>io_first_child
+: <a class="el" href="a00253.html#a8d14c88e1ebc4ae67cc69f9e928558b3">hwloc_obj</a>
+</li>
+<li>is_thissystem
+: <a class="el" href="a00389.html#ab8806f6db077f1bb2e9d63ec99223f7a">hwloc_backend</a>
+</li>
+</ul>
+
+
+<h3><a id="index_k"></a>- k -</h3><ul>
+<li>kind
+: <a class="el" href="a00325.html#aef9c83cf467da1b1fa4c36493febb3b5">hwloc_distances_s</a>
+, <a class="el" href="a00273.html#a3229f269c4cc7e63492c168535e4f0c1">hwloc_obj_attr_u::hwloc_group_attr_s</a>
+</li>
+</ul>
+
+
+<h3><a id="index_l"></a>- l -</h3><ul>
+<li>last_child
+: <a class="el" href="a00253.html#a84bd65634dbc55f4158b74443a9bd04f">hwloc_obj</a>
+</li>
+<li>linesize
+: <a class="el" href="a00269.html#a801e8a668e28caf06c8b88e9ae5c10db">hwloc_obj_attr_u::hwloc_cache_attr_s</a>
+</li>
+<li>linkspeed
+: <a class="el" href="a00277.html#a59b2fce35f7cbde86c4fd305d0ccda5f">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
+</li>
+<li>local_memory
+: <a class="el" href="a00261.html#a6703cbf2afbf63c9d60c5ff4dc0c73aa">hwloc_obj_attr_u::hwloc_numanode_attr_s</a>
+</li>
+<li>location
+: <a class="el" href="a00329.html#a707a25a5b65177e4d081be49aa0777a2">hwloc_location</a>
+</li>
+<li>logical_index
+: <a class="el" href="a00253.html#a0d07fb7b8935e137c94d75a3eb492ae9">hwloc_obj</a>
+</li>
+</ul>
+
+
+<h3><a id="index_m"></a>- m -</h3><ul>
+<li>membind
+: <a class="el" href="a00321.html#ac6eb62ae8bc0a68dce679a7107a36194">hwloc_topology_support</a>
+</li>
+<li>memory_arity
+: <a class="el" href="a00253.html#a6f834ea4dd26553cdea601d2fae6d3b7">hwloc_obj</a>
+</li>
+<li>memory_first_child
+: <a class="el" href="a00253.html#ac0e8200dba25b90d5954bd4ec61f97d3">hwloc_obj</a>
+</li>
+<li>migrate_membind
+: <a class="el" href="a00313.html#aafa7683871a6a760246f9b35209caec5">hwloc_topology_membind_support</a>
+</li>
+<li>misc
+: <a class="el" href="a00321.html#ab9d08df4b0b03994f21b893ece826e78">hwloc_topology_support</a>
+</li>
+<li>misc_arity
+: <a class="el" href="a00253.html#a2bb7862ce722d7ceda23cfa153da165a">hwloc_obj</a>
+</li>
+<li>misc_first_child
+: <a class="el" href="a00253.html#a57812a313fe9b1a9500489f47c3011cc">hwloc_obj</a>
+</li>
+</ul>
+
+
+<h3><a id="index_n"></a>- n -</h3><ul>
+<li>name
+: <a class="el" href="a00381.html#a4064c3b5d9213027e87caebef380a840">hwloc_disc_component</a>
+, <a class="el" href="a00301.html#a12ce1309e4381ae38b5c15d242a47124">hwloc_info_s</a>
+, <a class="el" href="a00253.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj</a>
+, <a class="el" href="a00361.html#a7ef48c66ccddf34d90edb4e4314b41c6">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a>
+</li>
+<li>nbobjs
+: <a class="el" href="a00325.html#a4ca2af858cebbce7324ec49903d09474">hwloc_distances_s</a>
+</li>
+<li>newvalue
+: <a class="el" href="a00361.html#a75f37f4add21cece50fee2701c3b77db">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a>
+, <a class="el" href="a00357.html#ae63aa59ad65aa783b730a4f213304eb4">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a>
+</li>
+<li>next
+: <a class="el" href="a00369.html#a720aa94eb73cddfd8d6bf9fcbbfc035e">hwloc_topology_diff_u::hwloc_topology_diff_generic_s</a>
+, <a class="el" href="a00373.html#acb9170a8eb3392656d70f7f3ef3e3eed">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>
+, <a class="el" href="a00377.html#a375afbaa043b109be689a7d9a3c7d153">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a>
+</li>
+<li>next_cousin
+: <a class="el" href="a00253.html#a85a788017457129589318b6c39451acf">hwloc_obj</a>
+</li>
+<li>next_sibling
+: <a class="el" href="a00253.html#a7f2343ed476fe4942e6fffd4cade1b40">hwloc_obj</a>
+</li>
+<li>nexttouch_membind
+: <a class="el" href="a00313.html#ab0921af6e0cd6975812a80b8e5c7435c">hwloc_topology_membind_support</a>
+</li>
+<li>nodeset
+: <a class="el" href="a00253.html#a08f0d0e16c619a6e653526cbee4ffea3">hwloc_obj</a>
+</li>
+<li>numa
+: <a class="el" href="a00305.html#a955f96066cb9e4cd34e2a3710ad43e80">hwloc_topology_discovery_support</a>
+</li>
+<li>numa_memory
+: <a class="el" href="a00305.html#af193eb858e40e12ef4923f5ed0e1f11a">hwloc_topology_discovery_support</a>
+</li>
+<li>numanode
+: <a class="el" href="a00257.html#ad066b9612802ffa01e132dc3a8e6cc86">hwloc_obj_attr_u</a>
+</li>
+</ul>
+
+
+<h3><a id="index_o"></a>- o -</h3><ul>
+<li>obj_attr
+: <a class="el" href="a00365.html#a01dca644feea48448b36baa60cf4c07f">hwloc_topology_diff_u</a>
+</li>
+<li>obj_depth
+: <a class="el" href="a00373.html#a82c1d4bab80b9e0bf301a9d8291893e0">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>
+, <a class="el" href="a00377.html#a94c6498caeaafbb79927395d918d6cb3">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a>
+</li>
+<li>obj_index
+: <a class="el" href="a00373.html#adb9f4d414470b6670cde8d90759a6c1c">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>
+, <a class="el" href="a00377.html#a6dc6b3c4adb10db74d993e37afaa0580">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a>
+</li>
+<li>object
+: <a class="el" href="a00333.html#acf2ebf75869f0a53a884ac2ab3374122">hwloc_location::hwloc_location_u</a>
+</li>
+<li>objs
+: <a class="el" href="a00325.html#af1e78b2d628d191fa6cae3fbfe891078">hwloc_distances_s</a>
+</li>
+<li>oldvalue
+: <a class="el" href="a00361.html#a33cc281d4417129064295a6ae7b79818">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a>
+, <a class="el" href="a00357.html#a44c0894dce563335d347fde6595c49c9">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a>
+</li>
+<li>os_index
+: <a class="el" href="a00253.html#a61a7a80a68eaccbaaa28269e678c81a9">hwloc_obj</a>
+</li>
+<li>osdev
+: <a class="el" href="a00257.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u</a>
+</li>
+</ul>
+
+
+<h3><a id="index_p"></a>- p -</h3><ul>
+<li>page_types
+: <a class="el" href="a00261.html#a7e53c5024da2d7741a5cc1e7016bb8d2">hwloc_obj_attr_u::hwloc_numanode_attr_s</a>
+</li>
+<li>page_types_len
+: <a class="el" href="a00261.html#a513078122d403904e16723d30f583cb2">hwloc_obj_attr_u::hwloc_numanode_attr_s</a>
+</li>
+<li>parent
+: <a class="el" href="a00253.html#adc494f6aed939992be1c55cca5822900">hwloc_obj</a>
+</li>
+<li>pci
+: <a class="el" href="a00281.html#ab5c564e7c95b747dae9eb84ec0a2c31e">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
+</li>
+<li>pcidev
+: <a class="el" href="a00257.html#a0b66da7ab072f7c016f8ed86701f5a7c">hwloc_obj_attr_u</a>
+</li>
+<li>pcie
+: <a class="el" href="a00337.html#a05e9a845012cd9d1f13a39cc35ab40a1">hwloc_cl_device_topology_amd</a>
+</li>
+<li>phase
+: <a class="el" href="a00385.html#abaf7c8c082d43e133171f0723dbf824b">hwloc_disc_status</a>
+</li>
+<li>phases
+: <a class="el" href="a00389.html#aeca769840a6ff03e96462a9533adbccd">hwloc_backend</a>
+, <a class="el" href="a00381.html#a61ad3151efa02e3dbad5d919758f9c90">hwloc_disc_component</a>
+</li>
+<li>prev_cousin
+: <a class="el" href="a00253.html#ac715989f55ff5a0eb6be2969ee477ec0">hwloc_obj</a>
+</li>
+<li>prev_sibling
+: <a class="el" href="a00253.html#a7b89e8c189876c0158a9282aaaf17f50">hwloc_obj</a>
+</li>
+<li>priority
+: <a class="el" href="a00381.html#ae86d283c272c5ae24073a235efbf6b59">hwloc_disc_component</a>
+</li>
+<li>private_data
+: <a class="el" href="a00389.html#a2ea5bd36b7f06efdb65b98b32af16c68">hwloc_backend</a>
+</li>
+<li>pu
+: <a class="el" href="a00305.html#ad7bb4ecf7a82f5a04fc632e9592ad3ab">hwloc_topology_discovery_support</a>
+</li>
+</ul>
+
+
+<h3><a id="index_r"></a>- r -</h3><ul>
+<li>raw
+: <a class="el" href="a00337.html#a7bba6ab297b6f44e43c5937b80b4cfb6">hwloc_cl_device_topology_amd</a>
+</li>
+<li>revision
+: <a class="el" href="a00277.html#a13ad54c93d08d8ac808e4de9674c5ee7">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
+</li>
+</ul>
+
+
+<h3><a id="index_s"></a>- s -</h3><ul>
+<li>secondary_bus
+: <a class="el" href="a00281.html#ae2d9dd73ef1d32045c584a8e66d2f83f">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
+</li>
+<li>set_area_membind
+: <a class="el" href="a00313.html#a476c06f96b65c08b287cf2369966123b">hwloc_topology_membind_support</a>
+</li>
+<li>set_proc_cpubind
+: <a class="el" href="a00309.html#aa166223d1c2a6de7256ab2d8b675a87e">hwloc_topology_cpubind_support</a>
+</li>
+<li>set_proc_membind
+: <a class="el" href="a00313.html#a756f44912894b176bf979a1b65f12aac">hwloc_topology_membind_support</a>
+</li>
+<li>set_thisproc_cpubind
+: <a class="el" href="a00309.html#a9403d51657a4d546b3ea9553a2973a27">hwloc_topology_cpubind_support</a>
+</li>
+<li>set_thisproc_membind
+: <a class="el" href="a00313.html#a36b3e388df9c6a249427cab7e3724749">hwloc_topology_membind_support</a>
+</li>
+<li>set_thisthread_cpubind
+: <a class="el" href="a00309.html#a57a89a4b5f1f74fa6cfe176f1e8b0798">hwloc_topology_cpubind_support</a>
+</li>
+<li>set_thisthread_membind
+: <a class="el" href="a00313.html#a0697af2e41f2e82b8ce71e3cc13f7eac">hwloc_topology_membind_support</a>
+</li>
+<li>set_thread_cpubind
+: <a class="el" href="a00309.html#a46fba33e307909ce256624687799dd6d">hwloc_topology_cpubind_support</a>
+</li>
+<li>sibling_rank
+: <a class="el" href="a00253.html#aaa6043eee6f55869933c1d974efd9acd">hwloc_obj</a>
+</li>
+<li>size
+: <a class="el" href="a00269.html#abe5e788943ed04302976740c829674c0">hwloc_obj_attr_u::hwloc_cache_attr_s</a>
+, <a class="el" href="a00265.html#a8ea7ebe9d91c7378bba03da57efc25cb">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s</a>
+</li>
+<li>string
+: <a class="el" href="a00349.html#a42fa15c37f1f59ef638066c4c62c3154">hwloc_topology_diff_obj_attr_u</a>
+</li>
+<li>subdevice_id
+: <a class="el" href="a00277.html#acac741aecd7a6db64f33409427e3971f">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
+</li>
+<li>subkind
+: <a class="el" href="a00273.html#ad514d943960a4036ed5e44dc187c74ed">hwloc_obj_attr_u::hwloc_group_attr_s</a>
+</li>
+<li>subordinate_bus
+: <a class="el" href="a00281.html#af3f3f7d76bf03e8d2afa721c2b8d6771">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
+</li>
+<li>subtype
+: <a class="el" href="a00253.html#a5d4f97e76723a9ec8d38046f19e00d33">hwloc_obj</a>
+</li>
+<li>subvendor_id
+: <a class="el" href="a00277.html#a499db3d8cc89eaba04fcaef3df1cba97">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
+</li>
+<li>symmetric_subtree
+: <a class="el" href="a00253.html#a0f41a1d67dc6b661906f2217563637f3">hwloc_obj</a>
+</li>
+</ul>
+
+
+<h3><a id="index_t"></a>- t -</h3><ul>
+<li>too_complex
+: <a class="el" href="a00365.html#af7dc1148eb656c56e9678218cafd027b">hwloc_topology_diff_u</a>
+</li>
+<li>total_memory
+: <a class="el" href="a00253.html#a75603fc36c9284ba48ce814b772a58b6">hwloc_obj</a>
+</li>
+<li>type
+: <a class="el" href="a00337.html#a8ec4ea89b862bb271845b48063f332b4">hwloc_cl_device_topology_amd</a>
+, <a class="el" href="a00393.html#a789208ada7e17492cfd3a5a88a6bb0ee">hwloc_component</a>
+, <a class="el" href="a00329.html#aeb9c0ab74a7d3506a76d0b82600a28a7">hwloc_location</a>
+, <a class="el" href="a00253.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj</a>
+, <a class="el" href="a00269.html#ad8edc8ded2b7a70d6abbc874801930f4">hwloc_obj_attr_u::hwloc_cache_attr_s</a>
+, <a class="el" href="a00297.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s</a>
+, <a class="el" href="a00353.html#a43f8133b7c30129b002c2d295e6580fc">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s</a>
+, <a class="el" href="a00361.html#a784ab5827c1bf531b86d1f02f199d04d">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a>
+, <a class="el" href="a00357.html#afe262b9aa558fe7bfecbd37a7a129197">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a>
+, <a class="el" href="a00369.html#a373005489fcddeba6319163e60263ae8">hwloc_topology_diff_u::hwloc_topology_diff_generic_s</a>
+, <a class="el" href="a00373.html#a70a118ad288bd98f18c8ce6dc52e2d10">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>
+, <a class="el" href="a00377.html#a92084295a4d6faf17a95a7eea526ddbd">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a>
+</li>
+</ul>
+
+
+<h3><a id="index_u"></a>- u -</h3><ul>
+<li>uint64
+: <a class="el" href="a00349.html#a4608ade88460f5f208887775e5a69a0a">hwloc_topology_diff_obj_attr_u</a>
+</li>
+<li>unused
+: <a class="el" href="a00337.html#ac8650d7eea96eef290481fee980d1d47">hwloc_cl_device_topology_amd</a>
+</li>
+<li>upstream
+: <a class="el" href="a00281.html#ab62888c880f8bb730292722f5811958d">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
+</li>
+<li>upstream_type
+: <a class="el" href="a00281.html#a265dd2164aa2df4972e25a029da72125">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
+</li>
+<li>userdata
+: <a class="el" href="a00253.html#a76fd3ac94401cf32dfccc3a3a8de68a5">hwloc_obj</a>
+</li>
+</ul>
+
+
+<h3><a id="index_v"></a>- v -</h3><ul>
+<li>value
+: <a class="el" href="a00301.html#a788a0073bafe660645e7b69f31a43bbb">hwloc_info_s</a>
+</li>
+<li>values
+: <a class="el" href="a00325.html#ae43e19b2c743de05c93d71a30beaca75">hwloc_distances_s</a>
+</li>
+<li>vendor_id
+: <a class="el" href="a00277.html#aad970ad19b62eb2d5df30e4802da4f4c">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
+</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/hagrid.png b/doc/doxygen-doc/html/hagrid.png
new file mode 100644
index 00000000..c7c6f1cc
Binary files /dev/null and b/doc/doxygen-doc/html/hagrid.png differ
diff --git a/doc/doxygen-doc/html/index.html b/doc/doxygen-doc/html/index.html
new file mode 100644
index 00000000..a168f5b9
--- /dev/null
+++ b/doc/doxygen-doc/html/index.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Hardware Locality</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="PageDoc"><div class="header">
+  <div class="headertitle">
+<div class="title">Hardware Locality </div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><h1 class="sub">Portable abstraction of parallel architectures for high-performance computing</h1>
+<hr  />
+<p> 
+<div class="section" id="common_introduction">
+ </p>
+<h1><a class="anchor" id="common_introduction"></a>
+Introduction</h1>
+<p>The Hardware Locality (hwloc) software project aims at easing the process of discovering hardware resources in parallel architectures. It offers command-line tools and a C API for consulting these resources, their locality, attributes, and interconnection. hwloc primarily aims at helping high-performance computing (HPC) applications, but is also applicable to any project seeking to exploit code and/or data locality on modern computing platforms.</p>
+<p>hwloc is actually made of two subprojects distributed together: </p><ul>
+<li>
+<b>The original hwloc project for describing the internals of computing nodes</b>. It is described in details starting at section <a class="el" href="a00394.html">Hardware Locality (hwloc) Introduction</a>.  </li>
+<li>
+<b>The network-oriented companion called netloc (Network Locality)</b>, described in details starting with section <a class="el" href="a00411.html">Network Locality (netloc)</a>.  </li>
+</ul>
+<p> 
+<b>See also the Related pages tab above for links to other sections.</b>
+</p>
+<p>Netloc may be disabled, but the original hwloc cannot. Both hwloc and netloc APIs are documented after these sections.</p>
+<p> 
+</div><div class="section" id="common_installation">
+ </p>
+<h1><a class="anchor" id="common_installation"></a>
+Installation</h1>
+<p>hwloc (<a href="https://www.open-mpi.org/projects/hwloc/">https://www.open-mpi.org/projects/hwloc/</a>) is available under the BSD license. It is hosted as a sub-project of the overall Open MPI project (<a href="https://www.open-mpi.org/">https://www.open-mpi.org/</a>). Note that hwloc does not require any functionality from Open MPI &ndash; it is a wholly separate (and much smaller!) project and code base. It just happens to be hosted as part of the overall Open MPI project.</p>
+<h2><a class="anchor" id="basic_installation"></a>
+Basic Installation</h2>
+<p>Installation is the fairly common GNU-based process:</p>
+<pre class="fragment">shell$ ./configure --prefix=...
+shell$ make
+shell$ make install
+</pre><p>hwloc- and netloc-specific configure options and requirements are documented in sections <a class="el" href="a00394.html#hwloc_installation">hwloc Installation</a> and <a class="el" href="a00411.html#netloc_installation">Netloc Installation</a> respectively.</p>
+<p>Also note that if you install supplemental libraries in non-standard locations, hwloc's configure script may not be able to find them without some help. You may need to specify additional CPPFLAGS, LDFLAGS, or PKG_CONFIG_PATH values on the configure command line.</p>
+<p>For example, if libpciaccess was installed into /opt/pciaccess, hwloc's configure script may not find it be default. Try adding PKG_CONFIG_PATH to the ./configure command line, like this:</p>
+<pre class="fragment">./configure PKG_CONFIG_PATH=/opt/pciaccess/lib/pkgconfig ...
+</pre><p>Running the "lstopo" tool is a good way to check as a graphical output whether hwloc properly detected the architecture of your node. Netloc command-line tools can be used to display the network topology interconnecting your nodes.</p>
+<h2><a class="anchor" id="gitclone_installation"></a>
+Installing from a Git clone</h2>
+<p>Additionally, the code can be directly cloned from Git:</p>
+<pre class="fragment">shell$ git clone https://github.com/open-mpi/hwloc.git
+shell$ cd hwloc
+shell$ ./autogen.sh
+</pre><p>Note that GNU Autoconf &gt;=2.63, Automake &gt;=1.11 and Libtool &gt;=2.2.6 are required when building from a Git clone.</p>
+<p>Nightly development snapshots are available on the web site, they can be configured and built without any need for Git or GNU Autotools.</p>
+<p> 
+</div><div class="section" id="bugs">
+ </p>
+<h1><a class="anchor" id="bugs"></a>
+Questions and Bugs</h1>
+<p>Bugs should be reported in the tracker (<a href="https://github.com/open-mpi/hwloc/issues">https://github.com/open-mpi/hwloc/issues</a>). Opening a new issue automatically displays lots of hints about how to debug and report issues.</p>
+<p>Questions may be sent to the users or developers mailing lists (<a href="https://www.open-mpi.org/community/lists/hwloc.php">https://www.open-mpi.org/community/lists/hwloc.php</a>).</p>
+<p>There is also a <code>#hwloc</code> IRC channel on Libera Chat (<code>irc.libera.chat</code>). </p>
+</div></div><!-- PageDoc -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/jquery.js b/doc/doxygen-doc/html/jquery.js
new file mode 100644
index 00000000..103c32d7
--- /dev/null
+++ b/doc/doxygen-doc/html/jquery.js
@@ -0,0 +1,35 @@
+/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}k.fn=k.prototype={jquery:f,constructor:k,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=k.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return k.each(this,e)},map:function(n){return this.pushStack(k.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},k.extend=k.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(k.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||k.isPlainObject(n)?n:{},i=!1,a[t]=k.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},k.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t){b(e,{nonce:t&&t.nonce})},each:function(e,t){var n,r=0;if(d(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?"":(e+"").replace(p,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(d(Object(e))?k.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(d(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g.apply([],a)},guid:1,support:y}),"function"==typeof Symbol&&(k.fn[Symbol.iterator]=t[Symbol.iterator]),k.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var h=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,k="sizzle"+1*new Date,m=n.document,S=0,r=0,p=ue(),x=ue(),N=ue(),A=ue(),D=function(e,t){return e===t&&(l=!0),0},j={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",$=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",F=new RegExp(M+"+","g"),B=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="<a id='"+k+"'></a><select id='"+k+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!==C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!==C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&j.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(D),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(F," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===S&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[S,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===S&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[S,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[k]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace(B,"$1"));return s[k]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[S,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[k]||(e[k]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===S&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[k]&&(v=Ce(v)),y&&!y[k]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[k]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(B,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(B," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=N[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[k]?i.push(a):o.push(a);(a=N(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=S+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t===C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument===C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(S=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(S=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=k.split("").sort(D).join("")===k,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);k.find=h,k.expr=h.selectors,k.expr[":"]=k.expr.pseudos,k.uniqueSort=k.unique=h.uniqueSort,k.text=h.getText,k.isXMLDoc=h.isXML,k.contains=h.contains,k.escapeSelector=h.escape;var T=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&k(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},N=k.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var D=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1<i.call(n,e)!==r}):k.filter(n,e,r)}k.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?k.find.matchesSelector(r,e)?[r]:[]:k.find.matches(e,k.grep(t,function(e){return 1===e.nodeType}))},k.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(k(e).filter(function(){for(t=0;t<r;t++)if(k.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)k.find(e,i[t],n);return 1<r?k.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&N.test(e)?k(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(k.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&k(e);if(!N.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&k.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?k.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(k(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(k.uniqueSort(k.merge(this.get(),k(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),k.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return T(e,"parentNode")},parentsUntil:function(e,t,n){return T(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return T(e,"nextSibling")},prevAll:function(e){return T(e,"previousSibling")},nextUntil:function(e,t,n){return T(e,"nextSibling",n)},prevUntil:function(e,t,n){return T(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return"undefined"!=typeof e.contentDocument?e.contentDocument:(A(e,"template")&&(e=e.content||e),k.merge([],e.childNodes))}},function(r,i){k.fn[r]=function(e,t){var n=k.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=k.filter(t,n)),1<this.length&&(O[r]||k.uniqueSort(n),H.test(r)&&n.reverse()),this.pushStack(n)}});var R=/[^\x20\t\r\n\f]+/g;function M(e){return e}function I(e){throw e}function W(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}k.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},k.each(e.match(R)||[],function(e,t){n[t]=!0}),n):k.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){k.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return k.each(arguments,function(e,t){var n;while(-1<(n=k.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<k.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},k.extend({Deferred:function(e){var o=[["notify","progress",k.Callbacks("memory"),k.Callbacks("memory"),2],["resolve","done",k.Callbacks("once memory"),k.Callbacks("once memory"),0,"resolved"],["reject","fail",k.Callbacks("once memory"),k.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return k.Deferred(function(r){k.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,M,s),l(u,o,I,s)):(u++,t.call(e,l(u,o,M,s),l(u,o,I,s),l(u,o,M,o.notifyWith))):(a!==M&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){k.Deferred.exceptionHook&&k.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==I&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(k.Deferred.getStackHook&&(t.stackTrace=k.Deferred.getStackHook()),C.setTimeout(t))}}return k.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:M,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:M)),o[2][3].add(l(0,e,m(n)?n:I))}).promise()},promise:function(e){return null!=e?k.extend(e,a):a}},s={};return k.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=k.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(W(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)W(i[t],a(t),o.reject);return o.promise()}});var $=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;k.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&$.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},k.readyException=function(e){C.setTimeout(function(){throw e})};var F=k.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),k.ready()}k.fn.ready=function(e){return F.then(e)["catch"](function(e){k.readyException(e)}),this},k.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--k.readyWait:k.isReady)||(k.isReady=!0)!==e&&0<--k.readyWait||F.resolveWith(E,[k])}}),k.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(k.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var _=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)_(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(k(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},z=/^-ms-/,U=/-([a-z])/g;function X(e,t){return t.toUpperCase()}function V(e){return e.replace(z,"ms-").replace(U,X)}var G=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Y(){this.expando=k.expando+Y.uid++}Y.uid=1,Y.prototype={cache:function(e){var t=e[this.expando];return t||(t={},G(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[V(t)]=n;else for(r in t)i[V(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][V(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(V):(t=V(t))in r?[t]:t.match(R)||[]).length;while(n--)delete r[t[n]]}(void 0===t||k.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!k.isEmptyObject(t)}};var Q=new Y,J=new Y,K=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function ee(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(Z,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:K.test(i)?JSON.parse(i):i)}catch(e){}J.set(e,t,n)}else n=void 0;return n}k.extend({hasData:function(e){return J.hasData(e)||Q.hasData(e)},data:function(e,t,n){return J.access(e,t,n)},removeData:function(e,t){J.remove(e,t)},_data:function(e,t,n){return Q.access(e,t,n)},_removeData:function(e,t){Q.remove(e,t)}}),k.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=J.get(o),1===o.nodeType&&!Q.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=V(r.slice(5)),ee(o,r,i[r]));Q.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){J.set(this,n)}):_(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=J.get(o,n))?t:void 0!==(t=ee(o,n))?t:void 0;this.each(function(){J.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){J.remove(this,e)})}}),k.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Q.get(e,t),n&&(!r||Array.isArray(n)?r=Q.access(e,t,k.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=k.queue(e,t),r=n.length,i=n.shift(),o=k._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){k.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Q.get(e,n)||Q.access(e,n,{empty:k.Callbacks("once memory").add(function(){Q.remove(e,[t+"queue",n])})})}}),k.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?k.queue(this[0],t):void 0===n?this:this.each(function(){var e=k.queue(this,t,n);k._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&k.dequeue(this,t)})},dequeue:function(e){return this.each(function(){k.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=k.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Q.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var te=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ne=new RegExp("^(?:([+-])=|)("+te+")([a-z%]*)$","i"),re=["Top","Right","Bottom","Left"],ie=E.documentElement,oe=function(e){return k.contains(e.ownerDocument,e)},ae={composed:!0};ie.getRootNode&&(oe=function(e){return k.contains(e.ownerDocument,e)||e.getRootNode(ae)===e.ownerDocument});var se=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&oe(e)&&"none"===k.css(e,"display")},ue=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];for(o in i=n.apply(e,r||[]),t)e.style[o]=a[o];return i};function le(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return k.css(e,t,"")},u=s(),l=n&&n[3]||(k.cssNumber[t]?"":"px"),c=e.nodeType&&(k.cssNumber[t]||"px"!==l&&+u)&&ne.exec(k.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)k.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,k.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ce={};function fe(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Q.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&se(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ce[s])||(o=a.body.appendChild(a.createElement(s)),u=k.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ce[s]=u)))):"none"!==n&&(l[c]="none",Q.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}k.fn.extend({show:function(){return fe(this,!0)},hide:function(){return fe(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){se(this)?k(this).show():k(this).hide()})}});var pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Q.set(e[n],"globalEval",!t||Q.get(t[n],"globalEval"))}ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;var me,xe,be=/<|&#?\w+;/;function we(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))k.merge(p,o.nodeType?[o]:o);else if(be.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+k.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;k.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<k.inArray(o,r))i&&i.push(o);else if(l=oe(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}me=E.createDocumentFragment().appendChild(E.createElement("div")),(xe=E.createElement("input")).setAttribute("type","radio"),xe.setAttribute("checked","checked"),xe.setAttribute("name","t"),me.appendChild(xe),y.checkClone=me.cloneNode(!0).cloneNode(!0).lastChild.checked,me.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t<arguments.length;t++)u[t]=arguments[t];if(s.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,s)){a=k.event.handlers.call(this,s,l),t=0;while((i=a[t++])&&!s.isPropagationStopped()){s.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!s.isImmediatePropagationStopped())s.rnamespace&&!1!==o.namespace&&!s.rnamespace.test(o.namespace)||(s.handleObj=o,s.data=o.data,void 0!==(r=((k.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,u))&&!1===(s.result=r)&&(s.preventDefault(),s.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,s),s.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<k(i,this).index(l):k.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(k.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[k.expando]?e:new k.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&De(t,"click",ke),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&De(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Q.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},k.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},k.Event=function(e,t){if(!(this instanceof k.Event))return new k.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?ke:Se,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&k.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[k.expando]=!0},k.Event.prototype={constructor:k.Event,isDefaultPrevented:Se,isPropagationStopped:Se,isImmediatePropagationStopped:Se,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=ke,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=ke,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=ke,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},k.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&Te.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Ce.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},k.event.addProp),k.each({focus:"focusin",blur:"focusout"},function(e,t){k.event.special[e]={setup:function(){return De(this,e,Ne),!1},trigger:function(){return De(this,e),!0},delegateType:t}}),k.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){k.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||k.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),k.fn.extend({on:function(e,t,n,r){return Ae(this,e,t,n,r)},one:function(e,t,n,r){return Ae(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,k(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Se),this.each(function(){k.event.remove(this,e,n,t)})}});var je=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/<script|<style|<link/i,Le=/checked\s*(?:[^=]|=\s*.checked.)/i,He=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n<r;n++)k.event.add(t,i,l[i][n]);J.hasData(e)&&(s=J.access(e),u=k.extend({},s),J.set(t,u))}}function Ie(n,r,i,o){r=g.apply([],r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&Le.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),Ie(t,r,i,o)});if(f&&(t=(e=we(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=k.map(ve(e,"script"),Pe)).length;c<f;c++)u=e,c!==p&&(u=k.clone(u,!0,!0),s&&k.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,k.map(a,Re),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Q.access(u,"globalEval")&&k.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?k._evalUrl&&!u.noModule&&k._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")}):b(u.textContent.replace(He,""),u,l))}return n}function We(e,t,n){for(var r,i=t?k.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||k.cleanData(ve(r)),r.parentNode&&(n&&oe(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}k.extend({htmlPrefilter:function(e){return e.replace(je,"<$1></$2>")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Me(o[r],a[r]);else Me(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=k.event.special,o=0;void 0!==(n=e[o]);o++)if(G(n)){if(t=n[Q.expando]){if(t.events)for(r in t.events)i[r]?k.event.remove(n,r):k.removeEvent(n,r,t.handle);n[Q.expando]=void 0}n[J.expando]&&(n[J.expando]=void 0)}}}),k.fn.extend({detach:function(e){return We(this,e,!0)},remove:function(e){return We(this,e)},text:function(e){return _(this,function(e){return void 0===e?k.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Ie(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Oe(this,e).appendChild(e)})},prepend:function(){return Ie(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Oe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Ie(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Ie(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(k.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return k.clone(this,e,t)})},html:function(e){return _(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!qe.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=k.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(k.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return Ie(this,arguments,function(e){var t=this.parentNode;k.inArray(this,n)<0&&(k.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),k.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){k.fn[e]=function(e){for(var t,n=[],r=k(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),k(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var $e=new RegExp("^("+te+")(?!px)[a-z%]+$","i"),Fe=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Be=new RegExp(re.join("|"),"i");function _e(e,t,n){var r,i,o,a,s=e.style;return(n=n||Fe(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||oe(e)||(a=k.style(e,t)),!y.pixelBoxStyles()&&$e.test(a)&&Be.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function ze(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(u){s.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",u.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",ie.appendChild(s).appendChild(u);var e=C.getComputedStyle(u);n="1%"!==e.top,a=12===t(e.marginLeft),u.style.right="60%",o=36===t(e.right),r=36===t(e.width),u.style.position="absolute",i=12===t(u.offsetWidth/3),ie.removeChild(s),u=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s=E.createElement("div"),u=E.createElement("div");u.style&&(u.style.backgroundClip="content-box",u.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===u.style.backgroundClip,k.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),a},scrollboxSize:function(){return e(),i}}))}();var Ue=["Webkit","Moz","ms"],Xe=E.createElement("div").style,Ve={};function Ge(e){var t=k.cssProps[e]||Ve[e];return t||(e in Xe?e:Ve[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Ue.length;while(n--)if((e=Ue[n]+t)in Xe)return e}(e)||e)}var Ye=/^(none|table(?!-c[ea]).+)/,Qe=/^--/,Je={position:"absolute",visibility:"hidden",display:"block"},Ke={letterSpacing:"0",fontWeight:"400"};function Ze(e,t,n){var r=ne.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function et(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=k.css(e,n+re[a],!0,i)),r?("content"===n&&(u-=k.css(e,"padding"+re[a],!0,i)),"margin"!==n&&(u-=k.css(e,"border"+re[a]+"Width",!0,i))):(u+=k.css(e,"padding"+re[a],!0,i),"padding"!==n?u+=k.css(e,"border"+re[a]+"Width",!0,i):s+=k.css(e,"border"+re[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function tt(e,t,n){var r=Fe(e),i=(!y.boxSizingReliable()||n)&&"border-box"===k.css(e,"boxSizing",!1,r),o=i,a=_e(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if($e.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||"auto"===a||!parseFloat(a)&&"inline"===k.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===k.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+et(e,t,n||(i?"border":"content"),o,r,a)+"px"}function nt(e,t,n,r,i){return new nt.prototype.init(e,t,n,r,i)}k.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=_e(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=V(t),u=Qe.test(t),l=e.style;if(u||(t=Ge(s)),a=k.cssHooks[t]||k.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=ne.exec(n))&&i[1]&&(n=le(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(k.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=V(t);return Qe.test(t)||(t=Ge(s)),(a=k.cssHooks[t]||k.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=_e(e,t,r)),"normal"===i&&t in Ke&&(i=Ke[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),k.each(["height","width"],function(e,u){k.cssHooks[u]={get:function(e,t,n){if(t)return!Ye.test(k.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?tt(e,u,n):ue(e,Je,function(){return tt(e,u,n)})},set:function(e,t,n){var r,i=Fe(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===k.css(e,"boxSizing",!1,i),s=n?et(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-et(e,u,"border",!1,i)-.5)),s&&(r=ne.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=k.css(e,u)),Ze(0,t,s)}}}),k.cssHooks.marginLeft=ze(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(_e(e,"marginLeft"))||e.getBoundingClientRect().left-ue(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),k.each({margin:"",padding:"",border:"Width"},function(i,o){k.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+re[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(k.cssHooks[i+o].set=Ze)}),k.fn.extend({css:function(e,t){return _(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Fe(e),i=t.length;a<i;a++)o[t[a]]=k.css(e,t[a],!1,r);return o}return void 0!==n?k.style(e,t,n):k.css(e,t)},e,t,1<arguments.length)}}),((k.Tween=nt).prototype={constructor:nt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||k.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(k.cssNumber[n]?"":"px")},cur:function(){var e=nt.propHooks[this.prop];return e&&e.get?e.get(this):nt.propHooks._default.get(this)},run:function(e){var t,n=nt.propHooks[this.prop];return this.options.duration?this.pos=t=k.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):nt.propHooks._default.set(this),this}}).init.prototype=nt.prototype,(nt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=k.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){k.fx.step[e.prop]?k.fx.step[e.prop](e):1!==e.elem.nodeType||!k.cssHooks[e.prop]&&null==e.elem.style[Ge(e.prop)]?e.elem[e.prop]=e.now:k.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=nt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},k.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},k.fx=nt.prototype.init,k.fx.step={};var rt,it,ot,at,st=/^(?:toggle|show|hide)$/,ut=/queueHooks$/;function lt(){it&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(lt):C.setTimeout(lt,k.fx.interval),k.fx.tick())}function ct(){return C.setTimeout(function(){rt=void 0}),rt=Date.now()}function ft(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=re[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function pt(e,t,n){for(var r,i=(dt.tweeners[t]||[]).concat(dt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function dt(o,e,t){var n,a,r=0,i=dt.prefilters.length,s=k.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=rt||ct(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:k.extend({},e),opts:k.extend(!0,{specialEasing:{},easing:k.easing._default},t),originalProperties:e,originalOptions:t,startTime:rt||ct(),duration:t.duration,tweens:[],createTween:function(e,t){var n=k.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=V(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=k.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=dt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(k._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return k.map(c,pt,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),k.fx.timer(k.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}k.Animation=k.extend(dt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return le(n.elem,e,ne.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(R);for(var n,r=0,i=e.length;r<i;r++)n=e[r],dt.tweeners[n]=dt.tweeners[n]||[],dt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&se(e),v=Q.get(e,"fxshow");for(r in n.queue||(null==(a=k._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,k.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],st.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||k.style(e,r)}if((u=!k.isEmptyObject(t))||!k.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Q.get(e,"display")),"none"===(c=k.css(e,"display"))&&(l?c=l:(fe([e],!0),l=e.style.display||l,c=k.css(e,"display"),fe([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===k.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Q.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&fe([e],!0),p.done(function(){for(r in g||fe([e]),Q.remove(e,"fxshow"),d)k.style(e,r,d[r])})),u=pt(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?dt.prefilters.unshift(e):dt.prefilters.push(e)}}),k.speed=function(e,t,n){var r=e&&"object"==typeof e?k.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return k.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in k.fx.speeds?r.duration=k.fx.speeds[r.duration]:r.duration=k.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&k.dequeue(this,r.queue)},r},k.fn.extend({fadeTo:function(e,t,n,r){return this.filter(se).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=k.isEmptyObject(t),o=k.speed(e,n,r),a=function(){var e=dt(this,k.extend({},t),o);(i||Q.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&!1!==i&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=k.timers,r=Q.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&ut.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||k.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Q.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=k.timers,o=n?n.length:0;for(t.finish=!0,k.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),k.each(["toggle","show","hide"],function(e,r){var i=k.fn[r];k.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(ft(r,!0),e,t,n)}}),k.each({slideDown:ft("show"),slideUp:ft("hide"),slideToggle:ft("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){k.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),k.timers=[],k.fx.tick=function(){var e,t=0,n=k.timers;for(rt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||k.fx.stop(),rt=void 0},k.fx.timer=function(e){k.timers.push(e),k.fx.start()},k.fx.interval=13,k.fx.start=function(){it||(it=!0,lt())},k.fx.stop=function(){it=null},k.fx.speeds={slow:600,fast:200,_default:400},k.fn.delay=function(r,e){return r=k.fx&&k.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},ot=E.createElement("input"),at=E.createElement("select").appendChild(E.createElement("option")),ot.type="checkbox",y.checkOn=""!==ot.value,y.optSelected=at.selected,(ot=E.createElement("input")).value="t",ot.type="radio",y.radioValue="t"===ot.value;var ht,gt=k.expr.attrHandle;k.fn.extend({attr:function(e,t){return _(this,k.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){k.removeAttr(this,e)})}}),k.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?k.prop(e,t,n):(1===o&&k.isXMLDoc(e)||(i=k.attrHooks[t.toLowerCase()]||(k.expr.match.bool.test(t)?ht:void 0)),void 0!==n?null===n?void k.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=k.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(R);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ht={set:function(e,t,n){return!1===t?k.removeAttr(e,n):e.setAttribute(n,n),n}},k.each(k.expr.match.bool.source.match(/\w+/g),function(e,t){var a=gt[t]||k.find.attr;gt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=gt[o],gt[o]=r,r=null!=a(e,t,n)?o:null,gt[o]=i),r}});var vt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;function mt(e){return(e.match(R)||[]).join(" ")}function xt(e){return e.getAttribute&&e.getAttribute("class")||""}function bt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(R)||[]}k.fn.extend({prop:function(e,t){return _(this,k.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[k.propFix[e]||e]})}}),k.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&k.isXMLDoc(e)||(t=k.propFix[t]||t,i=k.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=k.find.attr(e,"tabindex");return t?parseInt(t,10):vt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(k.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),k.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){k.propFix[this.toLowerCase()]=this}),k.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){k(this).addClass(t.call(this,e,xt(this)))});if((e=bt(t)).length)while(n=this[u++])if(i=xt(n),r=1===n.nodeType&&" "+mt(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=mt(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){k(this).removeClass(t.call(this,e,xt(this)))});if(!arguments.length)return this.attr("class","");if((e=bt(t)).length)while(n=this[u++])if(i=xt(n),r=1===n.nodeType&&" "+mt(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=mt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){k(this).toggleClass(i.call(this,e,xt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=k(this),r=bt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=xt(this))&&Q.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Q.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+mt(xt(n))+" ").indexOf(t))return!0;return!1}});var wt=/\r/g;k.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,k(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=k.map(t,function(e){return null==e?"":e+""})),(r=k.valHooks[this.type]||k.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=k.valHooks[t.type]||k.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(wt,""):null==e?"":e:void 0}}),k.extend({valHooks:{option:{get:function(e){var t=k.find.attr(e,"value");return null!=t?t:mt(k.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=k(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=k.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<k.inArray(k.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),k.each(["radio","checkbox"],function(){k.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<k.inArray(k(e).val(),t)}},y.checkOn||(k.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var Tt=/^(?:focusinfocus|focusoutblur)$/,Ct=function(e){e.stopPropagation()};k.extend(k.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!Tt.test(d+k.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[k.expando]?e:new k.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:k.makeArray(t,[e]),c=k.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,Tt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Q.get(o,"events")||{})[e.type]&&Q.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&G(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!G(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),k.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,Ct),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,Ct),k.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=k.extend(new k.Event,n,{type:e,isSimulated:!0});k.event.trigger(r,null,t)}}),k.fn.extend({trigger:function(e,t){return this.each(function(){k.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return k.event.trigger(e,t,n,!0)}}),y.focusin||k.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){k.event.simulate(r,e.target,k.event.fix(e))};k.event.special[r]={setup:function(){var e=this.ownerDocument||this,t=Q.access(e,r);t||e.addEventListener(n,i,!0),Q.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this,t=Q.access(e,r)-1;t?Q.access(e,r,t):(e.removeEventListener(n,i,!0),Q.remove(e,r))}}});var Et=C.location,kt=Date.now(),St=/\?/;k.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||k.error("Invalid XML: "+e),t};var Nt=/\[\]$/,At=/\r?\n/g,Dt=/^(?:submit|button|image|reset|file)$/i,jt=/^(?:input|select|textarea|keygen)/i;function qt(n,e,r,i){var t;if(Array.isArray(e))k.each(e,function(e,t){r||Nt.test(n)?i(n,t):qt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)qt(n+"["+t+"]",e[t],r,i)}k.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!k.isPlainObject(e))k.each(e,function(){i(this.name,this.value)});else for(n in e)qt(n,e[n],t,i);return r.join("&")},k.fn.extend({serialize:function(){return k.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=k.prop(this,"elements");return e?k.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!k(this).is(":disabled")&&jt.test(this.nodeName)&&!Dt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=k(this).val();return null==n?null:Array.isArray(n)?k.map(n,function(e){return{name:t.name,value:e.replace(At,"\r\n")}}):{name:t.name,value:n.replace(At,"\r\n")}}).get()}});var Lt=/%20/g,Ht=/#.*$/,Ot=/([?&])_=[^&]*/,Pt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Rt=/^(?:GET|HEAD)$/,Mt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Ft=E.createElement("a");function Bt(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(R)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function _t(t,i,o,a){var s={},u=t===Wt;function l(e){var r;return s[e]=!0,k.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function zt(e,t){var n,r,i=k.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&k.extend(!0,e,r),e}Ft.href=Et.href,k.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Et.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Et.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":k.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,k.ajaxSettings),t):zt(k.ajaxSettings,e)},ajaxPrefilter:Bt(It),ajaxTransport:Bt(Wt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=k.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?k(y):k.event,x=k.Deferred(),b=k.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Pt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Et.href)+"").replace(Mt,Et.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(R)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Ft.protocol+"//"+Ft.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=k.param(v.data,v.traditional)),_t(It,v,t,T),h)return T;for(i in(g=k.event&&v.global)&&0==k.active++&&k.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Rt.test(v.type),f=v.url.replace(Ht,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Lt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(St.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Ot,"$1"),o=(St.test(f)?"&":"?")+"_="+kt+++o),v.url=f+o),v.ifModified&&(k.lastModified[f]&&T.setRequestHeader("If-Modified-Since",k.lastModified[f]),k.etag[f]&&T.setRequestHeader("If-None-Match",k.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+$t+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=_t(Wt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(k.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(k.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--k.active||k.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return k.get(e,t,n,"json")},getScript:function(e,t){return k.get(e,void 0,t,"script")}}),k.each(["get","post"],function(e,i){k[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),k.ajax(k.extend({url:e,type:i,dataType:r,data:t,success:n},k.isPlainObject(e)&&e))}}),k._evalUrl=function(e,t){return k.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){k.globalEval(e,t)}})},k.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=k(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){k(this).wrapInner(n.call(this,e))}):this.each(function(){var e=k(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){k(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){k(this).replaceWith(this.childNodes)}),this}}),k.expr.pseudos.hidden=function(e){return!k.expr.pseudos.visible(e)},k.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},k.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Ut={0:200,1223:204},Xt=k.ajaxSettings.xhr();y.cors=!!Xt&&"withCredentials"in Xt,y.ajax=Xt=!!Xt,k.ajaxTransport(function(i){var o,a;if(y.cors||Xt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Ut[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),k.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),k.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return k.globalEval(e),e}}}),k.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),k.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=k("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=mt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&k.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?k("<div>").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}}),k.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),k.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}}),k.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||k.guid++,i},k.holdReady=function(e){e?k.readyWait++:k.ready(!0)},k.isArray=Array.isArray,k.parseJSON=JSON.parse,k.nodeName=A,k.isFunction=m,k.isWindow=x,k.camelCase=V,k.type=w,k.now=Date.now,k.isNumeric=function(e){var t=k.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},"function"==typeof define&&define.amd&&define("jquery",[],function(){return k});var Qt=C.jQuery,Jt=C.$;return k.noConflict=function(e){return C.$===k&&(C.$=Jt),e&&C.jQuery===k&&(C.jQuery=Qt),k},e||(C.jQuery=C.$=k),k});
+/*! jQuery UI - v1.12.1 - 2019-01-27
+* http://jqueryui.com
+* Includes: widget.js, position.js, data.js, disable-selection.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/resizable.js, widgets/mouse.js
+* Copyright jQuery Foundation and other contributors; Licensed MIT */
+
+(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){function e(t){for(var e=t.css("visibility");"inherit"===e;)t=t.parent(),e=t.css("visibility");return"hidden"!==e}t.ui=t.ui||{},t.ui.version="1.12.1";var i=0,s=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,"events"),s&&s.remove&&t(n).triggerHandler("remove")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var n,o,a,r={},h=e.split(".")[0];e=e.split(".")[1];var l=h+"-"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[":"][l.toLowerCase()]=function(e){return!!t.data(e,l)},t[h]=t[h]||{},n=t[h][e],o=t[h][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return t.isFunction(s)?(r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void 0):(r[e]=s,void 0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:h,widgetName:e,widgetFullName:l}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var i,n,o=s.call(arguments,1),a=0,r=o.length;r>a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth,o="scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight;return{width:o?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType,o=!s&&!n;return{element:i,isWindow:s,isDocument:n,offset:o?t(e).offset():{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:i.outerWidth(),height:i.outerHeight()}}},t.fn.position=function(n){if(!n||!n.of)return d.apply(this,arguments);n=t.extend({},n);var u,p,f,m,g,_,v=t(n.of),b=t.position.getWithinInfo(n.within),y=t.position.getScrollInfo(b),w=(n.collision||"flip").split(" "),x={};return _=s(v),v[0].preventDefault&&(n.at="left top"),p=_.width,f=_.height,m=_.offset,g=t.extend({},m),t.each(["my","at"],function(){var t,e,i=(n[this]||"").split(" ");1===i.length&&(i=r.test(i[0])?i.concat(["center"]):h.test(i[0])?["center"].concat(i):["center","center"]),i[0]=r.test(i[0])?i[0]:"center",i[1]=h.test(i[1])?i[1]:"center",t=l.exec(i[0]),e=l.exec(i[1]),x[this]=[t?t[0]:0,e?e[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===w.length&&(w[1]=w[0]),"right"===n.at[0]?g.left+=p:"center"===n.at[0]&&(g.left+=p/2),"bottom"===n.at[1]?g.top+=f:"center"===n.at[1]&&(g.top+=f/2),u=e(x.at,p,f),g.left+=u[0],g.top+=u[1],this.each(function(){var s,r,h=t(this),l=h.outerWidth(),c=h.outerHeight(),d=i(this,"marginLeft"),_=i(this,"marginTop"),k=l+d+i(this,"marginRight")+y.width,C=c+_+i(this,"marginBottom")+y.height,D=t.extend({},g),T=e(x.my,h.outerWidth(),h.outerHeight());"right"===n.my[0]?D.left-=l:"center"===n.my[0]&&(D.left-=l/2),"bottom"===n.my[1]?D.top-=c:"center"===n.my[1]&&(D.top-=c/2),D.left+=T[0],D.top+=T[1],s={marginLeft:d,marginTop:_},t.each(["left","top"],function(e,i){t.ui.position[w[e]]&&t.ui.position[w[e]][i](D,{targetWidth:p,targetHeight:f,elemWidth:l,elemHeight:c,collisionPosition:s,collisionWidth:k,collisionHeight:C,offset:[u[0]+T[0],u[1]+T[1]],my:n.my,at:n.at,within:b,elem:h})}),n.using&&(r=function(t){var e=m.left-D.left,i=e+p-l,s=m.top-D.top,r=s+f-c,u={target:{element:v,left:m.left,top:m.top,width:p,height:f},element:{element:h,left:D.left,top:D.top,width:l,height:c},horizontal:0>i?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("<div>"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth<t.width,n=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("<div style='overflow:hidden;'></div>"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element
+},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/**
+ * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler
+ * Licensed under MIT
+ * @author Ariel Flesler
+ * @version 2.1.2
+ */
+;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1<b.axis.length;u&&(d/=2);b.offset=h(b.offset);b.over=h(b.over);return this.each(function(){function k(a){var k=$.extend({},b,{queue:!0,duration:d,complete:a&&function(){a.call(q,e,b)}});r.animate(f,k)}if(null!==a){var l=n(this),q=l?this.contentWindow||window:this,r=$(q),e=a,f={},t;switch(typeof e){case "number":case "string":if(/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(e)){e= h(e);break}e=l?$(e):$(e,q);case "object":if(e.length===0)return;if(e.is||e.style)t=(e=$(e)).offset()}var v=$.isFunction(b.offset)&&b.offset(q,e)||b.offset;$.each(b.axis.split(""),function(a,c){var d="x"===c?"Left":"Top",m=d.toLowerCase(),g="scroll"+d,h=r[g](),n=p.max(q,c);t?(f[g]=t[m]+(l?0:h-r.offset()[m]),b.margin&&(f[g]-=parseInt(e.css("margin"+d),10)||0,f[g]-=parseInt(e.css("border"+d+"Width"),10)||0),f[g]+=v[m]||0,b.over[m]&&(f[g]+=e["x"===c?"width":"height"]()*b.over[m])):(d=e[m],f[g]=d.slice&& "%"===d.slice(-1)?parseFloat(d)/100*n:d);b.limit&&/^\d+$/.test(f[g])&&(f[g]=0>=f[g]?0:Math.min(f[g],n));!a&&1<b.axis.length&&(h===f[g]?f={}:u&&(k(b.onAfterFirst),f={}))});k(b.onAfter)}})};p.max=function(a,d){var b="x"===d?"Width":"Height",h="scroll"+b;if(!n(a))return a[h]-$(a)[b.toLowerCase()]();var b="client"+b,k=a.ownerDocument||a.document,l=k.documentElement,k=k.body;return Math.max(l[h],k[h])-Math.min(l[b],k[b])};$.Tween.propHooks.scrollLeft=$.Tween.propHooks.scrollTop={get:function(a){return $(a.elem)[a.prop]()}, set:function(a){var d=this.get(a);if(a.options.interrupt&&a._last&&a._last!==d)return $(a.elem).stop();var b=Math.round(a.now);d!==b&&($(a.elem)[a.prop](b),a._last=this.get(a))}};return p});
+/*!
+ PowerTip v1.3.1 (2018-04-15)
+ https://stevenbenner.github.io/jquery-powertip/
+ Copyright (c) 2018 Steven Benner (http://stevenbenner.com/).
+ Released under MIT license.
+ https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt
+*/
+(function(root,factory){if(typeof define==="function"&&define.amd){define(["jquery"],factory)}else if(typeof module==="object"&&module.exports){module.exports=factory(require("jquery"))}else{factory(root.jQuery)}})(this,function($){var $document=$(document),$window=$(window),$body=$("body");var DATA_DISPLAYCONTROLLER="displayController",DATA_HASACTIVEHOVER="hasActiveHover",DATA_FORCEDOPEN="forcedOpen",DATA_HASMOUSEMOVE="hasMouseMove",DATA_MOUSEONTOTIP="mouseOnToPopup",DATA_ORIGINALTITLE="originalTitle",DATA_POWERTIP="powertip",DATA_POWERTIPJQ="powertipjq",DATA_POWERTIPTARGET="powertiptarget",EVENT_NAMESPACE=".powertip",RAD2DEG=180/Math.PI,MOUSE_EVENTS=["click","dblclick","mousedown","mouseup","mousemove","mouseover","mouseout","mouseenter","mouseleave","contextmenu"];var session={tooltips:null,isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,closeDelayTimeout:null,mouseTrackingActive:false,delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var Collision={none:0,top:1,bottom:2,left:4,right:8};$.fn.powerTip=function(opts,arg){var targetElements=this,options,tipController;if(!targetElements.length){return targetElements}if($.type(opts)==="string"&&$.powerTip[opts]){return $.powerTip[opts].call(targetElements,targetElements,arg)}options=$.extend({},$.fn.powerTip.defaults,opts);tipController=new TooltipController(options);initTracking();targetElements.each(function elementSetup(){var $this=$(this),dataPowertip=$this.data(DATA_POWERTIP),dataElem=$this.data(DATA_POWERTIPJQ),dataTarget=$this.data(DATA_POWERTIPTARGET),title=$this.attr("title");if(!dataPowertip&&!dataTarget&&!dataElem&&title){$this.data(DATA_POWERTIP,title);$this.data(DATA_ORIGINALTITLE,title);$this.removeAttr("title")}$this.data(DATA_DISPLAYCONTROLLER,new DisplayController($this,options,tipController))});if(!options.manual){$.each(options.openEvents,function(idx,evt){if($.inArray(evt,options.closeEvents)>-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference<options.intentSensitivity){cancelClose();closeAnyDelayed();tipController.showTip(element)}else{session.previousX=session.currentX;session.previousY=session.currentY;openTooltip()}}function cancelTimer(stopClose){hoverTimer=clearTimeout(hoverTimer);if(session.closeDelayTimeout&&myCloseDelay===session.closeDelayTimeout||stopClose){cancelClose()}}function cancelClose(){session.closeDelayTimeout=clearTimeout(session.closeDelayTimeout);session.delayInProgress=false}function closeAnyDelayed(){if(session.delayInProgress&&session.activeHover&&!session.activeHover.is(element)){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide(true)}}function repositionTooltip(){tipController.resetPosition(element)}this.show=openTooltip;this.hide=closeTooltip;this.cancel=cancelTimer;this.resetPosition=repositionTooltip}function PlacementCalculator(){function computePlacementCoords(element,placement,tipWidth,tipHeight,offset){var placementBase=placement.split("-")[0],coords=new CSSCoordinates,position;if(isSvgElement(element)){position=getSvgPlacement(element,placementBase)}else{position=getHtmlPlacement(element,placementBase)}switch(placement){case"n":coords.set("left",position.left-tipWidth/2);coords.set("bottom",session.windowHeight-position.top+offset);break;case"e":coords.set("left",position.left+offset);coords.set("top",position.top-tipHeight/2);break;case"s":coords.set("left",position.left-tipWidth/2);coords.set("top",position.top+offset);break;case"w":coords.set("top",position.top-tipHeight/2);coords.set("right",session.windowWidth-position.left+offset);break;case"nw":coords.set("bottom",session.windowHeight-position.top+offset);coords.set("right",session.windowWidth-position.left-20);break;case"nw-alt":coords.set("left",position.left);coords.set("bottom",session.windowHeight-position.top+offset);break;case"ne":coords.set("left",position.left-20);coords.set("bottom",session.windowHeight-position.top+offset);break;case"ne-alt":coords.set("bottom",session.windowHeight-position.top+offset);coords.set("right",session.windowWidth-position.left);break;case"sw":coords.set("top",position.top+offset);coords.set("right",session.windowWidth-position.left-20);break;case"sw-alt":coords.set("left",position.left);coords.set("top",position.top+offset);break;case"se":coords.set("left",position.left-20);coords.set("top",position.top+offset);break;case"se-alt":coords.set("top",position.top+offset);coords.set("right",session.windowWidth-position.left);break}return coords}function getHtmlPlacement(element,placement){var objectOffset=element.offset(),objectWidth=element.outerWidth(),objectHeight=element.outerHeight(),left,top;switch(placement){case"n":left=objectOffset.left+objectWidth/2;top=objectOffset.top;break;case"e":left=objectOffset.left+objectWidth;top=objectOffset.top+objectHeight/2;break;case"s":left=objectOffset.left+objectWidth/2;top=objectOffset.top+objectHeight;break;case"w":left=objectOffset.left;top=objectOffset.top+objectHeight/2;break;case"nw":left=objectOffset.left;top=objectOffset.top;break;case"ne":left=objectOffset.left+objectWidth;top=objectOffset.top;break;case"sw":left=objectOffset.left;top=objectOffset.top+objectHeight;break;case"se":left=objectOffset.left+objectWidth;top=objectOffset.top+objectHeight;break}return{top:top,left:left}}function getSvgPlacement(element,placement){var svgElement=element.closest("svg")[0],domElement=element[0],point=svgElement.createSVGPoint(),boundingBox=domElement.getBBox(),matrix=domElement.getScreenCTM(),halfWidth=boundingBox.width/2,halfHeight=boundingBox.height/2,placements=[],placementKeys=["nw","n","ne","e","se","s","sw","w"],coords,rotation,steps,x;function pushPlacement(){placements.push(point.matrixTransform(matrix))}point.x=boundingBox.x;point.y=boundingBox.y;pushPlacement();point.x+=halfWidth;pushPlacement();point.x+=halfWidth;pushPlacement();point.y+=halfHeight;pushPlacement();point.y+=halfHeight;pushPlacement();point.x-=halfWidth;pushPlacement();point.x-=halfWidth;pushPlacement();point.y-=halfHeight;pushPlacement();if(placements[0].y!==placements[1].y||placements[0].x!==placements[7].x){rotation=Math.atan2(matrix.b,matrix.a)*RAD2DEG;steps=Math.ceil((rotation%360-22.5)/45);if(steps<1){steps+=8}while(steps--){placementKeys.push(placementKeys.shift())}}for(x=0;x<placements.length;x++){if(placementKeys[x]===placement){coords=placements[x];break}}return{top:coords.y+session.scrollTop,left:coords.x+session.scrollLeft}}this.compute=computePlacementCoords}function TooltipController(options){var placementCalculator=new PlacementCalculator,tipElement=$("#"+options.popupId);if(tipElement.length===0){tipElement=$("<div/>",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.top<viewportTop||Math.abs(coords.bottom-session.windowHeight)-elementHeight<viewportTop){collisions|=Collision.top}if(coords.top+elementHeight>viewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.left<viewportLeft||coords.right+elementWidth>viewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right<viewportLeft){collisions|=Collision.right}return collisions}function countFlags(value){var count=0;while(value){value&=value-1;count++}return count}return $.powerTip});/*!
+ * jQuery UI Touch Punch 0.2.3
+ *
+ * Copyright 2011–2014, Dave Furfero
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ *
+ * Depends:
+ *  jquery.ui.widget.js
+ *  jquery.ui.mouse.js
+ */
+!function(a){function f(a,b){if(!(a.originalEvent.touches.length>1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017
+ * http://www.smartmenus.org/
+ * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("<span/>").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('<div class="sm-jquery-disable-overlay"/>').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('<span class="scroll-up"><span class="scroll-up-arrow"></span></span>')[0],$('<span class="scroll-down"><span class="scroll-down-arrow"></span></span>')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y<o.upEnd)&&a.eq(o.up?1:0).show(),o.y==n)mouse&&a.eq(o.up?0:1).hide(),this.menuScrollStop(t);else if(!e){this.opts.scrollAccelerate&&o.step<this.opts.scrollStep&&(o.step+=.2);var h=this;this.scrollTimeout=requestAnimationFrame(function(){h.menuScroll(t)})}},menuScrollMousewheel:function(t,e){if(this.getClosestMenu(e.target)==t[0]){e=e.originalEvent;var i=(e.wheelDelta||-e.detail)>0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$});
\ No newline at end of file
diff --git a/doc/doxygen-doc/html/menu.js b/doc/doxygen-doc/html/menu.js
new file mode 100644
index 00000000..2fe2214f
--- /dev/null
+++ b/doc/doxygen-doc/html/menu.js
@@ -0,0 +1,51 @@
+/*
+ @licstart  The following is the entire license notice for the JavaScript code in this file.
+
+ The MIT License (MIT)
+
+ Copyright (C) 1997-2020 by Dimitri van Heesch
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend  The above is the entire license notice for the JavaScript code in this file
+ */
+function initMenu(relPath,searchEnabled,serverSide,searchPage,search) {
+  function makeTree(data,relPath) {
+    var result='';
+    if ('children' in data) {
+      result+='<ul>';
+      for (var i in data.children) {
+        result+='<li><a href="'+relPath+data.children[i].url+'">'+
+                                data.children[i].text+'</a>'+
+                                makeTree(data.children[i],relPath)+'</li>';
+      }
+      result+='</ul>';
+    }
+    return result;
+  }
+
+  $('#main-nav').append(makeTree(menudata,relPath));
+  $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');
+  if (searchEnabled) {
+    if (serverSide) {
+      $('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><div class="left"><form id="FSearchBox" action="'+relPath+searchPage+'" method="get"><img id="MSearchSelect" src="'+relPath+'search/mag.svg" alt=""/><input type="text" id="MSearchField" name="query" value="'+search+'" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)"></form></div><div class="right"></div></div></li>');
+    } else {
+      $('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><span class="left"><img id="MSearchSelect" src="'+relPath+'search/mag_sel.svg" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" alt=""/><input type="text" id="MSearchField" value="'+search+'" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/></span><span class="right"><a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="'+relPath+'search/close.svg" alt=""/></a></span></div></li>');
+    }
+  }
+  $('#main-menu').smartmenus();
+}
+/* @license-end */
diff --git a/doc/doxygen-doc/html/menudata.js b/doc/doxygen-doc/html/menudata.js
new file mode 100644
index 00000000..2e94e80f
--- /dev/null
+++ b/doc/doxygen-doc/html/menudata.js
@@ -0,0 +1,71 @@
+/*
+ @licstart  The following is the entire license notice for the JavaScript code in this file.
+
+ The MIT License (MIT)
+
+ Copyright (C) 1997-2020 by Dimitri van Heesch
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend  The above is the entire license notice for the JavaScript code in this file
+*/
+var menudata={children:[
+{text:"Main Page",url:"index.html"},
+{text:"Related Pages",url:"pages.html"},
+{text:"Modules",url:"modules.html"},
+{text:"Data Structures",url:"annotated.html",children:[
+{text:"Data Structures",url:"annotated.html"},
+{text:"Data Fields",url:"functions.html",children:[
+{text:"All",url:"functions.html",children:[
+{text:"a",url:"functions.html#index_a"},
+{text:"b",url:"functions.html#index_b"},
+{text:"c",url:"functions.html#index_c"},
+{text:"d",url:"functions.html#index_d"},
+{text:"e",url:"functions.html#index_e"},
+{text:"f",url:"functions.html#index_f"},
+{text:"g",url:"functions.html#index_g"},
+{text:"i",url:"functions.html#index_i"},
+{text:"k",url:"functions.html#index_k"},
+{text:"l",url:"functions.html#index_l"},
+{text:"m",url:"functions.html#index_m"},
+{text:"n",url:"functions.html#index_n"},
+{text:"o",url:"functions.html#index_o"},
+{text:"p",url:"functions.html#index_p"},
+{text:"r",url:"functions.html#index_r"},
+{text:"s",url:"functions.html#index_s"},
+{text:"t",url:"functions.html#index_t"},
+{text:"u",url:"functions.html#index_u"},
+{text:"v",url:"functions.html#index_v"}]},
+{text:"Variables",url:"functions_vars.html",children:[
+{text:"a",url:"functions_vars.html#index_a"},
+{text:"b",url:"functions_vars.html#index_b"},
+{text:"c",url:"functions_vars.html#index_c"},
+{text:"d",url:"functions_vars.html#index_d"},
+{text:"e",url:"functions_vars.html#index_e"},
+{text:"f",url:"functions_vars.html#index_f"},
+{text:"g",url:"functions_vars.html#index_g"},
+{text:"i",url:"functions_vars.html#index_i"},
+{text:"k",url:"functions_vars.html#index_k"},
+{text:"l",url:"functions_vars.html#index_l"},
+{text:"m",url:"functions_vars.html#index_m"},
+{text:"n",url:"functions_vars.html#index_n"},
+{text:"o",url:"functions_vars.html#index_o"},
+{text:"p",url:"functions_vars.html#index_p"},
+{text:"r",url:"functions_vars.html#index_r"},
+{text:"s",url:"functions_vars.html#index_s"},
+{text:"t",url:"functions_vars.html#index_t"},
+{text:"u",url:"functions_vars.html#index_u"},
+{text:"v",url:"functions_vars.html#index_v"}]}]}]}]}
diff --git a/doc/doxygen-doc/html/modules.html b/doc/doxygen-doc/html/modules.html
new file mode 100644
index 00000000..0e3655a8
--- /dev/null
+++ b/doc/doxygen-doc/html/modules.html
@@ -0,0 +1,112 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Modules</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Modules</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all modules:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00194.html" target="_self">API version</a></td><td class="desc"></td></tr>
+<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00195.html" target="_self">Object Sets (hwloc_cpuset_t and hwloc_nodeset_t)</a></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00196.html" target="_self">Object Types</a></td><td class="desc"></td></tr>
+<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00197.html" target="_self">Object Structure and Attributes</a></td><td class="desc"></td></tr>
+<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00198.html" target="_self">Topology Creation and Destruction</a></td><td class="desc"></td></tr>
+<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00199.html" target="_self">Object levels, depths and types</a></td><td class="desc"></td></tr>
+<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00200.html" target="_self">Converting between Object Types and Attributes, and Strings</a></td><td class="desc"></td></tr>
+<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00201.html" target="_self">Consulting and Adding Key-Value Info Attributes</a></td><td class="desc"></td></tr>
+<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00202.html" target="_self">CPU binding</a></td><td class="desc"></td></tr>
+<tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00203.html" target="_self">Memory binding</a></td><td class="desc"></td></tr>
+<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00204.html" target="_self">Changing the Source of Topology Discovery</a></td><td class="desc"></td></tr>
+<tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00205.html" target="_self">Topology Detection Configuration and Query</a></td><td class="desc"></td></tr>
+<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00206.html" target="_self">Modifying a loaded Topology</a></td><td class="desc"></td></tr>
+<tr id="row_13_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00207.html" target="_self">Finding Objects inside a CPU set</a></td><td class="desc"></td></tr>
+<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00208.html" target="_self">Finding Objects covering at least CPU set</a></td><td class="desc"></td></tr>
+<tr id="row_15_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00209.html" target="_self">Looking at Ancestor and Child Objects</a></td><td class="desc"></td></tr>
+<tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00210.html" target="_self">Kinds of object Type</a></td><td class="desc"></td></tr>
+<tr id="row_17_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00211.html" target="_self">Looking at Cache Objects</a></td><td class="desc"></td></tr>
+<tr id="row_18_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00212.html" target="_self">Finding objects, miscellaneous helpers</a></td><td class="desc"></td></tr>
+<tr id="row_19_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00213.html" target="_self">Distributing items over a topology</a></td><td class="desc"></td></tr>
+<tr id="row_20_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00214.html" target="_self">CPU and node sets of entire topologies</a></td><td class="desc"></td></tr>
+<tr id="row_21_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00215.html" target="_self">Converting between CPU sets and node sets</a></td><td class="desc"></td></tr>
+<tr id="row_22_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00216.html" target="_self">Finding I/O objects</a></td><td class="desc"></td></tr>
+<tr id="row_23_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00217.html" target="_self">The bitmap API</a></td><td class="desc"></td></tr>
+<tr id="row_24_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00218.html" target="_self">Exporting Topologies to XML</a></td><td class="desc"></td></tr>
+<tr id="row_25_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00219.html" target="_self">Exporting Topologies to Synthetic</a></td><td class="desc"></td></tr>
+<tr id="row_26_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00220.html" target="_self">Retrieve distances between objects</a></td><td class="desc"></td></tr>
+<tr id="row_27_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00221.html" target="_self">Helpers for consulting distance matrices</a></td><td class="desc"></td></tr>
+<tr id="row_28_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00222.html" target="_self">Add distances between objects</a></td><td class="desc"></td></tr>
+<tr id="row_29_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00223.html" target="_self">Remove distances between objects</a></td><td class="desc"></td></tr>
+<tr id="row_30_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00224.html" target="_self">Comparing memory node attributes for finding where to allocate on</a></td><td class="desc"></td></tr>
+<tr id="row_31_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00225.html" target="_self">Managing memory attributes</a></td><td class="desc"></td></tr>
+<tr id="row_32_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00226.html" target="_self">Kinds of CPU cores</a></td><td class="desc"></td></tr>
+<tr id="row_33_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00227.html" target="_self">Linux-specific helpers</a></td><td class="desc"></td></tr>
+<tr id="row_34_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00228.html" target="_self">Interoperability with Linux libnuma unsigned long masks</a></td><td class="desc"></td></tr>
+<tr id="row_35_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00229.html" target="_self">Interoperability with Linux libnuma bitmask</a></td><td class="desc"></td></tr>
+<tr id="row_36_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00230.html" target="_self">Windows-specific helpers</a></td><td class="desc"></td></tr>
+<tr id="row_37_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00231.html" target="_self">Interoperability with glibc sched affinity</a></td><td class="desc"></td></tr>
+<tr id="row_38_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00232.html" target="_self">Interoperability with OpenCL</a></td><td class="desc"></td></tr>
+<tr id="row_39_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00233.html" target="_self">Interoperability with the CUDA Driver API</a></td><td class="desc"></td></tr>
+<tr id="row_40_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00234.html" target="_self">Interoperability with the CUDA Runtime API</a></td><td class="desc"></td></tr>
+<tr id="row_41_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00235.html" target="_self">Interoperability with the NVIDIA Management Library</a></td><td class="desc"></td></tr>
+<tr id="row_42_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00236.html" target="_self">Interoperability with the ROCm SMI Management Library</a></td><td class="desc"></td></tr>
+<tr id="row_43_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00237.html" target="_self">Interoperability with the oneAPI Level Zero interface.</a></td><td class="desc"></td></tr>
+<tr id="row_44_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00238.html" target="_self">Interoperability with OpenGL displays</a></td><td class="desc"></td></tr>
+<tr id="row_45_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00239.html" target="_self">Interoperability with OpenFabrics</a></td><td class="desc"></td></tr>
+<tr id="row_46_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00240.html" target="_self">Topology differences</a></td><td class="desc"></td></tr>
+<tr id="row_47_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00241.html" target="_self">Sharing topologies between processes</a></td><td class="desc"></td></tr>
+<tr id="row_48_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00242.html" target="_self">Components and Plugins: Discovery components</a></td><td class="desc"></td></tr>
+<tr id="row_49_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00243.html" target="_self">Components and Plugins: Discovery backends</a></td><td class="desc"></td></tr>
+<tr id="row_50_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00244.html" target="_self">Components and Plugins: Generic components</a></td><td class="desc"></td></tr>
+<tr id="row_51_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00245.html" target="_self">Components and Plugins: Core functions to be used by components</a></td><td class="desc"></td></tr>
+<tr id="row_52_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00246.html" target="_self">Components and Plugins: Filtering objects</a></td><td class="desc"></td></tr>
+<tr id="row_53_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00247.html" target="_self">Components and Plugins: helpers for PCI discovery</a></td><td class="desc"></td></tr>
+<tr id="row_54_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00248.html" target="_self">Components and Plugins: finding PCI objects during other discoveries</a></td><td class="desc"></td></tr>
+<tr id="row_55_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00249.html" target="_self">Netloc API</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/nav_f.png b/doc/doxygen-doc/html/nav_f.png
new file mode 100644
index 00000000..72a58a52
Binary files /dev/null and b/doc/doxygen-doc/html/nav_f.png differ
diff --git a/doc/doxygen-doc/html/nav_g.png b/doc/doxygen-doc/html/nav_g.png
new file mode 100644
index 00000000..2093a237
Binary files /dev/null and b/doc/doxygen-doc/html/nav_g.png differ
diff --git a/doc/doxygen-doc/html/nav_h.png b/doc/doxygen-doc/html/nav_h.png
new file mode 100644
index 00000000..33389b10
Binary files /dev/null and b/doc/doxygen-doc/html/nav_h.png differ
diff --git a/doc/doxygen-doc/html/netloc_design.png b/doc/doxygen-doc/html/netloc_design.png
new file mode 100644
index 00000000..964d0c7e
Binary files /dev/null and b/doc/doxygen-doc/html/netloc_design.png differ
diff --git a/doc/doxygen-doc/html/netloc_draw.png b/doc/doxygen-doc/html/netloc_draw.png
new file mode 100644
index 00000000..7d1c9f76
Binary files /dev/null and b/doc/doxygen-doc/html/netloc_draw.png differ
diff --git a/doc/doxygen-doc/html/open.png b/doc/doxygen-doc/html/open.png
new file mode 100644
index 00000000..30f75c7e
Binary files /dev/null and b/doc/doxygen-doc/html/open.png differ
diff --git a/doc/doxygen-doc/html/pages.html b/doc/doxygen-doc/html/pages.html
new file mode 100644
index 00000000..fd7f61db
--- /dev/null
+++ b/doc/doxygen-doc/html/pages.html
@@ -0,0 +1,75 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.9.1"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Hardware Locality (hwloc): Related Pages</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Hardware Locality (hwloc)
+   &#160;<span id="projectnumber">2.9.1</span>
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.1 -->
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
+$(function() {
+  initMenu('',false,false,'search.php','Search');
+});
+/* @license-end */</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">Related Pages</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all related documentation pages:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00394.html" target="_self">Hardware Locality (hwloc) Introduction</a></td><td class="desc"></td></tr>
+<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00395.html" target="_self">Terms and Definitions</a></td><td class="desc"></td></tr>
+<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00396.html" target="_self">Command-Line Tools</a></td><td class="desc"></td></tr>
+<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00397.html" target="_self">Environment Variables</a></td><td class="desc"></td></tr>
+<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00398.html" target="_self">CPU and Memory Binding Overview</a></td><td class="desc"></td></tr>
+<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00399.html" target="_self">I/O Devices</a></td><td class="desc"></td></tr>
+<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00400.html" target="_self">Miscellaneous objects</a></td><td class="desc"></td></tr>
+<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00401.html" target="_self">Object attributes</a></td><td class="desc"></td></tr>
+<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00402.html" target="_self">Topology Attributes: Distances, Memory Attributes and CPU Kinds</a></td><td class="desc"></td></tr>
+<tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00403.html" target="_self">Importing and exporting topologies from/to XML files</a></td><td class="desc"></td></tr>
+<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00404.html" target="_self">Synthetic topologies</a></td><td class="desc"></td></tr>
+<tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00405.html" target="_self">Interoperability With Other Software</a></td><td class="desc"></td></tr>
+<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00406.html" target="_self">Thread Safety</a></td><td class="desc"></td></tr>
+<tr id="row_13_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00407.html" target="_self">Components and plugins</a></td><td class="desc"></td></tr>
+<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00408.html" target="_self">Embedding hwloc in Other Software</a></td><td class="desc"></td></tr>
+<tr id="row_15_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00409.html" target="_self">Frequently Asked Questions (FAQ)</a></td><td class="desc"></td></tr>
+<tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00410.html" target="_self">Upgrading to the hwloc 2.0 API</a></td><td class="desc"></td></tr>
+<tr id="row_17_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00411.html" target="_self">Network Locality (netloc)</a></td><td class="desc"></td></tr>
+<tr id="row_18_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00412.html" target="_self">Netloc with Scotch</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+</small></address>
+</body>
+</html>
diff --git a/doc/doxygen-doc/html/ppc64-full-with-smt.png b/doc/doxygen-doc/html/ppc64-full-with-smt.png
new file mode 100644
index 00000000..e609c1a7
Binary files /dev/null and b/doc/doxygen-doc/html/ppc64-full-with-smt.png differ
diff --git a/doc/doxygen-doc/html/ppc64-with-smt.png b/doc/doxygen-doc/html/ppc64-with-smt.png
new file mode 100644
index 00000000..30037ae4
Binary files /dev/null and b/doc/doxygen-doc/html/ppc64-with-smt.png differ
diff --git a/doc/doxygen-doc/html/ppc64-without-smt.png b/doc/doxygen-doc/html/ppc64-without-smt.png
new file mode 100644
index 00000000..62ef7435
Binary files /dev/null and b/doc/doxygen-doc/html/ppc64-without-smt.png differ
diff --git a/doc/doxygen-doc/html/splitbar.png b/doc/doxygen-doc/html/splitbar.png
new file mode 100644
index 00000000..fe895f2c
Binary files /dev/null and b/doc/doxygen-doc/html/splitbar.png differ
diff --git a/doc/doxygen-doc/html/sync_off.png b/doc/doxygen-doc/html/sync_off.png
new file mode 100644
index 00000000..3b443fc6
Binary files /dev/null and b/doc/doxygen-doc/html/sync_off.png differ
diff --git a/doc/doxygen-doc/html/sync_on.png b/doc/doxygen-doc/html/sync_on.png
new file mode 100644
index 00000000..e08320fb
Binary files /dev/null and b/doc/doxygen-doc/html/sync_on.png differ
diff --git a/doc/doxygen-doc/html/tab_a.png b/doc/doxygen-doc/html/tab_a.png
new file mode 100644
index 00000000..3b725c41
Binary files /dev/null and b/doc/doxygen-doc/html/tab_a.png differ
diff --git a/doc/doxygen-doc/html/tab_b.png b/doc/doxygen-doc/html/tab_b.png
new file mode 100644
index 00000000..e2b4a863
Binary files /dev/null and b/doc/doxygen-doc/html/tab_b.png differ
diff --git a/doc/doxygen-doc/html/tab_h.png b/doc/doxygen-doc/html/tab_h.png
new file mode 100644
index 00000000..fd5cb705
Binary files /dev/null and b/doc/doxygen-doc/html/tab_h.png differ
diff --git a/doc/doxygen-doc/html/tab_s.png b/doc/doxygen-doc/html/tab_s.png
new file mode 100644
index 00000000..ab478c95
Binary files /dev/null and b/doc/doxygen-doc/html/tab_s.png differ
diff --git a/doc/doxygen-doc/html/tabs.css b/doc/doxygen-doc/html/tabs.css
new file mode 100644
index 00000000..7d45d36c
--- /dev/null
+++ b/doc/doxygen-doc/html/tabs.css
@@ -0,0 +1 @@
+.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255,255,255,0.9);color:#283A5D;outline:none}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a.current{color:#D23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media (min-width: 768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a:hover span.sub-arrow{border-color:#fff transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;border-radius:5px !important;box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #fff}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #D23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#D23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}}
diff --git a/doc/doxygen-doc/hwloc-a4.pdf b/doc/doxygen-doc/hwloc-a4.pdf
new file mode 100644
index 00000000..99533fae
Binary files /dev/null and b/doc/doxygen-doc/hwloc-a4.pdf differ
diff --git a/doc/doxygen-doc/hwloc-letter.pdf b/doc/doxygen-doc/hwloc-letter.pdf
new file mode 100644
index 00000000..f3f0e44d
Binary files /dev/null and b/doc/doxygen-doc/hwloc-letter.pdf differ
diff --git a/doc/doxygen-doc/hwloc.tag b/doc/doxygen-doc/hwloc.tag
new file mode 100644
index 00000000..d9a5b544
--- /dev/null
+++ b/doc/doxygen-doc/hwloc.tag
@@ -0,0 +1,5206 @@
+<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
+<tagfile doxygen_version="1.9.1">
+  <compound kind="struct">
+    <name>hwloc_backend</name>
+    <filename>a00389.html</filename>
+    <member kind="variable">
+      <type>unsigned</type>
+      <name>phases</name>
+      <anchorfile>a00389.html</anchorfile>
+      <anchor>aeca769840a6ff03e96462a9533adbccd</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned long</type>
+      <name>flags</name>
+      <anchorfile>a00389.html</anchorfile>
+      <anchor>aaa8eafe495aadd81c2e3c4ec527c10ba</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>int</type>
+      <name>is_thissystem</name>
+      <anchorfile>a00389.html</anchorfile>
+      <anchor>ab8806f6db077f1bb2e9d63ec99223f7a</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>void *</type>
+      <name>private_data</name>
+      <anchorfile>a00389.html</anchorfile>
+      <anchor>a2ea5bd36b7f06efdb65b98b32af16c68</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>void(*</type>
+      <name>disable</name>
+      <anchorfile>a00389.html</anchorfile>
+      <anchor>a36c4fa86350525b46340c67b802c69c7</anchor>
+      <arglist>)(struct hwloc_backend *backend)</arglist>
+    </member>
+    <member kind="variable">
+      <type>int(*</type>
+      <name>discover</name>
+      <anchorfile>a00389.html</anchorfile>
+      <anchor>accff2cd8404be43c3b44cec05e6f609b</anchor>
+      <arglist>)(struct hwloc_backend *backend, struct hwloc_disc_status *status)</arglist>
+    </member>
+    <member kind="variable">
+      <type>int(*</type>
+      <name>get_pci_busid_cpuset</name>
+      <anchorfile>a00389.html</anchorfile>
+      <anchor>aaac253491264c20930f44817270bc502</anchor>
+      <arglist>)(struct hwloc_backend *backend, struct hwloc_pcidev_attr_s *busid, hwloc_bitmap_t cpuset)</arglist>
+    </member>
+  </compound>
+  <compound kind="struct">
+    <name>hwloc_obj_attr_u::hwloc_bridge_attr_s</name>
+    <filename>a00281.html</filename>
+    <member kind="variable">
+      <type>struct hwloc_pcidev_attr_s</type>
+      <name>pci</name>
+      <anchorfile>a00281.html</anchorfile>
+      <anchor>ab5c564e7c95b747dae9eb84ec0a2c31e</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>union hwloc_obj_attr_u::hwloc_bridge_attr_s::@0</type>
+      <name>upstream</name>
+      <anchorfile>a00281.html</anchorfile>
+      <anchor>ab62888c880f8bb730292722f5811958d</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>hwloc_obj_bridge_type_t</type>
+      <name>upstream_type</name>
+      <anchorfile>a00281.html</anchorfile>
+      <anchor>a265dd2164aa2df4972e25a029da72125</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned short</type>
+      <name>domain</name>
+      <anchorfile>a00281.html</anchorfile>
+      <anchor>a2c31e565a5f0d23d0a0a3dd3ec8f4b17</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>secondary_bus</name>
+      <anchorfile>a00281.html</anchorfile>
+      <anchor>ae2d9dd73ef1d32045c584a8e66d2f83f</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>subordinate_bus</name>
+      <anchorfile>a00281.html</anchorfile>
+      <anchor>af3f3f7d76bf03e8d2afa721c2b8d6771</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_obj_attr_u::hwloc_bridge_attr_s::@1::@2</type>
+      <name>pci</name>
+      <anchorfile>a00281.html</anchorfile>
+      <anchor>a2fdc40034b915d504724b35cc776a4ec</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>union hwloc_obj_attr_u::hwloc_bridge_attr_s::@1</type>
+      <name>downstream</name>
+      <anchorfile>a00281.html</anchorfile>
+      <anchor>a7d5db91d655ba23ffe9bda7a2cbcb9a8</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>hwloc_obj_bridge_type_t</type>
+      <name>downstream_type</name>
+      <anchorfile>a00281.html</anchorfile>
+      <anchor>ac6a169b672d0e9f75756fd5665828b93</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned</type>
+      <name>depth</name>
+      <anchorfile>a00281.html</anchorfile>
+      <anchor>a336c8b22893d5d734d8c9dfca4066b46</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="struct">
+    <name>hwloc_obj_attr_u::hwloc_cache_attr_s</name>
+    <filename>a00269.html</filename>
+    <member kind="variable">
+      <type>hwloc_uint64_t</type>
+      <name>size</name>
+      <anchorfile>a00269.html</anchorfile>
+      <anchor>abe5e788943ed04302976740c829674c0</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned</type>
+      <name>depth</name>
+      <anchorfile>a00269.html</anchorfile>
+      <anchor>a5c8f7f39193736c2187ed626940835d5</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned</type>
+      <name>linesize</name>
+      <anchorfile>a00269.html</anchorfile>
+      <anchor>a801e8a668e28caf06c8b88e9ae5c10db</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>int</type>
+      <name>associativity</name>
+      <anchorfile>a00269.html</anchorfile>
+      <anchor>ad06525e474d1e2d1423ed71bb998592d</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>hwloc_obj_cache_type_t</type>
+      <name>type</name>
+      <anchorfile>a00269.html</anchorfile>
+      <anchor>ad8edc8ded2b7a70d6abbc874801930f4</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="union">
+    <name>hwloc_cl_device_topology_amd</name>
+    <filename>a00337.html</filename>
+    <member kind="variable">
+      <type>cl_uint</type>
+      <name>type</name>
+      <anchorfile>a00337.html</anchorfile>
+      <anchor>a8ec4ea89b862bb271845b48063f332b4</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>cl_uint</type>
+      <name>data</name>
+      <anchorfile>a00337.html</anchorfile>
+      <anchor>afbd6b814607b06fc5b2f36ad14420398</anchor>
+      <arglist>[5]</arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_cl_device_topology_amd::@3</type>
+      <name>raw</name>
+      <anchorfile>a00337.html</anchorfile>
+      <anchor>a7bba6ab297b6f44e43c5937b80b4cfb6</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>cl_char</type>
+      <name>unused</name>
+      <anchorfile>a00337.html</anchorfile>
+      <anchor>ac8650d7eea96eef290481fee980d1d47</anchor>
+      <arglist>[17]</arglist>
+    </member>
+    <member kind="variable">
+      <type>cl_char</type>
+      <name>bus</name>
+      <anchorfile>a00337.html</anchorfile>
+      <anchor>a4a23e3cc034b7ab105cab0e863dcab69</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>cl_char</type>
+      <name>device</name>
+      <anchorfile>a00337.html</anchorfile>
+      <anchor>a017033a953d71455b067007cabb92e9c</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>cl_char</type>
+      <name>function</name>
+      <anchorfile>a00337.html</anchorfile>
+      <anchor>a77a67ac73cff98d330ef7258b240bac3</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_cl_device_topology_amd::@4</type>
+      <name>pcie</name>
+      <anchorfile>a00337.html</anchorfile>
+      <anchor>a05e9a845012cd9d1f13a39cc35ab40a1</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="struct">
+    <name>hwloc_component</name>
+    <filename>a00393.html</filename>
+    <member kind="variable">
+      <type>unsigned</type>
+      <name>abi</name>
+      <anchorfile>a00393.html</anchorfile>
+      <anchor>a3250bd6fc9713946991d805e48091b2e</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>int(*</type>
+      <name>init</name>
+      <anchorfile>a00393.html</anchorfile>
+      <anchor>aea613546886d9b8221cadba920fe3ebc</anchor>
+      <arglist>)(unsigned long flags)</arglist>
+    </member>
+    <member kind="variable">
+      <type>void(*</type>
+      <name>finalize</name>
+      <anchorfile>a00393.html</anchorfile>
+      <anchor>a4612015451a1c706e8ba19114cb8baae</anchor>
+      <arglist>)(unsigned long flags)</arglist>
+    </member>
+    <member kind="variable">
+      <type>hwloc_component_type_t</type>
+      <name>type</name>
+      <anchorfile>a00393.html</anchorfile>
+      <anchor>a789208ada7e17492cfd3a5a88a6bb0ee</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned long</type>
+      <name>flags</name>
+      <anchorfile>a00393.html</anchorfile>
+      <anchor>ab8043c5b4cc0e81aabba586ccb194335</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>void *</type>
+      <name>data</name>
+      <anchorfile>a00393.html</anchorfile>
+      <anchor>a4b8cffd1d943c29fdc102b841b8598d4</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="struct">
+    <name>hwloc_disc_component</name>
+    <filename>a00381.html</filename>
+    <member kind="variable">
+      <type>const char *</type>
+      <name>name</name>
+      <anchorfile>a00381.html</anchorfile>
+      <anchor>a4064c3b5d9213027e87caebef380a840</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned</type>
+      <name>phases</name>
+      <anchorfile>a00381.html</anchorfile>
+      <anchor>a61ad3151efa02e3dbad5d919758f9c90</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned</type>
+      <name>excluded_phases</name>
+      <anchorfile>a00381.html</anchorfile>
+      <anchor>acbb9957914dbf7b8f504215aa0c8d3fe</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_backend *(*</type>
+      <name>instantiate</name>
+      <anchorfile>a00381.html</anchorfile>
+      <anchor>ab133956219739a1032a17131757d1961</anchor>
+      <arglist>)(struct hwloc_topology *topology, struct hwloc_disc_component *component, unsigned excluded_phases, const void *data1, const void *data2, const void *data3)</arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned</type>
+      <name>priority</name>
+      <anchorfile>a00381.html</anchorfile>
+      <anchor>ae86d283c272c5ae24073a235efbf6b59</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned</type>
+      <name>enabled_by_default</name>
+      <anchorfile>a00381.html</anchorfile>
+      <anchor>ace80cafe2b1732b047b3fc3da47e6517</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="struct">
+    <name>hwloc_disc_status</name>
+    <filename>a00385.html</filename>
+    <member kind="variable">
+      <type>hwloc_disc_phase_t</type>
+      <name>phase</name>
+      <anchorfile>a00385.html</anchorfile>
+      <anchor>abaf7c8c082d43e133171f0723dbf824b</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned</type>
+      <name>excluded_phases</name>
+      <anchorfile>a00385.html</anchorfile>
+      <anchor>a0f95fa42d46a6e7cf8dee8af12afee3a</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned long</type>
+      <name>flags</name>
+      <anchorfile>a00385.html</anchorfile>
+      <anchor>ad8b123cecb945a9182eb824ccf8ef9d7</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="struct">
+    <name>hwloc_distances_s</name>
+    <filename>a00325.html</filename>
+    <member kind="variable">
+      <type>unsigned</type>
+      <name>nbobjs</name>
+      <anchorfile>a00325.html</anchorfile>
+      <anchor>a4ca2af858cebbce7324ec49903d09474</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>hwloc_obj_t *</type>
+      <name>objs</name>
+      <anchorfile>a00325.html</anchorfile>
+      <anchor>af1e78b2d628d191fa6cae3fbfe891078</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned long</type>
+      <name>kind</name>
+      <anchorfile>a00325.html</anchorfile>
+      <anchor>aef9c83cf467da1b1fa4c36493febb3b5</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>hwloc_uint64_t *</type>
+      <name>values</name>
+      <anchorfile>a00325.html</anchorfile>
+      <anchor>ae43e19b2c743de05c93d71a30beaca75</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="struct">
+    <name>hwloc_obj_attr_u::hwloc_group_attr_s</name>
+    <filename>a00273.html</filename>
+    <member kind="variable">
+      <type>unsigned</type>
+      <name>depth</name>
+      <anchorfile>a00273.html</anchorfile>
+      <anchor>ad914eac61c77481e1b7037877bcc5579</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned</type>
+      <name>kind</name>
+      <anchorfile>a00273.html</anchorfile>
+      <anchor>a3229f269c4cc7e63492c168535e4f0c1</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned</type>
+      <name>subkind</name>
+      <anchorfile>a00273.html</anchorfile>
+      <anchor>ad514d943960a4036ed5e44dc187c74ed</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>dont_merge</name>
+      <anchorfile>a00273.html</anchorfile>
+      <anchor>afa253d4b70f92e940c226d61f192054f</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="struct">
+    <name>hwloc_info_s</name>
+    <filename>a00301.html</filename>
+    <member kind="variable">
+      <type>char *</type>
+      <name>name</name>
+      <anchorfile>a00301.html</anchorfile>
+      <anchor>a12ce1309e4381ae38b5c15d242a47124</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>char *</type>
+      <name>value</name>
+      <anchorfile>a00301.html</anchorfile>
+      <anchor>a788a0073bafe660645e7b69f31a43bbb</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="struct">
+    <name>hwloc_location</name>
+    <filename>a00329.html</filename>
+    <class kind="union">hwloc_location::hwloc_location_u</class>
+    <member kind="variable">
+      <type>enum hwloc_location_type_e</type>
+      <name>type</name>
+      <anchorfile>a00329.html</anchorfile>
+      <anchor>aeb9c0ab74a7d3506a76d0b82600a28a7</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>union hwloc_location::hwloc_location_u</type>
+      <name>location</name>
+      <anchorfile>a00329.html</anchorfile>
+      <anchor>a707a25a5b65177e4d081be49aa0777a2</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="union">
+    <name>hwloc_location::hwloc_location_u</name>
+    <filename>a00333.html</filename>
+    <member kind="variable">
+      <type>hwloc_cpuset_t</type>
+      <name>cpuset</name>
+      <anchorfile>a00333.html</anchorfile>
+      <anchor>a033bad8f6b891992f0c18b85a88c5561</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>hwloc_obj_t</type>
+      <name>object</name>
+      <anchorfile>a00333.html</anchorfile>
+      <anchor>acf2ebf75869f0a53a884ac2ab3374122</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="struct">
+    <name>hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s</name>
+    <filename>a00265.html</filename>
+    <member kind="variable">
+      <type>hwloc_uint64_t</type>
+      <name>size</name>
+      <anchorfile>a00265.html</anchorfile>
+      <anchor>a8ea7ebe9d91c7378bba03da57efc25cb</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>hwloc_uint64_t</type>
+      <name>count</name>
+      <anchorfile>a00265.html</anchorfile>
+      <anchor>a98514e37d57a325b78e21ffd8d7419e0</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="struct">
+    <name>hwloc_obj_attr_u::hwloc_numanode_attr_s</name>
+    <filename>a00261.html</filename>
+    <class kind="struct">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s</class>
+    <member kind="variable">
+      <type>hwloc_uint64_t</type>
+      <name>local_memory</name>
+      <anchorfile>a00261.html</anchorfile>
+      <anchor>a6703cbf2afbf63c9d60c5ff4dc0c73aa</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned</type>
+      <name>page_types_len</name>
+      <anchorfile>a00261.html</anchorfile>
+      <anchor>a513078122d403904e16723d30f583cb2</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s *</type>
+      <name>page_types</name>
+      <anchorfile>a00261.html</anchorfile>
+      <anchor>a7e53c5024da2d7741a5cc1e7016bb8d2</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="struct">
+    <name>hwloc_obj</name>
+    <filename>a00253.html</filename>
+    <member kind="variable">
+      <type>hwloc_obj_type_t</type>
+      <name>type</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>acc4f0803f244867e68fe0036800be5de</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>char *</type>
+      <name>subtype</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>a5d4f97e76723a9ec8d38046f19e00d33</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned</type>
+      <name>os_index</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>a61a7a80a68eaccbaaa28269e678c81a9</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>char *</type>
+      <name>name</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>abb709ec38f2970677e4e57d1d30be96d</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>hwloc_uint64_t</type>
+      <name>total_memory</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>a75603fc36c9284ba48ce814b772a58b6</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>union hwloc_obj_attr_u *</type>
+      <name>attr</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>accd40e29f71f19e88db62ea3df02adc8</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>int</type>
+      <name>depth</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>a4876fd165b4fff35521f07ebd85355ed</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned</type>
+      <name>logical_index</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>a0d07fb7b8935e137c94d75a3eb492ae9</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_obj *</type>
+      <name>next_cousin</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>a85a788017457129589318b6c39451acf</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_obj *</type>
+      <name>prev_cousin</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>ac715989f55ff5a0eb6be2969ee477ec0</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_obj *</type>
+      <name>parent</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>adc494f6aed939992be1c55cca5822900</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned</type>
+      <name>sibling_rank</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>aaa6043eee6f55869933c1d974efd9acd</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_obj *</type>
+      <name>next_sibling</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>a7f2343ed476fe4942e6fffd4cade1b40</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_obj *</type>
+      <name>prev_sibling</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>a7b89e8c189876c0158a9282aaaf17f50</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>int</type>
+      <name>symmetric_subtree</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>a0f41a1d67dc6b661906f2217563637f3</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>hwloc_cpuset_t</type>
+      <name>cpuset</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>a67925e0f2c47f50408fbdb9bddd0790f</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>hwloc_cpuset_t</type>
+      <name>complete_cpuset</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>a91788a9da687beb7224cc1fd7b75208c</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>hwloc_nodeset_t</type>
+      <name>nodeset</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>a08f0d0e16c619a6e653526cbee4ffea3</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>hwloc_nodeset_t</type>
+      <name>complete_nodeset</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>ac38c4012127525ef74c5615c526f4c2e</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_info_s *</type>
+      <name>infos</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>a8604654c38b7a720efae5025d3a96ee6</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned</type>
+      <name>infos_count</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>a9843acc28cfbba903b63ea14b137ff70</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>void *</type>
+      <name>userdata</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>a76fd3ac94401cf32dfccc3a3a8de68a5</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>hwloc_uint64_t</type>
+      <name>gp_index</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>a957984a355fa61c85f46605c336e7551</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned</type>
+      <name>arity</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>aac3f6da35c9b57599909a44ce2b716c1</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_obj **</type>
+      <name>children</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>a04d05403da37bfe17cd63b7c7dd07b1f</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_obj *</type>
+      <name>first_child</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>af51d08a0a79dba517c06c5afedc8d2dc</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_obj *</type>
+      <name>last_child</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>a84bd65634dbc55f4158b74443a9bd04f</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned</type>
+      <name>memory_arity</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>a6f834ea4dd26553cdea601d2fae6d3b7</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_obj *</type>
+      <name>memory_first_child</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>ac0e8200dba25b90d5954bd4ec61f97d3</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned</type>
+      <name>io_arity</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>a7b3b29f0be377c7d2d52262019fc7d11</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_obj *</type>
+      <name>io_first_child</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>a8d14c88e1ebc4ae67cc69f9e928558b3</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned</type>
+      <name>misc_arity</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>a2bb7862ce722d7ceda23cfa153da165a</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_obj *</type>
+      <name>misc_first_child</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>a57812a313fe9b1a9500489f47c3011cc</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned</type>
+      <name>arity</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>aac3f6da35c9b57599909a44ce2b716c1</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_obj **</type>
+      <name>children</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>a04d05403da37bfe17cd63b7c7dd07b1f</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_obj *</type>
+      <name>first_child</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>af51d08a0a79dba517c06c5afedc8d2dc</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_obj *</type>
+      <name>last_child</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>a84bd65634dbc55f4158b74443a9bd04f</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned</type>
+      <name>memory_arity</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>a6f834ea4dd26553cdea601d2fae6d3b7</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_obj *</type>
+      <name>memory_first_child</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>ac0e8200dba25b90d5954bd4ec61f97d3</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned</type>
+      <name>io_arity</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>a7b3b29f0be377c7d2d52262019fc7d11</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_obj *</type>
+      <name>io_first_child</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>a8d14c88e1ebc4ae67cc69f9e928558b3</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned</type>
+      <name>misc_arity</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>a2bb7862ce722d7ceda23cfa153da165a</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_obj *</type>
+      <name>misc_first_child</name>
+      <anchorfile>a00253.html</anchorfile>
+      <anchor>a57812a313fe9b1a9500489f47c3011cc</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="union">
+    <name>hwloc_obj_attr_u</name>
+    <filename>a00257.html</filename>
+    <class kind="struct">hwloc_obj_attr_u::hwloc_bridge_attr_s</class>
+    <class kind="struct">hwloc_obj_attr_u::hwloc_cache_attr_s</class>
+    <class kind="struct">hwloc_obj_attr_u::hwloc_group_attr_s</class>
+    <class kind="struct">hwloc_obj_attr_u::hwloc_numanode_attr_s</class>
+    <class kind="struct">hwloc_obj_attr_u::hwloc_osdev_attr_s</class>
+    <class kind="struct">hwloc_obj_attr_u::hwloc_pcidev_attr_s</class>
+    <member kind="variable">
+      <type>struct hwloc_obj_attr_u::hwloc_numanode_attr_s</type>
+      <name>numanode</name>
+      <anchorfile>a00257.html</anchorfile>
+      <anchor>ad066b9612802ffa01e132dc3a8e6cc86</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_obj_attr_u::hwloc_cache_attr_s</type>
+      <name>cache</name>
+      <anchorfile>a00257.html</anchorfile>
+      <anchor>a23f553f3252c9d13f2338231cd354ea9</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_obj_attr_u::hwloc_group_attr_s</type>
+      <name>group</name>
+      <anchorfile>a00257.html</anchorfile>
+      <anchor>a9eddbd69e34cd2ef6af6d2ac31b6eff3</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_obj_attr_u::hwloc_pcidev_attr_s</type>
+      <name>pcidev</name>
+      <anchorfile>a00257.html</anchorfile>
+      <anchor>a0b66da7ab072f7c016f8ed86701f5a7c</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_obj_attr_u::hwloc_bridge_attr_s</type>
+      <name>bridge</name>
+      <anchorfile>a00257.html</anchorfile>
+      <anchor>a207e6359497b7116d6f4baa9e8bbeb43</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_obj_attr_u::hwloc_osdev_attr_s</type>
+      <name>osdev</name>
+      <anchorfile>a00257.html</anchorfile>
+      <anchor>aaf7a5c38b5185703ff18c46ad2761dcf</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="struct">
+    <name>hwloc_obj_attr_u::hwloc_osdev_attr_s</name>
+    <filename>a00297.html</filename>
+    <member kind="variable">
+      <type>hwloc_obj_osdev_type_t</type>
+      <name>type</name>
+      <anchorfile>a00297.html</anchorfile>
+      <anchor>a31e019e27e54ac6138d04be639bb96f9</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="struct">
+    <name>hwloc_obj_attr_u::hwloc_pcidev_attr_s</name>
+    <filename>a00277.html</filename>
+    <member kind="variable">
+      <type>unsigned short</type>
+      <name>domain</name>
+      <anchorfile>a00277.html</anchorfile>
+      <anchor>a8fba44988deb98613c1505a4019a34dc</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>bus</name>
+      <anchorfile>a00277.html</anchorfile>
+      <anchor>aae99e035e8d1387d7b8768aaa8eceb0a</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>dev</name>
+      <anchorfile>a00277.html</anchorfile>
+      <anchor>a3d70c84a12f7e93d14c8d47bf4fd9dc5</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>func</name>
+      <anchorfile>a00277.html</anchorfile>
+      <anchor>a695f32df53f4ef728670bfcf31b74e0f</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned short</type>
+      <name>class_id</name>
+      <anchorfile>a00277.html</anchorfile>
+      <anchor>aee735352d9f1686fd290fc6d6397c334</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned short</type>
+      <name>vendor_id</name>
+      <anchorfile>a00277.html</anchorfile>
+      <anchor>aad970ad19b62eb2d5df30e4802da4f4c</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned short</type>
+      <name>device_id</name>
+      <anchorfile>a00277.html</anchorfile>
+      <anchor>a35b66064ab7d768caf7154e410caf0fa</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned short</type>
+      <name>subvendor_id</name>
+      <anchorfile>a00277.html</anchorfile>
+      <anchor>a499db3d8cc89eaba04fcaef3df1cba97</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned short</type>
+      <name>subdevice_id</name>
+      <anchorfile>a00277.html</anchorfile>
+      <anchor>acac741aecd7a6db64f33409427e3971f</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>revision</name>
+      <anchorfile>a00277.html</anchorfile>
+      <anchor>a13ad54c93d08d8ac808e4de9674c5ee7</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>float</type>
+      <name>linkspeed</name>
+      <anchorfile>a00277.html</anchorfile>
+      <anchor>a59b2fce35f7cbde86c4fd305d0ccda5f</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="struct">
+    <name>hwloc_topology_cpubind_support</name>
+    <filename>a00309.html</filename>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>set_thisproc_cpubind</name>
+      <anchorfile>a00309.html</anchorfile>
+      <anchor>a9403d51657a4d546b3ea9553a2973a27</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>get_thisproc_cpubind</name>
+      <anchorfile>a00309.html</anchorfile>
+      <anchor>a77a09ddd78ee3e9ff5f532a6ac74f7eb</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>set_proc_cpubind</name>
+      <anchorfile>a00309.html</anchorfile>
+      <anchor>aa166223d1c2a6de7256ab2d8b675a87e</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>get_proc_cpubind</name>
+      <anchorfile>a00309.html</anchorfile>
+      <anchor>aae705bc447adc163ead377362c4dfe9f</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>set_thisthread_cpubind</name>
+      <anchorfile>a00309.html</anchorfile>
+      <anchor>a57a89a4b5f1f74fa6cfe176f1e8b0798</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>get_thisthread_cpubind</name>
+      <anchorfile>a00309.html</anchorfile>
+      <anchor>a80d762e532d677dff262d83cc7bb1c60</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>set_thread_cpubind</name>
+      <anchorfile>a00309.html</anchorfile>
+      <anchor>a46fba33e307909ce256624687799dd6d</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>get_thread_cpubind</name>
+      <anchorfile>a00309.html</anchorfile>
+      <anchor>a8dd4d8531ed2eebdce1507e7d104154e</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>get_thisproc_last_cpu_location</name>
+      <anchorfile>a00309.html</anchorfile>
+      <anchor>ad2d5c94b738d92b7d2ede87e4e96321d</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>get_proc_last_cpu_location</name>
+      <anchorfile>a00309.html</anchorfile>
+      <anchor>a2554620148b7992a5093f338f5ae254f</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>get_thisthread_last_cpu_location</name>
+      <anchorfile>a00309.html</anchorfile>
+      <anchor>a6be1f042fdce6bf41b4ea39f6f193808</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="struct">
+    <name>hwloc_topology_diff_u::hwloc_topology_diff_generic_s</name>
+    <filename>a00369.html</filename>
+    <member kind="variable">
+      <type>hwloc_topology_diff_type_t</type>
+      <name>type</name>
+      <anchorfile>a00369.html</anchorfile>
+      <anchor>a373005489fcddeba6319163e60263ae8</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>union hwloc_topology_diff_u *</type>
+      <name>next</name>
+      <anchorfile>a00369.html</anchorfile>
+      <anchor>a720aa94eb73cddfd8d6bf9fcbbfc035e</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="struct">
+    <name>hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s</name>
+    <filename>a00353.html</filename>
+    <member kind="variable">
+      <type>hwloc_topology_diff_obj_attr_type_t</type>
+      <name>type</name>
+      <anchorfile>a00353.html</anchorfile>
+      <anchor>a43f8133b7c30129b002c2d295e6580fc</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="struct">
+    <name>hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</name>
+    <filename>a00373.html</filename>
+    <member kind="variable">
+      <type>hwloc_topology_diff_type_t</type>
+      <name>type</name>
+      <anchorfile>a00373.html</anchorfile>
+      <anchor>a70a118ad288bd98f18c8ce6dc52e2d10</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>union hwloc_topology_diff_u *</type>
+      <name>next</name>
+      <anchorfile>a00373.html</anchorfile>
+      <anchor>acb9170a8eb3392656d70f7f3ef3e3eed</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>int</type>
+      <name>obj_depth</name>
+      <anchorfile>a00373.html</anchorfile>
+      <anchor>a82c1d4bab80b9e0bf301a9d8291893e0</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned</type>
+      <name>obj_index</name>
+      <anchorfile>a00373.html</anchorfile>
+      <anchor>adb9f4d414470b6670cde8d90759a6c1c</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>union hwloc_topology_diff_obj_attr_u</type>
+      <name>diff</name>
+      <anchorfile>a00373.html</anchorfile>
+      <anchor>a91f0645f9062e892652357cd141c8ebb</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="struct">
+    <name>hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</name>
+    <filename>a00361.html</filename>
+    <member kind="variable">
+      <type>hwloc_topology_diff_obj_attr_type_t</type>
+      <name>type</name>
+      <anchorfile>a00361.html</anchorfile>
+      <anchor>a784ab5827c1bf531b86d1f02f199d04d</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>char *</type>
+      <name>name</name>
+      <anchorfile>a00361.html</anchorfile>
+      <anchor>a7ef48c66ccddf34d90edb4e4314b41c6</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>char *</type>
+      <name>oldvalue</name>
+      <anchorfile>a00361.html</anchorfile>
+      <anchor>a33cc281d4417129064295a6ae7b79818</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>char *</type>
+      <name>newvalue</name>
+      <anchorfile>a00361.html</anchorfile>
+      <anchor>a75f37f4add21cece50fee2701c3b77db</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="union">
+    <name>hwloc_topology_diff_obj_attr_u</name>
+    <filename>a00349.html</filename>
+    <class kind="struct">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s</class>
+    <class kind="struct">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</class>
+    <class kind="struct">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</class>
+    <member kind="variable">
+      <type>struct hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s</type>
+      <name>generic</name>
+      <anchorfile>a00349.html</anchorfile>
+      <anchor>aeb449c0e04b14ebf8c3126756b6364f9</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</type>
+      <name>uint64</name>
+      <anchorfile>a00349.html</anchorfile>
+      <anchor>a4608ade88460f5f208887775e5a69a0a</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</type>
+      <name>string</name>
+      <anchorfile>a00349.html</anchorfile>
+      <anchor>a42fa15c37f1f59ef638066c4c62c3154</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="struct">
+    <name>hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</name>
+    <filename>a00357.html</filename>
+    <member kind="variable">
+      <type>hwloc_topology_diff_obj_attr_type_t</type>
+      <name>type</name>
+      <anchorfile>a00357.html</anchorfile>
+      <anchor>afe262b9aa558fe7bfecbd37a7a129197</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>hwloc_uint64_t</type>
+      <name>index</name>
+      <anchorfile>a00357.html</anchorfile>
+      <anchor>adb772c3f1761ecadf496c80ae14afce3</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>hwloc_uint64_t</type>
+      <name>oldvalue</name>
+      <anchorfile>a00357.html</anchorfile>
+      <anchor>a44c0894dce563335d347fde6595c49c9</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>hwloc_uint64_t</type>
+      <name>newvalue</name>
+      <anchorfile>a00357.html</anchorfile>
+      <anchor>ae63aa59ad65aa783b730a4f213304eb4</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="struct">
+    <name>hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</name>
+    <filename>a00377.html</filename>
+    <member kind="variable">
+      <type>hwloc_topology_diff_type_t</type>
+      <name>type</name>
+      <anchorfile>a00377.html</anchorfile>
+      <anchor>a92084295a4d6faf17a95a7eea526ddbd</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>union hwloc_topology_diff_u *</type>
+      <name>next</name>
+      <anchorfile>a00377.html</anchorfile>
+      <anchor>a375afbaa043b109be689a7d9a3c7d153</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>int</type>
+      <name>obj_depth</name>
+      <anchorfile>a00377.html</anchorfile>
+      <anchor>a94c6498caeaafbb79927395d918d6cb3</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned</type>
+      <name>obj_index</name>
+      <anchorfile>a00377.html</anchorfile>
+      <anchor>a6dc6b3c4adb10db74d993e37afaa0580</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="union">
+    <name>hwloc_topology_diff_u</name>
+    <filename>a00365.html</filename>
+    <class kind="struct">hwloc_topology_diff_u::hwloc_topology_diff_generic_s</class>
+    <class kind="struct">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</class>
+    <class kind="struct">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</class>
+    <member kind="variable">
+      <type>struct hwloc_topology_diff_u::hwloc_topology_diff_generic_s</type>
+      <name>generic</name>
+      <anchorfile>a00365.html</anchorfile>
+      <anchor>a0dd2cbfba0eca2fc7a2645668bcae0f8</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</type>
+      <name>obj_attr</name>
+      <anchorfile>a00365.html</anchorfile>
+      <anchor>a01dca644feea48448b36baa60cf4c07f</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</type>
+      <name>too_complex</name>
+      <anchorfile>a00365.html</anchorfile>
+      <anchor>af7dc1148eb656c56e9678218cafd027b</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="struct">
+    <name>hwloc_topology_discovery_support</name>
+    <filename>a00305.html</filename>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>pu</name>
+      <anchorfile>a00305.html</anchorfile>
+      <anchor>ad7bb4ecf7a82f5a04fc632e9592ad3ab</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>numa</name>
+      <anchorfile>a00305.html</anchorfile>
+      <anchor>a955f96066cb9e4cd34e2a3710ad43e80</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>numa_memory</name>
+      <anchorfile>a00305.html</anchorfile>
+      <anchor>af193eb858e40e12ef4923f5ed0e1f11a</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>disallowed_pu</name>
+      <anchorfile>a00305.html</anchorfile>
+      <anchor>af3c97b28781a2972cf8eaaf94a6617da</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>disallowed_numa</name>
+      <anchorfile>a00305.html</anchorfile>
+      <anchor>a970e65235873bcdb9669a9805161ce03</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>cpukind_efficiency</name>
+      <anchorfile>a00305.html</anchorfile>
+      <anchor>aba80d6f9c15e2395f9ed61db9ff3b75d</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="struct">
+    <name>hwloc_topology_membind_support</name>
+    <filename>a00313.html</filename>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>set_thisproc_membind</name>
+      <anchorfile>a00313.html</anchorfile>
+      <anchor>a36b3e388df9c6a249427cab7e3724749</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>get_thisproc_membind</name>
+      <anchorfile>a00313.html</anchorfile>
+      <anchor>a3fd51e6fa5f0dd800322301b46b08559</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>set_proc_membind</name>
+      <anchorfile>a00313.html</anchorfile>
+      <anchor>a756f44912894b176bf979a1b65f12aac</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>get_proc_membind</name>
+      <anchorfile>a00313.html</anchorfile>
+      <anchor>a9880cd2d605e316fc020167c49ca69ad</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>set_thisthread_membind</name>
+      <anchorfile>a00313.html</anchorfile>
+      <anchor>a0697af2e41f2e82b8ce71e3cc13f7eac</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>get_thisthread_membind</name>
+      <anchorfile>a00313.html</anchorfile>
+      <anchor>a63b0b2e26157b472f5717ee93cc7c535</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>set_area_membind</name>
+      <anchorfile>a00313.html</anchorfile>
+      <anchor>a476c06f96b65c08b287cf2369966123b</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>get_area_membind</name>
+      <anchorfile>a00313.html</anchorfile>
+      <anchor>a0a84e24a06f2fa487fe8c9605c6f68b3</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>alloc_membind</name>
+      <anchorfile>a00313.html</anchorfile>
+      <anchor>ae551abb27d2aa9ce008583488b845b98</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>firsttouch_membind</name>
+      <anchorfile>a00313.html</anchorfile>
+      <anchor>a221098c339dbfab27bd2c9f5d32f123b</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>bind_membind</name>
+      <anchorfile>a00313.html</anchorfile>
+      <anchor>ae7cdb1f1b5f0242a69f85b5a5538c764</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>interleave_membind</name>
+      <anchorfile>a00313.html</anchorfile>
+      <anchor>a3c44c6012860bbeba8a0f4c19710858d</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>nexttouch_membind</name>
+      <anchorfile>a00313.html</anchorfile>
+      <anchor>ab0921af6e0cd6975812a80b8e5c7435c</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>migrate_membind</name>
+      <anchorfile>a00313.html</anchorfile>
+      <anchor>aafa7683871a6a760246f9b35209caec5</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>get_area_memlocation</name>
+      <anchorfile>a00313.html</anchorfile>
+      <anchor>a30173553a68e0a4dd1672d26f8e892b1</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="struct">
+    <name>hwloc_topology_misc_support</name>
+    <filename>a00317.html</filename>
+    <member kind="variable">
+      <type>unsigned char</type>
+      <name>imported_support</name>
+      <anchorfile>a00317.html</anchorfile>
+      <anchor>adf54a6dbe8e9dd5033dfe9c93df726c4</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="struct">
+    <name>hwloc_topology_support</name>
+    <filename>a00321.html</filename>
+    <member kind="variable">
+      <type>struct hwloc_topology_discovery_support *</type>
+      <name>discovery</name>
+      <anchorfile>a00321.html</anchorfile>
+      <anchor>aea3fbd7653d987d81f848636c420504d</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_topology_cpubind_support *</type>
+      <name>cpubind</name>
+      <anchorfile>a00321.html</anchorfile>
+      <anchor>adef2bb91f74c3e70a2a071393caf5f56</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_topology_membind_support *</type>
+      <name>membind</name>
+      <anchorfile>a00321.html</anchorfile>
+      <anchor>ac6eb62ae8bc0a68dce679a7107a36194</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="variable">
+      <type>struct hwloc_topology_misc_support *</type>
+      <name>misc</name>
+      <anchorfile>a00321.html</anchorfile>
+      <anchor>ab9d08df4b0b03994f21b893ece826e78</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_api_version</name>
+    <title>API version</title>
+    <filename>a00194.html</filename>
+    <member kind="define">
+      <type>#define</type>
+      <name>HWLOC_API_VERSION</name>
+      <anchorfile>a00194.html</anchorfile>
+      <anchor>ga8f4dfb8eef138af55dd1a0fa802e5476</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="define">
+      <type>#define</type>
+      <name>HWLOC_COMPONENT_ABI</name>
+      <anchorfile>a00194.html</anchorfile>
+      <anchor>gaac5bc1f46f55e10ef0141a68ce70e21f</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="function">
+      <type>unsigned</type>
+      <name>hwloc_get_api_version</name>
+      <anchorfile>a00194.html</anchorfile>
+      <anchor>ga9c0b50c98add1adf57ed1ce85bb5190d</anchor>
+      <arglist>(void)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_object_sets</name>
+    <title>Object Sets (hwloc_cpuset_t and hwloc_nodeset_t)</title>
+    <filename>a00195.html</filename>
+    <member kind="typedef">
+      <type>hwloc_bitmap_t</type>
+      <name>hwloc_cpuset_t</name>
+      <anchorfile>a00195.html</anchorfile>
+      <anchor>ga4bbf39b68b6f568fb92739e7c0ea7801</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="typedef">
+      <type>hwloc_const_bitmap_t</type>
+      <name>hwloc_const_cpuset_t</name>
+      <anchorfile>a00195.html</anchorfile>
+      <anchor>ga1f784433e9b606261f62d1134f6a3b25</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="typedef">
+      <type>hwloc_bitmap_t</type>
+      <name>hwloc_nodeset_t</name>
+      <anchorfile>a00195.html</anchorfile>
+      <anchor>ga37e35730fa7e775b5bb0afe893d6d508</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="typedef">
+      <type>hwloc_const_bitmap_t</type>
+      <name>hwloc_const_nodeset_t</name>
+      <anchorfile>a00195.html</anchorfile>
+      <anchor>ga2f5276235841ad66a79bedad16a5a10c</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_object_types</name>
+    <title>Object Types</title>
+    <filename>a00196.html</filename>
+    <member kind="define">
+      <type>#define</type>
+      <name>HWLOC_TYPE_UNORDERED</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>ga3b6e4128e9fe773863b123fa6e4a080b</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="typedef">
+      <type>enum hwloc_obj_cache_type_e</type>
+      <name>hwloc_obj_cache_type_t</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>ga552ec74296a024237f474acec98694c0</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="typedef">
+      <type>enum hwloc_obj_bridge_type_e</type>
+      <name>hwloc_obj_bridge_type_t</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>gab34362c7a23296c3f12c5756747abda3</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="typedef">
+      <type>enum hwloc_obj_osdev_type_e</type>
+      <name>hwloc_obj_osdev_type_t</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>gaa9a6941ef7b1c169412518d7ef71b3d2</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumeration">
+      <type></type>
+      <name>hwloc_obj_type_t</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>gacd37bb612667dc437d66bfb175a8dc55</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_OBJ_MACHINE</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>ggacd37bb612667dc437d66bfb175a8dc55a3f4e83ffc4a259354959ae8a9eaa2a80</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_OBJ_PACKAGE</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>ggacd37bb612667dc437d66bfb175a8dc55ab16ab8c0dbffc234921d86f3dfb63129</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_OBJ_CORE</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>ggacd37bb612667dc437d66bfb175a8dc55ac793958f330bca371aa1535de8aff45f</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_OBJ_PU</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_OBJ_L1CACHE</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>ggacd37bb612667dc437d66bfb175a8dc55a56389b8eb2e2f74f288bb657c4e72140</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_OBJ_L2CACHE</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>ggacd37bb612667dc437d66bfb175a8dc55a18f61d19fe9f4bcea978fcc68bc078fb</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_OBJ_L3CACHE</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>ggacd37bb612667dc437d66bfb175a8dc55a25fae0e0514c90e3973a29866a5a837d</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_OBJ_L4CACHE</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>ggacd37bb612667dc437d66bfb175a8dc55a54923bfa13df9d7e6d6dd0d5baff5f72</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_OBJ_L5CACHE</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>ggacd37bb612667dc437d66bfb175a8dc55a67194c9de5e3e581c64c11d2eb1c109d</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_OBJ_L1ICACHE</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>ggacd37bb612667dc437d66bfb175a8dc55afa834a85d9e53836cf0db6d0bd8329b4</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_OBJ_L2ICACHE</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>ggacd37bb612667dc437d66bfb175a8dc55a10713b7e561b8cc32544cd31b1c17f8d</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_OBJ_L3ICACHE</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>ggacd37bb612667dc437d66bfb175a8dc55ac22850c717f07bf7ffb316fadd08d218</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_OBJ_GROUP</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_OBJ_NUMANODE</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_OBJ_BRIDGE</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_OBJ_PCI_DEVICE</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_OBJ_OS_DEVICE</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_OBJ_MISC</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_OBJ_MEMCACHE</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>ggacd37bb612667dc437d66bfb175a8dc55a0ed5bd98974729a0c476c39e917dabd6</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_OBJ_DIE</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>ggacd37bb612667dc437d66bfb175a8dc55af78bb6cde53aaaaa162a7dc420c409da</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumeration">
+      <type></type>
+      <name>hwloc_obj_cache_type_e</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>ga791c9875c8fe20f3e1e5871e0657e59b</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_OBJ_CACHE_UNIFIED</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_OBJ_CACHE_DATA</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>gga791c9875c8fe20f3e1e5871e0657e59bacac60ecad4206f85aeb79bef1604b488</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_OBJ_CACHE_INSTRUCTION</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>gga791c9875c8fe20f3e1e5871e0657e59ba6f98b0d422b38ba90c5f5c79a11b0658</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumeration">
+      <type></type>
+      <name>hwloc_obj_bridge_type_e</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>ga48a4803c72574191d7ead1c62aaf9860</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_OBJ_BRIDGE_HOST</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>gga48a4803c72574191d7ead1c62aaf9860a2c7660f3864ad2810c1e72aad285e574</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_OBJ_BRIDGE_PCI</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>gga48a4803c72574191d7ead1c62aaf9860a8f3b4cecf3dab6073d74696d10863c60</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumeration">
+      <type></type>
+      <name>hwloc_obj_osdev_type_e</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>ga64f5d539df299c97ae80ce53fc4b56c0</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_OBJ_OSDEV_BLOCK</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>gga64f5d539df299c97ae80ce53fc4b56c0a689b0488c3c0d08d116751c6b9cb8871</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_OBJ_OSDEV_GPU</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_OBJ_OSDEV_NETWORK</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>gga64f5d539df299c97ae80ce53fc4b56c0ab715d81155f771573c8682dffc65021b</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_OBJ_OSDEV_OPENFABRICS</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>gga64f5d539df299c97ae80ce53fc4b56c0a52157d03694fdae82dddd57ca8c973b6</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_OBJ_OSDEV_DMA</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>gga64f5d539df299c97ae80ce53fc4b56c0a827ad1643360711a8b6c6af671366791</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_OBJ_OSDEV_COPROC</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_compare_types</name>
+      <anchorfile>a00196.html</anchorfile>
+      <anchor>ga1820ea0dfd8e9dca28f9ea7624df5ae2</anchor>
+      <arglist>(hwloc_obj_type_t type1, hwloc_obj_type_t type2)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_objects</name>
+    <title>Object Structure and Attributes</title>
+    <filename>a00197.html</filename>
+    <class kind="struct">hwloc_obj</class>
+    <class kind="union">hwloc_obj_attr_u</class>
+    <class kind="struct">hwloc_info_s</class>
+    <member kind="typedef">
+      <type>struct hwloc_obj *</type>
+      <name>hwloc_obj_t</name>
+      <anchorfile>a00197.html</anchorfile>
+      <anchor>ga79b8ab56877ef99ac59b833203391c7d</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_creation</name>
+    <title>Topology Creation and Destruction</title>
+    <filename>a00198.html</filename>
+    <member kind="typedef">
+      <type>struct hwloc_topology *</type>
+      <name>hwloc_topology_t</name>
+      <anchorfile>a00198.html</anchorfile>
+      <anchor>ga9d1e76ee15a7dee158b786c30b6a6e38</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_init</name>
+      <anchorfile>a00198.html</anchorfile>
+      <anchor>ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa</anchor>
+      <arglist>(hwloc_topology_t *topologyp)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_load</name>
+      <anchorfile>a00198.html</anchorfile>
+      <anchor>gabdf58d87ad77f6615fccdfe0535ff826</anchor>
+      <arglist>(hwloc_topology_t topology)</arglist>
+    </member>
+    <member kind="function">
+      <type>void</type>
+      <name>hwloc_topology_destroy</name>
+      <anchorfile>a00198.html</anchorfile>
+      <anchor>ga9f34a640b6fd28d23699d4d084667b15</anchor>
+      <arglist>(hwloc_topology_t topology)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_dup</name>
+      <anchorfile>a00198.html</anchorfile>
+      <anchor>ga62a161fc5e6f120344dc69a7bee4e587</anchor>
+      <arglist>(hwloc_topology_t *newtopology, hwloc_topology_t oldtopology)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_abi_check</name>
+      <anchorfile>a00198.html</anchorfile>
+      <anchor>ga0647ae66458fe68172eb5a320042f870</anchor>
+      <arglist>(hwloc_topology_t topology)</arglist>
+    </member>
+    <member kind="function">
+      <type>void</type>
+      <name>hwloc_topology_check</name>
+      <anchorfile>a00198.html</anchorfile>
+      <anchor>gaf6746bc3a558ef1ac8348b4491d091b5</anchor>
+      <arglist>(hwloc_topology_t topology)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_levels</name>
+    <title>Object levels, depths and types</title>
+    <filename>a00199.html</filename>
+    <member kind="enumeration">
+      <type></type>
+      <name>hwloc_get_type_depth_e</name>
+      <anchorfile>a00199.html</anchorfile>
+      <anchor>gaf4e663cf42bbe20756b849c6293ef575</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TYPE_DEPTH_UNKNOWN</name>
+      <anchorfile>a00199.html</anchorfile>
+      <anchor>ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TYPE_DEPTH_MULTIPLE</name>
+      <anchorfile>a00199.html</anchorfile>
+      <anchor>ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TYPE_DEPTH_NUMANODE</name>
+      <anchorfile>a00199.html</anchorfile>
+      <anchor>ggaf4e663cf42bbe20756b849c6293ef575a245c34ec9884c2cf5de5049b2153ed9c</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TYPE_DEPTH_BRIDGE</name>
+      <anchorfile>a00199.html</anchorfile>
+      <anchor>ggaf4e663cf42bbe20756b849c6293ef575af93b50182973e4a718d9d4db9e253a90</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TYPE_DEPTH_PCI_DEVICE</name>
+      <anchorfile>a00199.html</anchorfile>
+      <anchor>ggaf4e663cf42bbe20756b849c6293ef575ad8b1516e699b57ce1c8d107fbd2f674c</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TYPE_DEPTH_OS_DEVICE</name>
+      <anchorfile>a00199.html</anchorfile>
+      <anchor>ggaf4e663cf42bbe20756b849c6293ef575afe9a2131073eebbe129d4aa2928d3f46</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TYPE_DEPTH_MISC</name>
+      <anchorfile>a00199.html</anchorfile>
+      <anchor>ggaf4e663cf42bbe20756b849c6293ef575a96436a392b4cdcaa1a29bc65351b373f</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TYPE_DEPTH_MEMCACHE</name>
+      <anchorfile>a00199.html</anchorfile>
+      <anchor>ggaf4e663cf42bbe20756b849c6293ef575a8b8d7d300c018c0eb65e6c9a9f162101</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_get_depth</name>
+      <anchorfile>a00199.html</anchorfile>
+      <anchor>gae54d1782ca9b54bea915f5c18a9158fa</anchor>
+      <arglist>(hwloc_topology_t restrict topology)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_get_type_depth</name>
+      <anchorfile>a00199.html</anchorfile>
+      <anchor>ga8bec782e21be313750da70cf7428b374</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_obj_type_t type)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_get_memory_parents_depth</name>
+      <anchorfile>a00199.html</anchorfile>
+      <anchor>gae85786340b88e24835f8c403a1e2e54b</anchor>
+      <arglist>(hwloc_topology_t topology)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_get_type_or_below_depth</name>
+      <anchorfile>a00199.html</anchorfile>
+      <anchor>ga8125328e69eba709c33ea8055c12589b</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_obj_type_t type)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_get_type_or_above_depth</name>
+      <anchorfile>a00199.html</anchorfile>
+      <anchor>ga8a9ee573b7d2190272095d10712a7cca</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_obj_type_t type)</arglist>
+    </member>
+    <member kind="function">
+      <type>hwloc_obj_type_t</type>
+      <name>hwloc_get_depth_type</name>
+      <anchorfile>a00199.html</anchorfile>
+      <anchor>ga506b0682b98aa264d53e934d2e9badb0</anchor>
+      <arglist>(hwloc_topology_t topology, int depth)</arglist>
+    </member>
+    <member kind="function">
+      <type>unsigned</type>
+      <name>hwloc_get_nbobjs_by_depth</name>
+      <anchorfile>a00199.html</anchorfile>
+      <anchor>ga1d5ceafe8130fe6e8657bf0bc666ba50</anchor>
+      <arglist>(hwloc_topology_t topology, int depth)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_get_nbobjs_by_type</name>
+      <anchorfile>a00199.html</anchorfile>
+      <anchor>ga789a3f65aedff644be64a18526a03065</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_obj_type_t type)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_get_root_obj</name>
+      <anchorfile>a00199.html</anchorfile>
+      <anchor>ga2d4b12fc187dfc53b35f2fa21d21044d</anchor>
+      <arglist>(hwloc_topology_t topology)</arglist>
+    </member>
+    <member kind="function">
+      <type>hwloc_obj_t</type>
+      <name>hwloc_get_obj_by_depth</name>
+      <anchorfile>a00199.html</anchorfile>
+      <anchor>ga391f6b2613f0065673eaa4069b93d4e0</anchor>
+      <arglist>(hwloc_topology_t topology, int depth, unsigned idx)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_get_obj_by_type</name>
+      <anchorfile>a00199.html</anchorfile>
+      <anchor>ga6f414dd80a2b943967a0ac92da3181a2</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_obj_type_t type, unsigned idx)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_get_next_obj_by_depth</name>
+      <anchorfile>a00199.html</anchorfile>
+      <anchor>gac140a9b939d9fa0b30c4a910efcb0656</anchor>
+      <arglist>(hwloc_topology_t topology, int depth, hwloc_obj_t prev)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_get_next_obj_by_type</name>
+      <anchorfile>a00199.html</anchorfile>
+      <anchor>ga759e88eaf5a230ad283e9d4c42486735</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_obj_type_t type, hwloc_obj_t prev)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_object_strings</name>
+    <title>Converting between Object Types and Attributes, and Strings</title>
+    <filename>a00200.html</filename>
+    <member kind="function">
+      <type>const char *</type>
+      <name>hwloc_obj_type_string</name>
+      <anchorfile>a00200.html</anchorfile>
+      <anchor>ga5ca0bf94bbbb080d0eff17a57bd90422</anchor>
+      <arglist>(hwloc_obj_type_t type)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_obj_type_snprintf</name>
+      <anchorfile>a00200.html</anchorfile>
+      <anchor>gadb8765c260edea80c52cd06a76639ba4</anchor>
+      <arglist>(char *restrict string, size_t size, hwloc_obj_t obj, int verbose)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_obj_attr_snprintf</name>
+      <anchorfile>a00200.html</anchorfile>
+      <anchor>ga870e876931c282a1c7aee2f031912ce3</anchor>
+      <arglist>(char *restrict string, size_t size, hwloc_obj_t obj, const char *restrict separator, int verbose)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_type_sscanf</name>
+      <anchorfile>a00200.html</anchorfile>
+      <anchor>ga510f21b066fba2dab12b8c9b173b1dfd</anchor>
+      <arglist>(const char *string, hwloc_obj_type_t *typep, union hwloc_obj_attr_u *attrp, size_t attrsize)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_type_sscanf_as_depth</name>
+      <anchorfile>a00200.html</anchorfile>
+      <anchor>ga52c63cd7203e55b804c1314affc9bd12</anchor>
+      <arglist>(const char *string, hwloc_obj_type_t *typep, hwloc_topology_t topology, int *depthp)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_info_attr</name>
+    <title>Consulting and Adding Key-Value Info Attributes</title>
+    <filename>a00201.html</filename>
+    <member kind="function" static="yes">
+      <type>static const char *</type>
+      <name>hwloc_obj_get_info_by_name</name>
+      <anchorfile>a00201.html</anchorfile>
+      <anchor>gab358661a92bb27d8542b255cc9f6f25e</anchor>
+      <arglist>(hwloc_obj_t obj, const char *name)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_obj_add_info</name>
+      <anchorfile>a00201.html</anchorfile>
+      <anchor>gace7654bb8a9002caae1a4b8a59e7452e</anchor>
+      <arglist>(hwloc_obj_t obj, const char *name, const char *value)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_cpubinding</name>
+    <title>CPU binding</title>
+    <filename>a00202.html</filename>
+    <member kind="enumeration">
+      <type></type>
+      <name>hwloc_cpubind_flags_t</name>
+      <anchorfile>a00202.html</anchorfile>
+      <anchor>ga217dc8d373f8958cc93c154ebce1c71c</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_CPUBIND_PROCESS</name>
+      <anchorfile>a00202.html</anchorfile>
+      <anchor>gga217dc8d373f8958cc93c154ebce1c71ca2e0dd0128dac6b03408c7dd170477fdc</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_CPUBIND_THREAD</name>
+      <anchorfile>a00202.html</anchorfile>
+      <anchor>gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_CPUBIND_STRICT</name>
+      <anchorfile>a00202.html</anchorfile>
+      <anchor>gga217dc8d373f8958cc93c154ebce1c71ca679a7e0f0c7ee06b123565f90d98e7fa</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_CPUBIND_NOMEMBIND</name>
+      <anchorfile>a00202.html</anchorfile>
+      <anchor>gga217dc8d373f8958cc93c154ebce1c71ca41ce440443cc3087caed95ab60edcad6</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_set_cpubind</name>
+      <anchorfile>a00202.html</anchorfile>
+      <anchor>ga80bc07473a8edf840cae17bd7ec21d48</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t set, int flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_get_cpubind</name>
+      <anchorfile>a00202.html</anchorfile>
+      <anchor>gacba7ecb979baf824d5240fa2cb2a8be6</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_cpuset_t set, int flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_set_proc_cpubind</name>
+      <anchorfile>a00202.html</anchorfile>
+      <anchor>ga296db8a3c6d49b51fb83d6f3e45c02a6</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t set, int flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_get_proc_cpubind</name>
+      <anchorfile>a00202.html</anchorfile>
+      <anchor>gac82de91f788fa82dacf99c6e0d4b7158</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_set_thread_cpubind</name>
+      <anchorfile>a00202.html</anchorfile>
+      <anchor>gae42c01b2addcfbf6048b9a516dd7a906</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_thread_t thread, hwloc_const_cpuset_t set, int flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_get_thread_cpubind</name>
+      <anchorfile>a00202.html</anchorfile>
+      <anchor>gaf13f765642b5d0d9a9813e6bb043671b</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_thread_t thread, hwloc_cpuset_t set, int flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_get_last_cpu_location</name>
+      <anchorfile>a00202.html</anchorfile>
+      <anchor>gafdb374627358bf09203b5a4215b13032</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_cpuset_t set, int flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_get_proc_last_cpu_location</name>
+      <anchorfile>a00202.html</anchorfile>
+      <anchor>ga910a05c2d47f68a3155bf176b50fa555</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int flags)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_membinding</name>
+    <title>Memory binding</title>
+    <filename>a00203.html</filename>
+    <member kind="enumeration">
+      <type></type>
+      <name>hwloc_membind_policy_t</name>
+      <anchorfile>a00203.html</anchorfile>
+      <anchor>gac9764f79505775d06407b40f5e4661e8</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_MEMBIND_DEFAULT</name>
+      <anchorfile>a00203.html</anchorfile>
+      <anchor>ggac9764f79505775d06407b40f5e4661e8a18675bb80ebc1bce5b652e9de8f3998c</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_MEMBIND_FIRSTTOUCH</name>
+      <anchorfile>a00203.html</anchorfile>
+      <anchor>ggac9764f79505775d06407b40f5e4661e8a979c7aa78dd32780858f30f47a72cca0</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_MEMBIND_BIND</name>
+      <anchorfile>a00203.html</anchorfile>
+      <anchor>ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_MEMBIND_INTERLEAVE</name>
+      <anchorfile>a00203.html</anchorfile>
+      <anchor>ggac9764f79505775d06407b40f5e4661e8ae370075e5af016d42310f87ea5af236b</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_MEMBIND_NEXTTOUCH</name>
+      <anchorfile>a00203.html</anchorfile>
+      <anchor>ggac9764f79505775d06407b40f5e4661e8aecdd4164d647708fbb51a00d98dbb138</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_MEMBIND_MIXED</name>
+      <anchorfile>a00203.html</anchorfile>
+      <anchor>ggac9764f79505775d06407b40f5e4661e8a3185bd869b67817fb2bd5164bf360402</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumeration">
+      <type></type>
+      <name>hwloc_membind_flags_t</name>
+      <anchorfile>a00203.html</anchorfile>
+      <anchor>gab00475fd98815bf4fb9aaf752030e7d2</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_MEMBIND_PROCESS</name>
+      <anchorfile>a00203.html</anchorfile>
+      <anchor>ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_MEMBIND_THREAD</name>
+      <anchorfile>a00203.html</anchorfile>
+      <anchor>ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_MEMBIND_STRICT</name>
+      <anchorfile>a00203.html</anchorfile>
+      <anchor>ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_MEMBIND_MIGRATE</name>
+      <anchorfile>a00203.html</anchorfile>
+      <anchor>ggab00475fd98815bf4fb9aaf752030e7d2aa6e49e54f52827cb143cc869cfd748af</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_MEMBIND_NOCPUBIND</name>
+      <anchorfile>a00203.html</anchorfile>
+      <anchor>ggab00475fd98815bf4fb9aaf752030e7d2aad6b9eaf2ee324ca58dc8f58094b9997</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_MEMBIND_BYNODESET</name>
+      <anchorfile>a00203.html</anchorfile>
+      <anchor>ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_set_membind</name>
+      <anchorfile>a00203.html</anchorfile>
+      <anchor>ga020951efa0ce3862bd4faec295501a7f</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_get_membind</name>
+      <anchorfile>a00203.html</anchorfile>
+      <anchor>gae21f0a1a884929c784bebf070252aa56</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_bitmap_t set, hwloc_membind_policy_t *policy, int flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_set_proc_membind</name>
+      <anchorfile>a00203.html</anchorfile>
+      <anchor>gabc91ff16f7e41047924e3a4ae6d9da7e</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_get_proc_membind</name>
+      <anchorfile>a00203.html</anchorfile>
+      <anchor>ga1730ceb18ec6ee3b7bd3d0db81f07dc8</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_bitmap_t set, hwloc_membind_policy_t *policy, int flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_set_area_membind</name>
+      <anchorfile>a00203.html</anchorfile>
+      <anchor>gaf881faefe20701229f07dd7dbd0125ed</anchor>
+      <arglist>(hwloc_topology_t topology, const void *addr, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_get_area_membind</name>
+      <anchorfile>a00203.html</anchorfile>
+      <anchor>gaa87e0a6946ff145914fdf0b1c60567f8</anchor>
+      <arglist>(hwloc_topology_t topology, const void *addr, size_t len, hwloc_bitmap_t set, hwloc_membind_policy_t *policy, int flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_get_area_memlocation</name>
+      <anchorfile>a00203.html</anchorfile>
+      <anchor>ga537c7508a4e2d1db05673ec5be6e805c</anchor>
+      <arglist>(hwloc_topology_t topology, const void *addr, size_t len, hwloc_bitmap_t set, int flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>void *</type>
+      <name>hwloc_alloc</name>
+      <anchorfile>a00203.html</anchorfile>
+      <anchor>ga972b335a86a7d5e7b34bce2b243c41bc</anchor>
+      <arglist>(hwloc_topology_t topology, size_t len)</arglist>
+    </member>
+    <member kind="function">
+      <type>void *</type>
+      <name>hwloc_alloc_membind</name>
+      <anchorfile>a00203.html</anchorfile>
+      <anchor>ga04736461780fadcf193af218c0122273</anchor>
+      <arglist>(hwloc_topology_t topology, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static void *</type>
+      <name>hwloc_alloc_membind_policy</name>
+      <anchorfile>a00203.html</anchorfile>
+      <anchor>gab1b77b8408bacaf03c7e8878f7577922</anchor>
+      <arglist>(hwloc_topology_t topology, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_free</name>
+      <anchorfile>a00203.html</anchorfile>
+      <anchor>ga32dbd4f54e9e4a7179f2dde37ffe6ad7</anchor>
+      <arglist>(hwloc_topology_t topology, void *addr, size_t len)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_setsource</name>
+    <title>Changing the Source of Topology Discovery</title>
+    <filename>a00204.html</filename>
+    <member kind="enumeration">
+      <type></type>
+      <name>hwloc_topology_components_flag_e</name>
+      <anchorfile>a00204.html</anchorfile>
+      <anchor>ga949f656c779208a36790feba24048b7e</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TOPOLOGY_COMPONENTS_FLAG_BLACKLIST</name>
+      <anchorfile>a00204.html</anchorfile>
+      <anchor>gga949f656c779208a36790feba24048b7ea33eec25d29253a2aba21dd3c731b416e</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_set_pid</name>
+      <anchorfile>a00204.html</anchorfile>
+      <anchor>ga341fc17b5867a4715570baab131f68cd</anchor>
+      <arglist>(hwloc_topology_t restrict topology, hwloc_pid_t pid)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_set_synthetic</name>
+      <anchorfile>a00204.html</anchorfile>
+      <anchor>ga4fab186bb6181a00bcf585825fddd38d</anchor>
+      <arglist>(hwloc_topology_t restrict topology, const char *restrict description)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_set_xml</name>
+      <anchorfile>a00204.html</anchorfile>
+      <anchor>ga879439b7ee99407ee911b3ac64e9a25e</anchor>
+      <arglist>(hwloc_topology_t restrict topology, const char *restrict xmlpath)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_set_xmlbuffer</name>
+      <anchorfile>a00204.html</anchorfile>
+      <anchor>ga2745616b65595e1c1e579ecc7e461fa8</anchor>
+      <arglist>(hwloc_topology_t restrict topology, const char *restrict buffer, int size)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_set_components</name>
+      <anchorfile>a00204.html</anchorfile>
+      <anchor>ga9ad41adf418cee1c0ee32ba9bd4a3d36</anchor>
+      <arglist>(hwloc_topology_t restrict topology, unsigned long flags, const char *restrict name)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_configuration</name>
+    <title>Topology Detection Configuration and Query</title>
+    <filename>a00205.html</filename>
+    <class kind="struct">hwloc_topology_discovery_support</class>
+    <class kind="struct">hwloc_topology_cpubind_support</class>
+    <class kind="struct">hwloc_topology_membind_support</class>
+    <class kind="struct">hwloc_topology_misc_support</class>
+    <class kind="struct">hwloc_topology_support</class>
+    <member kind="enumeration">
+      <type></type>
+      <name>hwloc_topology_flags_e</name>
+      <anchorfile>a00205.html</anchorfile>
+      <anchor>gada025d3ec20b4b420f8038d23d6e7bde</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</name>
+      <anchorfile>a00205.html</anchorfile>
+      <anchor>ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</name>
+      <anchorfile>a00205.html</anchorfile>
+      <anchor>ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES</name>
+      <anchorfile>a00205.html</anchorfile>
+      <anchor>ggada025d3ec20b4b420f8038d23d6e7bdea1b66bbd66e900e5c837f71defb32ad89</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT</name>
+      <anchorfile>a00205.html</anchorfile>
+      <anchor>ggada025d3ec20b4b420f8038d23d6e7bdead93e82b8668ee90e4f9354e201a2ed9c</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING</name>
+      <anchorfile>a00205.html</anchorfile>
+      <anchor>ggada025d3ec20b4b420f8038d23d6e7bdeaa595aed197779012acf43e8ca4a2658d</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_MEMBINDING</name>
+      <anchorfile>a00205.html</anchorfile>
+      <anchor>ggada025d3ec20b4b420f8038d23d6e7bdea368d7741135fe309f3782c59644d3caa</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TOPOLOGY_FLAG_DONT_CHANGE_BINDING</name>
+      <anchorfile>a00205.html</anchorfile>
+      <anchor>ggada025d3ec20b4b420f8038d23d6e7bdeae7a792e3db4360360a10f9160b10e631</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TOPOLOGY_FLAG_NO_DISTANCES</name>
+      <anchorfile>a00205.html</anchorfile>
+      <anchor>ggada025d3ec20b4b420f8038d23d6e7bdea5796b4909eba80f9727b66d07d3a7a05</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TOPOLOGY_FLAG_NO_MEMATTRS</name>
+      <anchorfile>a00205.html</anchorfile>
+      <anchor>ggada025d3ec20b4b420f8038d23d6e7bdead5636766a6603f24486f79c48899c1c3</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TOPOLOGY_FLAG_NO_CPUKINDS</name>
+      <anchorfile>a00205.html</anchorfile>
+      <anchor>ggada025d3ec20b4b420f8038d23d6e7bdea3497cd4c2f8b1d842dd49b3aaae56a24</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumeration">
+      <type></type>
+      <name>hwloc_type_filter_e</name>
+      <anchorfile>a00205.html</anchorfile>
+      <anchor>ga9a5a1f0140cd1952544477833733195b</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TYPE_FILTER_KEEP_ALL</name>
+      <anchorfile>a00205.html</anchorfile>
+      <anchor>gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TYPE_FILTER_KEEP_NONE</name>
+      <anchorfile>a00205.html</anchorfile>
+      <anchor>gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TYPE_FILTER_KEEP_STRUCTURE</name>
+      <anchorfile>a00205.html</anchorfile>
+      <anchor>gga9a5a1f0140cd1952544477833733195ba7664716643bf1db83e631eed34f659e4</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TYPE_FILTER_KEEP_IMPORTANT</name>
+      <anchorfile>a00205.html</anchorfile>
+      <anchor>gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_set_flags</name>
+      <anchorfile>a00205.html</anchorfile>
+      <anchor>gaaeed4df656979e5f16befea9d29b814b</anchor>
+      <arglist>(hwloc_topology_t topology, unsigned long flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>unsigned long</type>
+      <name>hwloc_topology_get_flags</name>
+      <anchorfile>a00205.html</anchorfile>
+      <anchor>ga09318f81c1d4713be907d64748a6f93c</anchor>
+      <arglist>(hwloc_topology_t topology)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_is_thissystem</name>
+      <anchorfile>a00205.html</anchorfile>
+      <anchor>ga68ffdcfd9175cdf40709801092f18017</anchor>
+      <arglist>(hwloc_topology_t restrict topology)</arglist>
+    </member>
+    <member kind="function">
+      <type>const struct hwloc_topology_support *</type>
+      <name>hwloc_topology_get_support</name>
+      <anchorfile>a00205.html</anchorfile>
+      <anchor>gab8c76173c4a8ce1a9a9366012b1388e6</anchor>
+      <arglist>(hwloc_topology_t restrict topology)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_set_type_filter</name>
+      <anchorfile>a00205.html</anchorfile>
+      <anchor>gad894e70f15f8d4aada7be8d1aba38b7e</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_obj_type_t type, enum hwloc_type_filter_e filter)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_get_type_filter</name>
+      <anchorfile>a00205.html</anchorfile>
+      <anchor>ga137ad1178f7a79f2383974d983083401</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_obj_type_t type, enum hwloc_type_filter_e *filter)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_set_all_types_filter</name>
+      <anchorfile>a00205.html</anchorfile>
+      <anchor>ga9eb8dc3b106f84921bf5789101e97e24</anchor>
+      <arglist>(hwloc_topology_t topology, enum hwloc_type_filter_e filter)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_set_cache_types_filter</name>
+      <anchorfile>a00205.html</anchorfile>
+      <anchor>ga30bd6d330fe3c8f0cbaad724d114ee20</anchor>
+      <arglist>(hwloc_topology_t topology, enum hwloc_type_filter_e filter)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_set_icache_types_filter</name>
+      <anchorfile>a00205.html</anchorfile>
+      <anchor>ga37c7b2e599ed3cd76ad9164630024f30</anchor>
+      <arglist>(hwloc_topology_t topology, enum hwloc_type_filter_e filter)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_set_io_types_filter</name>
+      <anchorfile>a00205.html</anchorfile>
+      <anchor>ga0ab38705357bc1203abe829da8a12ad3</anchor>
+      <arglist>(hwloc_topology_t topology, enum hwloc_type_filter_e filter)</arglist>
+    </member>
+    <member kind="function">
+      <type>void</type>
+      <name>hwloc_topology_set_userdata</name>
+      <anchorfile>a00205.html</anchorfile>
+      <anchor>ga2cc7b7b155cba58dda203e54f1637b9c</anchor>
+      <arglist>(hwloc_topology_t topology, const void *userdata)</arglist>
+    </member>
+    <member kind="function">
+      <type>void *</type>
+      <name>hwloc_topology_get_userdata</name>
+      <anchorfile>a00205.html</anchorfile>
+      <anchor>ga91f992f8d6c4905b2d3c4f43e509c2a3</anchor>
+      <arglist>(hwloc_topology_t topology)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_tinker</name>
+    <title>Modifying a loaded Topology</title>
+    <filename>a00206.html</filename>
+    <member kind="enumeration">
+      <type></type>
+      <name>hwloc_restrict_flags_e</name>
+      <anchorfile>a00206.html</anchorfile>
+      <anchor>ga9d80f08eb25b7ac22f1b998dc8bf521f</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_RESTRICT_FLAG_REMOVE_CPULESS</name>
+      <anchorfile>a00206.html</anchorfile>
+      <anchor>gga9d80f08eb25b7ac22f1b998dc8bf521fa80eeb9cbba401ab050f8fb4573725891</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_RESTRICT_FLAG_BYNODESET</name>
+      <anchorfile>a00206.html</anchorfile>
+      <anchor>gga9d80f08eb25b7ac22f1b998dc8bf521fae4c5b1b87232f2d8a60559e77ac65a68</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_RESTRICT_FLAG_REMOVE_MEMLESS</name>
+      <anchorfile>a00206.html</anchorfile>
+      <anchor>gga9d80f08eb25b7ac22f1b998dc8bf521faf5ba49808855704bfe9cb9fe7347f93b</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_RESTRICT_FLAG_ADAPT_MISC</name>
+      <anchorfile>a00206.html</anchorfile>
+      <anchor>gga9d80f08eb25b7ac22f1b998dc8bf521fa699969227a09bbc1a7de51dc9fb7be4b</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_RESTRICT_FLAG_ADAPT_IO</name>
+      <anchorfile>a00206.html</anchorfile>
+      <anchor>gga9d80f08eb25b7ac22f1b998dc8bf521faa95d6985e36ec1e55f68b210297a85cb</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumeration">
+      <type></type>
+      <name>hwloc_allow_flags_e</name>
+      <anchorfile>a00206.html</anchorfile>
+      <anchor>ga38b1be3922094d880f6e76bf56c973d6</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_ALLOW_FLAG_ALL</name>
+      <anchorfile>a00206.html</anchorfile>
+      <anchor>gga38b1be3922094d880f6e76bf56c973d6aca107692455774f9d323d21b8abfce72</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_ALLOW_FLAG_LOCAL_RESTRICTIONS</name>
+      <anchorfile>a00206.html</anchorfile>
+      <anchor>gga38b1be3922094d880f6e76bf56c973d6a88c50088c09dcf1e1a496c0817556fb9</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_ALLOW_FLAG_CUSTOM</name>
+      <anchorfile>a00206.html</anchorfile>
+      <anchor>gga38b1be3922094d880f6e76bf56c973d6a489c8c1b67ce7e0b8cf7a665852760e1</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_restrict</name>
+      <anchorfile>a00206.html</anchorfile>
+      <anchor>ga6db81ed13ac0a9d70cc80372ab537815</anchor>
+      <arglist>(hwloc_topology_t restrict topology, hwloc_const_bitmap_t set, unsigned long flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_allow</name>
+      <anchorfile>a00206.html</anchorfile>
+      <anchor>gaf955b190c0299dcfb5bc985d777f92a1</anchor>
+      <arglist>(hwloc_topology_t restrict topology, hwloc_const_cpuset_t cpuset, hwloc_const_nodeset_t nodeset, unsigned long flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>hwloc_obj_t</type>
+      <name>hwloc_topology_insert_misc_object</name>
+      <anchorfile>a00206.html</anchorfile>
+      <anchor>gad980782ade737900c5cf208946768c30</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_obj_t parent, const char *name)</arglist>
+    </member>
+    <member kind="function">
+      <type>hwloc_obj_t</type>
+      <name>hwloc_topology_alloc_group_object</name>
+      <anchorfile>a00206.html</anchorfile>
+      <anchor>ga4cea4741165faf5323931a9ed8786ef7</anchor>
+      <arglist>(hwloc_topology_t topology)</arglist>
+    </member>
+    <member kind="function">
+      <type>hwloc_obj_t</type>
+      <name>hwloc_topology_insert_group_object</name>
+      <anchorfile>a00206.html</anchorfile>
+      <anchor>ga1fc6012b3e1c249b83f48cb7bcacaa5b</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_obj_t group)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_obj_add_other_obj_sets</name>
+      <anchorfile>a00206.html</anchorfile>
+      <anchor>gad458715d3335df44849216cc123d1055</anchor>
+      <arglist>(hwloc_obj_t dst, hwloc_obj_t src)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_refresh</name>
+      <anchorfile>a00206.html</anchorfile>
+      <anchor>ga698ecd640d2b76742bba3829a145cd9a</anchor>
+      <arglist>(hwloc_topology_t topology)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_helper_find_inside</name>
+    <title>Finding Objects inside a CPU set</title>
+    <filename>a00207.html</filename>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_get_first_largest_obj_inside_cpuset</name>
+      <anchorfile>a00207.html</anchorfile>
+      <anchor>ga547325a4193dbc215d07c23097519d79</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t set)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_get_largest_objs_inside_cpuset</name>
+      <anchorfile>a00207.html</anchorfile>
+      <anchor>ga34ca563fa3a6a4e05268f36a87668511</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_t *restrict objs, int max)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_get_next_obj_inside_cpuset_by_depth</name>
+      <anchorfile>a00207.html</anchorfile>
+      <anchor>ga63e3784e7c60fbae5073428cb98ac787</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t set, int depth, hwloc_obj_t prev)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_get_next_obj_inside_cpuset_by_type</name>
+      <anchorfile>a00207.html</anchorfile>
+      <anchor>gafe859176cf9233f215fea0e87cef47e7</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_type_t type, hwloc_obj_t prev)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_get_obj_inside_cpuset_by_depth</name>
+      <anchorfile>a00207.html</anchorfile>
+      <anchor>gaec86f1f88832836e3f9338e246ea5862</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t set, int depth, unsigned idx)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_get_obj_inside_cpuset_by_type</name>
+      <anchorfile>a00207.html</anchorfile>
+      <anchor>ga2edf924e5a0cca9cb22f65cc77c6ddb5</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_type_t type, unsigned idx)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static unsigned</type>
+      <name>hwloc_get_nbobjs_inside_cpuset_by_depth</name>
+      <anchorfile>a00207.html</anchorfile>
+      <anchor>gaa43c64512ddb33fd181990c4261cec7d</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t set, int depth)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_get_nbobjs_inside_cpuset_by_type</name>
+      <anchorfile>a00207.html</anchorfile>
+      <anchor>ga133c40415de008518608f8bff52a5ab9</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_type_t type)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_get_obj_index_inside_cpuset</name>
+      <anchorfile>a00207.html</anchorfile>
+      <anchor>ga4c3a20d61e9beb06c667b21688c772c5</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_t obj)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_helper_find_covering</name>
+    <title>Finding Objects covering at least CPU set</title>
+    <filename>a00208.html</filename>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_get_child_covering_cpuset</name>
+      <anchorfile>a00208.html</anchorfile>
+      <anchor>ga0e66aa2dc6b2527cfd10723af646c9d7</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_t parent)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_get_obj_covering_cpuset</name>
+      <anchorfile>a00208.html</anchorfile>
+      <anchor>ga41acdcdbb8b95d70ecf6c572a3f67dca</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t set)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_get_next_obj_covering_cpuset_by_depth</name>
+      <anchorfile>a00208.html</anchorfile>
+      <anchor>gaba4b6d86eba1169ced4b0e941d2bb5f0</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t set, int depth, hwloc_obj_t prev)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_get_next_obj_covering_cpuset_by_type</name>
+      <anchorfile>a00208.html</anchorfile>
+      <anchor>ga91cfae08b092e7966002e15d1e987213</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_type_t type, hwloc_obj_t prev)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_helper_ancestors</name>
+    <title>Looking at Ancestor and Child Objects</title>
+    <filename>a00209.html</filename>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_get_ancestor_obj_by_depth</name>
+      <anchorfile>a00209.html</anchorfile>
+      <anchor>ga9f8c93fde236e9642a96957af01a11cb</anchor>
+      <arglist>(hwloc_topology_t topology, int depth, hwloc_obj_t obj)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_get_ancestor_obj_by_type</name>
+      <anchorfile>a00209.html</anchorfile>
+      <anchor>ga70f0c7583291da707c15ae4daa850f41</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_obj_type_t type, hwloc_obj_t obj)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_get_common_ancestor_obj</name>
+      <anchorfile>a00209.html</anchorfile>
+      <anchor>gab1fa883021928b5c476911c4102e9be3</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_obj_t obj1, hwloc_obj_t obj2)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_obj_is_in_subtree</name>
+      <anchorfile>a00209.html</anchorfile>
+      <anchor>ga408cf74f5bf9ed497911a320c7f8cc56</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_obj_t obj, hwloc_obj_t subtree_root)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_get_next_child</name>
+      <anchorfile>a00209.html</anchorfile>
+      <anchor>ga12d8565a3436c565e791ed02a0353621</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_obj_t parent, hwloc_obj_t prev)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_helper_types</name>
+    <title>Kinds of object Type</title>
+    <filename>a00210.html</filename>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_obj_type_is_normal</name>
+      <anchorfile>a00210.html</anchorfile>
+      <anchor>ga52ef38431eba383b048b98c669b59a16</anchor>
+      <arglist>(hwloc_obj_type_t type)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_obj_type_is_io</name>
+      <anchorfile>a00210.html</anchorfile>
+      <anchor>gac8a954ed37a4376097234c828068cbef</anchor>
+      <arglist>(hwloc_obj_type_t type)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_obj_type_is_memory</name>
+      <anchorfile>a00210.html</anchorfile>
+      <anchor>ga1d074390c8a3dc3088d84f73fb73f966</anchor>
+      <arglist>(hwloc_obj_type_t type)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_obj_type_is_cache</name>
+      <anchorfile>a00210.html</anchorfile>
+      <anchor>ga2ed589bea28711e80b92066510a5607d</anchor>
+      <arglist>(hwloc_obj_type_t type)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_obj_type_is_dcache</name>
+      <anchorfile>a00210.html</anchorfile>
+      <anchor>ga395e48cd221d107e5891689624e1aec4</anchor>
+      <arglist>(hwloc_obj_type_t type)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_obj_type_is_icache</name>
+      <anchorfile>a00210.html</anchorfile>
+      <anchor>ga8abcee67b9b074332c1866405a3648a9</anchor>
+      <arglist>(hwloc_obj_type_t type)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_helper_find_cache</name>
+    <title>Looking at Cache Objects</title>
+    <filename>a00211.html</filename>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_get_cache_type_depth</name>
+      <anchorfile>a00211.html</anchorfile>
+      <anchor>gad108a09ce400222fe45545257d575489</anchor>
+      <arglist>(hwloc_topology_t topology, unsigned cachelevel, hwloc_obj_cache_type_t cachetype)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_get_cache_covering_cpuset</name>
+      <anchorfile>a00211.html</anchorfile>
+      <anchor>gac4cd480a5deaa4ada047fdd11ae4c070</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t set)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_get_shared_cache_covering_obj</name>
+      <anchorfile>a00211.html</anchorfile>
+      <anchor>ga36f48c32837c7a70b424706e213dcd71</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_obj_t obj)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_helper_find_misc</name>
+    <title>Finding objects, miscellaneous helpers</title>
+    <filename>a00212.html</filename>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_singlify_per_core</name>
+      <anchorfile>a00212.html</anchorfile>
+      <anchor>ga050646458efc8ca1120d9f124c5ad861</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_bitmap_t cpuset, unsigned which)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_get_pu_obj_by_os_index</name>
+      <anchorfile>a00212.html</anchorfile>
+      <anchor>ga751c238a4931db5cc0ca3181b7dd7479</anchor>
+      <arglist>(hwloc_topology_t topology, unsigned os_index)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_get_numanode_obj_by_os_index</name>
+      <anchorfile>a00212.html</anchorfile>
+      <anchor>gab89d9ed9edfaa3dd526fb6ee1a1618ea</anchor>
+      <arglist>(hwloc_topology_t topology, unsigned os_index)</arglist>
+    </member>
+    <member kind="function">
+      <type>unsigned</type>
+      <name>hwloc_get_closest_objs</name>
+      <anchorfile>a00212.html</anchorfile>
+      <anchor>ga2cd22a34360643f7f5bad09576dec205</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_obj_t src, hwloc_obj_t *restrict objs, unsigned max)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_get_obj_below_by_type</name>
+      <anchorfile>a00212.html</anchorfile>
+      <anchor>ga7a0c1046851f7a88bd52f5a1d4ba0a97</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_obj_type_t type1, unsigned idx1, hwloc_obj_type_t type2, unsigned idx2)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_get_obj_below_array_by_type</name>
+      <anchorfile>a00212.html</anchorfile>
+      <anchor>gacb51295ff3fbd3a96f990f20c6492b1d</anchor>
+      <arglist>(hwloc_topology_t topology, int nr, hwloc_obj_type_t *typev, unsigned *idxv)</arglist>
+    </member>
+    <member kind="function">
+      <type>hwloc_obj_t</type>
+      <name>hwloc_get_obj_with_same_locality</name>
+      <anchorfile>a00212.html</anchorfile>
+      <anchor>gab5df3ad1e8565ea0c2cf06412f6f6233</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_obj_t src, hwloc_obj_type_t type, const char *subtype, const char *nameprefix, unsigned long flags)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_helper_distribute</name>
+    <title>Distributing items over a topology</title>
+    <filename>a00213.html</filename>
+    <member kind="enumeration">
+      <type></type>
+      <name>hwloc_distrib_flags_e</name>
+      <anchorfile>a00213.html</anchorfile>
+      <anchor>ga8b835295a52b6768a5e6c8abb1f9c54d</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_DISTRIB_FLAG_REVERSE</name>
+      <anchorfile>a00213.html</anchorfile>
+      <anchor>gga8b835295a52b6768a5e6c8abb1f9c54da2ca08404bfbebe9ed5f34c3d7635425a</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_distrib</name>
+      <anchorfile>a00213.html</anchorfile>
+      <anchor>ga7b0c28f797c2ff17fa2f244ebbd55b33</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_obj_t *roots, unsigned n_roots, hwloc_cpuset_t *set, unsigned n, int until, unsigned long flags)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_helper_topology_sets</name>
+    <title>CPU and node sets of entire topologies</title>
+    <filename>a00214.html</filename>
+    <member kind="function">
+      <type>hwloc_const_cpuset_t</type>
+      <name>hwloc_topology_get_complete_cpuset</name>
+      <anchorfile>a00214.html</anchorfile>
+      <anchor>gaee30e03391c1ed7dfd617fb5c7bbb033</anchor>
+      <arglist>(hwloc_topology_t topology)</arglist>
+    </member>
+    <member kind="function">
+      <type>hwloc_const_cpuset_t</type>
+      <name>hwloc_topology_get_topology_cpuset</name>
+      <anchorfile>a00214.html</anchorfile>
+      <anchor>ga79212faa07b70dd26588941b17d9fa82</anchor>
+      <arglist>(hwloc_topology_t topology)</arglist>
+    </member>
+    <member kind="function">
+      <type>hwloc_const_cpuset_t</type>
+      <name>hwloc_topology_get_allowed_cpuset</name>
+      <anchorfile>a00214.html</anchorfile>
+      <anchor>ga517d5d68ec9f24583d8933aab713be8e</anchor>
+      <arglist>(hwloc_topology_t topology)</arglist>
+    </member>
+    <member kind="function">
+      <type>hwloc_const_nodeset_t</type>
+      <name>hwloc_topology_get_complete_nodeset</name>
+      <anchorfile>a00214.html</anchorfile>
+      <anchor>ga773fd98949461ef4c1e3170bb0c0418f</anchor>
+      <arglist>(hwloc_topology_t topology)</arglist>
+    </member>
+    <member kind="function">
+      <type>hwloc_const_nodeset_t</type>
+      <name>hwloc_topology_get_topology_nodeset</name>
+      <anchorfile>a00214.html</anchorfile>
+      <anchor>ga3fd37303e99ace8b0d0ea03f95f8c514</anchor>
+      <arglist>(hwloc_topology_t topology)</arglist>
+    </member>
+    <member kind="function">
+      <type>hwloc_const_nodeset_t</type>
+      <name>hwloc_topology_get_allowed_nodeset</name>
+      <anchorfile>a00214.html</anchorfile>
+      <anchor>ga21a4d7237a11e76b912ed4524ab78cbd</anchor>
+      <arglist>(hwloc_topology_t topology)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_helper_nodeset_convert</name>
+    <title>Converting between CPU sets and node sets</title>
+    <filename>a00215.html</filename>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_cpuset_to_nodeset</name>
+      <anchorfile>a00215.html</anchorfile>
+      <anchor>ga185751c1653fedbeb7cc480840f38cde</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t _cpuset, hwloc_nodeset_t nodeset)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_cpuset_from_nodeset</name>
+      <anchorfile>a00215.html</anchorfile>
+      <anchor>gad5ee8691e08a3538ea7633344c00456d</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_cpuset_t _cpuset, hwloc_const_nodeset_t nodeset)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_advanced_io</name>
+    <title>Finding I/O objects</title>
+    <filename>a00216.html</filename>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_get_non_io_ancestor_obj</name>
+      <anchorfile>a00216.html</anchorfile>
+      <anchor>gaf139bb61375178e90cc3f1835b452ab6</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_obj_t ioobj)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_get_next_pcidev</name>
+      <anchorfile>a00216.html</anchorfile>
+      <anchor>ga66470dabce9db19a57c5940a909d0baa</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_obj_t prev)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_get_pcidev_by_busid</name>
+      <anchorfile>a00216.html</anchorfile>
+      <anchor>gacdbaf0db98872e224b7883a84bfb0455</anchor>
+      <arglist>(hwloc_topology_t topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_get_pcidev_by_busidstring</name>
+      <anchorfile>a00216.html</anchorfile>
+      <anchor>ga23a978469353134b3104b846fe2efceb</anchor>
+      <arglist>(hwloc_topology_t topology, const char *busid)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_get_next_osdev</name>
+      <anchorfile>a00216.html</anchorfile>
+      <anchor>ga8b4584c8949e2c5f1c97ba7fe92b8145</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_obj_t prev)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_get_next_bridge</name>
+      <anchorfile>a00216.html</anchorfile>
+      <anchor>ga9dba22a3f4f701f2a46780ba9a0bbbe7</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_obj_t prev)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_bridge_covers_pcibus</name>
+      <anchorfile>a00216.html</anchorfile>
+      <anchor>ga0d92a9462a3d317f29ecb4442a307fb1</anchor>
+      <arglist>(hwloc_obj_t bridge, unsigned domain, unsigned bus)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_bitmap</name>
+    <title>The bitmap API</title>
+    <filename>a00217.html</filename>
+    <member kind="define">
+      <type>#define</type>
+      <name>hwloc_bitmap_foreach_begin</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga3f6861045a8029ade373510ffa727d2a</anchor>
+      <arglist>(id, bitmap)</arglist>
+    </member>
+    <member kind="define">
+      <type>#define</type>
+      <name>hwloc_bitmap_foreach_end</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>gafcf3246db406218d4e155735b3fa6528</anchor>
+      <arglist>()</arglist>
+    </member>
+    <member kind="typedef">
+      <type>struct hwloc_bitmap_s *</type>
+      <name>hwloc_bitmap_t</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>gaa3c2bf4c776d603dcebbb61b0c923d84</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="typedef">
+      <type>const struct hwloc_bitmap_s *</type>
+      <name>hwloc_const_bitmap_t</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>gae991a108af01d408be2776c5b2c467b2</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="function">
+      <type>hwloc_bitmap_t</type>
+      <name>hwloc_bitmap_alloc</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>gadece3d1eb5199fc2fb99bc7dcf1ccc05</anchor>
+      <arglist>(void)</arglist>
+    </member>
+    <member kind="function">
+      <type>hwloc_bitmap_t</type>
+      <name>hwloc_bitmap_alloc_full</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga02853b4a224970587b9d7a0e20d857c0</anchor>
+      <arglist>(void)</arglist>
+    </member>
+    <member kind="function">
+      <type>void</type>
+      <name>hwloc_bitmap_free</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga156130d85b3a0674d6e0e6770fe68fbe</anchor>
+      <arglist>(hwloc_bitmap_t bitmap)</arglist>
+    </member>
+    <member kind="function">
+      <type>hwloc_bitmap_t</type>
+      <name>hwloc_bitmap_dup</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>gae679434c1a5f41d3560a8a7e2c1b0dee</anchor>
+      <arglist>(hwloc_const_bitmap_t bitmap)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_copy</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga72a29824798b48784b8217471ec8f14c</anchor>
+      <arglist>(hwloc_bitmap_t dst, hwloc_const_bitmap_t src)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_snprintf</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga9511644657030a021dce9941e3cda583</anchor>
+      <arglist>(char *restrict buf, size_t buflen, hwloc_const_bitmap_t bitmap)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_asprintf</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga0fece972134fdecf2da9bc7a11dd827e</anchor>
+      <arglist>(char **strp, hwloc_const_bitmap_t bitmap)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_sscanf</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga064a85c643a364b60acbfa0f3663fc18</anchor>
+      <arglist>(hwloc_bitmap_t bitmap, const char *restrict string)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_list_snprintf</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga3d06e6447edeb61e56a9ad83f31f0a37</anchor>
+      <arglist>(char *restrict buf, size_t buflen, hwloc_const_bitmap_t bitmap)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_list_asprintf</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga39c0f1b02053de66d205c9f8260b3665</anchor>
+      <arglist>(char **strp, hwloc_const_bitmap_t bitmap)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_list_sscanf</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>gaf9314311d482c621e17c6a53a9fe993e</anchor>
+      <arglist>(hwloc_bitmap_t bitmap, const char *restrict string)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_taskset_snprintf</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga5beb68a987fe48e5c5edef06ab260e14</anchor>
+      <arglist>(char *restrict buf, size_t buflen, hwloc_const_bitmap_t bitmap)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_taskset_asprintf</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga391312513f17c985d871f18367c59512</anchor>
+      <arglist>(char **strp, hwloc_const_bitmap_t bitmap)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_taskset_sscanf</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga4f23db5041240e03e348752f8bd6ec2d</anchor>
+      <arglist>(hwloc_bitmap_t bitmap, const char *restrict string)</arglist>
+    </member>
+    <member kind="function">
+      <type>void</type>
+      <name>hwloc_bitmap_zero</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>gaa97c5217613c8cae9862287170ea2132</anchor>
+      <arglist>(hwloc_bitmap_t bitmap)</arglist>
+    </member>
+    <member kind="function">
+      <type>void</type>
+      <name>hwloc_bitmap_fill</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga07b2de8786b3cdb22f21d9dd42588275</anchor>
+      <arglist>(hwloc_bitmap_t bitmap)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_only</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga10be0840cdeb7ce26d862819dd303baa</anchor>
+      <arglist>(hwloc_bitmap_t bitmap, unsigned id)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_allbut</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga06d505f8a1c0a536614f65f503ee6d93</anchor>
+      <arglist>(hwloc_bitmap_t bitmap, unsigned id)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_from_ulong</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>gad59b0ebeb29c1bfabbb2a379e55c1159</anchor>
+      <arglist>(hwloc_bitmap_t bitmap, unsigned long mask)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_from_ith_ulong</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga4947c46d47bcfcd3faf3f59569be3e37</anchor>
+      <arglist>(hwloc_bitmap_t bitmap, unsigned i, unsigned long mask)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_from_ulongs</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>gabcfef22f6fc4d4b33f068dd91a1c38f5</anchor>
+      <arglist>(hwloc_bitmap_t bitmap, unsigned nr, const unsigned long *masks)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_set</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga062dbff93baeff3b425a7260c5463646</anchor>
+      <arglist>(hwloc_bitmap_t bitmap, unsigned id)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_set_range</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga9c9a8433732fb9f24899e7aa4c014d7e</anchor>
+      <arglist>(hwloc_bitmap_t bitmap, unsigned begin, int end)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_set_ith_ulong</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga3daeed965c35c6d2fd4820a318219985</anchor>
+      <arglist>(hwloc_bitmap_t bitmap, unsigned i, unsigned long mask)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_clr</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>gaf20bb350b6844d08931a064a73f86743</anchor>
+      <arglist>(hwloc_bitmap_t bitmap, unsigned id)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_clr_range</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga833776709df94d727f8c22304b3388cf</anchor>
+      <arglist>(hwloc_bitmap_t bitmap, unsigned begin, int end)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_singlify</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>gaa611a77c092e679246afdf9a60d5db8b</anchor>
+      <arglist>(hwloc_bitmap_t bitmap)</arglist>
+    </member>
+    <member kind="function">
+      <type>unsigned long</type>
+      <name>hwloc_bitmap_to_ulong</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>gab6a6bae22a33ec6adfc169a953c13e6c</anchor>
+      <arglist>(hwloc_const_bitmap_t bitmap)</arglist>
+    </member>
+    <member kind="function">
+      <type>unsigned long</type>
+      <name>hwloc_bitmap_to_ith_ulong</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>gac92e6404f648d6b99d2c626b05b2ffa4</anchor>
+      <arglist>(hwloc_const_bitmap_t bitmap, unsigned i)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_to_ulongs</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>gacd215a2348732de25d94a4ecd76d528c</anchor>
+      <arglist>(hwloc_const_bitmap_t bitmap, unsigned nr, unsigned long *masks)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_nr_ulongs</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>gac0744734d761d65c977aece565364908</anchor>
+      <arglist>(hwloc_const_bitmap_t bitmap)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_isset</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga11340dd487f110bb84f0a6e4ae90bd06</anchor>
+      <arglist>(hwloc_const_bitmap_t bitmap, unsigned id)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_iszero</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga5b64be28f5a7176ed8ad0d6a90bdf108</anchor>
+      <arglist>(hwloc_const_bitmap_t bitmap)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_isfull</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga5fdcb8c19c336511c37076d649e74af4</anchor>
+      <arglist>(hwloc_const_bitmap_t bitmap)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_first</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga3ec1ced43afadf8c0a7197320bc016ed</anchor>
+      <arglist>(hwloc_const_bitmap_t bitmap)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_next</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>gaab7240b4b644693b775dad17b44ffd68</anchor>
+      <arglist>(hwloc_const_bitmap_t bitmap, int prev)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_last</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga3d9b08b060a59bbab5a4ea6d0a1ed7a6</anchor>
+      <arglist>(hwloc_const_bitmap_t bitmap)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_weight</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga0200466842c0e1f5da75e84dde460b10</anchor>
+      <arglist>(hwloc_const_bitmap_t bitmap)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_first_unset</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>gae408841487b288e148a478ba0465c99e</anchor>
+      <arglist>(hwloc_const_bitmap_t bitmap)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_next_unset</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga9653af34d1460ef106b7df25af4cdca8</anchor>
+      <arglist>(hwloc_const_bitmap_t bitmap, int prev)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_last_unset</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga45d49aeb45c7da631b1480a93dc3fc92</anchor>
+      <arglist>(hwloc_const_bitmap_t bitmap)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_or</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga120b8aefb9ce7ef349929656359b1859</anchor>
+      <arglist>(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_and</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga674533016ffed922a28b4f0b49b82cd4</anchor>
+      <arglist>(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_andnot</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga7ca5c72db65406b85aca032c8a990f9e</anchor>
+      <arglist>(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_xor</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga205508218e09cb9befd0687f16409f09</anchor>
+      <arglist>(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_not</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga84cfdb4f8ab8c1f7e097728e613a2a3f</anchor>
+      <arglist>(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_intersects</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>gaefa070f9232857ba5a57297ea9a08ea2</anchor>
+      <arglist>(hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_isincluded</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga0526e03db81956fb02acc8260b66d6a4</anchor>
+      <arglist>(hwloc_const_bitmap_t sub_bitmap, hwloc_const_bitmap_t super_bitmap)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_isequal</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga32376b1405e57472b73c3aa53bb39663</anchor>
+      <arglist>(hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_compare_first</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>gaa39cda1510ab721b5c012c76ead72365</anchor>
+      <arglist>(hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_bitmap_compare</name>
+      <anchorfile>a00217.html</anchorfile>
+      <anchor>ga14cdbc0ef0a705e84999bd48a2e649f3</anchor>
+      <arglist>(hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_xmlexport</name>
+    <title>Exporting Topologies to XML</title>
+    <filename>a00218.html</filename>
+    <member kind="enumeration">
+      <type></type>
+      <name>hwloc_topology_export_xml_flags_e</name>
+      <anchorfile>a00218.html</anchorfile>
+      <anchor>ga0eb99636aff71fe2704e1fa0ffe8c18d</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1</name>
+      <anchorfile>a00218.html</anchorfile>
+      <anchor>gga0eb99636aff71fe2704e1fa0ffe8c18dae7d6d96546131ef0043867b836b02e0f</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_export_xml</name>
+      <anchorfile>a00218.html</anchorfile>
+      <anchor>ga333f79975b4eeb28a3d8fad3373583ce</anchor>
+      <arglist>(hwloc_topology_t topology, const char *xmlpath, unsigned long flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_export_xmlbuffer</name>
+      <anchorfile>a00218.html</anchorfile>
+      <anchor>gad33b7f7c11db10459505a3b1634fd3f1</anchor>
+      <arglist>(hwloc_topology_t topology, char **xmlbuffer, int *buflen, unsigned long flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>void</type>
+      <name>hwloc_free_xmlbuffer</name>
+      <anchorfile>a00218.html</anchorfile>
+      <anchor>ga293e4a6489f15fd16ad22a5734561cf1</anchor>
+      <arglist>(hwloc_topology_t topology, char *xmlbuffer)</arglist>
+    </member>
+    <member kind="function">
+      <type>void</type>
+      <name>hwloc_topology_set_userdata_export_callback</name>
+      <anchorfile>a00218.html</anchorfile>
+      <anchor>ga9d6ff0f7a8dd45be9aa8575ef31978cc</anchor>
+      <arglist>(hwloc_topology_t topology, void(*export_cb)(void *reserved, hwloc_topology_t topology, hwloc_obj_t obj))</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_export_obj_userdata</name>
+      <anchorfile>a00218.html</anchorfile>
+      <anchor>gaa541bdd628416dbbe97d0df69d3de958</anchor>
+      <arglist>(void *reserved, hwloc_topology_t topology, hwloc_obj_t obj, const char *name, const void *buffer, size_t length)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_export_obj_userdata_base64</name>
+      <anchorfile>a00218.html</anchorfile>
+      <anchor>ga1b7358137cec27bd073f58a606ecbaba</anchor>
+      <arglist>(void *reserved, hwloc_topology_t topology, hwloc_obj_t obj, const char *name, const void *buffer, size_t length)</arglist>
+    </member>
+    <member kind="function">
+      <type>void</type>
+      <name>hwloc_topology_set_userdata_import_callback</name>
+      <anchorfile>a00218.html</anchorfile>
+      <anchor>ga5ac6917ea7289955fb1ffda4353af9b0</anchor>
+      <arglist>(hwloc_topology_t topology, void(*import_cb)(hwloc_topology_t topology, hwloc_obj_t obj, const char *name, const void *buffer, size_t length))</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_syntheticexport</name>
+    <title>Exporting Topologies to Synthetic</title>
+    <filename>a00219.html</filename>
+    <member kind="enumeration">
+      <type></type>
+      <name>hwloc_topology_export_synthetic_flags_e</name>
+      <anchorfile>a00219.html</anchorfile>
+      <anchor>ga7ac6f97cc40bd50c40285084f869ba63</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_EXTENDED_TYPES</name>
+      <anchorfile>a00219.html</anchorfile>
+      <anchor>gga7ac6f97cc40bd50c40285084f869ba63a3b3bd4ba2ef9990810865e561034ccc9</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_ATTRS</name>
+      <anchorfile>a00219.html</anchorfile>
+      <anchor>gga7ac6f97cc40bd50c40285084f869ba63aaa2702ffba050bab079b3041aec737d4</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_V1</name>
+      <anchorfile>a00219.html</anchorfile>
+      <anchor>gga7ac6f97cc40bd50c40285084f869ba63a7896bdf4ccfcdcd09a9f76c0f5e3a5b8</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_IGNORE_MEMORY</name>
+      <anchorfile>a00219.html</anchorfile>
+      <anchor>gga7ac6f97cc40bd50c40285084f869ba63a22c57cf18e1da4a6c584fb783b552f9f</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_export_synthetic</name>
+      <anchorfile>a00219.html</anchorfile>
+      <anchor>ga24b7864a1c588309c4749f621f03b4c7</anchor>
+      <arglist>(hwloc_topology_t topology, char *buffer, size_t buflen, unsigned long flags)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_distances_get</name>
+    <title>Retrieve distances between objects</title>
+    <filename>a00220.html</filename>
+    <class kind="struct">hwloc_distances_s</class>
+    <member kind="enumeration">
+      <type></type>
+      <name>hwloc_distances_kind_e</name>
+      <anchorfile>a00220.html</anchorfile>
+      <anchor>gab1bb10d3adb85b52cdc6fe5a7f74f108</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_DISTANCES_KIND_FROM_OS</name>
+      <anchorfile>a00220.html</anchorfile>
+      <anchor>ggab1bb10d3adb85b52cdc6fe5a7f74f108a90dc38248c8d5392d4dd3e88f391e984</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_DISTANCES_KIND_FROM_USER</name>
+      <anchorfile>a00220.html</anchorfile>
+      <anchor>ggab1bb10d3adb85b52cdc6fe5a7f74f108a0148d7f9be833a04f5a55455437c227b</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_DISTANCES_KIND_MEANS_LATENCY</name>
+      <anchorfile>a00220.html</anchorfile>
+      <anchor>ggab1bb10d3adb85b52cdc6fe5a7f74f108afd6a3503fbc8f7c1a31235373cefc4c6</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_DISTANCES_KIND_MEANS_BANDWIDTH</name>
+      <anchorfile>a00220.html</anchorfile>
+      <anchor>ggab1bb10d3adb85b52cdc6fe5a7f74f108a41b19f141a3c0ffe85f9affaca4b0293</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES</name>
+      <anchorfile>a00220.html</anchorfile>
+      <anchor>ggab1bb10d3adb85b52cdc6fe5a7f74f108aa6cf2b6dfcf148b65952f811814efbe1</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumeration">
+      <type></type>
+      <name>hwloc_distances_transform_e</name>
+      <anchorfile>a00220.html</anchorfile>
+      <anchor>ga42859b651adec5ef0aaacb53ff220b00</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_DISTANCES_TRANSFORM_REMOVE_NULL</name>
+      <anchorfile>a00220.html</anchorfile>
+      <anchor>gga42859b651adec5ef0aaacb53ff220b00a4b7bdb7e3ccca30e03b7ae671e7f6dc1</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_DISTANCES_TRANSFORM_LINKS</name>
+      <anchorfile>a00220.html</anchorfile>
+      <anchor>gga42859b651adec5ef0aaacb53ff220b00a441e6bb393558319af3bb1f89f51f44d</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_DISTANCES_TRANSFORM_MERGE_SWITCH_PORTS</name>
+      <anchorfile>a00220.html</anchorfile>
+      <anchor>gga42859b651adec5ef0aaacb53ff220b00a3d2aaf03e17be54eddbb94aab327fded</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_DISTANCES_TRANSFORM_TRANSITIVE_CLOSURE</name>
+      <anchorfile>a00220.html</anchorfile>
+      <anchor>gga42859b651adec5ef0aaacb53ff220b00a1264abf9b9463f252995f37eb1057047</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_distances_get</name>
+      <anchorfile>a00220.html</anchorfile>
+      <anchor>ga613e6b2a5d0f06626ee8d0c12fa46691</anchor>
+      <arglist>(hwloc_topology_t topology, unsigned *nr, struct hwloc_distances_s **distances, unsigned long kind, unsigned long flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_distances_get_by_depth</name>
+      <anchorfile>a00220.html</anchorfile>
+      <anchor>ga5d1d35eccfcc2ebcef71a10972ce9b03</anchor>
+      <arglist>(hwloc_topology_t topology, int depth, unsigned *nr, struct hwloc_distances_s **distances, unsigned long kind, unsigned long flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_distances_get_by_type</name>
+      <anchorfile>a00220.html</anchorfile>
+      <anchor>gaaa6bfbc20072a4f4de132eec859067f6</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_obj_type_t type, unsigned *nr, struct hwloc_distances_s **distances, unsigned long kind, unsigned long flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_distances_get_by_name</name>
+      <anchorfile>a00220.html</anchorfile>
+      <anchor>gaa457f35b8745ca41ec17797c0d7b20f0</anchor>
+      <arglist>(hwloc_topology_t topology, const char *name, unsigned *nr, struct hwloc_distances_s **distances, unsigned long flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>const char *</type>
+      <name>hwloc_distances_get_name</name>
+      <anchorfile>a00220.html</anchorfile>
+      <anchor>gaa6f9697028c589cef0458edef5fe273f</anchor>
+      <arglist>(hwloc_topology_t topology, struct hwloc_distances_s *distances)</arglist>
+    </member>
+    <member kind="function">
+      <type>void</type>
+      <name>hwloc_distances_release</name>
+      <anchorfile>a00220.html</anchorfile>
+      <anchor>ga1dd78c1f9acd54f26aba0e284e97e51d</anchor>
+      <arglist>(hwloc_topology_t topology, struct hwloc_distances_s *distances)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_distances_transform</name>
+      <anchorfile>a00220.html</anchorfile>
+      <anchor>gabcadd041f3072999d68f2d94e38670f7</anchor>
+      <arglist>(hwloc_topology_t topology, struct hwloc_distances_s *distances, enum hwloc_distances_transform_e transform, void *transform_attr, unsigned long flags)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_distances_consult</name>
+    <title>Helpers for consulting distance matrices</title>
+    <filename>a00221.html</filename>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_distances_obj_index</name>
+      <anchorfile>a00221.html</anchorfile>
+      <anchor>gab9e770c7d56c5d6040f26bd1dc8854cd</anchor>
+      <arglist>(struct hwloc_distances_s *distances, hwloc_obj_t obj)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_distances_obj_pair_values</name>
+      <anchorfile>a00221.html</anchorfile>
+      <anchor>ga3c665b23056e3269f777b21a67148c82</anchor>
+      <arglist>(struct hwloc_distances_s *distances, hwloc_obj_t obj1, hwloc_obj_t obj2, hwloc_uint64_t *value1to2, hwloc_uint64_t *value2to1)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_distances_add</name>
+    <title>Add distances between objects</title>
+    <filename>a00222.html</filename>
+    <member kind="typedef">
+      <type>void *</type>
+      <name>hwloc_distances_add_handle_t</name>
+      <anchorfile>a00222.html</anchorfile>
+      <anchor>ga554a4c1e315265f961830e2b616e4989</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumeration">
+      <type></type>
+      <name>hwloc_distances_add_flag_e</name>
+      <anchorfile>a00222.html</anchorfile>
+      <anchor>ga22428b6bab271411e3834e6b4ca22e37</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_DISTANCES_ADD_FLAG_GROUP</name>
+      <anchorfile>a00222.html</anchorfile>
+      <anchor>gga22428b6bab271411e3834e6b4ca22e37a7f6baba797d70538d03c9d13052c62ab</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE</name>
+      <anchorfile>a00222.html</anchorfile>
+      <anchor>gga22428b6bab271411e3834e6b4ca22e37a5233ccf631c3bc53dd5c3e7a5d5c9b77</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="function">
+      <type>hwloc_distances_add_handle_t</type>
+      <name>hwloc_distances_add_create</name>
+      <anchorfile>a00222.html</anchorfile>
+      <anchor>ga823d38fa8d21dc338497fb0f79c96704</anchor>
+      <arglist>(hwloc_topology_t topology, const char *name, unsigned long kind, unsigned long flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_distances_add_values</name>
+      <anchorfile>a00222.html</anchorfile>
+      <anchor>ga8c9715481b0bce344c8a33c6e6a56469</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_distances_add_handle_t handle, unsigned nbobjs, hwloc_obj_t *objs, hwloc_uint64_t *values, unsigned long flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_distances_add_commit</name>
+      <anchorfile>a00222.html</anchorfile>
+      <anchor>ga1f5a29760ebb8f9af831e645315f553c</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_distances_add_handle_t handle, unsigned long flags)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_distances_remove</name>
+    <title>Remove distances between objects</title>
+    <filename>a00223.html</filename>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_distances_remove</name>
+      <anchorfile>a00223.html</anchorfile>
+      <anchor>gac188d9b64d9560255ce5f6d0a20f9c0a</anchor>
+      <arglist>(hwloc_topology_t topology)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_distances_remove_by_depth</name>
+      <anchorfile>a00223.html</anchorfile>
+      <anchor>gaa642a4c1a21c84f38ae23fca8a27845d</anchor>
+      <arglist>(hwloc_topology_t topology, int depth)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_distances_remove_by_type</name>
+      <anchorfile>a00223.html</anchorfile>
+      <anchor>ga93db53773c96f5b83815e8441e2ebb93</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_obj_type_t type)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_distances_release_remove</name>
+      <anchorfile>a00223.html</anchorfile>
+      <anchor>ga80bbf6f0db9af48c61780dd5152664c2</anchor>
+      <arglist>(hwloc_topology_t topology, struct hwloc_distances_s *distances)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_memattrs</name>
+    <title>Comparing memory node attributes for finding where to allocate on</title>
+    <filename>a00224.html</filename>
+    <class kind="struct">hwloc_location</class>
+    <member kind="typedef">
+      <type>unsigned</type>
+      <name>hwloc_memattr_id_t</name>
+      <anchorfile>a00224.html</anchorfile>
+      <anchor>gacc82003a8610be554615995f0996c888</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumeration">
+      <type></type>
+      <name>hwloc_memattr_id_e</name>
+      <anchorfile>a00224.html</anchorfile>
+      <anchor>gab4bde745db676fc2ea4b47011cd9a80e</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_MEMATTR_ID_CAPACITY</name>
+      <anchorfile>a00224.html</anchorfile>
+      <anchor>ggab4bde745db676fc2ea4b47011cd9a80eaa1cfa3ff3d56ff00ecabf7da4f5642cc</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_MEMATTR_ID_LOCALITY</name>
+      <anchorfile>a00224.html</anchorfile>
+      <anchor>ggab4bde745db676fc2ea4b47011cd9a80ea9334e3a4c30a67f491c6523255134efe</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_MEMATTR_ID_BANDWIDTH</name>
+      <anchorfile>a00224.html</anchorfile>
+      <anchor>ggab4bde745db676fc2ea4b47011cd9a80ea25fe3c7376ae6f9b584bacdb039f8c0f</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_MEMATTR_ID_READ_BANDWIDTH</name>
+      <anchorfile>a00224.html</anchorfile>
+      <anchor>ggab4bde745db676fc2ea4b47011cd9a80eac34dce925d3dadb7e255391d142b4828</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_MEMATTR_ID_WRITE_BANDWIDTH</name>
+      <anchorfile>a00224.html</anchorfile>
+      <anchor>ggab4bde745db676fc2ea4b47011cd9a80ea44762e8ebe327cfe665cccf1f58f7530</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_MEMATTR_ID_LATENCY</name>
+      <anchorfile>a00224.html</anchorfile>
+      <anchor>ggab4bde745db676fc2ea4b47011cd9a80ead1796413759b8b87b61ad195a9349b19</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_MEMATTR_ID_READ_LATENCY</name>
+      <anchorfile>a00224.html</anchorfile>
+      <anchor>ggab4bde745db676fc2ea4b47011cd9a80ea52cab56571c7fafea42a694d80ad3dd0</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_MEMATTR_ID_WRITE_LATENCY</name>
+      <anchorfile>a00224.html</anchorfile>
+      <anchor>ggab4bde745db676fc2ea4b47011cd9a80eaaf6cd383da87dc9f5e3a608a535a768e</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumeration">
+      <type></type>
+      <name>hwloc_location_type_e</name>
+      <anchorfile>a00224.html</anchorfile>
+      <anchor>ga33099ba58f607fc70925da3777688586</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_LOCATION_TYPE_CPUSET</name>
+      <anchorfile>a00224.html</anchorfile>
+      <anchor>gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_LOCATION_TYPE_OBJECT</name>
+      <anchorfile>a00224.html</anchorfile>
+      <anchor>gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumeration">
+      <type></type>
+      <name>hwloc_local_numanode_flag_e</name>
+      <anchorfile>a00224.html</anchorfile>
+      <anchor>gab9c963ca37255da71b00d94e1b106f9d</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_LOCAL_NUMANODE_FLAG_LARGER_LOCALITY</name>
+      <anchorfile>a00224.html</anchorfile>
+      <anchor>ggab9c963ca37255da71b00d94e1b106f9da200c6c133bb2125ba36d77ce9ca268cc</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_LOCAL_NUMANODE_FLAG_SMALLER_LOCALITY</name>
+      <anchorfile>a00224.html</anchorfile>
+      <anchor>ggab9c963ca37255da71b00d94e1b106f9daac9c5e3a2cfb1b193e4acfceaf3bad57</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_LOCAL_NUMANODE_FLAG_ALL</name>
+      <anchorfile>a00224.html</anchorfile>
+      <anchor>ggab9c963ca37255da71b00d94e1b106f9dab5778b34c961a5d56f98f1549edeaed0</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_memattr_get_by_name</name>
+      <anchorfile>a00224.html</anchorfile>
+      <anchor>ga79f44f8e1cfd2f97a19171417a75a137</anchor>
+      <arglist>(hwloc_topology_t topology, const char *name, hwloc_memattr_id_t *id)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_get_local_numanode_objs</name>
+      <anchorfile>a00224.html</anchorfile>
+      <anchor>ga569e80c5be7ef27649b0ef5aa52ffcdc</anchor>
+      <arglist>(hwloc_topology_t topology, struct hwloc_location *location, unsigned *nr, hwloc_obj_t *nodes, unsigned long flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_memattr_get_value</name>
+      <anchorfile>a00224.html</anchorfile>
+      <anchor>ga297e4a9adc2272446a4c7449dacef0df</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_memattr_id_t attribute, hwloc_obj_t target_node, struct hwloc_location *initiator, unsigned long flags, hwloc_uint64_t *value)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_memattr_get_best_target</name>
+      <anchorfile>a00224.html</anchorfile>
+      <anchor>ga884d1f2ad745c2fa69c1583c82d28f10</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_memattr_id_t attribute, struct hwloc_location *initiator, unsigned long flags, hwloc_obj_t *best_target, hwloc_uint64_t *value)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_memattr_get_best_initiator</name>
+      <anchorfile>a00224.html</anchorfile>
+      <anchor>ga9a453879892893cf8a3fcd431ade84cd</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_memattr_id_t attribute, hwloc_obj_t target, unsigned long flags, struct hwloc_location *best_initiator, hwloc_uint64_t *value)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_memattrs_manage</name>
+    <title>Managing memory attributes</title>
+    <filename>a00225.html</filename>
+    <member kind="enumeration">
+      <type></type>
+      <name>hwloc_memattr_flag_e</name>
+      <anchorfile>a00225.html</anchorfile>
+      <anchor>ga78aceb4cac4d614c0f5e82dbfeb779e5</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_MEMATTR_FLAG_HIGHER_FIRST</name>
+      <anchorfile>a00225.html</anchorfile>
+      <anchor>gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_MEMATTR_FLAG_LOWER_FIRST</name>
+      <anchorfile>a00225.html</anchorfile>
+      <anchor>gga78aceb4cac4d614c0f5e82dbfeb779e5a9601b5b0e1e68635e7e9901f28bd93bf</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_MEMATTR_FLAG_NEED_INITIATOR</name>
+      <anchorfile>a00225.html</anchorfile>
+      <anchor>gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_memattr_get_name</name>
+      <anchorfile>a00225.html</anchorfile>
+      <anchor>ga5300e9be1abdea2e00c18492148aecd0</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_memattr_id_t attribute, const char **name)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_memattr_get_flags</name>
+      <anchorfile>a00225.html</anchorfile>
+      <anchor>ga4c62b626085adeaffb233e5f2a03a5eb</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_memattr_id_t attribute, unsigned long *flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_memattr_register</name>
+      <anchorfile>a00225.html</anchorfile>
+      <anchor>ga770657d1e44b09e93e09f623936c1e5f</anchor>
+      <arglist>(hwloc_topology_t topology, const char *name, unsigned long flags, hwloc_memattr_id_t *id)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_memattr_set_value</name>
+      <anchorfile>a00225.html</anchorfile>
+      <anchor>ga960529c08b25cf15825e0f72ecceb504</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_memattr_id_t attribute, hwloc_obj_t target_node, struct hwloc_location *initiator, unsigned long flags, hwloc_uint64_t value)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_memattr_get_targets</name>
+      <anchorfile>a00225.html</anchorfile>
+      <anchor>gac8c06c1c89ab352c5db8e04a75033513</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_memattr_id_t attribute, struct hwloc_location *initiator, unsigned long flags, unsigned *nr, hwloc_obj_t *targets, hwloc_uint64_t *values)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_memattr_get_initiators</name>
+      <anchorfile>a00225.html</anchorfile>
+      <anchor>ga049aaa860dcbbf0792f0fd4251a99ec0</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_memattr_id_t attribute, hwloc_obj_t target_node, unsigned long flags, unsigned *nr, struct hwloc_location *initiators, hwloc_uint64_t *values)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_cpukinds</name>
+    <title>Kinds of CPU cores</title>
+    <filename>a00226.html</filename>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_cpukinds_get_nr</name>
+      <anchorfile>a00226.html</anchorfile>
+      <anchor>ga7553f7c6d3920b169f3fc18dfe6a33e3</anchor>
+      <arglist>(hwloc_topology_t topology, unsigned long flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_cpukinds_get_by_cpuset</name>
+      <anchorfile>a00226.html</anchorfile>
+      <anchor>gaf979833aab18d2e7f4b17c932cbcf5d8</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_const_bitmap_t cpuset, unsigned long flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_cpukinds_get_info</name>
+      <anchorfile>a00226.html</anchorfile>
+      <anchor>gae1b38fbe9c645583fc16052ce6fbb275</anchor>
+      <arglist>(hwloc_topology_t topology, unsigned kind_index, hwloc_bitmap_t cpuset, int *efficiency, unsigned *nr_infos, struct hwloc_info_s **infos, unsigned long flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_cpukinds_register</name>
+      <anchorfile>a00226.html</anchorfile>
+      <anchor>ga6164ba92cfd06f530ec2c4a18a0dd5a9</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_bitmap_t cpuset, int forced_efficiency, unsigned nr_infos, struct hwloc_info_s *infos, unsigned long flags)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_linux</name>
+    <title>Linux-specific helpers</title>
+    <filename>a00227.html</filename>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_linux_set_tid_cpubind</name>
+      <anchorfile>a00227.html</anchorfile>
+      <anchor>ga630e699c56b5f3d2e534b475944c216e</anchor>
+      <arglist>(hwloc_topology_t topology, pid_t tid, hwloc_const_cpuset_t set)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_linux_get_tid_cpubind</name>
+      <anchorfile>a00227.html</anchorfile>
+      <anchor>gaddcb985cb56337a4d6693cee72e7bf94</anchor>
+      <arglist>(hwloc_topology_t topology, pid_t tid, hwloc_cpuset_t set)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_linux_get_tid_last_cpu_location</name>
+      <anchorfile>a00227.html</anchorfile>
+      <anchor>gacc7945c2d06c6db1e58f8fd953009134</anchor>
+      <arglist>(hwloc_topology_t topology, pid_t tid, hwloc_bitmap_t set)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_linux_read_path_as_cpumask</name>
+      <anchorfile>a00227.html</anchorfile>
+      <anchor>gaf72d83e273803226ce772973e37b85de</anchor>
+      <arglist>(const char *path, hwloc_bitmap_t set)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_linux_libnuma_ulongs</name>
+    <title>Interoperability with Linux libnuma unsigned long masks</title>
+    <filename>a00228.html</filename>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_cpuset_to_linux_libnuma_ulongs</name>
+      <anchorfile>a00228.html</anchorfile>
+      <anchor>gae577962390f84b0b12f503314ab0f972</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t cpuset, unsigned long *mask, unsigned long *maxnode)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_nodeset_to_linux_libnuma_ulongs</name>
+      <anchorfile>a00228.html</anchorfile>
+      <anchor>ga585ccf818d2f217f4e53f9c6506c3128</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_const_nodeset_t nodeset, unsigned long *mask, unsigned long *maxnode)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_cpuset_from_linux_libnuma_ulongs</name>
+      <anchorfile>a00228.html</anchorfile>
+      <anchor>ga0e9d051e068940f722f6fdc61814149d</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_cpuset_t cpuset, const unsigned long *mask, unsigned long maxnode)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_nodeset_from_linux_libnuma_ulongs</name>
+      <anchorfile>a00228.html</anchorfile>
+      <anchor>gad8491c672eb2594cc5e7b0a026867192</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_nodeset_t nodeset, const unsigned long *mask, unsigned long maxnode)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_linux_libnuma_bitmask</name>
+    <title>Interoperability with Linux libnuma bitmask</title>
+    <filename>a00229.html</filename>
+    <member kind="function" static="yes">
+      <type>static struct bitmask *</type>
+      <name>hwloc_cpuset_to_linux_libnuma_bitmask</name>
+      <anchorfile>a00229.html</anchorfile>
+      <anchor>gad8769b4544c0aeef154fc8223144e343</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t cpuset)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static struct bitmask *</type>
+      <name>hwloc_nodeset_to_linux_libnuma_bitmask</name>
+      <anchorfile>a00229.html</anchorfile>
+      <anchor>gadfaa14c1bec76965ac2e05f0c3f3473b</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_const_nodeset_t nodeset)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_cpuset_from_linux_libnuma_bitmask</name>
+      <anchorfile>a00229.html</anchorfile>
+      <anchor>ga37c8421110b1842414809019098794ef</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_cpuset_t cpuset, const struct bitmask *bitmask)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_nodeset_from_linux_libnuma_bitmask</name>
+      <anchorfile>a00229.html</anchorfile>
+      <anchor>gaaca6bff3086aad5bdbd2f4c5f0ad14cc</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_nodeset_t nodeset, const struct bitmask *bitmask)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_windows</name>
+    <title>Windows-specific helpers</title>
+    <filename>a00230.html</filename>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_windows_get_nr_processor_groups</name>
+      <anchorfile>a00230.html</anchorfile>
+      <anchor>gaa4376a1969660a344911d117f645d3dd</anchor>
+      <arglist>(hwloc_topology_t topology, unsigned long flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_windows_get_processor_group_cpuset</name>
+      <anchorfile>a00230.html</anchorfile>
+      <anchor>ga167d1f28d3bd9defe1ffa940c14e8dd1</anchor>
+      <arglist>(hwloc_topology_t topology, unsigned pg_index, hwloc_cpuset_t cpuset, unsigned long flags)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_glibc_sched</name>
+    <title>Interoperability with glibc sched affinity</title>
+    <filename>a00231.html</filename>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_cpuset_to_glibc_sched_affinity</name>
+      <anchorfile>a00231.html</anchorfile>
+      <anchor>ga88699a0c86c66a9b7baa3468cd9d24c3</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t hwlocset, cpu_set_t *schedset, size_t schedsetsize)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_cpuset_from_glibc_sched_affinity</name>
+      <anchorfile>a00231.html</anchorfile>
+      <anchor>ga8ec807ec17de57fa77aa5cfd6c8e4bfb</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_cpuset_t hwlocset, const cpu_set_t *schedset, size_t schedsetsize)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_opencl</name>
+    <title>Interoperability with OpenCL</title>
+    <filename>a00232.html</filename>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_opencl_get_device_pci_busid</name>
+      <anchorfile>a00232.html</anchorfile>
+      <anchor>gab89e4d20f8a353299351b41849e35ac9</anchor>
+      <arglist>(cl_device_id device, unsigned *domain, unsigned *bus, unsigned *dev, unsigned *func)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_opencl_get_device_cpuset</name>
+      <anchorfile>a00232.html</anchorfile>
+      <anchor>gacc32737d4648d16b0d292438f210ec90</anchor>
+      <arglist>(hwloc_topology_t topology, cl_device_id device, hwloc_cpuset_t set)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_opencl_get_device_osdev_by_index</name>
+      <anchorfile>a00232.html</anchorfile>
+      <anchor>gae39352d124cb330eb37b84b418ed6cc5</anchor>
+      <arglist>(hwloc_topology_t topology, unsigned platform_index, unsigned device_index)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_opencl_get_device_osdev</name>
+      <anchorfile>a00232.html</anchorfile>
+      <anchor>gadabfa6516aa12e5d8f79b9b4dd9f3cf8</anchor>
+      <arglist>(hwloc_topology_t topology, cl_device_id device)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_cuda</name>
+    <title>Interoperability with the CUDA Driver API</title>
+    <filename>a00233.html</filename>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_cuda_get_device_pci_ids</name>
+      <anchorfile>a00233.html</anchorfile>
+      <anchor>ga1084285e8ff8b7df91c28917637481c6</anchor>
+      <arglist>(hwloc_topology_t topology, CUdevice cudevice, int *domain, int *bus, int *dev)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_cuda_get_device_cpuset</name>
+      <anchorfile>a00233.html</anchorfile>
+      <anchor>gaec41c6b4dc3361156beb7dea2a74f5a3</anchor>
+      <arglist>(hwloc_topology_t topology, CUdevice cudevice, hwloc_cpuset_t set)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_cuda_get_device_pcidev</name>
+      <anchorfile>a00233.html</anchorfile>
+      <anchor>ga11fed607fa404e29e8da010f3ec128e4</anchor>
+      <arglist>(hwloc_topology_t topology, CUdevice cudevice)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_cuda_get_device_osdev</name>
+      <anchorfile>a00233.html</anchorfile>
+      <anchor>ga252cb72175f1a2d682f883a0add80a66</anchor>
+      <arglist>(hwloc_topology_t topology, CUdevice cudevice)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_cuda_get_device_osdev_by_index</name>
+      <anchorfile>a00233.html</anchorfile>
+      <anchor>ga12ee892994ed037e8f64bbffda02cf2e</anchor>
+      <arglist>(hwloc_topology_t topology, unsigned idx)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_cudart</name>
+    <title>Interoperability with the CUDA Runtime API</title>
+    <filename>a00234.html</filename>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_cudart_get_device_pci_ids</name>
+      <anchorfile>a00234.html</anchorfile>
+      <anchor>gad8b701d9a34923e34bd58defd4c1e704</anchor>
+      <arglist>(hwloc_topology_t topology, int idx, int *domain, int *bus, int *dev)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_cudart_get_device_cpuset</name>
+      <anchorfile>a00234.html</anchorfile>
+      <anchor>ga187ca00c6e12800a25151ce331620980</anchor>
+      <arglist>(hwloc_topology_t topology, int idx, hwloc_cpuset_t set)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_cudart_get_device_pcidev</name>
+      <anchorfile>a00234.html</anchorfile>
+      <anchor>gaeda4e6efbb36b518b2c286434ad23bb2</anchor>
+      <arglist>(hwloc_topology_t topology, int idx)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_cudart_get_device_osdev_by_index</name>
+      <anchorfile>a00234.html</anchorfile>
+      <anchor>gac0f3eeaf7712919f298097b1a21307b0</anchor>
+      <arglist>(hwloc_topology_t topology, unsigned idx)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_nvml</name>
+    <title>Interoperability with the NVIDIA Management Library</title>
+    <filename>a00235.html</filename>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_nvml_get_device_cpuset</name>
+      <anchorfile>a00235.html</anchorfile>
+      <anchor>ga26cf0036d09ec4d7cb692380fac9659d</anchor>
+      <arglist>(hwloc_topology_t topology, nvmlDevice_t device, hwloc_cpuset_t set)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_nvml_get_device_osdev_by_index</name>
+      <anchorfile>a00235.html</anchorfile>
+      <anchor>gacd50fd0e2766ee05bc13234b46714756</anchor>
+      <arglist>(hwloc_topology_t topology, unsigned idx)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_nvml_get_device_osdev</name>
+      <anchorfile>a00235.html</anchorfile>
+      <anchor>gaf176159b5760a191871eff23f5a69ee9</anchor>
+      <arglist>(hwloc_topology_t topology, nvmlDevice_t device)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_rsmi</name>
+    <title>Interoperability with the ROCm SMI Management Library</title>
+    <filename>a00236.html</filename>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_rsmi_get_device_cpuset</name>
+      <anchorfile>a00236.html</anchorfile>
+      <anchor>gaf939e697e3769c3524255318262b9c29</anchor>
+      <arglist>(hwloc_topology_t topology, uint32_t dv_ind, hwloc_cpuset_t set)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_rsmi_get_device_osdev_by_index</name>
+      <anchorfile>a00236.html</anchorfile>
+      <anchor>ga507d0acdd5e9ac374a8d120d59604c80</anchor>
+      <arglist>(hwloc_topology_t topology, uint32_t dv_ind)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_rsmi_get_device_osdev</name>
+      <anchorfile>a00236.html</anchorfile>
+      <anchor>gaba05bf9710655bb5b1439bee654340ba</anchor>
+      <arglist>(hwloc_topology_t topology, uint32_t dv_ind)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_levelzero</name>
+    <title>Interoperability with the oneAPI Level Zero interface.</title>
+    <filename>a00237.html</filename>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_levelzero_get_device_cpuset</name>
+      <anchorfile>a00237.html</anchorfile>
+      <anchor>ga66281a9ba621357b1c7070b4fa19b5b8</anchor>
+      <arglist>(hwloc_topology_t topology, ze_device_handle_t device, hwloc_cpuset_t set)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_levelzero_get_device_osdev</name>
+      <anchorfile>a00237.html</anchorfile>
+      <anchor>gaf06cb737abcd2dc6db894c8914302d85</anchor>
+      <arglist>(hwloc_topology_t topology, ze_device_handle_t device)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_gl</name>
+    <title>Interoperability with OpenGL displays</title>
+    <filename>a00238.html</filename>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_gl_get_display_osdev_by_port_device</name>
+      <anchorfile>a00238.html</anchorfile>
+      <anchor>ga4d66a77e4fe4051d6e5b772c1b8fcec5</anchor>
+      <arglist>(hwloc_topology_t topology, unsigned port, unsigned device)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_gl_get_display_osdev_by_name</name>
+      <anchorfile>a00238.html</anchorfile>
+      <anchor>ga2d36ef441d1dfddf49cfb5c01bd58d8e</anchor>
+      <arglist>(hwloc_topology_t topology, const char *name)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_gl_get_display_by_osdev</name>
+      <anchorfile>a00238.html</anchorfile>
+      <anchor>ga936665ab5f0d29a081c4b78d11f4ad07</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_obj_t osdev, unsigned *port, unsigned *device)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_openfabrics</name>
+    <title>Interoperability with OpenFabrics</title>
+    <filename>a00239.html</filename>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_ibv_get_device_cpuset</name>
+      <anchorfile>a00239.html</anchorfile>
+      <anchor>ga3ea0d838c1e7f1671b35687aae2da6ae</anchor>
+      <arglist>(hwloc_topology_t topology, struct ibv_device *ibdev, hwloc_cpuset_t set)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_ibv_get_device_osdev_by_name</name>
+      <anchorfile>a00239.html</anchorfile>
+      <anchor>ga31d794567f4420bbdc8baa7bf8bf6138</anchor>
+      <arglist>(hwloc_topology_t topology, const char *ibname)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static hwloc_obj_t</type>
+      <name>hwloc_ibv_get_device_osdev</name>
+      <anchorfile>a00239.html</anchorfile>
+      <anchor>ga7324cdfd5db6ed2669c051ef7e1b64e1</anchor>
+      <arglist>(hwloc_topology_t topology, struct ibv_device *ibdev)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_diff</name>
+    <title>Topology differences</title>
+    <filename>a00240.html</filename>
+    <class kind="union">hwloc_topology_diff_obj_attr_u</class>
+    <class kind="union">hwloc_topology_diff_u</class>
+    <member kind="typedef">
+      <type>enum hwloc_topology_diff_obj_attr_type_e</type>
+      <name>hwloc_topology_diff_obj_attr_type_t</name>
+      <anchorfile>a00240.html</anchorfile>
+      <anchor>ga74a3fefbaa17582fea86d76b312d6254</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="typedef">
+      <type>enum hwloc_topology_diff_type_e</type>
+      <name>hwloc_topology_diff_type_t</name>
+      <anchorfile>a00240.html</anchorfile>
+      <anchor>ga8470f631b7365c839d3e40d38c5b6291</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="typedef">
+      <type>union hwloc_topology_diff_u *</type>
+      <name>hwloc_topology_diff_t</name>
+      <anchorfile>a00240.html</anchorfile>
+      <anchor>ga1bd6363f26f7961f83153aaa484a9b85</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumeration">
+      <type></type>
+      <name>hwloc_topology_diff_obj_attr_type_e</name>
+      <anchorfile>a00240.html</anchorfile>
+      <anchor>ga86f044210b0a9e9fa83acbdbbf7e05fd</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_SIZE</name>
+      <anchorfile>a00240.html</anchorfile>
+      <anchor>gga86f044210b0a9e9fa83acbdbbf7e05fdabc7f0c7ed0b6864e902f4b70f2c7bc94</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_NAME</name>
+      <anchorfile>a00240.html</anchorfile>
+      <anchor>gga86f044210b0a9e9fa83acbdbbf7e05fda94a8f37c51d62d15ac6192665dd49310</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_INFO</name>
+      <anchorfile>a00240.html</anchorfile>
+      <anchor>gga86f044210b0a9e9fa83acbdbbf7e05fda63430bf932434bc456282f636d39c2c2</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumeration">
+      <type></type>
+      <name>hwloc_topology_diff_type_e</name>
+      <anchorfile>a00240.html</anchorfile>
+      <anchor>ga38b28b7423b85a3321e6d0062d5f83d0</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TOPOLOGY_DIFF_OBJ_ATTR</name>
+      <anchorfile>a00240.html</anchorfile>
+      <anchor>gga38b28b7423b85a3321e6d0062d5f83d0accbcaee230f79989debb284c8626f0c0</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX</name>
+      <anchorfile>a00240.html</anchorfile>
+      <anchor>gga38b28b7423b85a3321e6d0062d5f83d0a3dc01fdeff355efe3fb2516bb454a147</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumeration">
+      <type></type>
+      <name>hwloc_topology_diff_apply_flags_e</name>
+      <anchorfile>a00240.html</anchorfile>
+      <anchor>gada4c1273ce020afaf02b649496f7edf5</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_TOPOLOGY_DIFF_APPLY_REVERSE</name>
+      <anchorfile>a00240.html</anchorfile>
+      <anchor>ggada4c1273ce020afaf02b649496f7edf5a821a160512d67ea0dd05dab873d2fc54</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_diff_build</name>
+      <anchorfile>a00240.html</anchorfile>
+      <anchor>ga8a1754f69fbb31364ea3ea2c39827c9f</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_topology_t newtopology, unsigned long flags, hwloc_topology_diff_t *diff)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_diff_apply</name>
+      <anchorfile>a00240.html</anchorfile>
+      <anchor>gae7b350d7e7478a4c6047b08aa6544f40</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_topology_diff_t diff, unsigned long flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_diff_destroy</name>
+      <anchorfile>a00240.html</anchorfile>
+      <anchor>ga5dcff18f80583ac6505a94ba2877fd1b</anchor>
+      <arglist>(hwloc_topology_diff_t diff)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_diff_load_xml</name>
+      <anchorfile>a00240.html</anchorfile>
+      <anchor>ga2cd902ce8766e90d4f2523a8e87640e9</anchor>
+      <arglist>(const char *xmlpath, hwloc_topology_diff_t *diff, char **refname)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_diff_export_xml</name>
+      <anchorfile>a00240.html</anchorfile>
+      <anchor>ga8a14dd7d01efbdd97af7fe85e8b84b20</anchor>
+      <arglist>(hwloc_topology_diff_t diff, const char *refname, const char *xmlpath)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_diff_load_xmlbuffer</name>
+      <anchorfile>a00240.html</anchorfile>
+      <anchor>gad693810a5c51628529b9dd56f040fb81</anchor>
+      <arglist>(const char *xmlbuffer, int buflen, hwloc_topology_diff_t *diff, char **refname)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_diff_export_xmlbuffer</name>
+      <anchorfile>a00240.html</anchorfile>
+      <anchor>gaa2f0918df60c1c4a0bef9411f7d92a13</anchor>
+      <arglist>(hwloc_topology_diff_t diff, const char *refname, char **xmlbuffer, int *buflen)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_shmem</name>
+    <title>Sharing topologies between processes</title>
+    <filename>a00241.html</filename>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_shmem_topology_get_length</name>
+      <anchorfile>a00241.html</anchorfile>
+      <anchor>ga772ab52750cdd0eec85128df24888001</anchor>
+      <arglist>(hwloc_topology_t topology, size_t *lengthp, unsigned long flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_shmem_topology_write</name>
+      <anchorfile>a00241.html</anchorfile>
+      <anchor>ga61b20e346fc76f76420e3a88cc80a671</anchor>
+      <arglist>(hwloc_topology_t topology, int fd, hwloc_uint64_t fileoffset, void *mmap_address, size_t length, unsigned long flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_shmem_topology_adopt</name>
+      <anchorfile>a00241.html</anchorfile>
+      <anchor>ga21545bd0f09d9b554c8e60a630e0e629</anchor>
+      <arglist>(hwloc_topology_t *topologyp, int fd, hwloc_uint64_t fileoffset, void *mmap_address, size_t length, unsigned long flags)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_disc_components</name>
+    <title>Components and Plugins: Discovery components</title>
+    <filename>a00242.html</filename>
+    <class kind="struct">hwloc_disc_component</class>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_disc_backends</name>
+    <title>Components and Plugins: Discovery backends</title>
+    <filename>a00243.html</filename>
+    <class kind="struct">hwloc_disc_status</class>
+    <class kind="struct">hwloc_backend</class>
+    <member kind="typedef">
+      <type>enum hwloc_disc_phase_e</type>
+      <name>hwloc_disc_phase_t</name>
+      <anchorfile>a00243.html</anchorfile>
+      <anchor>ga600bba1a62022d5f516800649b1edb61</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumeration">
+      <type></type>
+      <name>hwloc_disc_phase_e</name>
+      <anchorfile>a00243.html</anchorfile>
+      <anchor>ga8c314121c2fc478161bcce758688b9a1</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_DISC_PHASE_GLOBAL</name>
+      <anchorfile>a00243.html</anchorfile>
+      <anchor>gga8c314121c2fc478161bcce758688b9a1ab41c626c79e9ccb1e7d41e7076972283</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_DISC_PHASE_CPU</name>
+      <anchorfile>a00243.html</anchorfile>
+      <anchor>gga8c314121c2fc478161bcce758688b9a1a6360474df197027761a69bd5fc620250</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_DISC_PHASE_MEMORY</name>
+      <anchorfile>a00243.html</anchorfile>
+      <anchor>gga8c314121c2fc478161bcce758688b9a1ac4264a243844c5fbbff495cdb1b4d51d</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_DISC_PHASE_PCI</name>
+      <anchorfile>a00243.html</anchorfile>
+      <anchor>gga8c314121c2fc478161bcce758688b9a1a677c52064dd987af4988346319b3675a</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_DISC_PHASE_IO</name>
+      <anchorfile>a00243.html</anchorfile>
+      <anchor>gga8c314121c2fc478161bcce758688b9a1aa8e10626cba9af72f5605a1acbdc0015</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_DISC_PHASE_MISC</name>
+      <anchorfile>a00243.html</anchorfile>
+      <anchor>gga8c314121c2fc478161bcce758688b9a1a8a7cde9bff0ab0d085b102a3e934939b</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_DISC_PHASE_ANNOTATE</name>
+      <anchorfile>a00243.html</anchorfile>
+      <anchor>gga8c314121c2fc478161bcce758688b9a1a68ca5c7ad75a6d9e5355689411621773</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_DISC_PHASE_TWEAK</name>
+      <anchorfile>a00243.html</anchorfile>
+      <anchor>gga8c314121c2fc478161bcce758688b9a1ada3ed3f00e74909353d6ea4a96cde5ad</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumeration">
+      <type></type>
+      <name>hwloc_disc_status_flag_e</name>
+      <anchorfile>a00243.html</anchorfile>
+      <anchor>gaae1b38cf9b12e489884ce2a07275964b</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_DISC_STATUS_FLAG_GOT_ALLOWED_RESOURCES</name>
+      <anchorfile>a00243.html</anchorfile>
+      <anchor>ggaae1b38cf9b12e489884ce2a07275964ba205d644d54a0840bd9165fce7d19e6b1</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="function">
+      <type>struct hwloc_backend *</type>
+      <name>hwloc_backend_alloc</name>
+      <anchorfile>a00243.html</anchorfile>
+      <anchor>gadb068565ab6043cbe4d16bfcce067a61</anchor>
+      <arglist>(struct hwloc_topology *topology, struct hwloc_disc_component *component)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_backend_enable</name>
+      <anchorfile>a00243.html</anchorfile>
+      <anchor>ga4715779d7191833e9b1a7490989a7497</anchor>
+      <arglist>(struct hwloc_backend *backend)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_generic_components</name>
+    <title>Components and Plugins: Generic components</title>
+    <filename>a00244.html</filename>
+    <class kind="struct">hwloc_component</class>
+    <member kind="typedef">
+      <type>enum hwloc_component_type_e</type>
+      <name>hwloc_component_type_t</name>
+      <anchorfile>a00244.html</anchorfile>
+      <anchor>ga31a5a455f4e666b936f0a9e8fb9a0f47</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumeration">
+      <type></type>
+      <name>hwloc_component_type_e</name>
+      <anchorfile>a00244.html</anchorfile>
+      <anchor>ga397a1bf7d21dd073320ad0045340f463</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_COMPONENT_TYPE_DISC</name>
+      <anchorfile>a00244.html</anchorfile>
+      <anchor>gga397a1bf7d21dd073320ad0045340f463a5d6e561f467fe9795a29e7368b613900</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>HWLOC_COMPONENT_TYPE_XML</name>
+      <anchorfile>a00244.html</anchorfile>
+      <anchor>gga397a1bf7d21dd073320ad0045340f463adea00cd839c2141c032e1569fd5592bd</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_components_core_funcs</name>
+    <title>Components and Plugins: Core functions to be used by components</title>
+    <filename>a00245.html</filename>
+    <member kind="define">
+      <type>#define</type>
+      <name>HWLOC_SHOW_CRITICAL_ERRORS</name>
+      <anchorfile>a00245.html</anchorfile>
+      <anchor>gafce07a2a959190a6c7126b321bef202f</anchor>
+      <arglist>()</arglist>
+    </member>
+    <member kind="define">
+      <type>#define</type>
+      <name>HWLOC_SHOW_ALL_ERRORS</name>
+      <anchorfile>a00245.html</anchorfile>
+      <anchor>ga3e48b6ac00ed6a40aea975e23eddcdbb</anchor>
+      <arglist>()</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_hide_errors</name>
+      <anchorfile>a00245.html</anchorfile>
+      <anchor>gab527c1e0f243f057d31a724794ad9f88</anchor>
+      <arglist>(void)</arglist>
+    </member>
+    <member kind="function">
+      <type>hwloc_obj_t</type>
+      <name>hwloc__insert_object_by_cpuset</name>
+      <anchorfile>a00245.html</anchorfile>
+      <anchor>ga1e105cfe3c8e77f34cc6df3841deebbc</anchor>
+      <arglist>(struct hwloc_topology *topology, hwloc_obj_t root, hwloc_obj_t obj, const char *reason)</arglist>
+    </member>
+    <member kind="function">
+      <type>void</type>
+      <name>hwloc_insert_object_by_parent</name>
+      <anchorfile>a00245.html</anchorfile>
+      <anchor>ga0ef97debde503b56367689b07bb3e901</anchor>
+      <arglist>(struct hwloc_topology *topology, hwloc_obj_t parent, hwloc_obj_t obj)</arglist>
+    </member>
+    <member kind="function">
+      <type>hwloc_obj_t</type>
+      <name>hwloc_alloc_setup_object</name>
+      <anchorfile>a00245.html</anchorfile>
+      <anchor>ga0b5c75b2dc37cea2e8a29c4812baf4b3</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_obj_type_t type, unsigned os_index)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_obj_add_children_sets</name>
+      <anchorfile>a00245.html</anchorfile>
+      <anchor>ga754b61041ceee9685534a2c5d3cd0156</anchor>
+      <arglist>(hwloc_obj_t obj)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_topology_reconnect</name>
+      <anchorfile>a00245.html</anchorfile>
+      <anchor>ga120d8bd74922e1030b621409a6b0be61</anchor>
+      <arglist>(hwloc_topology_t topology, unsigned long flags)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_plugin_check_namespace</name>
+      <anchorfile>a00245.html</anchorfile>
+      <anchor>gac2eaed287bb215cf0bd33014e9e1d374</anchor>
+      <arglist>(const char *pluginname, const char *symbol)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_components_filtering</name>
+    <title>Components and Plugins: Filtering objects</title>
+    <filename>a00246.html</filename>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_filter_check_pcidev_subtype_important</name>
+      <anchorfile>a00246.html</anchorfile>
+      <anchor>ga60203db6459ebf275bf48c40a37661a0</anchor>
+      <arglist>(unsigned classid)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_filter_check_osdev_subtype_important</name>
+      <anchorfile>a00246.html</anchorfile>
+      <anchor>gac7d57a6d669820f360cf2a070a396560</anchor>
+      <arglist>(hwloc_obj_osdev_type_t subtype)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_filter_check_keep_object_type</name>
+      <anchorfile>a00246.html</anchorfile>
+      <anchor>ga2f402a43025a8a91e8513be1a15e4635</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_obj_type_t type)</arglist>
+    </member>
+    <member kind="function" static="yes">
+      <type>static int</type>
+      <name>hwloc_filter_check_keep_object</name>
+      <anchorfile>a00246.html</anchorfile>
+      <anchor>ga4d2fdce071e5646ef147c9ff1539d1c9</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_obj_t obj)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_components_pcidisc</name>
+    <title>Components and Plugins: helpers for PCI discovery</title>
+    <filename>a00247.html</filename>
+    <member kind="function">
+      <type>unsigned</type>
+      <name>hwloc_pcidisc_find_cap</name>
+      <anchorfile>a00247.html</anchorfile>
+      <anchor>ga706f71cfea09d547d2cbafa642d6e03b</anchor>
+      <arglist>(const unsigned char *config, unsigned cap)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_pcidisc_find_linkspeed</name>
+      <anchorfile>a00247.html</anchorfile>
+      <anchor>ga51d1ebcbf9729987c9d17df3aa57d209</anchor>
+      <arglist>(const unsigned char *config, unsigned offset, float *linkspeed)</arglist>
+    </member>
+    <member kind="function">
+      <type>hwloc_obj_type_t</type>
+      <name>hwloc_pcidisc_check_bridge_type</name>
+      <anchorfile>a00247.html</anchorfile>
+      <anchor>ga6c55fb80c3d0c8c8e61078b3f38adde8</anchor>
+      <arglist>(unsigned device_class, const unsigned char *config)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_pcidisc_find_bridge_buses</name>
+      <anchorfile>a00247.html</anchorfile>
+      <anchor>ga95acf6822a49447c11067d0b843965ba</anchor>
+      <arglist>(unsigned domain, unsigned bus, unsigned dev, unsigned func, unsigned *secondary_busp, unsigned *subordinate_busp, const unsigned char *config)</arglist>
+    </member>
+    <member kind="function">
+      <type>void</type>
+      <name>hwloc_pcidisc_tree_insert_by_busid</name>
+      <anchorfile>a00247.html</anchorfile>
+      <anchor>gab76ddc4f55db8101ef0d44317965128c</anchor>
+      <arglist>(struct hwloc_obj **treep, struct hwloc_obj *obj)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_pcidisc_tree_attach</name>
+      <anchorfile>a00247.html</anchorfile>
+      <anchor>gabda1d6c1799e50b9226f8a4da9bd29ea</anchor>
+      <arglist>(struct hwloc_topology *topology, struct hwloc_obj *tree)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>hwlocality_components_pcifind</name>
+    <title>Components and Plugins: finding PCI objects during other discoveries</title>
+    <filename>a00248.html</filename>
+    <member kind="typedef">
+      <type>void *</type>
+      <name>hwloc_backend_distances_add_handle_t</name>
+      <anchorfile>a00248.html</anchorfile>
+      <anchor>gafe5e49d32dd0a28ead94b6e31048e042</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="function">
+      <type>struct hwloc_obj *</type>
+      <name>hwloc_pci_find_parent_by_busid</name>
+      <anchorfile>a00248.html</anchorfile>
+      <anchor>ga7964833550947636ab8975909de3fa98</anchor>
+      <arglist>(struct hwloc_topology *topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)</arglist>
+    </member>
+    <member kind="function">
+      <type>struct hwloc_obj *</type>
+      <name>hwloc_pci_find_by_busid</name>
+      <anchorfile>a00248.html</anchorfile>
+      <anchor>ga1cc465a010c5f75e0f280cdc8e27197d</anchor>
+      <arglist>(struct hwloc_topology *topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)</arglist>
+    </member>
+    <member kind="function">
+      <type>hwloc_backend_distances_add_handle_t</type>
+      <name>hwloc_backend_distances_add_create</name>
+      <anchorfile>a00248.html</anchorfile>
+      <anchor>gaa66a0bd519a5b1183a3e9b0c35a7f6cc</anchor>
+      <arglist>(hwloc_topology_t topology, const char *name, unsigned long kind, unsigned long flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_backend_distances_add_values</name>
+      <anchorfile>a00248.html</anchorfile>
+      <anchor>gaa27036bd83102f8e406f1051d560da6c</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_backend_distances_add_handle_t handle, unsigned nbobjs, hwloc_obj_t *objs, hwloc_uint64_t *values, unsigned long flags)</arglist>
+    </member>
+    <member kind="function">
+      <type>int</type>
+      <name>hwloc_backend_distances_add_commit</name>
+      <anchorfile>a00248.html</anchorfile>
+      <anchor>ga1468ac5f0bfb0e18bfc04c9ce5a5a4a3</anchor>
+      <arglist>(hwloc_topology_t topology, hwloc_backend_distances_add_handle_t handle, unsigned long flags)</arglist>
+    </member>
+  </compound>
+  <compound kind="group">
+    <name>netloc_api</name>
+    <title>Netloc API</title>
+    <filename>a00249.html</filename>
+    <member kind="enumvalue">
+      <name>NETLOC_SUCCESS</name>
+      <anchorfile>a00249.html</anchorfile>
+      <anchor>gga61dadd085c1777f559549e05962b2c9ea4deb864e4b46fe70b83c3220442a627c</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>NETLOC_ERROR</name>
+      <anchorfile>a00249.html</anchorfile>
+      <anchor>gga61dadd085c1777f559549e05962b2c9ea4b33f8da6efc963562a93569ac8b349a</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>NETLOC_ERROR_NOTDIR</name>
+      <anchorfile>a00249.html</anchorfile>
+      <anchor>gga61dadd085c1777f559549e05962b2c9ea6e4322619d38dec18dbd16a606b14aa8</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>NETLOC_ERROR_NOENT</name>
+      <anchorfile>a00249.html</anchorfile>
+      <anchor>gga61dadd085c1777f559549e05962b2c9ea81bc77a77d1a42054dc64b11a4cc8612</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>NETLOC_ERROR_EMPTY</name>
+      <anchorfile>a00249.html</anchorfile>
+      <anchor>gga61dadd085c1777f559549e05962b2c9ea0dc7c18a5a3d027bf3f835eacdbed932</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>NETLOC_ERROR_MULTIPLE</name>
+      <anchorfile>a00249.html</anchorfile>
+      <anchor>gga61dadd085c1777f559549e05962b2c9ea4485021555c6cb24d5f6e391b1bd6dee</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>NETLOC_ERROR_NOT_IMPL</name>
+      <anchorfile>a00249.html</anchorfile>
+      <anchor>gga61dadd085c1777f559549e05962b2c9ea4a55d10dfc1eb5c84027de7d48dfac4d</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>NETLOC_ERROR_EXISTS</name>
+      <anchorfile>a00249.html</anchorfile>
+      <anchor>gga61dadd085c1777f559549e05962b2c9ea67dfc8498fa899900e2231fad4538556</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>NETLOC_ERROR_NOT_FOUND</name>
+      <anchorfile>a00249.html</anchorfile>
+      <anchor>gga61dadd085c1777f559549e05962b2c9ea61b43e2553779d3610f894fd6698a6ee</anchor>
+      <arglist></arglist>
+    </member>
+    <member kind="enumvalue">
+      <name>NETLOC_ERROR_MAX</name>
+      <anchorfile>a00249.html</anchorfile>
+      <anchor>gga61dadd085c1777f559549e05962b2c9ea39974c6110bed527cb7658672b8eeeb9</anchor>
+      <arglist></arglist>
+    </member>
+  </compound>
+  <compound kind="page">
+    <name>hwloc_intro</name>
+    <title>Hardware Locality (hwloc) Introduction</title>
+    <filename>a00394.html</filename>
+    <docanchor file="a00394.html" title="hwloc Summary">hwloc_summary</docanchor>
+    <docanchor file="a00394.html" title="hwloc Installation">hwloc_installation</docanchor>
+    <docanchor file="a00394.html" title="Command-line Examples">cli_examples</docanchor>
+    <docanchor file="a00394.html" title="Programming Interface">interface</docanchor>
+    <docanchor file="a00394.html" title="Portability">portability</docanchor>
+    <docanchor file="a00394.html" title="API Example">interface_example</docanchor>
+    <docanchor file="a00394.html" title="History / Credits">history</docanchor>
+    <docanchor file="a00394.html" title="Further Reading">further_reading</docanchor>
+  </compound>
+  <compound kind="page">
+    <name>termsanddefs</name>
+    <title>Terms and Definitions</title>
+    <filename>a00395.html</filename>
+    <docanchor file="a00395.html" title="Objects">termsanddefs_objects</docanchor>
+    <docanchor file="a00395.html" title="Indexes and Sets">termsanddefs_indexes</docanchor>
+    <docanchor file="a00395.html" title="Hierarchy, Tree and Levels">termsanddefs_tree</docanchor>
+  </compound>
+  <compound kind="page">
+    <name>tools</name>
+    <title>Command-Line Tools</title>
+    <filename>a00396.html</filename>
+    <docanchor file="a00396.html" title="lstopo and lstopo-no-graphics">cli_lstopo</docanchor>
+    <docanchor file="a00396.html" title="hwloc-bind">cli_hwloc_bind</docanchor>
+    <docanchor file="a00396.html" title="hwloc-calc">cli_hwloc_calc</docanchor>
+    <docanchor file="a00396.html" title="hwloc-info">cli_hwloc_info</docanchor>
+    <docanchor file="a00396.html" title="hwloc-distrib">cli_hwloc_distrib</docanchor>
+    <docanchor file="a00396.html" title="hwloc-ps">cli_hwloc_ps</docanchor>
+    <docanchor file="a00396.html" title="hwloc-annotate">cli_hwloc_annotate</docanchor>
+    <docanchor file="a00396.html" title="hwloc-diff, hwloc-patch and hwloc-compress-dir">cli_hwloc_diffpatchcompress</docanchor>
+    <docanchor file="a00396.html" title="hwloc-dump-hwdata">cli_hwloc_dump_hwdata</docanchor>
+    <docanchor file="a00396.html" title="hwloc-gather-topology and hwloc-gather-cpuid">cli_hwloc_gather</docanchor>
+  </compound>
+  <compound kind="page">
+    <name>envvar</name>
+    <title>Environment Variables</title>
+    <filename>a00397.html</filename>
+  </compound>
+  <compound kind="page">
+    <name>cpu_mem_bind</name>
+    <title>CPU and Memory Binding Overview</title>
+    <filename>a00398.html</filename>
+  </compound>
+  <compound kind="page">
+    <name>iodevices</name>
+    <title>I/O Devices</title>
+    <filename>a00399.html</filename>
+    <docanchor file="a00399.html" title="Enabling and requirements">iodevices_enabling</docanchor>
+    <docanchor file="a00399.html" title="I/O objects">iodevices_objects</docanchor>
+    <docanchor file="a00399.html" title="OS devices">iodevices_osdev</docanchor>
+    <docanchor file="a00399.html" title="PCI devices and bridges">iodevices_pci</docanchor>
+    <docanchor file="a00399.html" title="Consulting I/O devices and binding">iodevices_consult</docanchor>
+    <docanchor file="a00399.html" title="Examples">iodevices_examples</docanchor>
+  </compound>
+  <compound kind="page">
+    <name>miscobjs</name>
+    <title>Miscellaneous objects</title>
+    <filename>a00400.html</filename>
+    <docanchor file="a00400.html" title="Misc objects added by hwloc">miscobjs_auto</docanchor>
+    <docanchor file="a00400.html" title="Annotating topologies with Misc objects">miscobjs_annotate</docanchor>
+  </compound>
+  <compound kind="page">
+    <name>attributes</name>
+    <title>Object attributes</title>
+    <filename>a00401.html</filename>
+    <docanchor file="a00401.html" title="Normal attributes">attributes_normal</docanchor>
+    <docanchor file="a00401.html" title="Custom string infos">attributes_info</docanchor>
+    <docanchor file="a00401.html" title="Hardware Platform Information">attributes_info_platform</docanchor>
+    <docanchor file="a00401.html" title="Operating System Information">attributes_info_os</docanchor>
+    <docanchor file="a00401.html" title="hwloc Information">attributes_info_hwloc</docanchor>
+    <docanchor file="a00401.html" title="CPU Information">attributes_info_cpu</docanchor>
+    <docanchor file="a00401.html" title="OS Device Information">attributes_info_osdev</docanchor>
+    <docanchor file="a00401.html" title="Other Object-specific Information">attributes_info_otherobjs</docanchor>
+    <docanchor file="a00401.html" title="User-Given Information">attributes_info_user</docanchor>
+  </compound>
+  <compound kind="page">
+    <name>topoattrs</name>
+    <title>Topology Attributes: Distances, Memory Attributes and CPU Kinds</title>
+    <filename>a00402.html</filename>
+    <docanchor file="a00402.html" title="Distances">topoattrs_distances</docanchor>
+    <docanchor file="a00402.html" title="Memory Attributes">topoattrs_memattrs</docanchor>
+    <docanchor file="a00402.html" title="CPU Kinds">topoattrs_cpukinds</docanchor>
+  </compound>
+  <compound kind="page">
+    <name>xml</name>
+    <title>Importing and exporting topologies from/to XML files</title>
+    <filename>a00403.html</filename>
+    <docanchor file="a00403.html" title="libxml2 and minimalistic XML backends">xml_backends</docanchor>
+    <docanchor file="a00403.html" title="XML import error management">xml_errors</docanchor>
+  </compound>
+  <compound kind="page">
+    <name>synthetic</name>
+    <title>Synthetic topologies</title>
+    <filename>a00404.html</filename>
+    <docanchor file="a00404.html" title="Synthetic description string">synthetic_string</docanchor>
+    <docanchor file="a00404.html" title="Loading a synthetic topology">synthetic_use</docanchor>
+    <docanchor file="a00404.html" title="Exporting a topology as a synthetic string">synthetic_export</docanchor>
+  </compound>
+  <compound kind="page">
+    <name>interoperability</name>
+    <title>Interoperability With Other Software</title>
+    <filename>a00405.html</filename>
+  </compound>
+  <compound kind="page">
+    <name>threadsafety</name>
+    <title>Thread Safety</title>
+    <filename>a00406.html</filename>
+  </compound>
+  <compound kind="page">
+    <name>plugins</name>
+    <title>Components and plugins</title>
+    <filename>a00407.html</filename>
+    <docanchor file="a00407.html" title="Components enabled by default">plugins_default</docanchor>
+    <docanchor file="a00407.html" title="Selecting which components to use">plugins_select</docanchor>
+    <docanchor file="a00407.html" title="Loading components from plugins">plugins_load</docanchor>
+    <docanchor file="a00407.html" title="Existing components and plugins">plugins_list</docanchor>
+  </compound>
+  <compound kind="page">
+    <name>embed</name>
+    <title>Embedding hwloc in Other Software</title>
+    <filename>a00408.html</filename>
+    <docanchor file="a00408.html" title="Using hwloc&apos;s M4 Embedding Capabilities">embedding_m4</docanchor>
+    <docanchor file="a00408.html" title="Example Embedding hwloc">embedding_example</docanchor>
+  </compound>
+  <compound kind="page">
+    <name>faq</name>
+    <title>Frequently Asked Questions (FAQ)</title>
+    <filename>a00409.html</filename>
+    <docanchor file="a00409.html" title="Concepts">faq1</docanchor>
+    <docanchor file="a00409.html" title="I only need binding, why should I use hwloc ?">faq_why</docanchor>
+    <docanchor file="a00409.html" title="Should I use logical or physical/OS indexes? and how?">faq_indexes</docanchor>
+    <docanchor file="a00409.html" title="hwloc is only a structural model, it ignores performance models, memory bandwidth, etc.?">faq_structural</docanchor>
+    <docanchor file="a00409.html" title="hwloc only has a one-dimensional view of the architecture, it ignores distances?">faq_onedim</docanchor>
+    <docanchor file="a00409.html" title="What are these Group objects in my topology?">faq_groups</docanchor>
+    <docanchor file="a00409.html" title="What happens if my topology is asymmetric?">faq_asymmetric</docanchor>
+    <docanchor file="a00409.html" title="What happens to my topology if I disable symmetric multithreading, hyper-threading, etc. in the system?">faq_nosmt</docanchor>
+    <docanchor file="a00409.html" title="How may I ignore symmetric multithreading, hyper-threading, etc. in hwloc?">faq_smt</docanchor>
+    <docanchor file="a00409.html" title="Advanced">faq2</docanchor>
+    <docanchor file="a00409.html" title="I do not want hwloc to rediscover my enormous machine topology every time I rerun a process">faq_xml</docanchor>
+    <docanchor file="a00409.html" title="How many topologies may I use in my program?">faq_multitopo</docanchor>
+    <docanchor file="a00409.html" title="How to avoid memory waste when manipulating multiple similar topologies?">faq_diff</docanchor>
+    <docanchor file="a00409.html" title="How do I annotate the topology with private notes?">faq_annotate</docanchor>
+    <docanchor file="a00409.html" title="How do I create a custom heterogeneous and asymmetric topology?">faq_create_asymmetric</docanchor>
+    <docanchor file="a00409.html" title="Caveats">faq3</docanchor>
+    <docanchor file="a00409.html" title="Why is hwloc slow?">faq_slow_lstopo</docanchor>
+    <docanchor file="a00409.html" title="Does hwloc require privileged access?">faq_privileged</docanchor>
+    <docanchor file="a00409.html" title="What should I do when hwloc reports &quot;operating system&quot; warnings?">faq_os_error</docanchor>
+    <docanchor file="a00409.html" title="Why does Valgrind complain about hwloc memory leaks?">faq_valgrind</docanchor>
+    <docanchor file="a00409.html" title="Platform-specific">faq4</docanchor>
+    <docanchor file="a00409.html" title="How do I enable ROCm SMI and select which version to use?">faq_rocm_build</docanchor>
+    <docanchor file="a00409.html" title="How do I enable CUDA and select which CUDA version to use?">faq_cuda_build</docanchor>
+    <docanchor file="a00409.html" title="How do I find the local MCDRAM NUMA node on Intel Xeon Phi processor?">faq_knl_numa</docanchor>
+    <docanchor file="a00409.html" title="Why do I need hwloc-dump-hwdata for memory on Intel Xeon Phi processor?">faq_knl_dump</docanchor>
+    <docanchor file="a00409.html" title="How do I build hwloc for BlueGene/Q?">faq_bgq</docanchor>
+    <docanchor file="a00409.html" title="How do I build hwloc for Windows?">faq_windows</docanchor>
+    <docanchor file="a00409.html" title="How to get useful topology information on NetBSD?">faq_netbsd_bind</docanchor>
+    <docanchor file="a00409.html" title="Why does binding fail on AIX?">faq_aix_bind</docanchor>
+    <docanchor file="a00409.html" title="Compatibility between hwloc versions">faq5</docanchor>
+    <docanchor file="a00409.html" title="How do I handle API changes?">faq_version_api</docanchor>
+    <docanchor file="a00409.html" title="What is the difference between API and library version numbers?">faq_version</docanchor>
+    <docanchor file="a00409.html" title="How do I handle ABI breaks?">faq_version_abi</docanchor>
+    <docanchor file="a00409.html" title="Are XML topology files compatible between hwloc releases?">faq_version_xml</docanchor>
+    <docanchor file="a00409.html" title="Are synthetic strings compatible between hwloc releases?">faq_version_synthetic</docanchor>
+    <docanchor file="a00409.html" title="Is it possible to share a shared-memory topology between different hwloc releases?">faq_version_shmem</docanchor>
+  </compound>
+  <compound kind="page">
+    <name>upgrade_to_api_2x</name>
+    <title>Upgrading to the hwloc 2.0 API</title>
+    <filename>a00410.html</filename>
+    <docanchor file="a00410.html" title="New Organization of NUMA nodes and Memory">upgrade_to_api_2x_memory</docanchor>
+    <docanchor file="a00410.html" title="Memory children">upgrade_to_api_2x_memory_children</docanchor>
+    <docanchor file="a00410.html" title="Examples">upgrade_to_api_2x_memory_examples</docanchor>
+    <docanchor file="a00410.html" title="NUMA level and depth">upgrade_to_api_2x_numa_level</docanchor>
+    <docanchor file="a00410.html" title="Finding Local NUMA nodes and looking at Children and Parents">upgrade_to_api_2x_memory_find</docanchor>
+    <docanchor file="a00410.html" title="4 Kinds of Objects and Children">upgrade_to_api_2x_children</docanchor>
+    <docanchor file="a00410.html" title="I/O and Misc children">upgrade_to_api_2x_io_misc_children</docanchor>
+    <docanchor file="a00410.html" title="Kinds of objects">upgrade_to_api_2x_kinds_subsec</docanchor>
+    <docanchor file="a00410.html" title="HWLOC_OBJ_CACHE replaced">upgrade_to_api_2x_cache</docanchor>
+    <docanchor file="a00410.html" title="allowed_cpuset and allowed_nodeset only in the main topology">upgrade_to_api_2x_allowed</docanchor>
+    <docanchor file="a00410.html" title="Object depths are now signed int">upgrade_to_api_2x_depth</docanchor>
+    <docanchor file="a00410.html" title="Memory attributes become NUMANode-specific">upgrade_to_api_2x_memory_attrs</docanchor>
+    <docanchor file="a00410.html" title="Topology configuration changes">upgrade_to_api_2x_config</docanchor>
+    <docanchor file="a00410.html" title="XML changes">upgrade_to_api_2x_xml</docanchor>
+    <docanchor file="a00410.html" title="Distances API totally rewritten">upgrade_to_api_2x_distances</docanchor>
+    <docanchor file="a00410.html" title="Return values of functions">upgrade_to_api_2x_return</docanchor>
+    <docanchor file="a00410.html" title="Misc API changes">upgrade_to_api_2x_misc</docanchor>
+    <docanchor file="a00410.html" title="API removals and deprecations">upgrade_to_api_2x_removals</docanchor>
+  </compound>
+  <compound kind="page">
+    <name>netloc_intro</name>
+    <title>Network Locality (netloc)</title>
+    <filename>a00411.html</filename>
+    <docanchor file="a00411.html" title="Netloc Summary">netloc_summary</docanchor>
+    <docanchor file="a00411.html" title="Supported Networks">supportednetworks</docanchor>
+    <docanchor file="a00411.html" title="Netloc Installation">netloc_installation</docanchor>
+    <docanchor file="a00411.html" title="Setup">netloc_setup</docanchor>
+    <docanchor file="a00411.html" title="Topology display">netloc_draw</docanchor>
+    <docanchor file="a00411.html" title="Generate the JSON file">netloc_draw_setup</docanchor>
+    <docanchor file="a00411.html" title="Using netloc_draw">netloc_draw_tool</docanchor>
+  </compound>
+  <compound kind="page">
+    <name>netloc_scotch</name>
+    <title>Netloc with Scotch</title>
+    <filename>a00412.html</filename>
+    <docanchor file="a00412.html" title="Introduction">scotch_intro</docanchor>
+    <docanchor file="a00412.html" title="Setup">scotch_setup</docanchor>
+    <docanchor file="a00412.html" title="Tools and API">scotch_tools_api</docanchor>
+    <docanchor file="a00412.html" title="Build Scotch architectures">netlocscotch_arch</docanchor>
+    <docanchor file="a00412.html" title="Build Scotch sub-architectures">netlocscotch_subarch</docanchor>
+    <docanchor file="a00412.html" title="Mapping of processes">netlocscotch_mapping</docanchor>
+  </compound>
+  <compound kind="page">
+    <name>index</name>
+    <title>Hardware Locality</title>
+    <filename>index.html</filename>
+    <docanchor file="index.html" title="Introduction">common_introduction</docanchor>
+    <docanchor file="index.html" title="Installation">common_installation</docanchor>
+    <docanchor file="index.html" title="Basic Installation">basic_installation</docanchor>
+    <docanchor file="index.html" title="Installing from a Git clone">gitclone_installation</docanchor>
+    <docanchor file="index.html" title="Questions and Bugs">bugs</docanchor>
+  </compound>
+</tagfile>
diff --git a/doc/doxygen-doc/man/man3/HWLOC_ALLOW_FLAG_ALL.3 b/doc/doxygen-doc/man/man3/HWLOC_ALLOW_FLAG_ALL.3
new file mode 100644
index 00000000..d859a648
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_ALLOW_FLAG_ALL.3
@@ -0,0 +1 @@
+.so man3/hwlocality_tinker.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_ALLOW_FLAG_CUSTOM.3 b/doc/doxygen-doc/man/man3/HWLOC_ALLOW_FLAG_CUSTOM.3
new file mode 100644
index 00000000..d859a648
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_ALLOW_FLAG_CUSTOM.3
@@ -0,0 +1 @@
+.so man3/hwlocality_tinker.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_ALLOW_FLAG_LOCAL_RESTRICTIONS.3 b/doc/doxygen-doc/man/man3/HWLOC_ALLOW_FLAG_LOCAL_RESTRICTIONS.3
new file mode 100644
index 00000000..d859a648
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_ALLOW_FLAG_LOCAL_RESTRICTIONS.3
@@ -0,0 +1 @@
+.so man3/hwlocality_tinker.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_API_VERSION.3 b/doc/doxygen-doc/man/man3/HWLOC_API_VERSION.3
new file mode 100644
index 00000000..818ca71b
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_API_VERSION.3
@@ -0,0 +1 @@
+.so man3/hwlocality_api_version.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_COMPONENT_ABI.3 b/doc/doxygen-doc/man/man3/HWLOC_COMPONENT_ABI.3
new file mode 100644
index 00000000..818ca71b
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_COMPONENT_ABI.3
@@ -0,0 +1 @@
+.so man3/hwlocality_api_version.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_COMPONENT_TYPE_DISC.3 b/doc/doxygen-doc/man/man3/HWLOC_COMPONENT_TYPE_DISC.3
new file mode 100644
index 00000000..fba1000a
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_COMPONENT_TYPE_DISC.3
@@ -0,0 +1 @@
+.so man3/hwlocality_generic_components.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_COMPONENT_TYPE_XML.3 b/doc/doxygen-doc/man/man3/HWLOC_COMPONENT_TYPE_XML.3
new file mode 100644
index 00000000..fba1000a
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_COMPONENT_TYPE_XML.3
@@ -0,0 +1 @@
+.so man3/hwlocality_generic_components.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_CPUBIND_NOMEMBIND.3 b/doc/doxygen-doc/man/man3/HWLOC_CPUBIND_NOMEMBIND.3
new file mode 100644
index 00000000..4c34d1aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_CPUBIND_NOMEMBIND.3
@@ -0,0 +1 @@
+.so man3/hwlocality_cpubinding.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_CPUBIND_PROCESS.3 b/doc/doxygen-doc/man/man3/HWLOC_CPUBIND_PROCESS.3
new file mode 100644
index 00000000..4c34d1aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_CPUBIND_PROCESS.3
@@ -0,0 +1 @@
+.so man3/hwlocality_cpubinding.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_CPUBIND_STRICT.3 b/doc/doxygen-doc/man/man3/HWLOC_CPUBIND_STRICT.3
new file mode 100644
index 00000000..4c34d1aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_CPUBIND_STRICT.3
@@ -0,0 +1 @@
+.so man3/hwlocality_cpubinding.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_CPUBIND_THREAD.3 b/doc/doxygen-doc/man/man3/HWLOC_CPUBIND_THREAD.3
new file mode 100644
index 00000000..4c34d1aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_CPUBIND_THREAD.3
@@ -0,0 +1 @@
+.so man3/hwlocality_cpubinding.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_DISC_PHASE_ANNOTATE.3 b/doc/doxygen-doc/man/man3/HWLOC_DISC_PHASE_ANNOTATE.3
new file mode 100644
index 00000000..5c3a37b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_DISC_PHASE_ANNOTATE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_disc_backends.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_DISC_PHASE_CPU.3 b/doc/doxygen-doc/man/man3/HWLOC_DISC_PHASE_CPU.3
new file mode 100644
index 00000000..5c3a37b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_DISC_PHASE_CPU.3
@@ -0,0 +1 @@
+.so man3/hwlocality_disc_backends.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_DISC_PHASE_GLOBAL.3 b/doc/doxygen-doc/man/man3/HWLOC_DISC_PHASE_GLOBAL.3
new file mode 100644
index 00000000..5c3a37b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_DISC_PHASE_GLOBAL.3
@@ -0,0 +1 @@
+.so man3/hwlocality_disc_backends.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_DISC_PHASE_IO.3 b/doc/doxygen-doc/man/man3/HWLOC_DISC_PHASE_IO.3
new file mode 100644
index 00000000..5c3a37b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_DISC_PHASE_IO.3
@@ -0,0 +1 @@
+.so man3/hwlocality_disc_backends.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_DISC_PHASE_MEMORY.3 b/doc/doxygen-doc/man/man3/HWLOC_DISC_PHASE_MEMORY.3
new file mode 100644
index 00000000..5c3a37b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_DISC_PHASE_MEMORY.3
@@ -0,0 +1 @@
+.so man3/hwlocality_disc_backends.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_DISC_PHASE_MISC.3 b/doc/doxygen-doc/man/man3/HWLOC_DISC_PHASE_MISC.3
new file mode 100644
index 00000000..5c3a37b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_DISC_PHASE_MISC.3
@@ -0,0 +1 @@
+.so man3/hwlocality_disc_backends.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_DISC_PHASE_PCI.3 b/doc/doxygen-doc/man/man3/HWLOC_DISC_PHASE_PCI.3
new file mode 100644
index 00000000..5c3a37b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_DISC_PHASE_PCI.3
@@ -0,0 +1 @@
+.so man3/hwlocality_disc_backends.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_DISC_PHASE_TWEAK.3 b/doc/doxygen-doc/man/man3/HWLOC_DISC_PHASE_TWEAK.3
new file mode 100644
index 00000000..5c3a37b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_DISC_PHASE_TWEAK.3
@@ -0,0 +1 @@
+.so man3/hwlocality_disc_backends.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_DISC_STATUS_FLAG_GOT_ALLOWED_RESOURCES.3 b/doc/doxygen-doc/man/man3/HWLOC_DISC_STATUS_FLAG_GOT_ALLOWED_RESOURCES.3
new file mode 100644
index 00000000..5c3a37b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_DISC_STATUS_FLAG_GOT_ALLOWED_RESOURCES.3
@@ -0,0 +1 @@
+.so man3/hwlocality_disc_backends.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_ADD_FLAG_GROUP.3 b/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_ADD_FLAG_GROUP.3
new file mode 100644
index 00000000..9e9a1792
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_ADD_FLAG_GROUP.3
@@ -0,0 +1 @@
+.so man3/hwlocality_distances_add.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE.3 b/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE.3
new file mode 100644
index 00000000..9e9a1792
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_distances_add.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_KIND_FROM_OS.3 b/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_KIND_FROM_OS.3
new file mode 100644
index 00000000..5384e666
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_KIND_FROM_OS.3
@@ -0,0 +1 @@
+.so man3/hwlocality_distances_get.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_KIND_FROM_USER.3 b/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_KIND_FROM_USER.3
new file mode 100644
index 00000000..5384e666
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_KIND_FROM_USER.3
@@ -0,0 +1 @@
+.so man3/hwlocality_distances_get.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES.3 b/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES.3
new file mode 100644
index 00000000..5384e666
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES.3
@@ -0,0 +1 @@
+.so man3/hwlocality_distances_get.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_KIND_MEANS_BANDWIDTH.3 b/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_KIND_MEANS_BANDWIDTH.3
new file mode 100644
index 00000000..5384e666
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_KIND_MEANS_BANDWIDTH.3
@@ -0,0 +1 @@
+.so man3/hwlocality_distances_get.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_KIND_MEANS_LATENCY.3 b/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_KIND_MEANS_LATENCY.3
new file mode 100644
index 00000000..5384e666
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_KIND_MEANS_LATENCY.3
@@ -0,0 +1 @@
+.so man3/hwlocality_distances_get.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_TRANSFORM_LINKS.3 b/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_TRANSFORM_LINKS.3
new file mode 100644
index 00000000..5384e666
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_TRANSFORM_LINKS.3
@@ -0,0 +1 @@
+.so man3/hwlocality_distances_get.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_TRANSFORM_MERGE_SWITCH_PORTS.3 b/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_TRANSFORM_MERGE_SWITCH_PORTS.3
new file mode 100644
index 00000000..5384e666
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_TRANSFORM_MERGE_SWITCH_PORTS.3
@@ -0,0 +1 @@
+.so man3/hwlocality_distances_get.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_TRANSFORM_REMOVE_NULL.3 b/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_TRANSFORM_REMOVE_NULL.3
new file mode 100644
index 00000000..5384e666
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_TRANSFORM_REMOVE_NULL.3
@@ -0,0 +1 @@
+.so man3/hwlocality_distances_get.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_TRANSFORM_TRANSITIVE_CLOSURE.3 b/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_TRANSFORM_TRANSITIVE_CLOSURE.3
new file mode 100644
index 00000000..5384e666
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_DISTANCES_TRANSFORM_TRANSITIVE_CLOSURE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_distances_get.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_DISTRIB_FLAG_REVERSE.3 b/doc/doxygen-doc/man/man3/HWLOC_DISTRIB_FLAG_REVERSE.3
new file mode 100644
index 00000000..cad11636
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_DISTRIB_FLAG_REVERSE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_distribute.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_LOCAL_NUMANODE_FLAG_ALL.3 b/doc/doxygen-doc/man/man3/HWLOC_LOCAL_NUMANODE_FLAG_ALL.3
new file mode 100644
index 00000000..4898e094
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_LOCAL_NUMANODE_FLAG_ALL.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_LOCAL_NUMANODE_FLAG_LARGER_LOCALITY.3 b/doc/doxygen-doc/man/man3/HWLOC_LOCAL_NUMANODE_FLAG_LARGER_LOCALITY.3
new file mode 100644
index 00000000..4898e094
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_LOCAL_NUMANODE_FLAG_LARGER_LOCALITY.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_LOCAL_NUMANODE_FLAG_SMALLER_LOCALITY.3 b/doc/doxygen-doc/man/man3/HWLOC_LOCAL_NUMANODE_FLAG_SMALLER_LOCALITY.3
new file mode 100644
index 00000000..4898e094
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_LOCAL_NUMANODE_FLAG_SMALLER_LOCALITY.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_LOCATION_TYPE_CPUSET.3 b/doc/doxygen-doc/man/man3/HWLOC_LOCATION_TYPE_CPUSET.3
new file mode 100644
index 00000000..4898e094
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_LOCATION_TYPE_CPUSET.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_LOCATION_TYPE_OBJECT.3 b/doc/doxygen-doc/man/man3/HWLOC_LOCATION_TYPE_OBJECT.3
new file mode 100644
index 00000000..4898e094
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_LOCATION_TYPE_OBJECT.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_FLAG_HIGHER_FIRST.3 b/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_FLAG_HIGHER_FIRST.3
new file mode 100644
index 00000000..8f5e7ba9
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_FLAG_HIGHER_FIRST.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs_manage.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_FLAG_LOWER_FIRST.3 b/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_FLAG_LOWER_FIRST.3
new file mode 100644
index 00000000..8f5e7ba9
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_FLAG_LOWER_FIRST.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs_manage.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_FLAG_NEED_INITIATOR.3 b/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_FLAG_NEED_INITIATOR.3
new file mode 100644
index 00000000..8f5e7ba9
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_FLAG_NEED_INITIATOR.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs_manage.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_ID_BANDWIDTH.3 b/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_ID_BANDWIDTH.3
new file mode 100644
index 00000000..4898e094
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_ID_BANDWIDTH.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_ID_CAPACITY.3 b/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_ID_CAPACITY.3
new file mode 100644
index 00000000..4898e094
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_ID_CAPACITY.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_ID_LATENCY.3 b/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_ID_LATENCY.3
new file mode 100644
index 00000000..4898e094
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_ID_LATENCY.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_ID_LOCALITY.3 b/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_ID_LOCALITY.3
new file mode 100644
index 00000000..4898e094
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_ID_LOCALITY.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_ID_READ_BANDWIDTH.3 b/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_ID_READ_BANDWIDTH.3
new file mode 100644
index 00000000..4898e094
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_ID_READ_BANDWIDTH.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_ID_READ_LATENCY.3 b/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_ID_READ_LATENCY.3
new file mode 100644
index 00000000..4898e094
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_ID_READ_LATENCY.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_ID_WRITE_BANDWIDTH.3 b/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_ID_WRITE_BANDWIDTH.3
new file mode 100644
index 00000000..4898e094
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_ID_WRITE_BANDWIDTH.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_ID_WRITE_LATENCY.3 b/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_ID_WRITE_LATENCY.3
new file mode 100644
index 00000000..4898e094
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_MEMATTR_ID_WRITE_LATENCY.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_BIND.3 b/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_BIND.3
new file mode 100644
index 00000000..a7c83a19
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_BIND.3
@@ -0,0 +1 @@
+.so man3/hwlocality_membinding.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_BYNODESET.3 b/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_BYNODESET.3
new file mode 100644
index 00000000..a7c83a19
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_BYNODESET.3
@@ -0,0 +1 @@
+.so man3/hwlocality_membinding.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_DEFAULT.3 b/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_DEFAULT.3
new file mode 100644
index 00000000..a7c83a19
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_DEFAULT.3
@@ -0,0 +1 @@
+.so man3/hwlocality_membinding.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_FIRSTTOUCH.3 b/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_FIRSTTOUCH.3
new file mode 100644
index 00000000..a7c83a19
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_FIRSTTOUCH.3
@@ -0,0 +1 @@
+.so man3/hwlocality_membinding.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_INTERLEAVE.3 b/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_INTERLEAVE.3
new file mode 100644
index 00000000..a7c83a19
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_INTERLEAVE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_membinding.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_MIGRATE.3 b/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_MIGRATE.3
new file mode 100644
index 00000000..a7c83a19
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_MIGRATE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_membinding.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_MIXED.3 b/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_MIXED.3
new file mode 100644
index 00000000..a7c83a19
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_MIXED.3
@@ -0,0 +1 @@
+.so man3/hwlocality_membinding.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_NEXTTOUCH.3 b/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_NEXTTOUCH.3
new file mode 100644
index 00000000..a7c83a19
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_NEXTTOUCH.3
@@ -0,0 +1 @@
+.so man3/hwlocality_membinding.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_NOCPUBIND.3 b/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_NOCPUBIND.3
new file mode 100644
index 00000000..a7c83a19
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_NOCPUBIND.3
@@ -0,0 +1 @@
+.so man3/hwlocality_membinding.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_PROCESS.3 b/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_PROCESS.3
new file mode 100644
index 00000000..a7c83a19
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_PROCESS.3
@@ -0,0 +1 @@
+.so man3/hwlocality_membinding.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_STRICT.3 b/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_STRICT.3
new file mode 100644
index 00000000..a7c83a19
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_STRICT.3
@@ -0,0 +1 @@
+.so man3/hwlocality_membinding.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_THREAD.3 b/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_THREAD.3
new file mode 100644
index 00000000..a7c83a19
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_MEMBIND_THREAD.3
@@ -0,0 +1 @@
+.so man3/hwlocality_membinding.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_OBJ_BRIDGE.3 b/doc/doxygen-doc/man/man3/HWLOC_OBJ_BRIDGE.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_OBJ_BRIDGE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_OBJ_BRIDGE_HOST.3 b/doc/doxygen-doc/man/man3/HWLOC_OBJ_BRIDGE_HOST.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_OBJ_BRIDGE_HOST.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_OBJ_BRIDGE_PCI.3 b/doc/doxygen-doc/man/man3/HWLOC_OBJ_BRIDGE_PCI.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_OBJ_BRIDGE_PCI.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_OBJ_CACHE_DATA.3 b/doc/doxygen-doc/man/man3/HWLOC_OBJ_CACHE_DATA.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_OBJ_CACHE_DATA.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_OBJ_CACHE_INSTRUCTION.3 b/doc/doxygen-doc/man/man3/HWLOC_OBJ_CACHE_INSTRUCTION.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_OBJ_CACHE_INSTRUCTION.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_OBJ_CACHE_UNIFIED.3 b/doc/doxygen-doc/man/man3/HWLOC_OBJ_CACHE_UNIFIED.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_OBJ_CACHE_UNIFIED.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_OBJ_CORE.3 b/doc/doxygen-doc/man/man3/HWLOC_OBJ_CORE.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_OBJ_CORE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_OBJ_DIE.3 b/doc/doxygen-doc/man/man3/HWLOC_OBJ_DIE.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_OBJ_DIE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_OBJ_GROUP.3 b/doc/doxygen-doc/man/man3/HWLOC_OBJ_GROUP.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_OBJ_GROUP.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_OBJ_L1CACHE.3 b/doc/doxygen-doc/man/man3/HWLOC_OBJ_L1CACHE.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_OBJ_L1CACHE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_OBJ_L1ICACHE.3 b/doc/doxygen-doc/man/man3/HWLOC_OBJ_L1ICACHE.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_OBJ_L1ICACHE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_OBJ_L2CACHE.3 b/doc/doxygen-doc/man/man3/HWLOC_OBJ_L2CACHE.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_OBJ_L2CACHE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_OBJ_L2ICACHE.3 b/doc/doxygen-doc/man/man3/HWLOC_OBJ_L2ICACHE.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_OBJ_L2ICACHE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_OBJ_L3CACHE.3 b/doc/doxygen-doc/man/man3/HWLOC_OBJ_L3CACHE.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_OBJ_L3CACHE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_OBJ_L3ICACHE.3 b/doc/doxygen-doc/man/man3/HWLOC_OBJ_L3ICACHE.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_OBJ_L3ICACHE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_OBJ_L4CACHE.3 b/doc/doxygen-doc/man/man3/HWLOC_OBJ_L4CACHE.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_OBJ_L4CACHE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_OBJ_L5CACHE.3 b/doc/doxygen-doc/man/man3/HWLOC_OBJ_L5CACHE.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_OBJ_L5CACHE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_OBJ_MACHINE.3 b/doc/doxygen-doc/man/man3/HWLOC_OBJ_MACHINE.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_OBJ_MACHINE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_OBJ_MEMCACHE.3 b/doc/doxygen-doc/man/man3/HWLOC_OBJ_MEMCACHE.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_OBJ_MEMCACHE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_OBJ_MISC.3 b/doc/doxygen-doc/man/man3/HWLOC_OBJ_MISC.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_OBJ_MISC.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_OBJ_NUMANODE.3 b/doc/doxygen-doc/man/man3/HWLOC_OBJ_NUMANODE.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_OBJ_NUMANODE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_OBJ_OSDEV_BLOCK.3 b/doc/doxygen-doc/man/man3/HWLOC_OBJ_OSDEV_BLOCK.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_OBJ_OSDEV_BLOCK.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_OBJ_OSDEV_COPROC.3 b/doc/doxygen-doc/man/man3/HWLOC_OBJ_OSDEV_COPROC.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_OBJ_OSDEV_COPROC.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_OBJ_OSDEV_DMA.3 b/doc/doxygen-doc/man/man3/HWLOC_OBJ_OSDEV_DMA.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_OBJ_OSDEV_DMA.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_OBJ_OSDEV_GPU.3 b/doc/doxygen-doc/man/man3/HWLOC_OBJ_OSDEV_GPU.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_OBJ_OSDEV_GPU.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_OBJ_OSDEV_NETWORK.3 b/doc/doxygen-doc/man/man3/HWLOC_OBJ_OSDEV_NETWORK.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_OBJ_OSDEV_NETWORK.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_OBJ_OSDEV_OPENFABRICS.3 b/doc/doxygen-doc/man/man3/HWLOC_OBJ_OSDEV_OPENFABRICS.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_OBJ_OSDEV_OPENFABRICS.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_OBJ_OS_DEVICE.3 b/doc/doxygen-doc/man/man3/HWLOC_OBJ_OS_DEVICE.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_OBJ_OS_DEVICE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_OBJ_PACKAGE.3 b/doc/doxygen-doc/man/man3/HWLOC_OBJ_PACKAGE.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_OBJ_PACKAGE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_OBJ_PCI_DEVICE.3 b/doc/doxygen-doc/man/man3/HWLOC_OBJ_PCI_DEVICE.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_OBJ_PCI_DEVICE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_OBJ_PU.3 b/doc/doxygen-doc/man/man3/HWLOC_OBJ_PU.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_OBJ_PU.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_RESTRICT_FLAG_ADAPT_IO.3 b/doc/doxygen-doc/man/man3/HWLOC_RESTRICT_FLAG_ADAPT_IO.3
new file mode 100644
index 00000000..d859a648
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_RESTRICT_FLAG_ADAPT_IO.3
@@ -0,0 +1 @@
+.so man3/hwlocality_tinker.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_RESTRICT_FLAG_ADAPT_MISC.3 b/doc/doxygen-doc/man/man3/HWLOC_RESTRICT_FLAG_ADAPT_MISC.3
new file mode 100644
index 00000000..d859a648
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_RESTRICT_FLAG_ADAPT_MISC.3
@@ -0,0 +1 @@
+.so man3/hwlocality_tinker.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_RESTRICT_FLAG_BYNODESET.3 b/doc/doxygen-doc/man/man3/HWLOC_RESTRICT_FLAG_BYNODESET.3
new file mode 100644
index 00000000..d859a648
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_RESTRICT_FLAG_BYNODESET.3
@@ -0,0 +1 @@
+.so man3/hwlocality_tinker.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_RESTRICT_FLAG_REMOVE_CPULESS.3 b/doc/doxygen-doc/man/man3/HWLOC_RESTRICT_FLAG_REMOVE_CPULESS.3
new file mode 100644
index 00000000..d859a648
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_RESTRICT_FLAG_REMOVE_CPULESS.3
@@ -0,0 +1 @@
+.so man3/hwlocality_tinker.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_RESTRICT_FLAG_REMOVE_MEMLESS.3 b/doc/doxygen-doc/man/man3/HWLOC_RESTRICT_FLAG_REMOVE_MEMLESS.3
new file mode 100644
index 00000000..d859a648
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_RESTRICT_FLAG_REMOVE_MEMLESS.3
@@ -0,0 +1 @@
+.so man3/hwlocality_tinker.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_SHOW_ALL_ERRORS.3 b/doc/doxygen-doc/man/man3/HWLOC_SHOW_ALL_ERRORS.3
new file mode 100644
index 00000000..7d645186
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_SHOW_ALL_ERRORS.3
@@ -0,0 +1 @@
+.so man3/hwlocality_components_core_funcs.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_SHOW_CRITICAL_ERRORS.3 b/doc/doxygen-doc/man/man3/HWLOC_SHOW_CRITICAL_ERRORS.3
new file mode 100644
index 00000000..7d645186
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_SHOW_CRITICAL_ERRORS.3
@@ -0,0 +1 @@
+.so man3/hwlocality_components_core_funcs.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_COMPONENTS_FLAG_BLACKLIST.3 b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_COMPONENTS_FLAG_BLACKLIST.3
new file mode 100644
index 00000000..0390f8a8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_COMPONENTS_FLAG_BLACKLIST.3
@@ -0,0 +1 @@
+.so man3/hwlocality_setsource.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_DIFF_APPLY_REVERSE.3 b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_DIFF_APPLY_REVERSE.3
new file mode 100644
index 00000000..c3294156
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_DIFF_APPLY_REVERSE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_diff.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_DIFF_OBJ_ATTR.3 b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_DIFF_OBJ_ATTR.3
new file mode 100644
index 00000000..c3294156
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_DIFF_OBJ_ATTR.3
@@ -0,0 +1 @@
+.so man3/hwlocality_diff.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_INFO.3 b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_INFO.3
new file mode 100644
index 00000000..c3294156
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_INFO.3
@@ -0,0 +1 @@
+.so man3/hwlocality_diff.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_NAME.3 b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_NAME.3
new file mode 100644
index 00000000..c3294156
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_NAME.3
@@ -0,0 +1 @@
+.so man3/hwlocality_diff.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_SIZE.3 b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_SIZE.3
new file mode 100644
index 00000000..c3294156
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_SIZE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_diff.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX.3 b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX.3
new file mode 100644
index 00000000..c3294156
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX.3
@@ -0,0 +1 @@
+.so man3/hwlocality_diff.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_IGNORE_MEMORY.3 b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_IGNORE_MEMORY.3
new file mode 100644
index 00000000..72967ac8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_IGNORE_MEMORY.3
@@ -0,0 +1 @@
+.so man3/hwlocality_syntheticexport.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_ATTRS.3 b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_ATTRS.3
new file mode 100644
index 00000000..72967ac8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_ATTRS.3
@@ -0,0 +1 @@
+.so man3/hwlocality_syntheticexport.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_EXTENDED_TYPES.3 b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_EXTENDED_TYPES.3
new file mode 100644
index 00000000..72967ac8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_EXTENDED_TYPES.3
@@ -0,0 +1 @@
+.so man3/hwlocality_syntheticexport.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_V1.3 b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_V1.3
new file mode 100644
index 00000000..72967ac8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_V1.3
@@ -0,0 +1 @@
+.so man3/hwlocality_syntheticexport.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1.3 b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1.3
new file mode 100644
index 00000000..289c696f
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1.3
@@ -0,0 +1 @@
+.so man3/hwlocality_xmlexport.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_FLAG_DONT_CHANGE_BINDING.3 b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_FLAG_DONT_CHANGE_BINDING.3
new file mode 100644
index 00000000..e4dbe0b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_FLAG_DONT_CHANGE_BINDING.3
@@ -0,0 +1 @@
+.so man3/hwlocality_configuration.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT.3 b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT.3
new file mode 100644
index 00000000..e4dbe0b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT.3
@@ -0,0 +1 @@
+.so man3/hwlocality_configuration.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED.3 b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED.3
new file mode 100644
index 00000000..e4dbe0b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED.3
@@ -0,0 +1 @@
+.so man3/hwlocality_configuration.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM.3 b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM.3
new file mode 100644
index 00000000..e4dbe0b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM.3
@@ -0,0 +1 @@
+.so man3/hwlocality_configuration.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_FLAG_NO_CPUKINDS.3 b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_FLAG_NO_CPUKINDS.3
new file mode 100644
index 00000000..e4dbe0b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_FLAG_NO_CPUKINDS.3
@@ -0,0 +1 @@
+.so man3/hwlocality_configuration.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_FLAG_NO_DISTANCES.3 b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_FLAG_NO_DISTANCES.3
new file mode 100644
index 00000000..e4dbe0b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_FLAG_NO_DISTANCES.3
@@ -0,0 +1 @@
+.so man3/hwlocality_configuration.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_FLAG_NO_MEMATTRS.3 b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_FLAG_NO_MEMATTRS.3
new file mode 100644
index 00000000..e4dbe0b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_FLAG_NO_MEMATTRS.3
@@ -0,0 +1 @@
+.so man3/hwlocality_configuration.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING.3 b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING.3
new file mode 100644
index 00000000..e4dbe0b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING.3
@@ -0,0 +1 @@
+.so man3/hwlocality_configuration.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_MEMBINDING.3 b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_MEMBINDING.3
new file mode 100644
index 00000000..e4dbe0b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_MEMBINDING.3
@@ -0,0 +1 @@
+.so man3/hwlocality_configuration.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES.3 b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES.3
new file mode 100644
index 00000000..e4dbe0b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES.3
@@ -0,0 +1 @@
+.so man3/hwlocality_configuration.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TYPE_DEPTH_BRIDGE.3 b/doc/doxygen-doc/man/man3/HWLOC_TYPE_DEPTH_BRIDGE.3
new file mode 100644
index 00000000..d14934f8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TYPE_DEPTH_BRIDGE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_levels.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TYPE_DEPTH_MEMCACHE.3 b/doc/doxygen-doc/man/man3/HWLOC_TYPE_DEPTH_MEMCACHE.3
new file mode 100644
index 00000000..d14934f8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TYPE_DEPTH_MEMCACHE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_levels.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TYPE_DEPTH_MISC.3 b/doc/doxygen-doc/man/man3/HWLOC_TYPE_DEPTH_MISC.3
new file mode 100644
index 00000000..d14934f8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TYPE_DEPTH_MISC.3
@@ -0,0 +1 @@
+.so man3/hwlocality_levels.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TYPE_DEPTH_MULTIPLE.3 b/doc/doxygen-doc/man/man3/HWLOC_TYPE_DEPTH_MULTIPLE.3
new file mode 100644
index 00000000..d14934f8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TYPE_DEPTH_MULTIPLE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_levels.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TYPE_DEPTH_NUMANODE.3 b/doc/doxygen-doc/man/man3/HWLOC_TYPE_DEPTH_NUMANODE.3
new file mode 100644
index 00000000..d14934f8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TYPE_DEPTH_NUMANODE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_levels.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TYPE_DEPTH_OS_DEVICE.3 b/doc/doxygen-doc/man/man3/HWLOC_TYPE_DEPTH_OS_DEVICE.3
new file mode 100644
index 00000000..d14934f8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TYPE_DEPTH_OS_DEVICE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_levels.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TYPE_DEPTH_PCI_DEVICE.3 b/doc/doxygen-doc/man/man3/HWLOC_TYPE_DEPTH_PCI_DEVICE.3
new file mode 100644
index 00000000..d14934f8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TYPE_DEPTH_PCI_DEVICE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_levels.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TYPE_DEPTH_UNKNOWN.3 b/doc/doxygen-doc/man/man3/HWLOC_TYPE_DEPTH_UNKNOWN.3
new file mode 100644
index 00000000..d14934f8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TYPE_DEPTH_UNKNOWN.3
@@ -0,0 +1 @@
+.so man3/hwlocality_levels.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TYPE_FILTER_KEEP_ALL.3 b/doc/doxygen-doc/man/man3/HWLOC_TYPE_FILTER_KEEP_ALL.3
new file mode 100644
index 00000000..e4dbe0b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TYPE_FILTER_KEEP_ALL.3
@@ -0,0 +1 @@
+.so man3/hwlocality_configuration.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TYPE_FILTER_KEEP_IMPORTANT.3 b/doc/doxygen-doc/man/man3/HWLOC_TYPE_FILTER_KEEP_IMPORTANT.3
new file mode 100644
index 00000000..e4dbe0b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TYPE_FILTER_KEEP_IMPORTANT.3
@@ -0,0 +1 @@
+.so man3/hwlocality_configuration.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TYPE_FILTER_KEEP_NONE.3 b/doc/doxygen-doc/man/man3/HWLOC_TYPE_FILTER_KEEP_NONE.3
new file mode 100644
index 00000000..e4dbe0b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TYPE_FILTER_KEEP_NONE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_configuration.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TYPE_FILTER_KEEP_STRUCTURE.3 b/doc/doxygen-doc/man/man3/HWLOC_TYPE_FILTER_KEEP_STRUCTURE.3
new file mode 100644
index 00000000..e4dbe0b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TYPE_FILTER_KEEP_STRUCTURE.3
@@ -0,0 +1 @@
+.so man3/hwlocality_configuration.3
diff --git a/doc/doxygen-doc/man/man3/HWLOC_TYPE_UNORDERED.3 b/doc/doxygen-doc/man/man3/HWLOC_TYPE_UNORDERED.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/HWLOC_TYPE_UNORDERED.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/hwloc__insert_object_by_cpuset.3 b/doc/doxygen-doc/man/man3/hwloc__insert_object_by_cpuset.3
new file mode 100644
index 00000000..7d645186
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc__insert_object_by_cpuset.3
@@ -0,0 +1 @@
+.so man3/hwlocality_components_core_funcs.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_alloc.3 b/doc/doxygen-doc/man/man3/hwloc_alloc.3
new file mode 100644
index 00000000..a7c83a19
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_alloc.3
@@ -0,0 +1 @@
+.so man3/hwlocality_membinding.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_alloc_membind.3 b/doc/doxygen-doc/man/man3/hwloc_alloc_membind.3
new file mode 100644
index 00000000..a7c83a19
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_alloc_membind.3
@@ -0,0 +1 @@
+.so man3/hwlocality_membinding.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_alloc_membind_policy.3 b/doc/doxygen-doc/man/man3/hwloc_alloc_membind_policy.3
new file mode 100644
index 00000000..a7c83a19
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_alloc_membind_policy.3
@@ -0,0 +1 @@
+.so man3/hwlocality_membinding.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_alloc_setup_object.3 b/doc/doxygen-doc/man/man3/hwloc_alloc_setup_object.3
new file mode 100644
index 00000000..7d645186
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_alloc_setup_object.3
@@ -0,0 +1 @@
+.so man3/hwlocality_components_core_funcs.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_allow_flags_e.3 b/doc/doxygen-doc/man/man3/hwloc_allow_flags_e.3
new file mode 100644
index 00000000..d859a648
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_allow_flags_e.3
@@ -0,0 +1 @@
+.so man3/hwlocality_tinker.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_backend.3 b/doc/doxygen-doc/man/man3/hwloc_backend.3
new file mode 100644
index 00000000..6ad76a65
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_backend.3
@@ -0,0 +1,78 @@
+.TH "hwloc_backend" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_backend
+.SH SYNOPSIS
+.br
+.PP
+.PP
+\fC#include <plugins\&.h>\fP
+.SS "Data Fields"
+
+.in +1c
+.ti -1c
+.RI "unsigned \fBphases\fP"
+.br
+.ti -1c
+.RI "unsigned long \fBflags\fP"
+.br
+.ti -1c
+.RI "int \fBis_thissystem\fP"
+.br
+.ti -1c
+.RI "void * \fBprivate_data\fP"
+.br
+.ti -1c
+.RI "void(* \fBdisable\fP )(struct \fBhwloc_backend\fP *backend)"
+.br
+.ti -1c
+.RI "int(* \fBdiscover\fP )(struct \fBhwloc_backend\fP *backend, struct \fBhwloc_disc_status\fP *status)"
+.br
+.ti -1c
+.RI "int(* \fBget_pci_busid_cpuset\fP )(struct \fBhwloc_backend\fP *backend, struct hwloc_pcidev_attr_s *busid, \fBhwloc_bitmap_t\fP cpuset)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+Discovery backend structure\&. 
+
+A backend is the instantiation of a discovery component\&. When a component gets enabled for a topology, its instantiate() callback creates a backend\&.
+.PP
+\fBhwloc_backend_alloc()\fP initializes all fields to default values that the component may change (except 'component' and 'next') before enabling the backend with \fBhwloc_backend_enable()\fP\&.
+.PP
+Most backends assume that the topology is_thissystem flag is set because they talk to the underlying operating system\&. However they may still be used in topologies without the is_thissystem flag for debugging reasons\&. In practice, they are usually auto-disabled in such cases (excluded by xml or synthetic backends, or by environment variables when changing the Linux fsroot or the x86 cpuid path)\&. 
+.SH "Field Documentation"
+.PP 
+.SS "void(* hwloc_backend::disable) (struct \fBhwloc_backend\fP *backend)"
+
+.PP
+Callback for freeing the private_data\&. May be NULL\&. 
+.SS "int(* hwloc_backend::discover) (struct \fBhwloc_backend\fP *backend, struct \fBhwloc_disc_status\fP *status)"
+
+.PP
+Main discovery callback\&. returns -1 on error, either because it couldn't add its objects ot the existing topology, or because of an actual discovery/gathering failure\&. May be NULL\&. 
+.SS "unsigned long hwloc_backend::flags"
+
+.PP
+Backend flags, currently always 0\&. 
+.SS "int(* hwloc_backend::get_pci_busid_cpuset) (struct \fBhwloc_backend\fP *backend, struct hwloc_pcidev_attr_s *busid, \fBhwloc_bitmap_t\fP cpuset)"
+
+.PP
+Callback to retrieve the locality of a PCI object\&. Called by the PCI core when attaching PCI hierarchy to CPU objects\&. May be NULL\&. 
+.SS "int hwloc_backend::is_thissystem"
+
+.PP
+Backend-specific 'is_thissystem' property\&. Set to 0 if the backend disables the thissystem flag for this topology (e\&.g\&. loading from xml or synthetic string, or using a different fsroot on Linux, or a x86 CPUID dump)\&. Set to -1 if the backend doesn't care (default)\&. 
+.SS "unsigned hwloc_backend::phases"
+
+.PP
+Discovery phases performed by this component, possibly without some of them if excluded by other components\&. OR'ed set of \fBhwloc_disc_phase_t\fP\&. 
+.SS "void* hwloc_backend::private_data"
+
+.PP
+Backend private data, or NULL if none\&. 
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwloc_backend_alloc.3 b/doc/doxygen-doc/man/man3/hwloc_backend_alloc.3
new file mode 100644
index 00000000..5c3a37b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_backend_alloc.3
@@ -0,0 +1 @@
+.so man3/hwlocality_disc_backends.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_backend_distances_add_commit.3 b/doc/doxygen-doc/man/man3/hwloc_backend_distances_add_commit.3
new file mode 100644
index 00000000..d4a1bec8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_backend_distances_add_commit.3
@@ -0,0 +1 @@
+.so man3/hwlocality_components_pcifind.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_backend_distances_add_create.3 b/doc/doxygen-doc/man/man3/hwloc_backend_distances_add_create.3
new file mode 100644
index 00000000..d4a1bec8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_backend_distances_add_create.3
@@ -0,0 +1 @@
+.so man3/hwlocality_components_pcifind.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_backend_distances_add_handle_t.3 b/doc/doxygen-doc/man/man3/hwloc_backend_distances_add_handle_t.3
new file mode 100644
index 00000000..d4a1bec8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_backend_distances_add_handle_t.3
@@ -0,0 +1 @@
+.so man3/hwlocality_components_pcifind.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_backend_distances_add_values.3 b/doc/doxygen-doc/man/man3/hwloc_backend_distances_add_values.3
new file mode 100644
index 00000000..d4a1bec8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_backend_distances_add_values.3
@@ -0,0 +1 @@
+.so man3/hwlocality_components_pcifind.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_backend_enable.3 b/doc/doxygen-doc/man/man3/hwloc_backend_enable.3
new file mode 100644
index 00000000..5c3a37b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_backend_enable.3
@@ -0,0 +1 @@
+.so man3/hwlocality_disc_backends.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_allbut.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_allbut.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_allbut.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_alloc.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_alloc.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_alloc.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_alloc_full.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_alloc_full.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_alloc_full.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_and.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_and.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_and.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_andnot.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_andnot.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_andnot.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_asprintf.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_asprintf.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_asprintf.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_clr.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_clr.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_clr.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_clr_range.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_clr_range.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_clr_range.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_compare.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_compare.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_compare.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_compare_first.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_compare_first.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_compare_first.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_copy.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_copy.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_copy.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_dup.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_dup.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_dup.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_fill.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_fill.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_fill.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_first.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_first.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_first.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_first_unset.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_first_unset.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_first_unset.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_foreach_begin.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_foreach_begin.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_foreach_begin.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_foreach_end.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_foreach_end.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_foreach_end.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_free.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_free.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_free.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_from_ith_ulong.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_from_ith_ulong.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_from_ith_ulong.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_from_ulong.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_from_ulong.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_from_ulong.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_from_ulongs.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_from_ulongs.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_from_ulongs.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_intersects.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_intersects.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_intersects.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_isequal.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_isequal.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_isequal.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_isfull.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_isfull.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_isfull.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_isincluded.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_isincluded.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_isincluded.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_isset.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_isset.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_isset.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_iszero.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_iszero.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_iszero.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_last.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_last.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_last.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_last_unset.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_last_unset.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_last_unset.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_list_asprintf.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_list_asprintf.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_list_asprintf.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_list_snprintf.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_list_snprintf.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_list_snprintf.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_list_sscanf.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_list_sscanf.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_list_sscanf.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_next.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_next.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_next.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_next_unset.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_next_unset.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_next_unset.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_not.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_not.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_not.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_nr_ulongs.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_nr_ulongs.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_nr_ulongs.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_only.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_only.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_only.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_or.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_or.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_or.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_set.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_set.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_set.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_set_ith_ulong.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_set_ith_ulong.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_set_ith_ulong.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_set_range.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_set_range.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_set_range.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_singlify.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_singlify.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_singlify.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_singlify_per_core.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_singlify_per_core.3
new file mode 100644
index 00000000..11408cef
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_singlify_per_core.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_find_misc.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_snprintf.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_snprintf.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_snprintf.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_sscanf.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_sscanf.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_sscanf.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_t.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_t.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_t.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_taskset_asprintf.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_taskset_asprintf.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_taskset_asprintf.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_taskset_snprintf.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_taskset_snprintf.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_taskset_snprintf.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_taskset_sscanf.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_taskset_sscanf.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_taskset_sscanf.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_to_ith_ulong.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_to_ith_ulong.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_to_ith_ulong.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_to_ulong.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_to_ulong.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_to_ulong.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_to_ulongs.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_to_ulongs.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_to_ulongs.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_weight.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_weight.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_weight.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_xor.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_xor.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_xor.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bitmap_zero.3 b/doc/doxygen-doc/man/man3/hwloc_bitmap_zero.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bitmap_zero.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_bridge_covers_pcibus.3 b/doc/doxygen-doc/man/man3/hwloc_bridge_covers_pcibus.3
new file mode 100644
index 00000000..76ce5228
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_bridge_covers_pcibus.3
@@ -0,0 +1 @@
+.so man3/hwlocality_advanced_io.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_cl_device_topology_amd.3 b/doc/doxygen-doc/man/man3/hwloc_cl_device_topology_amd.3
new file mode 100644
index 00000000..7a4ff27e
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_cl_device_topology_amd.3
@@ -0,0 +1,69 @@
+.TH "hwloc_cl_device_topology_amd" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_cl_device_topology_amd
+.SH SYNOPSIS
+.br
+.PP
+.PP
+\fC#include <opencl\&.h>\fP
+.SS "Data Fields"
+
+.in +1c
+.ti -1c
+.RI "struct {"
+.br
+.ti -1c
+.RI "   cl_uint \fBtype\fP"
+.br
+.ti -1c
+.RI "   cl_uint \fBdata\fP [5]"
+.br
+.ti -1c
+.RI "} \fBraw\fP"
+.br
+.ti -1c
+.RI "struct {"
+.br
+.ti -1c
+.RI "   cl_uint \fBtype\fP"
+.br
+.ti -1c
+.RI "   cl_char \fBunused\fP [17]"
+.br
+.ti -1c
+.RI "   cl_char \fBbus\fP"
+.br
+.ti -1c
+.RI "   cl_char \fBdevice\fP"
+.br
+.ti -1c
+.RI "   cl_char \fBfunction\fP"
+.br
+.ti -1c
+.RI "} \fBpcie\fP"
+.br
+.in -1c
+.SH "Field Documentation"
+.PP 
+.SS "cl_char hwloc_cl_device_topology_amd::bus"
+
+.SS "cl_uint hwloc_cl_device_topology_amd::data[5]"
+
+.SS "cl_char hwloc_cl_device_topology_amd::device"
+
+.SS "cl_char hwloc_cl_device_topology_amd::function"
+
+.SS "struct { \&.\&.\&. }  hwloc_cl_device_topology_amd::pcie"
+
+.SS "struct { \&.\&.\&. }  hwloc_cl_device_topology_amd::raw"
+
+.SS "cl_uint hwloc_cl_device_topology_amd::type"
+
+.SS "cl_char hwloc_cl_device_topology_amd::unused[17]"
+
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwloc_compare_types.3 b/doc/doxygen-doc/man/man3/hwloc_compare_types.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_compare_types.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_component.3 b/doc/doxygen-doc/man/man3/hwloc_component.3
new file mode 100644
index 00000000..01873f1e
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_component.3
@@ -0,0 +1,92 @@
+.TH "hwloc_component" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_component
+.SH SYNOPSIS
+.br
+.PP
+.PP
+\fC#include <plugins\&.h>\fP
+.SS "Data Fields"
+
+.in +1c
+.ti -1c
+.RI "unsigned \fBabi\fP"
+.br
+.ti -1c
+.RI "int(* \fBinit\fP )(unsigned long \fBflags\fP)"
+.br
+.ti -1c
+.RI "void(* \fBfinalize\fP )(unsigned long \fBflags\fP)"
+.br
+.ti -1c
+.RI "\fBhwloc_component_type_t\fP \fBtype\fP"
+.br
+.ti -1c
+.RI "unsigned long \fBflags\fP"
+.br
+.ti -1c
+.RI "void * \fBdata\fP"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+Generic component structure\&. 
+
+Generic components structure, either statically listed by configure in static-components\&.h or dynamically loaded as a plugin\&. 
+.SH "Field Documentation"
+.PP 
+.SS "unsigned hwloc_component::abi"
+
+.PP
+Component ABI version, set to \fBHWLOC_COMPONENT_ABI\fP\&. 
+.SS "void* hwloc_component::data"
+
+.PP
+Component data, pointing to a struct \fBhwloc_disc_component\fP or struct hwloc_xml_component\&. 
+.SS "void(* hwloc_component::finalize) (unsigned long \fBflags\fP)"
+
+.PP
+Process-wide component termination callback\&. This optional callback is called after unregistering the component from the hwloc core (before unloading the plugin)\&.
+.PP
+\fCflags\fP is always 0 for now\&.
+.PP
+\fBNote\fP
+.RS 4
+If the component uses ltdl for loading its own plugins, it should load/unload them only in \fBinit()\fP and \fBfinalize()\fP, to avoid race conditions with hwloc's use of ltdl\&. 
+.RE
+.PP
+
+.SS "unsigned long hwloc_component::flags"
+
+.PP
+Component flags, unused for now\&. 
+.SS "int(* hwloc_component::init) (unsigned long \fBflags\fP)"
+
+.PP
+Process-wide component initialization callback\&. This optional callback is called when the component is registered to the hwloc core (after loading the plugin)\&.
+.PP
+When the component is built as a plugin, this callback should call hwloc_check_plugin_namespace() and return an negative error code on error\&.
+.PP
+\fCflags\fP is always 0 for now\&.
+.PP
+\fBReturns\fP
+.RS 4
+0 on success, or a negative code on error\&.
+.RE
+.PP
+\fBNote\fP
+.RS 4
+If the component uses ltdl for loading its own plugins, it should load/unload them only in \fBinit()\fP and \fBfinalize()\fP, to avoid race conditions with hwloc's use of ltdl\&. 
+.RE
+.PP
+
+.SS "\fBhwloc_component_type_t\fP hwloc_component::type"
+
+.PP
+Component type\&. 
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwloc_component_type_e.3 b/doc/doxygen-doc/man/man3/hwloc_component_type_e.3
new file mode 100644
index 00000000..fba1000a
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_component_type_e.3
@@ -0,0 +1 @@
+.so man3/hwlocality_generic_components.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_component_type_t.3 b/doc/doxygen-doc/man/man3/hwloc_component_type_t.3
new file mode 100644
index 00000000..fba1000a
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_component_type_t.3
@@ -0,0 +1 @@
+.so man3/hwlocality_generic_components.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_const_bitmap_t.3 b/doc/doxygen-doc/man/man3/hwloc_const_bitmap_t.3
new file mode 100644
index 00000000..2d334298
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_const_bitmap_t.3
@@ -0,0 +1 @@
+.so man3/hwlocality_bitmap.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_const_cpuset_t.3 b/doc/doxygen-doc/man/man3/hwloc_const_cpuset_t.3
new file mode 100644
index 00000000..8458342c
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_const_cpuset_t.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_sets.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_const_nodeset_t.3 b/doc/doxygen-doc/man/man3/hwloc_const_nodeset_t.3
new file mode 100644
index 00000000..8458342c
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_const_nodeset_t.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_sets.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_cpubind_flags_t.3 b/doc/doxygen-doc/man/man3/hwloc_cpubind_flags_t.3
new file mode 100644
index 00000000..4c34d1aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_cpubind_flags_t.3
@@ -0,0 +1 @@
+.so man3/hwlocality_cpubinding.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_cpukinds_get_by_cpuset.3 b/doc/doxygen-doc/man/man3/hwloc_cpukinds_get_by_cpuset.3
new file mode 100644
index 00000000..5336c4b5
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_cpukinds_get_by_cpuset.3
@@ -0,0 +1 @@
+.so man3/hwlocality_cpukinds.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_cpukinds_get_info.3 b/doc/doxygen-doc/man/man3/hwloc_cpukinds_get_info.3
new file mode 100644
index 00000000..5336c4b5
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_cpukinds_get_info.3
@@ -0,0 +1 @@
+.so man3/hwlocality_cpukinds.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_cpukinds_get_nr.3 b/doc/doxygen-doc/man/man3/hwloc_cpukinds_get_nr.3
new file mode 100644
index 00000000..5336c4b5
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_cpukinds_get_nr.3
@@ -0,0 +1 @@
+.so man3/hwlocality_cpukinds.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_cpukinds_register.3 b/doc/doxygen-doc/man/man3/hwloc_cpukinds_register.3
new file mode 100644
index 00000000..5336c4b5
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_cpukinds_register.3
@@ -0,0 +1 @@
+.so man3/hwlocality_cpukinds.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_cpuset_from_glibc_sched_affinity.3 b/doc/doxygen-doc/man/man3/hwloc_cpuset_from_glibc_sched_affinity.3
new file mode 100644
index 00000000..8b397a9d
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_cpuset_from_glibc_sched_affinity.3
@@ -0,0 +1 @@
+.so man3/hwlocality_glibc_sched.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_cpuset_from_linux_libnuma_bitmask.3 b/doc/doxygen-doc/man/man3/hwloc_cpuset_from_linux_libnuma_bitmask.3
new file mode 100644
index 00000000..50f19f61
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_cpuset_from_linux_libnuma_bitmask.3
@@ -0,0 +1 @@
+.so man3/hwlocality_linux_libnuma_bitmask.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_cpuset_from_linux_libnuma_ulongs.3 b/doc/doxygen-doc/man/man3/hwloc_cpuset_from_linux_libnuma_ulongs.3
new file mode 100644
index 00000000..dbdb4c15
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_cpuset_from_linux_libnuma_ulongs.3
@@ -0,0 +1 @@
+.so man3/hwlocality_linux_libnuma_ulongs.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_cpuset_from_nodeset.3 b/doc/doxygen-doc/man/man3/hwloc_cpuset_from_nodeset.3
new file mode 100644
index 00000000..7c005edb
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_cpuset_from_nodeset.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_nodeset_convert.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_cpuset_t.3 b/doc/doxygen-doc/man/man3/hwloc_cpuset_t.3
new file mode 100644
index 00000000..8458342c
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_cpuset_t.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_sets.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_cpuset_to_glibc_sched_affinity.3 b/doc/doxygen-doc/man/man3/hwloc_cpuset_to_glibc_sched_affinity.3
new file mode 100644
index 00000000..8b397a9d
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_cpuset_to_glibc_sched_affinity.3
@@ -0,0 +1 @@
+.so man3/hwlocality_glibc_sched.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_cpuset_to_linux_libnuma_bitmask.3 b/doc/doxygen-doc/man/man3/hwloc_cpuset_to_linux_libnuma_bitmask.3
new file mode 100644
index 00000000..50f19f61
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_cpuset_to_linux_libnuma_bitmask.3
@@ -0,0 +1 @@
+.so man3/hwlocality_linux_libnuma_bitmask.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_cpuset_to_linux_libnuma_ulongs.3 b/doc/doxygen-doc/man/man3/hwloc_cpuset_to_linux_libnuma_ulongs.3
new file mode 100644
index 00000000..dbdb4c15
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_cpuset_to_linux_libnuma_ulongs.3
@@ -0,0 +1 @@
+.so man3/hwlocality_linux_libnuma_ulongs.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_cpuset_to_nodeset.3 b/doc/doxygen-doc/man/man3/hwloc_cpuset_to_nodeset.3
new file mode 100644
index 00000000..7c005edb
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_cpuset_to_nodeset.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_nodeset_convert.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_cuda_get_device_cpuset.3 b/doc/doxygen-doc/man/man3/hwloc_cuda_get_device_cpuset.3
new file mode 100644
index 00000000..69637f63
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_cuda_get_device_cpuset.3
@@ -0,0 +1 @@
+.so man3/hwlocality_cuda.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_cuda_get_device_osdev.3 b/doc/doxygen-doc/man/man3/hwloc_cuda_get_device_osdev.3
new file mode 100644
index 00000000..69637f63
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_cuda_get_device_osdev.3
@@ -0,0 +1 @@
+.so man3/hwlocality_cuda.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_cuda_get_device_osdev_by_index.3 b/doc/doxygen-doc/man/man3/hwloc_cuda_get_device_osdev_by_index.3
new file mode 100644
index 00000000..69637f63
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_cuda_get_device_osdev_by_index.3
@@ -0,0 +1 @@
+.so man3/hwlocality_cuda.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_cuda_get_device_pci_ids.3 b/doc/doxygen-doc/man/man3/hwloc_cuda_get_device_pci_ids.3
new file mode 100644
index 00000000..69637f63
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_cuda_get_device_pci_ids.3
@@ -0,0 +1 @@
+.so man3/hwlocality_cuda.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_cuda_get_device_pcidev.3 b/doc/doxygen-doc/man/man3/hwloc_cuda_get_device_pcidev.3
new file mode 100644
index 00000000..69637f63
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_cuda_get_device_pcidev.3
@@ -0,0 +1 @@
+.so man3/hwlocality_cuda.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_cudart_get_device_cpuset.3 b/doc/doxygen-doc/man/man3/hwloc_cudart_get_device_cpuset.3
new file mode 100644
index 00000000..c02bad9c
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_cudart_get_device_cpuset.3
@@ -0,0 +1 @@
+.so man3/hwlocality_cudart.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_cudart_get_device_osdev_by_index.3 b/doc/doxygen-doc/man/man3/hwloc_cudart_get_device_osdev_by_index.3
new file mode 100644
index 00000000..c02bad9c
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_cudart_get_device_osdev_by_index.3
@@ -0,0 +1 @@
+.so man3/hwlocality_cudart.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_cudart_get_device_pci_ids.3 b/doc/doxygen-doc/man/man3/hwloc_cudart_get_device_pci_ids.3
new file mode 100644
index 00000000..c02bad9c
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_cudart_get_device_pci_ids.3
@@ -0,0 +1 @@
+.so man3/hwlocality_cudart.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_cudart_get_device_pcidev.3 b/doc/doxygen-doc/man/man3/hwloc_cudart_get_device_pcidev.3
new file mode 100644
index 00000000..c02bad9c
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_cudart_get_device_pcidev.3
@@ -0,0 +1 @@
+.so man3/hwlocality_cudart.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_disc_component.3 b/doc/doxygen-doc/man/man3/hwloc_disc_component.3
new file mode 100644
index 00000000..1b6dcb0b
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_disc_component.3
@@ -0,0 +1,69 @@
+.TH "hwloc_disc_component" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_disc_component
+.SH SYNOPSIS
+.br
+.PP
+.PP
+\fC#include <plugins\&.h>\fP
+.SS "Data Fields"
+
+.in +1c
+.ti -1c
+.RI "const char * \fBname\fP"
+.br
+.ti -1c
+.RI "unsigned \fBphases\fP"
+.br
+.ti -1c
+.RI "unsigned \fBexcluded_phases\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_backend\fP *(* \fBinstantiate\fP )(struct hwloc_topology *topology, struct \fBhwloc_disc_component\fP *component, unsigned \fBexcluded_phases\fP, const void *data1, const void *data2, const void *data3)"
+.br
+.ti -1c
+.RI "unsigned \fBpriority\fP"
+.br
+.ti -1c
+.RI "unsigned \fBenabled_by_default\fP"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+Discovery component structure\&. 
+
+This is the major kind of components, taking care of the discovery\&. They are registered by generic components, either statically-built or as plugins\&. 
+.SH "Field Documentation"
+.PP 
+.SS "unsigned hwloc_disc_component::enabled_by_default"
+
+.PP
+Enabled by default\&. If unset, if will be disabled unless explicitly requested\&. 
+.SS "unsigned hwloc_disc_component::excluded_phases"
+
+.PP
+Component phases to exclude, as an OR'ed set of \fBhwloc_disc_phase_t\fP\&. For a GLOBAL component, this usually includes all other phases (\fC~UL\fP)\&.
+.PP
+Other components only exclude types that may bring conflicting topology information\&. MISC components should likely not be excluded since they usually bring non-primary additional information\&. 
+.SS "struct \fBhwloc_backend\fP*(* hwloc_disc_component::instantiate) (struct hwloc_topology *topology, struct \fBhwloc_disc_component\fP *component, unsigned \fBexcluded_phases\fP, const void *data1, const void *data2, const void *data3)"
+
+.PP
+Instantiate callback to create a backend from the component\&. Parameters data1, data2, data3 are NULL except for components that have special enabling routines such as \fBhwloc_topology_set_xml()\fP\&. 
+.SS "const char* hwloc_disc_component::name"
+
+.PP
+Name\&. If this component is built as a plugin, this name does not have to match the plugin filename\&. 
+.SS "unsigned hwloc_disc_component::phases"
+
+.PP
+Discovery phases performed by this component\&. OR'ed set of \fBhwloc_disc_phase_t\fP\&. 
+.SS "unsigned hwloc_disc_component::priority"
+
+.PP
+Component priority\&. Used to sort topology->components, higher priority first\&. Also used to decide between two components with the same name\&. Usual values are 50 for native OS (or platform) components, 45 for x86, 40 for no-OS fallback, 30 for global components (xml, synthetic), 20 for pci, 10 for other misc components (opencl etc\&.)\&. 
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwloc_disc_phase_e.3 b/doc/doxygen-doc/man/man3/hwloc_disc_phase_e.3
new file mode 100644
index 00000000..5c3a37b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_disc_phase_e.3
@@ -0,0 +1 @@
+.so man3/hwlocality_disc_backends.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_disc_phase_t.3 b/doc/doxygen-doc/man/man3/hwloc_disc_phase_t.3
new file mode 100644
index 00000000..5c3a37b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_disc_phase_t.3
@@ -0,0 +1 @@
+.so man3/hwlocality_disc_backends.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_disc_status.3 b/doc/doxygen-doc/man/man3/hwloc_disc_status.3
new file mode 100644
index 00000000..86619ff0
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_disc_status.3
@@ -0,0 +1,46 @@
+.TH "hwloc_disc_status" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_disc_status
+.SH SYNOPSIS
+.br
+.PP
+.PP
+\fC#include <plugins\&.h>\fP
+.SS "Data Fields"
+
+.in +1c
+.ti -1c
+.RI "\fBhwloc_disc_phase_t\fP \fBphase\fP"
+.br
+.ti -1c
+.RI "unsigned \fBexcluded_phases\fP"
+.br
+.ti -1c
+.RI "unsigned long \fBflags\fP"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+Discovery status structure\&. 
+
+Used by the core and backends to inform about what has been/is being done during the discovery process\&. 
+.SH "Field Documentation"
+.PP 
+.SS "unsigned hwloc_disc_status::excluded_phases"
+
+.PP
+Dynamically excluded phases\&. If a component decides during discovery that some phases are no longer needed\&. 
+.SS "unsigned long hwloc_disc_status::flags"
+
+.PP
+OR'ed set of hwloc_disc_status_flag_e\&. 
+.SS "\fBhwloc_disc_phase_t\fP hwloc_disc_status::phase"
+
+.PP
+The current discovery phase that is performed\&. Must match one of the phases in the component phases field\&. 
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwloc_disc_status_flag_e.3 b/doc/doxygen-doc/man/man3/hwloc_disc_status_flag_e.3
new file mode 100644
index 00000000..5c3a37b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_disc_status_flag_e.3
@@ -0,0 +1 @@
+.so man3/hwlocality_disc_backends.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_distances_add_commit.3 b/doc/doxygen-doc/man/man3/hwloc_distances_add_commit.3
new file mode 100644
index 00000000..9e9a1792
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_distances_add_commit.3
@@ -0,0 +1 @@
+.so man3/hwlocality_distances_add.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_distances_add_create.3 b/doc/doxygen-doc/man/man3/hwloc_distances_add_create.3
new file mode 100644
index 00000000..9e9a1792
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_distances_add_create.3
@@ -0,0 +1 @@
+.so man3/hwlocality_distances_add.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_distances_add_flag_e.3 b/doc/doxygen-doc/man/man3/hwloc_distances_add_flag_e.3
new file mode 100644
index 00000000..9e9a1792
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_distances_add_flag_e.3
@@ -0,0 +1 @@
+.so man3/hwlocality_distances_add.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_distances_add_handle_t.3 b/doc/doxygen-doc/man/man3/hwloc_distances_add_handle_t.3
new file mode 100644
index 00000000..9e9a1792
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_distances_add_handle_t.3
@@ -0,0 +1 @@
+.so man3/hwlocality_distances_add.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_distances_add_values.3 b/doc/doxygen-doc/man/man3/hwloc_distances_add_values.3
new file mode 100644
index 00000000..9e9a1792
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_distances_add_values.3
@@ -0,0 +1 @@
+.so man3/hwlocality_distances_add.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_distances_get.3 b/doc/doxygen-doc/man/man3/hwloc_distances_get.3
new file mode 100644
index 00000000..5384e666
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_distances_get.3
@@ -0,0 +1 @@
+.so man3/hwlocality_distances_get.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_distances_get_by_depth.3 b/doc/doxygen-doc/man/man3/hwloc_distances_get_by_depth.3
new file mode 100644
index 00000000..5384e666
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_distances_get_by_depth.3
@@ -0,0 +1 @@
+.so man3/hwlocality_distances_get.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_distances_get_by_name.3 b/doc/doxygen-doc/man/man3/hwloc_distances_get_by_name.3
new file mode 100644
index 00000000..5384e666
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_distances_get_by_name.3
@@ -0,0 +1 @@
+.so man3/hwlocality_distances_get.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_distances_get_by_type.3 b/doc/doxygen-doc/man/man3/hwloc_distances_get_by_type.3
new file mode 100644
index 00000000..5384e666
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_distances_get_by_type.3
@@ -0,0 +1 @@
+.so man3/hwlocality_distances_get.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_distances_get_name.3 b/doc/doxygen-doc/man/man3/hwloc_distances_get_name.3
new file mode 100644
index 00000000..5384e666
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_distances_get_name.3
@@ -0,0 +1 @@
+.so man3/hwlocality_distances_get.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_distances_kind_e.3 b/doc/doxygen-doc/man/man3/hwloc_distances_kind_e.3
new file mode 100644
index 00000000..5384e666
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_distances_kind_e.3
@@ -0,0 +1 @@
+.so man3/hwlocality_distances_get.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_distances_obj_index.3 b/doc/doxygen-doc/man/man3/hwloc_distances_obj_index.3
new file mode 100644
index 00000000..e768c264
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_distances_obj_index.3
@@ -0,0 +1 @@
+.so man3/hwlocality_distances_consult.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_distances_obj_pair_values.3 b/doc/doxygen-doc/man/man3/hwloc_distances_obj_pair_values.3
new file mode 100644
index 00000000..e768c264
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_distances_obj_pair_values.3
@@ -0,0 +1 @@
+.so man3/hwlocality_distances_consult.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_distances_release.3 b/doc/doxygen-doc/man/man3/hwloc_distances_release.3
new file mode 100644
index 00000000..5384e666
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_distances_release.3
@@ -0,0 +1 @@
+.so man3/hwlocality_distances_get.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_distances_release_remove.3 b/doc/doxygen-doc/man/man3/hwloc_distances_release_remove.3
new file mode 100644
index 00000000..447e5dd6
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_distances_release_remove.3
@@ -0,0 +1 @@
+.so man3/hwlocality_distances_remove.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_distances_remove.3 b/doc/doxygen-doc/man/man3/hwloc_distances_remove.3
new file mode 100644
index 00000000..447e5dd6
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_distances_remove.3
@@ -0,0 +1 @@
+.so man3/hwlocality_distances_remove.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_distances_remove_by_depth.3 b/doc/doxygen-doc/man/man3/hwloc_distances_remove_by_depth.3
new file mode 100644
index 00000000..447e5dd6
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_distances_remove_by_depth.3
@@ -0,0 +1 @@
+.so man3/hwlocality_distances_remove.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_distances_remove_by_type.3 b/doc/doxygen-doc/man/man3/hwloc_distances_remove_by_type.3
new file mode 100644
index 00000000..447e5dd6
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_distances_remove_by_type.3
@@ -0,0 +1 @@
+.so man3/hwlocality_distances_remove.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_distances_s.3 b/doc/doxygen-doc/man/man3/hwloc_distances_s.3
new file mode 100644
index 00000000..1fe827eb
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_distances_s.3
@@ -0,0 +1,57 @@
+.TH "hwloc_distances_s" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_distances_s
+.SH SYNOPSIS
+.br
+.PP
+.PP
+\fC#include <distances\&.h>\fP
+.SS "Data Fields"
+
+.in +1c
+.ti -1c
+.RI "unsigned \fBnbobjs\fP"
+.br
+.ti -1c
+.RI "\fBhwloc_obj_t\fP * \fBobjs\fP"
+.br
+.ti -1c
+.RI "unsigned long \fBkind\fP"
+.br
+.ti -1c
+.RI "hwloc_uint64_t * \fBvalues\fP"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+Matrix of distances between a set of objects\&. 
+
+This matrix often contains latencies between NUMA nodes (as reported in the System Locality Distance Information Table (SLIT) in the ACPI specification), which may or may not be physically accurate\&. It corresponds to the latency for accessing the memory of one node from a core in another node\&. The corresponding kind is \fBHWLOC_DISTANCES_KIND_FROM_OS\fP | \fBHWLOC_DISTANCES_KIND_FROM_USER\fP\&. The name of this distances structure is 'NUMALatency'\&. Others distance structures include and 'XGMIBandwidth', 'XGMIHops', 'XeLinkBandwidth' and 'NVLinkBandwidth'\&.
+.PP
+The matrix may also contain bandwidths between random sets of objects, possibly provided by the user, as specified in the \fCkind\fP attribute\&.
+.PP
+Pointers \fCobjs\fP and \fCvalues\fP should not be replaced, reallocated, freed, etc\&. However callers are allowed to modify \fCkind\fP as well as the contents of \fCobjs\fP and \fCvalues\fP arrays\&. For instance, if there is a single NUMA node per Package, \fBhwloc_get_obj_with_same_locality()\fP may be used to convert between them and replace NUMA nodes in the \fCobjs\fP array with the corresponding Packages\&. See also \fBhwloc_distances_transform()\fP for applying some transformations to the structure\&. 
+.SH "Field Documentation"
+.PP 
+.SS "unsigned long hwloc_distances_s::kind"
+
+.PP
+OR'ed set of \fBhwloc_distances_kind_e\fP\&. 
+.SS "unsigned hwloc_distances_s::nbobjs"
+
+.PP
+Number of objects described by the distance matrix\&. 
+.SS "\fBhwloc_obj_t\fP* hwloc_distances_s::objs"
+
+.PP
+Array of objects described by the distance matrix\&. These objects are not in any particular order, see \fBhwloc_distances_obj_index()\fP and \fBhwloc_distances_obj_pair_values()\fP for easy ways to find objects in this array and their corresponding values\&. 
+.SS "hwloc_uint64_t* hwloc_distances_s::values"
+
+.PP
+Matrix of distances between objects, stored as a one-dimension array\&. Distance from i-th to j-th object is stored in slot i*nbobjs+j\&. The meaning of the value depends on the \fCkind\fP attribute\&. 
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwloc_distances_transform.3 b/doc/doxygen-doc/man/man3/hwloc_distances_transform.3
new file mode 100644
index 00000000..5384e666
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_distances_transform.3
@@ -0,0 +1 @@
+.so man3/hwlocality_distances_get.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_distances_transform_e.3 b/doc/doxygen-doc/man/man3/hwloc_distances_transform_e.3
new file mode 100644
index 00000000..5384e666
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_distances_transform_e.3
@@ -0,0 +1 @@
+.so man3/hwlocality_distances_get.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_distrib.3 b/doc/doxygen-doc/man/man3/hwloc_distrib.3
new file mode 100644
index 00000000..cad11636
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_distrib.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_distribute.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_distrib_flags_e.3 b/doc/doxygen-doc/man/man3/hwloc_distrib_flags_e.3
new file mode 100644
index 00000000..cad11636
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_distrib_flags_e.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_distribute.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_export_obj_userdata.3 b/doc/doxygen-doc/man/man3/hwloc_export_obj_userdata.3
new file mode 100644
index 00000000..289c696f
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_export_obj_userdata.3
@@ -0,0 +1 @@
+.so man3/hwlocality_xmlexport.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_export_obj_userdata_base64.3 b/doc/doxygen-doc/man/man3/hwloc_export_obj_userdata_base64.3
new file mode 100644
index 00000000..289c696f
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_export_obj_userdata_base64.3
@@ -0,0 +1 @@
+.so man3/hwlocality_xmlexport.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_filter_check_keep_object.3 b/doc/doxygen-doc/man/man3/hwloc_filter_check_keep_object.3
new file mode 100644
index 00000000..8906a947
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_filter_check_keep_object.3
@@ -0,0 +1 @@
+.so man3/hwlocality_components_filtering.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_filter_check_keep_object_type.3 b/doc/doxygen-doc/man/man3/hwloc_filter_check_keep_object_type.3
new file mode 100644
index 00000000..8906a947
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_filter_check_keep_object_type.3
@@ -0,0 +1 @@
+.so man3/hwlocality_components_filtering.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_filter_check_osdev_subtype_important.3 b/doc/doxygen-doc/man/man3/hwloc_filter_check_osdev_subtype_important.3
new file mode 100644
index 00000000..8906a947
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_filter_check_osdev_subtype_important.3
@@ -0,0 +1 @@
+.so man3/hwlocality_components_filtering.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_filter_check_pcidev_subtype_important.3 b/doc/doxygen-doc/man/man3/hwloc_filter_check_pcidev_subtype_important.3
new file mode 100644
index 00000000..8906a947
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_filter_check_pcidev_subtype_important.3
@@ -0,0 +1 @@
+.so man3/hwlocality_components_filtering.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_free.3 b/doc/doxygen-doc/man/man3/hwloc_free.3
new file mode 100644
index 00000000..a7c83a19
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_free.3
@@ -0,0 +1 @@
+.so man3/hwlocality_membinding.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_free_xmlbuffer.3 b/doc/doxygen-doc/man/man3/hwloc_free_xmlbuffer.3
new file mode 100644
index 00000000..289c696f
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_free_xmlbuffer.3
@@ -0,0 +1 @@
+.so man3/hwlocality_xmlexport.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_ancestor_obj_by_depth.3 b/doc/doxygen-doc/man/man3/hwloc_get_ancestor_obj_by_depth.3
new file mode 100644
index 00000000..dafa088e
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_ancestor_obj_by_depth.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_ancestors.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_ancestor_obj_by_type.3 b/doc/doxygen-doc/man/man3/hwloc_get_ancestor_obj_by_type.3
new file mode 100644
index 00000000..dafa088e
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_ancestor_obj_by_type.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_ancestors.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_api_version.3 b/doc/doxygen-doc/man/man3/hwloc_get_api_version.3
new file mode 100644
index 00000000..818ca71b
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_api_version.3
@@ -0,0 +1 @@
+.so man3/hwlocality_api_version.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_area_membind.3 b/doc/doxygen-doc/man/man3/hwloc_get_area_membind.3
new file mode 100644
index 00000000..a7c83a19
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_area_membind.3
@@ -0,0 +1 @@
+.so man3/hwlocality_membinding.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_area_memlocation.3 b/doc/doxygen-doc/man/man3/hwloc_get_area_memlocation.3
new file mode 100644
index 00000000..a7c83a19
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_area_memlocation.3
@@ -0,0 +1 @@
+.so man3/hwlocality_membinding.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_cache_covering_cpuset.3 b/doc/doxygen-doc/man/man3/hwloc_get_cache_covering_cpuset.3
new file mode 100644
index 00000000..b2aa42f5
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_cache_covering_cpuset.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_find_cache.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_cache_type_depth.3 b/doc/doxygen-doc/man/man3/hwloc_get_cache_type_depth.3
new file mode 100644
index 00000000..b2aa42f5
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_cache_type_depth.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_find_cache.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_child_covering_cpuset.3 b/doc/doxygen-doc/man/man3/hwloc_get_child_covering_cpuset.3
new file mode 100644
index 00000000..6197685b
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_child_covering_cpuset.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_find_covering.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_closest_objs.3 b/doc/doxygen-doc/man/man3/hwloc_get_closest_objs.3
new file mode 100644
index 00000000..11408cef
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_closest_objs.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_find_misc.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_common_ancestor_obj.3 b/doc/doxygen-doc/man/man3/hwloc_get_common_ancestor_obj.3
new file mode 100644
index 00000000..dafa088e
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_common_ancestor_obj.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_ancestors.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_cpubind.3 b/doc/doxygen-doc/man/man3/hwloc_get_cpubind.3
new file mode 100644
index 00000000..4c34d1aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_cpubind.3
@@ -0,0 +1 @@
+.so man3/hwlocality_cpubinding.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_depth_type.3 b/doc/doxygen-doc/man/man3/hwloc_get_depth_type.3
new file mode 100644
index 00000000..d14934f8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_depth_type.3
@@ -0,0 +1 @@
+.so man3/hwlocality_levels.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_first_largest_obj_inside_cpuset.3 b/doc/doxygen-doc/man/man3/hwloc_get_first_largest_obj_inside_cpuset.3
new file mode 100644
index 00000000..2b2d3d72
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_first_largest_obj_inside_cpuset.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_find_inside.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_largest_objs_inside_cpuset.3 b/doc/doxygen-doc/man/man3/hwloc_get_largest_objs_inside_cpuset.3
new file mode 100644
index 00000000..2b2d3d72
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_largest_objs_inside_cpuset.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_find_inside.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_last_cpu_location.3 b/doc/doxygen-doc/man/man3/hwloc_get_last_cpu_location.3
new file mode 100644
index 00000000..4c34d1aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_last_cpu_location.3
@@ -0,0 +1 @@
+.so man3/hwlocality_cpubinding.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_local_numanode_objs.3 b/doc/doxygen-doc/man/man3/hwloc_get_local_numanode_objs.3
new file mode 100644
index 00000000..4898e094
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_local_numanode_objs.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_membind.3 b/doc/doxygen-doc/man/man3/hwloc_get_membind.3
new file mode 100644
index 00000000..a7c83a19
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_membind.3
@@ -0,0 +1 @@
+.so man3/hwlocality_membinding.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_memory_parents_depth.3 b/doc/doxygen-doc/man/man3/hwloc_get_memory_parents_depth.3
new file mode 100644
index 00000000..d14934f8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_memory_parents_depth.3
@@ -0,0 +1 @@
+.so man3/hwlocality_levels.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_nbobjs_by_depth.3 b/doc/doxygen-doc/man/man3/hwloc_get_nbobjs_by_depth.3
new file mode 100644
index 00000000..d14934f8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_nbobjs_by_depth.3
@@ -0,0 +1 @@
+.so man3/hwlocality_levels.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_nbobjs_by_type.3 b/doc/doxygen-doc/man/man3/hwloc_get_nbobjs_by_type.3
new file mode 100644
index 00000000..d14934f8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_nbobjs_by_type.3
@@ -0,0 +1 @@
+.so man3/hwlocality_levels.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_nbobjs_inside_cpuset_by_depth.3 b/doc/doxygen-doc/man/man3/hwloc_get_nbobjs_inside_cpuset_by_depth.3
new file mode 100644
index 00000000..2b2d3d72
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_nbobjs_inside_cpuset_by_depth.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_find_inside.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_nbobjs_inside_cpuset_by_type.3 b/doc/doxygen-doc/man/man3/hwloc_get_nbobjs_inside_cpuset_by_type.3
new file mode 100644
index 00000000..2b2d3d72
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_nbobjs_inside_cpuset_by_type.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_find_inside.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_next_bridge.3 b/doc/doxygen-doc/man/man3/hwloc_get_next_bridge.3
new file mode 100644
index 00000000..76ce5228
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_next_bridge.3
@@ -0,0 +1 @@
+.so man3/hwlocality_advanced_io.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_next_child.3 b/doc/doxygen-doc/man/man3/hwloc_get_next_child.3
new file mode 100644
index 00000000..dafa088e
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_next_child.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_ancestors.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_next_obj_by_depth.3 b/doc/doxygen-doc/man/man3/hwloc_get_next_obj_by_depth.3
new file mode 100644
index 00000000..d14934f8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_next_obj_by_depth.3
@@ -0,0 +1 @@
+.so man3/hwlocality_levels.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_next_obj_by_type.3 b/doc/doxygen-doc/man/man3/hwloc_get_next_obj_by_type.3
new file mode 100644
index 00000000..d14934f8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_next_obj_by_type.3
@@ -0,0 +1 @@
+.so man3/hwlocality_levels.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_next_obj_covering_cpuset_by_depth.3 b/doc/doxygen-doc/man/man3/hwloc_get_next_obj_covering_cpuset_by_depth.3
new file mode 100644
index 00000000..6197685b
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_next_obj_covering_cpuset_by_depth.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_find_covering.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_next_obj_covering_cpuset_by_type.3 b/doc/doxygen-doc/man/man3/hwloc_get_next_obj_covering_cpuset_by_type.3
new file mode 100644
index 00000000..6197685b
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_next_obj_covering_cpuset_by_type.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_find_covering.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_next_obj_inside_cpuset_by_depth.3 b/doc/doxygen-doc/man/man3/hwloc_get_next_obj_inside_cpuset_by_depth.3
new file mode 100644
index 00000000..2b2d3d72
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_next_obj_inside_cpuset_by_depth.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_find_inside.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_next_obj_inside_cpuset_by_type.3 b/doc/doxygen-doc/man/man3/hwloc_get_next_obj_inside_cpuset_by_type.3
new file mode 100644
index 00000000..2b2d3d72
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_next_obj_inside_cpuset_by_type.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_find_inside.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_next_osdev.3 b/doc/doxygen-doc/man/man3/hwloc_get_next_osdev.3
new file mode 100644
index 00000000..76ce5228
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_next_osdev.3
@@ -0,0 +1 @@
+.so man3/hwlocality_advanced_io.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_next_pcidev.3 b/doc/doxygen-doc/man/man3/hwloc_get_next_pcidev.3
new file mode 100644
index 00000000..76ce5228
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_next_pcidev.3
@@ -0,0 +1 @@
+.so man3/hwlocality_advanced_io.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_non_io_ancestor_obj.3 b/doc/doxygen-doc/man/man3/hwloc_get_non_io_ancestor_obj.3
new file mode 100644
index 00000000..76ce5228
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_non_io_ancestor_obj.3
@@ -0,0 +1 @@
+.so man3/hwlocality_advanced_io.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_numanode_obj_by_os_index.3 b/doc/doxygen-doc/man/man3/hwloc_get_numanode_obj_by_os_index.3
new file mode 100644
index 00000000..11408cef
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_numanode_obj_by_os_index.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_find_misc.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_obj_below_array_by_type.3 b/doc/doxygen-doc/man/man3/hwloc_get_obj_below_array_by_type.3
new file mode 100644
index 00000000..11408cef
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_obj_below_array_by_type.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_find_misc.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_obj_below_by_type.3 b/doc/doxygen-doc/man/man3/hwloc_get_obj_below_by_type.3
new file mode 100644
index 00000000..11408cef
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_obj_below_by_type.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_find_misc.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_obj_by_depth.3 b/doc/doxygen-doc/man/man3/hwloc_get_obj_by_depth.3
new file mode 100644
index 00000000..d14934f8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_obj_by_depth.3
@@ -0,0 +1 @@
+.so man3/hwlocality_levels.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_obj_by_type.3 b/doc/doxygen-doc/man/man3/hwloc_get_obj_by_type.3
new file mode 100644
index 00000000..d14934f8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_obj_by_type.3
@@ -0,0 +1 @@
+.so man3/hwlocality_levels.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_obj_covering_cpuset.3 b/doc/doxygen-doc/man/man3/hwloc_get_obj_covering_cpuset.3
new file mode 100644
index 00000000..6197685b
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_obj_covering_cpuset.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_find_covering.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_obj_index_inside_cpuset.3 b/doc/doxygen-doc/man/man3/hwloc_get_obj_index_inside_cpuset.3
new file mode 100644
index 00000000..2b2d3d72
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_obj_index_inside_cpuset.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_find_inside.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_obj_inside_cpuset_by_depth.3 b/doc/doxygen-doc/man/man3/hwloc_get_obj_inside_cpuset_by_depth.3
new file mode 100644
index 00000000..2b2d3d72
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_obj_inside_cpuset_by_depth.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_find_inside.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_obj_inside_cpuset_by_type.3 b/doc/doxygen-doc/man/man3/hwloc_get_obj_inside_cpuset_by_type.3
new file mode 100644
index 00000000..2b2d3d72
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_obj_inside_cpuset_by_type.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_find_inside.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_obj_with_same_locality.3 b/doc/doxygen-doc/man/man3/hwloc_get_obj_with_same_locality.3
new file mode 100644
index 00000000..11408cef
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_obj_with_same_locality.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_find_misc.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_pcidev_by_busid.3 b/doc/doxygen-doc/man/man3/hwloc_get_pcidev_by_busid.3
new file mode 100644
index 00000000..76ce5228
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_pcidev_by_busid.3
@@ -0,0 +1 @@
+.so man3/hwlocality_advanced_io.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_pcidev_by_busidstring.3 b/doc/doxygen-doc/man/man3/hwloc_get_pcidev_by_busidstring.3
new file mode 100644
index 00000000..76ce5228
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_pcidev_by_busidstring.3
@@ -0,0 +1 @@
+.so man3/hwlocality_advanced_io.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_proc_cpubind.3 b/doc/doxygen-doc/man/man3/hwloc_get_proc_cpubind.3
new file mode 100644
index 00000000..4c34d1aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_proc_cpubind.3
@@ -0,0 +1 @@
+.so man3/hwlocality_cpubinding.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_proc_last_cpu_location.3 b/doc/doxygen-doc/man/man3/hwloc_get_proc_last_cpu_location.3
new file mode 100644
index 00000000..4c34d1aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_proc_last_cpu_location.3
@@ -0,0 +1 @@
+.so man3/hwlocality_cpubinding.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_proc_membind.3 b/doc/doxygen-doc/man/man3/hwloc_get_proc_membind.3
new file mode 100644
index 00000000..a7c83a19
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_proc_membind.3
@@ -0,0 +1 @@
+.so man3/hwlocality_membinding.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_pu_obj_by_os_index.3 b/doc/doxygen-doc/man/man3/hwloc_get_pu_obj_by_os_index.3
new file mode 100644
index 00000000..11408cef
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_pu_obj_by_os_index.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_find_misc.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_root_obj.3 b/doc/doxygen-doc/man/man3/hwloc_get_root_obj.3
new file mode 100644
index 00000000..d14934f8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_root_obj.3
@@ -0,0 +1 @@
+.so man3/hwlocality_levels.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_shared_cache_covering_obj.3 b/doc/doxygen-doc/man/man3/hwloc_get_shared_cache_covering_obj.3
new file mode 100644
index 00000000..b2aa42f5
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_shared_cache_covering_obj.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_find_cache.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_thread_cpubind.3 b/doc/doxygen-doc/man/man3/hwloc_get_thread_cpubind.3
new file mode 100644
index 00000000..4c34d1aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_thread_cpubind.3
@@ -0,0 +1 @@
+.so man3/hwlocality_cpubinding.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_type_depth.3 b/doc/doxygen-doc/man/man3/hwloc_get_type_depth.3
new file mode 100644
index 00000000..d14934f8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_type_depth.3
@@ -0,0 +1 @@
+.so man3/hwlocality_levels.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_type_depth_e.3 b/doc/doxygen-doc/man/man3/hwloc_get_type_depth_e.3
new file mode 100644
index 00000000..d14934f8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_type_depth_e.3
@@ -0,0 +1 @@
+.so man3/hwlocality_levels.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_type_or_above_depth.3 b/doc/doxygen-doc/man/man3/hwloc_get_type_or_above_depth.3
new file mode 100644
index 00000000..d14934f8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_type_or_above_depth.3
@@ -0,0 +1 @@
+.so man3/hwlocality_levels.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_get_type_or_below_depth.3 b/doc/doxygen-doc/man/man3/hwloc_get_type_or_below_depth.3
new file mode 100644
index 00000000..d14934f8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_get_type_or_below_depth.3
@@ -0,0 +1 @@
+.so man3/hwlocality_levels.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_gl_get_display_by_osdev.3 b/doc/doxygen-doc/man/man3/hwloc_gl_get_display_by_osdev.3
new file mode 100644
index 00000000..7f97d644
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_gl_get_display_by_osdev.3
@@ -0,0 +1 @@
+.so man3/hwlocality_gl.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_gl_get_display_osdev_by_name.3 b/doc/doxygen-doc/man/man3/hwloc_gl_get_display_osdev_by_name.3
new file mode 100644
index 00000000..7f97d644
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_gl_get_display_osdev_by_name.3
@@ -0,0 +1 @@
+.so man3/hwlocality_gl.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_gl_get_display_osdev_by_port_device.3 b/doc/doxygen-doc/man/man3/hwloc_gl_get_display_osdev_by_port_device.3
new file mode 100644
index 00000000..7f97d644
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_gl_get_display_osdev_by_port_device.3
@@ -0,0 +1 @@
+.so man3/hwlocality_gl.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_hide_errors.3 b/doc/doxygen-doc/man/man3/hwloc_hide_errors.3
new file mode 100644
index 00000000..7d645186
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_hide_errors.3
@@ -0,0 +1 @@
+.so man3/hwlocality_components_core_funcs.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_ibv_get_device_cpuset.3 b/doc/doxygen-doc/man/man3/hwloc_ibv_get_device_cpuset.3
new file mode 100644
index 00000000..35c22c92
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_ibv_get_device_cpuset.3
@@ -0,0 +1 @@
+.so man3/hwlocality_openfabrics.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_ibv_get_device_osdev.3 b/doc/doxygen-doc/man/man3/hwloc_ibv_get_device_osdev.3
new file mode 100644
index 00000000..35c22c92
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_ibv_get_device_osdev.3
@@ -0,0 +1 @@
+.so man3/hwlocality_openfabrics.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_ibv_get_device_osdev_by_name.3 b/doc/doxygen-doc/man/man3/hwloc_ibv_get_device_osdev_by_name.3
new file mode 100644
index 00000000..35c22c92
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_ibv_get_device_osdev_by_name.3
@@ -0,0 +1 @@
+.so man3/hwlocality_openfabrics.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_info_s.3 b/doc/doxygen-doc/man/man3/hwloc_info_s.3
new file mode 100644
index 00000000..808d4864
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_info_s.3
@@ -0,0 +1,46 @@
+.TH "hwloc_info_s" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_info_s
+.SH SYNOPSIS
+.br
+.PP
+.PP
+\fC#include <hwloc\&.h>\fP
+.SS "Data Fields"
+
+.in +1c
+.ti -1c
+.RI "char * \fBname\fP"
+.br
+.ti -1c
+.RI "char * \fBvalue\fP"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+Object info\&. 
+
+
+.PP
+\fBSee also\fP
+.RS 4
+\fBConsulting and Adding Key-Value Info Attributes\fP 
+.RE
+.PP
+
+.SH "Field Documentation"
+.PP 
+.SS "char* hwloc_info_s::name"
+
+.PP
+Info name\&. 
+.SS "char* hwloc_info_s::value"
+
+.PP
+Info value\&. 
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwloc_insert_object_by_parent.3 b/doc/doxygen-doc/man/man3/hwloc_insert_object_by_parent.3
new file mode 100644
index 00000000..7d645186
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_insert_object_by_parent.3
@@ -0,0 +1 @@
+.so man3/hwlocality_components_core_funcs.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_intro.3 b/doc/doxygen-doc/man/man3/hwloc_intro.3
new file mode 100644
index 00000000..ff2ab41b
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_intro.3
@@ -0,0 +1,534 @@
+.TH "hwloc_intro" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_intro \- Hardware Locality (hwloc) Introduction 
+
+.SH "Portable abstraction of hierarchical architectures for high-performance computing"
+.PP
+.PP
+.PP
+.PP
+ See also \fBFurther Reading\fP  for links to more sections about hwloc concepts\&. 
+.PP
+ 
+.SH "hwloc Summary"
+.PP
+hwloc provides command line tools and a C API to obtain the hierarchical map of key computing elements within a node, such as: NUMA memory nodes, shared caches, processor packages, dies and cores, processing units (logical processors or 'threads') and even I/O devices\&. hwloc also gathers various attributes such as cache and memory information, and is portable across a variety of different operating systems and platforms\&.
+.PP
+hwloc primarily aims at helping high-performance computing (HPC) applications, but is also applicable to any project seeking to exploit code and/or data locality on modern computing platforms\&.
+.PP
+hwloc supports the following operating systems:
+.PP
+.PD 0
+.IP "\(bu" 2
+Linux (including old kernels not having sysfs topology information, with knowledge of cpusets, ScaleMP vSMP support, etc\&.) on all supported hardware, including Intel Xeon Phi and NumaScale NumaConnect\&. 
+.IP "\(bu" 2
+Solaris (with support for processor sets and logical domains) 
+.IP "\(bu" 2
+AIX 
+.IP "\(bu" 2
+Darwin / OS X 
+.IP "\(bu" 2
+FreeBSD and its variants (such as kFreeBSD/GNU) 
+.IP "\(bu" 2
+NetBSD 
+.IP "\(bu" 2
+HP-UX 
+.IP "\(bu" 2
+Microsoft Windows 
+.IP "\(bu" 2
+IBM BlueGene/Q Compute Node Kernel (CNK) 
+.PP
+.PP
+Since it uses standard Operating System information, hwloc's support is mostly independant from the processor type (x86, powerpc, \&.\&.\&.) and just relies on the Operating System support\&. The main exception is BSD operating systems (NetBSD, FreeBSD, etc\&.) because they do not provide support topology information, hence hwloc uses an x86-only CPUID-based backend (which can be used for other OSes too, see the \fBComponents and plugins\fP section)\&.
+.PP
+To check whether hwloc works on a particular machine, just try to build it and run \fClstopo\fP or \fClstopo-no-graphics\fP\&. If some things do not look right (e\&.g\&. bogus or missing cache information), see \fBQuestions and Bugs\fP\&.
+.PP
+hwloc only reports the number of processors on unsupported operating systems; no topology information is available\&.
+.PP
+For development and debugging purposes, hwloc also offers the ability to work on 'fake' topologies:
+.PP
+.PD 0
+.IP "\(bu" 2
+Symmetrical tree of resources generated from a list of level arities, see \fBSynthetic topologies\fP\&. 
+.IP "\(bu" 2
+Remote machine simulation through the gathering of topology as XML files, see \fBImporting and exporting topologies from/to XML files\fP\&. 
+.PP
+.PP
+hwloc can display the topology in a human-readable format, either in graphical mode (X11), or by exporting in one of several different formats, including: plain text, LaTeX tikzpicture, PDF, PNG, and FIG (see \fBCommand-line Examples\fP below)\&. Note that some of the export formats require additional support libraries\&.
+.PP
+hwloc offers a programming interface for manipulating topologies and objects\&. It also brings a powerful CPU bitmap API that is used to describe topology objects location on physical/logical processors\&. See the \fBProgramming Interface\fP below\&. It may also be used to binding applications onto certain cores or memory nodes\&. Several utility programs are also provided to ease command-line manipulation of topology objects, binding of processes, and so on\&.
+.PP
+Perl bindings are available from Bernd Kallies on \fCCPAN\fP\&.
+.PP
+Python bindings are available from Guy Streeter: 
+.PD 0
+
+.IP "\(bu" 2
+\fCFedora RPM and tarball\fP\&. 
+.IP "\(bu" 2
+\fCgit tree\fP (\fChtml\fP)\&. 
+.PP
+.PP
+ 
+.SH "hwloc Installation"
+.PP
+The generic installation procedure for both hwloc and netloc is described in \fBInstallation\fP\&.
+.PP
+The hwloc command-line tool 'lstopo' produces human-readable topology maps, as mentioned above\&. It can also export maps to the 'fig' file format\&. Support for PDF, Postscript, and PNG exporting is provided if the 'Cairo' development package (usually \fCcairo-devel\fP or \fClibcairo2-dev\fP) can be found in 'lstopo' when hwloc is configured and build\&.
+.PP
+The hwloc core may also benefit from the following development packages: 
+.PD 0
+
+.IP "\(bu" 2
+libpciaccess for full I/O device discovery (\fClibpciaccess-devel\fP or \fClibpciaccess-dev\fP package)\&. On Linux, PCI discovery may still be performed (without vendor/device names) even if libpciaccess cannot be used\&. 
+.PP
+
+.IP "\(bu" 2
+AMD or NVIDIA OpenCL implementations for OpenCL device discovery\&.  
+.IP "\(bu" 2
+the NVIDIA CUDA Toolkit for CUDA device discovery\&. See \fBHow do I enable CUDA and select which CUDA version to use?\fP\&.  
+.IP "\(bu" 2
+the NVIDIA Management Library (NVML) for NVML device discovery\&. It is included in CUDA since version 8\&.0\&. Older NVML releases were available within the NVIDIA GPU Deployment Kit from https://developer.nvidia.com/gpu-deployment-kit \&.  
+.IP "\(bu" 2
+the NV-CONTROL X extension library (NVCtrl) for NVIDIA display discovery\&. The relevant development package is usually \fClibXNVCtrl-devel\fP or \fClibxnvctrl-dev\fP\&. It is also available within nvidia-settings from ftp://download.nvidia.com/XFree86/nvidia-settings/ and https://github.com/NVIDIA/nvidia-settings/ \&.  
+.IP "\(bu" 2
+the AMD ROCm SMI library for RSMI device discovery\&. The relevant development package is usually \fCrocm-smi-lib64\fP or \fClibrocm-smi-dev\fP\&. See \fBHow do I enable ROCm SMI and select which version to use?\fP\&.  
+.IP "\(bu" 2
+the oneAPI Level Zero library\&. The relevant development package is usually \fClevel-zero-dev\fP or \fClevel-zero-devel\fP\&.  
+.IP "\(bu" 2
+libxml2 for full XML import/export support (otherwise, the internal minimalistic parser will only be able to import XML files that were exported by the same hwloc release)\&. See \fBImporting and exporting topologies from/to XML files\fP for details\&. The relevant development package is usually \fClibxml2-devel\fP or \fClibxml2-dev\fP\&.  
+.IP "\(bu" 2
+libudev on Linux for easier discovery of OS device information (otherwise hwloc will try to manually parse udev raw files)\&. The relevant development package is usually \fClibudev-devel\fP or \fClibudev-dev\fP\&.  
+.IP "\(bu" 2
+libtool's ltdl library for dynamic plugin loading if the native dlopen cannot be used\&. The relevant development package is usually \fClibtool-ltdl-devel\fP or \fClibltdl-dev\fP\&.  
+.PP
+.PP
+PCI and XML support may be statically built inside the main hwloc library, or as separate dynamically-loaded plugins (see the \fBComponents and plugins\fP section)\&.
+.PP
+Note that because of the possibility of GPL taint, the \fCpciutils\fP library \fClibpci\fP will not be used (remember that hwloc is BSD-licensed)\&.
+.PP
+ 
+.SH "Command-line Examples"
+.PP
+On a 4-package 2-core machine with hyper-threading, the \fClstopo\fP tool may show the following graphical output:
+.PP
+ 
+.PP
+Here's the equivalent output in textual form:
+.PP
+.PP
+.nf
+Machine
+  NUMANode L#0 (P#0)
+  Package L#0 + L3 L#0 (4096KB)
+    L2 L#0 (1024KB) + L1 L#0 (16KB) + Core L#0
+      PU L#0 (P#0)
+      PU L#1 (P#8)
+    L2 L#1 (1024KB) + L1 L#1 (16KB) + Core L#1
+      PU L#2 (P#4)
+      PU L#3 (P#12)
+  Package L#1 + L3 L#1 (4096KB)
+    L2 L#2 (1024KB) + L1 L#2 (16KB) + Core L#2
+      PU L#4 (P#1)
+      PU L#5 (P#9)
+    L2 L#3 (1024KB) + L1 L#3 (16KB) + Core L#3
+      PU L#6 (P#5)
+      PU L#7 (P#13)
+  Package L#2 + L3 L#2 (4096KB)
+    L2 L#4 (1024KB) + L1 L#4 (16KB) + Core L#4
+      PU L#8 (P#2)
+      PU L#9 (P#10)
+    L2 L#5 (1024KB) + L1 L#5 (16KB) + Core L#5
+      PU L#10 (P#6)
+      PU L#11 (P#14)
+  Package L#3 + L3 L#3 (4096KB)
+    L2 L#6 (1024KB) + L1 L#6 (16KB) + Core L#6
+      PU L#12 (P#3)
+      PU L#13 (P#11)
+    L2 L#7 (1024KB) + L1 L#7 (16KB) + Core L#7
+      PU L#14 (P#7)
+      PU L#15 (P#15)
+.fi
+.PP
+.PP
+Note that there is also an equivalent output in XML that is meant for exporting/importing topologies but it is hardly readable to human-beings (see \fBImporting and exporting topologies from/to XML files\fP for details)\&.
+.PP
+On a 4-package 2-core Opteron NUMA machine (with two core cores disallowed by the administrator), the \fClstopo\fP tool may show the following graphical output (with \fC--disallowed\fP for displaying disallowed objects):
+.PP
+ 
+.PP
+Here's the equivalent output in textual form:
+.PP
+.PP
+.nf
+Machine (32GB total)
+  Package L#0
+    NUMANode L#0 (P#0 8190MB)
+    L2 L#0 (1024KB) + L1 L#0 (64KB) + Core L#0 + PU L#0 (P#0)
+    L2 L#1 (1024KB) + L1 L#1 (64KB) + Core L#1 + PU L#1 (P#1)
+  Package L#1
+    NUMANode L#1 (P#1 8192MB)
+    L2 L#2 (1024KB) + L1 L#2 (64KB) + Core L#2 + PU L#2 (P#2)
+    L2 L#3 (1024KB) + L1 L#3 (64KB) + Core L#3 + PU L#3 (P#3)
+  Package L#2
+    NUMANode L#2 (P#2 8192MB)
+    L2 L#4 (1024KB) + L1 L#4 (64KB) + Core L#4 + PU L#4 (P#4)
+    L2 L#5 (1024KB) + L1 L#5 (64KB) + Core L#5 + PU L#5 (P#5)
+  Package L#3
+    NUMANode L#3 (P#3 8192MB)
+    L2 L#6 (1024KB) + L1 L#6 (64KB) + Core L#6 + PU L#6 (P#6)
+    L2 L#7 (1024KB) + L1 L#7 (64KB) + Core L#7 + PU L#7 (P#7)
+.fi
+.PP
+.PP
+On a 2-package quad-core Xeon (pre-Nehalem, with 2 dual-core dies into each package):
+.PP
+ 
+.PP
+Here's the same output in textual form:
+.PP
+.PP
+.nf
+Machine (total 16GB)
+  NUMANode L#0 (P#0 16GB)
+  Package L#0
+    L2 L#0 (4096KB)
+      L1 L#0 (32KB) + Core L#0 + PU L#0 (P#0)
+      L1 L#1 (32KB) + Core L#1 + PU L#1 (P#4)
+    L2 L#1 (4096KB)
+      L1 L#2 (32KB) + Core L#2 + PU L#2 (P#2)
+      L1 L#3 (32KB) + Core L#3 + PU L#3 (P#6)
+  Package L#1
+    L2 L#2 (4096KB)
+      L1 L#4 (32KB) + Core L#4 + PU L#4 (P#1)
+      L1 L#5 (32KB) + Core L#5 + PU L#5 (P#5)
+    L2 L#3 (4096KB)
+      L1 L#6 (32KB) + Core L#6 + PU L#6 (P#3)
+      L1 L#7 (32KB) + Core L#7 + PU L#7 (P#7)
+.fi
+.PP
+.PP
+ 
+.SH "Programming Interface"
+.PP
+The basic interface is available in \fBhwloc\&.h\fP\&. Some higher-level functions are available in \fBhwloc/helper\&.h\fP to reduce the need to manually manipulate objects and follow links between them\&. Documentation for all these is provided later in this document\&. Developers may also want to look at hwloc/inlines\&.h which contains the actual inline code of some \fBhwloc\&.h\fP routines, and at this document, which provides good higher-level topology traversal examples\&.
+.PP
+To precisely define the vocabulary used by hwloc, a \fBTerms and Definitions\fP section is available and should probably be read first\&.
+.PP
+Each hwloc object contains a cpuset describing the list of processing units that it contains\&. These bitmaps may be used for \fBCPU binding\fP and \fBMemory binding\fP\&. hwloc offers an extensive bitmap manipulation interface in \fBhwloc/bitmap\&.h\fP\&.
+.PP
+Moreover, hwloc also comes with additional helpers for interoperability with several commonly used environments\&. See the \fBInteroperability With Other Software\fP section for details\&.
+.PP
+The complete API documentation is available in a full set of HTML pages, man pages, and self-contained PDF files (formatted for both both US letter and A4 formats) in the source tarball in doc/doxygen-doc/\&.
+.PP
+\fBNOTE:\fP If you are building the documentation from a Git clone, you will need to have Doxygen and pdflatex installed -- the documentation will be built during the normal 'make' process\&. The documentation is installed during 'make install' to $prefix/share/doc/hwloc/ and your systems default man page tree (under $prefix, of course)\&.
+.SS "Portability"
+Operating System have varying support for CPU and memory binding, e\&.g\&. while some Operating Systems provide interfaces for all kinds of CPU and memory bindings, some others provide only interfaces for a limited number of kinds of CPU and memory binding, and some do not provide any binding interface at all\&. Hwloc's binding functions would then simply return the ENOSYS error (Function not implemented), meaning that the underlying Operating System does not provide any interface for them\&. \fBCPU binding\fP and \fBMemory binding\fP provide more information on which hwloc binding functions should be preferred because interfaces for them are usually available on the supported Operating Systems\&.
+.PP
+Similarly, the ability of reporting topology information varies from one platform to another\&. As shown in \fBCommand-line Examples\fP, hwloc can obtain information on a wide variety of hardware topologies\&. However, some platforms and/or operating system versions will only report a subset of this information\&. For example, on an PPC64-based system with 8 cores (each with 2 hardware threads) running a default 2\&.6\&.18-based kernel from RHEL 5\&.4, hwloc is only able to glean information about NUMA nodes and processor units (PUs)\&. No information about caches, packages, or cores is available\&.
+.PP
+Here's the graphical output from lstopo on this platform when Simultaneous Multi-Threading (SMT) is enabled:
+.PP
+ 
+.PP
+And here's the graphical output from lstopo on this platform when SMT is disabled:
+.PP
+ 
+.PP
+Notice that hwloc only sees half the PUs when SMT is disabled\&. PU L#6, for example, seems to change location from NUMA node #0 to #1\&. In reality, no PUs 'moved' -- they were simply re-numbered when hwloc only saw half as many (see also Logical index in \fBIndexes and Sets\fP)\&. Hence, PU L#6 in the SMT-disabled picture probably corresponds to PU L#12 in the SMT-enabled picture\&.
+.PP
+This same 'PUs have disappeared' effect can be seen on other platforms -- even platforms / OSs that provide much more information than the above PPC64 system\&. This is an unfortunate side-effect of how operating systems report information to hwloc\&.
+.PP
+Note that upgrading the Linux kernel on the same PPC64 system mentioned above to 2\&.6\&.34, hwloc is able to discover all the topology information\&. The following picture shows the entire topology layout when SMT is enabled:
+.PP
+ 
+.PP
+Developers using the hwloc API or XML output for portable applications should therefore be extremely careful to not make any assumptions about the structure of data that is returned\&. For example, per the above reported PPC topology, it is not safe to assume that PUs will always be descendants of cores\&.
+.PP
+Additionally, future hardware may insert new topology elements that are not available in this version of hwloc\&. Long-lived applications that are meant to span multiple different hardware platforms should also be careful about making structure assumptions\&. For example, a new element may someday exist between a core and a PU\&.
+.SS "API Example"
+The following small C example (available in the source tree as ``doc/examples/hwloc-hello\&.c'') prints the topology of the machine and performs some thread and memory binding\&. More examples are available in the doc/examples/ directory of the source tree\&.
+.PP
+.PP
+.nf
+/* Example hwloc API program\&.
+ *
+ * See other examples under doc/examples/ in the source tree
+ * for more details\&.
+ *
+ * Copyright © 2009-2016 Inria\&.  All rights reserved\&.
+ * Copyright © 2009-2011 Université Bordeaux
+ * Copyright © 2009-2010 Cisco Systems, Inc\&.  All rights reserved\&.
+ * See COPYING in top-level directory\&.
+ *
+ * hwloc-hello\&.c
+ */
+
+#include "hwloc\&.h"
+
+#include <errno\&.h>
+#include <stdio\&.h>
+#include <string\&.h>
+
+static void print_children(hwloc_topology_t topology, hwloc_obj_t obj,
+                           int depth)
+{
+    char type[32], attr[1024];
+    unsigned i;
+
+    hwloc_obj_type_snprintf(type, sizeof(type), obj, 0);
+    printf("%*s%s", 2*depth, "", type);
+    if (obj->os_index != (unsigned) -1)
+      printf("#%u", obj->os_index);
+    hwloc_obj_attr_snprintf(attr, sizeof(attr), obj, " ", 0);
+    if (*attr)
+      printf("(%s)", attr);
+    printf("\n");
+    for (i = 0; i < obj->arity; i++) {
+        print_children(topology, obj->children[i], depth + 1);
+    }
+}
+
+int main(void)
+{
+    int depth;
+    unsigned i, n;
+    unsigned long size;
+    int levels;
+    char string[128];
+    int topodepth;
+    void *m;
+    hwloc_topology_t topology;
+    hwloc_cpuset_t cpuset;
+    hwloc_obj_t obj;
+
+    /* Allocate and initialize topology object\&. */
+    hwloc_topology_init(&topology);
+
+    /* \&.\&.\&. Optionally, put detection configuration here to ignore
+       some objects types, define a synthetic topology, etc\&.\&.\&.\&.
+
+       The default is to detect all the objects of the machine that
+       the caller is allowed to access\&.  See Configure Topology
+       Detection\&. */
+
+    /* Perform the topology detection\&. */
+    hwloc_topology_load(topology);
+
+    /* Optionally, get some additional topology information
+       in case we need the topology depth later\&. */
+    topodepth = hwloc_topology_get_depth(topology);
+
+    /*****************************************************************
+     * First example:
+     * Walk the topology with an array style, from level 0 (always
+     * the system level) to the lowest level (always the proc level)\&.
+     *****************************************************************/
+    for (depth = 0; depth < topodepth; depth++) {
+        printf("*** Objects at level %d\n", depth);
+        for (i = 0; i < hwloc_get_nbobjs_by_depth(topology, depth);
+             i++) {
+            hwloc_obj_type_snprintf(string, sizeof(string),
+                                    hwloc_get_obj_by_depth(topology, depth, i), 0);
+            printf("Index %u: %s\n", i, string);
+        }
+    }
+
+    /*****************************************************************
+     * Second example:
+     * Walk the topology with a tree style\&.
+     *****************************************************************/
+    printf("*** Printing overall tree\n");
+    print_children(topology, hwloc_get_root_obj(topology), 0);
+
+    /*****************************************************************
+     * Third example:
+     * Print the number of packages\&.
+     *****************************************************************/
+    depth = hwloc_get_type_depth(topology, HWLOC_OBJ_PACKAGE);
+    if (depth == HWLOC_TYPE_DEPTH_UNKNOWN) {
+        printf("*** The number of packages is unknown\n");
+    } else {
+        printf("*** %u package(s)\n",
+               hwloc_get_nbobjs_by_depth(topology, depth));
+    }
+
+    /*****************************************************************
+     * Fourth example:
+     * Compute the amount of cache that the first logical processor
+     * has above it\&.
+     *****************************************************************/
+    levels = 0;
+    size = 0;
+    for (obj = hwloc_get_obj_by_type(topology, HWLOC_OBJ_PU, 0);
+         obj;
+         obj = obj->parent)
+      if (hwloc_obj_type_is_cache(obj->type)) {
+        levels++;
+        size += obj->attr->cache\&.size;
+      }
+    printf("*** Logical processor 0 has %d caches totaling %luKB\n",
+           levels, size / 1024);
+
+    /*****************************************************************
+     * Fifth example:
+     * Bind to only one thread of the last core of the machine\&.
+     *
+     * First find out where cores are, or else smaller sets of CPUs if
+     * the OS doesn't have the notion of a "core"\&.
+     *****************************************************************/
+    depth = hwloc_get_type_or_below_depth(topology, HWLOC_OBJ_CORE);
+
+    /* Get last core\&. */
+    obj = hwloc_get_obj_by_depth(topology, depth,
+                   hwloc_get_nbobjs_by_depth(topology, depth) - 1);
+    if (obj) {
+        /* Get a copy of its cpuset that we may modify\&. */
+        cpuset = hwloc_bitmap_dup(obj->cpuset);
+
+        /* Get only one logical processor (in case the core is
+           SMT/hyper-threaded)\&. */
+        hwloc_bitmap_singlify(cpuset);
+
+        /* And try to bind ourself there\&. */
+        if (hwloc_set_cpubind(topology, cpuset, 0)) {
+            char *str;
+            int error = errno;
+            hwloc_bitmap_asprintf(&str, obj->cpuset);
+            printf("Couldn't bind to cpuset %s: %s\n", str, strerror(error));
+            free(str);
+        }
+
+        /* Free our cpuset copy */
+        hwloc_bitmap_free(cpuset);
+    }
+
+    /*****************************************************************
+     * Sixth example:
+     * Allocate some memory on the last NUMA node, bind some existing
+     * memory to the last NUMA node\&.
+     *****************************************************************/
+    /* Get last node\&. There's always at least one\&. */
+    n = hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_NUMANODE);
+    obj = hwloc_get_obj_by_type(topology, HWLOC_OBJ_NUMANODE, n - 1);
+
+    size = 1024*1024;
+    m = hwloc_alloc_membind(topology, size, obj->nodeset,
+                            HWLOC_MEMBIND_BIND, HWLOC_MEMBIND_BYNODESET);
+    hwloc_free(topology, m, size);
+
+    m = malloc(size);
+    hwloc_set_area_membind(topology, m, size, obj->nodeset,
+                           HWLOC_MEMBIND_BIND, HWLOC_MEMBIND_BYNODESET);
+    free(m);
+
+    /* Destroy topology object\&. */
+    hwloc_topology_destroy(topology);
+
+    return 0;
+}
+.fi
+.PP
+.PP
+hwloc provides a \fCpkg-config\fP executable to obtain relevant compiler and linker flags\&. For example, it can be used thusly to compile applications that utilize the hwloc library (assuming GNU Make):
+.PP
+.PP
+.nf
+CFLAGS += $(shell pkg-config --cflags hwloc)
+LDLIBS += $(shell pkg-config --libs hwloc)
+
+hwloc-hello: hwloc-hello.c
+        $(CC) hwloc-hello.c $(CFLAGS) -o hwloc-hello $(LDLIBS)
+.fi
+.PP
+.PP
+On a machine 2 processor packages -- each package of which has two processing cores -- the output from running \fChwloc-hello\fP could be something like the following:
+.PP
+.PP
+.nf
+shell$ ./hwloc-hello
+*** Objects at level 0
+Index 0: Machine
+*** Objects at level 1
+Index 0: Package#0
+Index 1: Package#1
+*** Objects at level 2
+Index 0: Core#0
+Index 1: Core#1
+Index 2: Core#3
+Index 3: Core#2
+*** Objects at level 3
+Index 0: PU#0
+Index 1: PU#1
+Index 2: PU#2
+Index 3: PU#3
+*** Printing overall tree
+Machine
+  Package#0
+    Core#0
+      PU#0
+    Core#1
+      PU#1
+  Package#1
+    Core#3
+      PU#2
+    Core#2
+      PU#3
+*** 2 package(s)
+*** Logical processor 0 has 0 caches totaling 0KB
+shell$ 
+.fi
+.PP
+.PP
+ 
+.SH "History / Credits"
+.PP
+hwloc is the evolution and merger of the libtopology project and the Portable Linux Processor Affinity (PLPA) (https://www.open-mpi.org/projects/plpa/) project\&. Because of functional and ideological overlap, these two code bases and ideas were merged and released under the name 'hwloc' as an Open MPI sub-project\&.
+.PP
+libtopology was initially developed by the Inria Runtime Team-Project\&. PLPA was initially developed by the Open MPI development team as a sub-project\&. Both are now deprecated in favor of hwloc, which is distributed as an Open MPI sub-project\&.
+.PP
+ 
+.SH "Further Reading"
+.PP
+The documentation chapters include
+.PP
+.PD 0
+.IP "\(bu" 2
+\fBTerms and Definitions\fP 
+.IP "\(bu" 2
+\fBCommand-Line Tools\fP 
+.IP "\(bu" 2
+\fBEnvironment Variables\fP 
+.IP "\(bu" 2
+\fBCPU and Memory Binding Overview\fP 
+.IP "\(bu" 2
+\fBI/O Devices\fP 
+.IP "\(bu" 2
+\fBMiscellaneous objects\fP 
+.IP "\(bu" 2
+\fBObject attributes\fP 
+.IP "\(bu" 2
+\fBTopology Attributes: Distances, Memory Attributes and CPU Kinds\fP 
+.IP "\(bu" 2
+\fBImporting and exporting topologies from/to XML files\fP 
+.IP "\(bu" 2
+\fBSynthetic topologies\fP 
+.IP "\(bu" 2
+\fBInteroperability With Other Software\fP 
+.IP "\(bu" 2
+\fBThread Safety\fP 
+.IP "\(bu" 2
+\fBComponents and plugins\fP 
+.IP "\(bu" 2
+\fBEmbedding hwloc in Other Software\fP 
+.IP "\(bu" 2
+\fBFrequently Asked Questions (FAQ)\fP 
+.IP "\(bu" 2
+\fBUpgrading to the hwloc 2\&.0 API\fP 
+.PP
+.PP
+Make sure to have had a look at those too!
+.PP
+ 
diff --git a/doc/doxygen-doc/man/man3/hwloc_levelzero_get_device_cpuset.3 b/doc/doxygen-doc/man/man3/hwloc_levelzero_get_device_cpuset.3
new file mode 100644
index 00000000..a733533c
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_levelzero_get_device_cpuset.3
@@ -0,0 +1 @@
+.so man3/hwlocality_levelzero.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_levelzero_get_device_osdev.3 b/doc/doxygen-doc/man/man3/hwloc_levelzero_get_device_osdev.3
new file mode 100644
index 00000000..a733533c
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_levelzero_get_device_osdev.3
@@ -0,0 +1 @@
+.so man3/hwlocality_levelzero.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_linux_get_tid_cpubind.3 b/doc/doxygen-doc/man/man3/hwloc_linux_get_tid_cpubind.3
new file mode 100644
index 00000000..a9d9119b
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_linux_get_tid_cpubind.3
@@ -0,0 +1 @@
+.so man3/hwlocality_linux.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_linux_get_tid_last_cpu_location.3 b/doc/doxygen-doc/man/man3/hwloc_linux_get_tid_last_cpu_location.3
new file mode 100644
index 00000000..a9d9119b
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_linux_get_tid_last_cpu_location.3
@@ -0,0 +1 @@
+.so man3/hwlocality_linux.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_linux_read_path_as_cpumask.3 b/doc/doxygen-doc/man/man3/hwloc_linux_read_path_as_cpumask.3
new file mode 100644
index 00000000..a9d9119b
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_linux_read_path_as_cpumask.3
@@ -0,0 +1 @@
+.so man3/hwlocality_linux.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_linux_set_tid_cpubind.3 b/doc/doxygen-doc/man/man3/hwloc_linux_set_tid_cpubind.3
new file mode 100644
index 00000000..a9d9119b
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_linux_set_tid_cpubind.3
@@ -0,0 +1 @@
+.so man3/hwlocality_linux.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_local_numanode_flag_e.3 b/doc/doxygen-doc/man/man3/hwloc_local_numanode_flag_e.3
new file mode 100644
index 00000000..4898e094
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_local_numanode_flag_e.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_location.3 b/doc/doxygen-doc/man/man3/hwloc_location.3
new file mode 100644
index 00000000..905e2680
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_location.3
@@ -0,0 +1,42 @@
+.TH "hwloc_location" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_location
+.SH SYNOPSIS
+.br
+.PP
+.PP
+\fC#include <memattrs\&.h>\fP
+.SS "Data Structures"
+
+.in +1c
+.ti -1c
+.RI "union \fBhwloc_location_u\fP"
+.br
+.in -1c
+.SS "Data Fields"
+
+.in +1c
+.ti -1c
+.RI "enum \fBhwloc_location_type_e\fP \fBtype\fP"
+.br
+.ti -1c
+.RI "union \fBhwloc_location::hwloc_location_u\fP \fBlocation\fP"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+Where to measure attributes from\&. 
+.SH "Field Documentation"
+.PP 
+.SS "union \fBhwloc_location::hwloc_location_u\fP hwloc_location::location"
+
+.SS "enum \fBhwloc_location_type_e\fP hwloc_location::type"
+
+.PP
+Type of location\&. 
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwloc_location_hwloc_location_u.3 b/doc/doxygen-doc/man/man3/hwloc_location_hwloc_location_u.3
new file mode 100644
index 00000000..812c9c61
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_location_hwloc_location_u.3
@@ -0,0 +1,37 @@
+.TH "hwloc_location::hwloc_location_u" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_location::hwloc_location_u
+.SH SYNOPSIS
+.br
+.PP
+.PP
+\fC#include <memattrs\&.h>\fP
+.SS "Data Fields"
+
+.in +1c
+.ti -1c
+.RI "\fBhwloc_cpuset_t\fP \fBcpuset\fP"
+.br
+.ti -1c
+.RI "\fBhwloc_obj_t\fP \fBobject\fP"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+Actual location\&. 
+.SH "Field Documentation"
+.PP 
+.SS "\fBhwloc_cpuset_t\fP hwloc_location::hwloc_location_u::cpuset"
+
+.PP
+Location as a cpuset, when the location type is \fBHWLOC_LOCATION_TYPE_CPUSET\fP\&. 
+.SS "\fBhwloc_obj_t\fP hwloc_location::hwloc_location_u::object"
+
+.PP
+Location as an object, when the location type is \fBHWLOC_LOCATION_TYPE_OBJECT\fP\&. 
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwloc_location_type_e.3 b/doc/doxygen-doc/man/man3/hwloc_location_type_e.3
new file mode 100644
index 00000000..4898e094
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_location_type_e.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_memattr_flag_e.3 b/doc/doxygen-doc/man/man3/hwloc_memattr_flag_e.3
new file mode 100644
index 00000000..8f5e7ba9
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_memattr_flag_e.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs_manage.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_memattr_get_best_initiator.3 b/doc/doxygen-doc/man/man3/hwloc_memattr_get_best_initiator.3
new file mode 100644
index 00000000..4898e094
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_memattr_get_best_initiator.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_memattr_get_best_target.3 b/doc/doxygen-doc/man/man3/hwloc_memattr_get_best_target.3
new file mode 100644
index 00000000..4898e094
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_memattr_get_best_target.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_memattr_get_by_name.3 b/doc/doxygen-doc/man/man3/hwloc_memattr_get_by_name.3
new file mode 100644
index 00000000..4898e094
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_memattr_get_by_name.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_memattr_get_flags.3 b/doc/doxygen-doc/man/man3/hwloc_memattr_get_flags.3
new file mode 100644
index 00000000..8f5e7ba9
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_memattr_get_flags.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs_manage.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_memattr_get_initiators.3 b/doc/doxygen-doc/man/man3/hwloc_memattr_get_initiators.3
new file mode 100644
index 00000000..8f5e7ba9
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_memattr_get_initiators.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs_manage.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_memattr_get_name.3 b/doc/doxygen-doc/man/man3/hwloc_memattr_get_name.3
new file mode 100644
index 00000000..8f5e7ba9
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_memattr_get_name.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs_manage.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_memattr_get_targets.3 b/doc/doxygen-doc/man/man3/hwloc_memattr_get_targets.3
new file mode 100644
index 00000000..8f5e7ba9
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_memattr_get_targets.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs_manage.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_memattr_get_value.3 b/doc/doxygen-doc/man/man3/hwloc_memattr_get_value.3
new file mode 100644
index 00000000..4898e094
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_memattr_get_value.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_memattr_id_e.3 b/doc/doxygen-doc/man/man3/hwloc_memattr_id_e.3
new file mode 100644
index 00000000..4898e094
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_memattr_id_e.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_memattr_id_t.3 b/doc/doxygen-doc/man/man3/hwloc_memattr_id_t.3
new file mode 100644
index 00000000..4898e094
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_memattr_id_t.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_memattr_register.3 b/doc/doxygen-doc/man/man3/hwloc_memattr_register.3
new file mode 100644
index 00000000..8f5e7ba9
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_memattr_register.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs_manage.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_memattr_set_value.3 b/doc/doxygen-doc/man/man3/hwloc_memattr_set_value.3
new file mode 100644
index 00000000..8f5e7ba9
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_memattr_set_value.3
@@ -0,0 +1 @@
+.so man3/hwlocality_memattrs_manage.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_membind_flags_t.3 b/doc/doxygen-doc/man/man3/hwloc_membind_flags_t.3
new file mode 100644
index 00000000..a7c83a19
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_membind_flags_t.3
@@ -0,0 +1 @@
+.so man3/hwlocality_membinding.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_membind_policy_t.3 b/doc/doxygen-doc/man/man3/hwloc_membind_policy_t.3
new file mode 100644
index 00000000..a7c83a19
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_membind_policy_t.3
@@ -0,0 +1 @@
+.so man3/hwlocality_membinding.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_nodeset_from_linux_libnuma_bitmask.3 b/doc/doxygen-doc/man/man3/hwloc_nodeset_from_linux_libnuma_bitmask.3
new file mode 100644
index 00000000..50f19f61
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_nodeset_from_linux_libnuma_bitmask.3
@@ -0,0 +1 @@
+.so man3/hwlocality_linux_libnuma_bitmask.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_nodeset_from_linux_libnuma_ulongs.3 b/doc/doxygen-doc/man/man3/hwloc_nodeset_from_linux_libnuma_ulongs.3
new file mode 100644
index 00000000..dbdb4c15
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_nodeset_from_linux_libnuma_ulongs.3
@@ -0,0 +1 @@
+.so man3/hwlocality_linux_libnuma_ulongs.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_nodeset_t.3 b/doc/doxygen-doc/man/man3/hwloc_nodeset_t.3
new file mode 100644
index 00000000..8458342c
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_nodeset_t.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_sets.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_nodeset_to_linux_libnuma_bitmask.3 b/doc/doxygen-doc/man/man3/hwloc_nodeset_to_linux_libnuma_bitmask.3
new file mode 100644
index 00000000..50f19f61
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_nodeset_to_linux_libnuma_bitmask.3
@@ -0,0 +1 @@
+.so man3/hwlocality_linux_libnuma_bitmask.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_nodeset_to_linux_libnuma_ulongs.3 b/doc/doxygen-doc/man/man3/hwloc_nodeset_to_linux_libnuma_ulongs.3
new file mode 100644
index 00000000..dbdb4c15
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_nodeset_to_linux_libnuma_ulongs.3
@@ -0,0 +1 @@
+.so man3/hwlocality_linux_libnuma_ulongs.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_nvml_get_device_cpuset.3 b/doc/doxygen-doc/man/man3/hwloc_nvml_get_device_cpuset.3
new file mode 100644
index 00000000..5e3973a3
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_nvml_get_device_cpuset.3
@@ -0,0 +1 @@
+.so man3/hwlocality_nvml.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_nvml_get_device_osdev.3 b/doc/doxygen-doc/man/man3/hwloc_nvml_get_device_osdev.3
new file mode 100644
index 00000000..5e3973a3
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_nvml_get_device_osdev.3
@@ -0,0 +1 @@
+.so man3/hwlocality_nvml.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_nvml_get_device_osdev_by_index.3 b/doc/doxygen-doc/man/man3/hwloc_nvml_get_device_osdev_by_index.3
new file mode 100644
index 00000000..5e3973a3
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_nvml_get_device_osdev_by_index.3
@@ -0,0 +1 @@
+.so man3/hwlocality_nvml.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_obj.3 b/doc/doxygen-doc/man/man3/hwloc_obj.3
new file mode 100644
index 00000000..1632061d
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_obj.3
@@ -0,0 +1,334 @@
+.TH "hwloc_obj" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_obj
+.SH SYNOPSIS
+.br
+.PP
+.PP
+\fC#include <hwloc\&.h>\fP
+.SS "Data Fields"
+
+.in +1c
+.ti -1c
+.RI "\fBhwloc_obj_type_t\fP \fBtype\fP"
+.br
+.ti -1c
+.RI "char * \fBsubtype\fP"
+.br
+.ti -1c
+.RI "unsigned \fBos_index\fP"
+.br
+.ti -1c
+.RI "char * \fBname\fP"
+.br
+.ti -1c
+.RI "hwloc_uint64_t \fBtotal_memory\fP"
+.br
+.ti -1c
+.RI "union \fBhwloc_obj_attr_u\fP * \fBattr\fP"
+.br
+.ti -1c
+.RI "int \fBdepth\fP"
+.br
+.ti -1c
+.RI "unsigned \fBlogical_index\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_obj\fP * \fBnext_cousin\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_obj\fP * \fBprev_cousin\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_obj\fP * \fBparent\fP"
+.br
+.ti -1c
+.RI "unsigned \fBsibling_rank\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_obj\fP * \fBnext_sibling\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_obj\fP * \fBprev_sibling\fP"
+.br
+.ti -1c
+.RI "int \fBsymmetric_subtree\fP"
+.br
+.ti -1c
+.RI "\fBhwloc_cpuset_t\fP \fBcpuset\fP"
+.br
+.ti -1c
+.RI "\fBhwloc_cpuset_t\fP \fBcomplete_cpuset\fP"
+.br
+.ti -1c
+.RI "\fBhwloc_nodeset_t\fP \fBnodeset\fP"
+.br
+.ti -1c
+.RI "\fBhwloc_nodeset_t\fP \fBcomplete_nodeset\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_info_s\fP * \fBinfos\fP"
+.br
+.ti -1c
+.RI "unsigned \fBinfos_count\fP"
+.br
+.ti -1c
+.RI "void * \fBuserdata\fP"
+.br
+.ti -1c
+.RI "hwloc_uint64_t \fBgp_index\fP"
+.br
+.in -1c
+.PP
+.RI "\fBList and array of normal children below this object (except Memory, I/O and Misc children)\&.\fP"
+.br
+
+.in +1c
+.in +1c
+.ti -1c
+.RI "unsigned \fBarity\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_obj\fP ** \fBchildren\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_obj\fP * \fBfirst_child\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_obj\fP * \fBlast_child\fP"
+.br
+.in -1c
+.in -1c
+.PP
+.RI "\fBList of Memory children below this object\&.\fP"
+.br
+
+.in +1c
+.in +1c
+.ti -1c
+.RI "unsigned \fBmemory_arity\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_obj\fP * \fBmemory_first_child\fP"
+.br
+.in -1c
+.in -1c
+.PP
+.RI "\fBList of I/O children below this object\&.\fP"
+.br
+
+.in +1c
+.in +1c
+.ti -1c
+.RI "unsigned \fBio_arity\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_obj\fP * \fBio_first_child\fP"
+.br
+.in -1c
+.in -1c
+.PP
+.RI "\fBList of Misc children below this object\&.\fP"
+.br
+
+.in +1c
+.in +1c
+.ti -1c
+.RI "unsigned \fBmisc_arity\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_obj\fP * \fBmisc_first_child\fP"
+.br
+.in -1c
+.in -1c
+.SH "Detailed Description"
+.PP 
+Structure of a topology object\&. 
+
+Applications must not modify any field except \fC\fBhwloc_obj\&.userdata\fP\fP\&. 
+.SH "Field Documentation"
+.PP 
+.SS "unsigned hwloc_obj::arity"
+
+.PP
+Number of normal children\&. Memory, Misc and I/O children are not listed here but rather in their dedicated children list\&. 
+.SS "union \fBhwloc_obj_attr_u\fP* hwloc_obj::attr"
+
+.PP
+Object type-specific Attributes, may be \fCNULL\fP if no attribute value was found\&. 
+.SS "struct \fBhwloc_obj\fP** hwloc_obj::children"
+
+.PP
+Normal children, \fCchildren\fP[0 \&.\&. arity -1]\&. 
+.SS "\fBhwloc_cpuset_t\fP hwloc_obj::complete_cpuset"
+
+.PP
+The complete CPU set of processors of this object,\&. This may include not only the same as the cpuset field, but also some CPUs for which topology information is unknown or incomplete, some offlines CPUs, and the CPUs that are ignored when the \fBHWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED\fP flag is not set\&. Thus no corresponding PU object may be found in the topology, because the precise position is undefined\&. It is however known that it would be somewhere under this object\&.
+.PP
+\fBNote\fP
+.RS 4
+Its value must not be changed, \fBhwloc_bitmap_dup()\fP must be used instead\&. 
+.RE
+.PP
+
+.SS "\fBhwloc_nodeset_t\fP hwloc_obj::complete_nodeset"
+
+.PP
+The complete NUMA node set of this object,\&. This may include not only the same as the nodeset field, but also some NUMA nodes for which topology information is unknown or incomplete, some offlines nodes, and the nodes that are ignored when the \fBHWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED\fP flag is not set\&. Thus no corresponding NUMA node object may be found in the topology, because the precise position is undefined\&. It is however known that it would be somewhere under this object\&.
+.PP
+If there are no NUMA nodes in the machine, all the memory is close to this object, so only the first bit is set in \fCcomplete_nodeset\fP\&.
+.PP
+\fBNote\fP
+.RS 4
+Its value must not be changed, \fBhwloc_bitmap_dup()\fP must be used instead\&. 
+.RE
+.PP
+
+.SS "\fBhwloc_cpuset_t\fP hwloc_obj::cpuset"
+
+.PP
+CPUs covered by this object\&. This is the set of CPUs for which there are PU objects in the topology under this object, i\&.e\&. which are known to be physically contained in this object and known how (the children path between this object and the PU objects)\&.
+.PP
+If the \fBHWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED\fP configuration flag is set, some of these CPUs may be online but not allowed for binding, see \fBhwloc_topology_get_allowed_cpuset()\fP\&.
+.PP
+\fBNote\fP
+.RS 4
+All objects have non-NULL CPU and node sets except Misc and I/O objects\&.
+.PP
+Its value must not be changed, \fBhwloc_bitmap_dup()\fP must be used instead\&. 
+.RE
+.PP
+
+.SS "int hwloc_obj::depth"
+
+.PP
+Vertical index in the hierarchy\&. For normal objects, this is the depth of the horizontal level that contains this object and its cousins of the same type\&. If the topology is symmetric, this is equal to the parent depth plus one, and also equal to the number of parent/child links from the root object to here\&.
+.PP
+For special objects (NUMA nodes, I/O and Misc) that are not in the main tree, this is a special negative value that corresponds to their dedicated level, see \fBhwloc_get_type_depth()\fP and \fBhwloc_get_type_depth_e\fP\&. Those special values can be passed to hwloc functions such \fBhwloc_get_nbobjs_by_depth()\fP as usual\&. 
+.SS "struct \fBhwloc_obj\fP* hwloc_obj::first_child"
+
+.PP
+First normal child\&. 
+.SS "hwloc_uint64_t hwloc_obj::gp_index"
+
+.PP
+Global persistent index\&. Generated by hwloc, unique across the topology (contrary to os_index) and persistent across topology changes (contrary to logical_index)\&. Mostly used internally, but could also be used by application to identify objects\&. 
+.SS "struct \fBhwloc_info_s\fP* hwloc_obj::infos"
+
+.PP
+Array of stringified info type=name\&. 
+.SS "unsigned hwloc_obj::infos_count"
+
+.PP
+Size of infos array\&. 
+.SS "unsigned hwloc_obj::io_arity"
+
+.PP
+Number of I/O children\&. These children are listed in \fCio_first_child\fP\&. 
+.SS "struct \fBhwloc_obj\fP* hwloc_obj::io_first_child"
+
+.PP
+First I/O child\&. Bridges, PCI and OS devices are listed here (\fCio_arity\fP and \fCio_first_child\fP) instead of in the normal children list\&. See also \fBhwloc_obj_type_is_io()\fP\&. 
+.SS "struct \fBhwloc_obj\fP* hwloc_obj::last_child"
+
+.PP
+Last normal child\&. 
+.SS "unsigned hwloc_obj::logical_index"
+
+.PP
+Horizontal index in the whole list of similar objects, hence guaranteed unique across the entire machine\&. Could be a 'cousin_rank' since it's the rank within the 'cousin' list below Note that this index may change when restricting the topology or when inserting a group\&. 
+.SS "unsigned hwloc_obj::memory_arity"
+
+.PP
+Number of Memory children\&. These children are listed in \fCmemory_first_child\fP\&. 
+.SS "struct \fBhwloc_obj\fP* hwloc_obj::memory_first_child"
+
+.PP
+First Memory child\&. NUMA nodes and Memory-side caches are listed here (\fCmemory_arity\fP and \fCmemory_first_child\fP) instead of in the normal children list\&. See also \fBhwloc_obj_type_is_memory()\fP\&. A memory hierarchy starts from a normal CPU-side object (e\&.g\&. Package) and ends with NUMA nodes as leaves\&. There might exist some memory-side caches between them in the middle of the memory subtree\&. 
+.SS "unsigned hwloc_obj::misc_arity"
+
+.PP
+Number of Misc children\&. These children are listed in \fCmisc_first_child\fP\&. 
+.SS "struct \fBhwloc_obj\fP* hwloc_obj::misc_first_child"
+
+.PP
+First Misc child\&. Misc objects are listed here (\fCmisc_arity\fP and \fCmisc_first_child\fP) instead of in the normal children list\&. 
+.SS "char* hwloc_obj::name"
+
+.PP
+Object-specific name if any\&. Mostly used for identifying OS devices and Misc objects where a name string is more useful than numerical indexes\&. 
+.SS "struct \fBhwloc_obj\fP* hwloc_obj::next_cousin"
+
+.PP
+Next object of same type and depth\&. 
+.SS "struct \fBhwloc_obj\fP* hwloc_obj::next_sibling"
+
+.PP
+Next object below the same parent (inside the same list of children)\&. 
+.SS "\fBhwloc_nodeset_t\fP hwloc_obj::nodeset"
+
+.PP
+NUMA nodes covered by this object or containing this object\&. This is the set of NUMA nodes for which there are NUMA node objects in the topology under or above this object, i\&.e\&. which are known to be physically contained in this object or containing it and known how (the children path between this object and the NUMA node objects)\&.
+.PP
+In the end, these nodes are those that are close to the current object\&. Function \fBhwloc_get_local_numanode_objs()\fP may be used to list those NUMA nodes more precisely\&.
+.PP
+If the \fBHWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED\fP configuration flag is set, some of these nodes may be online but not allowed for allocation, see \fBhwloc_topology_get_allowed_nodeset()\fP\&.
+.PP
+If there are no NUMA nodes in the machine, all the memory is close to this object, so only the first bit may be set in \fCnodeset\fP\&.
+.PP
+\fBNote\fP
+.RS 4
+All objects have non-NULL CPU and node sets except Misc and I/O objects\&.
+.PP
+Its value must not be changed, \fBhwloc_bitmap_dup()\fP must be used instead\&. 
+.RE
+.PP
+
+.SS "unsigned hwloc_obj::os_index"
+
+.PP
+OS-provided physical index number\&. It is not guaranteed unique across the entire machine, except for PUs and NUMA nodes\&. Set to HWLOC_UNKNOWN_INDEX if unknown or irrelevant for this object\&. 
+.SS "struct \fBhwloc_obj\fP* hwloc_obj::parent"
+
+.PP
+Parent, \fCNULL\fP if root (Machine object) 
+.SS "struct \fBhwloc_obj\fP* hwloc_obj::prev_cousin"
+
+.PP
+Previous object of same type and depth\&. 
+.SS "struct \fBhwloc_obj\fP* hwloc_obj::prev_sibling"
+
+.PP
+Previous object below the same parent (inside the same list of children)\&. 
+.SS "unsigned hwloc_obj::sibling_rank"
+
+.PP
+Index in parent's \fCchildren\fP[] array\&. Or the index in parent's Memory, I/O or Misc children list\&. 
+.SS "char* hwloc_obj::subtype"
+
+.PP
+Subtype string to better describe the type field\&. 
+.SS "int hwloc_obj::symmetric_subtree"
+
+.PP
+Set if the subtree of normal objects below this object is symmetric, which means all normal children and their children have identical subtrees\&. Memory, I/O and Misc children are ignored\&.
+.PP
+If set in the topology root object, lstopo may export the topology as a synthetic string\&. 
+.SS "hwloc_uint64_t hwloc_obj::total_memory"
+
+.PP
+Total memory (in bytes) in NUMA nodes below this object\&. 
+.SS "\fBhwloc_obj_type_t\fP hwloc_obj::type"
+
+.PP
+Type of object\&. 
+.SS "void* hwloc_obj::userdata"
+
+.PP
+Application-given private data pointer, initialized to \fCNULL\fP, use it as you wish\&. See \fBhwloc_topology_set_userdata_export_callback()\fP in \fBhwloc/export\&.h\fP if you wish to export this field to XML\&. 
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwloc_obj_add_children_sets.3 b/doc/doxygen-doc/man/man3/hwloc_obj_add_children_sets.3
new file mode 100644
index 00000000..7d645186
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_obj_add_children_sets.3
@@ -0,0 +1 @@
+.so man3/hwlocality_components_core_funcs.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_obj_add_info.3 b/doc/doxygen-doc/man/man3/hwloc_obj_add_info.3
new file mode 100644
index 00000000..015587d8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_obj_add_info.3
@@ -0,0 +1 @@
+.so man3/hwlocality_info_attr.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_obj_add_other_obj_sets.3 b/doc/doxygen-doc/man/man3/hwloc_obj_add_other_obj_sets.3
new file mode 100644
index 00000000..d859a648
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_obj_add_other_obj_sets.3
@@ -0,0 +1 @@
+.so man3/hwlocality_tinker.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_obj_attr_snprintf.3 b/doc/doxygen-doc/man/man3/hwloc_obj_attr_snprintf.3
new file mode 100644
index 00000000..9cc50f3b
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_obj_attr_snprintf.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_strings.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_obj_attr_u.3 b/doc/doxygen-doc/man/man3/hwloc_obj_attr_u.3
new file mode 100644
index 00000000..cadd8312
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_obj_attr_u.3
@@ -0,0 +1,75 @@
+.TH "hwloc_obj_attr_u" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_obj_attr_u
+.SH SYNOPSIS
+.br
+.PP
+.PP
+\fC#include <hwloc\&.h>\fP
+.SS "Data Structures"
+
+.in +1c
+.ti -1c
+.RI "struct \fBhwloc_bridge_attr_s\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_cache_attr_s\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_group_attr_s\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_numanode_attr_s\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_osdev_attr_s\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_pcidev_attr_s\fP"
+.br
+.in -1c
+.SS "Data Fields"
+
+.in +1c
+.ti -1c
+.RI "struct \fBhwloc_obj_attr_u::hwloc_numanode_attr_s\fP \fBnumanode\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_obj_attr_u::hwloc_cache_attr_s\fP \fBcache\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_obj_attr_u::hwloc_group_attr_s\fP \fBgroup\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_obj_attr_u::hwloc_pcidev_attr_s\fP \fBpcidev\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_obj_attr_u::hwloc_bridge_attr_s\fP \fBbridge\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_obj_attr_u::hwloc_osdev_attr_s\fP \fBosdev\fP"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+Object type-specific Attributes\&. 
+.SH "Field Documentation"
+.PP 
+.SS "struct \fBhwloc_obj_attr_u::hwloc_bridge_attr_s\fP hwloc_obj_attr_u::bridge"
+
+.SS "struct \fBhwloc_obj_attr_u::hwloc_cache_attr_s\fP hwloc_obj_attr_u::cache"
+
+.SS "struct \fBhwloc_obj_attr_u::hwloc_group_attr_s\fP hwloc_obj_attr_u::group"
+
+.SS "struct \fBhwloc_obj_attr_u::hwloc_numanode_attr_s\fP hwloc_obj_attr_u::numanode"
+
+.SS "struct \fBhwloc_obj_attr_u::hwloc_osdev_attr_s\fP hwloc_obj_attr_u::osdev"
+
+.SS "struct \fBhwloc_obj_attr_u::hwloc_pcidev_attr_s\fP hwloc_obj_attr_u::pcidev"
+
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwloc_obj_attr_u_hwloc_bridge_attr_s.3 b/doc/doxygen-doc/man/man3/hwloc_obj_attr_u_hwloc_bridge_attr_s.3
new file mode 100644
index 00000000..5af8be9d
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_obj_attr_u_hwloc_bridge_attr_s.3
@@ -0,0 +1,82 @@
+.TH "hwloc_obj_attr_u::hwloc_bridge_attr_s" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_obj_attr_u::hwloc_bridge_attr_s
+.SH SYNOPSIS
+.br
+.PP
+.PP
+\fC#include <hwloc\&.h>\fP
+.SS "Data Fields"
+
+.in +1c
+.ti -1c
+.RI "union {"
+.br
+.ti -1c
+.RI "   struct \fBhwloc_pcidev_attr_s\fP \fBpci\fP"
+.br
+.ti -1c
+.RI "} \fBupstream\fP"
+.br
+.ti -1c
+.RI "\fBhwloc_obj_bridge_type_t\fP \fBupstream_type\fP"
+.br
+.ti -1c
+.RI "union {"
+.br
+.ti -1c
+.RI "   struct {"
+.br
+.ti -1c
+.RI "      unsigned short \fBdomain\fP"
+.br
+.ti -1c
+.RI "      unsigned char \fBsecondary_bus\fP"
+.br
+.ti -1c
+.RI "      unsigned char \fBsubordinate_bus\fP"
+.br
+.ti -1c
+.RI "   } \fBpci\fP"
+.br
+.ti -1c
+.RI "} \fBdownstream\fP"
+.br
+.ti -1c
+.RI "\fBhwloc_obj_bridge_type_t\fP \fBdownstream_type\fP"
+.br
+.ti -1c
+.RI "unsigned \fBdepth\fP"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+Bridge specific Object Attributes\&. 
+.SH "Field Documentation"
+.PP 
+.SS "unsigned hwloc_obj_attr_u::hwloc_bridge_attr_s::depth"
+
+.SS "unsigned short hwloc_obj_attr_u::hwloc_bridge_attr_s::domain"
+
+.SS "union { \&.\&.\&. }  hwloc_obj_attr_u::hwloc_bridge_attr_s::downstream"
+
+.SS "\fBhwloc_obj_bridge_type_t\fP hwloc_obj_attr_u::hwloc_bridge_attr_s::downstream_type"
+
+.SS "struct { \&.\&.\&. }  hwloc_obj_attr_u::hwloc_bridge_attr_s::pci"
+
+.SS "struct \fBhwloc_pcidev_attr_s\fP hwloc_obj_attr_u::hwloc_bridge_attr_s::pci"
+
+.SS "unsigned char hwloc_obj_attr_u::hwloc_bridge_attr_s::secondary_bus"
+
+.SS "unsigned char hwloc_obj_attr_u::hwloc_bridge_attr_s::subordinate_bus"
+
+.SS "union { \&.\&.\&. }  hwloc_obj_attr_u::hwloc_bridge_attr_s::upstream"
+
+.SS "\fBhwloc_obj_bridge_type_t\fP hwloc_obj_attr_u::hwloc_bridge_attr_s::upstream_type"
+
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwloc_obj_attr_u_hwloc_cache_attr_s.3 b/doc/doxygen-doc/man/man3/hwloc_obj_attr_u_hwloc_cache_attr_s.3
new file mode 100644
index 00000000..c37901f9
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_obj_attr_u_hwloc_cache_attr_s.3
@@ -0,0 +1,58 @@
+.TH "hwloc_obj_attr_u::hwloc_cache_attr_s" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_obj_attr_u::hwloc_cache_attr_s
+.SH SYNOPSIS
+.br
+.PP
+.PP
+\fC#include <hwloc\&.h>\fP
+.SS "Data Fields"
+
+.in +1c
+.ti -1c
+.RI "hwloc_uint64_t \fBsize\fP"
+.br
+.ti -1c
+.RI "unsigned \fBdepth\fP"
+.br
+.ti -1c
+.RI "unsigned \fBlinesize\fP"
+.br
+.ti -1c
+.RI "int \fBassociativity\fP"
+.br
+.ti -1c
+.RI "\fBhwloc_obj_cache_type_t\fP \fBtype\fP"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+Cache-specific Object Attributes\&. 
+.SH "Field Documentation"
+.PP 
+.SS "int hwloc_obj_attr_u::hwloc_cache_attr_s::associativity"
+
+.PP
+Ways of associativity, -1 if fully associative, 0 if unknown\&. 
+.SS "unsigned hwloc_obj_attr_u::hwloc_cache_attr_s::depth"
+
+.PP
+Depth of cache (e\&.g\&., L1, L2, \&.\&.\&.etc\&.) 
+.SS "unsigned hwloc_obj_attr_u::hwloc_cache_attr_s::linesize"
+
+.PP
+Cache-line size in bytes\&. 0 if unknown\&. 
+.SS "hwloc_uint64_t hwloc_obj_attr_u::hwloc_cache_attr_s::size"
+
+.PP
+Size of cache in bytes\&. 
+.SS "\fBhwloc_obj_cache_type_t\fP hwloc_obj_attr_u::hwloc_cache_attr_s::type"
+
+.PP
+Cache type\&. 
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwloc_obj_attr_u_hwloc_group_attr_s.3 b/doc/doxygen-doc/man/man3/hwloc_obj_attr_u_hwloc_group_attr_s.3
new file mode 100644
index 00000000..53af586a
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_obj_attr_u_hwloc_group_attr_s.3
@@ -0,0 +1,51 @@
+.TH "hwloc_obj_attr_u::hwloc_group_attr_s" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_obj_attr_u::hwloc_group_attr_s
+.SH SYNOPSIS
+.br
+.PP
+.PP
+\fC#include <hwloc\&.h>\fP
+.SS "Data Fields"
+
+.in +1c
+.ti -1c
+.RI "unsigned \fBdepth\fP"
+.br
+.ti -1c
+.RI "unsigned \fBkind\fP"
+.br
+.ti -1c
+.RI "unsigned \fBsubkind\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBdont_merge\fP"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+Group-specific Object Attributes\&. 
+.SH "Field Documentation"
+.PP 
+.SS "unsigned hwloc_obj_attr_u::hwloc_group_attr_s::depth"
+
+.PP
+Depth of group object\&. It may change if intermediate Group objects are added\&. 
+.SS "unsigned char hwloc_obj_attr_u::hwloc_group_attr_s::dont_merge"
+
+.PP
+Flag preventing groups from being automatically merged with identical parent or children\&. 
+.SS "unsigned hwloc_obj_attr_u::hwloc_group_attr_s::kind"
+
+.PP
+Internally-used kind of group\&. 
+.SS "unsigned hwloc_obj_attr_u::hwloc_group_attr_s::subkind"
+
+.PP
+Internally-used subkind to distinguish different levels of groups with same kind\&. 
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwloc_obj_attr_u_hwloc_numanode_attr_s.3 b/doc/doxygen-doc/man/man3/hwloc_obj_attr_u_hwloc_numanode_attr_s.3
new file mode 100644
index 00000000..51ccf6d1
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_obj_attr_u_hwloc_numanode_attr_s.3
@@ -0,0 +1,49 @@
+.TH "hwloc_obj_attr_u::hwloc_numanode_attr_s" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_obj_attr_u::hwloc_numanode_attr_s
+.SH SYNOPSIS
+.br
+.PP
+.PP
+\fC#include <hwloc\&.h>\fP
+.SS "Data Structures"
+
+.in +1c
+.ti -1c
+.RI "struct \fBhwloc_memory_page_type_s\fP"
+.br
+.in -1c
+.SS "Data Fields"
+
+.in +1c
+.ti -1c
+.RI "hwloc_uint64_t \fBlocal_memory\fP"
+.br
+.ti -1c
+.RI "unsigned \fBpage_types_len\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s\fP * \fBpage_types\fP"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+NUMA node-specific Object Attributes\&. 
+.SH "Field Documentation"
+.PP 
+.SS "hwloc_uint64_t hwloc_obj_attr_u::hwloc_numanode_attr_s::local_memory"
+
+.PP
+Local memory (in bytes) 
+.SS "struct \fBhwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s\fP * hwloc_obj_attr_u::hwloc_numanode_attr_s::page_types"
+
+.SS "unsigned hwloc_obj_attr_u::hwloc_numanode_attr_s::page_types_len"
+
+.PP
+Size of array \fCpage_types\fP\&. 
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwloc_obj_attr_u_hwloc_numanode_attr_s_hwloc_memory_page_type_s.3 b/doc/doxygen-doc/man/man3/hwloc_obj_attr_u_hwloc_numanode_attr_s_hwloc_memory_page_type_s.3
new file mode 100644
index 00000000..cb4a6b9e
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_obj_attr_u_hwloc_numanode_attr_s_hwloc_memory_page_type_s.3
@@ -0,0 +1,39 @@
+.TH "hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s
+.SH SYNOPSIS
+.br
+.PP
+.PP
+\fC#include <hwloc\&.h>\fP
+.SS "Data Fields"
+
+.in +1c
+.ti -1c
+.RI "hwloc_uint64_t \fBsize\fP"
+.br
+.ti -1c
+.RI "hwloc_uint64_t \fBcount\fP"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+Array of local memory page types, \fCNULL\fP if no local memory and \fCpage_types\fP is 0\&. 
+
+The array is sorted by increasing \fCsize\fP fields\&. It contains \fCpage_types_len\fP slots\&. 
+.SH "Field Documentation"
+.PP 
+.SS "hwloc_uint64_t hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s::count"
+
+.PP
+Number of pages of this size\&. 
+.SS "hwloc_uint64_t hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s::size"
+
+.PP
+Size of pages\&. 
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwloc_obj_attr_u_hwloc_osdev_attr_s.3 b/doc/doxygen-doc/man/man3/hwloc_obj_attr_u_hwloc_osdev_attr_s.3
new file mode 100644
index 00000000..f18a810f
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_obj_attr_u_hwloc_osdev_attr_s.3
@@ -0,0 +1,28 @@
+.TH "hwloc_obj_attr_u::hwloc_osdev_attr_s" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_obj_attr_u::hwloc_osdev_attr_s
+.SH SYNOPSIS
+.br
+.PP
+.PP
+\fC#include <hwloc\&.h>\fP
+.SS "Data Fields"
+
+.in +1c
+.ti -1c
+.RI "\fBhwloc_obj_osdev_type_t\fP \fBtype\fP"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+OS Device specific Object Attributes\&. 
+.SH "Field Documentation"
+.PP 
+.SS "\fBhwloc_obj_osdev_type_t\fP hwloc_obj_attr_u::hwloc_osdev_attr_s::type"
+
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwloc_obj_attr_u_hwloc_pcidev_attr_s.3 b/doc/doxygen-doc/man/man3/hwloc_obj_attr_u_hwloc_pcidev_attr_s.3
new file mode 100644
index 00000000..b45d175f
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_obj_attr_u_hwloc_pcidev_attr_s.3
@@ -0,0 +1,78 @@
+.TH "hwloc_obj_attr_u::hwloc_pcidev_attr_s" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_obj_attr_u::hwloc_pcidev_attr_s
+.SH SYNOPSIS
+.br
+.PP
+.PP
+\fC#include <hwloc\&.h>\fP
+.SS "Data Fields"
+
+.in +1c
+.ti -1c
+.RI "unsigned short \fBdomain\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBbus\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBdev\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBfunc\fP"
+.br
+.ti -1c
+.RI "unsigned short \fBclass_id\fP"
+.br
+.ti -1c
+.RI "unsigned short \fBvendor_id\fP"
+.br
+.ti -1c
+.RI "unsigned short \fBdevice_id\fP"
+.br
+.ti -1c
+.RI "unsigned short \fBsubvendor_id\fP"
+.br
+.ti -1c
+.RI "unsigned short \fBsubdevice_id\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBrevision\fP"
+.br
+.ti -1c
+.RI "float \fBlinkspeed\fP"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+PCI Device specific Object Attributes\&. 
+.SH "Field Documentation"
+.PP 
+.SS "unsigned char hwloc_obj_attr_u::hwloc_pcidev_attr_s::bus"
+
+.SS "unsigned short hwloc_obj_attr_u::hwloc_pcidev_attr_s::class_id"
+
+.SS "unsigned char hwloc_obj_attr_u::hwloc_pcidev_attr_s::dev"
+
+.SS "unsigned short hwloc_obj_attr_u::hwloc_pcidev_attr_s::device_id"
+
+.SS "unsigned short hwloc_obj_attr_u::hwloc_pcidev_attr_s::domain"
+
+.SS "unsigned char hwloc_obj_attr_u::hwloc_pcidev_attr_s::func"
+
+.SS "float hwloc_obj_attr_u::hwloc_pcidev_attr_s::linkspeed"
+
+.SS "unsigned char hwloc_obj_attr_u::hwloc_pcidev_attr_s::revision"
+
+.SS "unsigned short hwloc_obj_attr_u::hwloc_pcidev_attr_s::subdevice_id"
+
+.SS "unsigned short hwloc_obj_attr_u::hwloc_pcidev_attr_s::subvendor_id"
+
+.SS "unsigned short hwloc_obj_attr_u::hwloc_pcidev_attr_s::vendor_id"
+
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwloc_obj_bridge_type_e.3 b/doc/doxygen-doc/man/man3/hwloc_obj_bridge_type_e.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_obj_bridge_type_e.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_obj_bridge_type_t.3 b/doc/doxygen-doc/man/man3/hwloc_obj_bridge_type_t.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_obj_bridge_type_t.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_obj_cache_type_e.3 b/doc/doxygen-doc/man/man3/hwloc_obj_cache_type_e.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_obj_cache_type_e.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_obj_cache_type_t.3 b/doc/doxygen-doc/man/man3/hwloc_obj_cache_type_t.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_obj_cache_type_t.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_obj_get_info_by_name.3 b/doc/doxygen-doc/man/man3/hwloc_obj_get_info_by_name.3
new file mode 100644
index 00000000..015587d8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_obj_get_info_by_name.3
@@ -0,0 +1 @@
+.so man3/hwlocality_info_attr.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_obj_is_in_subtree.3 b/doc/doxygen-doc/man/man3/hwloc_obj_is_in_subtree.3
new file mode 100644
index 00000000..dafa088e
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_obj_is_in_subtree.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_ancestors.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_obj_osdev_type_e.3 b/doc/doxygen-doc/man/man3/hwloc_obj_osdev_type_e.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_obj_osdev_type_e.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_obj_osdev_type_t.3 b/doc/doxygen-doc/man/man3/hwloc_obj_osdev_type_t.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_obj_osdev_type_t.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_obj_t.3 b/doc/doxygen-doc/man/man3/hwloc_obj_t.3
new file mode 100644
index 00000000..4f2bac5c
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_obj_t.3
@@ -0,0 +1 @@
+.so man3/hwlocality_objects.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_obj_type_is_cache.3 b/doc/doxygen-doc/man/man3/hwloc_obj_type_is_cache.3
new file mode 100644
index 00000000..fe2c588f
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_obj_type_is_cache.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_types.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_obj_type_is_dcache.3 b/doc/doxygen-doc/man/man3/hwloc_obj_type_is_dcache.3
new file mode 100644
index 00000000..fe2c588f
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_obj_type_is_dcache.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_types.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_obj_type_is_icache.3 b/doc/doxygen-doc/man/man3/hwloc_obj_type_is_icache.3
new file mode 100644
index 00000000..fe2c588f
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_obj_type_is_icache.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_types.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_obj_type_is_io.3 b/doc/doxygen-doc/man/man3/hwloc_obj_type_is_io.3
new file mode 100644
index 00000000..fe2c588f
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_obj_type_is_io.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_types.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_obj_type_is_memory.3 b/doc/doxygen-doc/man/man3/hwloc_obj_type_is_memory.3
new file mode 100644
index 00000000..fe2c588f
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_obj_type_is_memory.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_types.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_obj_type_is_normal.3 b/doc/doxygen-doc/man/man3/hwloc_obj_type_is_normal.3
new file mode 100644
index 00000000..fe2c588f
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_obj_type_is_normal.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_types.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_obj_type_snprintf.3 b/doc/doxygen-doc/man/man3/hwloc_obj_type_snprintf.3
new file mode 100644
index 00000000..9cc50f3b
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_obj_type_snprintf.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_strings.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_obj_type_string.3 b/doc/doxygen-doc/man/man3/hwloc_obj_type_string.3
new file mode 100644
index 00000000..9cc50f3b
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_obj_type_string.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_strings.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_obj_type_t.3 b/doc/doxygen-doc/man/man3/hwloc_obj_type_t.3
new file mode 100644
index 00000000..ef77b0aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_obj_type_t.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_types.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_opencl_get_device_cpuset.3 b/doc/doxygen-doc/man/man3/hwloc_opencl_get_device_cpuset.3
new file mode 100644
index 00000000..73febdd7
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_opencl_get_device_cpuset.3
@@ -0,0 +1 @@
+.so man3/hwlocality_opencl.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_opencl_get_device_osdev.3 b/doc/doxygen-doc/man/man3/hwloc_opencl_get_device_osdev.3
new file mode 100644
index 00000000..73febdd7
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_opencl_get_device_osdev.3
@@ -0,0 +1 @@
+.so man3/hwlocality_opencl.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_opencl_get_device_osdev_by_index.3 b/doc/doxygen-doc/man/man3/hwloc_opencl_get_device_osdev_by_index.3
new file mode 100644
index 00000000..73febdd7
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_opencl_get_device_osdev_by_index.3
@@ -0,0 +1 @@
+.so man3/hwlocality_opencl.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_opencl_get_device_pci_busid.3 b/doc/doxygen-doc/man/man3/hwloc_opencl_get_device_pci_busid.3
new file mode 100644
index 00000000..73febdd7
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_opencl_get_device_pci_busid.3
@@ -0,0 +1 @@
+.so man3/hwlocality_opencl.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_pci_find_by_busid.3 b/doc/doxygen-doc/man/man3/hwloc_pci_find_by_busid.3
new file mode 100644
index 00000000..d4a1bec8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_pci_find_by_busid.3
@@ -0,0 +1 @@
+.so man3/hwlocality_components_pcifind.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_pci_find_parent_by_busid.3 b/doc/doxygen-doc/man/man3/hwloc_pci_find_parent_by_busid.3
new file mode 100644
index 00000000..d4a1bec8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_pci_find_parent_by_busid.3
@@ -0,0 +1 @@
+.so man3/hwlocality_components_pcifind.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_pcidisc_check_bridge_type.3 b/doc/doxygen-doc/man/man3/hwloc_pcidisc_check_bridge_type.3
new file mode 100644
index 00000000..0e1c5e20
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_pcidisc_check_bridge_type.3
@@ -0,0 +1 @@
+.so man3/hwlocality_components_pcidisc.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_pcidisc_find_bridge_buses.3 b/doc/doxygen-doc/man/man3/hwloc_pcidisc_find_bridge_buses.3
new file mode 100644
index 00000000..0e1c5e20
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_pcidisc_find_bridge_buses.3
@@ -0,0 +1 @@
+.so man3/hwlocality_components_pcidisc.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_pcidisc_find_cap.3 b/doc/doxygen-doc/man/man3/hwloc_pcidisc_find_cap.3
new file mode 100644
index 00000000..0e1c5e20
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_pcidisc_find_cap.3
@@ -0,0 +1 @@
+.so man3/hwlocality_components_pcidisc.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_pcidisc_find_linkspeed.3 b/doc/doxygen-doc/man/man3/hwloc_pcidisc_find_linkspeed.3
new file mode 100644
index 00000000..0e1c5e20
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_pcidisc_find_linkspeed.3
@@ -0,0 +1 @@
+.so man3/hwlocality_components_pcidisc.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_pcidisc_tree_attach.3 b/doc/doxygen-doc/man/man3/hwloc_pcidisc_tree_attach.3
new file mode 100644
index 00000000..0e1c5e20
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_pcidisc_tree_attach.3
@@ -0,0 +1 @@
+.so man3/hwlocality_components_pcidisc.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_pcidisc_tree_insert_by_busid.3 b/doc/doxygen-doc/man/man3/hwloc_pcidisc_tree_insert_by_busid.3
new file mode 100644
index 00000000..0e1c5e20
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_pcidisc_tree_insert_by_busid.3
@@ -0,0 +1 @@
+.so man3/hwlocality_components_pcidisc.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_plugin_check_namespace.3 b/doc/doxygen-doc/man/man3/hwloc_plugin_check_namespace.3
new file mode 100644
index 00000000..7d645186
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_plugin_check_namespace.3
@@ -0,0 +1 @@
+.so man3/hwlocality_components_core_funcs.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_restrict_flags_e.3 b/doc/doxygen-doc/man/man3/hwloc_restrict_flags_e.3
new file mode 100644
index 00000000..d859a648
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_restrict_flags_e.3
@@ -0,0 +1 @@
+.so man3/hwlocality_tinker.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_rsmi_get_device_cpuset.3 b/doc/doxygen-doc/man/man3/hwloc_rsmi_get_device_cpuset.3
new file mode 100644
index 00000000..57bfe8e3
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_rsmi_get_device_cpuset.3
@@ -0,0 +1 @@
+.so man3/hwlocality_rsmi.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_rsmi_get_device_osdev.3 b/doc/doxygen-doc/man/man3/hwloc_rsmi_get_device_osdev.3
new file mode 100644
index 00000000..57bfe8e3
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_rsmi_get_device_osdev.3
@@ -0,0 +1 @@
+.so man3/hwlocality_rsmi.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_rsmi_get_device_osdev_by_index.3 b/doc/doxygen-doc/man/man3/hwloc_rsmi_get_device_osdev_by_index.3
new file mode 100644
index 00000000..57bfe8e3
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_rsmi_get_device_osdev_by_index.3
@@ -0,0 +1 @@
+.so man3/hwlocality_rsmi.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_set_area_membind.3 b/doc/doxygen-doc/man/man3/hwloc_set_area_membind.3
new file mode 100644
index 00000000..a7c83a19
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_set_area_membind.3
@@ -0,0 +1 @@
+.so man3/hwlocality_membinding.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_set_cpubind.3 b/doc/doxygen-doc/man/man3/hwloc_set_cpubind.3
new file mode 100644
index 00000000..4c34d1aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_set_cpubind.3
@@ -0,0 +1 @@
+.so man3/hwlocality_cpubinding.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_set_membind.3 b/doc/doxygen-doc/man/man3/hwloc_set_membind.3
new file mode 100644
index 00000000..a7c83a19
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_set_membind.3
@@ -0,0 +1 @@
+.so man3/hwlocality_membinding.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_set_proc_cpubind.3 b/doc/doxygen-doc/man/man3/hwloc_set_proc_cpubind.3
new file mode 100644
index 00000000..4c34d1aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_set_proc_cpubind.3
@@ -0,0 +1 @@
+.so man3/hwlocality_cpubinding.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_set_proc_membind.3 b/doc/doxygen-doc/man/man3/hwloc_set_proc_membind.3
new file mode 100644
index 00000000..a7c83a19
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_set_proc_membind.3
@@ -0,0 +1 @@
+.so man3/hwlocality_membinding.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_set_thread_cpubind.3 b/doc/doxygen-doc/man/man3/hwloc_set_thread_cpubind.3
new file mode 100644
index 00000000..4c34d1aa
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_set_thread_cpubind.3
@@ -0,0 +1 @@
+.so man3/hwlocality_cpubinding.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_shmem_topology_adopt.3 b/doc/doxygen-doc/man/man3/hwloc_shmem_topology_adopt.3
new file mode 100644
index 00000000..2b0086c8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_shmem_topology_adopt.3
@@ -0,0 +1 @@
+.so man3/hwlocality_shmem.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_shmem_topology_get_length.3 b/doc/doxygen-doc/man/man3/hwloc_shmem_topology_get_length.3
new file mode 100644
index 00000000..2b0086c8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_shmem_topology_get_length.3
@@ -0,0 +1 @@
+.so man3/hwlocality_shmem.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_shmem_topology_write.3 b/doc/doxygen-doc/man/man3/hwloc_shmem_topology_write.3
new file mode 100644
index 00000000..2b0086c8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_shmem_topology_write.3
@@ -0,0 +1 @@
+.so man3/hwlocality_shmem.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_abi_check.3 b/doc/doxygen-doc/man/man3/hwloc_topology_abi_check.3
new file mode 100644
index 00000000..87cc6e4d
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_abi_check.3
@@ -0,0 +1 @@
+.so man3/hwlocality_creation.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_alloc_group_object.3 b/doc/doxygen-doc/man/man3/hwloc_topology_alloc_group_object.3
new file mode 100644
index 00000000..d859a648
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_alloc_group_object.3
@@ -0,0 +1 @@
+.so man3/hwlocality_tinker.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_allow.3 b/doc/doxygen-doc/man/man3/hwloc_topology_allow.3
new file mode 100644
index 00000000..d859a648
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_allow.3
@@ -0,0 +1 @@
+.so man3/hwlocality_tinker.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_check.3 b/doc/doxygen-doc/man/man3/hwloc_topology_check.3
new file mode 100644
index 00000000..87cc6e4d
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_check.3
@@ -0,0 +1 @@
+.so man3/hwlocality_creation.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_components_flag_e.3 b/doc/doxygen-doc/man/man3/hwloc_topology_components_flag_e.3
new file mode 100644
index 00000000..0390f8a8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_components_flag_e.3
@@ -0,0 +1 @@
+.so man3/hwlocality_setsource.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_cpubind_support.3 b/doc/doxygen-doc/man/man3/hwloc_topology_cpubind_support.3
new file mode 100644
index 00000000..2d16e7a0
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_cpubind_support.3
@@ -0,0 +1,80 @@
+.TH "hwloc_topology_cpubind_support" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_topology_cpubind_support
+.SH SYNOPSIS
+.br
+.PP
+.PP
+\fC#include <hwloc\&.h>\fP
+.SS "Data Fields"
+
+.in +1c
+.ti -1c
+.RI "unsigned char \fBset_thisproc_cpubind\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBget_thisproc_cpubind\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBset_proc_cpubind\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBget_proc_cpubind\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBset_thisthread_cpubind\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBget_thisthread_cpubind\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBset_thread_cpubind\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBget_thread_cpubind\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBget_thisproc_last_cpu_location\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBget_proc_last_cpu_location\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBget_thisthread_last_cpu_location\fP"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+Flags describing actual PU binding support for this topology\&. 
+
+A flag may be set even if the feature isn't supported in all cases (e\&.g\&. binding to random sets of non-contiguous objects)\&. 
+.SH "Field Documentation"
+.PP 
+.SS "unsigned char hwloc_topology_cpubind_support::get_proc_cpubind"
+Getting the binding of a whole given process is supported\&. 
+.SS "unsigned char hwloc_topology_cpubind_support::get_proc_last_cpu_location"
+Getting the last processors where a whole process ran is supported 
+.SS "unsigned char hwloc_topology_cpubind_support::get_thisproc_cpubind"
+Getting the binding of the whole current process is supported\&. 
+.SS "unsigned char hwloc_topology_cpubind_support::get_thisproc_last_cpu_location"
+Getting the last processors where the whole current process ran is supported 
+.SS "unsigned char hwloc_topology_cpubind_support::get_thisthread_cpubind"
+Getting the binding of the current thread only is supported\&. 
+.SS "unsigned char hwloc_topology_cpubind_support::get_thisthread_last_cpu_location"
+Getting the last processors where the current thread ran is supported 
+.SS "unsigned char hwloc_topology_cpubind_support::get_thread_cpubind"
+Getting the binding of a given thread only is supported\&. 
+.SS "unsigned char hwloc_topology_cpubind_support::set_proc_cpubind"
+Binding a whole given process is supported\&. 
+.SS "unsigned char hwloc_topology_cpubind_support::set_thisproc_cpubind"
+Binding the whole current process is supported\&. 
+.SS "unsigned char hwloc_topology_cpubind_support::set_thisthread_cpubind"
+Binding the current thread only is supported\&. 
+.SS "unsigned char hwloc_topology_cpubind_support::set_thread_cpubind"
+Binding a given thread only is supported\&. 
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_destroy.3 b/doc/doxygen-doc/man/man3/hwloc_topology_destroy.3
new file mode 100644
index 00000000..87cc6e4d
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_destroy.3
@@ -0,0 +1 @@
+.so man3/hwlocality_creation.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_diff_apply.3 b/doc/doxygen-doc/man/man3/hwloc_topology_diff_apply.3
new file mode 100644
index 00000000..c3294156
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_diff_apply.3
@@ -0,0 +1 @@
+.so man3/hwlocality_diff.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_diff_apply_flags_e.3 b/doc/doxygen-doc/man/man3/hwloc_topology_diff_apply_flags_e.3
new file mode 100644
index 00000000..c3294156
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_diff_apply_flags_e.3
@@ -0,0 +1 @@
+.so man3/hwlocality_diff.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_diff_build.3 b/doc/doxygen-doc/man/man3/hwloc_topology_diff_build.3
new file mode 100644
index 00000000..c3294156
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_diff_build.3
@@ -0,0 +1 @@
+.so man3/hwlocality_diff.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_diff_destroy.3 b/doc/doxygen-doc/man/man3/hwloc_topology_diff_destroy.3
new file mode 100644
index 00000000..c3294156
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_diff_destroy.3
@@ -0,0 +1 @@
+.so man3/hwlocality_diff.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_diff_export_xml.3 b/doc/doxygen-doc/man/man3/hwloc_topology_diff_export_xml.3
new file mode 100644
index 00000000..c3294156
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_diff_export_xml.3
@@ -0,0 +1 @@
+.so man3/hwlocality_diff.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_diff_export_xmlbuffer.3 b/doc/doxygen-doc/man/man3/hwloc_topology_diff_export_xmlbuffer.3
new file mode 100644
index 00000000..c3294156
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_diff_export_xmlbuffer.3
@@ -0,0 +1 @@
+.so man3/hwlocality_diff.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_diff_load_xml.3 b/doc/doxygen-doc/man/man3/hwloc_topology_diff_load_xml.3
new file mode 100644
index 00000000..c3294156
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_diff_load_xml.3
@@ -0,0 +1 @@
+.so man3/hwlocality_diff.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_diff_load_xmlbuffer.3 b/doc/doxygen-doc/man/man3/hwloc_topology_diff_load_xmlbuffer.3
new file mode 100644
index 00000000..c3294156
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_diff_load_xmlbuffer.3
@@ -0,0 +1 @@
+.so man3/hwlocality_diff.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_diff_obj_attr_type_e.3 b/doc/doxygen-doc/man/man3/hwloc_topology_diff_obj_attr_type_e.3
new file mode 100644
index 00000000..c3294156
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_diff_obj_attr_type_e.3
@@ -0,0 +1 @@
+.so man3/hwlocality_diff.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_diff_obj_attr_type_t.3 b/doc/doxygen-doc/man/man3/hwloc_topology_diff_obj_attr_type_t.3
new file mode 100644
index 00000000..c3294156
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_diff_obj_attr_type_t.3
@@ -0,0 +1 @@
+.so man3/hwlocality_diff.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_diff_obj_attr_u.3 b/doc/doxygen-doc/man/man3/hwloc_topology_diff_obj_attr_u.3
new file mode 100644
index 00000000..9a4c80d9
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_diff_obj_attr_u.3
@@ -0,0 +1,51 @@
+.TH "hwloc_topology_diff_obj_attr_u" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_topology_diff_obj_attr_u
+.SH SYNOPSIS
+.br
+.PP
+.PP
+\fC#include <diff\&.h>\fP
+.SS "Data Structures"
+
+.in +1c
+.ti -1c
+.RI "struct \fBhwloc_topology_diff_obj_attr_generic_s\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_topology_diff_obj_attr_string_s\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_topology_diff_obj_attr_uint64_s\fP"
+.br
+.in -1c
+.SS "Data Fields"
+
+.in +1c
+.ti -1c
+.RI "struct \fBhwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s\fP \fBgeneric\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s\fP \fBuint64\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s\fP \fBstring\fP"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+One object attribute difference\&. 
+.SH "Field Documentation"
+.PP 
+.SS "struct \fBhwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s\fP hwloc_topology_diff_obj_attr_u::generic"
+
+.SS "struct \fBhwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s\fP hwloc_topology_diff_obj_attr_u::string"
+
+.SS "struct \fBhwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s\fP hwloc_topology_diff_obj_attr_u::uint64"
+
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_diff_obj_attr_u_hwloc_topology_diff_obj_attr_generic_s.3 b/doc/doxygen-doc/man/man3/hwloc_topology_diff_obj_attr_u_hwloc_topology_diff_obj_attr_generic_s.3
new file mode 100644
index 00000000..39965e54
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_diff_obj_attr_u_hwloc_topology_diff_obj_attr_generic_s.3
@@ -0,0 +1,25 @@
+.TH "hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s
+.SH SYNOPSIS
+.br
+.PP
+.PP
+\fC#include <diff\&.h>\fP
+.SS "Data Fields"
+
+.in +1c
+.ti -1c
+.RI "\fBhwloc_topology_diff_obj_attr_type_t\fP \fBtype\fP"
+.br
+.in -1c
+.SH "Field Documentation"
+.PP 
+.SS "\fBhwloc_topology_diff_obj_attr_type_t\fP hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s::type"
+
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_diff_obj_attr_u_hwloc_topology_diff_obj_attr_string_s.3 b/doc/doxygen-doc/man/man3/hwloc_topology_diff_obj_attr_u_hwloc_topology_diff_obj_attr_string_s.3
new file mode 100644
index 00000000..8b7f50f0
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_diff_obj_attr_u_hwloc_topology_diff_obj_attr_string_s.3
@@ -0,0 +1,43 @@
+.TH "hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s
+.SH SYNOPSIS
+.br
+.PP
+.PP
+\fC#include <diff\&.h>\fP
+.SS "Data Fields"
+
+.in +1c
+.ti -1c
+.RI "\fBhwloc_topology_diff_obj_attr_type_t\fP \fBtype\fP"
+.br
+.ti -1c
+.RI "char * \fBname\fP"
+.br
+.ti -1c
+.RI "char * \fBoldvalue\fP"
+.br
+.ti -1c
+.RI "char * \fBnewvalue\fP"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+String attribute modification with an optional name\&. 
+.SH "Field Documentation"
+.PP 
+.SS "char* hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s::name"
+
+.SS "char* hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s::newvalue"
+
+.SS "char* hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s::oldvalue"
+
+.SS "\fBhwloc_topology_diff_obj_attr_type_t\fP hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s::type"
+
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_diff_obj_attr_u_hwloc_topology_diff_obj_attr_uint64_s.3 b/doc/doxygen-doc/man/man3/hwloc_topology_diff_obj_attr_u_hwloc_topology_diff_obj_attr_uint64_s.3
new file mode 100644
index 00000000..552e3542
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_diff_obj_attr_u_hwloc_topology_diff_obj_attr_uint64_s.3
@@ -0,0 +1,43 @@
+.TH "hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s
+.SH SYNOPSIS
+.br
+.PP
+.PP
+\fC#include <diff\&.h>\fP
+.SS "Data Fields"
+
+.in +1c
+.ti -1c
+.RI "\fBhwloc_topology_diff_obj_attr_type_t\fP \fBtype\fP"
+.br
+.ti -1c
+.RI "hwloc_uint64_t \fBindex\fP"
+.br
+.ti -1c
+.RI "hwloc_uint64_t \fBoldvalue\fP"
+.br
+.ti -1c
+.RI "hwloc_uint64_t \fBnewvalue\fP"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+Integer attribute modification with an optional index\&. 
+.SH "Field Documentation"
+.PP 
+.SS "hwloc_uint64_t hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s::index"
+
+.SS "hwloc_uint64_t hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s::newvalue"
+
+.SS "hwloc_uint64_t hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s::oldvalue"
+
+.SS "\fBhwloc_topology_diff_obj_attr_type_t\fP hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s::type"
+
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_diff_t.3 b/doc/doxygen-doc/man/man3/hwloc_topology_diff_t.3
new file mode 100644
index 00000000..c3294156
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_diff_t.3
@@ -0,0 +1 @@
+.so man3/hwlocality_diff.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_diff_type_e.3 b/doc/doxygen-doc/man/man3/hwloc_topology_diff_type_e.3
new file mode 100644
index 00000000..c3294156
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_diff_type_e.3
@@ -0,0 +1 @@
+.so man3/hwlocality_diff.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_diff_type_t.3 b/doc/doxygen-doc/man/man3/hwloc_topology_diff_type_t.3
new file mode 100644
index 00000000..c3294156
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_diff_type_t.3
@@ -0,0 +1 @@
+.so man3/hwlocality_diff.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_diff_u.3 b/doc/doxygen-doc/man/man3/hwloc_topology_diff_u.3
new file mode 100644
index 00000000..35ac914d
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_diff_u.3
@@ -0,0 +1,51 @@
+.TH "hwloc_topology_diff_u" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_topology_diff_u
+.SH SYNOPSIS
+.br
+.PP
+.PP
+\fC#include <diff\&.h>\fP
+.SS "Data Structures"
+
+.in +1c
+.ti -1c
+.RI "struct \fBhwloc_topology_diff_generic_s\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_topology_diff_obj_attr_s\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_topology_diff_too_complex_s\fP"
+.br
+.in -1c
+.SS "Data Fields"
+
+.in +1c
+.ti -1c
+.RI "struct \fBhwloc_topology_diff_u::hwloc_topology_diff_generic_s\fP \fBgeneric\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s\fP \fBobj_attr\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_topology_diff_u::hwloc_topology_diff_too_complex_s\fP \fBtoo_complex\fP"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+One element of a difference list between two topologies\&. 
+.SH "Field Documentation"
+.PP 
+.SS "struct \fBhwloc_topology_diff_u::hwloc_topology_diff_generic_s\fP hwloc_topology_diff_u::generic"
+
+.SS "struct \fBhwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s\fP hwloc_topology_diff_u::obj_attr"
+
+.SS "struct \fBhwloc_topology_diff_u::hwloc_topology_diff_too_complex_s\fP hwloc_topology_diff_u::too_complex"
+
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_diff_u_hwloc_topology_diff_generic_s.3 b/doc/doxygen-doc/man/man3/hwloc_topology_diff_u_hwloc_topology_diff_generic_s.3
new file mode 100644
index 00000000..52ac2866
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_diff_u_hwloc_topology_diff_generic_s.3
@@ -0,0 +1,30 @@
+.TH "hwloc_topology_diff_u::hwloc_topology_diff_generic_s" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_topology_diff_u::hwloc_topology_diff_generic_s
+.SH SYNOPSIS
+.br
+.PP
+.PP
+\fC#include <diff\&.h>\fP
+.SS "Data Fields"
+
+.in +1c
+.ti -1c
+.RI "\fBhwloc_topology_diff_type_t\fP \fBtype\fP"
+.br
+.ti -1c
+.RI "union \fBhwloc_topology_diff_u\fP * \fBnext\fP"
+.br
+.in -1c
+.SH "Field Documentation"
+.PP 
+.SS "union \fBhwloc_topology_diff_u\fP* hwloc_topology_diff_u::hwloc_topology_diff_generic_s::next"
+
+.SS "\fBhwloc_topology_diff_type_t\fP hwloc_topology_diff_u::hwloc_topology_diff_generic_s::type"
+
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_diff_u_hwloc_topology_diff_obj_attr_s.3 b/doc/doxygen-doc/man/man3/hwloc_topology_diff_u_hwloc_topology_diff_obj_attr_s.3
new file mode 100644
index 00000000..1a2e7265
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_diff_u_hwloc_topology_diff_obj_attr_s.3
@@ -0,0 +1,45 @@
+.TH "hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s
+.SH SYNOPSIS
+.br
+.PP
+.PP
+\fC#include <diff\&.h>\fP
+.SS "Data Fields"
+
+.in +1c
+.ti -1c
+.RI "\fBhwloc_topology_diff_type_t\fP \fBtype\fP"
+.br
+.ti -1c
+.RI "union \fBhwloc_topology_diff_u\fP * \fBnext\fP"
+.br
+.ti -1c
+.RI "int \fBobj_depth\fP"
+.br
+.ti -1c
+.RI "unsigned \fBobj_index\fP"
+.br
+.ti -1c
+.RI "union \fBhwloc_topology_diff_obj_attr_u\fP \fBdiff\fP"
+.br
+.in -1c
+.SH "Field Documentation"
+.PP 
+.SS "union \fBhwloc_topology_diff_obj_attr_u\fP hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s::diff"
+
+.SS "union \fBhwloc_topology_diff_u\fP* hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s::next"
+
+.SS "int hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s::obj_depth"
+
+.SS "unsigned hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s::obj_index"
+
+.SS "\fBhwloc_topology_diff_type_t\fP hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s::type"
+
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_diff_u_hwloc_topology_diff_too_complex_s.3 b/doc/doxygen-doc/man/man3/hwloc_topology_diff_u_hwloc_topology_diff_too_complex_s.3
new file mode 100644
index 00000000..356c7b57
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_diff_u_hwloc_topology_diff_too_complex_s.3
@@ -0,0 +1,40 @@
+.TH "hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s
+.SH SYNOPSIS
+.br
+.PP
+.PP
+\fC#include <diff\&.h>\fP
+.SS "Data Fields"
+
+.in +1c
+.ti -1c
+.RI "\fBhwloc_topology_diff_type_t\fP \fBtype\fP"
+.br
+.ti -1c
+.RI "union \fBhwloc_topology_diff_u\fP * \fBnext\fP"
+.br
+.ti -1c
+.RI "int \fBobj_depth\fP"
+.br
+.ti -1c
+.RI "unsigned \fBobj_index\fP"
+.br
+.in -1c
+.SH "Field Documentation"
+.PP 
+.SS "union \fBhwloc_topology_diff_u\fP* hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s::next"
+
+.SS "int hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s::obj_depth"
+
+.SS "unsigned hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s::obj_index"
+
+.SS "\fBhwloc_topology_diff_type_t\fP hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s::type"
+
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_discovery_support.3 b/doc/doxygen-doc/man/man3/hwloc_topology_discovery_support.3
new file mode 100644
index 00000000..2be49586
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_discovery_support.3
@@ -0,0 +1,65 @@
+.TH "hwloc_topology_discovery_support" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_topology_discovery_support
+.SH SYNOPSIS
+.br
+.PP
+.PP
+\fC#include <hwloc\&.h>\fP
+.SS "Data Fields"
+
+.in +1c
+.ti -1c
+.RI "unsigned char \fBpu\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBnuma\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBnuma_memory\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBdisallowed_pu\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBdisallowed_numa\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBcpukind_efficiency\fP"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+Flags describing actual discovery support for this topology\&. 
+.SH "Field Documentation"
+.PP 
+.SS "unsigned char hwloc_topology_discovery_support::cpukind_efficiency"
+
+.PP
+Detecting the efficiency of CPU kinds is supported, see \fBKinds of CPU cores\fP\&. 
+.SS "unsigned char hwloc_topology_discovery_support::disallowed_numa"
+
+.PP
+Detecting and identifying NUMA nodes that are not available to the current process is supported\&. 
+.SS "unsigned char hwloc_topology_discovery_support::disallowed_pu"
+
+.PP
+Detecting and identifying PU objects that are not available to the current process is supported\&. 
+.SS "unsigned char hwloc_topology_discovery_support::numa"
+
+.PP
+Detecting the number of NUMA nodes is supported\&. 
+.SS "unsigned char hwloc_topology_discovery_support::numa_memory"
+
+.PP
+Detecting the amount of memory in NUMA nodes is supported\&. 
+.SS "unsigned char hwloc_topology_discovery_support::pu"
+
+.PP
+Detecting the number of PU objects is supported\&. 
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_dup.3 b/doc/doxygen-doc/man/man3/hwloc_topology_dup.3
new file mode 100644
index 00000000..87cc6e4d
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_dup.3
@@ -0,0 +1 @@
+.so man3/hwlocality_creation.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_export_synthetic.3 b/doc/doxygen-doc/man/man3/hwloc_topology_export_synthetic.3
new file mode 100644
index 00000000..72967ac8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_export_synthetic.3
@@ -0,0 +1 @@
+.so man3/hwlocality_syntheticexport.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_export_synthetic_flags_e.3 b/doc/doxygen-doc/man/man3/hwloc_topology_export_synthetic_flags_e.3
new file mode 100644
index 00000000..72967ac8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_export_synthetic_flags_e.3
@@ -0,0 +1 @@
+.so man3/hwlocality_syntheticexport.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_export_xml.3 b/doc/doxygen-doc/man/man3/hwloc_topology_export_xml.3
new file mode 100644
index 00000000..289c696f
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_export_xml.3
@@ -0,0 +1 @@
+.so man3/hwlocality_xmlexport.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_export_xml_flags_e.3 b/doc/doxygen-doc/man/man3/hwloc_topology_export_xml_flags_e.3
new file mode 100644
index 00000000..289c696f
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_export_xml_flags_e.3
@@ -0,0 +1 @@
+.so man3/hwlocality_xmlexport.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_export_xmlbuffer.3 b/doc/doxygen-doc/man/man3/hwloc_topology_export_xmlbuffer.3
new file mode 100644
index 00000000..289c696f
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_export_xmlbuffer.3
@@ -0,0 +1 @@
+.so man3/hwlocality_xmlexport.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_flags_e.3 b/doc/doxygen-doc/man/man3/hwloc_topology_flags_e.3
new file mode 100644
index 00000000..e4dbe0b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_flags_e.3
@@ -0,0 +1 @@
+.so man3/hwlocality_configuration.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_get_allowed_cpuset.3 b/doc/doxygen-doc/man/man3/hwloc_topology_get_allowed_cpuset.3
new file mode 100644
index 00000000..f2d2f330
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_get_allowed_cpuset.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_topology_sets.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_get_allowed_nodeset.3 b/doc/doxygen-doc/man/man3/hwloc_topology_get_allowed_nodeset.3
new file mode 100644
index 00000000..f2d2f330
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_get_allowed_nodeset.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_topology_sets.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_get_complete_cpuset.3 b/doc/doxygen-doc/man/man3/hwloc_topology_get_complete_cpuset.3
new file mode 100644
index 00000000..f2d2f330
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_get_complete_cpuset.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_topology_sets.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_get_complete_nodeset.3 b/doc/doxygen-doc/man/man3/hwloc_topology_get_complete_nodeset.3
new file mode 100644
index 00000000..f2d2f330
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_get_complete_nodeset.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_topology_sets.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_get_depth.3 b/doc/doxygen-doc/man/man3/hwloc_topology_get_depth.3
new file mode 100644
index 00000000..d14934f8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_get_depth.3
@@ -0,0 +1 @@
+.so man3/hwlocality_levels.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_get_flags.3 b/doc/doxygen-doc/man/man3/hwloc_topology_get_flags.3
new file mode 100644
index 00000000..e4dbe0b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_get_flags.3
@@ -0,0 +1 @@
+.so man3/hwlocality_configuration.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_get_support.3 b/doc/doxygen-doc/man/man3/hwloc_topology_get_support.3
new file mode 100644
index 00000000..e4dbe0b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_get_support.3
@@ -0,0 +1 @@
+.so man3/hwlocality_configuration.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_get_topology_cpuset.3 b/doc/doxygen-doc/man/man3/hwloc_topology_get_topology_cpuset.3
new file mode 100644
index 00000000..f2d2f330
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_get_topology_cpuset.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_topology_sets.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_get_topology_nodeset.3 b/doc/doxygen-doc/man/man3/hwloc_topology_get_topology_nodeset.3
new file mode 100644
index 00000000..f2d2f330
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_get_topology_nodeset.3
@@ -0,0 +1 @@
+.so man3/hwlocality_helper_topology_sets.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_get_type_filter.3 b/doc/doxygen-doc/man/man3/hwloc_topology_get_type_filter.3
new file mode 100644
index 00000000..e4dbe0b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_get_type_filter.3
@@ -0,0 +1 @@
+.so man3/hwlocality_configuration.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_get_userdata.3 b/doc/doxygen-doc/man/man3/hwloc_topology_get_userdata.3
new file mode 100644
index 00000000..e4dbe0b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_get_userdata.3
@@ -0,0 +1 @@
+.so man3/hwlocality_configuration.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_init.3 b/doc/doxygen-doc/man/man3/hwloc_topology_init.3
new file mode 100644
index 00000000..87cc6e4d
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_init.3
@@ -0,0 +1 @@
+.so man3/hwlocality_creation.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_insert_group_object.3 b/doc/doxygen-doc/man/man3/hwloc_topology_insert_group_object.3
new file mode 100644
index 00000000..d859a648
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_insert_group_object.3
@@ -0,0 +1 @@
+.so man3/hwlocality_tinker.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_insert_misc_object.3 b/doc/doxygen-doc/man/man3/hwloc_topology_insert_misc_object.3
new file mode 100644
index 00000000..d859a648
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_insert_misc_object.3
@@ -0,0 +1 @@
+.so man3/hwlocality_tinker.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_is_thissystem.3 b/doc/doxygen-doc/man/man3/hwloc_topology_is_thissystem.3
new file mode 100644
index 00000000..e4dbe0b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_is_thissystem.3
@@ -0,0 +1 @@
+.so man3/hwlocality_configuration.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_load.3 b/doc/doxygen-doc/man/man3/hwloc_topology_load.3
new file mode 100644
index 00000000..87cc6e4d
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_load.3
@@ -0,0 +1 @@
+.so man3/hwlocality_creation.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_membind_support.3 b/doc/doxygen-doc/man/man3/hwloc_topology_membind_support.3
new file mode 100644
index 00000000..c6d3e95f
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_membind_support.3
@@ -0,0 +1,100 @@
+.TH "hwloc_topology_membind_support" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_topology_membind_support
+.SH SYNOPSIS
+.br
+.PP
+.PP
+\fC#include <hwloc\&.h>\fP
+.SS "Data Fields"
+
+.in +1c
+.ti -1c
+.RI "unsigned char \fBset_thisproc_membind\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBget_thisproc_membind\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBset_proc_membind\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBget_proc_membind\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBset_thisthread_membind\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBget_thisthread_membind\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBset_area_membind\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBget_area_membind\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBalloc_membind\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBfirsttouch_membind\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBbind_membind\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBinterleave_membind\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBnexttouch_membind\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBmigrate_membind\fP"
+.br
+.ti -1c
+.RI "unsigned char \fBget_area_memlocation\fP"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+Flags describing actual memory binding support for this topology\&. 
+
+A flag may be set even if the feature isn't supported in all cases (e\&.g\&. binding to random sets of non-contiguous objects)\&. 
+.SH "Field Documentation"
+.PP 
+.SS "unsigned char hwloc_topology_membind_support::alloc_membind"
+Allocating a bound memory area is supported\&. 
+.SS "unsigned char hwloc_topology_membind_support::bind_membind"
+Bind policy is supported\&. 
+.SS "unsigned char hwloc_topology_membind_support::firsttouch_membind"
+First-touch policy is supported\&. 
+.SS "unsigned char hwloc_topology_membind_support::get_area_membind"
+Getting the binding of a given memory area is supported\&. 
+.SS "unsigned char hwloc_topology_membind_support::get_area_memlocation"
+Getting the last NUMA nodes where a memory area was allocated is supported 
+.SS "unsigned char hwloc_topology_membind_support::get_proc_membind"
+Getting the binding of a whole given process is supported\&. 
+.SS "unsigned char hwloc_topology_membind_support::get_thisproc_membind"
+Getting the binding of the whole current process is supported\&. 
+.SS "unsigned char hwloc_topology_membind_support::get_thisthread_membind"
+Getting the binding of the current thread only is supported\&. 
+.SS "unsigned char hwloc_topology_membind_support::interleave_membind"
+Interleave policy is supported\&. 
+.SS "unsigned char hwloc_topology_membind_support::migrate_membind"
+Migration flags is supported\&. 
+.SS "unsigned char hwloc_topology_membind_support::nexttouch_membind"
+Next-touch migration policy is supported\&. 
+.SS "unsigned char hwloc_topology_membind_support::set_area_membind"
+Binding a given memory area is supported\&. 
+.SS "unsigned char hwloc_topology_membind_support::set_proc_membind"
+Binding a whole given process is supported\&. 
+.SS "unsigned char hwloc_topology_membind_support::set_thisproc_membind"
+Binding the whole current process is supported\&. 
+.SS "unsigned char hwloc_topology_membind_support::set_thisthread_membind"
+Binding the current thread only is supported\&. 
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_misc_support.3 b/doc/doxygen-doc/man/man3/hwloc_topology_misc_support.3
new file mode 100644
index 00000000..be2732a7
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_misc_support.3
@@ -0,0 +1,28 @@
+.TH "hwloc_topology_misc_support" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_topology_misc_support
+.SH SYNOPSIS
+.br
+.PP
+.PP
+\fC#include <hwloc\&.h>\fP
+.SS "Data Fields"
+
+.in +1c
+.ti -1c
+.RI "unsigned char \fBimported_support\fP"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+Flags describing miscellaneous features\&. 
+.SH "Field Documentation"
+.PP 
+.SS "unsigned char hwloc_topology_misc_support::imported_support"
+Support was imported when importing another topology, see \fBHWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT\fP\&. 
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_reconnect.3 b/doc/doxygen-doc/man/man3/hwloc_topology_reconnect.3
new file mode 100644
index 00000000..7d645186
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_reconnect.3
@@ -0,0 +1 @@
+.so man3/hwlocality_components_core_funcs.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_refresh.3 b/doc/doxygen-doc/man/man3/hwloc_topology_refresh.3
new file mode 100644
index 00000000..d859a648
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_refresh.3
@@ -0,0 +1 @@
+.so man3/hwlocality_tinker.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_restrict.3 b/doc/doxygen-doc/man/man3/hwloc_topology_restrict.3
new file mode 100644
index 00000000..d859a648
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_restrict.3
@@ -0,0 +1 @@
+.so man3/hwlocality_tinker.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_set_all_types_filter.3 b/doc/doxygen-doc/man/man3/hwloc_topology_set_all_types_filter.3
new file mode 100644
index 00000000..e4dbe0b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_set_all_types_filter.3
@@ -0,0 +1 @@
+.so man3/hwlocality_configuration.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_set_cache_types_filter.3 b/doc/doxygen-doc/man/man3/hwloc_topology_set_cache_types_filter.3
new file mode 100644
index 00000000..e4dbe0b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_set_cache_types_filter.3
@@ -0,0 +1 @@
+.so man3/hwlocality_configuration.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_set_components.3 b/doc/doxygen-doc/man/man3/hwloc_topology_set_components.3
new file mode 100644
index 00000000..0390f8a8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_set_components.3
@@ -0,0 +1 @@
+.so man3/hwlocality_setsource.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_set_flags.3 b/doc/doxygen-doc/man/man3/hwloc_topology_set_flags.3
new file mode 100644
index 00000000..e4dbe0b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_set_flags.3
@@ -0,0 +1 @@
+.so man3/hwlocality_configuration.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_set_icache_types_filter.3 b/doc/doxygen-doc/man/man3/hwloc_topology_set_icache_types_filter.3
new file mode 100644
index 00000000..e4dbe0b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_set_icache_types_filter.3
@@ -0,0 +1 @@
+.so man3/hwlocality_configuration.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_set_io_types_filter.3 b/doc/doxygen-doc/man/man3/hwloc_topology_set_io_types_filter.3
new file mode 100644
index 00000000..e4dbe0b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_set_io_types_filter.3
@@ -0,0 +1 @@
+.so man3/hwlocality_configuration.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_set_pid.3 b/doc/doxygen-doc/man/man3/hwloc_topology_set_pid.3
new file mode 100644
index 00000000..0390f8a8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_set_pid.3
@@ -0,0 +1 @@
+.so man3/hwlocality_setsource.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_set_synthetic.3 b/doc/doxygen-doc/man/man3/hwloc_topology_set_synthetic.3
new file mode 100644
index 00000000..0390f8a8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_set_synthetic.3
@@ -0,0 +1 @@
+.so man3/hwlocality_setsource.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_set_type_filter.3 b/doc/doxygen-doc/man/man3/hwloc_topology_set_type_filter.3
new file mode 100644
index 00000000..e4dbe0b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_set_type_filter.3
@@ -0,0 +1 @@
+.so man3/hwlocality_configuration.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_set_userdata.3 b/doc/doxygen-doc/man/man3/hwloc_topology_set_userdata.3
new file mode 100644
index 00000000..e4dbe0b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_set_userdata.3
@@ -0,0 +1 @@
+.so man3/hwlocality_configuration.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_set_userdata_export_callback.3 b/doc/doxygen-doc/man/man3/hwloc_topology_set_userdata_export_callback.3
new file mode 100644
index 00000000..289c696f
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_set_userdata_export_callback.3
@@ -0,0 +1 @@
+.so man3/hwlocality_xmlexport.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_set_userdata_import_callback.3 b/doc/doxygen-doc/man/man3/hwloc_topology_set_userdata_import_callback.3
new file mode 100644
index 00000000..289c696f
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_set_userdata_import_callback.3
@@ -0,0 +1 @@
+.so man3/hwlocality_xmlexport.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_set_xml.3 b/doc/doxygen-doc/man/man3/hwloc_topology_set_xml.3
new file mode 100644
index 00000000..0390f8a8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_set_xml.3
@@ -0,0 +1 @@
+.so man3/hwlocality_setsource.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_set_xmlbuffer.3 b/doc/doxygen-doc/man/man3/hwloc_topology_set_xmlbuffer.3
new file mode 100644
index 00000000..0390f8a8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_set_xmlbuffer.3
@@ -0,0 +1 @@
+.so man3/hwlocality_setsource.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_support.3 b/doc/doxygen-doc/man/man3/hwloc_topology_support.3
new file mode 100644
index 00000000..92b3f97f
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_support.3
@@ -0,0 +1,45 @@
+.TH "hwloc_topology_support" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwloc_topology_support
+.SH SYNOPSIS
+.br
+.PP
+.PP
+\fC#include <hwloc\&.h>\fP
+.SS "Data Fields"
+
+.in +1c
+.ti -1c
+.RI "struct \fBhwloc_topology_discovery_support\fP * \fBdiscovery\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_topology_cpubind_support\fP * \fBcpubind\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_topology_membind_support\fP * \fBmembind\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_topology_misc_support\fP * \fBmisc\fP"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+Set of flags describing actual support for this topology\&. 
+
+This is retrieved with \fBhwloc_topology_get_support()\fP and will be valid until the topology object is destroyed\&. Note: the values are correct only after discovery\&. 
+.SH "Field Documentation"
+.PP 
+.SS "struct \fBhwloc_topology_cpubind_support\fP* hwloc_topology_support::cpubind"
+
+.SS "struct \fBhwloc_topology_discovery_support\fP* hwloc_topology_support::discovery"
+
+.SS "struct \fBhwloc_topology_membind_support\fP* hwloc_topology_support::membind"
+
+.SS "struct \fBhwloc_topology_misc_support\fP* hwloc_topology_support::misc"
+
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwloc_topology_t.3 b/doc/doxygen-doc/man/man3/hwloc_topology_t.3
new file mode 100644
index 00000000..87cc6e4d
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_topology_t.3
@@ -0,0 +1 @@
+.so man3/hwlocality_creation.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_type_filter_e.3 b/doc/doxygen-doc/man/man3/hwloc_type_filter_e.3
new file mode 100644
index 00000000..e4dbe0b4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_type_filter_e.3
@@ -0,0 +1 @@
+.so man3/hwlocality_configuration.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_type_sscanf.3 b/doc/doxygen-doc/man/man3/hwloc_type_sscanf.3
new file mode 100644
index 00000000..9cc50f3b
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_type_sscanf.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_strings.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_type_sscanf_as_depth.3 b/doc/doxygen-doc/man/man3/hwloc_type_sscanf_as_depth.3
new file mode 100644
index 00000000..9cc50f3b
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_type_sscanf_as_depth.3
@@ -0,0 +1 @@
+.so man3/hwlocality_object_strings.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_windows_get_nr_processor_groups.3 b/doc/doxygen-doc/man/man3/hwloc_windows_get_nr_processor_groups.3
new file mode 100644
index 00000000..0a4cc220
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_windows_get_nr_processor_groups.3
@@ -0,0 +1 @@
+.so man3/hwlocality_windows.3
diff --git a/doc/doxygen-doc/man/man3/hwloc_windows_get_processor_group_cpuset.3 b/doc/doxygen-doc/man/man3/hwloc_windows_get_processor_group_cpuset.3
new file mode 100644
index 00000000..0a4cc220
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwloc_windows_get_processor_group_cpuset.3
@@ -0,0 +1 @@
+.so man3/hwlocality_windows.3
diff --git a/doc/doxygen-doc/man/man3/hwlocality_advanced_io.3 b/doc/doxygen-doc/man/man3/hwlocality_advanced_io.3
new file mode 100644
index 00000000..6d9d66d2
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_advanced_io.3
@@ -0,0 +1,95 @@
+.TH "hwlocality_advanced_io" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_advanced_io \- Finding I/O objects
+.SH SYNOPSIS
+.br
+.PP
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_get_non_io_ancestor_obj\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP ioobj)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_get_next_pcidev\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP prev)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_get_pcidev_by_busid\fP (\fBhwloc_topology_t\fP topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_get_pcidev_by_busidstring\fP (\fBhwloc_topology_t\fP topology, const char *busid)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_get_next_osdev\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP prev)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_get_next_bridge\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP prev)"
+.br
+.ti -1c
+.RI "static int \fBhwloc_bridge_covers_pcibus\fP (\fBhwloc_obj_t\fP bridge, unsigned domain, unsigned bus)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+
+.SH "Function Documentation"
+.PP 
+.SS "static int hwloc_bridge_covers_pcibus (\fBhwloc_obj_t\fP bridge, unsigned domain, unsigned bus)\fC [inline]\fP, \fC [static]\fP"
+
+.SS "static \fBhwloc_obj_t\fP hwloc_get_next_bridge (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP prev)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the next bridge in the system\&. 
+.PP
+\fBReturns\fP
+.RS 4
+the first bridge if \fCprev\fP is \fCNULL\fP\&. 
+.RE
+.PP
+
+.SS "static \fBhwloc_obj_t\fP hwloc_get_next_osdev (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP prev)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the next OS device in the system\&. 
+.PP
+\fBReturns\fP
+.RS 4
+the first OS device if \fCprev\fP is \fCNULL\fP\&. 
+.RE
+.PP
+
+.SS "static \fBhwloc_obj_t\fP hwloc_get_next_pcidev (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP prev)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the next PCI device in the system\&. 
+.PP
+\fBReturns\fP
+.RS 4
+the first PCI device if \fCprev\fP is \fCNULL\fP\&. 
+.RE
+.PP
+
+.SS "static \fBhwloc_obj_t\fP hwloc_get_non_io_ancestor_obj (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP ioobj)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the first non-I/O ancestor object\&. Given the I/O object \fCioobj\fP, find the smallest non-I/O ancestor object\&. This object (normal or memory) may then be used for binding because it has non-NULL CPU and node sets and because its locality is the same as \fCioobj\fP\&.
+.PP
+\fBNote\fP
+.RS 4
+The resulting object is usually a normal object but it could also be a memory object (e\&.g\&. NUMA node) in future platforms if I/O objects ever get attached to memory instead of CPUs\&. 
+.RE
+.PP
+
+.SS "static \fBhwloc_obj_t\fP hwloc_get_pcidev_by_busid (\fBhwloc_topology_t\fP topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Find the PCI device object matching the PCI bus id given domain, bus device and function PCI bus id\&. 
+.SS "static \fBhwloc_obj_t\fP hwloc_get_pcidev_by_busidstring (\fBhwloc_topology_t\fP topology, const char * busid)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Find the PCI device object matching the PCI bus id given as a string xxxx:yy:zz\&.t or yy:zz\&.t\&. 
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_api_version.3 b/doc/doxygen-doc/man/man3/hwlocality_api_version.3
new file mode 100644
index 00000000..2da390cb
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_api_version.3
@@ -0,0 +1,56 @@
+.TH "hwlocality_api_version" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_api_version \- API version
+.SH SYNOPSIS
+.br
+.PP
+.SS "Macros"
+
+.in +1c
+.ti -1c
+.RI "#define \fBHWLOC_API_VERSION\fP   0x00020800"
+.br
+.ti -1c
+.RI "#define \fBHWLOC_COMPONENT_ABI\fP   7"
+.br
+.in -1c
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "unsigned \fBhwloc_get_api_version\fP (void)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+
+.SH "Macro Definition Documentation"
+.PP 
+.SS "#define HWLOC_API_VERSION   0x00020800"
+
+.PP
+Indicate at build time which hwloc API version is being used\&. This number is updated to (X<<16)+(Y<<8)+Z when a new release X\&.Y\&.Z actually modifies the API\&.
+.PP
+Users may check for available features at build time using this number (see \fBHow do I handle API changes?\fP)\&.
+.PP
+\fBNote\fP
+.RS 4
+This should not be confused with HWLOC_VERSION, the library version\&. Two stable releases of the same series usually have the same \fBHWLOC_API_VERSION\fP even if their HWLOC_VERSION are different\&. 
+.RE
+.PP
+
+.SS "#define HWLOC_COMPONENT_ABI   7"
+
+.PP
+Current component and plugin ABI version (see \fBhwloc/plugins\&.h\fP) 
+.SH "Function Documentation"
+.PP 
+.SS "unsigned hwloc_get_api_version (void)"
+
+.PP
+Indicate at runtime which hwloc API version was used at build time\&. Should be \fBHWLOC_API_VERSION\fP if running on the same version\&. 
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_bitmap.3 b/doc/doxygen-doc/man/man3/hwlocality_bitmap.3
new file mode 100644
index 00000000..8098d0db
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_bitmap.3
@@ -0,0 +1,672 @@
+.TH "hwlocality_bitmap" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_bitmap \- The bitmap API
+.SH SYNOPSIS
+.br
+.PP
+.SS "Macros"
+
+.in +1c
+.ti -1c
+.RI "#define \fBhwloc_bitmap_foreach_begin\fP(id,  bitmap)"
+.br
+.ti -1c
+.RI "#define \fBhwloc_bitmap_foreach_end\fP()"
+.br
+.in -1c
+.SS "Typedefs"
+
+.in +1c
+.ti -1c
+.RI "typedef struct hwloc_bitmap_s * \fBhwloc_bitmap_t\fP"
+.br
+.ti -1c
+.RI "typedef const struct hwloc_bitmap_s * \fBhwloc_const_bitmap_t\fP"
+.br
+.in -1c
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "\fBhwloc_bitmap_t\fP \fBhwloc_bitmap_alloc\fP (void)"
+.br
+.ti -1c
+.RI "\fBhwloc_bitmap_t\fP \fBhwloc_bitmap_alloc_full\fP (void)"
+.br
+.ti -1c
+.RI "void \fBhwloc_bitmap_free\fP (\fBhwloc_bitmap_t\fP bitmap)"
+.br
+.ti -1c
+.RI "\fBhwloc_bitmap_t\fP \fBhwloc_bitmap_dup\fP (\fBhwloc_const_bitmap_t\fP bitmap)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_copy\fP (\fBhwloc_bitmap_t\fP dst, \fBhwloc_const_bitmap_t\fP src)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_snprintf\fP (char *restrict buf, size_t buflen, \fBhwloc_const_bitmap_t\fP bitmap)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_asprintf\fP (char **strp, \fBhwloc_const_bitmap_t\fP bitmap)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_sscanf\fP (\fBhwloc_bitmap_t\fP bitmap, const char *restrict string)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_list_snprintf\fP (char *restrict buf, size_t buflen, \fBhwloc_const_bitmap_t\fP bitmap)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_list_asprintf\fP (char **strp, \fBhwloc_const_bitmap_t\fP bitmap)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_list_sscanf\fP (\fBhwloc_bitmap_t\fP bitmap, const char *restrict string)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_taskset_snprintf\fP (char *restrict buf, size_t buflen, \fBhwloc_const_bitmap_t\fP bitmap)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_taskset_asprintf\fP (char **strp, \fBhwloc_const_bitmap_t\fP bitmap)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_taskset_sscanf\fP (\fBhwloc_bitmap_t\fP bitmap, const char *restrict string)"
+.br
+.ti -1c
+.RI "void \fBhwloc_bitmap_zero\fP (\fBhwloc_bitmap_t\fP bitmap)"
+.br
+.ti -1c
+.RI "void \fBhwloc_bitmap_fill\fP (\fBhwloc_bitmap_t\fP bitmap)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_only\fP (\fBhwloc_bitmap_t\fP bitmap, unsigned id)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_allbut\fP (\fBhwloc_bitmap_t\fP bitmap, unsigned id)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_from_ulong\fP (\fBhwloc_bitmap_t\fP bitmap, unsigned long mask)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_from_ith_ulong\fP (\fBhwloc_bitmap_t\fP bitmap, unsigned i, unsigned long mask)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_from_ulongs\fP (\fBhwloc_bitmap_t\fP bitmap, unsigned nr, const unsigned long *masks)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_set\fP (\fBhwloc_bitmap_t\fP bitmap, unsigned id)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_set_range\fP (\fBhwloc_bitmap_t\fP bitmap, unsigned begin, int end)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_set_ith_ulong\fP (\fBhwloc_bitmap_t\fP bitmap, unsigned i, unsigned long mask)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_clr\fP (\fBhwloc_bitmap_t\fP bitmap, unsigned id)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_clr_range\fP (\fBhwloc_bitmap_t\fP bitmap, unsigned begin, int end)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_singlify\fP (\fBhwloc_bitmap_t\fP bitmap)"
+.br
+.ti -1c
+.RI "unsigned long \fBhwloc_bitmap_to_ulong\fP (\fBhwloc_const_bitmap_t\fP bitmap)"
+.br
+.ti -1c
+.RI "unsigned long \fBhwloc_bitmap_to_ith_ulong\fP (\fBhwloc_const_bitmap_t\fP bitmap, unsigned i)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_to_ulongs\fP (\fBhwloc_const_bitmap_t\fP bitmap, unsigned nr, unsigned long *masks)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_nr_ulongs\fP (\fBhwloc_const_bitmap_t\fP bitmap)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_isset\fP (\fBhwloc_const_bitmap_t\fP bitmap, unsigned id)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_iszero\fP (\fBhwloc_const_bitmap_t\fP bitmap)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_isfull\fP (\fBhwloc_const_bitmap_t\fP bitmap)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_first\fP (\fBhwloc_const_bitmap_t\fP bitmap)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_next\fP (\fBhwloc_const_bitmap_t\fP bitmap, int prev)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_last\fP (\fBhwloc_const_bitmap_t\fP bitmap)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_weight\fP (\fBhwloc_const_bitmap_t\fP bitmap)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_first_unset\fP (\fBhwloc_const_bitmap_t\fP bitmap)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_next_unset\fP (\fBhwloc_const_bitmap_t\fP bitmap, int prev)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_last_unset\fP (\fBhwloc_const_bitmap_t\fP bitmap)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_or\fP (\fBhwloc_bitmap_t\fP res, \fBhwloc_const_bitmap_t\fP bitmap1, \fBhwloc_const_bitmap_t\fP bitmap2)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_and\fP (\fBhwloc_bitmap_t\fP res, \fBhwloc_const_bitmap_t\fP bitmap1, \fBhwloc_const_bitmap_t\fP bitmap2)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_andnot\fP (\fBhwloc_bitmap_t\fP res, \fBhwloc_const_bitmap_t\fP bitmap1, \fBhwloc_const_bitmap_t\fP bitmap2)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_xor\fP (\fBhwloc_bitmap_t\fP res, \fBhwloc_const_bitmap_t\fP bitmap1, \fBhwloc_const_bitmap_t\fP bitmap2)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_not\fP (\fBhwloc_bitmap_t\fP res, \fBhwloc_const_bitmap_t\fP bitmap)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_intersects\fP (\fBhwloc_const_bitmap_t\fP bitmap1, \fBhwloc_const_bitmap_t\fP bitmap2)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_isincluded\fP (\fBhwloc_const_bitmap_t\fP sub_bitmap, \fBhwloc_const_bitmap_t\fP super_bitmap)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_isequal\fP (\fBhwloc_const_bitmap_t\fP bitmap1, \fBhwloc_const_bitmap_t\fP bitmap2)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_compare_first\fP (\fBhwloc_const_bitmap_t\fP bitmap1, \fBhwloc_const_bitmap_t\fP bitmap2)"
+.br
+.ti -1c
+.RI "int \fBhwloc_bitmap_compare\fP (\fBhwloc_const_bitmap_t\fP bitmap1, \fBhwloc_const_bitmap_t\fP bitmap2)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+The \fBhwloc_bitmap_t\fP type represents a set of integers (positive or null)\&. A bitmap may be of infinite size (all bits are set after some point)\&. A bitmap may even be full if all bits are set\&.
+.PP
+Bitmaps are used by hwloc for sets of OS processors (which may actually be hardware threads) as by \fBhwloc_cpuset_t\fP (a typedef for \fBhwloc_bitmap_t\fP), or sets of NUMA memory nodes as \fBhwloc_nodeset_t\fP (also a typedef for \fBhwloc_bitmap_t\fP)\&. Those are used for cpuset and nodeset fields in the \fBhwloc_obj\fP structure, see \fBObject Sets (hwloc_cpuset_t and hwloc_nodeset_t)\fP\&.
+.PP
+\fIBoth CPU and node sets are always indexed by OS physical number\&.\fP However users should usually not build CPU and node sets manually (e\&.g\&. with \fBhwloc_bitmap_set()\fP)\&. One should rather use existing object sets and combine them with \fBhwloc_bitmap_or()\fP, etc\&. For instance, binding the current thread on a pair of cores may be performed with: 
+.PP
+.nf
+hwloc_obj_t core1 = \&.\&.\&. , core2 = \&.\&.\&. ;
+hwloc_bitmap_t set = hwloc_bitmap_alloc();
+hwloc_bitmap_or(set, core1->cpuset, core2->cpuset);
+hwloc_set_cpubind(topology, set, HWLOC_CPUBIND_THREAD);
+hwloc_bitmap_free(set);
+
+.fi
+.PP
+.PP
+\fBNote\fP
+.RS 4
+Most functions below return an int that may be negative in case of error\&. The usual error case would be an internal failure to realloc/extend the storage of the bitmap (\fCerrno\fP would be set to \fCENOMEM\fP)\&.
+.PP
+Several examples of using the bitmap API are available under the doc/examples/ directory in the source tree\&. Regression tests such as tests/hwloc/hwloc_bitmap*\&.c also make intensive use of this API\&. 
+.RE
+.PP
+
+.SH "Macro Definition Documentation"
+.PP 
+.SS "#define hwloc_bitmap_foreach_begin(id, bitmap)"
+
+.PP
+Loop macro iterating on bitmap \fCbitmap\fP\&. The loop must start with \fBhwloc_bitmap_foreach_begin()\fP and end with \fBhwloc_bitmap_foreach_end()\fP followed by a terminating ';'\&.
+.PP
+\fCid\fP is the loop variable; it should be an unsigned int\&. The first iteration will set \fCid\fP to the lowest index in the bitmap\&. Successive iterations will iterate through, in order, all remaining indexes set in the bitmap\&. To be specific: each iteration will return a value for \fCid\fP such that hwloc_bitmap_isset(bitmap, id) is true\&.
+.PP
+The assert prevents the loop from being infinite if the bitmap is infinitely set\&. 
+.SS "#define hwloc_bitmap_foreach_end()"
+
+.PP
+End of loop macro iterating on a bitmap\&. Needs a terminating ';'\&.
+.PP
+\fBSee also\fP
+.RS 4
+\fBhwloc_bitmap_foreach_begin()\fP 
+.RE
+.PP
+
+.SH "Typedef Documentation"
+.PP 
+.SS "typedef struct hwloc_bitmap_s* \fBhwloc_bitmap_t\fP"
+
+.PP
+Set of bits represented as an opaque pointer to an internal bitmap\&. 
+.SS "typedef const struct hwloc_bitmap_s* \fBhwloc_const_bitmap_t\fP"
+
+.PP
+a non-modifiable \fBhwloc_bitmap_t\fP 
+.SH "Function Documentation"
+.PP 
+.SS "int hwloc_bitmap_allbut (\fBhwloc_bitmap_t\fP bitmap, unsigned id)"
+
+.PP
+Fill the bitmap \fCand\fP clear the index \fCid\fP\&. 
+.SS "\fBhwloc_bitmap_t\fP hwloc_bitmap_alloc (void)"
+
+.PP
+Allocate a new empty bitmap\&. 
+.PP
+\fBReturns\fP
+.RS 4
+A valid bitmap or \fCNULL\fP\&.
+.RE
+.PP
+The bitmap should be freed by a corresponding call to \fBhwloc_bitmap_free()\fP\&. 
+.SS "\fBhwloc_bitmap_t\fP hwloc_bitmap_alloc_full (void)"
+
+.PP
+Allocate a new full bitmap\&. 
+.SS "int hwloc_bitmap_and (\fBhwloc_bitmap_t\fP res, \fBhwloc_const_bitmap_t\fP bitmap1, \fBhwloc_const_bitmap_t\fP bitmap2)"
+
+.PP
+And bitmaps \fCbitmap1\fP and \fCbitmap2\fP and store the result in bitmap \fCres\fP\&. \fCres\fP can be the same as \fCbitmap1\fP or \fCbitmap2\fP 
+.SS "int hwloc_bitmap_andnot (\fBhwloc_bitmap_t\fP res, \fBhwloc_const_bitmap_t\fP bitmap1, \fBhwloc_const_bitmap_t\fP bitmap2)"
+
+.PP
+And bitmap \fCbitmap1\fP and the negation of \fCbitmap2\fP and store the result in bitmap \fCres\fP\&. \fCres\fP can be the same as \fCbitmap1\fP or \fCbitmap2\fP 
+.SS "int hwloc_bitmap_asprintf (char ** strp, \fBhwloc_const_bitmap_t\fP bitmap)"
+
+.PP
+Stringify a bitmap into a newly allocated string\&. 
+.PP
+\fBReturns\fP
+.RS 4
+-1 on error\&. 
+.RE
+.PP
+
+.SS "int hwloc_bitmap_clr (\fBhwloc_bitmap_t\fP bitmap, unsigned id)"
+
+.PP
+Remove index \fCid\fP from bitmap \fCbitmap\fP\&. 
+.SS "int hwloc_bitmap_clr_range (\fBhwloc_bitmap_t\fP bitmap, unsigned begin, int end)"
+
+.PP
+Remove indexes from \fCbegin\fP to \fCend\fP in bitmap \fCbitmap\fP\&. If \fCend\fP is \fC-1\fP, the range is infinite\&. 
+.SS "int hwloc_bitmap_compare (\fBhwloc_const_bitmap_t\fP bitmap1, \fBhwloc_const_bitmap_t\fP bitmap2)"
+
+.PP
+Compare bitmaps \fCbitmap1\fP and \fCbitmap2\fP in lexicographic order\&. Lexicographic comparison of bitmaps, starting for their highest indexes\&. Compare last indexes first, then second, etc\&. The empty bitmap is considered lower than anything\&.
+.PP
+\fBReturns\fP
+.RS 4
+-1 if \fCbitmap1\fP is considered smaller than \fCbitmap2\fP\&. 
+.PP
+1 if \fCbitmap1\fP is considered larger than \fCbitmap2\fP\&. 
+.PP
+0 if bitmaps are equal (contrary to \fBhwloc_bitmap_compare_first()\fP)\&.
+.RE
+.PP
+For instance comparing binary bitmaps 0011 and 0110 returns -1 (hence 0011 is considered smaller than 0110)\&. Comparing 00101 and 01010 returns -1 too\&.
+.PP
+\fBNote\fP
+.RS 4
+This is different from the non-existing hwloc_bitmap_compare_last() which would only compare the highest index of each bitmap\&. 
+.RE
+.PP
+
+.SS "int hwloc_bitmap_compare_first (\fBhwloc_const_bitmap_t\fP bitmap1, \fBhwloc_const_bitmap_t\fP bitmap2)"
+
+.PP
+Compare bitmaps \fCbitmap1\fP and \fCbitmap2\fP using their lowest index\&. A bitmap is considered smaller if its least significant bit is smaller\&. The empty bitmap is considered higher than anything (because its least significant bit does not exist)\&.
+.PP
+\fBReturns\fP
+.RS 4
+-1 if \fCbitmap1\fP is considered smaller than \fCbitmap2\fP\&. 
+.PP
+1 if \fCbitmap1\fP is considered larger than \fCbitmap2\fP\&.
+.RE
+.PP
+For instance comparing binary bitmaps 0011 and 0110 returns -1 (hence 0011 is considered smaller than 0110) because least significant bit of 0011 (0001) is smaller than least significant bit of 0110 (0010)\&. Comparing 01001 and 00110 would also return -1 for the same reason\&.
+.PP
+\fBReturns\fP
+.RS 4
+0 if bitmaps are considered equal, even if they are not strictly equal\&. They just need to have the same least significant bit\&. For instance, comparing binary bitmaps 0010 and 0110 returns 0 because they have the same least significant bit\&. 
+.RE
+.PP
+
+.SS "int hwloc_bitmap_copy (\fBhwloc_bitmap_t\fP dst, \fBhwloc_const_bitmap_t\fP src)"
+
+.PP
+Copy the contents of bitmap \fCsrc\fP into the already allocated bitmap \fCdst\fP\&. 
+.SS "\fBhwloc_bitmap_t\fP hwloc_bitmap_dup (\fBhwloc_const_bitmap_t\fP bitmap)"
+
+.PP
+Duplicate bitmap \fCbitmap\fP by allocating a new bitmap and copying \fCbitmap\fP contents\&. If \fCbitmap\fP is \fCNULL\fP, \fCNULL\fP is returned\&. 
+.SS "void hwloc_bitmap_fill (\fBhwloc_bitmap_t\fP bitmap)"
+
+.PP
+Fill bitmap \fCbitmap\fP with all possible indexes (even if those objects don't exist or are otherwise unavailable) 
+.SS "int hwloc_bitmap_first (\fBhwloc_const_bitmap_t\fP bitmap)"
+
+.PP
+Compute the first index (least significant bit) in bitmap \fCbitmap\fP\&. 
+.PP
+\fBReturns\fP
+.RS 4
+-1 if no index is set in \fCbitmap\fP\&. 
+.RE
+.PP
+
+.SS "int hwloc_bitmap_first_unset (\fBhwloc_const_bitmap_t\fP bitmap)"
+
+.PP
+Compute the first unset index (least significant bit) in bitmap \fCbitmap\fP\&. 
+.PP
+\fBReturns\fP
+.RS 4
+-1 if no index is unset in \fCbitmap\fP\&. 
+.RE
+.PP
+
+.SS "void hwloc_bitmap_free (\fBhwloc_bitmap_t\fP bitmap)"
+
+.PP
+Free bitmap \fCbitmap\fP\&. If \fCbitmap\fP is \fCNULL\fP, no operation is performed\&. 
+.SS "int hwloc_bitmap_from_ith_ulong (\fBhwloc_bitmap_t\fP bitmap, unsigned i, unsigned long mask)"
+
+.PP
+Setup bitmap \fCbitmap\fP from unsigned long \fCmask\fP used as \fCi\fP -th subset\&. 
+.SS "int hwloc_bitmap_from_ulong (\fBhwloc_bitmap_t\fP bitmap, unsigned long mask)"
+
+.PP
+Setup bitmap \fCbitmap\fP from unsigned long \fCmask\fP\&. 
+.SS "int hwloc_bitmap_from_ulongs (\fBhwloc_bitmap_t\fP bitmap, unsigned nr, const unsigned long * masks)"
+
+.PP
+Setup bitmap \fCbitmap\fP from unsigned longs \fCmasks\fP used as first \fCnr\fP subsets\&. 
+.SS "int hwloc_bitmap_intersects (\fBhwloc_const_bitmap_t\fP bitmap1, \fBhwloc_const_bitmap_t\fP bitmap2)"
+
+.PP
+Test whether bitmaps \fCbitmap1\fP and \fCbitmap2\fP intersects\&. 
+.PP
+\fBReturns\fP
+.RS 4
+1 if bitmaps intersect, 0 otherwise\&. 
+.RE
+.PP
+
+.SS "int hwloc_bitmap_isequal (\fBhwloc_const_bitmap_t\fP bitmap1, \fBhwloc_const_bitmap_t\fP bitmap2)"
+
+.PP
+Test whether bitmap \fCbitmap1\fP is equal to bitmap \fCbitmap2\fP\&. 
+.PP
+\fBReturns\fP
+.RS 4
+1 if bitmaps are equal, 0 otherwise\&. 
+.RE
+.PP
+
+.SS "int hwloc_bitmap_isfull (\fBhwloc_const_bitmap_t\fP bitmap)"
+
+.PP
+Test whether bitmap \fCbitmap\fP is completely full\&. 
+.PP
+\fBReturns\fP
+.RS 4
+1 if bitmap is full, 0 otherwise\&.
+.RE
+.PP
+\fBNote\fP
+.RS 4
+A full bitmap is always infinitely set\&. 
+.RE
+.PP
+
+.SS "int hwloc_bitmap_isincluded (\fBhwloc_const_bitmap_t\fP sub_bitmap, \fBhwloc_const_bitmap_t\fP super_bitmap)"
+
+.PP
+Test whether bitmap \fCsub_bitmap\fP is part of bitmap \fCsuper_bitmap\fP\&. 
+.PP
+\fBReturns\fP
+.RS 4
+1 if \fCsub_bitmap\fP is included in \fCsuper_bitmap\fP, 0 otherwise\&.
+.RE
+.PP
+\fBNote\fP
+.RS 4
+The empty bitmap is considered included in any other bitmap\&. 
+.RE
+.PP
+
+.SS "int hwloc_bitmap_isset (\fBhwloc_const_bitmap_t\fP bitmap, unsigned id)"
+
+.PP
+Test whether index \fCid\fP is part of bitmap \fCbitmap\fP\&. 
+.PP
+\fBReturns\fP
+.RS 4
+1 if the bit at index \fCid\fP is set in bitmap \fCbitmap\fP, 0 otherwise\&. 
+.RE
+.PP
+
+.SS "int hwloc_bitmap_iszero (\fBhwloc_const_bitmap_t\fP bitmap)"
+
+.PP
+Test whether bitmap \fCbitmap\fP is empty\&. 
+.PP
+\fBReturns\fP
+.RS 4
+1 if bitmap is empty, 0 otherwise\&. 
+.RE
+.PP
+
+.SS "int hwloc_bitmap_last (\fBhwloc_const_bitmap_t\fP bitmap)"
+
+.PP
+Compute the last index (most significant bit) in bitmap \fCbitmap\fP\&. 
+.PP
+\fBReturns\fP
+.RS 4
+-1 if no index is set in \fCbitmap\fP, or if \fCbitmap\fP is infinitely set\&. 
+.RE
+.PP
+
+.SS "int hwloc_bitmap_last_unset (\fBhwloc_const_bitmap_t\fP bitmap)"
+
+.PP
+Compute the last unset index (most significant bit) in bitmap \fCbitmap\fP\&. 
+.PP
+\fBReturns\fP
+.RS 4
+-1 if no index is unset in \fCbitmap\fP, or if \fCbitmap\fP is infinitely set\&. 
+.RE
+.PP
+
+.SS "int hwloc_bitmap_list_asprintf (char ** strp, \fBhwloc_const_bitmap_t\fP bitmap)"
+
+.PP
+Stringify a bitmap into a newly allocated list string\&. 
+.PP
+\fBReturns\fP
+.RS 4
+-1 on error\&. 
+.RE
+.PP
+
+.SS "int hwloc_bitmap_list_snprintf (char *restrict buf, size_t buflen, \fBhwloc_const_bitmap_t\fP bitmap)"
+
+.PP
+Stringify a bitmap in the list format\&. Lists are comma-separated indexes or ranges\&. Ranges are dash separated indexes\&. The last range may not have an ending indexes if the bitmap is infinitely set\&.
+.PP
+Up to \fCbuflen\fP characters may be written in buffer \fCbuf\fP\&.
+.PP
+If \fCbuflen\fP is 0, \fCbuf\fP may safely be \fCNULL\fP\&.
+.PP
+\fBReturns\fP
+.RS 4
+the number of characters that were actually written if not truncating, or that would have been written (not including the ending \\0)\&. 
+.RE
+.PP
+
+.SS "int hwloc_bitmap_list_sscanf (\fBhwloc_bitmap_t\fP bitmap, const char *restrict string)"
+
+.PP
+Parse a list string and stores it in bitmap \fCbitmap\fP\&. 
+.SS "int hwloc_bitmap_next (\fBhwloc_const_bitmap_t\fP bitmap, int prev)"
+
+.PP
+Compute the next index in bitmap \fCbitmap\fP which is after index \fCprev\fP\&. If \fCprev\fP is -1, the first index is returned\&.
+.PP
+\fBReturns\fP
+.RS 4
+-1 if no index with higher index is set in \fCbitmap\fP\&. 
+.RE
+.PP
+
+.SS "int hwloc_bitmap_next_unset (\fBhwloc_const_bitmap_t\fP bitmap, int prev)"
+
+.PP
+Compute the next unset index in bitmap \fCbitmap\fP which is after index \fCprev\fP\&. If \fCprev\fP is -1, the first unset index is returned\&.
+.PP
+\fBReturns\fP
+.RS 4
+-1 if no index with higher index is unset in \fCbitmap\fP\&. 
+.RE
+.PP
+
+.SS "int hwloc_bitmap_not (\fBhwloc_bitmap_t\fP res, \fBhwloc_const_bitmap_t\fP bitmap)"
+
+.PP
+Negate bitmap \fCbitmap\fP and store the result in bitmap \fCres\fP\&. \fCres\fP can be the same as \fCbitmap\fP 
+.SS "int hwloc_bitmap_nr_ulongs (\fBhwloc_const_bitmap_t\fP bitmap)"
+
+.PP
+Return the number of unsigned longs required for storing bitmap \fCbitmap\fP entirely\&. This is the number of contiguous unsigned longs from the very first bit of the bitmap (even if unset) up to the last set bit\&. This is useful for knowing the \fCnr\fP parameter to pass to \fBhwloc_bitmap_to_ulongs()\fP (or which calls to \fBhwloc_bitmap_to_ith_ulong()\fP are needed) to entirely convert a bitmap into multiple unsigned longs\&.
+.PP
+When called on the output of \fBhwloc_topology_get_topology_cpuset()\fP, the returned number is large enough for all cpusets of the topology\&.
+.PP
+\fBReturns\fP
+.RS 4
+-1 if \fCbitmap\fP is infinite\&. 
+.RE
+.PP
+
+.SS "int hwloc_bitmap_only (\fBhwloc_bitmap_t\fP bitmap, unsigned id)"
+
+.PP
+Empty the bitmap \fCbitmap\fP and add bit \fCid\fP\&. 
+.SS "int hwloc_bitmap_or (\fBhwloc_bitmap_t\fP res, \fBhwloc_const_bitmap_t\fP bitmap1, \fBhwloc_const_bitmap_t\fP bitmap2)"
+
+.PP
+Or bitmaps \fCbitmap1\fP and \fCbitmap2\fP and store the result in bitmap \fCres\fP\&. \fCres\fP can be the same as \fCbitmap1\fP or \fCbitmap2\fP 
+.SS "int hwloc_bitmap_set (\fBhwloc_bitmap_t\fP bitmap, unsigned id)"
+
+.PP
+Add index \fCid\fP in bitmap \fCbitmap\fP\&. 
+.SS "int hwloc_bitmap_set_ith_ulong (\fBhwloc_bitmap_t\fP bitmap, unsigned i, unsigned long mask)"
+
+.PP
+Replace \fCi\fP -th subset of bitmap \fCbitmap\fP with unsigned long \fCmask\fP\&. 
+.SS "int hwloc_bitmap_set_range (\fBhwloc_bitmap_t\fP bitmap, unsigned begin, int end)"
+
+.PP
+Add indexes from \fCbegin\fP to \fCend\fP in bitmap \fCbitmap\fP\&. If \fCend\fP is \fC-1\fP, the range is infinite\&. 
+.SS "int hwloc_bitmap_singlify (\fBhwloc_bitmap_t\fP bitmap)"
+
+.PP
+Keep a single index among those set in bitmap \fCbitmap\fP\&. May be useful before binding so that the process does not have a chance of migrating between multiple processors in the original mask\&. Instead of running the task on any PU inside the given CPU set, the operating system scheduler will be forced to run it on a single of these PUs\&. It avoids a migration overhead and cache-line ping-pongs between PUs\&.
+.PP
+\fBNote\fP
+.RS 4
+This function is NOT meant to distribute multiple processes within a single CPU set\&. It always return the same single bit when called multiple times on the same input set\&. \fBhwloc_distrib()\fP may be used for generating CPU sets to distribute multiple tasks below a single multi-PU object\&.
+.PP
+This function cannot be applied to an object set directly\&. It should be applied to a copy (which may be obtained with \fBhwloc_bitmap_dup()\fP)\&. 
+.RE
+.PP
+
+.SS "int hwloc_bitmap_snprintf (char *restrict buf, size_t buflen, \fBhwloc_const_bitmap_t\fP bitmap)"
+
+.PP
+Stringify a bitmap\&. Up to \fCbuflen\fP characters may be written in buffer \fCbuf\fP\&.
+.PP
+If \fCbuflen\fP is 0, \fCbuf\fP may safely be \fCNULL\fP\&.
+.PP
+\fBReturns\fP
+.RS 4
+the number of characters that were actually written if not truncating, or that would have been written (not including the ending \\0)\&. 
+.RE
+.PP
+
+.SS "int hwloc_bitmap_sscanf (\fBhwloc_bitmap_t\fP bitmap, const char *restrict string)"
+
+.PP
+Parse a bitmap string and stores it in bitmap \fCbitmap\fP\&. 
+.SS "int hwloc_bitmap_taskset_asprintf (char ** strp, \fBhwloc_const_bitmap_t\fP bitmap)"
+
+.PP
+Stringify a bitmap into a newly allocated taskset-specific string\&. 
+.PP
+\fBReturns\fP
+.RS 4
+-1 on error\&. 
+.RE
+.PP
+
+.SS "int hwloc_bitmap_taskset_snprintf (char *restrict buf, size_t buflen, \fBhwloc_const_bitmap_t\fP bitmap)"
+
+.PP
+Stringify a bitmap in the taskset-specific format\&. The taskset command manipulates bitmap strings that contain a single (possible very long) hexadecimal number starting with 0x\&.
+.PP
+Up to \fCbuflen\fP characters may be written in buffer \fCbuf\fP\&.
+.PP
+If \fCbuflen\fP is 0, \fCbuf\fP may safely be \fCNULL\fP\&.
+.PP
+\fBReturns\fP
+.RS 4
+the number of characters that were actually written if not truncating, or that would have been written (not including the ending \\0)\&. 
+.RE
+.PP
+
+.SS "int hwloc_bitmap_taskset_sscanf (\fBhwloc_bitmap_t\fP bitmap, const char *restrict string)"
+
+.PP
+Parse a taskset-specific bitmap string and stores it in bitmap \fCbitmap\fP\&. 
+.SS "unsigned long hwloc_bitmap_to_ith_ulong (\fBhwloc_const_bitmap_t\fP bitmap, unsigned i)"
+
+.PP
+Convert the \fCi\fP -th subset of bitmap \fCbitmap\fP into unsigned long mask\&. 
+.SS "unsigned long hwloc_bitmap_to_ulong (\fBhwloc_const_bitmap_t\fP bitmap)"
+
+.PP
+Convert the beginning part of bitmap \fCbitmap\fP into unsigned long \fCmask\fP\&. 
+.SS "int hwloc_bitmap_to_ulongs (\fBhwloc_const_bitmap_t\fP bitmap, unsigned nr, unsigned long * masks)"
+
+.PP
+Convert the first \fCnr\fP subsets of bitmap \fCbitmap\fP into the array of \fCnr\fP unsigned long \fCmasks\fP\&. \fCnr\fP may be determined earlier with \fBhwloc_bitmap_nr_ulongs()\fP\&.
+.PP
+\fBReturns\fP
+.RS 4
+0 
+.RE
+.PP
+
+.SS "int hwloc_bitmap_weight (\fBhwloc_const_bitmap_t\fP bitmap)"
+
+.PP
+Compute the 'weight' of bitmap \fCbitmap\fP (i\&.e\&., number of indexes that are in the bitmap)\&. 
+.PP
+\fBReturns\fP
+.RS 4
+the number of indexes that are in the bitmap\&.
+.PP
+-1 if \fCbitmap\fP is infinitely set\&. 
+.RE
+.PP
+
+.SS "int hwloc_bitmap_xor (\fBhwloc_bitmap_t\fP res, \fBhwloc_const_bitmap_t\fP bitmap1, \fBhwloc_const_bitmap_t\fP bitmap2)"
+
+.PP
+Xor bitmaps \fCbitmap1\fP and \fCbitmap2\fP and store the result in bitmap \fCres\fP\&. \fCres\fP can be the same as \fCbitmap1\fP or \fCbitmap2\fP 
+.SS "void hwloc_bitmap_zero (\fBhwloc_bitmap_t\fP bitmap)"
+
+.PP
+Empty the bitmap \fCbitmap\fP\&. 
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_components_core_funcs.3 b/doc/doxygen-doc/man/man3/hwlocality_components_core_funcs.3
new file mode 100644
index 00000000..ad04a118
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_components_core_funcs.3
@@ -0,0 +1,147 @@
+.TH "hwlocality_components_core_funcs" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_components_core_funcs \- Components and Plugins: Core functions to be used by components
+.SH SYNOPSIS
+.br
+.PP
+.SS "Macros"
+
+.in +1c
+.ti -1c
+.RI "#define \fBHWLOC_SHOW_CRITICAL_ERRORS\fP()   (\fBhwloc_hide_errors\fP() < 2)"
+.br
+.ti -1c
+.RI "#define \fBHWLOC_SHOW_ALL_ERRORS\fP()   (\fBhwloc_hide_errors\fP() == 0)"
+.br
+.in -1c
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "int \fBhwloc_hide_errors\fP (void)"
+.br
+.ti -1c
+.RI "\fBhwloc_obj_t\fP \fBhwloc__insert_object_by_cpuset\fP (struct hwloc_topology *topology, \fBhwloc_obj_t\fP root, \fBhwloc_obj_t\fP obj, const char *reason)"
+.br
+.ti -1c
+.RI "void \fBhwloc_insert_object_by_parent\fP (struct hwloc_topology *topology, \fBhwloc_obj_t\fP parent, \fBhwloc_obj_t\fP obj)"
+.br
+.ti -1c
+.RI "\fBhwloc_obj_t\fP \fBhwloc_alloc_setup_object\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type, unsigned os_index)"
+.br
+.ti -1c
+.RI "int \fBhwloc_obj_add_children_sets\fP (\fBhwloc_obj_t\fP obj)"
+.br
+.ti -1c
+.RI "int \fBhwloc_topology_reconnect\fP (\fBhwloc_topology_t\fP topology, unsigned long flags)"
+.br
+.ti -1c
+.RI "static int \fBhwloc_plugin_check_namespace\fP (const char *pluginname, const char *symbol)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+
+.PP
+\fBNote\fP
+.RS 4
+These structures and functions may change when \fBHWLOC_COMPONENT_ABI\fP is modified\&. 
+.RE
+.PP
+
+.SH "Macro Definition Documentation"
+.PP 
+.SS "#define HWLOC_SHOW_ALL_ERRORS()   (\fBhwloc_hide_errors\fP() == 0)"
+
+.SS "#define HWLOC_SHOW_CRITICAL_ERRORS()   (\fBhwloc_hide_errors\fP() < 2)"
+
+.SH "Function Documentation"
+.PP 
+.SS "\fBhwloc_obj_t\fP hwloc__insert_object_by_cpuset (struct hwloc_topology * topology, \fBhwloc_obj_t\fP root, \fBhwloc_obj_t\fP obj, const char * reason)"
+
+.PP
+Add an object to the topology\&. Insert new object \fCobj\fP in the topology starting under existing object \fCroot\fP (if \fCNULL\fP, the topology root object is used)\&.
+.PP
+It is sorted along the tree of other objects according to the inclusion of cpusets, to eventually be added as a child of the smallest object including this object\&.
+.PP
+If the cpuset is empty, the type of the object (and maybe some attributes) must be enough to find where to insert the object\&. This is especially true for NUMA nodes with memory and no CPUs\&.
+.PP
+The given object should not have children\&.
+.PP
+This shall only be called before levels are built\&.
+.PP
+The caller should check whether the object type is filtered-out before calling this function\&.
+.PP
+The topology cpuset/nodesets will be enlarged to include the object sets\&.
+.PP
+\fCreason\fP is a unique string identifying where and why this insertion call was performed (it will be displayed in case of internal insertion error)\&.
+.PP
+Returns the object on success\&. Returns NULL and frees obj on error\&. Returns another object and frees obj if it was merged with an identical pre-existing object\&. 
+.SS "\fBhwloc_obj_t\fP hwloc_alloc_setup_object (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type, unsigned os_index)"
+
+.PP
+Allocate and initialize an object of the given type and physical index\&. If \fCos_index\fP is unknown or irrelevant, use \fCHWLOC_UNKNOWN_INDEX\fP\&. 
+.SS "int hwloc_hide_errors (void)"
+
+.PP
+Check whether error messages are hidden\&. Callers should print critical error messages (e\&.g\&. invalid hw topo info, invalid config) only if this function returns strictly less than 2\&.
+.PP
+Callers should print non-critical error messages (e\&.g\&. failure to initialize CUDA) if this function returns 0\&.
+.PP
+This function return 1 by default (show critical only), 0 in lstopo (show all), or anything set in HWLOC_HIDE_ERRORS in the environment\&.
+.PP
+Use macros \fBHWLOC_SHOW_CRITICAL_ERRORS()\fP and \fBHWLOC_SHOW_ALL_ERRORS()\fP for clarity\&. 
+.SS "void hwloc_insert_object_by_parent (struct hwloc_topology * topology, \fBhwloc_obj_t\fP parent, \fBhwloc_obj_t\fP obj)"
+
+.PP
+Insert an object somewhere in the topology\&. It is added as the last child of the given parent\&. The cpuset is completely ignored, so strange objects such as I/O devices should preferably be inserted with this\&.
+.PP
+When used for 'normal' children with cpusets (when importing from XML when duplicating a topology), the caller should make sure that:
+.IP "\(bu" 2
+children are inserted in order,
+.IP "\(bu" 2
+children cpusets do not intersect\&.
+.PP
+.PP
+The given object may have normal, I/O or Misc children, as long as they are in order as well\&. These children must have valid parent and next_sibling pointers\&.
+.PP
+The caller should check whether the object type is filtered-out before calling this function\&. 
+.SS "int hwloc_obj_add_children_sets (\fBhwloc_obj_t\fP obj)"
+
+.PP
+Setup object cpusets/nodesets by OR'ing its children\&. Used when adding an object late in the topology\&. Will update the new object by OR'ing all its new children sets\&.
+.PP
+Used when PCI backend adds a hostbridge parent, when distances add a new Group, etc\&. 
+.SS "static int hwloc_plugin_check_namespace (const char * pluginname, const char * symbol)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Make sure that plugins can lookup core symbols\&. This is a sanity check to avoid lazy-lookup failures when libhwloc is loaded within a plugin, and later tries to load its own plugins\&. This may fail (and abort the program) if libhwloc symbols are in a private namespace\&.
+.PP
+\fBReturns\fP
+.RS 4
+0 on success\&. 
+.PP
+-1 if the plugin cannot be successfully loaded\&. The caller plugin init() callback should return a negative error code as well\&.
+.RE
+.PP
+Plugins should call this function in their init() callback to avoid later crashes if lazy symbol resolution is used by the upper layer that loaded hwloc (e\&.g\&. OpenCL implementations using dlopen with RTLD_LAZY)\&.
+.PP
+\fBNote\fP
+.RS 4
+The build system must define HWLOC_INSIDE_PLUGIN if and only if building the caller as a plugin\&.
+.PP
+This function should remain inline so plugins can call it even when they cannot find libhwloc symbols\&. 
+.RE
+.PP
+
+.SS "int hwloc_topology_reconnect (\fBhwloc_topology_t\fP topology, unsigned long flags)"
+
+.PP
+Request a reconnection of children and levels in the topology\&. May be used by backends during discovery if they need arrays or lists of object within levels or children to be fully connected\&.
+.PP
+\fCflags\fP is currently unused, must 0\&. 
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_components_filtering.3 b/doc/doxygen-doc/man/man3/hwlocality_components_filtering.3
new file mode 100644
index 00000000..c63226bc
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_components_filtering.3
@@ -0,0 +1,83 @@
+.TH "hwlocality_components_filtering" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_components_filtering \- Components and Plugins: Filtering objects
+.SH SYNOPSIS
+.br
+.PP
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "static int \fBhwloc_filter_check_pcidev_subtype_important\fP (unsigned classid)"
+.br
+.ti -1c
+.RI "static int \fBhwloc_filter_check_osdev_subtype_important\fP (\fBhwloc_obj_osdev_type_t\fP subtype)"
+.br
+.ti -1c
+.RI "static int \fBhwloc_filter_check_keep_object_type\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type)"
+.br
+.ti -1c
+.RI "static int \fBhwloc_filter_check_keep_object\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP obj)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+
+.PP
+\fBNote\fP
+.RS 4
+These structures and functions may change when \fBHWLOC_COMPONENT_ABI\fP is modified\&. 
+.RE
+.PP
+
+.SH "Function Documentation"
+.PP 
+.SS "static int hwloc_filter_check_keep_object (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP obj)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Check whether the given object should be filtered-out\&. 
+.PP
+\fBReturns\fP
+.RS 4
+1 if the object type should be kept, 0 otherwise\&. 
+.RE
+.PP
+
+.SS "static int hwloc_filter_check_keep_object_type (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Check whether a non-I/O object type should be filtered-out\&. Cannot be used for I/O objects\&.
+.PP
+\fBReturns\fP
+.RS 4
+1 if the object type should be kept, 0 otherwise\&. 
+.RE
+.PP
+
+.SS "static int hwloc_filter_check_osdev_subtype_important (\fBhwloc_obj_osdev_type_t\fP subtype)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Check whether the given OS device subtype is important\&. 
+.PP
+\fBReturns\fP
+.RS 4
+1 if important, 0 otherwise\&. 
+.RE
+.PP
+
+.SS "static int hwloc_filter_check_pcidev_subtype_important (unsigned classid)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Check whether the given PCI device classid is important\&. 
+.PP
+\fBReturns\fP
+.RS 4
+1 if important, 0 otherwise\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_components_pcidisc.3 b/doc/doxygen-doc/man/man3/hwlocality_components_pcidisc.3
new file mode 100644
index 00000000..090967b6
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_components_pcidisc.3
@@ -0,0 +1,71 @@
+.TH "hwlocality_components_pcidisc" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_components_pcidisc \- Components and Plugins: helpers for PCI discovery
+.SH SYNOPSIS
+.br
+.PP
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "unsigned \fBhwloc_pcidisc_find_cap\fP (const unsigned char *config, unsigned cap)"
+.br
+.ti -1c
+.RI "int \fBhwloc_pcidisc_find_linkspeed\fP (const unsigned char *config, unsigned offset, float *linkspeed)"
+.br
+.ti -1c
+.RI "\fBhwloc_obj_type_t\fP \fBhwloc_pcidisc_check_bridge_type\fP (unsigned device_class, const unsigned char *config)"
+.br
+.ti -1c
+.RI "int \fBhwloc_pcidisc_find_bridge_buses\fP (unsigned domain, unsigned bus, unsigned dev, unsigned func, unsigned *secondary_busp, unsigned *subordinate_busp, const unsigned char *config)"
+.br
+.ti -1c
+.RI "void \fBhwloc_pcidisc_tree_insert_by_busid\fP (struct \fBhwloc_obj\fP **treep, struct \fBhwloc_obj\fP *obj)"
+.br
+.ti -1c
+.RI "int \fBhwloc_pcidisc_tree_attach\fP (struct hwloc_topology *topology, struct \fBhwloc_obj\fP *tree)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+
+.PP
+\fBNote\fP
+.RS 4
+These structures and functions may change when \fBHWLOC_COMPONENT_ABI\fP is modified\&. 
+.RE
+.PP
+
+.SH "Function Documentation"
+.PP 
+.SS "\fBhwloc_obj_type_t\fP hwloc_pcidisc_check_bridge_type (unsigned device_class, const unsigned char * config)"
+
+.PP
+Return the hwloc object type (PCI device or Bridge) for the given class and configuration space\&. This function requires 16 bytes of common configuration header at the beginning of config\&. 
+.SS "int hwloc_pcidisc_find_bridge_buses (unsigned domain, unsigned bus, unsigned dev, unsigned func, unsigned * secondary_busp, unsigned * subordinate_busp, const unsigned char * config)"
+
+.PP
+Fills the attributes of the given PCI bridge using the given PCI config space\&. This function requires 32 bytes of common configuration header at the beginning of config\&.
+.PP
+Returns -1 and destroys /p obj if bridge fields are invalid\&. 
+.SS "unsigned hwloc_pcidisc_find_cap (const unsigned char * config, unsigned cap)"
+
+.PP
+Return the offset of the given capability in the PCI config space buffer\&. This function requires a 256-bytes config space\&. Unknown/unavailable bytes should be set to 0xff\&. 
+.SS "int hwloc_pcidisc_find_linkspeed (const unsigned char * config, unsigned offset, float * linkspeed)"
+
+.PP
+Fill linkspeed by reading the PCI config space where PCI_CAP_ID_EXP is at position offset\&. Needs 20 bytes of EXP capability block starting at offset in the config space for registers up to link status\&. 
+.SS "int hwloc_pcidisc_tree_attach (struct hwloc_topology * topology, struct \fBhwloc_obj\fP * tree)"
+
+.PP
+Add some hostbridges on top of the given tree of PCI objects and attach them to the topology\&. Other backends may lookup PCI objects or localities (for instance to attach OS devices) by using hwloc_pcidisc_find_by_busid() or hwloc_pcidisc_find_busid_parent()\&. 
+.SS "void hwloc_pcidisc_tree_insert_by_busid (struct \fBhwloc_obj\fP ** treep, struct \fBhwloc_obj\fP * obj)"
+
+.PP
+Insert a PCI object in the given PCI tree by looking at PCI bus IDs\&. If \fCtreep\fP points to \fCNULL\fP, the new object is inserted there\&. 
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_components_pcifind.3 b/doc/doxygen-doc/man/man3/hwlocality_components_pcifind.3
new file mode 100644
index 00000000..15f2ac48
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_components_pcifind.3
@@ -0,0 +1,79 @@
+.TH "hwlocality_components_pcifind" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_components_pcifind \- Components and Plugins: finding PCI objects during other discoveries
+.SH SYNOPSIS
+.br
+.PP
+.SS "Typedefs"
+
+.in +1c
+.ti -1c
+.RI "typedef void * \fBhwloc_backend_distances_add_handle_t\fP"
+.br
+.in -1c
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "struct \fBhwloc_obj\fP * \fBhwloc_pci_find_parent_by_busid\fP (struct hwloc_topology *topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)"
+.br
+.ti -1c
+.RI "struct \fBhwloc_obj\fP * \fBhwloc_pci_find_by_busid\fP (struct hwloc_topology *topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)"
+.br
+.ti -1c
+.RI "\fBhwloc_backend_distances_add_handle_t\fP \fBhwloc_backend_distances_add_create\fP (\fBhwloc_topology_t\fP topology, const char *name, unsigned long kind, unsigned long flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_backend_distances_add_values\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_backend_distances_add_handle_t\fP handle, unsigned nbobjs, \fBhwloc_obj_t\fP *objs, hwloc_uint64_t *values, unsigned long flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_backend_distances_add_commit\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_backend_distances_add_handle_t\fP handle, unsigned long flags)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+
+.PP
+\fBNote\fP
+.RS 4
+These structures and functions may change when \fBHWLOC_COMPONENT_ABI\fP is modified\&. 
+.RE
+.PP
+
+.SH "Typedef Documentation"
+.PP 
+.SS "typedef void* \fBhwloc_backend_distances_add_handle_t\fP"
+
+.PP
+Handle to a new distances structure during its addition to the topology\&. 
+.SH "Function Documentation"
+.PP 
+.SS "int hwloc_backend_distances_add_commit (\fBhwloc_topology_t\fP topology, \fBhwloc_backend_distances_add_handle_t\fP handle, unsigned long flags)"
+
+.PP
+Commit a new distances structure\&. This is similar to \fBhwloc_distances_add_commit()\fP but this variant is designed for backend inserting distances during topology discovery\&. 
+.SS "\fBhwloc_backend_distances_add_handle_t\fP hwloc_backend_distances_add_create (\fBhwloc_topology_t\fP topology, const char * name, unsigned long kind, unsigned long flags)"
+
+.PP
+Create a new empty distances structure\&. This is identical to \fBhwloc_distances_add_create()\fP but this variant is designed for backend inserting distances during topology discovery\&. 
+.SS "int hwloc_backend_distances_add_values (\fBhwloc_topology_t\fP topology, \fBhwloc_backend_distances_add_handle_t\fP handle, unsigned nbobjs, \fBhwloc_obj_t\fP * objs, hwloc_uint64_t * values, unsigned long flags)"
+
+.PP
+Specify the objects and values in a new empty distances structure\&. This is similar to \fBhwloc_distances_add_values()\fP but this variant is designed for backend inserting distances during topology discovery\&.
+.PP
+The only semantical difference is that \fCobjs\fP and \fCvalues\fP are not duplicated, but directly attached to the topology\&. On success, these arrays are given to the core and should not ever be freed by the caller anymore\&. 
+.SS "struct \fBhwloc_obj\fP* hwloc_pci_find_by_busid (struct hwloc_topology * topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)"
+
+.PP
+Find the PCI device or bridge matching a PCI bus ID exactly\&. This is useful for adding specific information about some objects based on their PCI id\&. When it comes to attaching objects based on PCI locality, \fBhwloc_pci_find_parent_by_busid()\fP should be preferred\&. 
+.SS "struct \fBhwloc_obj\fP* hwloc_pci_find_parent_by_busid (struct hwloc_topology * topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)"
+
+.PP
+Find the object or a parent of a PCI bus ID\&. When attaching a new object (typically an OS device) whose locality is specified by PCI bus ID, this function returns the PCI object to use as a parent for attaching\&.
+.PP
+If the exact PCI device with this bus ID exists, it is returned\&. Otherwise (for instance if it was filtered out), the function returns another object with similar locality (for instance a parent bridge, or the local CPU Package)\&. 
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_configuration.3 b/doc/doxygen-doc/man/man3/hwlocality_configuration.3
new file mode 100644
index 00000000..3d2cc81d
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_configuration.3
@@ -0,0 +1,275 @@
+.TH "hwlocality_configuration" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_configuration \- Topology Detection Configuration and Query
+.SH SYNOPSIS
+.br
+.PP
+.SS "Data Structures"
+
+.in +1c
+.ti -1c
+.RI "struct \fBhwloc_topology_discovery_support\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_topology_cpubind_support\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_topology_membind_support\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_topology_misc_support\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_topology_support\fP"
+.br
+.in -1c
+.SS "Enumerations"
+
+.in +1c
+.ti -1c
+.RI "enum \fBhwloc_topology_flags_e\fP { \fBHWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED\fP, \fBHWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM\fP, \fBHWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES\fP, \fBHWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT\fP = (1UL<<3), \fBHWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING\fP = (1UL<<4), \fBHWLOC_TOPOLOGY_FLAG_RESTRICT_TO_MEMBINDING\fP = (1UL<<5), \fBHWLOC_TOPOLOGY_FLAG_DONT_CHANGE_BINDING\fP = (1UL<<6), \fBHWLOC_TOPOLOGY_FLAG_NO_DISTANCES\fP = (1UL<<7), \fBHWLOC_TOPOLOGY_FLAG_NO_MEMATTRS\fP = (1UL<<8), \fBHWLOC_TOPOLOGY_FLAG_NO_CPUKINDS\fP = (1UL<<9) }"
+.br
+.ti -1c
+.RI "enum \fBhwloc_type_filter_e\fP { \fBHWLOC_TYPE_FILTER_KEEP_ALL\fP, \fBHWLOC_TYPE_FILTER_KEEP_NONE\fP, \fBHWLOC_TYPE_FILTER_KEEP_STRUCTURE\fP, \fBHWLOC_TYPE_FILTER_KEEP_IMPORTANT\fP }"
+.br
+.in -1c
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "int \fBhwloc_topology_set_flags\fP (\fBhwloc_topology_t\fP topology, unsigned long flags)"
+.br
+.ti -1c
+.RI "unsigned long \fBhwloc_topology_get_flags\fP (\fBhwloc_topology_t\fP topology)"
+.br
+.ti -1c
+.RI "int \fBhwloc_topology_is_thissystem\fP (\fBhwloc_topology_t\fP restrict topology)"
+.br
+.ti -1c
+.RI "const struct \fBhwloc_topology_support\fP * \fBhwloc_topology_get_support\fP (\fBhwloc_topology_t\fP restrict topology)"
+.br
+.ti -1c
+.RI "int \fBhwloc_topology_set_type_filter\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type, enum \fBhwloc_type_filter_e\fP filter)"
+.br
+.ti -1c
+.RI "int \fBhwloc_topology_get_type_filter\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type, enum \fBhwloc_type_filter_e\fP *filter)"
+.br
+.ti -1c
+.RI "int \fBhwloc_topology_set_all_types_filter\fP (\fBhwloc_topology_t\fP topology, enum \fBhwloc_type_filter_e\fP filter)"
+.br
+.ti -1c
+.RI "int \fBhwloc_topology_set_cache_types_filter\fP (\fBhwloc_topology_t\fP topology, enum \fBhwloc_type_filter_e\fP filter)"
+.br
+.ti -1c
+.RI "int \fBhwloc_topology_set_icache_types_filter\fP (\fBhwloc_topology_t\fP topology, enum \fBhwloc_type_filter_e\fP filter)"
+.br
+.ti -1c
+.RI "int \fBhwloc_topology_set_io_types_filter\fP (\fBhwloc_topology_t\fP topology, enum \fBhwloc_type_filter_e\fP filter)"
+.br
+.ti -1c
+.RI "void \fBhwloc_topology_set_userdata\fP (\fBhwloc_topology_t\fP topology, const void *userdata)"
+.br
+.ti -1c
+.RI "void * \fBhwloc_topology_get_userdata\fP (\fBhwloc_topology_t\fP topology)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+Several functions can optionally be called between \fBhwloc_topology_init()\fP and \fBhwloc_topology_load()\fP to configure how the detection should be performed, e\&.g\&. to ignore some objects types, define a synthetic topology, etc\&. 
+.SH "Enumeration Type Documentation"
+.PP 
+.SS "enum \fBhwloc_topology_flags_e\fP"
+
+.PP
+Flags to be set onto a topology context before load\&. Flags should be given to \fBhwloc_topology_set_flags()\fP\&. They may also be returned by \fBhwloc_topology_get_flags()\fP\&. 
+.PP
+\fBEnumerator\fP
+.in +1c
+.TP
+\fB\fIHWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED \fP\fP
+Detect the whole system, ignore reservations, include disallowed objects\&. Gather all online resources, even if some were disabled by the administrator\&. For instance, ignore Linux Cgroup/Cpusets and gather all processors and memory nodes\&. However offline PUs and NUMA nodes are still ignored\&.
+.PP
+When this flag is not set, PUs and NUMA nodes that are disallowed are not added to the topology\&. Parent objects (package, core, cache, etc\&.) are added only if some of their children are allowed\&. All existing PUs and NUMA nodes in the topology are allowed\&. \fBhwloc_topology_get_allowed_cpuset()\fP and \fBhwloc_topology_get_allowed_nodeset()\fP are equal to the root object cpuset and nodeset\&.
+.PP
+When this flag is set, the actual sets of allowed PUs and NUMA nodes are given by \fBhwloc_topology_get_allowed_cpuset()\fP and \fBhwloc_topology_get_allowed_nodeset()\fP\&. They may be smaller than the root object cpuset and nodeset\&.
+.PP
+If the current topology is exported to XML and reimported later, this flag should be set again in the reimported topology so that disallowed resources are reimported as well\&. 
+.TP
+\fB\fIHWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM \fP\fP
+Assume that the selected backend provides the topology for the system on which we are running\&. This forces \fBhwloc_topology_is_thissystem()\fP to return 1, i\&.e\&. makes hwloc assume that the selected backend provides the topology for the system on which we are running, even if it is not the OS-specific backend but the XML backend for instance\&. This means making the binding functions actually call the OS-specific system calls and really do binding, while the XML backend would otherwise provide empty hooks just returning success\&.
+.PP
+Setting the environment variable HWLOC_THISSYSTEM may also result in the same behavior\&.
+.PP
+This can be used for efficiency reasons to first detect the topology once, save it to an XML file, and quickly reload it later through the XML backend, but still having binding functions actually do bind\&. 
+.TP
+\fB\fIHWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES \fP\fP
+Get the set of allowed resources from the local operating system even if the topology was loaded from XML or synthetic description\&. If the topology was loaded from XML or from a synthetic string, restrict it by applying the current process restrictions such as Linux Cgroup/Cpuset\&.
+.PP
+This is useful when the topology is not loaded directly from the local machine (e\&.g\&. for performance reason) and it comes with all resources, while the running process is restricted to only parts of the machine\&.
+.PP
+This flag is ignored unless \fBHWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM\fP is also set since the loaded topology must match the underlying machine where restrictions will be gathered from\&.
+.PP
+Setting the environment variable HWLOC_THISSYSTEM_ALLOWED_RESOURCES would result in the same behavior\&. 
+.TP
+\fB\fIHWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT \fP\fP
+Import support from the imported topology\&. When importing a XML topology from a remote machine, binding is disabled by default (see \fBHWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM\fP)\&. This disabling is also marked by putting zeroes in the corresponding supported feature bits reported by \fBhwloc_topology_get_support()\fP\&.
+.PP
+The flag \fBHWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT\fP actually imports support bits from the remote machine\&. It also sets the flag \fCimported_support\fP in the struct \fBhwloc_topology_misc_support\fP array\&. If the imported XML did not contain any support information (exporter hwloc is too old), this flag is not set\&.
+.PP
+Note that these supported features are only relevant for the hwloc installation that actually exported the XML topology (it may vary with the operating system, or with how hwloc was compiled)\&.
+.PP
+Note that setting this flag however does not enable binding for the locally imported hwloc topology, it only reports what the remote hwloc and machine support\&. 
+.TP
+\fB\fIHWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING \fP\fP
+Do not consider resources outside of the process CPU binding\&. If the binding of the process is limited to a subset of cores, ignore the other cores during discovery\&.
+.PP
+The resulting topology is identical to what a call to \fBhwloc_topology_restrict()\fP would generate, but this flag also prevents hwloc from ever touching other resources during the discovery\&.
+.PP
+This flag especially tells the x86 backend to never temporarily rebind a thread on any excluded core\&. This is useful on Windows because such temporary rebinding can change the process binding\&. Another use-case is to avoid cores that would not be able to perform the hwloc discovery anytime soon because they are busy executing some high-priority real-time tasks\&.
+.PP
+If process CPU binding is not supported, the thread CPU binding is considered instead if supported, or the flag is ignored\&.
+.PP
+This flag requires \fBHWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM\fP as well since binding support is required\&. 
+.TP
+\fB\fIHWLOC_TOPOLOGY_FLAG_RESTRICT_TO_MEMBINDING \fP\fP
+Do not consider resources outside of the process memory binding\&. If the binding of the process is limited to a subset of NUMA nodes, ignore the other NUMA nodes during discovery\&.
+.PP
+The resulting topology is identical to what a call to \fBhwloc_topology_restrict()\fP would generate, but this flag also prevents hwloc from ever touching other resources during the discovery\&.
+.PP
+This flag is meant to be used together with \fBHWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING\fP when both cores and NUMA nodes should be ignored outside of the process binding\&.
+.PP
+If process memory binding is not supported, the thread memory binding is considered instead if supported, or the flag is ignored\&.
+.PP
+This flag requires \fBHWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM\fP as well since binding support is required\&. 
+.TP
+\fB\fIHWLOC_TOPOLOGY_FLAG_DONT_CHANGE_BINDING \fP\fP
+Do not ever modify the process or thread binding during discovery\&. This flag disables all hwloc discovery steps that require a change of the process or thread binding\&. This currently only affects the x86 backend which gets entirely disabled\&.
+.PP
+This is useful when \fBhwloc_topology_load()\fP is called while the application also creates additional threads or modifies the binding\&.
+.PP
+This flag is also a strict way to make sure the process binding will not change to due thread binding changes on Windows (see \fBHWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING\fP)\&. 
+.TP
+\fB\fIHWLOC_TOPOLOGY_FLAG_NO_DISTANCES \fP\fP
+Ignore distances\&. Ignore distance information from the operating systems (and from XML) and hence do not use distances for grouping\&. 
+.TP
+\fB\fIHWLOC_TOPOLOGY_FLAG_NO_MEMATTRS \fP\fP
+Ignore memory attributes\&. Ignore memory attribues from the operating systems (and from XML)\&. 
+.TP
+\fB\fIHWLOC_TOPOLOGY_FLAG_NO_CPUKINDS \fP\fP
+Ignore CPU Kinds\&. Ignore CPU kind information from the operating systems (and from XML)\&. 
+.SS "enum \fBhwloc_type_filter_e\fP"
+
+.PP
+Type filtering flags\&. By default, most objects are kept (\fBHWLOC_TYPE_FILTER_KEEP_ALL\fP)\&. Instruction caches, I/O and Misc objects are ignored by default (\fBHWLOC_TYPE_FILTER_KEEP_NONE\fP)\&. Die and Group levels are ignored unless they bring structure (\fBHWLOC_TYPE_FILTER_KEEP_STRUCTURE\fP)\&.
+.PP
+Note that group objects are also ignored individually (without the entire level) when they do not bring structure\&. 
+.PP
+\fBEnumerator\fP
+.in +1c
+.TP
+\fB\fIHWLOC_TYPE_FILTER_KEEP_ALL \fP\fP
+Keep all objects of this type\&. Cannot be set for \fBHWLOC_OBJ_GROUP\fP (groups are designed only to add more structure to the topology)\&. 
+.TP
+\fB\fIHWLOC_TYPE_FILTER_KEEP_NONE \fP\fP
+Ignore all objects of this type\&. The bottom-level type \fBHWLOC_OBJ_PU\fP, the \fBHWLOC_OBJ_NUMANODE\fP type, and the top-level type \fBHWLOC_OBJ_MACHINE\fP may not be ignored\&. 
+.TP
+\fB\fIHWLOC_TYPE_FILTER_KEEP_STRUCTURE \fP\fP
+Only ignore objects if their entire level does not bring any structure\&. Keep the entire level of objects if at least one of these objects adds structure to the topology\&. An object brings structure when it has multiple children and it is not the only child of its parent\&.
+.PP
+If all objects in the level are the only child of their parent, and if none of them has multiple children, the entire level is removed\&.
+.PP
+Cannot be set for I/O and Misc objects since the topology structure does not matter there\&. 
+.TP
+\fB\fIHWLOC_TYPE_FILTER_KEEP_IMPORTANT \fP\fP
+Only keep likely-important objects of the given type\&. It is only useful for I/O object types\&. For \fBHWLOC_OBJ_PCI_DEVICE\fP and \fBHWLOC_OBJ_OS_DEVICE\fP, it means that only objects of major/common kinds are kept (storage, network, OpenFabrics, CUDA, OpenCL, RSMI, NVML, and displays)\&. Also, only OS devices directly attached on PCI (e\&.g\&. no USB) are reported\&. For \fBHWLOC_OBJ_BRIDGE\fP, it means that bridges are kept only if they have children\&.
+.PP
+This flag equivalent to \fBHWLOC_TYPE_FILTER_KEEP_ALL\fP for Normal, Memory and Misc types since they are likely important\&. 
+.SH "Function Documentation"
+.PP 
+.SS "unsigned long hwloc_topology_get_flags (\fBhwloc_topology_t\fP topology)"
+
+.PP
+Get OR'ed flags of a topology\&. Get the OR'ed set of \fBhwloc_topology_flags_e\fP of a topology\&.
+.PP
+If \fBhwloc_topology_set_flags()\fP was not called earlier, no flags are set (\fC0\fP is returned)\&.
+.PP
+\fBReturns\fP
+.RS 4
+the flags previously set with \fBhwloc_topology_set_flags()\fP\&. 
+.RE
+.PP
+
+.SS "const struct \fBhwloc_topology_support\fP* hwloc_topology_get_support (\fBhwloc_topology_t\fP restrict topology)"
+
+.PP
+Retrieve the topology support\&. Each flag indicates whether a feature is supported\&. If set to 0, the feature is not supported\&. If set to 1, the feature is supported, but the corresponding call may still fail in some corner cases\&.
+.PP
+These features are also listed by hwloc-info --support
+.PP
+The reported features are what the current topology supports on the current machine\&. If the topology was exported to XML from another machine and later imported here, support still describes what is supported for this imported topology after import\&. By default, binding will be reported as unsupported in this case (see \fBHWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM\fP)\&.
+.PP
+Topology flag \fBHWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT\fP may be used to report the supported features of the original remote machine instead\&. If it was successfully imported, \fCimported_support\fP will be set in the struct \fBhwloc_topology_misc_support\fP array\&. 
+.SS "int hwloc_topology_get_type_filter (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type, enum \fBhwloc_type_filter_e\fP * filter)"
+
+.PP
+Get the current filtering for the given object type\&. 
+.SS "void* hwloc_topology_get_userdata (\fBhwloc_topology_t\fP topology)"
+
+.PP
+Retrieve the topology-specific userdata pointer\&. Retrieve the application-given private data pointer that was previously set with \fBhwloc_topology_set_userdata()\fP\&. 
+.SS "int hwloc_topology_is_thissystem (\fBhwloc_topology_t\fP restrict topology)"
+
+.PP
+Does the topology context come from this system? 
+.PP
+\fBReturns\fP
+.RS 4
+1 if this topology context was built using the system running this program\&. 
+.PP
+0 instead (for instance if using another file-system root, a XML topology file, or a synthetic topology)\&. 
+.RE
+.PP
+
+.SS "int hwloc_topology_set_all_types_filter (\fBhwloc_topology_t\fP topology, enum \fBhwloc_type_filter_e\fP filter)"
+
+.PP
+Set the filtering for all object types\&. If some types do not support this filtering, they are silently ignored\&. 
+.SS "int hwloc_topology_set_cache_types_filter (\fBhwloc_topology_t\fP topology, enum \fBhwloc_type_filter_e\fP filter)"
+
+.PP
+Set the filtering for all CPU cache object types\&. Memory-side caches are not involved since they are not CPU caches\&. 
+.SS "int hwloc_topology_set_flags (\fBhwloc_topology_t\fP topology, unsigned long flags)"
+
+.PP
+Set OR'ed flags to non-yet-loaded topology\&. Set a OR'ed set of \fBhwloc_topology_flags_e\fP onto a topology that was not yet loaded\&.
+.PP
+If this function is called multiple times, the last invocation will erase and replace the set of flags that was previously set\&.
+.PP
+By default, no flags are set (\fC0\fP)\&.
+.PP
+The flags set in a topology may be retrieved with \fBhwloc_topology_get_flags()\fP\&. 
+.SS "int hwloc_topology_set_icache_types_filter (\fBhwloc_topology_t\fP topology, enum \fBhwloc_type_filter_e\fP filter)"
+
+.PP
+Set the filtering for all CPU instruction cache object types\&. Memory-side caches are not involved since they are not CPU caches\&. 
+.SS "int hwloc_topology_set_io_types_filter (\fBhwloc_topology_t\fP topology, enum \fBhwloc_type_filter_e\fP filter)"
+
+.PP
+Set the filtering for all I/O object types\&. 
+.SS "int hwloc_topology_set_type_filter (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type, enum \fBhwloc_type_filter_e\fP filter)"
+
+.PP
+Set the filtering for the given object type\&. 
+.SS "void hwloc_topology_set_userdata (\fBhwloc_topology_t\fP topology, const void * userdata)"
+
+.PP
+Set the topology-specific userdata pointer\&. Each topology may store one application-given private data pointer\&. It is initialized to \fCNULL\fP\&. hwloc will never modify it\&.
+.PP
+Use it as you wish, after \fBhwloc_topology_init()\fP and until hwloc_topolog_destroy()\&.
+.PP
+This pointer is not exported to XML\&. 
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_cpubinding.3 b/doc/doxygen-doc/man/man3/hwlocality_cpubinding.3
new file mode 100644
index 00000000..eb962be5
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_cpubinding.3
@@ -0,0 +1,233 @@
+.TH "hwlocality_cpubinding" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_cpubinding \- CPU binding
+.SH SYNOPSIS
+.br
+.PP
+.SS "Enumerations"
+
+.in +1c
+.ti -1c
+.RI "enum \fBhwloc_cpubind_flags_t\fP { \fBHWLOC_CPUBIND_PROCESS\fP, \fBHWLOC_CPUBIND_THREAD\fP, \fBHWLOC_CPUBIND_STRICT\fP, \fBHWLOC_CPUBIND_NOMEMBIND\fP }"
+.br
+.in -1c
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "int \fBhwloc_set_cpubind\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP set, int flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_get_cpubind\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_cpuset_t\fP set, int flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_set_proc_cpubind\fP (\fBhwloc_topology_t\fP topology, hwloc_pid_t pid, \fBhwloc_const_cpuset_t\fP set, int flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_get_proc_cpubind\fP (\fBhwloc_topology_t\fP topology, hwloc_pid_t pid, \fBhwloc_cpuset_t\fP set, int flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_set_thread_cpubind\fP (\fBhwloc_topology_t\fP topology, hwloc_thread_t thread, \fBhwloc_const_cpuset_t\fP set, int flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_get_thread_cpubind\fP (\fBhwloc_topology_t\fP topology, hwloc_thread_t thread, \fBhwloc_cpuset_t\fP set, int flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_get_last_cpu_location\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_cpuset_t\fP set, int flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_get_proc_last_cpu_location\fP (\fBhwloc_topology_t\fP topology, hwloc_pid_t pid, \fBhwloc_cpuset_t\fP set, int flags)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+Some operating systems only support binding threads or processes to a single PU\&. Others allow binding to larger sets such as entire Cores or Packages or even random sets of individual PUs\&. In such operating system, the scheduler is free to run the task on one of these PU, then migrate it to another PU, etc\&. It is often useful to call \fBhwloc_bitmap_singlify()\fP on the target CPU set before passing it to the binding function to avoid these expensive migrations\&. See the documentation of \fBhwloc_bitmap_singlify()\fP for details\&.
+.PP
+Some operating systems do not provide all hwloc-supported mechanisms to bind processes, threads, etc\&. \fBhwloc_topology_get_support()\fP may be used to query about the actual CPU binding support in the currently used operating system\&.
+.PP
+When the requested binding operation is not available and the \fBHWLOC_CPUBIND_STRICT\fP flag was passed, the function returns -1\&. \fCerrno\fP is set to \fCENOSYS\fP when it is not possible to bind the requested kind of object processes/threads\&. errno is set to \fCEXDEV\fP when the requested cpuset can not be enforced (e\&.g\&. some systems only allow one CPU, and some other systems only allow one NUMA node)\&.
+.PP
+If \fBHWLOC_CPUBIND_STRICT\fP was not passed, the function may fail as well, or the operating system may use a slightly different operation (with side-effects, smaller binding set, etc\&.) when the requested operation is not exactly supported\&.
+.PP
+The most portable version that should be preferred over the others, whenever possible, is the following one which just binds the current program, assuming it is single-threaded:
+.PP
+.PP
+.nf
+hwloc_set_cpubind(topology, set, 0),
+.fi
+.PP
+.PP
+If the program may be multithreaded, the following one should be preferred to only bind the current thread:
+.PP
+.PP
+.nf
+hwloc_set_cpubind(topology, set, HWLOC_CPUBIND_THREAD),
+.fi
+.PP
+.PP
+\fBSee also\fP
+.RS 4
+Some example codes are available under doc/examples/ in the source tree\&.
+.RE
+.PP
+\fBNote\fP
+.RS 4
+To unbind, just call the binding function with either a full cpuset or a cpuset equal to the system cpuset\&.
+.PP
+On some operating systems, CPU binding may have effects on memory binding, see \fBHWLOC_CPUBIND_NOMEMBIND\fP
+.PP
+Running lstopo --top or hwloc-ps can be a very convenient tool to check how binding actually happened\&. 
+.RE
+.PP
+
+.SH "Enumeration Type Documentation"
+.PP 
+.SS "enum \fBhwloc_cpubind_flags_t\fP"
+
+.PP
+Process/Thread binding flags\&. These bit flags can be used to refine the binding policy\&.
+.PP
+The default (0) is to bind the current process, assumed to be single-threaded, in a non-strict way\&. This is the most portable way to bind as all operating systems usually provide it\&.
+.PP
+\fBNote\fP
+.RS 4
+Not all systems support all kinds of binding\&. See the 'Detailed Description' section of \fBCPU binding\fP for a description of errors that can occur\&. 
+.RE
+.PP
+
+.PP
+\fBEnumerator\fP
+.in +1c
+.TP
+\fB\fIHWLOC_CPUBIND_PROCESS \fP\fP
+Bind all threads of the current (possibly) multithreaded process\&. 
+.TP
+\fB\fIHWLOC_CPUBIND_THREAD \fP\fP
+Bind current thread of current process\&. 
+.TP
+\fB\fIHWLOC_CPUBIND_STRICT \fP\fP
+Request for strict binding from the OS\&. By default, when the designated CPUs are all busy while other CPUs are idle, operating systems may execute the thread/process on those other CPUs instead of the designated CPUs, to let them progress anyway\&. Strict binding means that the thread/process will _never_ execute on other CPUs than the designated CPUs, even when those are busy with other tasks and other CPUs are idle\&.
+.PP
+\fBNote\fP
+.RS 4
+Depending on the operating system, strict binding may not be possible (e\&.g\&., the OS does not implement it) or not allowed (e\&.g\&., for an administrative reasons), and the function will fail in that case\&.
+.RE
+.PP
+When retrieving the binding of a process, this flag checks whether all its threads actually have the same binding\&. If the flag is not given, the binding of each thread will be accumulated\&.
+.PP
+\fBNote\fP
+.RS 4
+This flag is meaningless when retrieving the binding of a thread\&. 
+.RE
+.PP
+
+.TP
+\fB\fIHWLOC_CPUBIND_NOMEMBIND \fP\fP
+Avoid any effect on memory binding\&. On some operating systems, some CPU binding function would also bind the memory on the corresponding NUMA node\&. It is often not a problem for the application, but if it is, setting this flag will make hwloc avoid using OS functions that would also bind memory\&. This will however reduce the support of CPU bindings, i\&.e\&. potentially return -1 with errno set to ENOSYS in some cases\&.
+.PP
+This flag is only meaningful when used with functions that set the CPU binding\&. It is ignored when used with functions that get CPU binding information\&. 
+.SH "Function Documentation"
+.PP 
+.SS "int hwloc_get_cpubind (\fBhwloc_topology_t\fP topology, \fBhwloc_cpuset_t\fP set, int flags)"
+
+.PP
+Get current process or thread binding\&. The CPU-set \fCset\fP (previously allocated by the caller) is filled with the list of PUs which the process or thread (according to \fIflags\fP) was last bound to\&. 
+.SS "int hwloc_get_last_cpu_location (\fBhwloc_topology_t\fP topology, \fBhwloc_cpuset_t\fP set, int flags)"
+
+.PP
+Get the last physical CPU where the current process or thread ran\&. The CPU-set \fCset\fP (previously allocated by the caller) is filled with the list of PUs which the process or thread (according to \fIflags\fP) last ran on\&.
+.PP
+The operating system may move some tasks from one processor to another at any time according to their binding, so this function may return something that is already outdated\&.
+.PP
+\fCflags\fP can include either \fBHWLOC_CPUBIND_PROCESS\fP or \fBHWLOC_CPUBIND_THREAD\fP to specify whether the query should be for the whole process (union of all CPUs on which all threads are running), or only the current thread\&. If the process is single-threaded, flags can be set to zero to let hwloc use whichever method is available on the underlying OS\&. 
+.SS "int hwloc_get_proc_cpubind (\fBhwloc_topology_t\fP topology, hwloc_pid_t pid, \fBhwloc_cpuset_t\fP set, int flags)"
+
+.PP
+Get the current physical binding of process \fCpid\fP\&. The CPU-set \fCset\fP (previously allocated by the caller) is filled with the list of PUs which the process was last bound to\&.
+.PP
+\fBNote\fP
+.RS 4
+\fChwloc_pid_t\fP is \fCpid_t\fP on Unix platforms, and \fCHANDLE\fP on native Windows platforms\&.
+.PP
+As a special case on Linux, if a tid (thread ID) is supplied instead of a pid (process ID) and HWLOC_CPUBIND_THREAD is passed in flags, the binding for that specific thread is returned\&.
+.PP
+On non-Linux systems, HWLOC_CPUBIND_THREAD can not be used in \fCflags\fP\&. 
+.RE
+.PP
+
+.SS "int hwloc_get_proc_last_cpu_location (\fBhwloc_topology_t\fP topology, hwloc_pid_t pid, \fBhwloc_cpuset_t\fP set, int flags)"
+
+.PP
+Get the last physical CPU where a process ran\&. The CPU-set \fCset\fP (previously allocated by the caller) is filled with the list of PUs which the process last ran on\&.
+.PP
+The operating system may move some tasks from one processor to another at any time according to their binding, so this function may return something that is already outdated\&.
+.PP
+\fBNote\fP
+.RS 4
+\fChwloc_pid_t\fP is \fCpid_t\fP on Unix platforms, and \fCHANDLE\fP on native Windows platforms\&.
+.PP
+As a special case on Linux, if a tid (thread ID) is supplied instead of a pid (process ID) and \fBHWLOC_CPUBIND_THREAD\fP is passed in flags, the last CPU location of that specific thread is returned\&.
+.PP
+On non-Linux systems, \fBHWLOC_CPUBIND_THREAD\fP can not be used in \fCflags\fP\&. 
+.RE
+.PP
+
+.SS "int hwloc_get_thread_cpubind (\fBhwloc_topology_t\fP topology, hwloc_thread_t thread, \fBhwloc_cpuset_t\fP set, int flags)"
+
+.PP
+Get the current physical binding of thread \fCtid\fP\&. The CPU-set \fCset\fP (previously allocated by the caller) is filled with the list of PUs which the thread was last bound to\&.
+.PP
+\fBNote\fP
+.RS 4
+\fChwloc_thread_t\fP is \fCpthread_t\fP on Unix platforms, and \fCHANDLE\fP on native Windows platforms\&.
+.PP
+\fBHWLOC_CPUBIND_PROCESS\fP can not be used in \fCflags\fP\&. 
+.RE
+.PP
+
+.SS "int hwloc_set_cpubind (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP set, int flags)"
+
+.PP
+Bind current process or thread on CPUs given in physical bitmap \fCset\fP\&. 
+.PP
+\fBReturns\fP
+.RS 4
+-1 with errno set to ENOSYS if the action is not supported 
+.PP
+-1 with errno set to EXDEV if the binding cannot be enforced 
+.RE
+.PP
+
+.SS "int hwloc_set_proc_cpubind (\fBhwloc_topology_t\fP topology, hwloc_pid_t pid, \fBhwloc_const_cpuset_t\fP set, int flags)"
+
+.PP
+Bind a process \fCpid\fP on CPUs given in physical bitmap \fCset\fP\&. 
+.PP
+\fBNote\fP
+.RS 4
+\fChwloc_pid_t\fP is \fCpid_t\fP on Unix platforms, and \fCHANDLE\fP on native Windows platforms\&.
+.PP
+As a special case on Linux, if a tid (thread ID) is supplied instead of a pid (process ID) and \fBHWLOC_CPUBIND_THREAD\fP is passed in flags, the binding is applied to that specific thread\&.
+.PP
+On non-Linux systems, \fBHWLOC_CPUBIND_THREAD\fP can not be used in \fCflags\fP\&. 
+.RE
+.PP
+
+.SS "int hwloc_set_thread_cpubind (\fBhwloc_topology_t\fP topology, hwloc_thread_t thread, \fBhwloc_const_cpuset_t\fP set, int flags)"
+
+.PP
+Bind a thread \fCthread\fP on CPUs given in physical bitmap \fCset\fP\&. 
+.PP
+\fBNote\fP
+.RS 4
+\fChwloc_thread_t\fP is \fCpthread_t\fP on Unix platforms, and \fCHANDLE\fP on native Windows platforms\&.
+.PP
+\fBHWLOC_CPUBIND_PROCESS\fP can not be used in \fCflags\fP\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_cpukinds.3 b/doc/doxygen-doc/man/man3/hwlocality_cpukinds.3
new file mode 100644
index 00000000..55b29404
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_cpukinds.3
@@ -0,0 +1,135 @@
+.TH "hwlocality_cpukinds" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_cpukinds \- Kinds of CPU cores
+.SH SYNOPSIS
+.br
+.PP
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "int \fBhwloc_cpukinds_get_nr\fP (\fBhwloc_topology_t\fP topology, unsigned long flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_cpukinds_get_by_cpuset\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_const_bitmap_t\fP cpuset, unsigned long flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_cpukinds_get_info\fP (\fBhwloc_topology_t\fP topology, unsigned kind_index, \fBhwloc_bitmap_t\fP cpuset, int *efficiency, unsigned *nr_infos, struct \fBhwloc_info_s\fP **infos, unsigned long flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_cpukinds_register\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_bitmap_t\fP cpuset, int forced_efficiency, unsigned nr_infos, struct \fBhwloc_info_s\fP *infos, unsigned long flags)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+Platforms with heterogeneous CPUs may have some cores with different features or frequencies\&. This API exposes identical PUs in sets called CPU kinds\&. Each PU of the topology may only be in a single kind\&.
+.PP
+The number of kinds may be obtained with \fBhwloc_cpukinds_get_nr()\fP\&. If the platform is homogeneous, there may be a single kind with all PUs\&. If the platform or operating system does not expose any information about CPU cores, there may be no kind at all\&.
+.PP
+The index of the kind that describes a given CPU set (if any, and not partially) may be obtained with \fBhwloc_cpukinds_get_by_cpuset()\fP\&.
+.PP
+From the index of a kind, it is possible to retrieve information with \fBhwloc_cpukinds_get_info()\fP: an abstracted efficiency value, and an array of info attributes (for instance the 'CoreType' and 'FrequencyMaxMHz', see \fBCPU Kinds\fP)\&.
+.PP
+A higher efficiency value means greater intrinsic performance (and possibly less performance/power efficiency)\&. Kinds with lower efficiency values are ranked first: Passing 0 as \fCkind_index\fP to \fBhwloc_cpukinds_get_info()\fP will return information about the CPU kind with lower performance but higher energy-efficiency\&. Higher \fCkind_index\fP values would rather return information about power-hungry high-performance cores\&.
+.PP
+When available, efficiency values are gathered from the operating system\&. If so, \fCcpukind_efficiency\fP is set in the struct \fBhwloc_topology_discovery_support\fP array\&. This is currently available on Windows 10, Mac OS X (Darwin), and on some Linux platforms where core 'capacity' is exposed in sysfs\&.
+.PP
+If the operating system does not expose core efficiencies natively, hwloc tries to compute efficiencies by comparing CPU kinds using frequencies (on ARM), or core types and frequencies (on other architectures)\&. The environment variable HWLOC_CPUKINDS_RANKING may be used to change this heuristics, see \fBEnvironment Variables\fP\&.
+.PP
+If hwloc fails to rank any kind, for instance because the operating system does not expose efficiencies and core frequencies, all kinds will have an unknown efficiency (\fC-1\fP), and they are not indexed/ordered in any specific way\&. 
+.SH "Function Documentation"
+.PP 
+.SS "int hwloc_cpukinds_get_by_cpuset (\fBhwloc_topology_t\fP topology, \fBhwloc_const_bitmap_t\fP cpuset, unsigned long flags)"
+
+.PP
+Get the index of the CPU kind that contains CPUs listed in \fCcpuset\fP\&. \fCflags\fP must be \fC0\fP for now\&.
+.PP
+\fBReturns\fP
+.RS 4
+The index of the CPU kind (positive integer or 0) on success\&. 
+.PP
+\fC-1\fP with \fCerrno\fP set to \fCEXDEV\fP if \fCcpuset\fP is only partially included in the some kind\&. 
+.PP
+\fC-1\fP with \fCerrno\fP set to \fCENOENT\fP if \fCcpuset\fP is not included in any kind, even partially\&. 
+.PP
+\fC-1\fP with \fCerrno\fP set to \fCEINVAL\fP if parameters are invalid\&. 
+.RE
+.PP
+
+.SS "int hwloc_cpukinds_get_info (\fBhwloc_topology_t\fP topology, unsigned kind_index, \fBhwloc_bitmap_t\fP cpuset, int * efficiency, unsigned * nr_infos, struct \fBhwloc_info_s\fP ** infos, unsigned long flags)"
+
+.PP
+Get the CPU set and infos about a CPU kind in the topology\&. \fCkind_index\fP identifies one kind of CPU between 0 and the number of kinds returned by \fBhwloc_cpukinds_get_nr()\fP minus 1\&.
+.PP
+If not \fCNULL\fP, the bitmap \fCcpuset\fP will be filled with the set of PUs of this kind\&.
+.PP
+The integer pointed by \fCefficiency\fP, if not \fCNULL\fP will, be filled with the ranking of this kind of CPU in term of efficiency (see above)\&. It ranges from \fC0\fP to the number of kinds (as reported by \fBhwloc_cpukinds_get_nr()\fP) minus 1\&.
+.PP
+Kinds with lower efficiency are reported first\&.
+.PP
+If there is a single kind in the topology, its efficiency \fC0\fP\&. If the efficiency of some kinds of cores is unknown, the efficiency of all kinds is set to \fC-1\fP, and kinds are reported in no specific order\&.
+.PP
+The array of info attributes (for instance the 'CoreType', 'FrequencyMaxMHz' or 'FrequencyBaseMHz', see \fBCPU Kinds\fP) and its length are returned in \fCinfos\fP or \fCnr_infos\fP\&. The array belongs to the topology, it should not be freed or modified\&.
+.PP
+If \fCnr_infos\fP or \fCinfos\fP is \fCNULL\fP, no info is returned\&.
+.PP
+\fCflags\fP must be \fC0\fP for now\&.
+.PP
+\fBReturns\fP
+.RS 4
+\fC0\fP on success\&. 
+.PP
+\fC-1\fP with \fCerrno\fP set to \fCENOENT\fP if \fCkind_index\fP does not match any CPU kind\&. 
+.PP
+\fC-1\fP with \fCerrno\fP set to \fCEINVAL\fP if parameters are invalid\&. 
+.RE
+.PP
+
+.SS "int hwloc_cpukinds_get_nr (\fBhwloc_topology_t\fP topology, unsigned long flags)"
+
+.PP
+Get the number of different kinds of CPU cores in the topology\&. \fCflags\fP must be \fC0\fP for now\&.
+.PP
+\fBReturns\fP
+.RS 4
+The number of CPU kinds (positive integer) on success\&. 
+.PP
+\fC0\fP if no information about kinds was found\&. 
+.PP
+\fC-1\fP with \fCerrno\fP set to \fCEINVAL\fP if \fCflags\fP is invalid\&. 
+.RE
+.PP
+
+.SS "int hwloc_cpukinds_register (\fBhwloc_topology_t\fP topology, \fBhwloc_bitmap_t\fP cpuset, int forced_efficiency, unsigned nr_infos, struct \fBhwloc_info_s\fP * infos, unsigned long flags)"
+
+.PP
+Register a kind of CPU in the topology\&. Mark the PUs listed in \fCcpuset\fP as being of the same kind with respect to the given attributes\&.
+.PP
+\fCforced_efficiency\fP should be \fC-1\fP if unknown\&. Otherwise it is an abstracted efficiency value to enforce the ranking of all kinds if all of them have valid (and different) efficiencies\&.
+.PP
+The array \fCinfos\fP of size \fCnr_infos\fP may be used to provide info names and values describing this kind of PUs\&.
+.PP
+\fCflags\fP must be \fC0\fP for now\&.
+.PP
+Parameters \fCcpuset\fP and \fCinfos\fP will be duplicated internally, the caller is responsible for freeing them\&.
+.PP
+If \fCcpuset\fP overlaps with some existing kinds, those might get modified or split\&. For instance if existing kind A contains PUs 0 and 1, and one registers another kind for PU 1 and 2, there will be 3 resulting kinds: existing kind A is restricted to only PU 0; new kind B contains only PU 1 and combines information from A and from the newly-registered kind; new kind C contains only PU 2 and only gets information from the newly-registered kind\&.
+.PP
+\fBNote\fP
+.RS 4
+The efficiency \fCforced_efficiency\fP provided to this function may be different from the one reported later by \fBhwloc_cpukinds_get_info()\fP because hwloc will scale efficiency values down to between 0 and the number of kinds minus 1\&.
+.RE
+.PP
+\fBReturns\fP
+.RS 4
+\fC0\fP on success\&. 
+.PP
+\fC-1\fP with \fCerrno\fP set to \fCEINVAL\fP if some parameters are invalid, for instance if \fCcpuset\fP is \fCNULL\fP or empty\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_creation.3 b/doc/doxygen-doc/man/man3/hwlocality_creation.3
new file mode 100644
index 00000000..b635b962
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_creation.3
@@ -0,0 +1,159 @@
+.TH "hwlocality_creation" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_creation \- Topology Creation and Destruction
+.SH SYNOPSIS
+.br
+.PP
+.SS "Typedefs"
+
+.in +1c
+.ti -1c
+.RI "typedef struct hwloc_topology * \fBhwloc_topology_t\fP"
+.br
+.in -1c
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "int \fBhwloc_topology_init\fP (\fBhwloc_topology_t\fP *topologyp)"
+.br
+.ti -1c
+.RI "int \fBhwloc_topology_load\fP (\fBhwloc_topology_t\fP topology)"
+.br
+.ti -1c
+.RI "void \fBhwloc_topology_destroy\fP (\fBhwloc_topology_t\fP topology)"
+.br
+.ti -1c
+.RI "int \fBhwloc_topology_dup\fP (\fBhwloc_topology_t\fP *newtopology, \fBhwloc_topology_t\fP oldtopology)"
+.br
+.ti -1c
+.RI "int \fBhwloc_topology_abi_check\fP (\fBhwloc_topology_t\fP topology)"
+.br
+.ti -1c
+.RI "void \fBhwloc_topology_check\fP (\fBhwloc_topology_t\fP topology)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+
+.SH "Typedef Documentation"
+.PP 
+.SS "typedef struct hwloc_topology* \fBhwloc_topology_t\fP"
+
+.PP
+Topology context\&. To be initialized with \fBhwloc_topology_init()\fP and built with \fBhwloc_topology_load()\fP\&. 
+.SH "Function Documentation"
+.PP 
+.SS "int hwloc_topology_abi_check (\fBhwloc_topology_t\fP topology)"
+
+.PP
+Verify that the topology is compatible with the current hwloc library\&. This is useful when using the same topology structure (in memory) in different libraries that may use different hwloc installations (for instance if one library embeds a specific version of hwloc, while another library uses a default system-wide hwloc installation)\&.
+.PP
+If all libraries/programs use the same hwloc installation, this function always returns success\&.
+.PP
+\fBReturns\fP
+.RS 4
+\fC0\fP on success\&.
+.PP
+\fC-1\fP with \fCerrno\fP set to \fCEINVAL\fP if incompatible\&.
+.RE
+.PP
+\fBNote\fP
+.RS 4
+If sharing between processes with \fBhwloc_shmem_topology_write()\fP, the relevant check is already performed inside \fBhwloc_shmem_topology_adopt()\fP\&. 
+.RE
+.PP
+
+.SS "void hwloc_topology_check (\fBhwloc_topology_t\fP topology)"
+
+.PP
+Run internal checks on a topology structure\&. The program aborts if an inconsistency is detected in the given topology\&.
+.PP
+\fBParameters\fP
+.RS 4
+\fItopology\fP is the topology to be checked
+.RE
+.PP
+\fBNote\fP
+.RS 4
+This routine is only useful to developers\&.
+.PP
+The input topology should have been previously loaded with \fBhwloc_topology_load()\fP\&. 
+.RE
+.PP
+
+.SS "void hwloc_topology_destroy (\fBhwloc_topology_t\fP topology)"
+
+.PP
+Terminate and free a topology context\&. 
+.PP
+\fBParameters\fP
+.RS 4
+\fItopology\fP is the topology to be freed 
+.RE
+.PP
+
+.SS "int hwloc_topology_dup (\fBhwloc_topology_t\fP * newtopology, \fBhwloc_topology_t\fP oldtopology)"
+
+.PP
+Duplicate a topology\&. The entire topology structure as well as its objects are duplicated into a new one\&.
+.PP
+This is useful for keeping a backup while modifying a topology\&.
+.PP
+\fBNote\fP
+.RS 4
+Object userdata is not duplicated since hwloc does not know what it point to\&. The objects of both old and new topologies will point to the same userdata\&. 
+.RE
+.PP
+
+.SS "int hwloc_topology_init (\fBhwloc_topology_t\fP * topologyp)"
+
+.PP
+Allocate a topology context\&. 
+.PP
+\fBParameters\fP
+.RS 4
+\fItopologyp\fP is assigned a pointer to the new allocated context\&.
+.RE
+.PP
+\fBReturns\fP
+.RS 4
+0 on success, -1 on error\&. 
+.RE
+.PP
+
+.SS "int hwloc_topology_load (\fBhwloc_topology_t\fP topology)"
+
+.PP
+Build the actual topology\&. Build the actual topology once initialized with \fBhwloc_topology_init()\fP and tuned with \fBTopology Detection Configuration and Query\fP and \fBChanging the Source of Topology Discovery\fP routines\&. No other routine may be called earlier using this topology context\&.
+.PP
+\fBParameters\fP
+.RS 4
+\fItopology\fP is the topology to be loaded with objects\&.
+.RE
+.PP
+\fBReturns\fP
+.RS 4
+0 on success, -1 on error\&.
+.RE
+.PP
+\fBNote\fP
+.RS 4
+On failure, the topology is reinitialized\&. It should be either destroyed with \fBhwloc_topology_destroy()\fP or configured and loaded again\&.
+.PP
+This function may be called only once per topology\&.
+.PP
+The binding of the current thread or process may temporarily change during this call but it will be restored before it returns\&.
+.RE
+.PP
+\fBSee also\fP
+.RS 4
+\fBTopology Detection Configuration and Query\fP and \fBChanging the Source of Topology Discovery\fP 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_cuda.3 b/doc/doxygen-doc/man/man3/hwlocality_cuda.3
new file mode 100644
index 00000000..802f3455
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_cuda.3
@@ -0,0 +1,106 @@
+.TH "hwlocality_cuda" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_cuda \- Interoperability with the CUDA Driver API
+.SH SYNOPSIS
+.br
+.PP
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "static int \fBhwloc_cuda_get_device_pci_ids\fP (\fBhwloc_topology_t\fP topology, CUdevice cudevice, int *domain, int *bus, int *dev)"
+.br
+.ti -1c
+.RI "static int \fBhwloc_cuda_get_device_cpuset\fP (\fBhwloc_topology_t\fP topology, CUdevice cudevice, \fBhwloc_cpuset_t\fP set)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_cuda_get_device_pcidev\fP (\fBhwloc_topology_t\fP topology, CUdevice cudevice)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_cuda_get_device_osdev\fP (\fBhwloc_topology_t\fP topology, CUdevice cudevice)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_cuda_get_device_osdev_by_index\fP (\fBhwloc_topology_t\fP topology, unsigned idx)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+This interface offers ways to retrieve topology information about CUDA devices when using the CUDA Driver API\&. 
+.SH "Function Documentation"
+.PP 
+.SS "static int hwloc_cuda_get_device_cpuset (\fBhwloc_topology_t\fP topology, CUdevice cudevice, \fBhwloc_cpuset_t\fP set)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the CPU set of processors that are physically close to device \fCcudevice\fP\&. Store in \fCset\fP the CPU-set describing the locality of the CUDA device \fCcudevice\fP\&.
+.PP
+Topology \fCtopology\fP and device \fCcudevice\fP must match the local machine\&. I/O devices detection and the CUDA component are not needed in the topology\&.
+.PP
+The function only returns the locality of the device\&. If more information about the device is needed, OS objects should be used instead, see \fBhwloc_cuda_get_device_osdev()\fP and \fBhwloc_cuda_get_device_osdev_by_index()\fP\&.
+.PP
+This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset\&. 
+.SS "static \fBhwloc_obj_t\fP hwloc_cuda_get_device_osdev (\fBhwloc_topology_t\fP topology, CUdevice cudevice)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the hwloc OS device object corresponding to CUDA device \fCcudevice\fP\&. 
+.PP
+\fBReturns\fP
+.RS 4
+The hwloc OS device object that describes the given CUDA device \fCcudevice\fP\&. 
+.PP
+\fCNULL\fP if none could be found\&.
+.RE
+.PP
+Topology \fCtopology\fP and device \fCcudevice\fP must match the local machine\&. I/O devices detection and the CUDA component must be enabled in the topology\&. If not, the locality of the object may still be found using \fBhwloc_cuda_get_device_cpuset()\fP\&.
+.PP
+\fBNote\fP
+.RS 4
+This function cannot work if PCI devices are filtered out\&.
+.PP
+The corresponding hwloc PCI device may be found by looking at the result parent pointer (unless PCI devices are filtered out)\&. 
+.RE
+.PP
+
+.SS "static \fBhwloc_obj_t\fP hwloc_cuda_get_device_osdev_by_index (\fBhwloc_topology_t\fP topology, unsigned idx)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the hwloc OS device object corresponding to the CUDA device whose index is \fCidx\fP\&. 
+.PP
+\fBReturns\fP
+.RS 4
+The hwloc OS device object describing the CUDA device whose index is \fCidx\fP\&. 
+.PP
+\fCNULL\fP if none could be found\&.
+.RE
+.PP
+The topology \fCtopology\fP does not necessarily have to match the current machine\&. For instance the topology may be an XML import of a remote host\&. I/O devices detection and the CUDA component must be enabled in the topology\&.
+.PP
+\fBNote\fP
+.RS 4
+The corresponding PCI device object can be obtained by looking at the OS device parent object (unless PCI devices are filtered out)\&.
+.PP
+This function is identical to \fBhwloc_cudart_get_device_osdev_by_index()\fP\&. 
+.RE
+.PP
+
+.SS "static int hwloc_cuda_get_device_pci_ids (\fBhwloc_topology_t\fP topology, CUdevice cudevice, int * domain, int * bus, int * dev)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Return the domain, bus and device IDs of the CUDA device \fCcudevice\fP\&. Device \fCcudevice\fP must match the local machine\&. 
+.SS "static \fBhwloc_obj_t\fP hwloc_cuda_get_device_pcidev (\fBhwloc_topology_t\fP topology, CUdevice cudevice)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the hwloc PCI device object corresponding to the CUDA device \fCcudevice\fP\&. 
+.PP
+\fBReturns\fP
+.RS 4
+The hwloc PCI device object describing the CUDA device \fCcudevice\fP\&. 
+.PP
+\fCNULL\fP if none could be found\&.
+.RE
+.PP
+Topology \fCtopology\fP and device \fCcudevice\fP must match the local machine\&. I/O devices detection must be enabled in topology \fCtopology\fP\&. The CUDA component is not needed in the topology\&. 
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_cudart.3 b/doc/doxygen-doc/man/man3/hwlocality_cudart.3
new file mode 100644
index 00000000..dd124ef6
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_cudart.3
@@ -0,0 +1,81 @@
+.TH "hwlocality_cudart" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_cudart \- Interoperability with the CUDA Runtime API
+.SH SYNOPSIS
+.br
+.PP
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "static int \fBhwloc_cudart_get_device_pci_ids\fP (\fBhwloc_topology_t\fP topology, int idx, int *domain, int *bus, int *dev)"
+.br
+.ti -1c
+.RI "static int \fBhwloc_cudart_get_device_cpuset\fP (\fBhwloc_topology_t\fP topology, int idx, \fBhwloc_cpuset_t\fP set)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_cudart_get_device_pcidev\fP (\fBhwloc_topology_t\fP topology, int idx)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_cudart_get_device_osdev_by_index\fP (\fBhwloc_topology_t\fP topology, unsigned idx)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+This interface offers ways to retrieve topology information about CUDA devices when using the CUDA Runtime API\&. 
+.SH "Function Documentation"
+.PP 
+.SS "static int hwloc_cudart_get_device_cpuset (\fBhwloc_topology_t\fP topology, int idx, \fBhwloc_cpuset_t\fP set)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the CPU set of processors that are physically close to device \fCidx\fP\&. Store in \fCset\fP the CPU-set describing the locality of the CUDA device whose index is \fCidx\fP\&.
+.PP
+Topology \fCtopology\fP and device \fCidx\fP must match the local machine\&. I/O devices detection and the CUDA component are not needed in the topology\&.
+.PP
+The function only returns the locality of the device\&. If more information about the device is needed, OS objects should be used instead, see \fBhwloc_cudart_get_device_osdev_by_index()\fP\&.
+.PP
+This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset\&. 
+.SS "static \fBhwloc_obj_t\fP hwloc_cudart_get_device_osdev_by_index (\fBhwloc_topology_t\fP topology, unsigned idx)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the hwloc OS device object corresponding to the CUDA device whose index is \fCidx\fP\&. 
+.PP
+\fBReturns\fP
+.RS 4
+The hwloc OS device object describing the CUDA device whose index is \fCidx\fP\&. 
+.PP
+\fCNULL\fP if none could be found\&.
+.RE
+.PP
+The topology \fCtopology\fP does not necessarily have to match the current machine\&. For instance the topology may be an XML import of a remote host\&. I/O devices detection and the CUDA component must be enabled in the topology\&. If not, the locality of the object may still be found using \fBhwloc_cudart_get_device_cpuset()\fP\&.
+.PP
+\fBNote\fP
+.RS 4
+The corresponding PCI device object can be obtained by looking at the OS device parent object (unless PCI devices are filtered out)\&.
+.PP
+This function is identical to \fBhwloc_cuda_get_device_osdev_by_index()\fP\&. 
+.RE
+.PP
+
+.SS "static int hwloc_cudart_get_device_pci_ids (\fBhwloc_topology_t\fP topology, int idx, int * domain, int * bus, int * dev)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Return the domain, bus and device IDs of the CUDA device whose index is \fCidx\fP\&. Device index \fCidx\fP must match the local machine\&. 
+.SS "static \fBhwloc_obj_t\fP hwloc_cudart_get_device_pcidev (\fBhwloc_topology_t\fP topology, int idx)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the hwloc PCI device object corresponding to the CUDA device whose index is \fCidx\fP\&. 
+.PP
+\fBReturns\fP
+.RS 4
+The hwloc PCI device object describing the CUDA device whose index is \fCidx\fP\&. 
+.PP
+\fCNULL\fP if none could be found\&.
+.RE
+.PP
+Topology \fCtopology\fP and device \fCidx\fP must match the local machine\&. I/O devices detection must be enabled in topology \fCtopology\fP\&. The CUDA component is not needed in the topology\&. 
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_diff.3 b/doc/doxygen-doc/man/man3/hwlocality_diff.3
new file mode 100644
index 00000000..b9a04e4a
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_diff.3
@@ -0,0 +1,228 @@
+.TH "hwlocality_diff" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_diff \- Topology differences
+.SH SYNOPSIS
+.br
+.PP
+.SS "Data Structures"
+
+.in +1c
+.ti -1c
+.RI "union \fBhwloc_topology_diff_obj_attr_u\fP"
+.br
+.ti -1c
+.RI "union \fBhwloc_topology_diff_u\fP"
+.br
+.in -1c
+.SS "Typedefs"
+
+.in +1c
+.ti -1c
+.RI "typedef enum \fBhwloc_topology_diff_obj_attr_type_e\fP \fBhwloc_topology_diff_obj_attr_type_t\fP"
+.br
+.ti -1c
+.RI "typedef enum \fBhwloc_topology_diff_type_e\fP \fBhwloc_topology_diff_type_t\fP"
+.br
+.ti -1c
+.RI "typedef union \fBhwloc_topology_diff_u\fP * \fBhwloc_topology_diff_t\fP"
+.br
+.in -1c
+.SS "Enumerations"
+
+.in +1c
+.ti -1c
+.RI "enum \fBhwloc_topology_diff_obj_attr_type_e\fP { \fBHWLOC_TOPOLOGY_DIFF_OBJ_ATTR_SIZE\fP, \fBHWLOC_TOPOLOGY_DIFF_OBJ_ATTR_NAME\fP, \fBHWLOC_TOPOLOGY_DIFF_OBJ_ATTR_INFO\fP }"
+.br
+.ti -1c
+.RI "enum \fBhwloc_topology_diff_type_e\fP { \fBHWLOC_TOPOLOGY_DIFF_OBJ_ATTR\fP, \fBHWLOC_TOPOLOGY_DIFF_TOO_COMPLEX\fP }"
+.br
+.ti -1c
+.RI "enum \fBhwloc_topology_diff_apply_flags_e\fP { \fBHWLOC_TOPOLOGY_DIFF_APPLY_REVERSE\fP }"
+.br
+.in -1c
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "int \fBhwloc_topology_diff_build\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_topology_t\fP newtopology, unsigned long flags, \fBhwloc_topology_diff_t\fP *diff)"
+.br
+.ti -1c
+.RI "int \fBhwloc_topology_diff_apply\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_topology_diff_t\fP diff, unsigned long flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_topology_diff_destroy\fP (\fBhwloc_topology_diff_t\fP diff)"
+.br
+.ti -1c
+.RI "int \fBhwloc_topology_diff_load_xml\fP (const char *xmlpath, \fBhwloc_topology_diff_t\fP *diff, char **refname)"
+.br
+.ti -1c
+.RI "int \fBhwloc_topology_diff_export_xml\fP (\fBhwloc_topology_diff_t\fP diff, const char *refname, const char *xmlpath)"
+.br
+.ti -1c
+.RI "int \fBhwloc_topology_diff_load_xmlbuffer\fP (const char *xmlbuffer, int buflen, \fBhwloc_topology_diff_t\fP *diff, char **refname)"
+.br
+.ti -1c
+.RI "int \fBhwloc_topology_diff_export_xmlbuffer\fP (\fBhwloc_topology_diff_t\fP diff, const char *refname, char **xmlbuffer, int *buflen)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+Applications that manipulate many similar topologies, for instance one for each node of a homogeneous cluster, may want to compress topologies to reduce the memory footprint\&.
+.PP
+This file offers a way to manipulate the difference between topologies and export/import it to/from XML\&. Compression may therefore be achieved by storing one topology entirely while the others are only described by their differences with the former\&. The actual topology can be reconstructed when actually needed by applying the precomputed difference to the reference topology\&.
+.PP
+This interface targets very similar nodes\&. Only very simple differences between topologies are actually supported, for instance a change in the memory size, the name of the object, or some info attribute\&. More complex differences such as adding or removing objects cannot be represented in the difference structures and therefore return errors\&. Differences between object sets or topology-wide allowed sets, cannot be represented either\&.
+.PP
+It means that there is no need to apply the difference when looking at the tree organization (how many levels, how many objects per level, what kind of objects, CPU and node sets, etc) and when binding to objects\&. However the difference must be applied when looking at object attributes such as the name, the memory size or info attributes\&. 
+.SH "Typedef Documentation"
+.PP 
+.SS "typedef enum \fBhwloc_topology_diff_obj_attr_type_e\fP \fBhwloc_topology_diff_obj_attr_type_t\fP"
+
+.PP
+Type of one object attribute difference\&. 
+.SS "typedef union \fBhwloc_topology_diff_u\fP * \fBhwloc_topology_diff_t\fP"
+
+.PP
+One element of a difference list between two topologies\&. 
+.SS "typedef enum \fBhwloc_topology_diff_type_e\fP \fBhwloc_topology_diff_type_t\fP"
+
+.PP
+Type of one element of a difference list\&. 
+.SH "Enumeration Type Documentation"
+.PP 
+.SS "enum \fBhwloc_topology_diff_apply_flags_e\fP"
+
+.PP
+Flags to be given to \fBhwloc_topology_diff_apply()\fP\&. 
+.PP
+\fBEnumerator\fP
+.in +1c
+.TP
+\fB\fIHWLOC_TOPOLOGY_DIFF_APPLY_REVERSE \fP\fP
+Apply topology diff in reverse direction\&. 
+.SS "enum \fBhwloc_topology_diff_obj_attr_type_e\fP"
+
+.PP
+Type of one object attribute difference\&. 
+.PP
+\fBEnumerator\fP
+.in +1c
+.TP
+\fB\fIHWLOC_TOPOLOGY_DIFF_OBJ_ATTR_SIZE \fP\fP
+The object local memory is modified\&. The union is a \fBhwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s\fP (and the index field is ignored)\&. 
+.TP
+\fB\fIHWLOC_TOPOLOGY_DIFF_OBJ_ATTR_NAME \fP\fP
+The object name is modified\&. The union is a \fBhwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s\fP (and the name field is ignored)\&. 
+.TP
+\fB\fIHWLOC_TOPOLOGY_DIFF_OBJ_ATTR_INFO \fP\fP
+the value of an info attribute is modified\&. The union is a \fBhwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s\fP\&. 
+.SS "enum \fBhwloc_topology_diff_type_e\fP"
+
+.PP
+Type of one element of a difference list\&. 
+.PP
+\fBEnumerator\fP
+.in +1c
+.TP
+\fB\fIHWLOC_TOPOLOGY_DIFF_OBJ_ATTR \fP\fP
+An object attribute was changed\&. The union is a \fBhwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s\fP\&. 
+.TP
+\fB\fIHWLOC_TOPOLOGY_DIFF_TOO_COMPLEX \fP\fP
+The difference is too complex, it cannot be represented\&. The difference below this object has not been checked\&. \fBhwloc_topology_diff_build()\fP will return 1\&. The union is a \fBhwloc_topology_diff_u::hwloc_topology_diff_too_complex_s\fP\&. 
+.SH "Function Documentation"
+.PP 
+.SS "int hwloc_topology_diff_apply (\fBhwloc_topology_t\fP topology, \fBhwloc_topology_diff_t\fP diff, unsigned long flags)"
+
+.PP
+Apply a topology diff to an existing topology\&. \fCflags\fP is an OR'ed set of \fBhwloc_topology_diff_apply_flags_e\fP\&.
+.PP
+The new topology is modified in place\&. \fBhwloc_topology_dup()\fP may be used to duplicate it before patching\&.
+.PP
+If the difference cannot be applied entirely, all previous applied elements are unapplied before returning\&.
+.PP
+\fBReturns\fP
+.RS 4
+0 on success\&.
+.PP
+-N if applying the difference failed while trying to apply the N-th part of the difference\&. For instance -1 is returned if the very first difference element could not be applied\&. 
+.RE
+.PP
+
+.SS "int hwloc_topology_diff_build (\fBhwloc_topology_t\fP topology, \fBhwloc_topology_t\fP newtopology, unsigned long flags, \fBhwloc_topology_diff_t\fP * diff)"
+
+.PP
+Compute the difference between 2 topologies\&. The difference is stored as a list of \fBhwloc_topology_diff_t\fP entries starting at \fCdiff\fP\&. It is computed by doing a depth-first traversal of both topology trees simultaneously\&.
+.PP
+If the difference between 2 objects is too complex to be represented (for instance if some objects have different types, or different numbers of children), a special diff entry of type \fBHWLOC_TOPOLOGY_DIFF_TOO_COMPLEX\fP is queued\&. The computation of the diff does not continue below these objects\&. So each such diff entry means that the difference between two subtrees could not be computed\&.
+.PP
+\fBReturns\fP
+.RS 4
+0 if the difference can be represented properly\&.
+.PP
+0 with \fCdiff\fP pointing to NULL if there is no difference between the topologies\&.
+.PP
+1 if the difference is too complex (see above)\&. Some entries in the list will be of type \fBHWLOC_TOPOLOGY_DIFF_TOO_COMPLEX\fP\&.
+.PP
+-1 on any other error\&.
+.RE
+.PP
+\fBNote\fP
+.RS 4
+\fCflags\fP is currently not used\&. It should be 0\&.
+.PP
+The output diff has to be freed with \fBhwloc_topology_diff_destroy()\fP\&.
+.PP
+The output diff can only be exported to XML or passed to \fBhwloc_topology_diff_apply()\fP if 0 was returned, i\&.e\&. if no entry of type \fBHWLOC_TOPOLOGY_DIFF_TOO_COMPLEX\fP is listed\&.
+.PP
+The output diff may be modified by removing some entries from the list\&. The removed entries should be freed by passing them to to \fBhwloc_topology_diff_destroy()\fP (possible as another list)\&. 
+.RE
+.PP
+
+.SS "int hwloc_topology_diff_destroy (\fBhwloc_topology_diff_t\fP diff)"
+
+.PP
+Destroy a list of topology differences\&. 
+.SS "int hwloc_topology_diff_export_xml (\fBhwloc_topology_diff_t\fP diff, const char * refname, const char * xmlpath)"
+
+.PP
+Export a list of topology differences to a XML file\&. If not \fCNULL\fP, \fCrefname\fP defines an identifier string for the reference topology which was used as a base when computing this difference\&. This identifier is usually the name of the other XML file that contains the reference topology\&. This attribute is given back when reading the diff from XML\&. 
+.SS "int hwloc_topology_diff_export_xmlbuffer (\fBhwloc_topology_diff_t\fP diff, const char * refname, char ** xmlbuffer, int * buflen)"
+
+.PP
+Export a list of topology differences to a XML buffer\&. If not \fCNULL\fP, \fCrefname\fP defines an identifier string for the reference topology which was used as a base when computing this difference\&. This identifier is usually the name of the other XML file that contains the reference topology\&. This attribute is given back when reading the diff from XML\&.
+.PP
+The returned buffer ends with a \\0 that is included in the returned length\&.
+.PP
+\fBNote\fP
+.RS 4
+The XML buffer should later be freed with \fBhwloc_free_xmlbuffer()\fP\&. 
+.RE
+.PP
+
+.SS "int hwloc_topology_diff_load_xml (const char * xmlpath, \fBhwloc_topology_diff_t\fP * diff, char ** refname)"
+
+.PP
+Load a list of topology differences from a XML file\&. If not \fCNULL\fP, \fCrefname\fP will be filled with the identifier string of the reference topology for the difference file, if any was specified in the XML file\&. This identifier is usually the name of the other XML file that contains the reference topology\&.
+.PP
+\fBNote\fP
+.RS 4
+the pointer returned in refname should later be freed by the caller\&. 
+.RE
+.PP
+
+.SS "int hwloc_topology_diff_load_xmlbuffer (const char * xmlbuffer, int buflen, \fBhwloc_topology_diff_t\fP * diff, char ** refname)"
+
+.PP
+Load a list of topology differences from a XML buffer\&. If not \fCNULL\fP, \fCrefname\fP will be filled with the identifier string of the reference topology for the difference file, if any was specified in the XML file\&. This identifier is usually the name of the other XML file that contains the reference topology\&.
+.PP
+\fBNote\fP
+.RS 4
+the pointer returned in refname should later be freed by the caller\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_disc_backends.3 b/doc/doxygen-doc/man/man3/hwlocality_disc_backends.3
new file mode 100644
index 00000000..a238fb52
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_disc_backends.3
@@ -0,0 +1,117 @@
+.TH "hwlocality_disc_backends" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_disc_backends \- Components and Plugins: Discovery backends
+.SH SYNOPSIS
+.br
+.PP
+.SS "Data Structures"
+
+.in +1c
+.ti -1c
+.RI "struct \fBhwloc_disc_status\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_backend\fP"
+.br
+.in -1c
+.SS "Typedefs"
+
+.in +1c
+.ti -1c
+.RI "typedef enum \fBhwloc_disc_phase_e\fP \fBhwloc_disc_phase_t\fP"
+.br
+.in -1c
+.SS "Enumerations"
+
+.in +1c
+.ti -1c
+.RI "enum \fBhwloc_disc_phase_e\fP { \fBHWLOC_DISC_PHASE_GLOBAL\fP, \fBHWLOC_DISC_PHASE_CPU\fP, \fBHWLOC_DISC_PHASE_MEMORY\fP, \fBHWLOC_DISC_PHASE_PCI\fP, \fBHWLOC_DISC_PHASE_IO\fP, \fBHWLOC_DISC_PHASE_MISC\fP, \fBHWLOC_DISC_PHASE_ANNOTATE\fP, \fBHWLOC_DISC_PHASE_TWEAK\fP }"
+.br
+.ti -1c
+.RI "enum \fBhwloc_disc_status_flag_e\fP { \fBHWLOC_DISC_STATUS_FLAG_GOT_ALLOWED_RESOURCES\fP }"
+.br
+.in -1c
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "struct \fBhwloc_backend\fP * \fBhwloc_backend_alloc\fP (struct hwloc_topology *topology, struct \fBhwloc_disc_component\fP *component)"
+.br
+.ti -1c
+.RI "int \fBhwloc_backend_enable\fP (struct \fBhwloc_backend\fP *backend)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+
+.PP
+\fBNote\fP
+.RS 4
+These structures and functions may change when \fBHWLOC_COMPONENT_ABI\fP is modified\&. 
+.RE
+.PP
+
+.SH "Typedef Documentation"
+.PP 
+.SS "typedef enum \fBhwloc_disc_phase_e\fP \fBhwloc_disc_phase_t\fP"
+
+.PP
+Discovery phase\&. 
+.SH "Enumeration Type Documentation"
+.PP 
+.SS "enum \fBhwloc_disc_phase_e\fP"
+
+.PP
+Discovery phase\&. 
+.PP
+\fBEnumerator\fP
+.in +1c
+.TP
+\fB\fIHWLOC_DISC_PHASE_GLOBAL \fP\fP
+xml or synthetic, platform-specific components such as bgq\&. Discovers everything including CPU, memory, I/O and everything else\&. A component with a Global phase usually excludes all other phases\&. 
+.TP
+\fB\fIHWLOC_DISC_PHASE_CPU \fP\fP
+CPU discovery\&. 
+.TP
+\fB\fIHWLOC_DISC_PHASE_MEMORY \fP\fP
+Attach memory to existing CPU objects\&. 
+.TP
+\fB\fIHWLOC_DISC_PHASE_PCI \fP\fP
+Attach PCI devices and bridges to existing CPU objects\&. 
+.TP
+\fB\fIHWLOC_DISC_PHASE_IO \fP\fP
+I/O discovery that requires PCI devices (OS devices such as OpenCL, CUDA, etc\&.)\&. 
+.TP
+\fB\fIHWLOC_DISC_PHASE_MISC \fP\fP
+Misc objects that gets added below anything else\&. 
+.TP
+\fB\fIHWLOC_DISC_PHASE_ANNOTATE \fP\fP
+Annotating existing objects, adding distances, etc\&. 
+.TP
+\fB\fIHWLOC_DISC_PHASE_TWEAK \fP\fP
+Final tweaks to a ready-to-use topology\&. This phase runs once the topology is loaded, before it is returned to the topology\&. Hence it may only use the main hwloc API for modifying the topology, for instance by restricting it, adding info attributes, etc\&. 
+.SS "enum \fBhwloc_disc_status_flag_e\fP"
+
+.PP
+Discovery status flags\&. 
+.PP
+\fBEnumerator\fP
+.in +1c
+.TP
+\fB\fIHWLOC_DISC_STATUS_FLAG_GOT_ALLOWED_RESOURCES \fP\fP
+The sets of allowed resources were already retrieved\&. 
+.SH "Function Documentation"
+.PP 
+.SS "struct \fBhwloc_backend\fP* hwloc_backend_alloc (struct hwloc_topology * topology, struct \fBhwloc_disc_component\fP * component)"
+
+.PP
+Allocate a backend structure, set good default values, initialize backend->component and topology, etc\&. The caller will then modify whatever needed, and call \fBhwloc_backend_enable()\fP\&. 
+.SS "int hwloc_backend_enable (struct \fBhwloc_backend\fP * backend)"
+
+.PP
+Enable a previously allocated and setup backend\&. 
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_disc_components.3 b/doc/doxygen-doc/man/man3/hwlocality_disc_components.3
new file mode 100644
index 00000000..c9ca5e13
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_disc_components.3
@@ -0,0 +1,28 @@
+.TH "hwlocality_disc_components" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_disc_components \- Components and Plugins: Discovery components
+.SH SYNOPSIS
+.br
+.PP
+.SS "Data Structures"
+
+.in +1c
+.ti -1c
+.RI "struct \fBhwloc_disc_component\fP"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+
+.PP
+\fBNote\fP
+.RS 4
+These structures and functions may change when \fBHWLOC_COMPONENT_ABI\fP is modified\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_distances_add.3 b/doc/doxygen-doc/man/man3/hwlocality_distances_add.3
new file mode 100644
index 00000000..abaab74b
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_distances_add.3
@@ -0,0 +1,139 @@
+.TH "hwlocality_distances_add" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_distances_add \- Add distances between objects
+.SH SYNOPSIS
+.br
+.PP
+.SS "Typedefs"
+
+.in +1c
+.ti -1c
+.RI "typedef void * \fBhwloc_distances_add_handle_t\fP"
+.br
+.in -1c
+.SS "Enumerations"
+
+.in +1c
+.ti -1c
+.RI "enum \fBhwloc_distances_add_flag_e\fP { \fBHWLOC_DISTANCES_ADD_FLAG_GROUP\fP, \fBHWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE\fP }"
+.br
+.in -1c
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "\fBhwloc_distances_add_handle_t\fP \fBhwloc_distances_add_create\fP (\fBhwloc_topology_t\fP topology, const char *name, unsigned long kind, unsigned long flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_distances_add_values\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_distances_add_handle_t\fP handle, unsigned nbobjs, \fBhwloc_obj_t\fP *objs, hwloc_uint64_t *values, unsigned long flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_distances_add_commit\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_distances_add_handle_t\fP handle, unsigned long flags)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+The usual way to add distances is: 
+.PP
+.nf
+hwloc_distances_add_handle_t handle;
+int err = -1;
+handle = hwloc_distances_add_create(topology, "name", kind, 0);
+if (handle) {
+  err = hwloc_distances_add_values(topology, handle, nbobjs, objs, values, 0);
+  if (!err)
+    err = hwloc_distances_add_commit(topology, handle, flags);
+}
+
+.fi
+.PP
+ If \fCerr\fP is \fC0\fP at the end, then addition was successful\&. 
+.SH "Typedef Documentation"
+.PP 
+.SS "typedef void* \fBhwloc_distances_add_handle_t\fP"
+
+.PP
+Handle to a new distances structure during its addition to the topology\&. 
+.SH "Enumeration Type Documentation"
+.PP 
+.SS "enum \fBhwloc_distances_add_flag_e\fP"
+
+.PP
+Flags for adding a new distances to a topology\&. 
+.PP
+\fBEnumerator\fP
+.in +1c
+.TP
+\fB\fIHWLOC_DISTANCES_ADD_FLAG_GROUP \fP\fP
+Try to group objects based on the newly provided distance information\&. This is ignored for distances between objects of different types\&. 
+.TP
+\fB\fIHWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE \fP\fP
+If grouping, consider the distance values as inaccurate and relax the comparisons during the grouping algorithms\&. The actual accuracy may be modified through the HWLOC_GROUPING_ACCURACY environment variable (see \fBEnvironment Variables\fP)\&. 
+.SH "Function Documentation"
+.PP 
+.SS "int hwloc_distances_add_commit (\fBhwloc_topology_t\fP topology, \fBhwloc_distances_add_handle_t\fP handle, unsigned long flags)"
+
+.PP
+Commit a new distances structure\&. This function finalizes the distances structure and inserts in it the topology\&.
+.PP
+Parameter \fChandle\fP was previously returned by \fBhwloc_distances_add_create()\fP\&. Then objects and values were specified with \fBhwloc_distances_add_values()\fP\&.
+.PP
+\fCflags\fP configures the behavior of the function using an optional OR'ed set of \fBhwloc_distances_add_flag_e\fP\&. It may be used to request the grouping of existing objects based on distances\&.
+.PP
+On error, the temporary distances structure and its content are destroyed\&.
+.PP
+\fBReturns\fP
+.RS 4
+\fC0\fP on success\&. 
+.PP
+\fC-1\fP on error\&. 
+.RE
+.PP
+
+.SS "\fBhwloc_distances_add_handle_t\fP hwloc_distances_add_create (\fBhwloc_topology_t\fP topology, const char * name, unsigned long kind, unsigned long flags)"
+
+.PP
+Create a new empty distances structure\&. Create an empty distances structure to be filled with \fBhwloc_distances_add_values()\fP and then committed with \fBhwloc_distances_add_commit()\fP\&.
+.PP
+Parameter \fCname\fP is optional, it may be \fCNULL\fP\&. Otherwise, it will be copied internally and may later be freed by the caller\&.
+.PP
+\fCkind\fP specifies the kind of distance as a OR'ed set of \fBhwloc_distances_kind_e\fP\&. Kind \fBHWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES\fP will be automatically set according to objects having different types in \fBhwloc_distances_add_values()\fP\&.
+.PP
+\fCflags\fP must be \fC0\fP for now\&.
+.PP
+\fBReturns\fP
+.RS 4
+A hwloc_distances_add_handle_t that should then be passed to \fBhwloc_distances_add_values()\fP and \fBhwloc_distances_add_commit()\fP\&.
+.PP
+\fCNULL\fP on error\&. 
+.RE
+.PP
+
+.SS "int hwloc_distances_add_values (\fBhwloc_topology_t\fP topology, \fBhwloc_distances_add_handle_t\fP handle, unsigned nbobjs, \fBhwloc_obj_t\fP * objs, hwloc_uint64_t * values, unsigned long flags)"
+
+.PP
+Specify the objects and values in a new empty distances structure\&. Specify the objects and values for a new distances structure that was returned as a handle by \fBhwloc_distances_add_create()\fP\&. The structure must then be committed with \fBhwloc_distances_add_commit()\fP\&.
+.PP
+The number of objects is \fCnbobjs\fP and the array of objects is \fCobjs\fP\&. Distance values are stored as a one-dimension array in \fCvalues\fP\&. The distance from object i to object j is in slot i*nbobjs+j\&.
+.PP
+\fCnbobjs\fP must be at least 2\&.
+.PP
+Arrays \fCobjs\fP and \fCvalues\fP will be copied internally, they may later be freed by the caller\&.
+.PP
+On error, the temporary distances structure and its content are destroyed\&.
+.PP
+\fCflags\fP must be \fC0\fP for now\&.
+.PP
+\fBReturns\fP
+.RS 4
+\fC0\fP on success\&. 
+.PP
+\fC-1\fP on error\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_distances_consult.3 b/doc/doxygen-doc/man/man3/hwlocality_distances_consult.3
new file mode 100644
index 00000000..75e2b5c4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_distances_consult.3
@@ -0,0 +1,48 @@
+.TH "hwlocality_distances_consult" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_distances_consult \- Helpers for consulting distance matrices
+.SH SYNOPSIS
+.br
+.PP
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "static int \fBhwloc_distances_obj_index\fP (struct \fBhwloc_distances_s\fP *distances, \fBhwloc_obj_t\fP obj)"
+.br
+.ti -1c
+.RI "static int \fBhwloc_distances_obj_pair_values\fP (struct \fBhwloc_distances_s\fP *distances, \fBhwloc_obj_t\fP obj1, \fBhwloc_obj_t\fP obj2, hwloc_uint64_t *value1to2, hwloc_uint64_t *value2to1)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+
+.SH "Function Documentation"
+.PP 
+.SS "static int hwloc_distances_obj_index (struct \fBhwloc_distances_s\fP * distances, \fBhwloc_obj_t\fP obj)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Find the index of an object in a distances structure\&. 
+.PP
+\fBReturns\fP
+.RS 4
+-1 if object \fCobj\fP is not involved in structure \fCdistances\fP\&. 
+.RE
+.PP
+
+.SS "static int hwloc_distances_obj_pair_values (struct \fBhwloc_distances_s\fP * distances, \fBhwloc_obj_t\fP obj1, \fBhwloc_obj_t\fP obj2, hwloc_uint64_t * value1to2, hwloc_uint64_t * value2to1)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Find the values between two objects in a distance matrices\&. The distance from \fCobj1\fP to \fCobj2\fP is stored in the value pointed by \fCvalue1to2\fP and reciprocally\&.
+.PP
+\fBReturns\fP
+.RS 4
+-1 if object \fCobj1\fP or \fCobj2\fP is not involved in structure \fCdistances\fP\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_distances_get.3 b/doc/doxygen-doc/man/man3/hwlocality_distances_get.3
new file mode 100644
index 00000000..7347685f
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_distances_get.3
@@ -0,0 +1,175 @@
+.TH "hwlocality_distances_get" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_distances_get \- Retrieve distances between objects
+.SH SYNOPSIS
+.br
+.PP
+.SS "Data Structures"
+
+.in +1c
+.ti -1c
+.RI "struct \fBhwloc_distances_s\fP"
+.br
+.in -1c
+.SS "Enumerations"
+
+.in +1c
+.ti -1c
+.RI "enum \fBhwloc_distances_kind_e\fP { \fBHWLOC_DISTANCES_KIND_FROM_OS\fP, \fBHWLOC_DISTANCES_KIND_FROM_USER\fP, \fBHWLOC_DISTANCES_KIND_MEANS_LATENCY\fP, \fBHWLOC_DISTANCES_KIND_MEANS_BANDWIDTH\fP, \fBHWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES\fP }"
+.br
+.ti -1c
+.RI "enum \fBhwloc_distances_transform_e\fP { \fBHWLOC_DISTANCES_TRANSFORM_REMOVE_NULL\fP, \fBHWLOC_DISTANCES_TRANSFORM_LINKS\fP, \fBHWLOC_DISTANCES_TRANSFORM_MERGE_SWITCH_PORTS\fP, \fBHWLOC_DISTANCES_TRANSFORM_TRANSITIVE_CLOSURE\fP }"
+.br
+.in -1c
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "int \fBhwloc_distances_get\fP (\fBhwloc_topology_t\fP topology, unsigned *nr, struct \fBhwloc_distances_s\fP **distances, unsigned long kind, unsigned long flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_distances_get_by_depth\fP (\fBhwloc_topology_t\fP topology, int depth, unsigned *nr, struct \fBhwloc_distances_s\fP **distances, unsigned long kind, unsigned long flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_distances_get_by_type\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type, unsigned *nr, struct \fBhwloc_distances_s\fP **distances, unsigned long kind, unsigned long flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_distances_get_by_name\fP (\fBhwloc_topology_t\fP topology, const char *name, unsigned *nr, struct \fBhwloc_distances_s\fP **distances, unsigned long flags)"
+.br
+.ti -1c
+.RI "const char * \fBhwloc_distances_get_name\fP (\fBhwloc_topology_t\fP topology, struct \fBhwloc_distances_s\fP *distances)"
+.br
+.ti -1c
+.RI "void \fBhwloc_distances_release\fP (\fBhwloc_topology_t\fP topology, struct \fBhwloc_distances_s\fP *distances)"
+.br
+.ti -1c
+.RI "int \fBhwloc_distances_transform\fP (\fBhwloc_topology_t\fP topology, struct \fBhwloc_distances_s\fP *distances, enum \fBhwloc_distances_transform_e\fP transform, void *transform_attr, unsigned long flags)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+
+.SH "Enumeration Type Documentation"
+.PP 
+.SS "enum \fBhwloc_distances_kind_e\fP"
+
+.PP
+Kinds of distance matrices\&. The \fCkind\fP attribute of struct \fBhwloc_distances_s\fP is a OR'ed set of kinds\&.
+.PP
+A kind of format HWLOC_DISTANCES_KIND_FROM_* specifies where the distance information comes from, if known\&.
+.PP
+A kind of format HWLOC_DISTANCES_KIND_MEANS_* specifies whether values are latencies or bandwidths, if applicable\&. 
+.PP
+\fBEnumerator\fP
+.in +1c
+.TP
+\fB\fIHWLOC_DISTANCES_KIND_FROM_OS \fP\fP
+These distances were obtained from the operating system or hardware\&. 
+.TP
+\fB\fIHWLOC_DISTANCES_KIND_FROM_USER \fP\fP
+These distances were provided by the user\&. 
+.TP
+\fB\fIHWLOC_DISTANCES_KIND_MEANS_LATENCY \fP\fP
+Distance values are similar to latencies between objects\&. Values are smaller for closer objects, hence minimal on the diagonal of the matrix (distance between an object and itself)\&. It could also be the number of network hops between objects, etc\&. 
+.TP
+\fB\fIHWLOC_DISTANCES_KIND_MEANS_BANDWIDTH \fP\fP
+Distance values are similar to bandwidths between objects\&. Values are higher for closer objects, hence maximal on the diagonal of the matrix (distance between an object and itself)\&. Such values are currently ignored for distance-based grouping\&. 
+.TP
+\fB\fIHWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES \fP\fP
+This distances structure covers objects of different types\&. This may apply to the 'NVLinkBandwidth' structure in presence of a NVSwitch or POWER processor NVLink port\&. 
+.SS "enum \fBhwloc_distances_transform_e\fP"
+
+.PP
+Transformations of distances structures\&. 
+.PP
+\fBEnumerator\fP
+.in +1c
+.TP
+\fB\fIHWLOC_DISTANCES_TRANSFORM_REMOVE_NULL \fP\fP
+Remove \fCNULL\fP objects from the distances structure\&. Every object that was replaced with \fCNULL\fP in the \fCobjs\fP array is removed and the \fCvalues\fP array is updated accordingly\&.
+.PP
+At least \fC2\fP objects must remain, otherwise \fBhwloc_distances_transform()\fP will return \fC-1\fP with \fCerrno\fP set to \fCEINVAL\fP\&.
+.PP
+\fCkind\fP will be updated with or without \fBHWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES\fP according to the remaining objects\&. 
+.TP
+\fB\fIHWLOC_DISTANCES_TRANSFORM_LINKS \fP\fP
+Replace bandwidth values with a number of links\&. Usually all values will be either \fC0\fP (no link) or \fC1\fP (one link)\&. However some matrices could get larger values if some pairs of peers are connected by different numbers of links\&.
+.PP
+Values on the diagonal are set to \fC0\fP\&.
+.PP
+This transformation only applies to bandwidth matrices\&. 
+.TP
+\fB\fIHWLOC_DISTANCES_TRANSFORM_MERGE_SWITCH_PORTS \fP\fP
+Merge switches with multiple ports into a single object\&. This currently only applies to NVSwitches where GPUs seem connected to different separate switch ports in the NVLinkBandwidth matrix\&. This transformation will replace all of them with the same port connected to all GPUs\&. Other ports are removed by applying \fBHWLOC_DISTANCES_TRANSFORM_REMOVE_NULL\fP internally\&. 
+.TP
+\fB\fIHWLOC_DISTANCES_TRANSFORM_TRANSITIVE_CLOSURE \fP\fP
+Apply a transitive closure to the matrix to connect objects across switches\&. This currently only applies to GPUs and NVSwitches in the NVLinkBandwidth matrix\&. All pairs of GPUs will be reported as directly connected\&. 
+.SH "Function Documentation"
+.PP 
+.SS "int hwloc_distances_get (\fBhwloc_topology_t\fP topology, unsigned * nr, struct \fBhwloc_distances_s\fP ** distances, unsigned long kind, unsigned long flags)"
+
+.PP
+Retrieve distance matrices\&. Retrieve distance matrices from the topology into the \fCdistances\fP array\&.
+.PP
+\fCflags\fP is currently unused, should be \fC0\fP\&.
+.PP
+\fCkind\fP serves as a filter\&. If \fC0\fP, all distance matrices are returned\&. If it contains some HWLOC_DISTANCES_KIND_FROM_*, only distance matrices whose kind matches one of these are returned\&. If it contains some HWLOC_DISTANCES_KIND_MEANS_*, only distance matrices whose kind matches one of these are returned\&.
+.PP
+On input, \fCnr\fP points to the number of distance matrices that may be stored in \fCdistances\fP\&. On output, \fCnr\fP points to the number of distance matrices that were actually found, even if some of them couldn't be stored in \fCdistances\fP\&. Distance matrices that couldn't be stored are ignored, but the function still returns success (\fC0\fP)\&. The caller may find out by comparing the value pointed by \fCnr\fP before and after the function call\&.
+.PP
+Each distance matrix returned in the \fCdistances\fP array should be released by the caller using \fBhwloc_distances_release()\fP\&. 
+.SS "int hwloc_distances_get_by_depth (\fBhwloc_topology_t\fP topology, int depth, unsigned * nr, struct \fBhwloc_distances_s\fP ** distances, unsigned long kind, unsigned long flags)"
+
+.PP
+Retrieve distance matrices for object at a specific depth in the topology\&. Identical to \fBhwloc_distances_get()\fP with the additional \fCdepth\fP filter\&. 
+.SS "int hwloc_distances_get_by_name (\fBhwloc_topology_t\fP topology, const char * name, unsigned * nr, struct \fBhwloc_distances_s\fP ** distances, unsigned long flags)"
+
+.PP
+Retrieve a distance matrix with the given name\&. Usually only one distances structure may match a given name\&.
+.PP
+The name of the most common structure is 'NUMALatency'\&. Others include 'XGMIBandwidth', 'XGMIHops', 'XeLinkBandwidth', and 'NVLinkBandwidth'\&. 
+.SS "int hwloc_distances_get_by_type (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type, unsigned * nr, struct \fBhwloc_distances_s\fP ** distances, unsigned long kind, unsigned long flags)"
+
+.PP
+Retrieve distance matrices for object of a specific type\&. Identical to \fBhwloc_distances_get()\fP with the additional \fCtype\fP filter\&. 
+.SS "const char* hwloc_distances_get_name (\fBhwloc_topology_t\fP topology, struct \fBhwloc_distances_s\fP * distances)"
+
+.PP
+Get a description of what a distances structure contains\&. For instance 'NUMALatency' for hardware-provided NUMA distances (ACPI SLIT), or NULL if unknown\&. 
+.SS "void hwloc_distances_release (\fBhwloc_topology_t\fP topology, struct \fBhwloc_distances_s\fP * distances)"
+
+.PP
+Release a distance matrix structure previously returned by \fBhwloc_distances_get()\fP\&. 
+.PP
+\fBNote\fP
+.RS 4
+This function is not required if the structure is removed with \fBhwloc_distances_release_remove()\fP\&. 
+.RE
+.PP
+
+.SS "int hwloc_distances_transform (\fBhwloc_topology_t\fP topology, struct \fBhwloc_distances_s\fP * distances, enum \fBhwloc_distances_transform_e\fP transform, void * transform_attr, unsigned long flags)"
+
+.PP
+Apply a transformation to a distances structure\&. Modify a distances structure that was previously obtained with \fBhwloc_distances_get()\fP or one of its variants\&.
+.PP
+This modifies the local copy of the distances structures but does not modify the distances information stored inside the topology (retrieved by another call to \fBhwloc_distances_get()\fP or exported to XML)\&. To do so, one should add a new distances structure with same name, kind, objects and values (see \fBAdd distances between objects\fP) and then remove this old one with \fBhwloc_distances_release_remove()\fP\&.
+.PP
+\fCtransform\fP must be one of the transformations listed in \fBhwloc_distances_transform_e\fP\&.
+.PP
+These transformations may modify the contents of the \fCobjs\fP or \fCvalues\fP arrays\&.
+.PP
+\fCtransform_attr\fP must be \fCNULL\fP for now\&.
+.PP
+\fCflags\fP must be \fC0\fP for now\&.
+.PP
+\fBNote\fP
+.RS 4
+Objects in distances array \fCobjs\fP may be directly modified in place without using \fBhwloc_distances_transform()\fP\&. One may use \fBhwloc_get_obj_with_same_locality()\fP to easily convert between similar objects of different types\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_distances_remove.3 b/doc/doxygen-doc/man/man3/hwlocality_distances_remove.3
new file mode 100644
index 00000000..245ee0c7
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_distances_remove.3
@@ -0,0 +1,50 @@
+.TH "hwlocality_distances_remove" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_distances_remove \- Remove distances between objects
+.SH SYNOPSIS
+.br
+.PP
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "int \fBhwloc_distances_remove\fP (\fBhwloc_topology_t\fP topology)"
+.br
+.ti -1c
+.RI "int \fBhwloc_distances_remove_by_depth\fP (\fBhwloc_topology_t\fP topology, int depth)"
+.br
+.ti -1c
+.RI "static int \fBhwloc_distances_remove_by_type\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type)"
+.br
+.ti -1c
+.RI "int \fBhwloc_distances_release_remove\fP (\fBhwloc_topology_t\fP topology, struct \fBhwloc_distances_s\fP *distances)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+
+.SH "Function Documentation"
+.PP 
+.SS "int hwloc_distances_release_remove (\fBhwloc_topology_t\fP topology, struct \fBhwloc_distances_s\fP * distances)"
+
+.PP
+Release and remove the given distance matrice from the topology\&. This function includes a call to \fBhwloc_distances_release()\fP\&. 
+.SS "int hwloc_distances_remove (\fBhwloc_topology_t\fP topology)"
+
+.PP
+Remove all distance matrices from a topology\&. Remove all distance matrices, either provided by the user or gathered through the OS\&.
+.PP
+If these distances were used to group objects, these additional Group objects are not removed from the topology\&. 
+.SS "int hwloc_distances_remove_by_depth (\fBhwloc_topology_t\fP topology, int depth)"
+
+.PP
+Remove distance matrices for objects at a specific depth in the topology\&. Identical to \fBhwloc_distances_remove()\fP but only applies to one level of the topology\&. 
+.SS "static int hwloc_distances_remove_by_type (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Remove distance matrices for objects of a specific type in the topology\&. Identical to \fBhwloc_distances_remove()\fP but only applies to one level of the topology\&. 
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_generic_components.3 b/doc/doxygen-doc/man/man3/hwlocality_generic_components.3
new file mode 100644
index 00000000..51734dce
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_generic_components.3
@@ -0,0 +1,63 @@
+.TH "hwlocality_generic_components" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_generic_components \- Components and Plugins: Generic components
+.SH SYNOPSIS
+.br
+.PP
+.SS "Data Structures"
+
+.in +1c
+.ti -1c
+.RI "struct \fBhwloc_component\fP"
+.br
+.in -1c
+.SS "Typedefs"
+
+.in +1c
+.ti -1c
+.RI "typedef enum \fBhwloc_component_type_e\fP \fBhwloc_component_type_t\fP"
+.br
+.in -1c
+.SS "Enumerations"
+
+.in +1c
+.ti -1c
+.RI "enum \fBhwloc_component_type_e\fP { \fBHWLOC_COMPONENT_TYPE_DISC\fP, \fBHWLOC_COMPONENT_TYPE_XML\fP }"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+
+.PP
+\fBNote\fP
+.RS 4
+These structures and functions may change when \fBHWLOC_COMPONENT_ABI\fP is modified\&. 
+.RE
+.PP
+
+.SH "Typedef Documentation"
+.PP 
+.SS "typedef enum \fBhwloc_component_type_e\fP \fBhwloc_component_type_t\fP"
+
+.PP
+Generic component type\&. 
+.SH "Enumeration Type Documentation"
+.PP 
+.SS "enum \fBhwloc_component_type_e\fP"
+
+.PP
+Generic component type\&. 
+.PP
+\fBEnumerator\fP
+.in +1c
+.TP
+\fB\fIHWLOC_COMPONENT_TYPE_DISC \fP\fP
+The data field must point to a struct \fBhwloc_disc_component\fP\&. 
+.TP
+\fB\fIHWLOC_COMPONENT_TYPE_XML \fP\fP
+The data field must point to a struct hwloc_xml_component\&. 
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_gl.3 b/doc/doxygen-doc/man/man3/hwlocality_gl.3
new file mode 100644
index 00000000..add98031
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_gl.3
@@ -0,0 +1,82 @@
+.TH "hwlocality_gl" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_gl \- Interoperability with OpenGL displays
+.SH SYNOPSIS
+.br
+.PP
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_gl_get_display_osdev_by_port_device\fP (\fBhwloc_topology_t\fP topology, unsigned port, unsigned device)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_gl_get_display_osdev_by_name\fP (\fBhwloc_topology_t\fP topology, const char *name)"
+.br
+.ti -1c
+.RI "static int \fBhwloc_gl_get_display_by_osdev\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP osdev, unsigned *port, unsigned *device)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+This interface offers ways to retrieve topology information about OpenGL displays\&.
+.PP
+Only the NVIDIA display locality information is currently available, using the NV-CONTROL X11 extension and the NVCtrl library\&. 
+.SH "Function Documentation"
+.PP 
+.SS "static int hwloc_gl_get_display_by_osdev (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP osdev, unsigned * port, unsigned * device)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the OpenGL display port and device corresponding to the given hwloc OS object\&. Retrieves the OpenGL display port (server) in \fCport\fP and device (screen) in \fCscreen\fP that correspond to the given hwloc OS device object\&.
+.PP
+\fBReturns\fP
+.RS 4
+\fC-1\fP if none could be found\&.
+.RE
+.PP
+The topology \fCtopology\fP does not necessarily have to match the current machine\&. For instance the topology may be an XML import of a remote host\&. I/O devices detection and the GL component must be enabled in the topology\&. 
+.SS "static \fBhwloc_obj_t\fP hwloc_gl_get_display_osdev_by_name (\fBhwloc_topology_t\fP topology, const char * name)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the hwloc OS device object corresponding to the OpenGL display given by name\&. 
+.PP
+\fBReturns\fP
+.RS 4
+The hwloc OS device object describing the OpenGL display whose name is \fCname\fP, built as ':port\&.device' such as ':0\&.0' \&. 
+.PP
+\fCNULL\fP if none could be found\&.
+.RE
+.PP
+The topology \fCtopology\fP does not necessarily have to match the current machine\&. For instance the topology may be an XML import of a remote host\&. I/O devices detection and the GL component must be enabled in the topology\&.
+.PP
+\fBNote\fP
+.RS 4
+The corresponding PCI device object can be obtained by looking at the OS device parent object (unless PCI devices are filtered out)\&. 
+.RE
+.PP
+
+.SS "static \fBhwloc_obj_t\fP hwloc_gl_get_display_osdev_by_port_device (\fBhwloc_topology_t\fP topology, unsigned port, unsigned device)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the hwloc OS device object corresponding to the OpenGL display given by port and device index\&. 
+.PP
+\fBReturns\fP
+.RS 4
+The hwloc OS device object describing the OpenGL display whose port (server) is \fCport\fP and device (screen) is \fCdevice\fP\&. 
+.PP
+\fCNULL\fP if none could be found\&.
+.RE
+.PP
+The topology \fCtopology\fP does not necessarily have to match the current machine\&. For instance the topology may be an XML import of a remote host\&. I/O devices detection and the GL component must be enabled in the topology\&.
+.PP
+\fBNote\fP
+.RS 4
+The corresponding PCI device object can be obtained by looking at the OS device parent object (unless PCI devices are filtered out)\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_glibc_sched.3 b/doc/doxygen-doc/man/man3/hwlocality_glibc_sched.3
new file mode 100644
index 00000000..2947a302
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_glibc_sched.3
@@ -0,0 +1,45 @@
+.TH "hwlocality_glibc_sched" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_glibc_sched \- Interoperability with glibc sched affinity
+.SH SYNOPSIS
+.br
+.PP
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "static int \fBhwloc_cpuset_to_glibc_sched_affinity\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP hwlocset, cpu_set_t *schedset, size_t schedsetsize)"
+.br
+.ti -1c
+.RI "static int \fBhwloc_cpuset_from_glibc_sched_affinity\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_cpuset_t\fP hwlocset, const cpu_set_t *schedset, size_t schedsetsize)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+This interface offers ways to convert between hwloc cpusets and glibc cpusets such as those manipulated by sched_getaffinity() or pthread_attr_setaffinity_np()\&.
+.PP
+\fBNote\fP
+.RS 4
+Topology \fCtopology\fP must match the current machine\&. 
+.RE
+.PP
+
+.SH "Function Documentation"
+.PP 
+.SS "static int hwloc_cpuset_from_glibc_sched_affinity (\fBhwloc_topology_t\fP topology, \fBhwloc_cpuset_t\fP hwlocset, const cpu_set_t * schedset, size_t schedsetsize)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Convert glibc sched affinity CPU set \fCschedset\fP into hwloc CPU set\&. This function may be used before calling sched_setaffinity or any other function that takes a cpu_set_t as input parameter\&.
+.PP
+\fCschedsetsize\fP should be sizeof(cpu_set_t) unless \fCschedset\fP was dynamically allocated with CPU_ALLOC 
+.SS "static int hwloc_cpuset_to_glibc_sched_affinity (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP hwlocset, cpu_set_t * schedset, size_t schedsetsize)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Convert hwloc CPU set \fCtoposet\fP into glibc sched affinity CPU set \fCschedset\fP\&. This function may be used before calling sched_setaffinity or any other function that takes a cpu_set_t as input parameter\&.
+.PP
+\fCschedsetsize\fP should be sizeof(cpu_set_t) unless \fCschedset\fP was dynamically allocated with CPU_ALLOC 
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_helper_ancestors.3 b/doc/doxygen-doc/man/man3/hwlocality_helper_ancestors.3
new file mode 100644
index 00000000..b2c6b451
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_helper_ancestors.3
@@ -0,0 +1,80 @@
+.TH "hwlocality_helper_ancestors" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_helper_ancestors \- Looking at Ancestor and Child Objects
+.SH SYNOPSIS
+.br
+.PP
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_get_ancestor_obj_by_depth\fP (\fBhwloc_topology_t\fP topology, int depth, \fBhwloc_obj_t\fP obj)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_get_ancestor_obj_by_type\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type, \fBhwloc_obj_t\fP obj)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_get_common_ancestor_obj\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP obj1, \fBhwloc_obj_t\fP obj2)"
+.br
+.ti -1c
+.RI "static int \fBhwloc_obj_is_in_subtree\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP obj, \fBhwloc_obj_t\fP subtree_root)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_get_next_child\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP parent, \fBhwloc_obj_t\fP prev)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+Be sure to see the figure in \fBTerms and Definitions\fP that shows a complete topology tree, including depths, child/sibling/cousin relationships, and an example of an asymmetric topology where one package has fewer caches than its peers\&. 
+.SH "Function Documentation"
+.PP 
+.SS "static \fBhwloc_obj_t\fP hwloc_get_ancestor_obj_by_depth (\fBhwloc_topology_t\fP topology, int depth, \fBhwloc_obj_t\fP obj)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Returns the ancestor object of \fCobj\fP at depth \fCdepth\fP\&. 
+.PP
+\fBNote\fP
+.RS 4
+\fCdepth\fP should not be the depth of PU or NUMA objects since they are ancestors of no objects (except Misc or I/O)\&. This function rather expects an intermediate level depth, such as the depth of Packages, Cores, or Caches\&. 
+.RE
+.PP
+
+.SS "static \fBhwloc_obj_t\fP hwloc_get_ancestor_obj_by_type (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type, \fBhwloc_obj_t\fP obj)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Returns the ancestor object of \fCobj\fP with type \fCtype\fP\&. 
+.PP
+\fBNote\fP
+.RS 4
+\fCtype\fP should not be \fBHWLOC_OBJ_PU\fP or \fBHWLOC_OBJ_NUMANODE\fP since these objects are ancestors of no objects (except Misc or I/O)\&. This function rather expects an intermediate object type, such as \fBHWLOC_OBJ_PACKAGE\fP, \fBHWLOC_OBJ_CORE\fP, etc\&. 
+.RE
+.PP
+
+.SS "static \fBhwloc_obj_t\fP hwloc_get_common_ancestor_obj (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP obj1, \fBhwloc_obj_t\fP obj2)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Returns the common parent object to objects \fCobj1\fP and \fCobj2\fP\&. 
+.SS "static \fBhwloc_obj_t\fP hwloc_get_next_child (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP parent, \fBhwloc_obj_t\fP prev)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Return the next child\&. Return the next child among the normal children list, then among the memory children list, then among the I/O children list, then among the Misc children list\&.
+.PP
+If \fCprev\fP is \fCNULL\fP, return the first child\&.
+.PP
+Return \fCNULL\fP when there is no next child\&. 
+.SS "static int hwloc_obj_is_in_subtree (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP obj, \fBhwloc_obj_t\fP subtree_root)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Returns true if \fCobj\fP is inside the subtree beginning with ancestor object \fCsubtree_root\fP\&. 
+.PP
+\fBNote\fP
+.RS 4
+This function cannot work if \fCobj\fP and \fCsubtree_root\fP objects do not have CPU sets (I/O or Misc objects)\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_helper_distribute.3 b/doc/doxygen-doc/man/man3/hwlocality_helper_distribute.3
new file mode 100644
index 00000000..17010ef8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_helper_distribute.3
@@ -0,0 +1,61 @@
+.TH "hwlocality_helper_distribute" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_helper_distribute \- Distributing items over a topology
+.SH SYNOPSIS
+.br
+.PP
+.SS "Enumerations"
+
+.in +1c
+.ti -1c
+.RI "enum \fBhwloc_distrib_flags_e\fP { \fBHWLOC_DISTRIB_FLAG_REVERSE\fP }"
+.br
+.in -1c
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "static int \fBhwloc_distrib\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP *roots, unsigned n_roots, \fBhwloc_cpuset_t\fP *set, unsigned n, int until, unsigned long flags)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+
+.SH "Enumeration Type Documentation"
+.PP 
+.SS "enum \fBhwloc_distrib_flags_e\fP"
+
+.PP
+Flags to be given to \fBhwloc_distrib()\fP\&. 
+.PP
+\fBEnumerator\fP
+.in +1c
+.TP
+\fB\fIHWLOC_DISTRIB_FLAG_REVERSE \fP\fP
+Distrib in reverse order, starting from the last objects\&. 
+.SH "Function Documentation"
+.PP 
+.SS "static int hwloc_distrib (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP * roots, unsigned n_roots, \fBhwloc_cpuset_t\fP * set, unsigned n, int until, unsigned long flags)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Distribute \fCn\fP items over the topology under \fCroots\fP\&. Array \fCset\fP will be filled with \fCn\fP cpusets recursively distributed linearly over the topology under objects \fCroots\fP, down to depth \fCuntil\fP (which can be INT_MAX to distribute down to the finest level)\&.
+.PP
+\fCn_roots\fP is usually 1 and \fCroots\fP only contains the topology root object so as to distribute over the entire topology\&.
+.PP
+This is typically useful when an application wants to distribute \fCn\fP threads over a machine, giving each of them as much private cache as possible and keeping them locally in number order\&.
+.PP
+The caller may typically want to also call \fBhwloc_bitmap_singlify()\fP before binding a thread so that it does not move at all\&.
+.PP
+\fCflags\fP should be 0 or a OR'ed set of \fBhwloc_distrib_flags_e\fP\&.
+.PP
+\fBNote\fP
+.RS 4
+This function requires the \fCroots\fP objects to have a CPU set\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_helper_find_cache.3 b/doc/doxygen-doc/man/man3/hwlocality_helper_find_cache.3
new file mode 100644
index 00000000..200bdeb1
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_helper_find_cache.3
@@ -0,0 +1,65 @@
+.TH "hwlocality_helper_find_cache" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_helper_find_cache \- Looking at Cache Objects
+.SH SYNOPSIS
+.br
+.PP
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "static int \fBhwloc_get_cache_type_depth\fP (\fBhwloc_topology_t\fP topology, unsigned cachelevel, \fBhwloc_obj_cache_type_t\fP cachetype)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_get_cache_covering_cpuset\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP set)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_get_shared_cache_covering_obj\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP obj)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+
+.SH "Function Documentation"
+.PP 
+.SS "static \fBhwloc_obj_t\fP hwloc_get_cache_covering_cpuset (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP set)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the first data (or unified) cache covering a cpuset \fCset\fP\&. 
+.PP
+\fBReturns\fP
+.RS 4
+\fCNULL\fP if no cache matches\&. 
+.RE
+.PP
+
+.SS "static int hwloc_get_cache_type_depth (\fBhwloc_topology_t\fP topology, unsigned cachelevel, \fBhwloc_obj_cache_type_t\fP cachetype)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Find the depth of cache objects matching cache level and type\&. Return the depth of the topology level that contains cache objects whose attributes match \fCcachelevel\fP and \fCcachetype\fP\&.
+.PP
+This function is identical to calling \fBhwloc_get_type_depth()\fP with the corresponding type such as \fBHWLOC_OBJ_L1ICACHE\fP, except that it may also return a Unified cache when looking for an instruction cache\&.
+.PP
+If no cache level matches, \fBHWLOC_TYPE_DEPTH_UNKNOWN\fP is returned\&.
+.PP
+If \fCcachetype\fP is \fBHWLOC_OBJ_CACHE_UNIFIED\fP, the depth of the unique matching unified cache level is returned\&.
+.PP
+If \fCcachetype\fP is \fBHWLOC_OBJ_CACHE_DATA\fP or \fBHWLOC_OBJ_CACHE_INSTRUCTION\fP, either a matching cache, or a unified cache is returned\&.
+.PP
+If \fCcachetype\fP is \fC-1\fP, it is ignored and multiple levels may match\&. The function returns either the depth of a uniquely matching level or \fBHWLOC_TYPE_DEPTH_MULTIPLE\fP\&. 
+.SS "static \fBhwloc_obj_t\fP hwloc_get_shared_cache_covering_obj (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP obj)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the first data (or unified) cache shared between an object and somebody else\&. 
+.PP
+\fBReturns\fP
+.RS 4
+\fCNULL\fP if no cache matches or if an invalid object is given\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_helper_find_covering.3 b/doc/doxygen-doc/man/man3/hwlocality_helper_find_covering.3
new file mode 100644
index 00000000..dd46ef2b
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_helper_find_covering.3
@@ -0,0 +1,83 @@
+.TH "hwlocality_helper_find_covering" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_helper_find_covering \- Finding Objects covering at least CPU set
+.SH SYNOPSIS
+.br
+.PP
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_get_child_covering_cpuset\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP set, \fBhwloc_obj_t\fP parent)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_get_obj_covering_cpuset\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP set)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_get_next_obj_covering_cpuset_by_depth\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP set, int depth, \fBhwloc_obj_t\fP prev)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_get_next_obj_covering_cpuset_by_type\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP set, \fBhwloc_obj_type_t\fP type, \fBhwloc_obj_t\fP prev)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+
+.SH "Function Documentation"
+.PP 
+.SS "static \fBhwloc_obj_t\fP hwloc_get_child_covering_cpuset (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP set, \fBhwloc_obj_t\fP parent)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the child covering at least CPU set \fCset\fP\&. 
+.PP
+\fBReturns\fP
+.RS 4
+\fCNULL\fP if no child matches or if \fCset\fP is empty\&.
+.RE
+.PP
+\fBNote\fP
+.RS 4
+This function cannot work if parent does not have a CPU set (I/O or Misc objects)\&. 
+.RE
+.PP
+
+.SS "static \fBhwloc_obj_t\fP hwloc_get_next_obj_covering_cpuset_by_depth (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP set, int depth, \fBhwloc_obj_t\fP prev)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Iterate through same-depth objects covering at least CPU set \fCset\fP\&. If object \fCprev\fP is \fCNULL\fP, return the first object at depth \fCdepth\fP covering at least part of CPU set \fCset\fP\&. The next invokation should pass the previous return value in \fCprev\fP so as to obtain the next object covering at least another part of \fCset\fP\&.
+.PP
+\fBNote\fP
+.RS 4
+This function cannot work if objects at the given depth do not have CPU sets (I/O or Misc objects)\&. 
+.RE
+.PP
+
+.SS "static \fBhwloc_obj_t\fP hwloc_get_next_obj_covering_cpuset_by_type (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP set, \fBhwloc_obj_type_t\fP type, \fBhwloc_obj_t\fP prev)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Iterate through same-type objects covering at least CPU set \fCset\fP\&. If object \fCprev\fP is \fCNULL\fP, return the first object of type \fCtype\fP covering at least part of CPU set \fCset\fP\&. The next invokation should pass the previous return value in \fCprev\fP so as to obtain the next object of type \fCtype\fP covering at least another part of \fCset\fP\&.
+.PP
+If there are no or multiple depths for type \fCtype\fP, \fCNULL\fP is returned\&. The caller may fallback to \fBhwloc_get_next_obj_covering_cpuset_by_depth()\fP for each depth\&.
+.PP
+\fBNote\fP
+.RS 4
+This function cannot work if objects of the given type do not have CPU sets (I/O or Misc objects)\&. 
+.RE
+.PP
+
+.SS "static \fBhwloc_obj_t\fP hwloc_get_obj_covering_cpuset (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP set)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the lowest object covering at least CPU set \fCset\fP\&. 
+.PP
+\fBReturns\fP
+.RS 4
+\fCNULL\fP if no object matches or if \fCset\fP is empty\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_helper_find_inside.3 b/doc/doxygen-doc/man/man3/hwlocality_helper_find_inside.3
new file mode 100644
index 00000000..3f93c06a
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_helper_find_inside.3
@@ -0,0 +1,160 @@
+.TH "hwlocality_helper_find_inside" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_helper_find_inside \- Finding Objects inside a CPU set
+.SH SYNOPSIS
+.br
+.PP
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_get_first_largest_obj_inside_cpuset\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP set)"
+.br
+.ti -1c
+.RI "int \fBhwloc_get_largest_objs_inside_cpuset\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP set, \fBhwloc_obj_t\fP *restrict objs, int max)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_get_next_obj_inside_cpuset_by_depth\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP set, int depth, \fBhwloc_obj_t\fP prev)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_get_next_obj_inside_cpuset_by_type\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP set, \fBhwloc_obj_type_t\fP type, \fBhwloc_obj_t\fP prev)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_get_obj_inside_cpuset_by_depth\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP set, int depth, unsigned idx)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_get_obj_inside_cpuset_by_type\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP set, \fBhwloc_obj_type_t\fP type, unsigned idx)"
+.br
+.ti -1c
+.RI "static unsigned \fBhwloc_get_nbobjs_inside_cpuset_by_depth\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP set, int depth)"
+.br
+.ti -1c
+.RI "static int \fBhwloc_get_nbobjs_inside_cpuset_by_type\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP set, \fBhwloc_obj_type_t\fP type)"
+.br
+.ti -1c
+.RI "static int \fBhwloc_get_obj_index_inside_cpuset\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP set, \fBhwloc_obj_t\fP obj)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+
+.SH "Function Documentation"
+.PP 
+.SS "static \fBhwloc_obj_t\fP hwloc_get_first_largest_obj_inside_cpuset (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP set)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the first largest object included in the given cpuset \fCset\fP\&. 
+.PP
+\fBReturns\fP
+.RS 4
+the first object that is included in \fCset\fP and whose parent is not\&.
+.RE
+.PP
+This is convenient for iterating over all largest objects within a CPU set by doing a loop getting the first largest object and clearing its CPU set from the remaining CPU set\&. 
+.SS "int hwloc_get_largest_objs_inside_cpuset (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP set, \fBhwloc_obj_t\fP *restrict objs, int max)"
+
+.PP
+Get the set of largest objects covering exactly a given cpuset \fCset\fP\&. 
+.PP
+\fBReturns\fP
+.RS 4
+the number of objects returned in \fCobjs\fP\&. 
+.RE
+.PP
+
+.SS "static unsigned hwloc_get_nbobjs_inside_cpuset_by_depth (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP set, int depth)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Return the number of objects at depth \fCdepth\fP included in CPU set \fCset\fP\&. 
+.PP
+\fBNote\fP
+.RS 4
+Objects with empty CPU sets are ignored (otherwise they would be considered included in any given set)\&.
+.PP
+This function cannot work if objects at the given depth do not have CPU sets (I/O or Misc objects)\&. 
+.RE
+.PP
+
+.SS "static int hwloc_get_nbobjs_inside_cpuset_by_type (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP set, \fBhwloc_obj_type_t\fP type)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Return the number of objects of type \fCtype\fP included in CPU set \fCset\fP\&. If no object for that type exists inside CPU set \fCset\fP, 0 is returned\&. If there are several levels with objects of that type inside CPU set \fCset\fP, -1 is returned\&.
+.PP
+\fBNote\fP
+.RS 4
+Objects with empty CPU sets are ignored (otherwise they would be considered included in any given set)\&.
+.PP
+This function cannot work if objects of the given type do not have CPU sets (I/O objects)\&. 
+.RE
+.PP
+
+.SS "static \fBhwloc_obj_t\fP hwloc_get_next_obj_inside_cpuset_by_depth (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP set, int depth, \fBhwloc_obj_t\fP prev)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Return the next object at depth \fCdepth\fP included in CPU set \fCset\fP\&. If \fCprev\fP is \fCNULL\fP, return the first object at depth \fCdepth\fP included in \fCset\fP\&. The next invokation should pass the previous return value in \fCprev\fP so as to obtain the next object in \fCset\fP\&.
+.PP
+\fBNote\fP
+.RS 4
+Objects with empty CPU sets are ignored (otherwise they would be considered included in any given set)\&.
+.PP
+This function cannot work if objects at the given depth do not have CPU sets (I/O or Misc objects)\&. 
+.RE
+.PP
+
+.SS "static \fBhwloc_obj_t\fP hwloc_get_next_obj_inside_cpuset_by_type (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP set, \fBhwloc_obj_type_t\fP type, \fBhwloc_obj_t\fP prev)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Return the next object of type \fCtype\fP included in CPU set \fCset\fP\&. If there are multiple or no depth for given type, return \fCNULL\fP and let the caller fallback to \fBhwloc_get_next_obj_inside_cpuset_by_depth()\fP\&.
+.PP
+\fBNote\fP
+.RS 4
+Objects with empty CPU sets are ignored (otherwise they would be considered included in any given set)\&.
+.PP
+This function cannot work if objects of the given type do not have CPU sets (I/O or Misc objects)\&. 
+.RE
+.PP
+
+.SS "static int hwloc_get_obj_index_inside_cpuset (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP set, \fBhwloc_obj_t\fP obj)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Return the logical index among the objects included in CPU set \fCset\fP\&. Consult all objects in the same level as \fCobj\fP and inside CPU set \fCset\fP in the logical order, and return the index of \fCobj\fP within them\&. If \fCset\fP covers the entire topology, this is the logical index of \fCobj\fP\&. Otherwise, this is similar to a logical index within the part of the topology defined by CPU set \fCset\fP\&.
+.PP
+\fBNote\fP
+.RS 4
+Objects with empty CPU sets are ignored (otherwise they would be considered included in any given set)\&.
+.PP
+This function cannot work if obj does not have CPU sets (I/O objects)\&. 
+.RE
+.PP
+
+.SS "static \fBhwloc_obj_t\fP hwloc_get_obj_inside_cpuset_by_depth (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP set, int depth, unsigned idx)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Return the (logically) \fCidx\fP -th object at depth \fCdepth\fP included in CPU set \fCset\fP\&. 
+.PP
+\fBNote\fP
+.RS 4
+Objects with empty CPU sets are ignored (otherwise they would be considered included in any given set)\&.
+.PP
+This function cannot work if objects at the given depth do not have CPU sets (I/O or Misc objects)\&. 
+.RE
+.PP
+
+.SS "static \fBhwloc_obj_t\fP hwloc_get_obj_inside_cpuset_by_type (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP set, \fBhwloc_obj_type_t\fP type, unsigned idx)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Return the \fCidx\fP -th object of type \fCtype\fP included in CPU set \fCset\fP\&. If there are multiple or no depth for given type, return \fCNULL\fP and let the caller fallback to \fBhwloc_get_obj_inside_cpuset_by_depth()\fP\&.
+.PP
+\fBNote\fP
+.RS 4
+Objects with empty CPU sets are ignored (otherwise they would be considered included in any given set)\&.
+.PP
+This function cannot work if objects of the given type do not have CPU sets (I/O or Misc objects)\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_helper_find_misc.3 b/doc/doxygen-doc/man/man3/hwlocality_helper_find_misc.3
new file mode 100644
index 00000000..a54c95ea
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_helper_find_misc.3
@@ -0,0 +1,137 @@
+.TH "hwlocality_helper_find_misc" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_helper_find_misc \- Finding objects, miscellaneous helpers
+.SH SYNOPSIS
+.br
+.PP
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "int \fBhwloc_bitmap_singlify_per_core\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_bitmap_t\fP cpuset, unsigned which)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_get_pu_obj_by_os_index\fP (\fBhwloc_topology_t\fP topology, unsigned os_index)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_get_numanode_obj_by_os_index\fP (\fBhwloc_topology_t\fP topology, unsigned os_index)"
+.br
+.ti -1c
+.RI "unsigned \fBhwloc_get_closest_objs\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP src, \fBhwloc_obj_t\fP *restrict objs, unsigned max)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_get_obj_below_by_type\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type1, unsigned idx1, \fBhwloc_obj_type_t\fP type2, unsigned idx2)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_get_obj_below_array_by_type\fP (\fBhwloc_topology_t\fP topology, int nr, \fBhwloc_obj_type_t\fP *typev, unsigned *idxv)"
+.br
+.ti -1c
+.RI "\fBhwloc_obj_t\fP \fBhwloc_get_obj_with_same_locality\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP src, \fBhwloc_obj_type_t\fP type, const char *subtype, const char *nameprefix, unsigned long flags)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+Be sure to see the figure in \fBTerms and Definitions\fP that shows a complete topology tree, including depths, child/sibling/cousin relationships, and an example of an asymmetric topology where one package has fewer caches than its peers\&. 
+.SH "Function Documentation"
+.PP 
+.SS "int hwloc_bitmap_singlify_per_core (\fBhwloc_topology_t\fP topology, \fBhwloc_bitmap_t\fP cpuset, unsigned which)"
+
+.PP
+Remove simultaneous multithreading PUs from a CPU set\&. For each core in \fCtopology\fP, if \fCcpuset\fP contains some PUs of that core, modify \fCcpuset\fP to only keep a single PU for that core\&.
+.PP
+\fCwhich\fP specifies which PU will be kept\&. PU are considered in physical index order\&. If 0, for each core, the function keeps the first PU that was originally set in \fCcpuset\fP\&.
+.PP
+If \fCwhich\fP is larger than the number of PUs in a core there were originally set in \fCcpuset\fP, no PU is kept for that core\&.
+.PP
+\fBNote\fP
+.RS 4
+PUs that are not below a Core object are ignored (for instance if the topology does not contain any Core object)\&. None of them is removed from \fCcpuset\fP\&. 
+.RE
+.PP
+
+.SS "unsigned hwloc_get_closest_objs (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP src, \fBhwloc_obj_t\fP *restrict objs, unsigned max)"
+
+.PP
+Do a depth-first traversal of the topology to find and sort\&. all objects that are at the same depth than \fCsrc\fP\&. Report in \fCobjs\fP up to \fCmax\fP physically closest ones to \fCsrc\fP\&.
+.PP
+\fBReturns\fP
+.RS 4
+the number of objects returned in \fCobjs\fP\&.
+.PP
+0 if \fCsrc\fP is an I/O object\&.
+.RE
+.PP
+\fBNote\fP
+.RS 4
+This function requires the \fCsrc\fP object to have a CPU set\&. 
+.RE
+.PP
+
+.SS "static \fBhwloc_obj_t\fP hwloc_get_numanode_obj_by_os_index (\fBhwloc_topology_t\fP topology, unsigned os_index)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Returns the object of type \fBHWLOC_OBJ_NUMANODE\fP with \fCos_index\fP\&. This function is useful for converting a nodeset into the NUMA node objects it contains\&. When retrieving the current binding (e\&.g\&. with \fBhwloc_get_membind()\fP with HWLOC_MEMBIND_BYNODESET), one may iterate over the bits of the resulting nodeset with \fBhwloc_bitmap_foreach_begin()\fP, and find the corresponding NUMA nodes with this function\&. 
+.SS "static \fBhwloc_obj_t\fP hwloc_get_obj_below_array_by_type (\fBhwloc_topology_t\fP topology, int nr, \fBhwloc_obj_type_t\fP * typev, unsigned * idxv)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Find an object below a chain of objects specified by types and indexes\&. This is a generalized version of \fBhwloc_get_obj_below_by_type()\fP\&.
+.PP
+Arrays \fCtypev\fP and \fCidxv\fP must contain \fCnr\fP types and indexes\&.
+.PP
+Start from the top system object and walk the arrays \fCtypev\fP and \fCidxv\fP\&. For each type and logical index couple in the arrays, look under the previously found object to find the index-th object of the given type\&. Indexes are specified within the parent, not withing the entire system\&.
+.PP
+For instance, if nr is 3, typev contains NODE, PACKAGE and CORE, and idxv contains 0, 1 and 2, return the third core object below the second package below the first NUMA node\&.
+.PP
+\fBNote\fP
+.RS 4
+This function requires all these objects and the root object to have a CPU set\&. 
+.RE
+.PP
+
+.SS "static \fBhwloc_obj_t\fP hwloc_get_obj_below_by_type (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type1, unsigned idx1, \fBhwloc_obj_type_t\fP type2, unsigned idx2)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Find an object below another object, both specified by types and indexes\&. Start from the top system object and find object of type \fCtype1\fP and logical index \fCidx1\fP\&. Then look below this object and find another object of type \fCtype2\fP and logical index \fCidx2\fP\&. Indexes are specified within the parent, not withing the entire system\&.
+.PP
+For instance, if type1 is PACKAGE, idx1 is 2, type2 is CORE and idx2 is 3, return the fourth core object below the third package\&.
+.PP
+\fBNote\fP
+.RS 4
+This function requires these objects to have a CPU set\&. 
+.RE
+.PP
+
+.SS "\fBhwloc_obj_t\fP hwloc_get_obj_with_same_locality (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP src, \fBhwloc_obj_type_t\fP type, const char * subtype, const char * nameprefix, unsigned long flags)"
+
+.PP
+Return an object of a different type with same locality\&. If the source object \fCsrc\fP is a normal or memory type, this function returns an object of type \fCtype\fP with same CPU and node sets, either below or above in the hierarchy\&.
+.PP
+If the source object \fCsrc\fP is a PCI or an OS device within a PCI device, the function may either return that PCI device, or another OS device in the same PCI parent\&. This may for instance be useful for converting between OS devices such as 'nvml0' or 'rsmi1' used in distance structures into the the PCI device, or the CUDA or OpenCL OS device that correspond to the same physical card\&.
+.PP
+If not \fCNULL\fP, parameter \fCsubtype\fP only select objects whose subtype attribute exists and is \fCsubtype\fP (case-insensitively), for instance 'OpenCL' or 'CUDA'\&.
+.PP
+If not \fCNULL\fP, parameter \fCnameprefix\fP only selects objects whose name attribute exists and starts with \fCnameprefix\fP (case-insensitively), for instance 'rsmi' for matching 'rsmi0'\&.
+.PP
+If multiple objects match, the first one is returned\&.
+.PP
+This function will not walk the hierarchy across bridges since the PCI locality may become different\&. This function cannot also convert between normal/memory objects and I/O or Misc objects\&.
+.PP
+\fCflags\fP must be \fC0\fP for now\&.
+.PP
+\fBReturns\fP
+.RS 4
+An object with identical locality, matching \fCsubtype\fP and \fCnameprefix\fP if any\&.
+.PP
+\fCNULL\fP if no matching object could be found, or if the source object and target type are incompatible, for instance if converting between CPU and I/O objects\&. 
+.RE
+.PP
+
+.SS "static \fBhwloc_obj_t\fP hwloc_get_pu_obj_by_os_index (\fBhwloc_topology_t\fP topology, unsigned os_index)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Returns the object of type \fBHWLOC_OBJ_PU\fP with \fCos_index\fP\&. This function is useful for converting a CPU set into the PU objects it contains\&. When retrieving the current binding (e\&.g\&. with \fBhwloc_get_cpubind()\fP), one may iterate over the bits of the resulting CPU set with \fBhwloc_bitmap_foreach_begin()\fP, and find the corresponding PUs with this function\&. 
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_helper_nodeset_convert.3 b/doc/doxygen-doc/man/man3/hwlocality_helper_nodeset_convert.3
new file mode 100644
index 00000000..3a4e19da
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_helper_nodeset_convert.3
@@ -0,0 +1,42 @@
+.TH "hwlocality_helper_nodeset_convert" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_helper_nodeset_convert \- Converting between CPU sets and node sets
+.SH SYNOPSIS
+.br
+.PP
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "static int \fBhwloc_cpuset_to_nodeset\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP _cpuset, \fBhwloc_nodeset_t\fP nodeset)"
+.br
+.ti -1c
+.RI "static int \fBhwloc_cpuset_from_nodeset\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_cpuset_t\fP _cpuset, \fBhwloc_const_nodeset_t\fP nodeset)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+
+.SH "Function Documentation"
+.PP 
+.SS "static int hwloc_cpuset_from_nodeset (\fBhwloc_topology_t\fP topology, \fBhwloc_cpuset_t\fP _cpuset, \fBhwloc_const_nodeset_t\fP nodeset)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Convert a NUMA node set into a CPU set\&. For each NUMA node included in the input \fCnodeset\fP, set the corresponding local PUs in the output \fC_cpuset\fP\&.
+.PP
+If some CPUs have no local NUMA nodes, this function never sets their indexes in the output CPU set, even if a full node set is given in input\&.
+.PP
+Hence the entire topology node set is converted into the set of all CPUs that have some local NUMA nodes\&. 
+.SS "static int hwloc_cpuset_to_nodeset (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP _cpuset, \fBhwloc_nodeset_t\fP nodeset)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Convert a CPU set into a NUMA node set\&. For each PU included in the input \fC_cpuset\fP, set the corresponding local NUMA node(s) in the output \fCnodeset\fP\&.
+.PP
+If some NUMA nodes have no CPUs at all, this function never sets their indexes in the output node set, even if a full CPU set is given in input\&.
+.PP
+Hence the entire topology CPU set is converted into the set of all nodes that have some local CPUs\&. 
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_helper_topology_sets.3 b/doc/doxygen-doc/man/man3/hwlocality_helper_topology_sets.3
new file mode 100644
index 00000000..658c86e5
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_helper_topology_sets.3
@@ -0,0 +1,150 @@
+.TH "hwlocality_helper_topology_sets" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_helper_topology_sets \- CPU and node sets of entire topologies
+.SH SYNOPSIS
+.br
+.PP
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "\fBhwloc_const_cpuset_t\fP \fBhwloc_topology_get_complete_cpuset\fP (\fBhwloc_topology_t\fP topology)"
+.br
+.ti -1c
+.RI "\fBhwloc_const_cpuset_t\fP \fBhwloc_topology_get_topology_cpuset\fP (\fBhwloc_topology_t\fP topology)"
+.br
+.ti -1c
+.RI "\fBhwloc_const_cpuset_t\fP \fBhwloc_topology_get_allowed_cpuset\fP (\fBhwloc_topology_t\fP topology)"
+.br
+.ti -1c
+.RI "\fBhwloc_const_nodeset_t\fP \fBhwloc_topology_get_complete_nodeset\fP (\fBhwloc_topology_t\fP topology)"
+.br
+.ti -1c
+.RI "\fBhwloc_const_nodeset_t\fP \fBhwloc_topology_get_topology_nodeset\fP (\fBhwloc_topology_t\fP topology)"
+.br
+.ti -1c
+.RI "\fBhwloc_const_nodeset_t\fP \fBhwloc_topology_get_allowed_nodeset\fP (\fBhwloc_topology_t\fP topology)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+
+.SH "Function Documentation"
+.PP 
+.SS "\fBhwloc_const_cpuset_t\fP hwloc_topology_get_allowed_cpuset (\fBhwloc_topology_t\fP topology)"
+
+.PP
+Get allowed CPU set\&. 
+.PP
+\fBReturns\fP
+.RS 4
+the CPU set of allowed processors of the system\&.
+.RE
+.PP
+\fBNote\fP
+.RS 4
+If the topology flag \fBHWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED\fP was not set, this is identical to \fBhwloc_topology_get_topology_cpuset()\fP, which means all PUs are allowed\&.
+.PP
+If \fBHWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED\fP was set, applying \fBhwloc_bitmap_intersects()\fP on the result of this function and on an object cpuset checks whether there are allowed PUs inside that object\&. Applying \fBhwloc_bitmap_and()\fP returns the list of these allowed PUs\&.
+.PP
+The returned cpuset is not newly allocated and should thus not be changed or freed, \fBhwloc_bitmap_dup()\fP must be used to obtain a local copy\&. 
+.RE
+.PP
+
+.SS "\fBhwloc_const_nodeset_t\fP hwloc_topology_get_allowed_nodeset (\fBhwloc_topology_t\fP topology)"
+
+.PP
+Get allowed node set\&. 
+.PP
+\fBReturns\fP
+.RS 4
+the node set of allowed memory of the system\&.
+.RE
+.PP
+\fBNote\fP
+.RS 4
+If the topology flag \fBHWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED\fP was not set, this is identical to \fBhwloc_topology_get_topology_nodeset()\fP, which means all NUMA nodes are allowed\&.
+.PP
+If \fBHWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED\fP was set, applying \fBhwloc_bitmap_intersects()\fP on the result of this function and on an object nodeset checks whether there are allowed NUMA nodes inside that object\&. Applying \fBhwloc_bitmap_and()\fP returns the list of these allowed NUMA nodes\&.
+.PP
+The returned nodeset is not newly allocated and should thus not be changed or freed, \fBhwloc_bitmap_dup()\fP must be used to obtain a local copy\&. 
+.RE
+.PP
+
+.SS "\fBhwloc_const_cpuset_t\fP hwloc_topology_get_complete_cpuset (\fBhwloc_topology_t\fP topology)"
+
+.PP
+Get complete CPU set\&. 
+.PP
+\fBReturns\fP
+.RS 4
+the complete CPU set of processors of the system\&.
+.RE
+.PP
+\fBNote\fP
+.RS 4
+The returned cpuset is not newly allocated and should thus not be changed or freed; \fBhwloc_bitmap_dup()\fP must be used to obtain a local copy\&.
+.PP
+This is equivalent to retrieving the root object complete CPU-set\&. 
+.RE
+.PP
+
+.SS "\fBhwloc_const_nodeset_t\fP hwloc_topology_get_complete_nodeset (\fBhwloc_topology_t\fP topology)"
+
+.PP
+Get complete node set\&. 
+.PP
+\fBReturns\fP
+.RS 4
+the complete node set of memory of the system\&.
+.RE
+.PP
+\fBNote\fP
+.RS 4
+The returned nodeset is not newly allocated and should thus not be changed or freed; \fBhwloc_bitmap_dup()\fP must be used to obtain a local copy\&.
+.PP
+This is equivalent to retrieving the root object complete nodeset\&. 
+.RE
+.PP
+
+.SS "\fBhwloc_const_cpuset_t\fP hwloc_topology_get_topology_cpuset (\fBhwloc_topology_t\fP topology)"
+
+.PP
+Get topology CPU set\&. 
+.PP
+\fBReturns\fP
+.RS 4
+the CPU set of processors of the system for which hwloc provides topology information\&. This is equivalent to the cpuset of the system object\&.
+.RE
+.PP
+\fBNote\fP
+.RS 4
+The returned cpuset is not newly allocated and should thus not be changed or freed; \fBhwloc_bitmap_dup()\fP must be used to obtain a local copy\&.
+.PP
+This is equivalent to retrieving the root object CPU-set\&. 
+.RE
+.PP
+
+.SS "\fBhwloc_const_nodeset_t\fP hwloc_topology_get_topology_nodeset (\fBhwloc_topology_t\fP topology)"
+
+.PP
+Get topology node set\&. 
+.PP
+\fBReturns\fP
+.RS 4
+the node set of memory of the system for which hwloc provides topology information\&. This is equivalent to the nodeset of the system object\&.
+.RE
+.PP
+\fBNote\fP
+.RS 4
+The returned nodeset is not newly allocated and should thus not be changed or freed; \fBhwloc_bitmap_dup()\fP must be used to obtain a local copy\&.
+.PP
+This is equivalent to retrieving the root object nodeset\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_helper_types.3 b/doc/doxygen-doc/man/man3/hwlocality_helper_types.3
new file mode 100644
index 00000000..d202b29a
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_helper_types.3
@@ -0,0 +1,106 @@
+.TH "hwlocality_helper_types" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_helper_types \- Kinds of object Type
+.SH SYNOPSIS
+.br
+.PP
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "int \fBhwloc_obj_type_is_normal\fP (\fBhwloc_obj_type_t\fP type)"
+.br
+.ti -1c
+.RI "int \fBhwloc_obj_type_is_io\fP (\fBhwloc_obj_type_t\fP type)"
+.br
+.ti -1c
+.RI "int \fBhwloc_obj_type_is_memory\fP (\fBhwloc_obj_type_t\fP type)"
+.br
+.ti -1c
+.RI "int \fBhwloc_obj_type_is_cache\fP (\fBhwloc_obj_type_t\fP type)"
+.br
+.ti -1c
+.RI "int \fBhwloc_obj_type_is_dcache\fP (\fBhwloc_obj_type_t\fP type)"
+.br
+.ti -1c
+.RI "int \fBhwloc_obj_type_is_icache\fP (\fBhwloc_obj_type_t\fP type)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+Each object type is either Normal (i\&.e\&. \fBhwloc_obj_type_is_normal()\fP returns 1), or Memory (i\&.e\&. \fBhwloc_obj_type_is_memory()\fP returns 1) or I/O (i\&.e\&. \fBhwloc_obj_type_is_io()\fP returns 1) or Misc (i\&.e\&. equal to \fBHWLOC_OBJ_MISC\fP)\&. It cannot be of more than one of these kinds\&. 
+.SH "Function Documentation"
+.PP 
+.SS "int hwloc_obj_type_is_cache (\fBhwloc_obj_type_t\fP type)"
+
+.PP
+Check whether an object type is a CPU Cache (Data, Unified or Instruction)\&. Memory-side caches are not CPU caches\&.
+.PP
+\fBReturns\fP
+.RS 4
+1 if an object of type \fCtype\fP is a Cache, 0 otherwise\&. 
+.RE
+.PP
+
+.SS "int hwloc_obj_type_is_dcache (\fBhwloc_obj_type_t\fP type)"
+
+.PP
+Check whether an object type is a CPU Data or Unified Cache\&. Memory-side caches are not CPU caches\&.
+.PP
+\fBReturns\fP
+.RS 4
+1 if an object of type \fCtype\fP is a CPU Data or Unified Cache, 0 otherwise\&. 
+.RE
+.PP
+
+.SS "int hwloc_obj_type_is_icache (\fBhwloc_obj_type_t\fP type)"
+
+.PP
+Check whether an object type is a CPU Instruction Cache,\&. Memory-side caches are not CPU caches\&.
+.PP
+\fBReturns\fP
+.RS 4
+1 if an object of type \fCtype\fP is a CPU Instruction Cache, 0 otherwise\&. 
+.RE
+.PP
+
+.SS "int hwloc_obj_type_is_io (\fBhwloc_obj_type_t\fP type)"
+
+.PP
+Check whether an object type is I/O\&. I/O objects are objects attached to their parents in the I/O children list\&. This current includes Bridges, PCI and OS devices\&.
+.PP
+\fBReturns\fP
+.RS 4
+1 if an object of type \fCtype\fP is a I/O object, 0 otherwise\&. 
+.RE
+.PP
+
+.SS "int hwloc_obj_type_is_memory (\fBhwloc_obj_type_t\fP type)"
+
+.PP
+Check whether an object type is Memory\&. Memory objects are objects attached to their parents in the Memory children list\&. This current includes NUMA nodes and Memory-side caches\&.
+.PP
+\fBReturns\fP
+.RS 4
+1 if an object of type \fCtype\fP is a Memory object, 0 otherwise\&. 
+.RE
+.PP
+
+.SS "int hwloc_obj_type_is_normal (\fBhwloc_obj_type_t\fP type)"
+
+.PP
+Check whether an object type is Normal\&. Normal objects are objects of the main CPU hierarchy (Machine, Package, Core, PU, CPU caches, etc\&.), but they are not NUMA nodes, I/O devices or Misc objects\&.
+.PP
+They are attached to parent as Normal children, not as Memory, I/O or Misc children\&.
+.PP
+\fBReturns\fP
+.RS 4
+1 if an object of type \fCtype\fP is a Normal object, 0 otherwise\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_info_attr.3 b/doc/doxygen-doc/man/man3/hwlocality_info_attr.3
new file mode 100644
index 00000000..b1f27c68
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_info_attr.3
@@ -0,0 +1,57 @@
+.TH "hwlocality_info_attr" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_info_attr \- Consulting and Adding Key-Value Info Attributes
+.SH SYNOPSIS
+.br
+.PP
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "static const char * \fBhwloc_obj_get_info_by_name\fP (\fBhwloc_obj_t\fP obj, const char *name)"
+.br
+.ti -1c
+.RI "int \fBhwloc_obj_add_info\fP (\fBhwloc_obj_t\fP obj, const char *name, const char *value)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+
+.SH "Function Documentation"
+.PP 
+.SS "int hwloc_obj_add_info (\fBhwloc_obj_t\fP obj, const char * name, const char * value)"
+
+.PP
+Add the given info name and value pair to the given object\&. The info is appended to the existing info array even if another key with the same name already exists\&.
+.PP
+The input strings are copied before being added in the object infos\&.
+.PP
+\fBReturns\fP
+.RS 4
+\fC0\fP on success, \fC-1\fP on error\&.
+.RE
+.PP
+\fBNote\fP
+.RS 4
+This function may be used to enforce object colors in the lstopo graphical output by using 'lstopoStyle' as a name and 'Background=#rrggbb' as a value\&. See CUSTOM COLORS in the lstopo(1) manpage for details\&.
+.PP
+If \fCvalue\fP contains some non-printable characters, they will be dropped when exporting to XML, see \fBhwloc_topology_export_xml()\fP in \fBhwloc/export\&.h\fP\&. 
+.RE
+.PP
+
+.SS "static const char* hwloc_obj_get_info_by_name (\fBhwloc_obj_t\fP obj, const char * name)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Search the given key name in object infos and return the corresponding value\&. If multiple keys match the given name, only the first one is returned\&.
+.PP
+\fBReturns\fP
+.RS 4
+\fCNULL\fP if no such key exists\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_levels.3 b/doc/doxygen-doc/man/man3/hwlocality_levels.3
new file mode 100644
index 00000000..7a5d7afc
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_levels.3
@@ -0,0 +1,197 @@
+.TH "hwlocality_levels" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_levels \- Object levels, depths and types
+.SH SYNOPSIS
+.br
+.PP
+.SS "Enumerations"
+
+.in +1c
+.ti -1c
+.RI "enum \fBhwloc_get_type_depth_e\fP { \fBHWLOC_TYPE_DEPTH_UNKNOWN\fP, \fBHWLOC_TYPE_DEPTH_MULTIPLE\fP, \fBHWLOC_TYPE_DEPTH_NUMANODE\fP, \fBHWLOC_TYPE_DEPTH_BRIDGE\fP, \fBHWLOC_TYPE_DEPTH_PCI_DEVICE\fP, \fBHWLOC_TYPE_DEPTH_OS_DEVICE\fP, \fBHWLOC_TYPE_DEPTH_MISC\fP, \fBHWLOC_TYPE_DEPTH_MEMCACHE\fP }"
+.br
+.in -1c
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "int \fBhwloc_topology_get_depth\fP (\fBhwloc_topology_t\fP restrict topology)"
+.br
+.ti -1c
+.RI "int \fBhwloc_get_type_depth\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type)"
+.br
+.ti -1c
+.RI "int \fBhwloc_get_memory_parents_depth\fP (\fBhwloc_topology_t\fP topology)"
+.br
+.ti -1c
+.RI "static int \fBhwloc_get_type_or_below_depth\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type)"
+.br
+.ti -1c
+.RI "static int \fBhwloc_get_type_or_above_depth\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type)"
+.br
+.ti -1c
+.RI "\fBhwloc_obj_type_t\fP \fBhwloc_get_depth_type\fP (\fBhwloc_topology_t\fP topology, int depth)"
+.br
+.ti -1c
+.RI "unsigned \fBhwloc_get_nbobjs_by_depth\fP (\fBhwloc_topology_t\fP topology, int depth)"
+.br
+.ti -1c
+.RI "static int \fBhwloc_get_nbobjs_by_type\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_get_root_obj\fP (\fBhwloc_topology_t\fP topology)"
+.br
+.ti -1c
+.RI "\fBhwloc_obj_t\fP \fBhwloc_get_obj_by_depth\fP (\fBhwloc_topology_t\fP topology, int depth, unsigned idx)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_get_obj_by_type\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type, unsigned idx)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_get_next_obj_by_depth\fP (\fBhwloc_topology_t\fP topology, int depth, \fBhwloc_obj_t\fP prev)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_get_next_obj_by_type\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type, \fBhwloc_obj_t\fP prev)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+Be sure to see the figure in \fBTerms and Definitions\fP that shows a complete topology tree, including depths, child/sibling/cousin relationships, and an example of an asymmetric topology where one package has fewer caches than its peers\&. 
+.SH "Enumeration Type Documentation"
+.PP 
+.SS "enum \fBhwloc_get_type_depth_e\fP"
+
+.PP
+\fBEnumerator\fP
+.in +1c
+.TP
+\fB\fIHWLOC_TYPE_DEPTH_UNKNOWN \fP\fP
+No object of given type exists in the topology\&. 
+.TP
+\fB\fIHWLOC_TYPE_DEPTH_MULTIPLE \fP\fP
+Objects of given type exist at different depth in the topology (only for Groups)\&. 
+.TP
+\fB\fIHWLOC_TYPE_DEPTH_NUMANODE \fP\fP
+Virtual depth for NUMA nodes\&. 
+.TP
+\fB\fIHWLOC_TYPE_DEPTH_BRIDGE \fP\fP
+Virtual depth for bridge object level\&. 
+.TP
+\fB\fIHWLOC_TYPE_DEPTH_PCI_DEVICE \fP\fP
+Virtual depth for PCI device object level\&. 
+.TP
+\fB\fIHWLOC_TYPE_DEPTH_OS_DEVICE \fP\fP
+Virtual depth for software device object level\&. 
+.TP
+\fB\fIHWLOC_TYPE_DEPTH_MISC \fP\fP
+Virtual depth for Misc object\&. 
+.TP
+\fB\fIHWLOC_TYPE_DEPTH_MEMCACHE \fP\fP
+Virtual depth for MemCache object\&. 
+.SH "Function Documentation"
+.PP 
+.SS "\fBhwloc_obj_type_t\fP hwloc_get_depth_type (\fBhwloc_topology_t\fP topology, int depth)"
+
+.PP
+Returns the type of objects at depth \fCdepth\fP\&. \fCdepth\fP should between 0 and \fBhwloc_topology_get_depth()\fP-1, or a virtual depth such as \fBHWLOC_TYPE_DEPTH_NUMANODE\fP\&.
+.PP
+\fBReturns\fP
+.RS 4
+(hwloc_obj_type_t)-1 if depth \fCdepth\fP does not exist\&. 
+.RE
+.PP
+
+.SS "int hwloc_get_memory_parents_depth (\fBhwloc_topology_t\fP topology)"
+
+.PP
+Return the depth of parents where memory objects are attached\&. Memory objects have virtual negative depths because they are not part of the main CPU-side hierarchy of objects\&. This depth should not be compared with other level depths\&.
+.PP
+If all Memory objects are attached to Normal parents at the same depth, this parent depth may be compared to other as usual, for instance for knowing whether NUMA nodes is attached above or below Packages\&.
+.PP
+\fBReturns\fP
+.RS 4
+The depth of Normal parents of all memory children if all these parents have the same depth\&. For instance the depth of the Package level if all NUMA nodes are attached to Package objects\&.
+.PP
+\fBHWLOC_TYPE_DEPTH_MULTIPLE\fP if Normal parents of all memory children do not have the same depth\&. For instance if some NUMA nodes are attached to Packages while others are attached to Groups\&. 
+.RE
+.PP
+
+.SS "unsigned hwloc_get_nbobjs_by_depth (\fBhwloc_topology_t\fP topology, int depth)"
+
+.PP
+Returns the width of level at depth \fCdepth\fP\&. 
+.SS "static int hwloc_get_nbobjs_by_type (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Returns the width of level type \fCtype\fP\&. If no object for that type exists, 0 is returned\&. If there are several levels with objects of that type, -1 is returned\&. 
+.SS "static \fBhwloc_obj_t\fP hwloc_get_next_obj_by_depth (\fBhwloc_topology_t\fP topology, int depth, \fBhwloc_obj_t\fP prev)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Returns the next object at depth \fCdepth\fP\&. If \fCprev\fP is \fCNULL\fP, return the first object at depth \fCdepth\fP\&. 
+.SS "static \fBhwloc_obj_t\fP hwloc_get_next_obj_by_type (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type, \fBhwloc_obj_t\fP prev)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Returns the next object of type \fCtype\fP\&. If \fCprev\fP is \fCNULL\fP, return the first object at type \fCtype\fP\&. If there are multiple or no depth for given type, return \fCNULL\fP and let the caller fallback to \fBhwloc_get_next_obj_by_depth()\fP\&. 
+.SS "\fBhwloc_obj_t\fP hwloc_get_obj_by_depth (\fBhwloc_topology_t\fP topology, int depth, unsigned idx)"
+
+.PP
+Returns the topology object at logical index \fCidx\fP from depth \fCdepth\fP\&. 
+.SS "static \fBhwloc_obj_t\fP hwloc_get_obj_by_type (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type, unsigned idx)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Returns the topology object at logical index \fCidx\fP with type \fCtype\fP\&. If no object for that type exists, \fCNULL\fP is returned\&. If there are several levels with objects of that type (\fBHWLOC_OBJ_GROUP\fP), \fCNULL\fP is returned and the caller may fallback to \fBhwloc_get_obj_by_depth()\fP\&. 
+.SS "static \fBhwloc_obj_t\fP hwloc_get_root_obj (\fBhwloc_topology_t\fP topology)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Returns the top-object of the topology-tree\&. Its type is \fBHWLOC_OBJ_MACHINE\fP\&. 
+.SS "int hwloc_get_type_depth (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type)"
+
+.PP
+Returns the depth of objects of type \fCtype\fP\&. If no object of this type is present on the underlying architecture, or if the OS doesn't provide this kind of information, the function returns \fBHWLOC_TYPE_DEPTH_UNKNOWN\fP\&.
+.PP
+If type is absent but a similar type is acceptable, see also \fBhwloc_get_type_or_below_depth()\fP and \fBhwloc_get_type_or_above_depth()\fP\&.
+.PP
+If \fBHWLOC_OBJ_GROUP\fP is given, the function may return \fBHWLOC_TYPE_DEPTH_MULTIPLE\fP if multiple levels of Groups exist\&.
+.PP
+If a NUMA node, I/O or Misc object type is given, the function returns a virtual value because these objects are stored in special levels that are not CPU-related\&. This virtual depth may be passed to other hwloc functions such as \fBhwloc_get_obj_by_depth()\fP but it should not be considered as an actual depth by the application\&. In particular, it should not be compared with any other object depth or with the entire topology depth\&. 
+.PP
+\fBSee also\fP
+.RS 4
+\fBhwloc_get_memory_parents_depth()\fP\&.
+.PP
+\fBhwloc_type_sscanf_as_depth()\fP for returning the depth of objects whose type is given as a string\&. 
+.RE
+.PP
+
+.SS "static int hwloc_get_type_or_above_depth (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Returns the depth of objects of type \fCtype\fP or above\&. If no object of this type is present on the underlying architecture, the function returns the depth of the first 'present' object typically containing \fCtype\fP\&.
+.PP
+This function is only meaningful for normal object types\&. If a memory, I/O or Misc object type is given, the corresponding virtual depth is always returned (see \fBhwloc_get_type_depth()\fP)\&.
+.PP
+May return \fBHWLOC_TYPE_DEPTH_MULTIPLE\fP for \fBHWLOC_OBJ_GROUP\fP just like \fBhwloc_get_type_depth()\fP\&. 
+.SS "static int hwloc_get_type_or_below_depth (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Returns the depth of objects of type \fCtype\fP or below\&. If no object of this type is present on the underlying architecture, the function returns the depth of the first 'present' object typically found inside \fCtype\fP\&.
+.PP
+This function is only meaningful for normal object types\&. If a memory, I/O or Misc object type is given, the corresponding virtual depth is always returned (see \fBhwloc_get_type_depth()\fP)\&.
+.PP
+May return \fBHWLOC_TYPE_DEPTH_MULTIPLE\fP for \fBHWLOC_OBJ_GROUP\fP just like \fBhwloc_get_type_depth()\fP\&. 
+.SS "int hwloc_topology_get_depth (\fBhwloc_topology_t\fP restrict topology)"
+
+.PP
+Get the depth of the hierarchical tree of objects\&. This is the depth of \fBHWLOC_OBJ_PU\fP objects plus one\&.
+.PP
+\fBNote\fP
+.RS 4
+NUMA nodes, I/O and Misc objects are ignored when computing the depth of the tree (they are placed on special levels)\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_levelzero.3 b/doc/doxygen-doc/man/man3/hwlocality_levelzero.3
new file mode 100644
index 00000000..9cfdd1bf
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_levelzero.3
@@ -0,0 +1,56 @@
+.TH "hwlocality_levelzero" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_levelzero \- Interoperability with the oneAPI Level Zero interface\&.
+.SH SYNOPSIS
+.br
+.PP
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "static int \fBhwloc_levelzero_get_device_cpuset\fP (\fBhwloc_topology_t\fP topology, ze_device_handle_t device, \fBhwloc_cpuset_t\fP set)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_levelzero_get_device_osdev\fP (\fBhwloc_topology_t\fP topology, ze_device_handle_t device)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+This interface offers ways to retrieve topology information about devices managed by the Level Zero API\&. 
+.SH "Function Documentation"
+.PP 
+.SS "static int hwloc_levelzero_get_device_cpuset (\fBhwloc_topology_t\fP topology, ze_device_handle_t device, \fBhwloc_cpuset_t\fP set)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the CPU set of logical processors that are physically close to the Level Zero device \fCdevice\fP\&. Store in \fCset\fP the CPU-set describing the locality of the Level Zero device \fCdevice\fP\&.
+.PP
+Topology \fCtopology\fP and device \fCdevice\fP must match the local machine\&. The Level Zero must have been initialized with Sysman enabled (ZES_ENABLE_SYSMAN=1 in the environment)\&. I/O devices detection and the Level Zero component are not needed in the topology\&.
+.PP
+The function only returns the locality of the device\&. If more information about the device is needed, OS objects should be used instead, see \fBhwloc_levelzero_get_device_osdev()\fP\&.
+.PP
+This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset\&. 
+.SS "static \fBhwloc_obj_t\fP hwloc_levelzero_get_device_osdev (\fBhwloc_topology_t\fP topology, ze_device_handle_t device)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the hwloc OS device object corresponding to Level Zero device \fCdevice\fP\&. 
+.PP
+\fBReturns\fP
+.RS 4
+The hwloc OS device object that describes the given Level Zero device \fCdevice\fP\&. 
+.PP
+\fCNULL\fP if none could be found\&.
+.RE
+.PP
+Topology \fCtopology\fP and device \fCdv_ind\fP must match the local machine\&. I/O devices detection and the Level Zero component must be enabled in the topology\&. If not, the locality of the object may still be found using \fBhwloc_levelzero_get_device_cpuset()\fP\&.
+.PP
+\fBNote\fP
+.RS 4
+The corresponding hwloc PCI device may be found by looking at the result parent pointer (unless PCI devices are filtered out)\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_linux.3 b/doc/doxygen-doc/man/man3/hwlocality_linux.3
new file mode 100644
index 00000000..6b2cf776
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_linux.3
@@ -0,0 +1,78 @@
+.TH "hwlocality_linux" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_linux \- Linux-specific helpers
+.SH SYNOPSIS
+.br
+.PP
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "int \fBhwloc_linux_set_tid_cpubind\fP (\fBhwloc_topology_t\fP topology, pid_t tid, \fBhwloc_const_cpuset_t\fP set)"
+.br
+.ti -1c
+.RI "int \fBhwloc_linux_get_tid_cpubind\fP (\fBhwloc_topology_t\fP topology, pid_t tid, \fBhwloc_cpuset_t\fP set)"
+.br
+.ti -1c
+.RI "int \fBhwloc_linux_get_tid_last_cpu_location\fP (\fBhwloc_topology_t\fP topology, pid_t tid, \fBhwloc_bitmap_t\fP set)"
+.br
+.ti -1c
+.RI "int \fBhwloc_linux_read_path_as_cpumask\fP (const char *path, \fBhwloc_bitmap_t\fP set)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+This includes helpers for manipulating Linux kernel cpumap files, and hwloc equivalents of the Linux sched_setaffinity and sched_getaffinity system calls\&. 
+.SH "Function Documentation"
+.PP 
+.SS "int hwloc_linux_get_tid_cpubind (\fBhwloc_topology_t\fP topology, pid_t tid, \fBhwloc_cpuset_t\fP set)"
+
+.PP
+Get the current binding of thread \fCtid\fP\&. The CPU-set \fCset\fP (previously allocated by the caller) is filled with the list of PUs which the thread was last bound to\&.
+.PP
+The behavior is exactly the same as the Linux sched_getaffinity system call, but uses a hwloc cpuset\&.
+.PP
+\fBNote\fP
+.RS 4
+This is equivalent to calling \fBhwloc_get_proc_cpubind()\fP with \fBHWLOC_CPUBIND_THREAD\fP as flags\&. 
+.RE
+.PP
+
+.SS "int hwloc_linux_get_tid_last_cpu_location (\fBhwloc_topology_t\fP topology, pid_t tid, \fBhwloc_bitmap_t\fP set)"
+
+.PP
+Get the last physical CPU where thread \fCtid\fP ran\&. The CPU-set \fCset\fP (previously allocated by the caller) is filled with the PU which the thread last ran on\&.
+.PP
+\fBNote\fP
+.RS 4
+This is equivalent to calling \fBhwloc_get_proc_last_cpu_location()\fP with \fBHWLOC_CPUBIND_THREAD\fP as flags\&. 
+.RE
+.PP
+
+.SS "int hwloc_linux_read_path_as_cpumask (const char * path, \fBhwloc_bitmap_t\fP set)"
+
+.PP
+Convert a linux kernel cpumask file \fCpath\fP into a hwloc bitmap \fCset\fP\&. Might be used when reading CPU set from sysfs attributes such as topology and caches for processors, or local_cpus for devices\&.
+.PP
+\fBNote\fP
+.RS 4
+This function ignores the HWLOC_FSROOT environment variable\&. 
+.RE
+.PP
+
+.SS "int hwloc_linux_set_tid_cpubind (\fBhwloc_topology_t\fP topology, pid_t tid, \fBhwloc_const_cpuset_t\fP set)"
+
+.PP
+Bind a thread \fCtid\fP on cpus given in cpuset \fCset\fP\&. The behavior is exactly the same as the Linux sched_setaffinity system call, but uses a hwloc cpuset\&.
+.PP
+\fBNote\fP
+.RS 4
+This is equivalent to calling \fBhwloc_set_proc_cpubind()\fP with HWLOC_CPUBIND_THREAD as flags\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_linux_libnuma_bitmask.3 b/doc/doxygen-doc/man/man3/hwlocality_linux_libnuma_bitmask.3
new file mode 100644
index 00000000..c7febb75
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_linux_libnuma_bitmask.3
@@ -0,0 +1,75 @@
+.TH "hwlocality_linux_libnuma_bitmask" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_linux_libnuma_bitmask \- Interoperability with Linux libnuma bitmask
+.SH SYNOPSIS
+.br
+.PP
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "static struct bitmask * \fBhwloc_cpuset_to_linux_libnuma_bitmask\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP cpuset)"
+.br
+.ti -1c
+.RI "static struct bitmask * \fBhwloc_nodeset_to_linux_libnuma_bitmask\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_const_nodeset_t\fP nodeset)"
+.br
+.ti -1c
+.RI "static int \fBhwloc_cpuset_from_linux_libnuma_bitmask\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_cpuset_t\fP cpuset, const struct bitmask *bitmask)"
+.br
+.ti -1c
+.RI "static int \fBhwloc_nodeset_from_linux_libnuma_bitmask\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_nodeset_t\fP nodeset, const struct bitmask *bitmask)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+This interface helps converting between Linux libnuma bitmasks and hwloc cpusets and nodesets\&.
+.PP
+\fBNote\fP
+.RS 4
+Topology \fCtopology\fP must match the current machine\&.
+.PP
+The behavior of libnuma is undefined if the kernel is not NUMA-aware\&. (when CONFIG_NUMA is not set in the kernel configuration)\&. This helper and libnuma may thus not be strictly compatible in this case, which may be detected by checking whether numa_available() returns -1\&. 
+.RE
+.PP
+
+.SH "Function Documentation"
+.PP 
+.SS "static int hwloc_cpuset_from_linux_libnuma_bitmask (\fBhwloc_topology_t\fP topology, \fBhwloc_cpuset_t\fP cpuset, const struct bitmask * bitmask)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Convert libnuma bitmask \fCbitmask\fP into hwloc CPU set \fCcpuset\fP\&. This function may be used after calling many numa_ functions that use a struct bitmask as an output parameter\&. 
+.SS "static struct bitmask * hwloc_cpuset_to_linux_libnuma_bitmask (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP cpuset)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Convert hwloc CPU set \fCcpuset\fP into the returned libnuma bitmask\&. The returned bitmask should later be freed with numa_bitmask_free\&.
+.PP
+This function may be used before calling many numa_ functions that use a struct bitmask as an input parameter\&.
+.PP
+\fBReturns\fP
+.RS 4
+newly allocated struct bitmask\&. 
+.RE
+.PP
+
+.SS "static int hwloc_nodeset_from_linux_libnuma_bitmask (\fBhwloc_topology_t\fP topology, \fBhwloc_nodeset_t\fP nodeset, const struct bitmask * bitmask)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Convert libnuma bitmask \fCbitmask\fP into hwloc NUMA node set \fCnodeset\fP\&. This function may be used after calling many numa_ functions that use a struct bitmask as an output parameter\&. 
+.SS "static struct bitmask * hwloc_nodeset_to_linux_libnuma_bitmask (\fBhwloc_topology_t\fP topology, \fBhwloc_const_nodeset_t\fP nodeset)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Convert hwloc NUMA node set \fCnodeset\fP into the returned libnuma bitmask\&. The returned bitmask should later be freed with numa_bitmask_free\&.
+.PP
+This function may be used before calling many numa_ functions that use a struct bitmask as an input parameter\&.
+.PP
+\fBReturns\fP
+.RS 4
+newly allocated struct bitmask\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_linux_libnuma_ulongs.3 b/doc/doxygen-doc/man/man3/hwlocality_linux_libnuma_ulongs.3
new file mode 100644
index 00000000..450e9668
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_linux_libnuma_ulongs.3
@@ -0,0 +1,65 @@
+.TH "hwlocality_linux_libnuma_ulongs" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_linux_libnuma_ulongs \- Interoperability with Linux libnuma unsigned long masks
+.SH SYNOPSIS
+.br
+.PP
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "static int \fBhwloc_cpuset_to_linux_libnuma_ulongs\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP cpuset, unsigned long *mask, unsigned long *maxnode)"
+.br
+.ti -1c
+.RI "static int \fBhwloc_nodeset_to_linux_libnuma_ulongs\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_const_nodeset_t\fP nodeset, unsigned long *mask, unsigned long *maxnode)"
+.br
+.ti -1c
+.RI "static int \fBhwloc_cpuset_from_linux_libnuma_ulongs\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_cpuset_t\fP cpuset, const unsigned long *mask, unsigned long maxnode)"
+.br
+.ti -1c
+.RI "static int \fBhwloc_nodeset_from_linux_libnuma_ulongs\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_nodeset_t\fP nodeset, const unsigned long *mask, unsigned long maxnode)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+This interface helps converting between Linux libnuma unsigned long masks and hwloc cpusets and nodesets\&.
+.PP
+\fBNote\fP
+.RS 4
+Topology \fCtopology\fP must match the current machine\&.
+.PP
+The behavior of libnuma is undefined if the kernel is not NUMA-aware\&. (when CONFIG_NUMA is not set in the kernel configuration)\&. This helper and libnuma may thus not be strictly compatible in this case, which may be detected by checking whether numa_available() returns -1\&. 
+.RE
+.PP
+
+.SH "Function Documentation"
+.PP 
+.SS "static int hwloc_cpuset_from_linux_libnuma_ulongs (\fBhwloc_topology_t\fP topology, \fBhwloc_cpuset_t\fP cpuset, const unsigned long * mask, unsigned long maxnode)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Convert the array of unsigned long \fCmask\fP into hwloc CPU set\&. \fCmask\fP is a array of unsigned long that will be read\&. \fCmaxnode\fP contains the maximal node number that may be read in \fCmask\fP\&.
+.PP
+This function may be used after calling get_mempolicy or any other function that takes an array of unsigned long as output parameter (and possibly a maximal node number as input parameter)\&. 
+.SS "static int hwloc_cpuset_to_linux_libnuma_ulongs (\fBhwloc_topology_t\fP topology, \fBhwloc_const_cpuset_t\fP cpuset, unsigned long * mask, unsigned long * maxnode)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Convert hwloc CPU set \fCcpuset\fP into the array of unsigned long \fCmask\fP\&. \fCmask\fP is the array of unsigned long that will be filled\&. \fCmaxnode\fP contains the maximal node number that may be stored in \fCmask\fP\&. \fCmaxnode\fP will be set to the maximal node number that was found, plus one\&.
+.PP
+This function may be used before calling set_mempolicy, mbind, migrate_pages or any other function that takes an array of unsigned long and a maximal node number as input parameter\&. 
+.SS "static int hwloc_nodeset_from_linux_libnuma_ulongs (\fBhwloc_topology_t\fP topology, \fBhwloc_nodeset_t\fP nodeset, const unsigned long * mask, unsigned long maxnode)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Convert the array of unsigned long \fCmask\fP into hwloc NUMA node set\&. \fCmask\fP is a array of unsigned long that will be read\&. \fCmaxnode\fP contains the maximal node number that may be read in \fCmask\fP\&.
+.PP
+This function may be used after calling get_mempolicy or any other function that takes an array of unsigned long as output parameter (and possibly a maximal node number as input parameter)\&. 
+.SS "static int hwloc_nodeset_to_linux_libnuma_ulongs (\fBhwloc_topology_t\fP topology, \fBhwloc_const_nodeset_t\fP nodeset, unsigned long * mask, unsigned long * maxnode)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Convert hwloc NUMA node set \fCnodeset\fP into the array of unsigned long \fCmask\fP\&. \fCmask\fP is the array of unsigned long that will be filled\&. \fCmaxnode\fP contains the maximal node number that may be stored in \fCmask\fP\&. \fCmaxnode\fP will be set to the maximal node number that was found, plus one\&.
+.PP
+This function may be used before calling set_mempolicy, mbind, migrate_pages or any other function that takes an array of unsigned long and a maximal node number as input parameter\&. 
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_memattrs.3 b/doc/doxygen-doc/man/man3/hwlocality_memattrs.3
new file mode 100644
index 00000000..fc478112
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_memattrs.3
@@ -0,0 +1,241 @@
+.TH "hwlocality_memattrs" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_memattrs \- Comparing memory node attributes for finding where to allocate on
+.SH SYNOPSIS
+.br
+.PP
+.SS "Data Structures"
+
+.in +1c
+.ti -1c
+.RI "struct \fBhwloc_location\fP"
+.br
+.in -1c
+.SS "Typedefs"
+
+.in +1c
+.ti -1c
+.RI "typedef unsigned \fBhwloc_memattr_id_t\fP"
+.br
+.in -1c
+.SS "Enumerations"
+
+.in +1c
+.ti -1c
+.RI "enum \fBhwloc_memattr_id_e\fP { \fBHWLOC_MEMATTR_ID_CAPACITY\fP, \fBHWLOC_MEMATTR_ID_LOCALITY\fP, \fBHWLOC_MEMATTR_ID_BANDWIDTH\fP, \fBHWLOC_MEMATTR_ID_READ_BANDWIDTH\fP, \fBHWLOC_MEMATTR_ID_WRITE_BANDWIDTH\fP, \fBHWLOC_MEMATTR_ID_LATENCY\fP, \fBHWLOC_MEMATTR_ID_READ_LATENCY\fP, \fBHWLOC_MEMATTR_ID_WRITE_LATENCY\fP, \fBHWLOC_MEMATTR_ID_MAX\fP }"
+.br
+.ti -1c
+.RI "enum \fBhwloc_location_type_e\fP { \fBHWLOC_LOCATION_TYPE_CPUSET\fP, \fBHWLOC_LOCATION_TYPE_OBJECT\fP }"
+.br
+.ti -1c
+.RI "enum \fBhwloc_local_numanode_flag_e\fP { \fBHWLOC_LOCAL_NUMANODE_FLAG_LARGER_LOCALITY\fP, \fBHWLOC_LOCAL_NUMANODE_FLAG_SMALLER_LOCALITY\fP, \fBHWLOC_LOCAL_NUMANODE_FLAG_ALL\fP }"
+.br
+.in -1c
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "int \fBhwloc_memattr_get_by_name\fP (\fBhwloc_topology_t\fP topology, const char *name, \fBhwloc_memattr_id_t\fP *id)"
+.br
+.ti -1c
+.RI "int \fBhwloc_get_local_numanode_objs\fP (\fBhwloc_topology_t\fP topology, struct \fBhwloc_location\fP *location, unsigned *nr, \fBhwloc_obj_t\fP *nodes, unsigned long flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_memattr_get_value\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_memattr_id_t\fP attribute, \fBhwloc_obj_t\fP target_node, struct \fBhwloc_location\fP *initiator, unsigned long flags, hwloc_uint64_t *value)"
+.br
+.ti -1c
+.RI "int \fBhwloc_memattr_get_best_target\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_memattr_id_t\fP attribute, struct \fBhwloc_location\fP *initiator, unsigned long flags, \fBhwloc_obj_t\fP *best_target, hwloc_uint64_t *value)"
+.br
+.ti -1c
+.RI "int \fBhwloc_memattr_get_best_initiator\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_memattr_id_t\fP attribute, \fBhwloc_obj_t\fP target, unsigned long flags, struct \fBhwloc_location\fP *best_initiator, hwloc_uint64_t *value)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+Platforms with heterogeneous memory require ways to decide whether a buffer should be allocated on 'fast' memory (such as HBM), 'normal' memory (DDR) or even 'slow' but large-capacity memory (non-volatile memory)\&. These memory nodes are called 'Targets' while the CPU accessing them is called the 'Initiator'\&. Access performance depends on their locality (NUMA platforms) as well as the intrinsic performance of the targets (heterogeneous platforms)\&.
+.PP
+The following attributes describe the performance of memory accesses from an Initiator to a memory Target, for instance their latency or bandwidth\&. Initiators performing these memory accesses are usually some PUs or Cores (described as a CPU set)\&. Hence a Core may choose where to allocate a memory buffer by comparing the attributes of different target memory nodes nearby\&.
+.PP
+There are also some attributes that are system-wide\&. Their value does not depend on a specific initiator performing an access\&. The memory node Capacity is an example of such attribute without initiator\&.
+.PP
+One way to use this API is to start with a cpuset describing the Cores where a program is bound\&. The best target NUMA node for allocating memory in this program on these Cores may be obtained by passing this cpuset as an initiator to \fBhwloc_memattr_get_best_target()\fP with the relevant memory attribute\&. For instance, if the code is latency limited, use the Latency attribute\&.
+.PP
+A more flexible approach consists in getting the list of local NUMA nodes by passing this cpuset to \fBhwloc_get_local_numanode_objs()\fP\&. Attribute values for these nodes, if any, may then be obtained with \fBhwloc_memattr_get_value()\fP and manually compared with the desired criteria\&.
+.PP
+\fBSee also\fP
+.RS 4
+An example is available in doc/examples/memory-attributes\&.c in the source tree\&.
+.RE
+.PP
+\fBNote\fP
+.RS 4
+The API also supports specific objects as initiator, but it is currently not used internally by hwloc\&. Users may for instance use it to provide custom performance values for host memory accesses performed by GPUs\&.
+.PP
+The interface actually also accepts targets that are not NUMA nodes\&. 
+.RE
+.PP
+
+.SH "Typedef Documentation"
+.PP 
+.SS "typedef unsigned \fBhwloc_memattr_id_t\fP"
+
+.PP
+A memory attribute identifier\&. May be either one of \fBhwloc_memattr_id_e\fP or a new id returned by \fBhwloc_memattr_register()\fP\&. 
+.SH "Enumeration Type Documentation"
+.PP 
+.SS "enum \fBhwloc_local_numanode_flag_e\fP"
+
+.PP
+Flags for selecting target NUMA nodes\&. 
+.PP
+\fBEnumerator\fP
+.in +1c
+.TP
+\fB\fIHWLOC_LOCAL_NUMANODE_FLAG_LARGER_LOCALITY \fP\fP
+Select NUMA nodes whose locality is larger than the given cpuset\&. For instance, if a single PU (or its cpuset) is given in \fCinitiator\fP, select all nodes close to the package that contains this PU\&. 
+.TP
+\fB\fIHWLOC_LOCAL_NUMANODE_FLAG_SMALLER_LOCALITY \fP\fP
+Select NUMA nodes whose locality is smaller than the given cpuset\&. For instance, if a package (or its cpuset) is given in \fCinitiator\fP, also select nodes that are attached to only a half of that package\&. 
+.TP
+\fB\fIHWLOC_LOCAL_NUMANODE_FLAG_ALL \fP\fP
+Select all NUMA nodes in the topology\&. The initiator \fCinitiator\fP is ignored\&. 
+.SS "enum \fBhwloc_location_type_e\fP"
+
+.PP
+Type of location\&. 
+.PP
+\fBEnumerator\fP
+.in +1c
+.TP
+\fB\fIHWLOC_LOCATION_TYPE_CPUSET \fP\fP
+Location is given as a cpuset, in the location cpuset union field\&. 
+.TP
+\fB\fIHWLOC_LOCATION_TYPE_OBJECT \fP\fP
+Location is given as an object, in the location object union field\&. 
+.SS "enum \fBhwloc_memattr_id_e\fP"
+
+.PP
+Memory node attributes\&. 
+.PP
+\fBEnumerator\fP
+.in +1c
+.TP
+\fB\fIHWLOC_MEMATTR_ID_CAPACITY \fP\fP
+The "Capacity" is returned in bytes (local_memory attribute in objects)\&. Best capacity nodes are nodes with \fBhigher capacity\fP\&.
+.PP
+No initiator is involved when looking at this attribute\&. The corresponding attribute flags are \fBHWLOC_MEMATTR_FLAG_HIGHER_FIRST\fP\&. 
+.TP
+\fB\fIHWLOC_MEMATTR_ID_LOCALITY \fP\fP
+The "Locality" is returned as the number of PUs in that locality (e\&.g\&. the weight of its cpuset)\&. Best locality nodes are nodes with \fBsmaller locality\fP (nodes that are local to very few PUs)\&. Poor locality nodes are nodes with larger locality (nodes that are local to the entire machine)\&.
+.PP
+No initiator is involved when looking at this attribute\&. The corresponding attribute flags are \fBHWLOC_MEMATTR_FLAG_HIGHER_FIRST\fP\&. 
+.TP
+\fB\fIHWLOC_MEMATTR_ID_BANDWIDTH \fP\fP
+The "Bandwidth" is returned in MiB/s, as seen from the given initiator location\&. Best bandwidth nodes are nodes with \fBhigher bandwidth\fP\&.
+.PP
+The corresponding attribute flags are \fBHWLOC_MEMATTR_FLAG_HIGHER_FIRST\fP and \fBHWLOC_MEMATTR_FLAG_NEED_INITIATOR\fP\&.
+.PP
+This is the average bandwidth for read and write accesses\&. If the platform provides individual read and write bandwidths but no explicit average value, hwloc computes and returns the average\&. 
+.TP
+\fB\fIHWLOC_MEMATTR_ID_READ_BANDWIDTH \fP\fP
+The "ReadBandwidth" is returned in MiB/s, as seen from the given initiator location\&. Best bandwidth nodes are nodes with \fBhigher bandwidth\fP\&.
+.PP
+The corresponding attribute flags are \fBHWLOC_MEMATTR_FLAG_HIGHER_FIRST\fP and \fBHWLOC_MEMATTR_FLAG_NEED_INITIATOR\fP\&. 
+.TP
+\fB\fIHWLOC_MEMATTR_ID_WRITE_BANDWIDTH \fP\fP
+The "WriteBandwidth" is returned in MiB/s, as seen from the given initiator location\&. Best bandwidth nodes are nodes with \fBhigher bandwidth\fP\&.
+.PP
+The corresponding attribute flags are \fBHWLOC_MEMATTR_FLAG_HIGHER_FIRST\fP and \fBHWLOC_MEMATTR_FLAG_NEED_INITIATOR\fP\&. 
+.TP
+\fB\fIHWLOC_MEMATTR_ID_LATENCY \fP\fP
+The "Latency" is returned as nanoseconds, as seen from the given initiator location\&. Best latency nodes are nodes with \fBsmaller latency\fP\&.
+.PP
+The corresponding attribute flags are \fBHWLOC_MEMATTR_FLAG_LOWER_FIRST\fP and \fBHWLOC_MEMATTR_FLAG_NEED_INITIATOR\fP\&.
+.PP
+This is the average latency for read and write accesses\&. If the platform provides individual read and write latencies but no explicit average value, hwloc computes and returns the average\&. 
+.TP
+\fB\fIHWLOC_MEMATTR_ID_READ_LATENCY \fP\fP
+The "ReadLatency" is returned as nanoseconds, as seen from the given initiator location\&. Best latency nodes are nodes with \fBsmaller latency\fP\&.
+.PP
+The corresponding attribute flags are \fBHWLOC_MEMATTR_FLAG_LOWER_FIRST\fP and \fBHWLOC_MEMATTR_FLAG_NEED_INITIATOR\fP\&. 
+.TP
+\fB\fIHWLOC_MEMATTR_ID_WRITE_LATENCY \fP\fP
+The "WriteLatency" is returned as nanoseconds, as seen from the given initiator location\&. Best latency nodes are nodes with \fBsmaller latency\fP\&.
+.PP
+The corresponding attribute flags are \fBHWLOC_MEMATTR_FLAG_LOWER_FIRST\fP and \fBHWLOC_MEMATTR_FLAG_NEED_INITIATOR\fP\&. 
+.SH "Function Documentation"
+.PP 
+.SS "int hwloc_get_local_numanode_objs (\fBhwloc_topology_t\fP topology, struct \fBhwloc_location\fP * location, unsigned * nr, \fBhwloc_obj_t\fP * nodes, unsigned long flags)"
+
+.PP
+Return an array of local NUMA nodes\&. By default only select the NUMA nodes whose locality is exactly the given \fClocation\fP\&. More nodes may be selected if additional flags are given as a OR'ed set of \fBhwloc_local_numanode_flag_e\fP\&.
+.PP
+If \fClocation\fP is given as an explicit object, its CPU set is used to find NUMA nodes with the corresponding locality\&. If the object does not have a CPU set (e\&.g\&. I/O object), the CPU parent (where the I/O object is attached) is used\&.
+.PP
+On input, \fCnr\fP points to the number of nodes that may be stored in the \fCnodes\fP array\&. On output, \fCnr\fP will be changed to the number of stored nodes, or the number of nodes that would have been stored if there were enough room\&.
+.PP
+\fBNote\fP
+.RS 4
+Some of these NUMA nodes may not have any memory attribute values and hence not be reported as actual targets in other functions\&.
+.PP
+The number of NUMA nodes in the topology (obtained by \fBhwloc_bitmap_weight()\fP on the root object nodeset) may be used to allocate the \fCnodes\fP array\&.
+.PP
+When an object CPU set is given as locality, for instance a Package, and when flags contain both \fBHWLOC_LOCAL_NUMANODE_FLAG_LARGER_LOCALITY\fP and \fBHWLOC_LOCAL_NUMANODE_FLAG_SMALLER_LOCALITY\fP, the returned array corresponds to the nodeset of that object\&. 
+.RE
+.PP
+
+.SS "int hwloc_memattr_get_best_initiator (\fBhwloc_topology_t\fP topology, \fBhwloc_memattr_id_t\fP attribute, \fBhwloc_obj_t\fP target, unsigned long flags, struct \fBhwloc_location\fP * best_initiator, hwloc_uint64_t * value)"
+
+.PP
+Return the best initiator for the given attribute and target NUMA node\&. If the attribute does not relate to a specific initiator (it does not have the flag \fBHWLOC_MEMATTR_FLAG_NEED_INITIATOR\fP), \fC-1\fP is returned and \fCerrno\fP is set to \fCEINVAL\fP\&.
+.PP
+If \fCvalue\fP is non \fCNULL\fP, the corresponding value is returned there\&.
+.PP
+If multiple initiators have the same attribute values, only one is returned (and there is no way to clarify how that one is chosen)\&. Applications that want to detect initiators with identical/similar values, or that want to look at values for multiple attributes, should rather get all values using \fBhwloc_memattr_get_value()\fP and manually select the initiator they consider the best\&.
+.PP
+The returned initiator should not be modified or freed, it belongs to the topology\&.
+.PP
+\fCflags\fP must be \fC0\fP for now\&.
+.PP
+If there are no matching initiators, \fC-1\fP is returned with \fCerrno\fP set to \fCENOENT\fP; 
+.SS "int hwloc_memattr_get_best_target (\fBhwloc_topology_t\fP topology, \fBhwloc_memattr_id_t\fP attribute, struct \fBhwloc_location\fP * initiator, unsigned long flags, \fBhwloc_obj_t\fP * best_target, hwloc_uint64_t * value)"
+
+.PP
+Return the best target NUMA node for the given attribute and initiator\&. If the attribute does not relate to a specific initiator (it does not have the flag \fBHWLOC_MEMATTR_FLAG_NEED_INITIATOR\fP), location \fCinitiator\fP is ignored and may be \fCNULL\fP\&.
+.PP
+If \fCvalue\fP is non \fCNULL\fP, the corresponding value is returned there\&.
+.PP
+If multiple targets have the same attribute values, only one is returned (and there is no way to clarify how that one is chosen)\&. Applications that want to detect targets with identical/similar values, or that want to look at values for multiple attributes, should rather get all values using \fBhwloc_memattr_get_value()\fP and manually select the target they consider the best\&.
+.PP
+\fCflags\fP must be \fC0\fP for now\&.
+.PP
+If there are no matching targets, \fC-1\fP is returned with \fCerrno\fP set to \fCENOENT\fP;
+.PP
+\fBNote\fP
+.RS 4
+The initiator \fCinitiator\fP should be of type \fBHWLOC_LOCATION_TYPE_CPUSET\fP when refering to accesses performed by CPU cores\&. \fBHWLOC_LOCATION_TYPE_OBJECT\fP is currently unused internally by hwloc, but users may for instance use it to provide custom information about host memory accesses performed by GPUs\&. 
+.RE
+.PP
+
+.SS "int hwloc_memattr_get_by_name (\fBhwloc_topology_t\fP topology, const char * name, \fBhwloc_memattr_id_t\fP * id)"
+
+.PP
+Return the identifier of the memory attribute with the given name\&. 
+.SS "int hwloc_memattr_get_value (\fBhwloc_topology_t\fP topology, \fBhwloc_memattr_id_t\fP attribute, \fBhwloc_obj_t\fP target_node, struct \fBhwloc_location\fP * initiator, unsigned long flags, hwloc_uint64_t * value)"
+
+.PP
+Return an attribute value for a specific target NUMA node\&. If the attribute does not relate to a specific initiator (it does not have the flag \fBHWLOC_MEMATTR_FLAG_NEED_INITIATOR\fP), location \fCinitiator\fP is ignored and may be \fCNULL\fP\&.
+.PP
+\fCflags\fP must be \fC0\fP for now\&.
+.PP
+\fBNote\fP
+.RS 4
+The initiator \fCinitiator\fP should be of type \fBHWLOC_LOCATION_TYPE_CPUSET\fP when refering to accesses performed by CPU cores\&. \fBHWLOC_LOCATION_TYPE_OBJECT\fP is currently unused internally by hwloc, but users may for instance use it to provide custom information about host memory accesses performed by GPUs\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_memattrs_manage.3 b/doc/doxygen-doc/man/man3/hwlocality_memattrs_manage.3
new file mode 100644
index 00000000..783bada7
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_memattrs_manage.3
@@ -0,0 +1,130 @@
+.TH "hwlocality_memattrs_manage" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_memattrs_manage \- Managing memory attributes
+.SH SYNOPSIS
+.br
+.PP
+.SS "Enumerations"
+
+.in +1c
+.ti -1c
+.RI "enum \fBhwloc_memattr_flag_e\fP { \fBHWLOC_MEMATTR_FLAG_HIGHER_FIRST\fP = (1UL<<0), \fBHWLOC_MEMATTR_FLAG_LOWER_FIRST\fP = (1UL<<1), \fBHWLOC_MEMATTR_FLAG_NEED_INITIATOR\fP = (1UL<<2) }"
+.br
+.in -1c
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "int \fBhwloc_memattr_get_name\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_memattr_id_t\fP attribute, const char **name)"
+.br
+.ti -1c
+.RI "int \fBhwloc_memattr_get_flags\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_memattr_id_t\fP attribute, unsigned long *flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_memattr_register\fP (\fBhwloc_topology_t\fP topology, const char *name, unsigned long flags, \fBhwloc_memattr_id_t\fP *id)"
+.br
+.ti -1c
+.RI "int \fBhwloc_memattr_set_value\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_memattr_id_t\fP attribute, \fBhwloc_obj_t\fP target_node, struct \fBhwloc_location\fP *initiator, unsigned long flags, hwloc_uint64_t value)"
+.br
+.ti -1c
+.RI "int \fBhwloc_memattr_get_targets\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_memattr_id_t\fP attribute, struct \fBhwloc_location\fP *initiator, unsigned long flags, unsigned *nr, \fBhwloc_obj_t\fP *targets, hwloc_uint64_t *values)"
+.br
+.ti -1c
+.RI "int \fBhwloc_memattr_get_initiators\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_memattr_id_t\fP attribute, \fBhwloc_obj_t\fP target_node, unsigned long flags, unsigned *nr, struct \fBhwloc_location\fP *initiators, hwloc_uint64_t *values)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+
+.SH "Enumeration Type Documentation"
+.PP 
+.SS "enum \fBhwloc_memattr_flag_e\fP"
+
+.PP
+Memory attribute flags\&. Given to \fBhwloc_memattr_register()\fP and returned by \fBhwloc_memattr_get_flags()\fP\&. 
+.PP
+\fBEnumerator\fP
+.in +1c
+.TP
+\fB\fIHWLOC_MEMATTR_FLAG_HIGHER_FIRST \fP\fP
+The best nodes for this memory attribute are those with the higher values\&. For instance Bandwidth\&. 
+.TP
+\fB\fIHWLOC_MEMATTR_FLAG_LOWER_FIRST \fP\fP
+The best nodes for this memory attribute are those with the lower values\&. For instance Latency\&. 
+.TP
+\fB\fIHWLOC_MEMATTR_FLAG_NEED_INITIATOR \fP\fP
+The value returned for this memory attribute depends on the given initiator\&. For instance Bandwidth and Latency, but not Capacity\&. 
+.SH "Function Documentation"
+.PP 
+.SS "int hwloc_memattr_get_flags (\fBhwloc_topology_t\fP topology, \fBhwloc_memattr_id_t\fP attribute, unsigned long * flags)"
+
+.PP
+Return the flags of the given attribute\&. Flags are a OR'ed set of \fBhwloc_memattr_flag_e\fP\&. 
+.SS "int hwloc_memattr_get_initiators (\fBhwloc_topology_t\fP topology, \fBhwloc_memattr_id_t\fP attribute, \fBhwloc_obj_t\fP target_node, unsigned long flags, unsigned * nr, struct \fBhwloc_location\fP * initiators, hwloc_uint64_t * values)"
+
+.PP
+Return the initiators that have values for a given attribute for a specific target NUMA node\&. Return initiators for the given attribute and target node in the \fCinitiators\fP array\&. If \fCvalues\fP is not \fCNULL\fP, the corresponding attribute values are stored in the array it points to\&.
+.PP
+On input, \fCnr\fP points to the number of initiators that may be stored in the array \fCinitiators\fP (and \fCvalues\fP)\&. On output, \fCnr\fP points to the number of initiators (and values) that were actually found, even if some of them couldn't be stored in the array\&. Initiators that couldn't be stored are ignored, but the function still returns success (\fC0\fP)\&. The caller may find out by comparing the value pointed by \fCnr\fP before and after the function call\&.
+.PP
+The returned initiators should not be modified or freed, they belong to the topology\&.
+.PP
+\fCflags\fP must be \fC0\fP for now\&.
+.PP
+If the attribute does not relate to a specific initiator (it does not have the flag \fBHWLOC_MEMATTR_FLAG_NEED_INITIATOR\fP), no initiator is returned\&.
+.PP
+\fBNote\fP
+.RS 4
+This function is meant for tools and debugging (listing internal information) rather than for application queries\&. Applications should rather select useful NUMA nodes with \fBhwloc_get_local_numanode_objs()\fP and then look at their attribute values for some relevant initiators\&. 
+.RE
+.PP
+
+.SS "int hwloc_memattr_get_name (\fBhwloc_topology_t\fP topology, \fBhwloc_memattr_id_t\fP attribute, const char ** name)"
+
+.PP
+Return the name of a memory attribute\&. 
+.SS "int hwloc_memattr_get_targets (\fBhwloc_topology_t\fP topology, \fBhwloc_memattr_id_t\fP attribute, struct \fBhwloc_location\fP * initiator, unsigned long flags, unsigned * nr, \fBhwloc_obj_t\fP * targets, hwloc_uint64_t * values)"
+
+.PP
+Return the target NUMA nodes that have some values for a given attribute\&. Return targets for the given attribute in the \fCtargets\fP array (for the given initiator if any)\&. If \fCvalues\fP is not \fCNULL\fP, the corresponding attribute values are stored in the array it points to\&.
+.PP
+On input, \fCnr\fP points to the number of targets that may be stored in the array \fCtargets\fP (and \fCvalues\fP)\&. On output, \fCnr\fP points to the number of targets (and values) that were actually found, even if some of them couldn't be stored in the array\&. Targets that couldn't be stored are ignored, but the function still returns success (\fC0\fP)\&. The caller may find out by comparing the value pointed by \fCnr\fP before and after the function call\&.
+.PP
+The returned targets should not be modified or freed, they belong to the topology\&.
+.PP
+Argument \fCinitiator\fP is ignored if the attribute does not relate to a specific initiator (it does not have the flag \fBHWLOC_MEMATTR_FLAG_NEED_INITIATOR\fP)\&. Otherwise \fCinitiator\fP may be non \fCNULL\fP to report only targets that have a value for that initiator\&.
+.PP
+\fCflags\fP must be \fC0\fP for now\&.
+.PP
+\fBNote\fP
+.RS 4
+This function is meant for tools and debugging (listing internal information) rather than for application queries\&. Applications should rather select useful NUMA nodes with \fBhwloc_get_local_numanode_objs()\fP and then look at their attribute values\&.
+.PP
+The initiator \fCinitiator\fP should be of type \fBHWLOC_LOCATION_TYPE_CPUSET\fP when referring to accesses performed by CPU cores\&. \fBHWLOC_LOCATION_TYPE_OBJECT\fP is currently unused internally by hwloc, but users may for instance use it to provide custom information about host memory accesses performed by GPUs\&. 
+.RE
+.PP
+
+.SS "int hwloc_memattr_register (\fBhwloc_topology_t\fP topology, const char * name, unsigned long flags, \fBhwloc_memattr_id_t\fP * id)"
+
+.PP
+Register a new memory attribute\&. Add a specific memory attribute that is not defined in \fBhwloc_memattr_id_e\fP\&. Flags are a OR'ed set of \fBhwloc_memattr_flag_e\fP\&. It must contain at least one of \fBHWLOC_MEMATTR_FLAG_HIGHER_FIRST\fP or \fBHWLOC_MEMATTR_FLAG_LOWER_FIRST\fP\&. 
+.SS "int hwloc_memattr_set_value (\fBhwloc_topology_t\fP topology, \fBhwloc_memattr_id_t\fP attribute, \fBhwloc_obj_t\fP target_node, struct \fBhwloc_location\fP * initiator, unsigned long flags, hwloc_uint64_t value)"
+
+.PP
+Set an attribute value for a specific target NUMA node\&. If the attribute does not relate to a specific initiator (it does not have the flag \fBHWLOC_MEMATTR_FLAG_NEED_INITIATOR\fP), location \fCinitiator\fP is ignored and may be \fCNULL\fP\&.
+.PP
+The initiator will be copied into the topology, the caller should free anything allocated to store the initiator, for instance the cpuset\&.
+.PP
+\fCflags\fP must be \fC0\fP for now\&.
+.PP
+\fBNote\fP
+.RS 4
+The initiator \fCinitiator\fP should be of type \fBHWLOC_LOCATION_TYPE_CPUSET\fP when referring to accesses performed by CPU cores\&. \fBHWLOC_LOCATION_TYPE_OBJECT\fP is currently unused internally by hwloc, but users may for instance use it to provide custom information about host memory accesses performed by GPUs\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_membinding.3 b/doc/doxygen-doc/man/man3/hwlocality_membinding.3
new file mode 100644
index 00000000..2a9d98f4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_membinding.3
@@ -0,0 +1,328 @@
+.TH "hwlocality_membinding" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_membinding \- Memory binding
+.SH SYNOPSIS
+.br
+.PP
+.SS "Enumerations"
+
+.in +1c
+.ti -1c
+.RI "enum \fBhwloc_membind_policy_t\fP { \fBHWLOC_MEMBIND_DEFAULT\fP, \fBHWLOC_MEMBIND_FIRSTTOUCH\fP, \fBHWLOC_MEMBIND_BIND\fP, \fBHWLOC_MEMBIND_INTERLEAVE\fP, \fBHWLOC_MEMBIND_NEXTTOUCH\fP, \fBHWLOC_MEMBIND_MIXED\fP }"
+.br
+.ti -1c
+.RI "enum \fBhwloc_membind_flags_t\fP { \fBHWLOC_MEMBIND_PROCESS\fP, \fBHWLOC_MEMBIND_THREAD\fP, \fBHWLOC_MEMBIND_STRICT\fP, \fBHWLOC_MEMBIND_MIGRATE\fP, \fBHWLOC_MEMBIND_NOCPUBIND\fP, \fBHWLOC_MEMBIND_BYNODESET\fP }"
+.br
+.in -1c
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "int \fBhwloc_set_membind\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_const_bitmap_t\fP set, \fBhwloc_membind_policy_t\fP policy, int flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_get_membind\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_bitmap_t\fP set, \fBhwloc_membind_policy_t\fP *policy, int flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_set_proc_membind\fP (\fBhwloc_topology_t\fP topology, hwloc_pid_t pid, \fBhwloc_const_bitmap_t\fP set, \fBhwloc_membind_policy_t\fP policy, int flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_get_proc_membind\fP (\fBhwloc_topology_t\fP topology, hwloc_pid_t pid, \fBhwloc_bitmap_t\fP set, \fBhwloc_membind_policy_t\fP *policy, int flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_set_area_membind\fP (\fBhwloc_topology_t\fP topology, const void *addr, size_t len, \fBhwloc_const_bitmap_t\fP set, \fBhwloc_membind_policy_t\fP policy, int flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_get_area_membind\fP (\fBhwloc_topology_t\fP topology, const void *addr, size_t len, \fBhwloc_bitmap_t\fP set, \fBhwloc_membind_policy_t\fP *policy, int flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_get_area_memlocation\fP (\fBhwloc_topology_t\fP topology, const void *addr, size_t len, \fBhwloc_bitmap_t\fP set, int flags)"
+.br
+.ti -1c
+.RI "void * \fBhwloc_alloc\fP (\fBhwloc_topology_t\fP topology, size_t len)"
+.br
+.ti -1c
+.RI "void * \fBhwloc_alloc_membind\fP (\fBhwloc_topology_t\fP topology, size_t len, \fBhwloc_const_bitmap_t\fP set, \fBhwloc_membind_policy_t\fP policy, int flags)"
+.br
+.ti -1c
+.RI "static void * \fBhwloc_alloc_membind_policy\fP (\fBhwloc_topology_t\fP topology, size_t len, \fBhwloc_const_bitmap_t\fP set, \fBhwloc_membind_policy_t\fP policy, int flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_free\fP (\fBhwloc_topology_t\fP topology, void *addr, size_t len)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+Memory binding can be done three ways:
+.PP
+.IP "\(bu" 2
+explicit memory allocation thanks to \fBhwloc_alloc_membind()\fP and friends: the binding will have effect on the memory allocated by these functions\&.
+.IP "\(bu" 2
+implicit memory binding through binding policy: \fBhwloc_set_membind()\fP and friends only define the current policy of the process, which will be applied to the subsequent calls to malloc() and friends\&.
+.IP "\(bu" 2
+migration of existing memory ranges, thanks to \fBhwloc_set_area_membind()\fP and friends, which move already-allocated data\&.
+.PP
+.PP
+Not all operating systems support all three ways\&. \fBhwloc_topology_get_support()\fP may be used to query about the actual memory binding support in the currently used operating system\&.
+.PP
+When the requested binding operation is not available and the \fBHWLOC_MEMBIND_STRICT\fP flag was passed, the function returns -1\&. \fCerrno\fP will be set to \fCENOSYS\fP when the system does support the specified action or policy (e\&.g\&., some systems only allow binding memory on a per-thread basis, whereas other systems only allow binding memory for all threads in a process)\&. \fCerrno\fP will be set to EXDEV when the requested set can not be enforced (e\&.g\&., some systems only allow binding memory to a single NUMA node)\&.
+.PP
+If \fBHWLOC_MEMBIND_STRICT\fP was not passed, the function may fail as well, or the operating system may use a slightly different operation (with side-effects, smaller binding set, etc\&.) when the requested operation is not exactly supported\&.
+.PP
+The most portable form that should be preferred over the others whenever possible is as follows\&. It allocates some memory hopefully bound to the specified set\&. To do so, hwloc will possibly have to change the current memory binding policy in order to actually get the memory bound, if the OS does not provide any other way to simply allocate bound memory without changing the policy for all allocations\&. That is the difference with \fBhwloc_alloc_membind()\fP, which will never change the current memory binding policy\&.
+.PP
+.PP
+.nf
+hwloc_alloc_membind_policy(topology, size, set,
+                           HWLOC_MEMBIND_BIND, 0);
+.fi
+.PP
+.PP
+Each hwloc memory binding function takes a bitmap argument that is a CPU set by default, or a NUMA memory node set if the flag \fBHWLOC_MEMBIND_BYNODESET\fP is specified\&. See \fBObject Sets (hwloc_cpuset_t and hwloc_nodeset_t)\fP and \fBThe bitmap API\fP for a discussion of CPU sets and NUMA memory node sets\&. It is also possible to convert between CPU set and node set using \fBhwloc_cpuset_to_nodeset()\fP or \fBhwloc_cpuset_from_nodeset()\fP\&.
+.PP
+Memory binding by CPU set cannot work for CPU-less NUMA memory nodes\&. Binding by nodeset should therefore be preferred whenever possible\&.
+.PP
+\fBSee also\fP
+.RS 4
+Some example codes are available under doc/examples/ in the source tree\&.
+.RE
+.PP
+\fBNote\fP
+.RS 4
+On some operating systems, memory binding affects the CPU binding; see \fBHWLOC_MEMBIND_NOCPUBIND\fP 
+.RE
+.PP
+
+.SH "Enumeration Type Documentation"
+.PP 
+.SS "enum \fBhwloc_membind_flags_t\fP"
+
+.PP
+Memory binding flags\&. These flags can be used to refine the binding policy\&. All flags can be logically OR'ed together with the exception of \fBHWLOC_MEMBIND_PROCESS\fP and \fBHWLOC_MEMBIND_THREAD\fP; these two flags are mutually exclusive\&.
+.PP
+Not all systems support all kinds of binding\&. \fBhwloc_topology_get_support()\fP may be used to query about the actual memory binding support in the currently used operating system\&. See the 'Detailed Description' section of \fBMemory binding\fP for a description of errors that can occur\&. 
+.PP
+\fBEnumerator\fP
+.in +1c
+.TP
+\fB\fIHWLOC_MEMBIND_PROCESS \fP\fP
+Set policy for all threads of the specified (possibly multithreaded) process\&. This flag is mutually exclusive with \fBHWLOC_MEMBIND_THREAD\fP\&. 
+.TP
+\fB\fIHWLOC_MEMBIND_THREAD \fP\fP
+Set policy for a specific thread of the current process\&. This flag is mutually exclusive with \fBHWLOC_MEMBIND_PROCESS\fP\&. 
+.TP
+\fB\fIHWLOC_MEMBIND_STRICT \fP\fP
+Request strict binding from the OS\&. The function will fail if the binding can not be guaranteed / completely enforced\&.
+.PP
+This flag has slightly different meanings depending on which function it is used with\&. 
+.TP
+\fB\fIHWLOC_MEMBIND_MIGRATE \fP\fP
+Migrate existing allocated memory\&. If the memory cannot be migrated and the \fBHWLOC_MEMBIND_STRICT\fP flag is passed, an error will be returned\&. 
+.TP
+\fB\fIHWLOC_MEMBIND_NOCPUBIND \fP\fP
+Avoid any effect on CPU binding\&. On some operating systems, some underlying memory binding functions also bind the application to the corresponding CPU(s)\&. Using this flag will cause hwloc to avoid using OS functions that could potentially affect CPU bindings\&. Note, however, that using NOCPUBIND may reduce hwloc's overall memory binding support\&. Specifically: some of hwloc's memory binding functions may fail with errno set to ENOSYS when used with NOCPUBIND\&. 
+.TP
+\fB\fIHWLOC_MEMBIND_BYNODESET \fP\fP
+Consider the bitmap argument as a nodeset\&. The bitmap argument is considered a nodeset if this flag is given, or a cpuset otherwise by default\&.
+.PP
+Memory binding by CPU set cannot work for CPU-less NUMA memory nodes\&. Binding by nodeset should therefore be preferred whenever possible\&. 
+.SS "enum \fBhwloc_membind_policy_t\fP"
+
+.PP
+Memory binding policy\&. These constants can be used to choose the binding policy\&. Only one policy can be used at a time (i\&.e\&., the values cannot be OR'ed together)\&.
+.PP
+Not all systems support all kinds of binding\&. \fBhwloc_topology_get_support()\fP may be used to query about the actual memory binding policy support in the currently used operating system\&. See the 'Detailed Description' section of \fBMemory binding\fP for a description of errors that can occur\&. 
+.PP
+\fBEnumerator\fP
+.in +1c
+.TP
+\fB\fIHWLOC_MEMBIND_DEFAULT \fP\fP
+Reset the memory allocation policy to the system default\&. Depending on the operating system, this may correspond to \fBHWLOC_MEMBIND_FIRSTTOUCH\fP (Linux, FreeBSD), or \fBHWLOC_MEMBIND_BIND\fP (AIX, HP-UX, Solaris, Windows)\&. This policy is never returned by get membind functions\&. The nodeset argument is ignored\&. 
+.TP
+\fB\fIHWLOC_MEMBIND_FIRSTTOUCH \fP\fP
+Allocate each memory page individually on the local NUMA node of the thread that touches it\&. The given nodeset should usually be \fBhwloc_topology_get_topology_nodeset()\fP so that the touching thread may run and allocate on any node in the system\&.
+.PP
+On AIX, if the nodeset is smaller, pages are allocated locally (if the local node is in the nodeset) or from a random non-local node (otherwise)\&. 
+.TP
+\fB\fIHWLOC_MEMBIND_BIND \fP\fP
+Allocate memory on the specified nodes\&. 
+.TP
+\fB\fIHWLOC_MEMBIND_INTERLEAVE \fP\fP
+Allocate memory on the given nodes in an interleaved / round-robin manner\&. The precise layout of the memory across multiple NUMA nodes is OS/system specific\&. Interleaving can be useful when threads distributed across the specified NUMA nodes will all be accessing the whole memory range concurrently, since the interleave will then balance the memory references\&. 
+.TP
+\fB\fIHWLOC_MEMBIND_NEXTTOUCH \fP\fP
+For each page bound with this policy, by next time it is touched (and next time only), it is moved from its current location to the local NUMA node of the thread where the memory reference occurred (if it needs to be moved at all)\&. 
+.TP
+\fB\fIHWLOC_MEMBIND_MIXED \fP\fP
+Returned by get_membind() functions when multiple threads or parts of a memory area have differing memory binding policies\&. Also returned when binding is unknown because binding hooks are empty when the topology is loaded from XML without HWLOC_THISSYSTEM=1, etc\&. 
+.SH "Function Documentation"
+.PP 
+.SS "void* hwloc_alloc (\fBhwloc_topology_t\fP topology, size_t len)"
+
+.PP
+Allocate some memory\&. This is equivalent to malloc(), except that it tries to allocate page-aligned memory from the OS\&.
+.PP
+\fBNote\fP
+.RS 4
+The allocated memory should be freed with \fBhwloc_free()\fP\&. 
+.RE
+.PP
+
+.SS "void* hwloc_alloc_membind (\fBhwloc_topology_t\fP topology, size_t len, \fBhwloc_const_bitmap_t\fP set, \fBhwloc_membind_policy_t\fP policy, int flags)"
+
+.PP
+Allocate some memory on NUMA memory nodes specified by \fCset\fP\&. 
+.PP
+\fBReturns\fP
+.RS 4
+NULL with errno set to ENOSYS if the action is not supported and \fBHWLOC_MEMBIND_STRICT\fP is given 
+.PP
+NULL with errno set to EXDEV if the binding cannot be enforced and \fBHWLOC_MEMBIND_STRICT\fP is given 
+.PP
+NULL with errno set to ENOMEM if the memory allocation failed even before trying to bind\&.
+.RE
+.PP
+If \fBHWLOC_MEMBIND_BYNODESET\fP is specified, set is considered a nodeset\&. Otherwise it's a cpuset\&.
+.PP
+\fBNote\fP
+.RS 4
+The allocated memory should be freed with \fBhwloc_free()\fP\&. 
+.RE
+.PP
+
+.SS "static void* hwloc_alloc_membind_policy (\fBhwloc_topology_t\fP topology, size_t len, \fBhwloc_const_bitmap_t\fP set, \fBhwloc_membind_policy_t\fP policy, int flags)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Allocate some memory on NUMA memory nodes specified by \fCset\fP\&. First, try to allocate properly with \fBhwloc_alloc_membind()\fP\&. On failure, the current process or thread memory binding policy is changed with \fBhwloc_set_membind()\fP before allocating memory\&. Thus this function works in more cases, at the expense of changing the current state (possibly affecting future allocations that would not specify any policy)\&.
+.PP
+If \fBHWLOC_MEMBIND_BYNODESET\fP is specified, set is considered a nodeset\&. Otherwise it's a cpuset\&. 
+.SS "int hwloc_free (\fBhwloc_topology_t\fP topology, void * addr, size_t len)"
+
+.PP
+Free memory that was previously allocated by \fBhwloc_alloc()\fP or \fBhwloc_alloc_membind()\fP\&. 
+.SS "int hwloc_get_area_membind (\fBhwloc_topology_t\fP topology, const void * addr, size_t len, \fBhwloc_bitmap_t\fP set, \fBhwloc_membind_policy_t\fP * policy, int flags)"
+
+.PP
+Query the CPUs near the physical NUMA node(s) and binding policy of the memory identified by (\fCaddr\fP, \fClen\fP )\&. The bitmap \fCset\fP (previously allocated by the caller) is filled with the memory area binding\&.
+.PP
+This function has two output parameters: \fCset\fP and \fCpolicy\fP\&. The values returned in these parameters depend on both the \fCflags\fP passed in and the memory binding policies and nodesets of the pages in the address range\&.
+.PP
+If \fBHWLOC_MEMBIND_STRICT\fP is specified, the target pages are first checked to see if they all have the same memory binding policy and nodeset\&. If they do not, -1 is returned and errno is set to EXDEV\&. If they are identical across all pages, the set and policy are returned in \fCset\fP and \fCpolicy\fP, respectively\&.
+.PP
+If \fBHWLOC_MEMBIND_STRICT\fP is not specified, the union of all NUMA node(s) containing pages in the address range is calculated\&. If all pages in the target have the same policy, it is returned in \fCpolicy\fP\&. Otherwise, \fCpolicy\fP is set to \fBHWLOC_MEMBIND_MIXED\fP\&.
+.PP
+If \fBHWLOC_MEMBIND_BYNODESET\fP is specified, set is considered a nodeset\&. Otherwise it's a cpuset\&.
+.PP
+If any other flags are specified, -1 is returned and errno is set to EINVAL\&.
+.PP
+If \fClen\fP is 0, -1 is returned and errno is set to EINVAL\&. 
+.SS "int hwloc_get_area_memlocation (\fBhwloc_topology_t\fP topology, const void * addr, size_t len, \fBhwloc_bitmap_t\fP set, int flags)"
+
+.PP
+Get the NUMA nodes where memory identified by (\fCaddr\fP, \fClen\fP ) is physically allocated\&. The bitmap \fCset\fP (previously allocated by the caller) is filled according to the NUMA nodes where the memory area pages are physically allocated\&. If no page is actually allocated yet, \fCset\fP may be empty\&.
+.PP
+If pages spread to multiple nodes, it is not specified whether they spread equitably, or whether most of them are on a single node, etc\&.
+.PP
+The operating system may move memory pages from one processor to another at any time according to their binding, so this function may return something that is already outdated\&.
+.PP
+If \fBHWLOC_MEMBIND_BYNODESET\fP is specified in \fCflags\fP, set is considered a nodeset\&. Otherwise it's a cpuset\&.
+.PP
+If \fClen\fP is 0, \fCset\fP is emptied\&. 
+.SS "int hwloc_get_membind (\fBhwloc_topology_t\fP topology, \fBhwloc_bitmap_t\fP set, \fBhwloc_membind_policy_t\fP * policy, int flags)"
+
+.PP
+Query the default memory binding policy and physical locality of the current process or thread\&. The bitmap \fCset\fP (previously allocated by the caller) is filled with the process or thread memory binding\&.
+.PP
+This function has two output parameters: \fCset\fP and \fCpolicy\fP\&. The values returned in these parameters depend on both the \fCflags\fP passed in and the current memory binding policies and nodesets in the queried target\&.
+.PP
+Passing the \fBHWLOC_MEMBIND_PROCESS\fP flag specifies that the query target is the current policies and nodesets for all the threads in the current process\&. Passing \fBHWLOC_MEMBIND_THREAD\fP specifies that the query target is the current policy and nodeset for only the thread invoking this function\&.
+.PP
+If neither of these flags are passed (which is the most portable method), the process is assumed to be single threaded\&. This allows hwloc to use either process-based OS functions or thread-based OS functions, depending on which are available\&.
+.PP
+\fBHWLOC_MEMBIND_STRICT\fP is only meaningful when \fBHWLOC_MEMBIND_PROCESS\fP is also specified\&. In this case, hwloc will check the default memory policies and nodesets for all threads in the process\&. If they are not identical, -1 is returned and errno is set to EXDEV\&. If they are identical, the values are returned in \fCset\fP and \fCpolicy\fP\&.
+.PP
+Otherwise, if \fBHWLOC_MEMBIND_PROCESS\fP is specified (and \fBHWLOC_MEMBIND_STRICT\fP is \fInot\fP specified), the default set from each thread is logically OR'ed together\&. If all threads' default policies are the same, \fCpolicy\fP is set to that policy\&. If they are different, \fCpolicy\fP is set to \fBHWLOC_MEMBIND_MIXED\fP\&.
+.PP
+In the \fBHWLOC_MEMBIND_THREAD\fP case (or when neither \fBHWLOC_MEMBIND_PROCESS\fP or \fBHWLOC_MEMBIND_THREAD\fP is specified), there is only one set and policy; they are returned in \fCset\fP and \fCpolicy\fP, respectively\&.
+.PP
+If \fBHWLOC_MEMBIND_BYNODESET\fP is specified, set is considered a nodeset\&. Otherwise it's a cpuset\&.
+.PP
+If any other flags are specified, -1 is returned and errno is set to EINVAL\&. 
+.SS "int hwloc_get_proc_membind (\fBhwloc_topology_t\fP topology, hwloc_pid_t pid, \fBhwloc_bitmap_t\fP set, \fBhwloc_membind_policy_t\fP * policy, int flags)"
+
+.PP
+Query the default memory binding policy and physical locality of the specified process\&. The bitmap \fCset\fP (previously allocated by the caller) is filled with the process memory binding\&.
+.PP
+This function has two output parameters: \fCset\fP and \fCpolicy\fP\&. The values returned in these parameters depend on both the \fCflags\fP passed in and the current memory binding policies and nodesets in the queried target\&.
+.PP
+Passing the \fBHWLOC_MEMBIND_PROCESS\fP flag specifies that the query target is the current policies and nodesets for all the threads in the specified process\&. If \fBHWLOC_MEMBIND_PROCESS\fP is not specified (which is the most portable method), the process is assumed to be single threaded\&. This allows hwloc to use either process-based OS functions or thread-based OS functions, depending on which are available\&.
+.PP
+Note that it does not make sense to pass \fBHWLOC_MEMBIND_THREAD\fP to this function\&.
+.PP
+If \fBHWLOC_MEMBIND_STRICT\fP is specified, hwloc will check the default memory policies and nodesets for all threads in the specified process\&. If they are not identical, -1 is returned and errno is set to EXDEV\&. If they are identical, the values are returned in \fCset\fP and \fCpolicy\fP\&.
+.PP
+Otherwise, \fCset\fP is set to the logical OR of all threads' default set\&. If all threads' default policies are the same, \fCpolicy\fP is set to that policy\&. If they are different, \fCpolicy\fP is set to \fBHWLOC_MEMBIND_MIXED\fP\&.
+.PP
+If \fBHWLOC_MEMBIND_BYNODESET\fP is specified, set is considered a nodeset\&. Otherwise it's a cpuset\&.
+.PP
+If any other flags are specified, -1 is returned and errno is set to EINVAL\&.
+.PP
+\fBNote\fP
+.RS 4
+\fChwloc_pid_t\fP is \fCpid_t\fP on Unix platforms, and \fCHANDLE\fP on native Windows platforms\&. 
+.RE
+.PP
+
+.SS "int hwloc_set_area_membind (\fBhwloc_topology_t\fP topology, const void * addr, size_t len, \fBhwloc_const_bitmap_t\fP set, \fBhwloc_membind_policy_t\fP policy, int flags)"
+
+.PP
+Bind the already-allocated memory identified by (addr, len) to the NUMA node(s) specified by \fCset\fP\&. If \fBHWLOC_MEMBIND_BYNODESET\fP is specified, set is considered a nodeset\&. Otherwise it's a cpuset\&.
+.PP
+\fBReturns\fP
+.RS 4
+0 if \fClen\fP is 0\&. 
+.PP
+-1 with errno set to ENOSYS if the action is not supported 
+.PP
+-1 with errno set to EXDEV if the binding cannot be enforced 
+.RE
+.PP
+
+.SS "int hwloc_set_membind (\fBhwloc_topology_t\fP topology, \fBhwloc_const_bitmap_t\fP set, \fBhwloc_membind_policy_t\fP policy, int flags)"
+
+.PP
+Set the default memory binding policy of the current process or thread to prefer the NUMA node(s) specified by \fCset\fP\&. If neither \fBHWLOC_MEMBIND_PROCESS\fP nor \fBHWLOC_MEMBIND_THREAD\fP is specified, the current process is assumed to be single-threaded\&. This is the most portable form as it permits hwloc to use either process-based OS functions or thread-based OS functions, depending on which are available\&.
+.PP
+If \fBHWLOC_MEMBIND_BYNODESET\fP is specified, set is considered a nodeset\&. Otherwise it's a cpuset\&.
+.PP
+\fBReturns\fP
+.RS 4
+-1 with errno set to ENOSYS if the action is not supported 
+.PP
+-1 with errno set to EXDEV if the binding cannot be enforced 
+.RE
+.PP
+
+.SS "int hwloc_set_proc_membind (\fBhwloc_topology_t\fP topology, hwloc_pid_t pid, \fBhwloc_const_bitmap_t\fP set, \fBhwloc_membind_policy_t\fP policy, int flags)"
+
+.PP
+Set the default memory binding policy of the specified process to prefer the NUMA node(s) specified by \fCset\fP\&. If \fBHWLOC_MEMBIND_BYNODESET\fP is specified, set is considered a nodeset\&. Otherwise it's a cpuset\&.
+.PP
+\fBReturns\fP
+.RS 4
+-1 with errno set to ENOSYS if the action is not supported 
+.PP
+-1 with errno set to EXDEV if the binding cannot be enforced
+.RE
+.PP
+\fBNote\fP
+.RS 4
+\fChwloc_pid_t\fP is \fCpid_t\fP on Unix platforms, and \fCHANDLE\fP on native Windows platforms\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_nvml.3 b/doc/doxygen-doc/man/man3/hwlocality_nvml.3
new file mode 100644
index 00000000..e72e547d
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_nvml.3
@@ -0,0 +1,79 @@
+.TH "hwlocality_nvml" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_nvml \- Interoperability with the NVIDIA Management Library
+.SH SYNOPSIS
+.br
+.PP
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "static int \fBhwloc_nvml_get_device_cpuset\fP (\fBhwloc_topology_t\fP topology, nvmlDevice_t device, \fBhwloc_cpuset_t\fP set)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_nvml_get_device_osdev_by_index\fP (\fBhwloc_topology_t\fP topology, unsigned idx)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_nvml_get_device_osdev\fP (\fBhwloc_topology_t\fP topology, nvmlDevice_t device)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+This interface offers ways to retrieve topology information about devices managed by the NVIDIA Management Library (NVML)\&. 
+.SH "Function Documentation"
+.PP 
+.SS "static int hwloc_nvml_get_device_cpuset (\fBhwloc_topology_t\fP topology, nvmlDevice_t device, \fBhwloc_cpuset_t\fP set)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the CPU set of processors that are physically close to NVML device \fCdevice\fP\&. Store in \fCset\fP the CPU-set describing the locality of the NVML device \fCdevice\fP\&.
+.PP
+Topology \fCtopology\fP and device \fCdevice\fP must match the local machine\&. I/O devices detection and the NVML component are not needed in the topology\&.
+.PP
+The function only returns the locality of the device\&. If more information about the device is needed, OS objects should be used instead, see \fBhwloc_nvml_get_device_osdev()\fP and \fBhwloc_nvml_get_device_osdev_by_index()\fP\&.
+.PP
+This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset\&. 
+.SS "static \fBhwloc_obj_t\fP hwloc_nvml_get_device_osdev (\fBhwloc_topology_t\fP topology, nvmlDevice_t device)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the hwloc OS device object corresponding to NVML device \fCdevice\fP\&. 
+.PP
+\fBReturns\fP
+.RS 4
+The hwloc OS device object that describes the given NVML device \fCdevice\fP\&. 
+.PP
+\fCNULL\fP if none could be found\&.
+.RE
+.PP
+Topology \fCtopology\fP and device \fCdevice\fP must match the local machine\&. I/O devices detection and the NVML component must be enabled in the topology\&. If not, the locality of the object may still be found using \fBhwloc_nvml_get_device_cpuset()\fP\&.
+.PP
+\fBNote\fP
+.RS 4
+The corresponding hwloc PCI device may be found by looking at the result parent pointer (unless PCI devices are filtered out)\&. 
+.RE
+.PP
+
+.SS "static \fBhwloc_obj_t\fP hwloc_nvml_get_device_osdev_by_index (\fBhwloc_topology_t\fP topology, unsigned idx)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the hwloc OS device object corresponding to the NVML device whose index is \fCidx\fP\&. 
+.PP
+\fBReturns\fP
+.RS 4
+The hwloc OS device object describing the NVML device whose index is \fCidx\fP\&. 
+.PP
+\fCNULL\fP if none could be found\&.
+.RE
+.PP
+The topology \fCtopology\fP does not necessarily have to match the current machine\&. For instance the topology may be an XML import of a remote host\&. I/O devices detection and the NVML component must be enabled in the topology\&.
+.PP
+\fBNote\fP
+.RS 4
+The corresponding PCI device object can be obtained by looking at the OS device parent object (unless PCI devices are filtered out)\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_object_sets.3 b/doc/doxygen-doc/man/man3/hwlocality_object_sets.3
new file mode 100644
index 00000000..ac0e3a2c
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_object_sets.3
@@ -0,0 +1,56 @@
+.TH "hwlocality_object_sets" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_object_sets \- Object Sets (hwloc_cpuset_t and hwloc_nodeset_t)
+.SH SYNOPSIS
+.br
+.PP
+.SS "Typedefs"
+
+.in +1c
+.ti -1c
+.RI "typedef \fBhwloc_bitmap_t\fP \fBhwloc_cpuset_t\fP"
+.br
+.ti -1c
+.RI "typedef \fBhwloc_const_bitmap_t\fP \fBhwloc_const_cpuset_t\fP"
+.br
+.ti -1c
+.RI "typedef \fBhwloc_bitmap_t\fP \fBhwloc_nodeset_t\fP"
+.br
+.ti -1c
+.RI "typedef \fBhwloc_const_bitmap_t\fP \fBhwloc_const_nodeset_t\fP"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+Hwloc uses bitmaps to represent two distinct kinds of object sets: CPU sets (\fBhwloc_cpuset_t\fP) and NUMA node sets (\fBhwloc_nodeset_t\fP)\&. These types are both typedefs to a common back end type (\fBhwloc_bitmap_t\fP), and therefore all the hwloc bitmap functions are applicable to both \fBhwloc_cpuset_t\fP and \fBhwloc_nodeset_t\fP (see \fBThe bitmap API\fP)\&.
+.PP
+The rationale for having two different types is that even though the actions one wants to perform on these types are the same (e\&.g\&., enable and disable individual items in the set/mask), they're used in very different contexts: one for specifying which processors to use and one for specifying which NUMA nodes to use\&. Hence, the name difference is really just to reflect the intent of where the type is used\&. 
+.SH "Typedef Documentation"
+.PP 
+.SS "typedef \fBhwloc_const_bitmap_t\fP \fBhwloc_const_cpuset_t\fP"
+
+.PP
+A non-modifiable \fBhwloc_cpuset_t\fP\&. 
+.SS "typedef \fBhwloc_const_bitmap_t\fP \fBhwloc_const_nodeset_t\fP"
+
+.PP
+A non-modifiable \fBhwloc_nodeset_t\fP\&. 
+.SS "typedef \fBhwloc_bitmap_t\fP \fBhwloc_cpuset_t\fP"
+
+.PP
+A CPU set is a bitmap whose bits are set according to CPU physical OS indexes\&. It may be consulted and modified with the bitmap API as any \fBhwloc_bitmap_t\fP (see \fBhwloc/bitmap\&.h\fP)\&.
+.PP
+Each bit may be converted into a PU object using \fBhwloc_get_pu_obj_by_os_index()\fP\&. 
+.SS "typedef \fBhwloc_bitmap_t\fP \fBhwloc_nodeset_t\fP"
+
+.PP
+A node set is a bitmap whose bits are set according to NUMA memory node physical OS indexes\&. It may be consulted and modified with the bitmap API as any \fBhwloc_bitmap_t\fP (see \fBhwloc/bitmap\&.h\fP)\&. Each bit may be converted into a NUMA node object using \fBhwloc_get_numanode_obj_by_os_index()\fP\&.
+.PP
+When binding memory on a system without any NUMA node, the single main memory bank is considered as NUMA node #0\&.
+.PP
+See also \fBConverting between CPU sets and node sets\fP\&. 
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_object_strings.3 b/doc/doxygen-doc/man/man3/hwlocality_object_strings.3
new file mode 100644
index 00000000..97b96a6d
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_object_strings.3
@@ -0,0 +1,118 @@
+.TH "hwlocality_object_strings" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_object_strings \- Converting between Object Types and Attributes, and Strings
+.SH SYNOPSIS
+.br
+.PP
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "const char * \fBhwloc_obj_type_string\fP (\fBhwloc_obj_type_t\fP type)"
+.br
+.ti -1c
+.RI "int \fBhwloc_obj_type_snprintf\fP (char *restrict string, size_t size, \fBhwloc_obj_t\fP obj, int verbose)"
+.br
+.ti -1c
+.RI "int \fBhwloc_obj_attr_snprintf\fP (char *restrict string, size_t size, \fBhwloc_obj_t\fP obj, const char *restrict separator, int verbose)"
+.br
+.ti -1c
+.RI "int \fBhwloc_type_sscanf\fP (const char *string, \fBhwloc_obj_type_t\fP *typep, union \fBhwloc_obj_attr_u\fP *attrp, size_t attrsize)"
+.br
+.ti -1c
+.RI "int \fBhwloc_type_sscanf_as_depth\fP (const char *string, \fBhwloc_obj_type_t\fP *typep, \fBhwloc_topology_t\fP topology, int *depthp)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+
+.SH "Function Documentation"
+.PP 
+.SS "int hwloc_obj_attr_snprintf (char *restrict string, size_t size, \fBhwloc_obj_t\fP obj, const char *restrict separator, int verbose)"
+
+.PP
+Stringify the attributes of a given topology object into a human-readable form\&. Attribute values are separated by \fCseparator\fP\&.
+.PP
+Only the major attributes are printed in non-verbose mode\&.
+.PP
+If \fCsize\fP is 0, \fCstring\fP may safely be \fCNULL\fP\&.
+.PP
+\fBReturns\fP
+.RS 4
+the number of characters that were actually written if not truncating, or that would have been written (not including the ending \\0)\&. 
+.RE
+.PP
+
+.SS "int hwloc_obj_type_snprintf (char *restrict string, size_t size, \fBhwloc_obj_t\fP obj, int verbose)"
+
+.PP
+Stringify the type of a given topology object into a human-readable form\&. Contrary to \fBhwloc_obj_type_string()\fP, this function includes object-specific attributes (such as the Group depth, the Bridge type, or OS device type) in the output, and it requires the caller to provide the output buffer\&.
+.PP
+The output is guaranteed to be the same for all objects of a same topology level\&.
+.PP
+If \fCverbose\fP is 1, longer type names are used, e\&.g\&. L1Cache instead of L1\&.
+.PP
+The output string may be parsed back by \fBhwloc_type_sscanf()\fP\&.
+.PP
+If \fCsize\fP is 0, \fCstring\fP may safely be \fCNULL\fP\&.
+.PP
+\fBReturns\fP
+.RS 4
+the number of characters that were actually written if not truncating, or that would have been written (not including the ending \\0)\&. 
+.RE
+.PP
+
+.SS "const char* hwloc_obj_type_string (\fBhwloc_obj_type_t\fP type)"
+
+.PP
+Return a constant stringified object type\&. This function is the basic way to convert a generic type into a string\&. The output string may be parsed back by \fBhwloc_type_sscanf()\fP\&.
+.PP
+\fBhwloc_obj_type_snprintf()\fP may return a more precise output for a specific object, but it requires the caller to provide the output buffer\&. 
+.SS "int hwloc_type_sscanf (const char * string, \fBhwloc_obj_type_t\fP * typep, union \fBhwloc_obj_attr_u\fP * attrp, size_t attrsize)"
+
+.PP
+Return an object type and attributes from a type string\&. Convert strings such as 'Package' or 'L1iCache' into the corresponding types\&. Matching is case-insensitive, and only the first letters are actually required to match\&.
+.PP
+The matched object type is set in \fCtypep\fP (which cannot be \fCNULL\fP)\&.
+.PP
+Type-specific attributes, for instance Cache type, Cache depth, Group depth, Bridge type or OS Device type may be returned in \fCattrp\fP\&. Attributes that are not specified in the string (for instance 'Group' without a depth, or 'L2Cache' without a cache type) are set to -1\&.
+.PP
+\fCattrp\fP is only filled if not \fCNULL\fP and if its size specified in \fCattrsize\fP is large enough\&. It should be at least as large as union \fBhwloc_obj_attr_u\fP\&.
+.PP
+\fBReturns\fP
+.RS 4
+0 if a type was correctly identified, otherwise -1\&.
+.RE
+.PP
+\fBNote\fP
+.RS 4
+This function is guaranteed to match any string returned by \fBhwloc_obj_type_string()\fP or \fBhwloc_obj_type_snprintf()\fP\&.
+.PP
+This is an extended version of the now deprecated hwloc_obj_type_sscanf()\&. 
+.RE
+.PP
+
+.SS "int hwloc_type_sscanf_as_depth (const char * string, \fBhwloc_obj_type_t\fP * typep, \fBhwloc_topology_t\fP topology, int * depthp)"
+
+.PP
+Return an object type and its level depth from a type string\&. Convert strings such as 'Package' or 'L1iCache' into the corresponding types and return in \fCdepthp\fP the depth of the corresponding level in the topology \fCtopology\fP\&.
+.PP
+If no object of this type is present on the underlying architecture, \fBHWLOC_TYPE_DEPTH_UNKNOWN\fP is returned\&.
+.PP
+If multiple such levels exist (for instance if giving Group without any depth), the function may return \fBHWLOC_TYPE_DEPTH_MULTIPLE\fP instead\&.
+.PP
+The matched object type is set in \fCtypep\fP if \fCtypep\fP is non \fCNULL\fP\&.
+.PP
+\fBNote\fP
+.RS 4
+This function is similar to \fBhwloc_type_sscanf()\fP followed by \fBhwloc_get_type_depth()\fP but it also automatically disambiguates multiple group levels etc\&.
+.PP
+This function is guaranteed to match any string returned by \fBhwloc_obj_type_string()\fP or \fBhwloc_obj_type_snprintf()\fP\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_object_types.3 b/doc/doxygen-doc/man/man3/hwlocality_object_types.3
new file mode 100644
index 00000000..0837fabe
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_object_types.3
@@ -0,0 +1,242 @@
+.TH "hwlocality_object_types" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_object_types \- Object Types
+.SH SYNOPSIS
+.br
+.PP
+.SS "Macros"
+
+.in +1c
+.ti -1c
+.RI "#define \fBHWLOC_TYPE_UNORDERED\fP"
+.br
+.in -1c
+.SS "Typedefs"
+
+.in +1c
+.ti -1c
+.RI "typedef enum \fBhwloc_obj_cache_type_e\fP \fBhwloc_obj_cache_type_t\fP"
+.br
+.ti -1c
+.RI "typedef enum \fBhwloc_obj_bridge_type_e\fP \fBhwloc_obj_bridge_type_t\fP"
+.br
+.ti -1c
+.RI "typedef enum \fBhwloc_obj_osdev_type_e\fP \fBhwloc_obj_osdev_type_t\fP"
+.br
+.in -1c
+.SS "Enumerations"
+
+.in +1c
+.ti -1c
+.RI "enum \fBhwloc_obj_type_t\fP { \fBHWLOC_OBJ_MACHINE\fP, \fBHWLOC_OBJ_PACKAGE\fP, \fBHWLOC_OBJ_CORE\fP, \fBHWLOC_OBJ_PU\fP, \fBHWLOC_OBJ_L1CACHE\fP, \fBHWLOC_OBJ_L2CACHE\fP, \fBHWLOC_OBJ_L3CACHE\fP, \fBHWLOC_OBJ_L4CACHE\fP, \fBHWLOC_OBJ_L5CACHE\fP, \fBHWLOC_OBJ_L1ICACHE\fP, \fBHWLOC_OBJ_L2ICACHE\fP, \fBHWLOC_OBJ_L3ICACHE\fP, \fBHWLOC_OBJ_GROUP\fP, \fBHWLOC_OBJ_NUMANODE\fP, \fBHWLOC_OBJ_BRIDGE\fP, \fBHWLOC_OBJ_PCI_DEVICE\fP, \fBHWLOC_OBJ_OS_DEVICE\fP, \fBHWLOC_OBJ_MISC\fP, \fBHWLOC_OBJ_MEMCACHE\fP, \fBHWLOC_OBJ_DIE\fP, \fBHWLOC_OBJ_TYPE_MAX\fP }"
+.br
+.ti -1c
+.RI "enum \fBhwloc_obj_cache_type_e\fP { \fBHWLOC_OBJ_CACHE_UNIFIED\fP, \fBHWLOC_OBJ_CACHE_DATA\fP, \fBHWLOC_OBJ_CACHE_INSTRUCTION\fP }"
+.br
+.ti -1c
+.RI "enum \fBhwloc_obj_bridge_type_e\fP { \fBHWLOC_OBJ_BRIDGE_HOST\fP, \fBHWLOC_OBJ_BRIDGE_PCI\fP }"
+.br
+.ti -1c
+.RI "enum \fBhwloc_obj_osdev_type_e\fP { \fBHWLOC_OBJ_OSDEV_BLOCK\fP, \fBHWLOC_OBJ_OSDEV_GPU\fP, \fBHWLOC_OBJ_OSDEV_NETWORK\fP, \fBHWLOC_OBJ_OSDEV_OPENFABRICS\fP, \fBHWLOC_OBJ_OSDEV_DMA\fP, \fBHWLOC_OBJ_OSDEV_COPROC\fP }"
+.br
+.in -1c
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "int \fBhwloc_compare_types\fP (\fBhwloc_obj_type_t\fP type1, \fBhwloc_obj_type_t\fP type2)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+
+.SH "Macro Definition Documentation"
+.PP 
+.SS "#define HWLOC_TYPE_UNORDERED"
+
+.PP
+Value returned by \fBhwloc_compare_types()\fP when types can not be compared\&. 
+.SH "Typedef Documentation"
+.PP 
+.SS "typedef enum \fBhwloc_obj_bridge_type_e\fP \fBhwloc_obj_bridge_type_t\fP"
+
+.PP
+Type of one side (upstream or downstream) of an I/O bridge\&. 
+.SS "typedef enum \fBhwloc_obj_cache_type_e\fP \fBhwloc_obj_cache_type_t\fP"
+
+.PP
+Cache type\&. 
+.SS "typedef enum \fBhwloc_obj_osdev_type_e\fP \fBhwloc_obj_osdev_type_t\fP"
+
+.PP
+Type of a OS device\&. 
+.SH "Enumeration Type Documentation"
+.PP 
+.SS "enum \fBhwloc_obj_bridge_type_e\fP"
+
+.PP
+Type of one side (upstream or downstream) of an I/O bridge\&. 
+.PP
+\fBEnumerator\fP
+.in +1c
+.TP
+\fB\fIHWLOC_OBJ_BRIDGE_HOST \fP\fP
+Host-side of a bridge, only possible upstream\&. 
+.TP
+\fB\fIHWLOC_OBJ_BRIDGE_PCI \fP\fP
+PCI-side of a bridge\&. 
+.SS "enum \fBhwloc_obj_cache_type_e\fP"
+
+.PP
+Cache type\&. 
+.PP
+\fBEnumerator\fP
+.in +1c
+.TP
+\fB\fIHWLOC_OBJ_CACHE_UNIFIED \fP\fP
+Unified cache\&. 
+.TP
+\fB\fIHWLOC_OBJ_CACHE_DATA \fP\fP
+Data cache\&. 
+.TP
+\fB\fIHWLOC_OBJ_CACHE_INSTRUCTION \fP\fP
+Instruction cache (filtered out by default)\&. 
+.SS "enum \fBhwloc_obj_osdev_type_e\fP"
+
+.PP
+Type of a OS device\&. 
+.PP
+\fBEnumerator\fP
+.in +1c
+.TP
+\fB\fIHWLOC_OBJ_OSDEV_BLOCK \fP\fP
+Operating system block device, or non-volatile memory device\&. For instance 'sda' or 'dax2\&.0' on Linux\&. 
+.TP
+\fB\fIHWLOC_OBJ_OSDEV_GPU \fP\fP
+Operating system GPU device\&. For instance ':0\&.0' for a GL display, 'card0' for a Linux DRM device\&. 
+.TP
+\fB\fIHWLOC_OBJ_OSDEV_NETWORK \fP\fP
+Operating system network device\&. For instance the 'eth0' interface on Linux\&. 
+.TP
+\fB\fIHWLOC_OBJ_OSDEV_OPENFABRICS \fP\fP
+Operating system openfabrics device\&. For instance the 'mlx4_0' InfiniBand HCA, 'hfi1_0' Omni-Path interface, or 'bxi0' Atos/Bull BXI HCA on Linux\&. 
+.TP
+\fB\fIHWLOC_OBJ_OSDEV_DMA \fP\fP
+Operating system dma engine device\&. For instance the 'dma0chan0' DMA channel on Linux\&. 
+.TP
+\fB\fIHWLOC_OBJ_OSDEV_COPROC \fP\fP
+Operating system co-processor device\&. For instance 'opencl0d0' for a OpenCL device, 'cuda0' for a CUDA device\&. 
+.SS "enum \fBhwloc_obj_type_t\fP"
+
+.PP
+Type of topology object\&. 
+.PP
+\fBNote\fP
+.RS 4
+Do not rely on the ordering or completeness of the values as new ones may be defined in the future! If you need to compare types, use \fBhwloc_compare_types()\fP instead\&. 
+.RE
+.PP
+
+.PP
+\fBEnumerator\fP
+.in +1c
+.TP
+\fB\fIHWLOC_OBJ_MACHINE \fP\fP
+Machine\&. A set of processors and memory with cache coherency\&. This type is always used for the root object of a topology, and never used anywhere else\&. Hence its parent is always \fCNULL\fP\&. 
+.TP
+\fB\fIHWLOC_OBJ_PACKAGE \fP\fP
+Physical package\&. The physical package that usually gets inserted into a socket on the motherboard\&. A processor package usually contains multiple cores, and possibly some dies\&. 
+.TP
+\fB\fIHWLOC_OBJ_CORE \fP\fP
+Core\&. A computation unit (may be shared by several PUs, aka logical processors)\&. 
+.TP
+\fB\fIHWLOC_OBJ_PU \fP\fP
+Processing Unit, or (Logical) Processor\&. An execution unit (may share a core with some other logical processors, e\&.g\&. in the case of an SMT core)\&. This is the smallest object representing CPU resources, it cannot have any child except Misc objects\&.
+.PP
+Objects of this kind are always reported and can thus be used as fallback when others are not\&. 
+.TP
+\fB\fIHWLOC_OBJ_L1CACHE \fP\fP
+Level 1 Data (or Unified) Cache\&. 
+.TP
+\fB\fIHWLOC_OBJ_L2CACHE \fP\fP
+Level 2 Data (or Unified) Cache\&. 
+.TP
+\fB\fIHWLOC_OBJ_L3CACHE \fP\fP
+Level 3 Data (or Unified) Cache\&. 
+.TP
+\fB\fIHWLOC_OBJ_L4CACHE \fP\fP
+Level 4 Data (or Unified) Cache\&. 
+.TP
+\fB\fIHWLOC_OBJ_L5CACHE \fP\fP
+Level 5 Data (or Unified) Cache\&. 
+.TP
+\fB\fIHWLOC_OBJ_L1ICACHE \fP\fP
+Level 1 instruction Cache (filtered out by default)\&. 
+.TP
+\fB\fIHWLOC_OBJ_L2ICACHE \fP\fP
+Level 2 instruction Cache (filtered out by default)\&. 
+.TP
+\fB\fIHWLOC_OBJ_L3ICACHE \fP\fP
+Level 3 instruction Cache (filtered out by default)\&. 
+.TP
+\fB\fIHWLOC_OBJ_GROUP \fP\fP
+Group objects\&. Objects which do not fit in the above but are detected by hwloc and are useful to take into account for affinity\&. For instance, some operating systems expose their arbitrary processors aggregation this way\&. And hwloc may insert such objects to group NUMA nodes according to their distances\&. See also \fBWhat are these Group objects in my topology?\fP\&. These objects are removed when they do not bring any structure (see \fBHWLOC_TYPE_FILTER_KEEP_STRUCTURE\fP)\&. 
+.TP
+\fB\fIHWLOC_OBJ_NUMANODE \fP\fP
+NUMA node\&. An object that contains memory that is directly and byte-accessible to the host processors\&. It is usually close to some cores (the corresponding objects are descendants of the NUMA node object in the hwloc tree)\&. This is the smallest object representing Memory resources, it cannot have any child except Misc objects\&. However it may have Memory-side cache parents\&.
+.PP
+There is always at least one such object in the topology even if the machine is not NUMA\&.
+.PP
+Memory objects are not listed in the main children list, but rather in the dedicated Memory children list\&.
+.PP
+NUMA nodes have a special depth \fBHWLOC_TYPE_DEPTH_NUMANODE\fP instead of a normal depth just like other objects in the main tree\&. 
+.TP
+\fB\fIHWLOC_OBJ_BRIDGE \fP\fP
+Bridge (filtered out by default)\&. Any bridge (or PCI switch) that connects the host or an I/O bus, to another I/O bus\&. Bridges are not added to the topology unless their filtering is changed (see \fBhwloc_topology_set_type_filter()\fP and \fBhwloc_topology_set_io_types_filter()\fP)\&.
+.PP
+I/O objects are not listed in the main children list, but rather in the dedicated io children list\&. I/O objects have NULL CPU and node sets\&. 
+.TP
+\fB\fIHWLOC_OBJ_PCI_DEVICE \fP\fP
+PCI device (filtered out by default)\&. PCI devices are not added to the topology unless their filtering is changed (see \fBhwloc_topology_set_type_filter()\fP and \fBhwloc_topology_set_io_types_filter()\fP)\&.
+.PP
+I/O objects are not listed in the main children list, but rather in the dedicated io children list\&. I/O objects have NULL CPU and node sets\&. 
+.TP
+\fB\fIHWLOC_OBJ_OS_DEVICE \fP\fP
+Operating system device (filtered out by default)\&. OS devices are not added to the topology unless their filtering is changed (see \fBhwloc_topology_set_type_filter()\fP and \fBhwloc_topology_set_io_types_filter()\fP)\&.
+.PP
+I/O objects are not listed in the main children list, but rather in the dedicated io children list\&. I/O objects have NULL CPU and node sets\&. 
+.TP
+\fB\fIHWLOC_OBJ_MISC \fP\fP
+Miscellaneous objects (filtered out by default)\&. Objects without particular meaning, that can e\&.g\&. be added by the application for its own use, or by hwloc for miscellaneous objects such as MemoryModule (DIMMs)\&. They are not added to the topology unless their filtering is changed (see \fBhwloc_topology_set_type_filter()\fP)\&.
+.PP
+These objects are not listed in the main children list, but rather in the dedicated misc children list\&. Misc objects may only have Misc objects as children, and those are in the dedicated misc children list as well\&. Misc objects have NULL CPU and node sets\&. 
+.TP
+\fB\fIHWLOC_OBJ_MEMCACHE \fP\fP
+Memory-side cache (filtered out by default)\&. A cache in front of a specific NUMA node\&. This object always has at least one NUMA node as a memory child\&.
+.PP
+Memory objects are not listed in the main children list, but rather in the dedicated Memory children list\&.
+.PP
+Memory-side cache have a special depth \fBHWLOC_TYPE_DEPTH_MEMCACHE\fP instead of a normal depth just like other objects in the main tree\&. 
+.TP
+\fB\fIHWLOC_OBJ_DIE \fP\fP
+Die within a physical package\&. A subpart of the physical package, that contains multiple cores\&. 
+.SH "Function Documentation"
+.PP 
+.SS "int hwloc_compare_types (\fBhwloc_obj_type_t\fP type1, \fBhwloc_obj_type_t\fP type2)"
+
+.PP
+Compare the depth of two object types\&. Types shouldn't be compared as they are, since newer ones may be added in the future\&. This function returns less than, equal to, or greater than zero respectively if \fCtype1\fP objects usually include \fCtype2\fP objects, are the same as \fCtype2\fP objects, or are included in \fCtype2\fP objects\&. If the types can not be compared (because neither is usually contained in the other), \fBHWLOC_TYPE_UNORDERED\fP is returned\&. Object types containing CPUs can always be compared (usually, a system contains machines which contain nodes which contain packages which contain caches, which contain cores, which contain processors)\&.
+.PP
+\fBNote\fP
+.RS 4
+\fBHWLOC_OBJ_PU\fP will always be the deepest, while \fBHWLOC_OBJ_MACHINE\fP is always the highest\&.
+.PP
+This does not mean that the actual topology will respect that order: e\&.g\&. as of today cores may also contain caches, and packages may also contain nodes\&. This is thus just to be seen as a fallback comparison method\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_objects.3 b/doc/doxygen-doc/man/man3/hwlocality_objects.3
new file mode 100644
index 00000000..f6547be8
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_objects.3
@@ -0,0 +1,40 @@
+.TH "hwlocality_objects" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_objects \- Object Structure and Attributes
+.SH SYNOPSIS
+.br
+.PP
+.SS "Data Structures"
+
+.in +1c
+.ti -1c
+.RI "struct \fBhwloc_obj\fP"
+.br
+.ti -1c
+.RI "union \fBhwloc_obj_attr_u\fP"
+.br
+.ti -1c
+.RI "struct \fBhwloc_info_s\fP"
+.br
+.in -1c
+.SS "Typedefs"
+
+.in +1c
+.ti -1c
+.RI "typedef struct \fBhwloc_obj\fP * \fBhwloc_obj_t\fP"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+
+.SH "Typedef Documentation"
+.PP 
+.SS "typedef struct \fBhwloc_obj\fP* \fBhwloc_obj_t\fP"
+
+.PP
+Convenience typedef; a pointer to a struct \fBhwloc_obj\fP\&. 
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_opencl.3 b/doc/doxygen-doc/man/man3/hwlocality_opencl.3
new file mode 100644
index 00000000..47b9348a
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_opencl.3
@@ -0,0 +1,92 @@
+.TH "hwlocality_opencl" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_opencl \- Interoperability with OpenCL
+.SH SYNOPSIS
+.br
+.PP
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "static int \fBhwloc_opencl_get_device_pci_busid\fP (cl_device_id device, unsigned *domain, unsigned *bus, unsigned *dev, unsigned *func)"
+.br
+.ti -1c
+.RI "static int \fBhwloc_opencl_get_device_cpuset\fP (\fBhwloc_topology_t\fP topology, cl_device_id device, \fBhwloc_cpuset_t\fP set)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_opencl_get_device_osdev_by_index\fP (\fBhwloc_topology_t\fP topology, unsigned platform_index, unsigned device_index)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_opencl_get_device_osdev\fP (\fBhwloc_topology_t\fP topology, cl_device_id device)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+This interface offers ways to retrieve topology information about OpenCL devices\&.
+.PP
+Only AMD and NVIDIA OpenCL implementations currently offer useful locality information about their devices\&. 
+.SH "Function Documentation"
+.PP 
+.SS "static int hwloc_opencl_get_device_cpuset (\fBhwloc_topology_t\fP topology, cl_device_id device, \fBhwloc_cpuset_t\fP set)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the CPU set of processors that are physically close to OpenCL device \fCdevice\fP\&. Store in \fCset\fP the CPU-set describing the locality of the OpenCL device \fCdevice\fP\&.
+.PP
+Topology \fCtopology\fP and device \fCdevice\fP must match the local machine\&. I/O devices detection and the OpenCL component are not needed in the topology\&.
+.PP
+The function only returns the locality of the device\&. If more information about the device is needed, OS objects should be used instead, see \fBhwloc_opencl_get_device_osdev()\fP and \fBhwloc_opencl_get_device_osdev_by_index()\fP\&.
+.PP
+This function is currently only implemented in a meaningful way for Linux with the AMD or NVIDIA OpenCL implementation; other systems will simply get a full cpuset\&. 
+.SS "static \fBhwloc_obj_t\fP hwloc_opencl_get_device_osdev (\fBhwloc_topology_t\fP topology, cl_device_id device)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the hwloc OS device object corresponding to OpenCL device \fCdeviceX\fP\&. 
+.PP
+\fBReturns\fP
+.RS 4
+The hwloc OS device object corresponding to the given OpenCL device \fCdevice\fP\&. 
+.PP
+\fCNULL\fP if none could be found, for instance if required OpenCL attributes are not available\&.
+.RE
+.PP
+This function currently only works on AMD and NVIDIA OpenCL devices that support relevant OpenCL extensions\&. \fBhwloc_opencl_get_device_osdev_by_index()\fP should be preferred whenever possible, i\&.e\&. when platform and device index are known\&.
+.PP
+Topology \fCtopology\fP and device \fCdevice\fP must match the local machine\&. I/O devices detection and the OpenCL component must be enabled in the topology\&. If not, the locality of the object may still be found using \fBhwloc_opencl_get_device_cpuset()\fP\&.
+.PP
+\fBNote\fP
+.RS 4
+This function cannot work if PCI devices are filtered out\&.
+.PP
+The corresponding hwloc PCI device may be found by looking at the result parent pointer (unless PCI devices are filtered out)\&. 
+.RE
+.PP
+
+.SS "static \fBhwloc_obj_t\fP hwloc_opencl_get_device_osdev_by_index (\fBhwloc_topology_t\fP topology, unsigned platform_index, unsigned device_index)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the hwloc OS device object corresponding to the OpenCL device for the given indexes\&. 
+.PP
+\fBReturns\fP
+.RS 4
+The hwloc OS device object describing the OpenCL device whose platform index is \fCplatform_index\fP, and whose device index within this platform if \fCdevice_index\fP\&. 
+.PP
+\fCNULL\fP if there is none\&.
+.RE
+.PP
+The topology \fCtopology\fP does not necessarily have to match the current machine\&. For instance the topology may be an XML import of a remote host\&. I/O devices detection and the OpenCL component must be enabled in the topology\&.
+.PP
+\fBNote\fP
+.RS 4
+The corresponding PCI device object can be obtained by looking at the OS device parent object (unless PCI devices are filtered out)\&. 
+.RE
+.PP
+
+.SS "static int hwloc_opencl_get_device_pci_busid (cl_device_id device, unsigned * domain, unsigned * bus, unsigned * dev, unsigned * func)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Return the domain, bus and device IDs of the OpenCL device \fCdevice\fP\&. Device \fCdevice\fP must match the local machine\&. 
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_openfabrics.3 b/doc/doxygen-doc/man/man3/hwlocality_openfabrics.3
new file mode 100644
index 00000000..af60ce1d
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_openfabrics.3
@@ -0,0 +1,81 @@
+.TH "hwlocality_openfabrics" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_openfabrics \- Interoperability with OpenFabrics
+.SH SYNOPSIS
+.br
+.PP
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "static int \fBhwloc_ibv_get_device_cpuset\fP (\fBhwloc_topology_t\fP topology, struct ibv_device *ibdev, \fBhwloc_cpuset_t\fP set)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_ibv_get_device_osdev_by_name\fP (\fBhwloc_topology_t\fP topology, const char *ibname)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_ibv_get_device_osdev\fP (\fBhwloc_topology_t\fP topology, struct ibv_device *ibdev)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+This interface offers ways to retrieve topology information about OpenFabrics devices (InfiniBand, Omni-Path, usNIC, etc)\&. 
+.SH "Function Documentation"
+.PP 
+.SS "static int hwloc_ibv_get_device_cpuset (\fBhwloc_topology_t\fP topology, struct ibv_device * ibdev, \fBhwloc_cpuset_t\fP set)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the CPU set of processors that are physically close to device \fCibdev\fP\&. Store in \fCset\fP the CPU-set describing the locality of the OpenFabrics device \fCibdev\fP (InfiniBand, etc)\&.
+.PP
+Topology \fCtopology\fP and device \fCibdev\fP must match the local machine\&. I/O devices detection is not needed in the topology\&.
+.PP
+The function only returns the locality of the device\&. If more information about the device is needed, OS objects should be used instead, see \fBhwloc_ibv_get_device_osdev()\fP and \fBhwloc_ibv_get_device_osdev_by_name()\fP\&.
+.PP
+This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset\&. 
+.SS "static \fBhwloc_obj_t\fP hwloc_ibv_get_device_osdev (\fBhwloc_topology_t\fP topology, struct ibv_device * ibdev)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the hwloc OS device object corresponding to the OpenFabrics device \fCibdev\fP\&. 
+.PP
+\fBReturns\fP
+.RS 4
+The hwloc OS device object describing the OpenFabrics device \fCibdev\fP (InfiniBand, etc)\&. 
+.PP
+\fCNULL\fP if none could be found\&.
+.RE
+.PP
+Topology \fCtopology\fP and device \fCibdev\fP must match the local machine\&. I/O devices detection must be enabled in the topology\&. If not, the locality of the object may still be found using \fBhwloc_ibv_get_device_cpuset()\fP\&.
+.PP
+\fBNote\fP
+.RS 4
+The corresponding PCI device object can be obtained by looking at the OS device parent object\&. 
+.RE
+.PP
+
+.SS "static \fBhwloc_obj_t\fP hwloc_ibv_get_device_osdev_by_name (\fBhwloc_topology_t\fP topology, const char * ibname)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the hwloc OS device object corresponding to the OpenFabrics device named \fCibname\fP\&. 
+.PP
+\fBReturns\fP
+.RS 4
+The hwloc OS device object describing the OpenFabrics device (InfiniBand, Omni-Path, usNIC, etc) whose name is \fCibname\fP (mlx5_0, hfi1_0, usnic_0, qib0, etc)\&. 
+.PP
+\fCNULL\fP if none could be found\&.
+.RE
+.PP
+The name \fCibname\fP is usually obtained from ibv_get_device_name()\&.
+.PP
+The topology \fCtopology\fP does not necessarily have to match the current machine\&. For instance the topology may be an XML import of a remote host\&. I/O devices detection must be enabled in the topology\&.
+.PP
+\fBNote\fP
+.RS 4
+The corresponding PCI device object can be obtained by looking at the OS device parent object\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_rsmi.3 b/doc/doxygen-doc/man/man3/hwlocality_rsmi.3
new file mode 100644
index 00000000..19d76977
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_rsmi.3
@@ -0,0 +1,79 @@
+.TH "hwlocality_rsmi" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_rsmi \- Interoperability with the ROCm SMI Management Library
+.SH SYNOPSIS
+.br
+.PP
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "static int \fBhwloc_rsmi_get_device_cpuset\fP (\fBhwloc_topology_t\fP topology, uint32_t dv_ind, \fBhwloc_cpuset_t\fP set)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_rsmi_get_device_osdev_by_index\fP (\fBhwloc_topology_t\fP topology, uint32_t dv_ind)"
+.br
+.ti -1c
+.RI "static \fBhwloc_obj_t\fP \fBhwloc_rsmi_get_device_osdev\fP (\fBhwloc_topology_t\fP topology, uint32_t dv_ind)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+This interface offers ways to retrieve topology information about devices managed by the ROCm SMI Management Library\&. 
+.SH "Function Documentation"
+.PP 
+.SS "static int hwloc_rsmi_get_device_cpuset (\fBhwloc_topology_t\fP topology, uint32_t dv_ind, \fBhwloc_cpuset_t\fP set)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the CPU set of logical processors that are physically close to AMD GPU device whose index is \fCdv_ind\fP\&. Store in \fCset\fP the CPU-set describing the locality of the AMD GPU device whose index is \fCdv_ind\fP\&.
+.PP
+Topology \fCtopology\fP and device \fCdv_ind\fP must match the local machine\&. I/O devices detection and the ROCm SMI component are not needed in the topology\&.
+.PP
+The function only returns the locality of the device\&. If more information about the device is needed, OS objects should be used instead, see \fBhwloc_rsmi_get_device_osdev()\fP and \fBhwloc_rsmi_get_device_osdev_by_index()\fP\&.
+.PP
+This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset\&. 
+.SS "static \fBhwloc_obj_t\fP hwloc_rsmi_get_device_osdev (\fBhwloc_topology_t\fP topology, uint32_t dv_ind)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the hwloc OS device object corresponding to AMD GPU device, whose index is \fCdv_ind\fP\&. 
+.PP
+\fBReturns\fP
+.RS 4
+The hwloc OS device object that describes the given AMD GPU, whose index is \fCdv_ind\fP\&. 
+.PP
+\fCNULL\fP if none could be found\&.
+.RE
+.PP
+Topology \fCtopology\fP and device \fCdv_ind\fP must match the local machine\&. I/O devices detection and the ROCm SMI component must be enabled in the topology\&. If not, the locality of the object may still be found using \fBhwloc_rsmi_get_device_cpuset()\fP\&.
+.PP
+\fBNote\fP
+.RS 4
+The corresponding hwloc PCI device may be found by looking at the result parent pointer (unless PCI devices are filtered out)\&. 
+.RE
+.PP
+
+.SS "static \fBhwloc_obj_t\fP hwloc_rsmi_get_device_osdev_by_index (\fBhwloc_topology_t\fP topology, uint32_t dv_ind)\fC [inline]\fP, \fC [static]\fP"
+
+.PP
+Get the hwloc OS device object corresponding to the AMD GPU device whose index is \fCdv_ind\fP\&. 
+.PP
+\fBReturns\fP
+.RS 4
+The hwloc OS device object describing the AMD GPU device whose index is \fCdv_ind\fP\&. 
+.PP
+\fCNULL\fP if none could be found\&.
+.RE
+.PP
+The topology \fCtopology\fP does not necessarily have to match the current machine\&. For instance the topology may be an XML import of a remote host\&. I/O devices detection and the ROCm SMI component must be enabled in the topology\&.
+.PP
+\fBNote\fP
+.RS 4
+The corresponding PCI device object can be obtained by looking at the OS device parent object (unless PCI devices are filtered out)\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_setsource.3 b/doc/doxygen-doc/man/man3/hwlocality_setsource.3
new file mode 100644
index 00000000..b4693598
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_setsource.3
@@ -0,0 +1,144 @@
+.TH "hwlocality_setsource" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_setsource \- Changing the Source of Topology Discovery
+.SH SYNOPSIS
+.br
+.PP
+.SS "Enumerations"
+
+.in +1c
+.ti -1c
+.RI "enum \fBhwloc_topology_components_flag_e\fP { \fBHWLOC_TOPOLOGY_COMPONENTS_FLAG_BLACKLIST\fP }"
+.br
+.in -1c
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "int \fBhwloc_topology_set_pid\fP (\fBhwloc_topology_t\fP restrict topology, hwloc_pid_t pid)"
+.br
+.ti -1c
+.RI "int \fBhwloc_topology_set_synthetic\fP (\fBhwloc_topology_t\fP restrict topology, const char *restrict description)"
+.br
+.ti -1c
+.RI "int \fBhwloc_topology_set_xml\fP (\fBhwloc_topology_t\fP restrict topology, const char *restrict xmlpath)"
+.br
+.ti -1c
+.RI "int \fBhwloc_topology_set_xmlbuffer\fP (\fBhwloc_topology_t\fP restrict topology, const char *restrict buffer, int size)"
+.br
+.ti -1c
+.RI "int \fBhwloc_topology_set_components\fP (\fBhwloc_topology_t\fP restrict topology, unsigned long flags, const char *restrict name)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+If none of the functions below is called, the default is to detect all the objects of the machine that the caller is allowed to access\&.
+.PP
+This default behavior may also be modified through environment variables if the application did not modify it already\&. Setting HWLOC_XMLFILE in the environment enforces the discovery from a XML file as if \fBhwloc_topology_set_xml()\fP had been called\&. Setting HWLOC_SYNTHETIC enforces a synthetic topology as if \fBhwloc_topology_set_synthetic()\fP had been called\&.
+.PP
+Finally, HWLOC_THISSYSTEM enforces the return value of \fBhwloc_topology_is_thissystem()\fP\&. 
+.SH "Enumeration Type Documentation"
+.PP 
+.SS "enum \fBhwloc_topology_components_flag_e\fP"
+
+.PP
+Flags to be passed to \fBhwloc_topology_set_components()\fP 
+.PP
+\fBEnumerator\fP
+.in +1c
+.TP
+\fB\fIHWLOC_TOPOLOGY_COMPONENTS_FLAG_BLACKLIST \fP\fP
+Blacklist the target component from being used\&. 
+.SH "Function Documentation"
+.PP 
+.SS "int hwloc_topology_set_components (\fBhwloc_topology_t\fP restrict topology, unsigned long flags, const char *restrict name)"
+
+.PP
+Prevent a discovery component from being used for a topology\&. \fCname\fP is the name of the discovery component that should not be used when loading topology \fCtopology\fP\&. The name is a string such as 'cuda'\&.
+.PP
+For components with multiple phases, it may also be suffixed with the name of a phase, for instance 'linux:io'\&.
+.PP
+\fCflags\fP should be \fBHWLOC_TOPOLOGY_COMPONENTS_FLAG_BLACKLIST\fP\&.
+.PP
+This may be used to avoid expensive parts of the discovery process\&. For instance, CUDA-specific discovery may be expensive and unneeded while generic I/O discovery could still be useful\&. 
+.SS "int hwloc_topology_set_pid (\fBhwloc_topology_t\fP restrict topology, hwloc_pid_t pid)"
+
+.PP
+Change which process the topology is viewed from\&. On some systems, processes may have different views of the machine, for instance the set of allowed CPUs\&. By default, hwloc exposes the view from the current process\&. Calling \fBhwloc_topology_set_pid()\fP permits to make it expose the topology of the machine from the point of view of another process\&.
+.PP
+\fBNote\fP
+.RS 4
+\fChwloc_pid_t\fP is \fCpid_t\fP on Unix platforms, and \fCHANDLE\fP on native Windows platforms\&.
+.PP
+-1 is returned and errno is set to ENOSYS on platforms that do not support this feature\&. 
+.RE
+.PP
+
+.SS "int hwloc_topology_set_synthetic (\fBhwloc_topology_t\fP restrict topology, const char *restrict description)"
+
+.PP
+Enable synthetic topology\&. Gather topology information from the given \fCdescription\fP, a space-separated string of <type:number> describing the object type and arity at each level\&. All types may be omitted (space-separated string of numbers) so that hwloc chooses all types according to usual topologies\&. See also the \fBSynthetic topologies\fP\&.
+.PP
+Setting the environment variable HWLOC_SYNTHETIC may also result in this behavior\&.
+.PP
+If \fCdescription\fP was properly parsed and describes a valid topology configuration, this function returns 0\&. Otherwise -1 is returned and errno is set to EINVAL\&.
+.PP
+Note that this function does not actually load topology information; it just tells hwloc where to load it from\&. You'll still need to invoke \fBhwloc_topology_load()\fP to actually load the topology information\&.
+.PP
+\fBNote\fP
+.RS 4
+For convenience, this backend provides empty binding hooks which just return success\&.
+.PP
+On success, the synthetic component replaces the previously enabled component (if any), but the topology is not actually modified until \fBhwloc_topology_load()\fP\&. 
+.RE
+.PP
+
+.SS "int hwloc_topology_set_xml (\fBhwloc_topology_t\fP restrict topology, const char *restrict xmlpath)"
+
+.PP
+Enable XML-file based topology\&. Gather topology information from the XML file given at \fCxmlpath\fP\&. Setting the environment variable HWLOC_XMLFILE may also result in this behavior\&. This file may have been generated earlier with \fBhwloc_topology_export_xml()\fP in \fBhwloc/export\&.h\fP, or lstopo file\&.xml\&.
+.PP
+Note that this function does not actually load topology information; it just tells hwloc where to load it from\&. You'll still need to invoke \fBhwloc_topology_load()\fP to actually load the topology information\&.
+.PP
+\fBReturns\fP
+.RS 4
+-1 with errno set to EINVAL on failure to read the XML file\&.
+.RE
+.PP
+\fBNote\fP
+.RS 4
+See also \fBhwloc_topology_set_userdata_import_callback()\fP for importing application-specific object userdata\&.
+.PP
+For convenience, this backend provides empty binding hooks which just return success\&. To have hwloc still actually call OS-specific hooks, the \fBHWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM\fP has to be set to assert that the loaded file is really the underlying system\&.
+.PP
+On success, the XML component replaces the previously enabled component (if any), but the topology is not actually modified until \fBhwloc_topology_load()\fP\&. 
+.RE
+.PP
+
+.SS "int hwloc_topology_set_xmlbuffer (\fBhwloc_topology_t\fP restrict topology, const char *restrict buffer, int size)"
+
+.PP
+Enable XML based topology using a memory buffer (instead of a file, as with \fBhwloc_topology_set_xml()\fP)\&. Gather topology information from the XML memory buffer given at \fCbuffer\fP and of length \fCsize\fP\&. This buffer may have been filled earlier with \fBhwloc_topology_export_xmlbuffer()\fP in \fBhwloc/export\&.h\fP\&.
+.PP
+Note that this function does not actually load topology information; it just tells hwloc where to load it from\&. You'll still need to invoke \fBhwloc_topology_load()\fP to actually load the topology information\&.
+.PP
+\fBReturns\fP
+.RS 4
+-1 with errno set to EINVAL on failure to read the XML buffer\&.
+.RE
+.PP
+\fBNote\fP
+.RS 4
+See also \fBhwloc_topology_set_userdata_import_callback()\fP for importing application-specific object userdata\&.
+.PP
+For convenience, this backend provides empty binding hooks which just return success\&. To have hwloc still actually call OS-specific hooks, the \fBHWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM\fP has to be set to assert that the loaded file is really the underlying system\&.
+.PP
+On success, the XML component replaces the previously enabled component (if any), but the topology is not actually modified until \fBhwloc_topology_load()\fP\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_shmem.3 b/doc/doxygen-doc/man/man3/hwlocality_shmem.3
new file mode 100644
index 00000000..29b20663
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_shmem.3
@@ -0,0 +1,104 @@
+.TH "hwlocality_shmem" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_shmem \- Sharing topologies between processes
+.SH SYNOPSIS
+.br
+.PP
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "int \fBhwloc_shmem_topology_get_length\fP (\fBhwloc_topology_t\fP topology, size_t *lengthp, unsigned long flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_shmem_topology_write\fP (\fBhwloc_topology_t\fP topology, int fd, hwloc_uint64_t fileoffset, void *mmap_address, size_t length, unsigned long flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_shmem_topology_adopt\fP (\fBhwloc_topology_t\fP *topologyp, int fd, hwloc_uint64_t fileoffset, void *mmap_address, size_t length, unsigned long flags)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+These functions are used to share a topology between processes by duplicating it into a file-backed shared-memory buffer\&.
+.PP
+The master process must first get the required shared-memory size for storing this topology with \fBhwloc_shmem_topology_get_length()\fP\&.
+.PP
+Then it must find a virtual memory area of that size that is available in all processes (identical virtual addresses in all processes)\&. On Linux, this can be done by comparing holes found in /proc/<pid>/maps for each process\&.
+.PP
+Once found, it must open a destination file for storing the buffer, and pass it to \fBhwloc_shmem_topology_write()\fP together with virtual memory address and length obtained above\&.
+.PP
+Other processes may then adopt this shared topology by opening the same file and passing it to \fBhwloc_shmem_topology_adopt()\fP with the exact same virtual memory address and length\&. 
+.SH "Function Documentation"
+.PP 
+.SS "int hwloc_shmem_topology_adopt (\fBhwloc_topology_t\fP * topologyp, int fd, hwloc_uint64_t fileoffset, void * mmap_address, size_t length, unsigned long flags)"
+
+.PP
+Adopt a shared memory topology stored in a file\&. Map a file in virtual memory and adopt the topology that was previously stored there with \fBhwloc_shmem_topology_write()\fP\&.
+.PP
+The returned adopted topology in \fCtopologyp\fP can be used just like any topology\&. And it must be destroyed with \fBhwloc_topology_destroy()\fP as usual\&.
+.PP
+However the topology is read-only\&. For instance, it cannot be modified with \fBhwloc_topology_restrict()\fP and object userdata pointers cannot be changed\&.
+.PP
+The segment of the file pointed by descriptor \fCfd\fP, starting at offset \fCfileoffset\fP, and of length \fClength\fP (in bytes), will be mapped at virtual address \fCmmap_address\fP\&.
+.PP
+The file pointed by descriptor \fCfd\fP, the offset \fCfileoffset\fP, the requested mapping virtual address \fCmmap_address\fP and the length \fClength\fP must be identical to what was given to \fBhwloc_shmem_topology_write()\fP earlier\&.
+.PP
+\fBNote\fP
+.RS 4
+Flags \fCflags\fP are currently unused, must be 0\&.
+.PP
+The object userdata pointer should not be used unless the process that created the shared topology also placed userdata-pointed buffers in shared memory\&.
+.PP
+This function takes care of calling \fBhwloc_topology_abi_check()\fP\&.
+.RE
+.PP
+\fBReturns\fP
+.RS 4
+-1 with errno set to EBUSY if the virtual memory mapping defined by \fCmmap_address\fP and \fClength\fP isn't available in the process\&.
+.PP
+-1 with errno set to EINVAL if \fCfileoffset\fP, \fCmmap_address\fP or \fClength\fP aren't page-aligned, or do not match what was given to \fBhwloc_shmem_topology_write()\fP earlier\&.
+.PP
+-1 with errno set to EINVAL if the layout of the topology structure is different between the writer process and the adopter process\&. 
+.RE
+.PP
+
+.SS "int hwloc_shmem_topology_get_length (\fBhwloc_topology_t\fP topology, size_t * lengthp, unsigned long flags)"
+
+.PP
+Get the required shared memory length for storing a topology\&. This length (in bytes) must be used in \fBhwloc_shmem_topology_write()\fP and \fBhwloc_shmem_topology_adopt()\fP later\&.
+.PP
+\fBNote\fP
+.RS 4
+Flags \fCflags\fP are currently unused, must be 0\&. 
+.RE
+.PP
+
+.SS "int hwloc_shmem_topology_write (\fBhwloc_topology_t\fP topology, int fd, hwloc_uint64_t fileoffset, void * mmap_address, size_t length, unsigned long flags)"
+
+.PP
+Duplicate a topology to a shared memory file\&. Temporarily map a file in virtual memory and duplicate the topology \fCtopology\fP by allocating duplicates in there\&.
+.PP
+The segment of the file pointed by descriptor \fCfd\fP, starting at offset \fCfileoffset\fP, and of length \fClength\fP (in bytes), will be temporarily mapped at virtual address \fCmmap_address\fP during the duplication\&.
+.PP
+The mapping length \fClength\fP must have been previously obtained with \fBhwloc_shmem_topology_get_length()\fP and the topology must not have been modified in the meantime\&.
+.PP
+\fBNote\fP
+.RS 4
+Flags \fCflags\fP are currently unused, must be 0\&.
+.PP
+The object userdata pointer is duplicated but the pointed buffer is not\&. However the caller may also allocate it manually in shared memory to share it as well\&.
+.RE
+.PP
+\fBReturns\fP
+.RS 4
+-1 with errno set to EBUSY if the virtual memory mapping defined by \fCmmap_address\fP and \fClength\fP isn't available in the process\&. 
+.PP
+-1 with errno set to EINVAL if \fCfileoffset\fP, \fCmmap_address\fP or \fClength\fP aren't page-aligned\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_syntheticexport.3 b/doc/doxygen-doc/man/man3/hwlocality_syntheticexport.3
new file mode 100644
index 00000000..c9f790c1
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_syntheticexport.3
@@ -0,0 +1,75 @@
+.TH "hwlocality_syntheticexport" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_syntheticexport \- Exporting Topologies to Synthetic
+.SH SYNOPSIS
+.br
+.PP
+.SS "Enumerations"
+
+.in +1c
+.ti -1c
+.RI "enum \fBhwloc_topology_export_synthetic_flags_e\fP { \fBHWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_EXTENDED_TYPES\fP, \fBHWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_ATTRS\fP, \fBHWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_V1\fP, \fBHWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_IGNORE_MEMORY\fP }"
+.br
+.in -1c
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "int \fBhwloc_topology_export_synthetic\fP (\fBhwloc_topology_t\fP topology, char *buffer, size_t buflen, unsigned long flags)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+
+.SH "Enumeration Type Documentation"
+.PP 
+.SS "enum \fBhwloc_topology_export_synthetic_flags_e\fP"
+
+.PP
+Flags for exporting synthetic topologies\&. Flags to be given as a OR'ed set to \fBhwloc_topology_export_synthetic()\fP\&. 
+.PP
+\fBEnumerator\fP
+.in +1c
+.TP
+\fB\fIHWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_EXTENDED_TYPES \fP\fP
+Export extended types such as L2dcache as basic types such as Cache\&. This is required if loading the synthetic description with hwloc < 1\&.9\&. 
+.TP
+\fB\fIHWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_ATTRS \fP\fP
+Do not export level attributes\&. Ignore level attributes such as memory/cache sizes or PU indexes\&. This is required if loading the synthetic description with hwloc < 1\&.10\&. 
+.TP
+\fB\fIHWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_V1 \fP\fP
+Export the memory hierarchy as expected in hwloc 1\&.x\&. Instead of attaching memory children to levels, export single NUMA node child as normal intermediate levels, when possible\&. This is required if loading the synthetic description with hwloc 1\&.x\&. However this may fail if some objects have multiple local NUMA nodes\&. 
+.TP
+\fB\fIHWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_IGNORE_MEMORY \fP\fP
+Do not export memory information\&. Only export the actual hierarchy of normal CPU-side objects and ignore where memory is attached\&. This is useful for when the hierarchy of CPUs is what really matters, but it behaves as if there was a single machine-wide NUMA node\&. 
+.SH "Function Documentation"
+.PP 
+.SS "int hwloc_topology_export_synthetic (\fBhwloc_topology_t\fP topology, char * buffer, size_t buflen, unsigned long flags)"
+
+.PP
+Export the topology as a synthetic string\&. At most \fCbuflen\fP characters will be written in \fCbuffer\fP, including the terminating \\0\&.
+.PP
+This exported string may be given back to \fBhwloc_topology_set_synthetic()\fP\&.
+.PP
+\fCflags\fP is a OR'ed set of \fBhwloc_topology_export_synthetic_flags_e\fP\&.
+.PP
+\fBReturns\fP
+.RS 4
+The number of characters that were written, not including the terminating \\0\&.
+.PP
+-1 if the topology could not be exported, for instance if it is not symmetric\&.
+.RE
+.PP
+\fBNote\fP
+.RS 4
+I/O and Misc children are ignored, the synthetic string only describes normal children\&.
+.PP
+A 1024-byte buffer should be large enough for exporting topologies in the vast majority of cases\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_tinker.3 b/doc/doxygen-doc/man/man3/hwlocality_tinker.3
new file mode 100644
index 00000000..5509fce4
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_tinker.3
@@ -0,0 +1,203 @@
+.TH "hwlocality_tinker" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_tinker \- Modifying a loaded Topology
+.SH SYNOPSIS
+.br
+.PP
+.SS "Enumerations"
+
+.in +1c
+.ti -1c
+.RI "enum \fBhwloc_restrict_flags_e\fP { \fBHWLOC_RESTRICT_FLAG_REMOVE_CPULESS\fP, \fBHWLOC_RESTRICT_FLAG_BYNODESET\fP = (1UL<<3), \fBHWLOC_RESTRICT_FLAG_REMOVE_MEMLESS\fP, \fBHWLOC_RESTRICT_FLAG_ADAPT_MISC\fP, \fBHWLOC_RESTRICT_FLAG_ADAPT_IO\fP }"
+.br
+.ti -1c
+.RI "enum \fBhwloc_allow_flags_e\fP { \fBHWLOC_ALLOW_FLAG_ALL\fP, \fBHWLOC_ALLOW_FLAG_LOCAL_RESTRICTIONS\fP, \fBHWLOC_ALLOW_FLAG_CUSTOM\fP }"
+.br
+.in -1c
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "int \fBhwloc_topology_restrict\fP (\fBhwloc_topology_t\fP restrict topology, \fBhwloc_const_bitmap_t\fP set, unsigned long flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_topology_allow\fP (\fBhwloc_topology_t\fP restrict topology, \fBhwloc_const_cpuset_t\fP cpuset, \fBhwloc_const_nodeset_t\fP nodeset, unsigned long flags)"
+.br
+.ti -1c
+.RI "\fBhwloc_obj_t\fP \fBhwloc_topology_insert_misc_object\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP parent, const char *name)"
+.br
+.ti -1c
+.RI "\fBhwloc_obj_t\fP \fBhwloc_topology_alloc_group_object\fP (\fBhwloc_topology_t\fP topology)"
+.br
+.ti -1c
+.RI "\fBhwloc_obj_t\fP \fBhwloc_topology_insert_group_object\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP group)"
+.br
+.ti -1c
+.RI "int \fBhwloc_obj_add_other_obj_sets\fP (\fBhwloc_obj_t\fP dst, \fBhwloc_obj_t\fP src)"
+.br
+.ti -1c
+.RI "int \fBhwloc_topology_refresh\fP (\fBhwloc_topology_t\fP topology)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+
+.SH "Enumeration Type Documentation"
+.PP 
+.SS "enum \fBhwloc_allow_flags_e\fP"
+
+.PP
+Flags to be given to \fBhwloc_topology_allow()\fP\&. 
+.PP
+\fBEnumerator\fP
+.in +1c
+.TP
+\fB\fIHWLOC_ALLOW_FLAG_ALL \fP\fP
+Mark all objects as allowed in the topology\&. \fCcpuset\fP and \fCnođeset\fP given to \fBhwloc_topology_allow()\fP must be \fCNULL\fP\&. 
+.TP
+\fB\fIHWLOC_ALLOW_FLAG_LOCAL_RESTRICTIONS \fP\fP
+Only allow objects that are available to the current process\&. The topology must have \fBHWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM\fP so that the set of available resources can actually be retrieved from the operating system\&.
+.PP
+\fCcpuset\fP and \fCnođeset\fP given to \fBhwloc_topology_allow()\fP must be \fCNULL\fP\&. 
+.TP
+\fB\fIHWLOC_ALLOW_FLAG_CUSTOM \fP\fP
+Allow a custom set of objects, given to \fBhwloc_topology_allow()\fP as \fCcpuset\fP and/or \fCnodeset\fP parameters\&. 
+.SS "enum \fBhwloc_restrict_flags_e\fP"
+
+.PP
+Flags to be given to \fBhwloc_topology_restrict()\fP\&. 
+.PP
+\fBEnumerator\fP
+.in +1c
+.TP
+\fB\fIHWLOC_RESTRICT_FLAG_REMOVE_CPULESS \fP\fP
+Remove all objects that became CPU-less\&. By default, only objects that contain no PU and no memory are removed\&. This flag may not be used with \fBHWLOC_RESTRICT_FLAG_BYNODESET\fP\&. 
+.TP
+\fB\fIHWLOC_RESTRICT_FLAG_BYNODESET \fP\fP
+Restrict by nodeset instead of CPU set\&. Only keep objects whose nodeset is included or partially included in the given set\&. This flag may not be used with \fBHWLOC_RESTRICT_FLAG_REMOVE_CPULESS\fP\&. 
+.TP
+\fB\fIHWLOC_RESTRICT_FLAG_REMOVE_MEMLESS \fP\fP
+Remove all objects that became Memory-less\&. By default, only objects that contain no PU and no memory are removed\&. This flag may only be used with \fBHWLOC_RESTRICT_FLAG_BYNODESET\fP\&. 
+.TP
+\fB\fIHWLOC_RESTRICT_FLAG_ADAPT_MISC \fP\fP
+Move Misc objects to ancestors if their parents are removed during restriction\&. If this flag is not set, Misc objects are removed when their parents are removed\&. 
+.TP
+\fB\fIHWLOC_RESTRICT_FLAG_ADAPT_IO \fP\fP
+Move I/O objects to ancestors if their parents are removed during restriction\&. If this flag is not set, I/O devices and bridges are removed when their parents are removed\&. 
+.SH "Function Documentation"
+.PP 
+.SS "int hwloc_obj_add_other_obj_sets (\fBhwloc_obj_t\fP dst, \fBhwloc_obj_t\fP src)"
+
+.PP
+Setup object cpusets/nodesets by OR'ing another object's sets\&. For each defined cpuset or nodeset in \fCsrc\fP, allocate the corresponding set in \fCdst\fP and add \fCsrc\fP to it by OR'ing sets\&.
+.PP
+This function is convenient between \fBhwloc_topology_alloc_group_object()\fP and \fBhwloc_topology_insert_group_object()\fP\&. It builds the sets of the new Group that will be inserted as a new intermediate parent of several objects\&. 
+.SS "\fBhwloc_obj_t\fP hwloc_topology_alloc_group_object (\fBhwloc_topology_t\fP topology)"
+
+.PP
+Allocate a Group object to insert later with \fBhwloc_topology_insert_group_object()\fP\&. This function returns a new Group object\&.
+.PP
+The caller should (at least) initialize its sets before inserting the object in the topology\&. See \fBhwloc_topology_insert_group_object()\fP\&. 
+.SS "int hwloc_topology_allow (\fBhwloc_topology_t\fP restrict topology, \fBhwloc_const_cpuset_t\fP cpuset, \fBhwloc_const_nodeset_t\fP nodeset, unsigned long flags)"
+
+.PP
+Change the sets of allowed PUs and NUMA nodes in the topology\&. This function only works if the \fBHWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED\fP was set on the topology\&. It does not modify any object, it only changes the sets returned by \fBhwloc_topology_get_allowed_cpuset()\fP and \fBhwloc_topology_get_allowed_nodeset()\fP\&.
+.PP
+It is notably useful when importing a topology from another process running in a different Linux Cgroup\&.
+.PP
+\fCflags\fP must be set to one flag among \fBhwloc_allow_flags_e\fP\&.
+.PP
+\fBNote\fP
+.RS 4
+Removing objects from a topology should rather be performed with \fBhwloc_topology_restrict()\fP\&. 
+.RE
+.PP
+
+.SS "\fBhwloc_obj_t\fP hwloc_topology_insert_group_object (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP group)"
+
+.PP
+Add more structure to the topology by adding an intermediate Group\&. The caller should first allocate a new Group object with \fBhwloc_topology_alloc_group_object()\fP\&. Then it must setup at least one of its CPU or node sets to specify the final location of the Group in the topology\&. Then the object can be passed to this function for actual insertion in the topology\&.
+.PP
+Either the cpuset or nodeset field (or both, if compatible) must be set to a non-empty bitmap\&. The complete_cpuset or complete_nodeset may be set instead if inserting with respect to the complete topology (including disallowed, offline or unknown objects)\&. If grouping several objects, \fBhwloc_obj_add_other_obj_sets()\fP is an easy way to build the Group sets iteratively\&. These sets cannot be larger than the current topology, or they would get restricted silently\&. The core will setup the other sets after actual insertion\&.
+.PP
+The \fCsubtype\fP object attribute may be defined (to a dynamically allocated string) to display something else than 'Group' as the type name for this object in lstopo\&. Custom name/value info pairs may be added with \fBhwloc_obj_add_info()\fP after insertion\&.
+.PP
+The group \fCdont_merge\fP attribute may be set to \fC1\fP to prevent the hwloc core from ever merging this object with another hierarchically-identical object\&. This is useful when the Group itself describes an important feature that cannot be exposed anywhere else in the hierarchy\&.
+.PP
+The group \fCkind\fP attribute may be set to a high value such as \fC0xffffffff\fP to tell hwloc that this new Group should always be discarded in favor of any existing Group with the same locality\&.
+.PP
+\fBReturns\fP
+.RS 4
+The inserted object if it was properly inserted\&.
+.PP
+An existing object if the Group was merged or discarded because the topology already contained an object at the same location (the Group did not add any hierarchy information)\&.
+.PP
+\fCNULL\fP if the insertion failed because of conflicting sets in topology tree\&.
+.PP
+\fCNULL\fP if Group objects are filtered-out of the topology (\fBHWLOC_TYPE_FILTER_KEEP_NONE\fP)\&.
+.PP
+\fCNULL\fP if the object was discarded because no set was initialized in the Group before insert, or all of them were empty\&. 
+.RE
+.PP
+
+.SS "\fBhwloc_obj_t\fP hwloc_topology_insert_misc_object (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP parent, const char * name)"
+
+.PP
+Add a MISC object as a leaf of the topology\&. A new MISC object will be created and inserted into the topology at the position given by parent\&. It is appended to the list of existing Misc children, without ever adding any intermediate hierarchy level\&. This is useful for annotating the topology without actually changing the hierarchy\&.
+.PP
+\fCname\fP is supposed to be unique across all Misc objects in the topology\&. It will be duplicated to setup the new object attributes\&.
+.PP
+The new leaf object will not have any \fCcpuset\fP\&.
+.PP
+\fBReturns\fP
+.RS 4
+the newly-created object
+.PP
+\fCNULL\fP on error\&.
+.PP
+\fCNULL\fP if Misc objects are filtered-out of the topology (\fBHWLOC_TYPE_FILTER_KEEP_NONE\fP)\&.
+.RE
+.PP
+\fBNote\fP
+.RS 4
+If \fCname\fP contains some non-printable characters, they will be dropped when exporting to XML, see \fBhwloc_topology_export_xml()\fP in \fBhwloc/export\&.h\fP\&. 
+.RE
+.PP
+
+.SS "int hwloc_topology_refresh (\fBhwloc_topology_t\fP topology)"
+
+.PP
+Refresh internal structures after topology modification\&. Modifying the topology (by restricting, adding objects, modifying structures such as distances or memory attributes, etc\&.) may cause some internal caches to become invalid\&. These caches are automatically refreshed when accessed but this refreshing is not thread-safe\&.
+.PP
+This function is not thread-safe either, but it is a good way to end a non-thread-safe phase of topology modification\&. Once this refresh is done, multiple threads may concurrently consult the topology, objects, distances, attributes, etc\&.
+.PP
+See also \fBThread Safety\fP 
+.SS "int hwloc_topology_restrict (\fBhwloc_topology_t\fP restrict topology, \fBhwloc_const_bitmap_t\fP set, unsigned long flags)"
+
+.PP
+Restrict the topology to the given CPU set or nodeset\&. Topology \fCtopology\fP is modified so as to remove all objects that are not included (or partially included) in the CPU set \fCset\fP\&. All objects CPU and node sets are restricted accordingly\&.
+.PP
+If \fBHWLOC_RESTRICT_FLAG_BYNODESET\fP is passed in \fCflags\fP, \fCset\fP is considered a nodeset instead of a CPU set\&.
+.PP
+\fCflags\fP is a OR'ed set of \fBhwloc_restrict_flags_e\fP\&.
+.PP
+\fBNote\fP
+.RS 4
+This call may not be reverted by restricting back to a larger set\&. Once dropped during restriction, objects may not be brought back, except by loading another topology with \fBhwloc_topology_load()\fP\&.
+.RE
+.PP
+\fBReturns\fP
+.RS 4
+0 on success\&.
+.PP
+-1 with errno set to EINVAL if the input set is invalid\&. The topology is not modified in this case\&.
+.PP
+-1 with errno set to ENOMEM on failure to allocate internal data\&. The topology is reinitialized in this case\&. It should be either destroyed with \fBhwloc_topology_destroy()\fP or configured and loaded again\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_windows.3 b/doc/doxygen-doc/man/man3/hwlocality_windows.3
new file mode 100644
index 00000000..8a923957
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_windows.3
@@ -0,0 +1,54 @@
+.TH "hwlocality_windows" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_windows \- Windows-specific helpers
+.SH SYNOPSIS
+.br
+.PP
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "int \fBhwloc_windows_get_nr_processor_groups\fP (\fBhwloc_topology_t\fP topology, unsigned long flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_windows_get_processor_group_cpuset\fP (\fBhwloc_topology_t\fP topology, unsigned pg_index, \fBhwloc_cpuset_t\fP cpuset, unsigned long flags)"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+These functions query Windows processor groups\&. These groups partition the operating system into virtual sets of up to 64 neighbor PUs\&. Threads and processes may only be bound inside a single group\&. Although Windows processor groups may be exposed in the hwloc hierarchy as hwloc Groups, they are also often merged into existing hwloc objects such as NUMA nodes or Packages\&. This API provides explicit information about Windows processor groups so that applications know whether binding to a large set of PUs may fail because it spans over multiple Windows processor groups\&. 
+.SH "Function Documentation"
+.PP 
+.SS "int hwloc_windows_get_nr_processor_groups (\fBhwloc_topology_t\fP topology, unsigned long flags)"
+
+.PP
+Get the number of Windows processor groups\&. \fCflags\fP must be 0 for now\&.
+.PP
+\fBReturns\fP
+.RS 4
+at least \fC1\fP on success\&. 
+.PP
+-1 on error, for instance if the topology does not match the current system (e\&.g\&. loaded from another machine through XML)\&. 
+.RE
+.PP
+
+.SS "int hwloc_windows_get_processor_group_cpuset (\fBhwloc_topology_t\fP topology, unsigned pg_index, \fBhwloc_cpuset_t\fP cpuset, unsigned long flags)"
+
+.PP
+Get the CPU-set of a Windows processor group\&. Get the set of PU included in the processor group specified by \fCpg_index\fP\&. \fCpg_index\fP must be between \fC0\fP and the value returned by \fBhwloc_windows_get_nr_processor_groups()\fP minus 1\&.
+.PP
+\fCflags\fP must be 0 for now\&.
+.PP
+\fBReturns\fP
+.RS 4
+\fC0\fP on success\&. 
+.PP
+\fC-1\fP on error, for instance if \fCpg_index\fP is invalid, or if the topology does not match the current system (e\&.g\&. loaded from another machine through XML)\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/doxygen-doc/man/man3/hwlocality_xmlexport.3 b/doc/doxygen-doc/man/man3/hwlocality_xmlexport.3
new file mode 100644
index 00000000..9f586bb5
--- /dev/null
+++ b/doc/doxygen-doc/man/man3/hwlocality_xmlexport.3
@@ -0,0 +1,176 @@
+.TH "hwlocality_xmlexport" 3 "Tue Mar 28 2023" "Version 2.9.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
+.ad l
+.nh
+.SH NAME
+hwlocality_xmlexport \- Exporting Topologies to XML
+.SH SYNOPSIS
+.br
+.PP
+.SS "Enumerations"
+
+.in +1c
+.ti -1c
+.RI "enum \fBhwloc_topology_export_xml_flags_e\fP { \fBHWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1\fP }"
+.br
+.in -1c
+.SS "Functions"
+
+.in +1c
+.ti -1c
+.RI "int \fBhwloc_topology_export_xml\fP (\fBhwloc_topology_t\fP topology, const char *xmlpath, unsigned long flags)"
+.br
+.ti -1c
+.RI "int \fBhwloc_topology_export_xmlbuffer\fP (\fBhwloc_topology_t\fP topology, char **xmlbuffer, int *buflen, unsigned long flags)"
+.br
+.ti -1c
+.RI "void \fBhwloc_free_xmlbuffer\fP (\fBhwloc_topology_t\fP topology, char *xmlbuffer)"
+.br
+.ti -1c
+.RI "void \fBhwloc_topology_set_userdata_export_callback\fP (\fBhwloc_topology_t\fP topology, void(*export_cb)(void *reserved, \fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP obj))"
+.br
+.ti -1c
+.RI "int \fBhwloc_export_obj_userdata\fP (void *reserved, \fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP obj, const char *name, const void *buffer, size_t length)"
+.br
+.ti -1c
+.RI "int \fBhwloc_export_obj_userdata_base64\fP (void *reserved, \fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP obj, const char *name, const void *buffer, size_t length)"
+.br
+.ti -1c
+.RI "void \fBhwloc_topology_set_userdata_import_callback\fP (\fBhwloc_topology_t\fP topology, void(*import_cb)(\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP obj, const char *name, const void *buffer, size_t length))"
+.br
+.in -1c
+.SH "Detailed Description"
+.PP 
+
+.SH "Enumeration Type Documentation"
+.PP 
+.SS "enum \fBhwloc_topology_export_xml_flags_e\fP"
+
+.PP
+Flags for exporting XML topologies\&. Flags to be given as a OR'ed set to \fBhwloc_topology_export_xml()\fP\&. 
+.PP
+\fBEnumerator\fP
+.in +1c
+.TP
+\fB\fIHWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1 \fP\fP
+Export XML that is loadable by hwloc v1\&.x\&. However, the export may miss some details about the topology\&. 
+.SH "Function Documentation"
+.PP 
+.SS "int hwloc_export_obj_userdata (void * reserved, \fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP obj, const char * name, const void * buffer, size_t length)"
+
+.PP
+Export some object userdata to XML\&. This function may only be called from within the export() callback passed to \fBhwloc_topology_set_userdata_export_callback()\fP\&. It may be invoked one of multiple times to export some userdata to XML\&. The \fCbuffer\fP content of length \fClength\fP is stored with optional name \fCname\fP\&.
+.PP
+When importing this XML file, the import() callback (if set) will be called exactly as many times as \fBhwloc_export_obj_userdata()\fP was called during export()\&. It will receive the corresponding \fCname\fP, \fCbuffer\fP and \fClength\fP arguments\&.
+.PP
+\fCreserved\fP, \fCtopology\fP and \fCobj\fP must be the first three parameters that were given to the export callback\&.
+.PP
+Only printable characters may be exported to XML string attributes\&. If a non-printable character is passed in \fCname\fP or \fCbuffer\fP, the function returns -1 with errno set to EINVAL\&.
+.PP
+If exporting binary data, the application should first encode into printable characters only (or use \fBhwloc_export_obj_userdata_base64()\fP)\&. It should also take care of portability issues if the export may be reimported on a different architecture\&. 
+.SS "int hwloc_export_obj_userdata_base64 (void * reserved, \fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP obj, const char * name, const void * buffer, size_t length)"
+
+.PP
+Encode and export some object userdata to XML\&. This function is similar to \fBhwloc_export_obj_userdata()\fP but it encodes the input buffer into printable characters before exporting\&. On import, decoding is automatically performed before the data is given to the import() callback if any\&.
+.PP
+This function may only be called from within the export() callback passed to \fBhwloc_topology_set_userdata_export_callback()\fP\&.
+.PP
+The function does not take care of portability issues if the export may be reimported on a different architecture\&. 
+.SS "void hwloc_free_xmlbuffer (\fBhwloc_topology_t\fP topology, char * xmlbuffer)"
+
+.PP
+Free a buffer allocated by \fBhwloc_topology_export_xmlbuffer()\fP 
+.SS "int hwloc_topology_export_xml (\fBhwloc_topology_t\fP topology, const char * xmlpath, unsigned long flags)"
+
+.PP
+Export the topology into an XML file\&. This file may be loaded later through \fBhwloc_topology_set_xml()\fP\&.
+.PP
+By default, the latest export format is used, which means older hwloc releases (e\&.g\&. v1\&.x) will not be able to import it\&. Exporting to v1\&.x specific XML format is possible using flag \fBHWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1\fP but it may miss some details about the topology\&. If there is any chance that the exported file may ever be imported back by a process using hwloc 1\&.x, one should consider detecting it at runtime and using the corresponding export format\&.
+.PP
+\fCflags\fP is a OR'ed set of \fBhwloc_topology_export_xml_flags_e\fP\&.
+.PP
+\fBReturns\fP
+.RS 4
+-1 if a failure occured\&.
+.RE
+.PP
+\fBNote\fP
+.RS 4
+See also \fBhwloc_topology_set_userdata_export_callback()\fP for exporting application-specific object userdata\&.
+.PP
+The topology-specific userdata pointer is ignored when exporting to XML\&.
+.PP
+Only printable characters may be exported to XML string attributes\&. Any other character, especially any non-ASCII character, will be silently dropped\&.
+.PP
+If \fCname\fP is '-', the XML output is sent to the standard output\&. 
+.RE
+.PP
+
+.SS "int hwloc_topology_export_xmlbuffer (\fBhwloc_topology_t\fP topology, char ** xmlbuffer, int * buflen, unsigned long flags)"
+
+.PP
+Export the topology into a newly-allocated XML memory buffer\&. \fCxmlbuffer\fP is allocated by the callee and should be freed with \fBhwloc_free_xmlbuffer()\fP later in the caller\&.
+.PP
+This memory buffer may be loaded later through \fBhwloc_topology_set_xmlbuffer()\fP\&.
+.PP
+By default, the latest export format is used, which means older hwloc releases (e\&.g\&. v1\&.x) will not be able to import it\&. Exporting to v1\&.x specific XML format is possible using flag \fBHWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1\fP but it may miss some details about the topology\&. If there is any chance that the exported buffer may ever be imported back by a process using hwloc 1\&.x, one should consider detecting it at runtime and using the corresponding export format\&.
+.PP
+The returned buffer ends with a \\0 that is included in the returned length\&.
+.PP
+\fCflags\fP is a OR'ed set of \fBhwloc_topology_export_xml_flags_e\fP\&.
+.PP
+\fBReturns\fP
+.RS 4
+-1 if a failure occured\&.
+.RE
+.PP
+\fBNote\fP
+.RS 4
+See also \fBhwloc_topology_set_userdata_export_callback()\fP for exporting application-specific object userdata\&.
+.PP
+The topology-specific userdata pointer is ignored when exporting to XML\&.
+.PP
+Only printable characters may be exported to XML string attributes\&. Any other character, especially any non-ASCII character, will be silently dropped\&. 
+.RE
+.PP
+
+.SS "void hwloc_topology_set_userdata_export_callback (\fBhwloc_topology_t\fP topology, void(*)(void *reserved, \fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP obj) export_cb)"
+
+.PP
+Set the application-specific callback for exporting object userdata\&. The object userdata pointer is not exported to XML by default because hwloc does not know what it contains\&.
+.PP
+This function lets applications set \fCexport_cb\fP to a callback function that converts this opaque userdata into an exportable string\&.
+.PP
+\fCexport_cb\fP is invoked during XML export for each object whose \fCuserdata\fP pointer is not \fCNULL\fP\&. The callback should use \fBhwloc_export_obj_userdata()\fP or \fBhwloc_export_obj_userdata_base64()\fP to actually export something to XML (possibly multiple times per object)\&.
+.PP
+\fCexport_cb\fP may be set to \fCNULL\fP if userdata should not be exported to XML\&.
+.PP
+\fBNote\fP
+.RS 4
+The topology-specific userdata pointer is ignored when exporting to XML\&. 
+.RE
+.PP
+
+.SS "void hwloc_topology_set_userdata_import_callback (\fBhwloc_topology_t\fP topology, void(*)(\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP obj, const char *name, const void *buffer, size_t length) import_cb)"
+
+.PP
+Set the application-specific callback for importing userdata\&. On XML import, userdata is ignored by default because hwloc does not know how to store it in memory\&.
+.PP
+This function lets applications set \fCimport_cb\fP to a callback function that will get the XML-stored userdata and store it in the object as expected by the application\&.
+.PP
+\fCimport_cb\fP is called during \fBhwloc_topology_load()\fP as many times as \fBhwloc_export_obj_userdata()\fP was called during export\&. The topology is not entirely setup yet\&. Object attributes are ready to consult, but links between objects are not\&.
+.PP
+\fCimport_cb\fP may be \fCNULL\fP if userdata should be ignored during import\&.
+.PP
+\fBNote\fP
+.RS 4
+\fCbuffer\fP contains \fClength\fP characters followed by a null byte ('\\0')\&.
+.PP
+This function should be called before \fBhwloc_topology_load()\fP\&.
+.PP
+The topology-specific userdata pointer is ignored when importing from XML\&. 
+.RE
+.PP
+
+.SH "Author"
+.PP 
+Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
diff --git a/doc/hwloc.doxy b/doc/hwloc.doxy
index 27a1a9aa..86962daf 100644
--- a/doc/hwloc.doxy
+++ b/doc/hwloc.doxy
@@ -1,6 +1,6 @@
 /*
  * Copyright © 2009 CNRS
- * Copyright © 2009-2022 Inria.  All rights reserved.
+ * Copyright © 2009-2023 Inria.  All rights reserved.
  * Copyright © 2009-2013 Université Bordeaux
  * Copyright © 2009-2020 Cisco Systems, Inc.  All rights reserved.
  * Copyright © 2020 Hewlett Packard Enterprise.  All rights reserved.
@@ -1535,6 +1535,7 @@ components when I/O discovery is enabled and supported.
 <li>Network interfaces (::HWLOC_OBJ_OSDEV_NETWORK)
  <ul>
  <li><em>eth0</em>, <em>wlan0</em>, <em>ib0</em> (Linux component)</li>
+ <li><em>hsn0</em> with "Slingshot" subtype for HPE Cray HSNs (Linux component).</li>
  </ul>
 </li>
 <li>OpenFabrics (InfiniBand, Omni-Path, usNIC, etc) HCAs (::HWLOC_OBJ_OSDEV_OPENFABRICS)
@@ -1811,6 +1812,7 @@ subtype <tt>Cluster</tt>, <tt>Module</tt>, <tt>Tile</tt>, <tt>Compute Unit</tt>,
 <li>Co-processor: subtype <tt>OpenCL</tt>, <tt>LevelZero</tt>, <tt>CUDA</tt>, or <tt>VectorEngine</tt>.</li>
 <li>GPU: subtype <tt>RSMI</tt> (AMD GPU) or <tt>NVML</tt> (NVIDIA GPU).</li>
 <li>OpenFabrics: subtype <tt>BXI</tt> (Bull/Atos BXI HCA).</li>
+<li>Network: subtype <tt>Slingshot</tt> (HPE Cray Slingshot Cassini HSN).</li>
 <li>Block: subtype <tt>Disk</tt>, <tt>NVM</tt> (non-volatile memory), <tt>SPM</tt> (specific-purpose memory), <tt>CXLMem</tt> (CXL volatile ou persistent memory), <tt>Tape</tt>, or <tt>Removable Media Device</tt>.</li>
 </ul>
 </li>
@@ -4315,8 +4317,20 @@ and <tt>HWLOC_OBJ_PACKAGE</tt> yet, you may use:
 Once a program is built against a hwloc library, it may also dynamically
 link with compatible libraries from other hwloc releases.
 The version of that runtime library may be queried with hwloc_get_api_version().
-See \ref faq_version_abi for using this function for testing ABI compatibility.
+For instance, the following code enables the topology flag ::HWLOC_TOPOLOGY_FLAG_NO_DISTANCES
+when compiling on hwloc 2.8 or later, but it disables it at runtime if running
+on an older hwloc (otherwise hwloc_topology_set_flags() would fail).
 
+\verbatim
+unsigned long topology_flags = ...; /* wanted flags that were supported before 2.8 */
+#if HWLOC_API_VERSION >= 0x20800
+if (hwloc_get_api_version() >= 0x20800)
+  topology_flags |= HWLOC_TOPOLOGY_FLAG_NO_DISTANCES; /* wanted flags only supported in 2.8+ */
+#endif
+hwloc_topology_set_flags(topology, topology_flags);
+\endverbatim
+
+See also \ref faq_version_abi for using hwloc_get_api_version() for testing ABI compatibility.
 
 
 \subsection faq_version What is the difference between API and library version numbers?
diff --git a/doc/images/devel09-pci.png b/doc/images/devel09-pci.png
index 0a60161d..50ae351c 100644
Binary files a/doc/images/devel09-pci.png and b/doc/images/devel09-pci.png differ
diff --git a/doc/images/dudley.png b/doc/images/dudley.png
index d0f955a6..a1df53f9 100644
Binary files a/doc/images/dudley.png and b/doc/images/dudley.png differ
diff --git a/doc/images/emmett.png b/doc/images/emmett.png
index 6f5eaeac..7d5c13eb 100644
Binary files a/doc/images/emmett.png and b/doc/images/emmett.png differ
diff --git a/doc/images/hagrid.png b/doc/images/hagrid.png
index f81d7d54..c7c6f1cc 100644
Binary files a/doc/images/hagrid.png and b/doc/images/hagrid.png differ
diff --git a/doc/images/ppc64-full-with-smt.png b/doc/images/ppc64-full-with-smt.png
index 35da6b17..e609c1a7 100644
Binary files a/doc/images/ppc64-full-with-smt.png and b/doc/images/ppc64-full-with-smt.png differ
diff --git a/doc/images/ppc64-with-smt.png b/doc/images/ppc64-with-smt.png
index 230510af..30037ae4 100644
Binary files a/doc/images/ppc64-with-smt.png and b/doc/images/ppc64-with-smt.png differ
diff --git a/doc/images/ppc64-without-smt.png b/doc/images/ppc64-without-smt.png
index bb916f6b..62ef7435 100644
Binary files a/doc/images/ppc64-without-smt.png and b/doc/images/ppc64-without-smt.png differ
diff --git a/hwloc/topology-darwin.c b/hwloc/topology-darwin.c
index 4651c2a3..101a681a 100644
--- a/hwloc/topology-darwin.c
+++ b/hwloc/topology-darwin.c
@@ -1,6 +1,6 @@
 /*
  * Copyright © 2009 CNRS
- * Copyright © 2009-2022 Inria.  All rights reserved.
+ * Copyright © 2009-2023 Inria.  All rights reserved.
  * Copyright © 2009-2013 Université Bordeaux
  * Copyright © 2009-2011 Cisco Systems, Inc.  All rights reserved.
  * See COPYING in top-level directory.
@@ -456,7 +456,8 @@ static void hwloc__darwin_look_perflevel_caches(struct hwloc_topology *topology,
   int64_t size;
 
   snprintf(name, sizeof(name), "hw.perflevel%u.l1icachesize", level);
-  if (!hwloc_get_sysctlbyname(name, &size)) {
+  if (hwloc_filter_check_keep_object_type(topology, HWLOC_OBJ_L1ICACHE)
+      && !hwloc_get_sysctlbyname(name, &size)) {
     /* hw.perflevel%u.cpusperl1i missing, assume it's per PU */
     hwloc_debug("found perflevel %u l1icachesize %ld, assuming width 1\n", level, (long) size);
     hwloc__darwin_build_perflevel_cache_level(topology, cpuset, 1, HWLOC_OBJ_L1ICACHE, 1, size, linesize);
@@ -464,7 +465,8 @@ static void hwloc__darwin_look_perflevel_caches(struct hwloc_topology *topology,
   }
 
   snprintf(name, sizeof(name), "hw.perflevel%u.l1dcachesize", level);
-  if (!hwloc_get_sysctlbyname(name, &size)) {
+  if (hwloc_filter_check_keep_object_type(topology, HWLOC_OBJ_L1CACHE)
+      && !hwloc_get_sysctlbyname(name, &size)) {
     /* hw.perflevel%u.cpusperl1d missing, assume it's per PU */
     hwloc_debug("found perflevel %u l1dcachesize %ld, assuming width 1\n", level, (long) size);
     hwloc__darwin_build_perflevel_cache_level(topology, cpuset, 1, HWLOC_OBJ_L1CACHE, 1, size, linesize);
@@ -472,7 +474,8 @@ static void hwloc__darwin_look_perflevel_caches(struct hwloc_topology *topology,
   }
 
   snprintf(name, sizeof(name), "hw.perflevel%u.l2cachesize", level);
-  if (!hwloc_get_sysctlbyname(name, &size)) {
+  if (hwloc_filter_check_keep_object_type(topology, HWLOC_OBJ_L2CACHE)
+      && !hwloc_get_sysctlbyname(name, &size)) {
     int64_t cpus;
 
     hwloc_debug("found perflevel %u l2cachesize %ld\n", level, (long) size);
@@ -499,10 +502,11 @@ static void hwloc__darwin_look_perflevel_caches(struct hwloc_topology *topology,
     /* assume PUs are contigous for now. */
     hwloc__darwin_build_perflevel_cache_level(topology, cpuset, cpus, HWLOC_OBJ_L2CACHE, 2, size, linesize);
     gothybrid->l2++;
-}
+  }
 
   snprintf(name, sizeof(name), "hw.perflevel%u.l3cachesize", level);
-  if (!hwloc_get_sysctlbyname(name, &size)) {
+  if (hwloc_filter_check_keep_object_type(topology, HWLOC_OBJ_L3CACHE)
+      && !hwloc_get_sysctlbyname(name, &size)) {
     int64_t cpus;
 
     hwloc_debug("found perflevel %u l3cachesize %ld\n", level, (long) size);
diff --git a/hwloc/topology-linux.c b/hwloc/topology-linux.c
index b3e5d353..863087c8 100644
--- a/hwloc/topology-linux.c
+++ b/hwloc/topology-linux.c
@@ -6177,6 +6177,15 @@ hwloc_linuxfs_net_class_fillinfos(int root_fd,
       }
     }
   }
+  if (!strncmp(obj->name, "hsn", 3)) {
+    /* Cray Cassini HSN for Slingshot networks are Ethernet-based,
+     * named hsnX with a "cxi" (and "cxi_user") class.
+     */
+    snprintf(path, sizeof(path), "%s/device/cxi", osdevpath);
+    if (!hwloc_access(path, R_OK|X_OK, root_fd)) {
+      obj->subtype = strdup("Slingshot");
+    }
+  }
 }
 
 static int
diff --git a/hwloc/topology-nvml.c b/hwloc/topology-nvml.c
index a1ef5e8b..9735b149 100644
--- a/hwloc/topology-nvml.c
+++ b/hwloc/topology-nvml.c
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2012-2022 Inria.  All rights reserved.
+ * Copyright © 2012-2023 Inria.  All rights reserved.
  * See COPYING in top-level directory.
  */
 
@@ -352,13 +352,18 @@ hwloc_nvml_discover(struct hwloc_backend *backend, struct hwloc_disc_status *dst
           continue;
 
         hwloc_debug("GPU #%u NVLink #%u has version %u\n", i, j, version);
-        /* version1 = 20GB/s, version2=25GB/s */
+        /* NVIDIA often shows bidirection bandwidths,
+         * or even the bidirectional bandwidth of all links agregated for a single GPU
+         * 160GB/s on P100 (4 links), 300 on V100 (6), 600 on A100 (12), 900 on H100 (18 links).
+         *
+         * The actual unidirectional bandwidth we want is 20GB/s for v1, and 25GB/s for v2+.
+         * v3 has twice bigger pairs than v2 but half the number of pairs per (sub-)link.
+         * v4 and v3 seem identical.
+         */
         if (version == 1) {
           bw = 20000; /* multiple links may connect same GPUs */
-        } else if (version == 2) {
+        } else if (version >= 2 && version <= 4) {
           bw = 25000; /* multiple links may connect same GPUs */
-        } else if (version == 3 || version == 4) {
-          bw = 50000; /* multiple links may connect same GPUs */
         } else {
           static int warned = 0;
           if (!warned && HWLOC_SHOW_ALL_ERRORS())
diff --git a/hwloc/topology.c b/hwloc/topology.c
index 47b4658c..1c466010 100644
--- a/hwloc/topology.c
+++ b/hwloc/topology.c
@@ -1,6 +1,6 @@
 /*
  * Copyright © 2009 CNRS
- * Copyright © 2009-2022 Inria.  All rights reserved.
+ * Copyright © 2009-2023 Inria.  All rights reserved.
  * Copyright © 2009-2012, 2020 Université Bordeaux
  * Copyright © 2009-2011 Cisco Systems, Inc.  All rights reserved.
  * Copyright © 2022 IBM Corporation.  All rights reserved.
@@ -4185,20 +4185,11 @@ restrict_object_by_cpuset(hwloc_topology_t topology, unsigned long flags, hwloc_
     hwloc_bitmap_andnot(obj->cpuset, obj->cpuset, droppedcpuset);
     hwloc_bitmap_andnot(obj->complete_cpuset, obj->complete_cpuset, droppedcpuset);
     modified = 1;
-  } else {
-    if ((flags & HWLOC_RESTRICT_FLAG_REMOVE_CPULESS)
-	&& hwloc_bitmap_iszero(obj->complete_cpuset)) {
-      /* we're empty, there's a NUMAnode below us, it'll be removed this time */
-      modified = 1;
-    }
-    /* nodeset cannot intersect unless cpuset intersects or is empty */
-    if (droppednodeset)
-      assert(!hwloc_bitmap_intersects(obj->complete_nodeset, droppednodeset)
-	     || hwloc_bitmap_iszero(obj->complete_cpuset));
   }
-  if (droppednodeset) {
+  if (droppednodeset && hwloc_bitmap_intersects(obj->complete_nodeset, droppednodeset)) {
     hwloc_bitmap_andnot(obj->nodeset, obj->nodeset, droppednodeset);
     hwloc_bitmap_andnot(obj->complete_nodeset, obj->complete_nodeset, droppednodeset);
+    modified = 1;
   }
 
   if (modified) {
@@ -4251,20 +4242,11 @@ restrict_object_by_nodeset(hwloc_topology_t topology, unsigned long flags, hwloc
     hwloc_bitmap_andnot(obj->nodeset, obj->nodeset, droppednodeset);
     hwloc_bitmap_andnot(obj->complete_nodeset, obj->complete_nodeset, droppednodeset);
     modified = 1;
-  } else {
-    if ((flags & HWLOC_RESTRICT_FLAG_REMOVE_MEMLESS)
-	&& hwloc_bitmap_iszero(obj->complete_nodeset)) {
-      /* we're empty, there's a PU below us, it'll be removed this time */
-      modified = 1;
-    }
-    /* cpuset cannot intersect unless nodeset intersects or is empty */
-    if (droppedcpuset)
-      assert(!hwloc_bitmap_intersects(obj->complete_cpuset, droppedcpuset)
-	     || hwloc_bitmap_iszero(obj->complete_nodeset));
   }
-  if (droppedcpuset) {
+  if (droppedcpuset && hwloc_bitmap_intersects(obj->complete_cpuset, droppedcpuset)) {
     hwloc_bitmap_andnot(obj->cpuset, obj->cpuset, droppedcpuset);
     hwloc_bitmap_andnot(obj->complete_cpuset, obj->complete_cpuset, droppedcpuset);
+    modified = 1;
   }
 
   if (modified) {
diff --git a/tests/hwloc/hwloc_backends.c b/tests/hwloc/hwloc_backends.c
index 75ef717b..c3617843 100644
--- a/tests/hwloc/hwloc_backends.c
+++ b/tests/hwloc/hwloc_backends.c
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2012-2022 Inria.  All rights reserved.
+ * Copyright © 2012-2023 Inria.  All rights reserved.
  * See COPYING in top-level directory.
  */
 
@@ -46,10 +46,14 @@ static const char *get_backend_name(hwloc_topology_t topo)
 static void assert_backend_name(hwloc_topology_t topo, const char *wanted)
 {
   const char *found = get_backend_name(topo);
-  int diff;
-  assert(found);
-  diff = strcmp(found, wanted);
-  assert(!diff);
+  if (!wanted) {
+    assert(!found);
+  } else {
+    int diff;
+    assert(found);
+    diff = strcmp(found, wanted);
+    assert(!diff);
+  }
 }
 
 static void assert_foo_bar(hwloc_topology_t topo, int setornot)
diff --git a/tests/hwloc/hwloc_topology_restrict.c b/tests/hwloc/hwloc_topology_restrict.c
index a9e8dfbb..096ddcbe 100644
--- a/tests/hwloc/hwloc_topology_restrict.c
+++ b/tests/hwloc/hwloc_topology_restrict.c
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2011-2021 Inria.  All rights reserved.
+ * Copyright © 2011-2023 Inria.  All rights reserved.
  * Copyright © 2011 Université Bordeaux.  All rights reserved.
  * See COPYING in top-level directory.
  */
@@ -12,8 +12,6 @@
 #include <stdint.h>
 #include <assert.h>
 
-static hwloc_topology_t topology;
-
 static void print_distances(const struct hwloc_distances_s *distances)
 {
   unsigned nbobjs = distances->nbobjs;
@@ -36,7 +34,7 @@ static void print_distances(const struct hwloc_distances_s *distances)
   }
 }
 
-static void check(unsigned nbgroups, unsigned nbnodes, unsigned nbcores, unsigned nbpus)
+static void check(hwloc_topology_t topology, unsigned nbgroups, unsigned nbnodes, unsigned nbcores, unsigned nbpus)
 {
   int depth;
   unsigned nb;
@@ -67,7 +65,7 @@ static void check(unsigned nbgroups, unsigned nbnodes, unsigned nbcores, unsigne
   assert(total_memory == nbnodes * 1024*1024*1024); /* synthetic topology puts 1GB per node */
 }
 
-static void check_distances(unsigned nbnodes, unsigned nbcores)
+static void check_distances(hwloc_topology_t topology, unsigned nbnodes, unsigned nbcores)
 {
   struct hwloc_distances_s *distance;
   unsigned nr;
@@ -108,6 +106,7 @@ int main(void)
   hwloc_obj_t nodes[3], cores[6];
   hwloc_uint64_t node_distances[9], core_distances[36];
   hwloc_distances_add_handle_t handle;
+  hwloc_topology_t topology, topology2;
   hwloc_obj_t obj;
   unsigned i,j;
   int err;
@@ -148,8 +147,8 @@ int main(void)
 
   /* entire topology */
   printf("starting from full topology\n");
-  check(3, 3, 6, 24);
-  check_distances(3, 6);
+  check(topology, 3, 3, 6, 24);
+  check_distances(topology, 3, 6);
 
   /* restrict to nothing, impossible */
   printf("restricting to nothing, must fail\n");
@@ -162,16 +161,16 @@ int main(void)
   assert(err < 0 && errno == EINVAL);
   err = hwloc_topology_refresh(topology);
   assert(!err);
-  check(3, 3, 6, 24);
-  check_distances(3, 6);
+  check(topology, 3, 3, 6, 24);
+  check_distances(topology, 3, 6);
 
   /* restrict to everything, will do nothing */
   printf("restricting to everything, does nothing\n");
   hwloc_bitmap_fill(cpuset);
   err = hwloc_topology_restrict(topology, cpuset, 0);
   assert(!err);
-  check(3, 3, 6, 24);
-  check_distances(3, 6);
+  check(topology, 3, 3, 6, 24);
+  check_distances(topology, 3, 6);
 
   /* remove a single pu (second PU of second core of second node) */
   printf("removing second PU of second core of second node\n");
@@ -179,8 +178,8 @@ int main(void)
   hwloc_bitmap_clr(cpuset, 13);
   err = hwloc_topology_restrict(topology, cpuset, 0);
   assert(!err);
-  check(3, 3, 6, 23);
-  check_distances(3, 6);
+  check(topology, 3, 3, 6, 23);
+  check_distances(topology, 3, 6);
 
   /* remove the entire second core of first node */
   printf("removing entire second core of first node\n");
@@ -188,8 +187,8 @@ int main(void)
   hwloc_bitmap_clr_range(cpuset, 4, 7);
   err = hwloc_topology_restrict(topology, cpuset, 0);
   assert(!err);
-  check(3, 3, 5, 19);
-  check_distances(3, 5);
+  check(topology, 3, 3, 5, 19);
+  check_distances(topology, 3, 5);
 
   /* remove the entire third node */
   printf("removing all PUs under third node, but keep that CPU-less node\n");
@@ -197,8 +196,12 @@ int main(void)
   hwloc_bitmap_clr_range(cpuset, 16, 23);
   err = hwloc_topology_restrict(topology, cpuset, 0);
   assert(!err);
-  check(3, 3, 3, 11);
-  check_distances(3, 3);
+  check(topology, 3, 3, 3, 11);
+  check_distances(topology, 3, 3);
+
+  /* duplicate/checkpoint to the current topology for additional testing */
+  err = hwloc_topology_dup(&topology2, topology);
+  assert(!err);
 
   /* only keep three PUs (first and last of first core, and last of last core of second node) */
   printf("restricting to 3 PUs in 2 cores in 2 nodes, and remove the CPU-less node, and auto-merge groups\n");
@@ -208,8 +211,28 @@ int main(void)
   hwloc_bitmap_set(cpuset, 15);
   err = hwloc_topology_restrict(topology, cpuset, HWLOC_RESTRICT_FLAG_REMOVE_CPULESS);
   assert(!err);
-  check(0, 2, 2, 3);
-  check_distances(2, 2);
+  check(topology, 0, 2, 2, 3);
+  check_distances(topology, 2, 2);
+
+  /* only keep three PUs (first and last of first core, and last of last core of second node) */
+  printf("do the same on the duplicated topology, with multiple intermediate restricts\n");
+  hwloc_bitmap_zero(cpuset);
+  hwloc_bitmap_set(cpuset, 0);
+  hwloc_bitmap_set(cpuset, 3);
+  hwloc_bitmap_set(cpuset, 15);
+  err = hwloc_topology_restrict(topology2, cpuset, 0);
+  assert(!err);
+  check(topology2, 3, 3, 2, 3);
+  check_distances(topology2, 3, 2);
+  err = hwloc_topology_restrict(topology2, cpuset, 0);
+  assert(!err);
+  check(topology2, 3, 3, 2, 3);
+  check_distances(topology2, 3, 2);
+  err = hwloc_topology_restrict(topology2, cpuset, HWLOC_RESTRICT_FLAG_REMOVE_CPULESS);
+  assert(!err);
+  check(topology2, 0, 2, 2, 3);
+  check_distances(topology2, 2, 2);
+  hwloc_topology_destroy(topology2);
 
   /* restrict to the third node, impossible */
   printf("restricting to only some already removed node, must fail\n");
@@ -217,8 +240,8 @@ int main(void)
   hwloc_bitmap_set_range(cpuset, 16, 23);
   err = hwloc_topology_restrict(topology, cpuset, 0);
   assert(err == -1 && errno == EINVAL);
-  check(0, 2, 2, 3);
-  check_distances(2, 2);
+  check(topology, 0, 2, 2, 3);
+  check_distances(topology, 2, 2);
 
   hwloc_topology_destroy(topology);
 
@@ -247,13 +270,18 @@ int main(void)
   err = hwloc_topology_restrict(topology, cpuset, HWLOC_RESTRICT_FLAG_BYNODESET);
   assert(!err);
   hwloc_topology_check(topology);
-  check(3, 2, 6, 24);
+  check(topology, 3, 2, 6, 24);
+  printf("applying exact same restriction again\n");
+  err = hwloc_topology_restrict(topology, cpuset, HWLOC_RESTRICT_FLAG_BYNODESET);
+  assert(!err);
+  hwloc_topology_check(topology);
+  check(topology, 3, 2, 6, 24);
   printf("further restricting bynodeset to a single numa node\n");
   hwloc_bitmap_only(cpuset, 1);
   err = hwloc_topology_restrict(topology, cpuset, HWLOC_RESTRICT_FLAG_BYNODESET|HWLOC_RESTRICT_FLAG_REMOVE_MEMLESS);
   assert(!err);
   hwloc_topology_check(topology);
-  check(0, 1, 2, 8);
+  check(topology, 0, 1, 2, 8);
   printf("restricting with invalid flags\n");
   err = hwloc_topology_restrict(topology, cpuset, HWLOC_RESTRICT_FLAG_REMOVE_MEMLESS);
   assert(err == -1);
@@ -286,6 +314,19 @@ int main(void)
   assert(!err);
   hwloc_topology_destroy(topology);
 
+  /* again with intermediate restricts */
+  printf("do the same on the duplicated topology, with multiple intermediate restricts\n");
+  hwloc_topology_init(&topology);
+  hwloc_topology_set_synthetic(topology, "pack:2 l3:2 numa:1 pu:1(indexes=0,2,1,3)");
+  hwloc_topology_load(topology);
+  hwloc_bitmap_zero(cpuset);
+  hwloc_bitmap_set_range(cpuset, 1, 2);
+  err = hwloc_topology_restrict(topology, cpuset, HWLOC_RESTRICT_FLAG_BYNODESET);
+  assert(!err);
+  err = hwloc_topology_restrict(topology, cpuset, HWLOC_RESTRICT_FLAG_BYNODESET|HWLOC_RESTRICT_FLAG_REMOVE_MEMLESS);
+  assert(!err);
+  hwloc_topology_destroy(topology);
+
   hwloc_bitmap_free(cpuset);
 
   return 0;
diff --git a/tests/hwloc/linux/gather/test-gather-topology.sh.in b/tests/hwloc/linux/gather/test-gather-topology.sh.in
index dbd6d537..41f8dee5 100644
--- a/tests/hwloc/linux/gather/test-gather-topology.sh.in
+++ b/tests/hwloc/linux/gather/test-gather-topology.sh.in
@@ -2,7 +2,7 @@
 #-*-sh-*-
 
 #
-# Copyright © 2012-2021 Inria.  All rights reserved.
+# Copyright © 2012-2023 Inria.  All rights reserved.
 # Copyright © 2010-2014 Cisco Systems, Inc.  All rights reserved.
 # Copyright © 2011 Université Bordeaux
 # See COPYING in top-level directory.
@@ -22,6 +22,9 @@ if test "x$HWLOC_TEST_GATHER_TOPOLOGY" = x0; then
     exit 77
 fi
 
+# Skip if /sys is unavailable (in some containerized build environments, etc)
+[ -d /sys ] || exit 77
+
 # Ensure we're running on linux.  If not, then just exit with status
 # code 77 (the GNU standard for a skipped test)
 
diff --git a/utils/hwloc/hwloc-gather-cpuid.c b/utils/hwloc/hwloc-gather-cpuid.c
index 8bd66ee9..2dd165fd 100644
--- a/utils/hwloc/hwloc-gather-cpuid.c
+++ b/utils/hwloc/hwloc-gather-cpuid.c
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2015-2022 Inria.  All rights reserved.
+ * Copyright © 2015-2023 Inria.  All rights reserved.
  * See COPYING in top-level directory.
  */
 
@@ -113,13 +113,15 @@ static int dump_one_proc(hwloc_topology_t topo, hwloc_obj_t pu, const char *path
 
   /* 0x4 = Caches on Intel ; Reserved on AMD */
   if (highest_cpuid >= 0x4) {
-    for(i=0; ; i++) {
+    for(i=0; i<256; i++) {
       regs[0] = 0x4; regs[2] = i;
       dump_one_cpuid(output, regs, 0x5);
       if (!(regs[0] & 0x1f))
 	/* invalid, no more caches */
 	break;
     }
+    if (i == 256)
+      fprintf(output, "# stopped at ecx=256\n");
   }
 
   /* 0x5 = Monitor/mwait */
@@ -144,10 +146,12 @@ static int dump_one_proc(hwloc_topology_t topo, hwloc_obj_t pu, const char *path
     if (regs[1] & (1<<2))
       has_intel_sgx = 1;
     max = regs[0];
-    for(i=1; i<=max; i++) {
+    for(i=1; i<=max && i<256; i++) {
       regs[0] = 0x7; regs[2] = i;
       dump_one_cpuid(output, regs, 0x5);
     }
+    if (i == 256)
+      fprintf(output, "# stopped at ecx=256 even if max=%u\n", max);
   }
 
   /* 0x9 = DCA on Intel ; Reserved on AMD */
@@ -164,13 +168,15 @@ static int dump_one_proc(hwloc_topology_t topo, hwloc_obj_t pu, const char *path
 
   /* 0xb = Extended Topology Enumeration */
   if (has_intel_x2apic && highest_cpuid >= 0xb) {
-    for(i=0; ; i++) {
+    for(i=0; i<256; i++) {
       regs[0] = 0xb; regs[2] = i;
       dump_one_cpuid(output, regs, 0x5);
       if (!(regs[2] & 0xff00))
 	/* invalid, no more levels */
 	break;
     }
+    if (i == 256)
+      fprintf(output, "# stopped at ecx=256\n");
   }
 
   /* 0xd = Extended state enumeration */
@@ -199,7 +205,7 @@ static int dump_one_proc(hwloc_topology_t topo, hwloc_obj_t pu, const char *path
     }
   }
 
-  /* 0xf = Platform/L3 QoS enumeration on Intel ; Reserved on AMD */
+  /* 0xf = Platform/L3 QoS enumeration on Intel and AMD */
   if (highest_cpuid >= 0xf) {
     regs[0] = 0xf; regs[2] = 0;
     dump_one_cpuid(output, regs, 0x5);
@@ -207,7 +213,7 @@ static int dump_one_proc(hwloc_topology_t topo, hwloc_obj_t pu, const char *path
     dump_one_cpuid(output, regs, 0x5);
   }
 
-  /* 0x10 = Platform/L3 QoS enforcement enumeration on Intel ; Reserved on AMD */
+  /* 0x10 = Platform/L3 QoS enforcement enumeration on Intel and AMD */
   if (highest_cpuid >= 0x10) {
     /* Intel Resource Director Technology (Intel RDT) Allocation */
     regs[0] = 0x10; regs[2] = 0;
@@ -215,10 +221,10 @@ static int dump_one_proc(hwloc_topology_t topo, hwloc_obj_t pu, const char *path
     /* L3 Cache Allocation Technology */
     regs[0] = 0x10; regs[2] = 1;
     dump_one_cpuid(output, regs, 0x5);
-    /* L2 Cache Allocation Technology */
+    /* L2 Cache Allocation Technology on Intel */
     regs[0] = 0x10; regs[2] = 2;
     dump_one_cpuid(output, regs, 0x5);
-    /* Memory Bandwidth Allocation */
+    /* Memory Bandwidth Allocation on Intel */
     regs[0] = 0x10; regs[2] = 3;
     dump_one_cpuid(output, regs, 0x5);
   }
@@ -229,13 +235,15 @@ static int dump_one_proc(hwloc_topology_t topo, hwloc_obj_t pu, const char *path
     dump_one_cpuid(output, regs, 0x5);
     regs[0] = 0x12; regs[2] = 1;
     dump_one_cpuid(output, regs, 0x5);
-    for(i=2; ; i++) {
+    for(i=2; i<256; i++) {
       regs[0] = 0x12; regs[2] = i;
       dump_one_cpuid(output, regs, 0x5);
       if (!(regs[0] & 0xf))
 	/* invalid, no more subleaves */
 	break;
     }
+    if (i == 256)
+      fprintf(output, "# stopped at ecx=256\n");
   }
 
   /* 0x14 = Processor trace enumeration on Intel ; Reserved on AMD */
@@ -265,10 +273,12 @@ static int dump_one_proc(hwloc_topology_t topo, hwloc_obj_t pu, const char *path
     dump_one_cpuid(output, regs, 0x5);
     maxsocid = regs[0];
     if (maxsocid >= 3) {
-      for(i=1; i<=maxsocid; i++) {
+      for(i=1; i<=maxsocid && i<256; i++) {
 	regs[0] = 0x17; regs[2] = i;
 	dump_one_cpuid(output, regs, 0x5);
       }
+      if (i == 256)
+        fprintf(output, "# stopped at ecx=256 even if maxsocid=%u\n", maxsocid);
     }
   }
 
@@ -278,7 +288,7 @@ static int dump_one_proc(hwloc_topology_t topo, hwloc_obj_t pu, const char *path
     regs[0] = 0x18; regs[2] = 0;
     dump_one_cpuid(output, regs, 0x5);
     max = regs[0];
-    for(i=1; i<=max; i++) {
+    for(i=1; i<=max && i<256; i++) {
       regs[0] = 0x18; regs[2] = i;
       regs[3] = 0; /* mark as invalid in case the cpuid call doesn't do anything */
       dump_one_cpuid(output, regs, 0x5);
@@ -286,6 +296,8 @@ static int dump_one_proc(hwloc_topology_t topo, hwloc_obj_t pu, const char *path
 	/* invalid, but it doesn't mean the next subleaf will be invalid */
         continue;
     }
+    if (i == 256)
+      fprintf(output, "# stopped at ecx=256 even if max=%u\n", max);
   }
 
   /* 0x19 = Key Locker Leaf on Intel ; Reserved on AMD */
@@ -302,12 +314,14 @@ static int dump_one_proc(hwloc_topology_t topo, hwloc_obj_t pu, const char *path
 
   /* 0x1b = PCONFIG Information on Intel ; Reserved on AMD */
   if (has_intel_pconfig && highest_cpuid >= 0x1b) {
-    for(i=0; ; i++) {
+    for(i=0; i<256; i++) {
       regs[0] = 0x1b; regs[2] = i;
       dump_one_cpuid(output, regs, 0x5);
       if (!(regs[0] & 0xfff))
 	break;
     }
+    if (i == 256)
+      fprintf(output, "# stopped at ecx=256\n");
   }
 
   /* 0x1c = Last Branch Records Information on Intel ; Reserved on AMD */
@@ -316,15 +330,31 @@ static int dump_one_proc(hwloc_topology_t topo, hwloc_obj_t pu, const char *path
     dump_one_cpuid(output, regs, 0x5);
   }
 
+  /* 0x1d = Tile Information ; Reserved on AMD */
+  if (highest_cpuid >= 0x1d) {
+    regs[0] = 0x1d; regs[2] = 0;
+    dump_one_cpuid(output, regs, 0x5);
+    regs[0] = 0x1d; regs[2] = 1;
+    dump_one_cpuid(output, regs, 0x5);
+  }
+
+  /* 0x1e = TMUL Information ; Reserved on AMD */
+  if (highest_cpuid >= 0x1e) {
+    regs[0] = 0x1e; regs[2] = 0;
+    dump_one_cpuid(output, regs, 0x5);
+  }
+
   /* 0x1f = V2 Extended Topology Enumeration on Intel ; Reserved on AMD */
   if (highest_cpuid >= 0x1f) {
-    for(i=0; ; i++) {
+    for(i=0; i<256; i++) {
       regs[0] = 0x1f; regs[2] = i;
       dump_one_cpuid(output, regs, 0x5);
       if (!(regs[2] & 0xff00))
 	/* invalid, no more levels */
 	break;
     }
+    if (i == 256)
+      fprintf(output, "# stopped at ecx=256\n");
   }
 
   /* 0x20 = Processor History Reset on Intel ; Reserved on AMD */
@@ -334,7 +364,7 @@ static int dump_one_proc(hwloc_topology_t topo, hwloc_obj_t pu, const char *path
     /* eax is number of subleaves but subleaves aren't documented?! */
   }
 
-  /* 0x21 is reserved on Intel */
+  /* 0x21 is reserved on Intel and AMD */
 
   if (highest_cpuid > 0x21) {
     static int reported = 0;
@@ -425,13 +455,15 @@ static int dump_one_proc(hwloc_topology_t topo, hwloc_obj_t pu, const char *path
 
   /* 0x8000001d = Cache properties on AMD ; Reserved on Intel */
   if (highest_ext_cpuid >= 0x8000001d) {
-    for(i=0; ; i++) {
+    for(i=0; i<256; i++) {
       regs[0] = 0x8000001d; regs[2] = i;
       dump_one_cpuid(output, regs, 0x5);
       if (!(regs[0] & 0x1f))
 	/* no such cache, no more cache */
 	break;
     }
+    if (i == 256)
+      fprintf(output, "# stopped at ecx=256\n");
   }
 
   /* 0x8000001e = Topoext on AMD ; Reserved on Intel */
@@ -466,7 +498,26 @@ static int dump_one_proc(hwloc_topology_t topo, hwloc_obj_t pu, const char *path
     dump_one_cpuid(output, regs, 0x1);
   }
 
-  if (highest_ext_cpuid > 0x80000022) {
+  /* 0x80000023 = Secure Multi-Key Encryption on AMD ; Reserved on Intel */
+  if (highest_ext_cpuid >= 0x80000023) {
+    regs[0] = 0x80000023;
+    dump_one_cpuid(output, regs, 0x1);
+  }
+
+  /* 0x80000026 = Extended CPU Topology on AMD ; Reserved on Intel */
+  if (highest_ext_cpuid >= 0x80000026) {
+    for(i=0; i<256; i++) {
+      regs[0] = 0x80000026; regs[2] = i;
+      dump_one_cpuid(output, regs, 0x5);
+      if (!(regs[1] & 0xffff))
+	/* nothing here, no more levels */
+	break;
+    }
+    if (i == 256)
+      fprintf(output, "# stopped at ecx=256\n");
+  }
+
+  if (highest_ext_cpuid > 0x80000026) {
     static int reported = 0;
     if (!reported)
       fprintf(stderr, "WARNING: Processor supports new extended CPUID leaves upto 0x%x\n", highest_ext_cpuid);
diff --git a/utils/lstopo/lstopo-no-graphics.1in b/utils/lstopo/lstopo-no-graphics.1in
index 33aec072..ff3b8820 100644
--- a/utils/lstopo/lstopo-no-graphics.1in
+++ b/utils/lstopo/lstopo-no-graphics.1in
@@ -1,5 +1,5 @@
 .\" -*- nroff -*-
-.\" Copyright © 2009-2022 Inria.  All rights reserved.
+.\" Copyright © 2009-2023 Inria.  All rights reserved.
 .\" Copyright © 2009-2010 Université of Bordeaux
 .\" Copyright © 2009-2010 Cisco Systems, Inc.  All rights reserved.
 .\" Copyright © 2020 Hewlett Packard Enterprise.  All rights reserved.
@@ -499,7 +499,7 @@ CPUs by their color; see the COLORS section, below.
 .SH OUTPUT FORMATS
 .
 .PP
-By default, if no output filename is specific, the output is sent
+By default, if no output filename is specified, the output is sent
 to a graphical window if possible in the current environment
 (DISPLAY environment variable set on Unix, etc.).
 Otherwise, a text summary is displayed in the console.
diff --git a/utils/lstopo/lstopo.c b/utils/lstopo/lstopo.c
index a946581c..99fff2f4 100644
--- a/utils/lstopo/lstopo.c
+++ b/utils/lstopo/lstopo.c
@@ -1,6 +1,6 @@
 /*
  * Copyright © 2009 CNRS
- * Copyright © 2009-2022 Inria.  All rights reserved.
+ * Copyright © 2009-2023 Inria.  All rights reserved.
  * Copyright © 2009-2012, 2015, 2017 Université Bordeaux
  * Copyright © 2009-2011 Cisco Systems, Inc.  All rights reserved.
  * Copyright © 2020 Hewlett Packard Enterprise.  All rights reserved.
@@ -1433,7 +1433,8 @@ main (int argc, char *argv[])
         opt = 1;
       } else {
 	if (filename) {
-	  fprintf (stderr, "Unrecognized option: %s\n", argv[0]);
+	  fprintf (stderr, "Unrecognized option `%s', cannot be used as output filename (`%s' already given).\n",
+                   argv[0], filename);
 	  goto out_usagefailure;
 	} else
 	  filename = argv[0];
diff --git a/utils/netloc/draw/visdist/vis.min.css b/utils/netloc/draw/visdist/vis.min.css
new file mode 100644
index 00000000..f345ff53
--- /dev/null
+++ b/utils/netloc/draw/visdist/vis.min.css
@@ -0,0 +1 @@
+.vis .overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10}.vis-active{box-shadow:0 0 10px #86d5f8}.vis [class*=span]{min-height:0;width:auto}div.vis-configuration{position:relative;display:block;float:left;font-size:12px}div.vis-configuration-wrapper{display:block;width:700px}div.vis-configuration-wrapper::after{clear:both;content:"";display:block}div.vis-configuration.vis-config-option-container{display:block;width:495px;background-color:#fff;border:2px solid #f7f8fa;border-radius:4px;margin-top:20px;left:10px;padding-left:5px}div.vis-configuration.vis-config-button{display:block;width:495px;height:25px;vertical-align:middle;line-height:25px;background-color:#f7f8fa;border:2px solid #ceced0;border-radius:4px;margin-top:20px;left:10px;padding-left:5px;cursor:pointer;margin-bottom:30px}div.vis-configuration.vis-config-button.hover{background-color:#4588e6;border:2px solid #214373;color:#fff}div.vis-configuration.vis-config-item{display:block;float:left;width:495px;height:25px;vertical-align:middle;line-height:25px}div.vis-configuration.vis-config-item.vis-config-s2{left:10px;background-color:#f7f8fa;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-item.vis-config-s3{left:20px;background-color:#e4e9f0;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-item.vis-config-s4{left:30px;background-color:#cfd8e6;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-header{font-size:18px;font-weight:700}div.vis-configuration.vis-config-label{width:120px;height:25px;line-height:25px}div.vis-configuration.vis-config-label.vis-config-s3{width:110px}div.vis-configuration.vis-config-label.vis-config-s4{width:100px}div.vis-configuration.vis-config-colorBlock{top:1px;width:30px;height:19px;border:1px solid #444;border-radius:2px;padding:0;margin:0;cursor:pointer}input.vis-configuration.vis-config-checkbox{left:-5px}input.vis-configuration.vis-config-rangeinput{position:relative;top:-5px;width:60px;padding:1px;margin:0;pointer-events:none}input.vis-configuration.vis-config-range{-webkit-appearance:none;border:0 solid #fff;background-color:rgba(0,0,0,0);width:300px;height:20px}input.vis-configuration.vis-config-range::-webkit-slider-runnable-track{width:300px;height:5px;background:#dedede;background:-moz-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#dedede),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-o-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:linear-gradient(to bottom,#dedede 0,#c8c8c8 99%);border:1px solid #999;box-shadow:#aaa 0 0 3px 0;border-radius:3px}input.vis-configuration.vis-config-range::-webkit-slider-thumb{-webkit-appearance:none;border:1px solid #14334b;height:17px;width:17px;border-radius:50%;background:#3876c2;background:-moz-linear-gradient(top,#3876c2 0,#385380 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#3876c2),color-stop(100%,#385380));background:-webkit-linear-gradient(top,#3876c2 0,#385380 100%);background:-o-linear-gradient(top,#3876c2 0,#385380 100%);background:-ms-linear-gradient(top,#3876c2 0,#385380 100%);background:linear-gradient(to bottom,#3876c2 0,#385380 100%);box-shadow:#111927 0 0 1px 0;margin-top:-7px}input.vis-configuration.vis-config-range:focus{outline:0}input.vis-configuration.vis-config-range:focus::-webkit-slider-runnable-track{background:#9d9d9d;background:-moz-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#9d9d9d),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-o-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:linear-gradient(to bottom,#9d9d9d 0,#c8c8c8 99%)}input.vis-configuration.vis-config-range::-moz-range-track{width:300px;height:10px;background:#dedede;background:-moz-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#dedede),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-o-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:linear-gradient(to bottom,#dedede 0,#c8c8c8 99%);border:1px solid #999;box-shadow:#aaa 0 0 3px 0;border-radius:3px}input.vis-configuration.vis-config-range::-moz-range-thumb{border:none;height:16px;width:16px;border-radius:50%;background:#385380}input.vis-configuration.vis-config-range:-moz-focusring{outline:1px solid #fff;outline-offset:-1px}input.vis-configuration.vis-config-range::-ms-track{width:300px;height:5px;background:0 0;border-color:transparent;border-width:6px 0;color:transparent}input.vis-configuration.vis-config-range::-ms-fill-lower{background:#777;border-radius:10px}input.vis-configuration.vis-config-range::-ms-fill-upper{background:#ddd;border-radius:10px}input.vis-configuration.vis-config-range::-ms-thumb{border:none;height:16px;width:16px;border-radius:50%;background:#385380}input.vis-configuration.vis-config-range:focus::-ms-fill-lower{background:#888}input.vis-configuration.vis-config-range:focus::-ms-fill-upper{background:#ccc}.vis-configuration-popup{position:absolute;background:rgba(57,76,89,.85);border:2px solid #f2faff;line-height:30px;height:30px;width:150px;text-align:center;color:#fff;font-size:14px;border-radius:4px;-webkit-transition:opacity .3s ease-in-out;-moz-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out}.vis-configuration-popup:after,.vis-configuration-popup:before{left:100%;top:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.vis-configuration-popup:after{border-color:rgba(136,183,213,0);border-left-color:rgba(57,76,89,.85);border-width:8px;margin-top:-8px}.vis-configuration-popup:before{border-color:rgba(194,225,245,0);border-left-color:#f2faff;border-width:12px;margin-top:-12px}div.vis-tooltip{position:absolute;visibility:hidden;padding:5px;white-space:nowrap;font-family:verdana;font-size:14px;color:#000;background-color:#f5f4ed;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;border:1px solid #808074;box-shadow:3px 3px 10px rgba(0,0,0,.2);pointer-events:none;z-index:5}div.vis-color-picker{position:absolute;top:0;left:30px;margin-top:-140px;margin-left:30px;width:310px;height:444px;z-index:1;padding:10px;border-radius:15px;background-color:#fff;display:none;box-shadow:rgba(0,0,0,.5) 0 0 10px 0}div.vis-color-picker div.vis-arrow{position:absolute;top:147px;left:5px}div.vis-color-picker div.vis-arrow::after,div.vis-color-picker div.vis-arrow::before{right:100%;top:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}div.vis-color-picker div.vis-arrow:after{border-color:rgba(255,255,255,0);border-right-color:#fff;border-width:30px;margin-top:-30px}div.vis-color-picker div.vis-color{position:absolute;width:289px;height:289px;cursor:pointer}div.vis-color-picker div.vis-brightness{position:absolute;top:313px}div.vis-color-picker div.vis-opacity{position:absolute;top:350px}div.vis-color-picker div.vis-selector{position:absolute;top:137px;left:137px;width:15px;height:15px;border-radius:15px;border:1px solid #fff;background:#4c4c4c;background:-moz-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#4c4c4c),color-stop(12%,#595959),color-stop(25%,#666),color-stop(39%,#474747),color-stop(50%,#2c2c2c),color-stop(51%,#000),color-stop(60%,#111),color-stop(76%,#2b2b2b),color-stop(91%,#1c1c1c),color-stop(100%,#131313));background:-webkit-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-o-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-ms-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:linear-gradient(to bottom,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%)}div.vis-color-picker div.vis-new-color{position:absolute;width:140px;height:20px;border:1px solid rgba(0,0,0,.1);border-radius:5px;top:380px;left:159px;text-align:right;padding-right:2px;font-size:10px;color:rgba(0,0,0,.4);vertical-align:middle;line-height:20px}div.vis-color-picker div.vis-initial-color{position:absolute;width:140px;height:20px;border:1px solid rgba(0,0,0,.1);border-radius:5px;top:380px;left:10px;text-align:left;padding-left:2px;font-size:10px;color:rgba(0,0,0,.4);vertical-align:middle;line-height:20px}div.vis-color-picker div.vis-label{position:absolute;width:300px;left:10px}div.vis-color-picker div.vis-label.vis-brightness{top:300px}div.vis-color-picker div.vis-label.vis-opacity{top:338px}div.vis-color-picker div.vis-button{position:absolute;width:68px;height:25px;border-radius:10px;vertical-align:middle;text-align:center;line-height:25px;top:410px;border:2px solid #d9d9d9;background-color:#f7f7f7;cursor:pointer}div.vis-color-picker div.vis-button.vis-cancel{left:5px}div.vis-color-picker div.vis-button.vis-load{left:82px}div.vis-color-picker div.vis-button.vis-apply{left:159px}div.vis-color-picker div.vis-button.vis-save{left:236px}div.vis-color-picker input.vis-range{width:290px;height:20px}div.vis-network div.vis-manipulation{box-sizing:content-box;border-width:0;border-bottom:1px;border-style:solid;border-color:#d6d9d8;background:#fff;background:-moz-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(48%,#fcfcfc),color-stop(50%,#fafafa),color-stop(100%,#fcfcfc));background:-webkit-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-o-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-ms-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:linear-gradient(to bottom,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);padding-top:4px;position:absolute;left:0;top:0;width:100%;height:28px}div.vis-network div.vis-edit-mode{position:absolute;left:0;top:5px;height:30px}div.vis-network div.vis-close{position:absolute;right:0;top:0;width:30px;height:30px;background-position:20px 3px;background-repeat:no-repeat;background-image:url(img/network/cross.png);cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div.vis-network div.vis-close:hover{opacity:.6}div.vis-network div.vis-edit-mode div.vis-button,div.vis-network div.vis-manipulation div.vis-button{float:left;font-family:verdana;font-size:12px;-moz-border-radius:15px;border-radius:15px;display:inline-block;background-position:0 0;background-repeat:no-repeat;height:24px;margin-left:10px;cursor:pointer;padding:0 8px 0 8px;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div.vis-network div.vis-manipulation div.vis-button:hover{box-shadow:1px 1px 8px rgba(0,0,0,.2)}div.vis-network div.vis-manipulation div.vis-button:active{box-shadow:1px 1px 8px rgba(0,0,0,.5)}div.vis-network div.vis-manipulation div.vis-button.vis-back{background-image:url(img/network/backIcon.png)}div.vis-network div.vis-manipulation div.vis-button.vis-none:hover{box-shadow:1px 1px 8px transparent;cursor:default}div.vis-network div.vis-manipulation div.vis-button.vis-none:active{box-shadow:1px 1px 8px transparent}div.vis-network div.vis-manipulation div.vis-button.vis-none{padding:0}div.vis-network div.vis-manipulation div.notification{margin:2px;font-weight:700}div.vis-network div.vis-manipulation div.vis-button.vis-add{background-image:url(img/network/addNodeIcon.png)}div.vis-network div.vis-edit-mode div.vis-button.vis-edit,div.vis-network div.vis-manipulation div.vis-button.vis-edit{background-image:url(img/network/editIcon.png)}div.vis-network div.vis-edit-mode div.vis-button.vis-edit.vis-edit-mode{background-color:#fcfcfc;border:1px solid #ccc}div.vis-network div.vis-manipulation div.vis-button.vis-connect{background-image:url(img/network/connectIcon.png)}div.vis-network div.vis-manipulation div.vis-button.vis-delete{background-image:url(img/network/deleteIcon.png)}div.vis-network div.vis-edit-mode div.vis-label,div.vis-network div.vis-manipulation div.vis-label{margin:0 0 0 23px;line-height:25px}div.vis-network div.vis-manipulation div.vis-separator-line{float:left;display:inline-block;width:1px;height:21px;background-color:#bdbdbd;margin:0 7px 0 15px}div.vis-network div.vis-navigation div.vis-button{width:34px;height:34px;-moz-border-radius:17px;border-radius:17px;position:absolute;display:inline-block;background-position:2px 2px;background-repeat:no-repeat;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div.vis-network div.vis-navigation div.vis-button:hover{box-shadow:0 0 3px 3px rgba(56,207,21,.3)}div.vis-network div.vis-navigation div.vis-button:active{box-shadow:0 0 1px 3px rgba(56,207,21,.95)}div.vis-network div.vis-navigation div.vis-button.vis-up{background-image:url(img/network/upArrow.png);bottom:50px;left:55px}div.vis-network div.vis-navigation div.vis-button.vis-down{background-image:url(img/network/downArrow.png);bottom:10px;left:55px}div.vis-network div.vis-navigation div.vis-button.vis-left{background-image:url(img/network/leftArrow.png);bottom:10px;left:15px}div.vis-network div.vis-navigation div.vis-button.vis-right{background-image:url(img/network/rightArrow.png);bottom:10px;left:95px}div.vis-network div.vis-navigation div.vis-button.vis-zoomIn{background-image:url(img/network/plus.png);bottom:10px;right:15px}div.vis-network div.vis-navigation div.vis-button.vis-zoomOut{background-image:url(img/network/minus.png);bottom:10px;right:55px}div.vis-network div.vis-navigation div.vis-button.vis-zoomExtends{background-image:url(img/network/zoomExtends.png);bottom:50px;right:15px}.vis-current-time{background-color:#ff7f6e;width:2px;z-index:1;pointer-events:none}.vis-rolling-mode-btn{height:40px;width:40px;position:absolute;top:7px;right:20px;border-radius:50%;font-size:28px;cursor:pointer;opacity:.8;color:#fff;font-weight:700;text-align:center;background:#3876c2}.vis-rolling-mode-btn:before{content:"\26F6"}.vis-rolling-mode-btn:hover{opacity:1}.vis-custom-time{background-color:#6e94ff;width:2px;cursor:move;z-index:1}.vis-panel.vis-background.vis-horizontal .vis-grid.vis-horizontal{position:absolute;width:100%;height:0;border-bottom:1px solid}.vis-panel.vis-background.vis-horizontal .vis-grid.vis-minor{border-color:#e5e5e5}.vis-panel.vis-background.vis-horizontal .vis-grid.vis-major{border-color:#bfbfbf}.vis-data-axis .vis-y-axis.vis-major{width:100%;position:absolute;color:#4d4d4d;white-space:nowrap}.vis-data-axis .vis-y-axis.vis-major.vis-measure{padding:0;margin:0;border:0;visibility:hidden;width:auto}.vis-data-axis .vis-y-axis.vis-minor{position:absolute;width:100%;color:#bebebe;white-space:nowrap}.vis-data-axis .vis-y-axis.vis-minor.vis-measure{padding:0;margin:0;border:0;visibility:hidden;width:auto}.vis-data-axis .vis-y-axis.vis-title{position:absolute;color:#4d4d4d;white-space:nowrap;bottom:20px;text-align:center}.vis-data-axis .vis-y-axis.vis-title.vis-measure{padding:0;margin:0;visibility:hidden;width:auto}.vis-data-axis .vis-y-axis.vis-title.vis-left{bottom:0;-webkit-transform-origin:left top;-moz-transform-origin:left top;-ms-transform-origin:left top;-o-transform-origin:left top;transform-origin:left bottom;-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.vis-data-axis .vis-y-axis.vis-title.vis-right{bottom:0;-webkit-transform-origin:right bottom;-moz-transform-origin:right bottom;-ms-transform-origin:right bottom;-o-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.vis-legend{background-color:rgba(247,252,255,.65);padding:5px;border:1px solid #b3b3b3;box-shadow:2px 2px 10px rgba(154,154,154,.55)}.vis-legend-text{white-space:nowrap;display:inline-block}.vis-item{position:absolute;color:#1a1a1a;border-color:#97b0f8;border-width:1px;background-color:#d5ddf6;display:inline-block;z-index:1}.vis-item.vis-selected{border-color:#ffc200;background-color:#fff785;z-index:2}.vis-editable.vis-selected{cursor:move}.vis-item.vis-point.vis-selected{background-color:#fff785}.vis-item.vis-box{text-align:center;border-style:solid;border-radius:2px}.vis-item.vis-point{background:0 0}.vis-item.vis-dot{position:absolute;padding:0;border-width:4px;border-style:solid;border-radius:4px}.vis-item.vis-range{border-style:solid;border-radius:2px;box-sizing:border-box}.vis-item.vis-background{border:none;background-color:rgba(213,221,246,.4);box-sizing:border-box;padding:0;margin:0}.vis-item .vis-item-overflow{position:relative;width:100%;height:100%;padding:0;margin:0;overflow:hidden}.vis-item-visible-frame{white-space:nowrap}.vis-item.vis-range .vis-item-content{position:relative;display:inline-block}.vis-item.vis-background .vis-item-content{position:absolute;display:inline-block}.vis-item.vis-line{padding:0;position:absolute;width:0;border-left-width:1px;border-left-style:solid}.vis-item .vis-item-content{white-space:nowrap;box-sizing:border-box;padding:5px}.vis-item .vis-onUpdateTime-tooltip{position:absolute;background:#4f81bd;color:#fff;width:200px;text-align:center;white-space:nowrap;padding:5px;border-radius:1px;transition:.4s;-o-transition:.4s;-moz-transition:.4s;-webkit-transition:.4s}.vis-item .vis-delete,.vis-item .vis-delete-rtl{position:absolute;top:0;width:24px;height:24px;box-sizing:border-box;padding:0 5px;cursor:pointer;-webkit-transition:background .2s linear;-moz-transition:background .2s linear;-ms-transition:background .2s linear;-o-transition:background .2s linear;transition:background .2s linear}.vis-item .vis-delete{right:-24px}.vis-item .vis-delete-rtl{left:-24px}.vis-item .vis-delete-rtl:after,.vis-item .vis-delete:after{content:"\00D7";color:red;font-family:arial,sans-serif;font-size:22px;font-weight:700;-webkit-transition:color .2s linear;-moz-transition:color .2s linear;-ms-transition:color .2s linear;-o-transition:color .2s linear;transition:color .2s linear}.vis-item .vis-delete-rtl:hover,.vis-item .vis-delete:hover{background:red}.vis-item .vis-delete-rtl:hover:after,.vis-item .vis-delete:hover:after{color:#fff}.vis-item .vis-drag-center{position:absolute;width:100%;height:100%;top:0;left:0;cursor:move}.vis-item.vis-range .vis-drag-left{position:absolute;width:24px;max-width:20%;min-width:2px;height:100%;top:0;left:-4px;cursor:w-resize}.vis-item.vis-range .vis-drag-right{position:absolute;width:24px;max-width:20%;min-width:2px;height:100%;top:0;right:-4px;cursor:e-resize}.vis-range.vis-item.vis-readonly .vis-drag-left,.vis-range.vis-item.vis-readonly .vis-drag-right{cursor:auto}.vis-itemset{position:relative;padding:0;margin:0;box-sizing:border-box}.vis-itemset .vis-background,.vis-itemset .vis-foreground{position:absolute;width:100%;height:100%;overflow:visible}.vis-axis{position:absolute;width:100%;height:0;left:0;z-index:1}.vis-foreground .vis-group{position:relative;box-sizing:border-box;border-bottom:1px solid #bfbfbf}.vis-foreground .vis-group:last-child{border-bottom:none}.vis-nesting-group{cursor:pointer}.vis-nested-group{background:#f5f5f5}.vis-label.vis-nesting-group.expanded:before{content:"\25BC"}.vis-label.vis-nesting-group.collapsed-rtl:before{content:"\25C0"}.vis-label.vis-nesting-group.collapsed:before{content:"\25B6"}.vis-overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10}.vis-labelset{position:relative;overflow:hidden;box-sizing:border-box}.vis-labelset .vis-label{position:relative;left:0;top:0;width:100%;color:#4d4d4d;box-sizing:border-box}.vis-labelset .vis-label{border-bottom:1px solid #bfbfbf}.vis-labelset .vis-label.draggable{cursor:pointer}.vis-labelset .vis-label:last-child{border-bottom:none}.vis-labelset .vis-label .vis-inner{display:inline-block;padding:5px}.vis-labelset .vis-label .vis-inner.vis-hidden{padding:0}.vis-panel{position:absolute;padding:0;margin:0;box-sizing:border-box}.vis-panel.vis-bottom,.vis-panel.vis-center,.vis-panel.vis-left,.vis-panel.vis-right,.vis-panel.vis-top{border:1px #bfbfbf}.vis-panel.vis-center,.vis-panel.vis-left,.vis-panel.vis-right{border-top-style:solid;border-bottom-style:solid;overflow:hidden}.vis-left.vis-panel.vis-vertical-scroll,.vis-right.vis-panel.vis-vertical-scroll{height:100%;overflow-x:hidden;overflow-y:scroll}.vis-left.vis-panel.vis-vertical-scroll{direction:rtl}.vis-left.vis-panel.vis-vertical-scroll .vis-content{direction:ltr}.vis-right.vis-panel.vis-vertical-scroll{direction:ltr}.vis-right.vis-panel.vis-vertical-scroll .vis-content{direction:rtl}.vis-panel.vis-bottom,.vis-panel.vis-center,.vis-panel.vis-top{border-left-style:solid;border-right-style:solid}.vis-background{overflow:hidden}.vis-panel>.vis-content{position:relative}.vis-panel .vis-shadow{position:absolute;width:100%;height:1px;box-shadow:0 0 10px rgba(0,0,0,.8)}.vis-panel .vis-shadow.vis-top{top:-1px;left:0}.vis-panel .vis-shadow.vis-bottom{bottom:-1px;left:0}.vis-graph-group0{fill:#4f81bd;fill-opacity:0;stroke-width:2px;stroke:#4f81bd}.vis-graph-group1{fill:#f79646;fill-opacity:0;stroke-width:2px;stroke:#f79646}.vis-graph-group2{fill:#8c51cf;fill-opacity:0;stroke-width:2px;stroke:#8c51cf}.vis-graph-group3{fill:#75c841;fill-opacity:0;stroke-width:2px;stroke:#75c841}.vis-graph-group4{fill:#ff0100;fill-opacity:0;stroke-width:2px;stroke:#ff0100}.vis-graph-group5{fill:#37d8e6;fill-opacity:0;stroke-width:2px;stroke:#37d8e6}.vis-graph-group6{fill:#042662;fill-opacity:0;stroke-width:2px;stroke:#042662}.vis-graph-group7{fill:#00ff26;fill-opacity:0;stroke-width:2px;stroke:#00ff26}.vis-graph-group8{fill:#f0f;fill-opacity:0;stroke-width:2px;stroke:#f0f}.vis-graph-group9{fill:#8f3938;fill-opacity:0;stroke-width:2px;stroke:#8f3938}.vis-timeline .vis-fill{fill-opacity:.1;stroke:none}.vis-timeline .vis-bar{fill-opacity:.5;stroke-width:1px}.vis-timeline .vis-point{stroke-width:2px;fill-opacity:1}.vis-timeline .vis-legend-background{stroke-width:1px;fill-opacity:.9;fill:#fff;stroke:#c2c2c2}.vis-timeline .vis-outline{stroke-width:1px;fill-opacity:1;fill:#fff;stroke:#e5e5e5}.vis-timeline .vis-icon-fill{fill-opacity:.3;stroke:none}.vis-time-axis{position:relative;overflow:hidden}.vis-time-axis.vis-foreground{top:0;left:0;width:100%}.vis-time-axis.vis-background{position:absolute;top:0;left:0;width:100%;height:100%}.vis-time-axis .vis-text{position:absolute;color:#4d4d4d;padding:3px;overflow:hidden;box-sizing:border-box;white-space:nowrap}.vis-time-axis .vis-text.vis-measure{position:absolute;padding-left:0;padding-right:0;margin-left:0;margin-right:0;visibility:hidden}.vis-time-axis .vis-grid.vis-vertical{position:absolute;border-left:1px solid}.vis-time-axis .vis-grid.vis-vertical-rtl{position:absolute;border-right:1px solid}.vis-time-axis .vis-grid.vis-minor{border-color:#e5e5e5}.vis-time-axis .vis-grid.vis-major{border-color:#bfbfbf}.vis-timeline{position:relative;border:1px solid #bfbfbf;overflow:hidden;padding:0;margin:0;box-sizing:border-box}
\ No newline at end of file
diff --git a/utils/netloc/draw/visdist/vis.min.js b/utils/netloc/draw/visdist/vis.min.js
new file mode 100644
index 00000000..1136c8a1
--- /dev/null
+++ b/utils/netloc/draw/visdist/vis.min.js
@@ -0,0 +1,47 @@
+/**
+ * vis.js
+ * https://github.com/almende/vis
+ *
+ * A dynamic, browser-based visualization library.
+ *
+ * @version 4.21.0
+ * @date    2017-10-12
+ *
+ * @license
+ * Copyright (C) 2011-2017 Almende B.V, http://almende.com
+ *
+ * Vis.js is dual licensed under both
+ *
+ * * The Apache 2.0 License
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * and
+ *
+ * * The MIT License
+ *   http://opensource.org/licenses/MIT
+ *
+ * Vis.js may be distributed under either license.
+ */
+"use strict";!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.vis=e():t.vis=e()}(this,function(){return function(t){function e(o){if(i[o])return i[o].exports;var n=i[o]={i:o,l:!1,exports:{}};return t[o].call(n.exports,n,n.exports,e),n.l=!0,n.exports}var i={};return e.m=t,e.c=i,e.d=function(t,i,o){e.o(t,i)||Object.defineProperty(t,i,{configurable:!1,enumerable:!0,get:o})},e.n=function(t){var i=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(i,"a",i),i},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=123)}([function(t,e,i){e.__esModule=!0,e.default=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}},function(t,e,i){e.__esModule=!0;var o=i(169),n=function(t){return t&&t.__esModule?t:{default:t}}(o);e.default=function(){function t(t,e){for(var i=0;i<e.length;i++){var o=e[i];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),(0,n.default)(t,o.key,o)}}return function(e,i,o){return i&&t(e.prototype,i),o&&t(e,o),e}}()},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(t,e,i,o){var n=!1;!0===o&&(n=null===e[i]&&void 0!==t[i]),n?delete t[i]:t[i]=e[i]}var s=i(77),r=o(s),a=i(29),h=o(a),d=i(8),l=o(d),u=i(6),c=o(u),p=i(9),f=i(157);e.isNumber=function(t){return t instanceof Number||"number"==typeof t},e.recursiveDOMDelete=function(t){if(t)for(;!0===t.hasChildNodes();)e.recursiveDOMDelete(t.firstChild),t.removeChild(t.firstChild)},e.giveRange=function(t,e,i,o){if(e==t)return.5;var n=1/(e-t);return Math.max(0,(o-t)*n)},e.isString=function(t){return t instanceof String||"string"==typeof t},e.isDate=function(t){if(t instanceof Date)return!0;if(e.isString(t)){if(m.exec(t))return!0;if(!isNaN(Date.parse(t)))return!0}return!1},e.randomUUID=function(){return f.v4()},e.assignAllKeys=function(t,e){for(var i in t)t.hasOwnProperty(i)&&"object"!==(0,c.default)(t[i])&&(t[i]=e)},e.fillIfDefined=function(t,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];for(var s in t)void 0!==i[s]&&(null===i[s]||"object"!==(0,c.default)(i[s])?n(t,i,s,o):"object"===(0,c.default)(t[s])&&e.fillIfDefined(t[s],i[s],o))},e.extend=function(t,e){for(var i=1;i<arguments.length;i++){var o=arguments[i];for(var n in o)o.hasOwnProperty(n)&&(t[n]=o[n])}return t},e.selectiveExtend=function(t,e,i){if(!Array.isArray(t))throw new Error("Array with property names expected as first argument");for(var o=2;o<arguments.length;o++)for(var n=arguments[o],s=0;s<t.length;s++){var r=t[s];n&&n.hasOwnProperty(r)&&(e[r]=n[r])}return e},e.selectiveDeepExtend=function(t,i,o){var s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(o))throw new TypeError("Arrays are not supported by deepExtend");for(var r=0;r<t.length;r++){var a=t[r];if(o.hasOwnProperty(a))if(o[a]&&o[a].constructor===Object)void 0===i[a]&&(i[a]={}),i[a].constructor===Object?e.deepExtend(i[a],o[a],!1,s):n(i,o,a,s);else{if(Array.isArray(o[a]))throw new TypeError("Arrays are not supported by deepExtend");n(i,o,a,s)}}return i},e.selectiveNotDeepExtend=function(t,i,o){var s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(Array.isArray(o))throw new TypeError("Arrays are not supported by deepExtend");for(var r in o)if(o.hasOwnProperty(r)&&-1===t.indexOf(r))if(o[r]&&o[r].constructor===Object)void 0===i[r]&&(i[r]={}),i[r].constructor===Object?e.deepExtend(i[r],o[r]):n(i,o,r,s);else if(Array.isArray(o[r])){i[r]=[];for(var a=0;a<o[r].length;a++)i[r].push(o[r][a])}else n(i,o,r,s);return i},e.deepExtend=function(t,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];for(var r in i)if(i.hasOwnProperty(r)||!0===o)if(i[r]&&i[r].constructor===Object)void 0===t[r]&&(t[r]={}),t[r].constructor===Object?e.deepExtend(t[r],i[r],o):n(t,i,r,s);else if(Array.isArray(i[r])){t[r]=[];for(var a=0;a<i[r].length;a++)t[r].push(i[r][a])}else n(t,i,r,s);return t},e.equalArray=function(t,e){if(t.length!=e.length)return!1;for(var i=0,o=t.length;i<o;i++)if(t[i]!=e[i])return!1;return!0},e.convert=function(t,i){var o;if(void 0!==t){if(null===t)return null;if(!i)return t;if("string"!=typeof i&&!(i instanceof String))throw new Error("Type must be a string");switch(i){case"boolean":case"Boolean":return Boolean(t);case"number":case"Number":return e.isString(t)&&!isNaN(Date.parse(t))?p(t).valueOf():Number(t.valueOf());case"string":case"String":return String(t);case"Date":if(e.isNumber(t))return new Date(t);if(t instanceof Date)return new Date(t.valueOf());if(p.isMoment(t))return new Date(t.valueOf());if(e.isString(t))return o=m.exec(t),o?new Date(Number(o[1])):p(new Date(t)).toDate();throw new Error("Cannot convert object of type "+e.getType(t)+" to type Date");case"Moment":if(e.isNumber(t))return p(t);if(t instanceof Date)return p(t.valueOf());if(p.isMoment(t))return p(t);if(e.isString(t))return o=m.exec(t),p(o?Number(o[1]):t);throw new Error("Cannot convert object of type "+e.getType(t)+" to type Date");case"ISODate":if(e.isNumber(t))return new Date(t);if(t instanceof Date)return t.toISOString();if(p.isMoment(t))return t.toDate().toISOString();if(e.isString(t))return o=m.exec(t),o?new Date(Number(o[1])).toISOString():p(t).format();throw new Error("Cannot convert object of type "+e.getType(t)+" to type ISODate");case"ASPDate":if(e.isNumber(t))return"/Date("+t+")/";if(t instanceof Date)return"/Date("+t.valueOf()+")/";if(e.isString(t)){o=m.exec(t);return"/Date("+(o?new Date(Number(o[1])).valueOf():new Date(t).valueOf())+")/"}throw new Error("Cannot convert object of type "+e.getType(t)+" to type ASPDate");default:throw new Error('Unknown type "'+i+'"')}}};var m=/^\/?Date\((\-?\d+)/i;e.getType=function(t){var e=void 0===t?"undefined":(0,c.default)(t);return"object"==e?null===t?"null":t instanceof Boolean?"Boolean":t instanceof Number?"Number":t instanceof String?"String":Array.isArray(t)?"Array":t instanceof Date?"Date":"Object":"number"==e?"Number":"boolean"==e?"Boolean":"string"==e?"String":void 0===e?"undefined":e},e.copyAndExtendArray=function(t,e){for(var i=[],o=0;o<t.length;o++)i.push(t[o]);return i.push(e),i},e.copyArray=function(t){for(var e=[],i=0;i<t.length;i++)e.push(t[i]);return e},e.getAbsoluteLeft=function(t){return t.getBoundingClientRect().left},e.getAbsoluteRight=function(t){return t.getBoundingClientRect().right},e.getAbsoluteTop=function(t){return t.getBoundingClientRect().top},e.addClassName=function(t,e){var i=t.className.split(" "),o=e.split(" ");i=i.concat(o.filter(function(t){return i.indexOf(t)<0})),t.className=i.join(" ")},e.removeClassName=function(t,e){var i=t.className.split(" "),o=e.split(" ");i=i.filter(function(t){return o.indexOf(t)<0}),t.className=i.join(" ")},e.forEach=function(t,e){var i,o;if(Array.isArray(t))for(i=0,o=t.length;i<o;i++)e(t[i],i,t);else for(i in t)t.hasOwnProperty(i)&&e(t[i],i,t)},e.toArray=function(t){var e=[];for(var i in t)t.hasOwnProperty(i)&&e.push(t[i]);return e},e.updateProperty=function(t,e,i){return t[e]!==i&&(t[e]=i,!0)},e.throttle=function(t){var e=!1;return function(){e||(e=!0,requestAnimationFrame(function(){e=!1,t()}))}},e.addEventListener=function(t,e,i,o){t.addEventListener?(void 0===o&&(o=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.addEventListener(e,i,o)):t.attachEvent("on"+e,i)},e.removeEventListener=function(t,e,i,o){t.removeEventListener?(void 0===o&&(o=!1),"mousewheel"===e&&navigator.userAgent.indexOf("Firefox")>=0&&(e="DOMMouseScroll"),t.removeEventListener(e,i,o)):t.detachEvent("on"+e,i)},e.preventDefault=function(t){t||(t=window.event),t.preventDefault?t.preventDefault():t.returnValue=!1},e.getTarget=function(t){t||(t=window.event);var e;return t.target?e=t.target:t.srcElement&&(e=t.srcElement),void 0!=e.nodeType&&3==e.nodeType&&(e=e.parentNode),e},e.hasParent=function(t,e){for(var i=t;i;){if(i===e)return!0;i=i.parentNode}return!1},e.option={},e.option.asBoolean=function(t,e){return"function"==typeof t&&(t=t()),null!=t?0!=t:e||null},e.option.asNumber=function(t,e){return"function"==typeof t&&(t=t()),null!=t?Number(t)||e||null:e||null},e.option.asString=function(t,e){return"function"==typeof t&&(t=t()),null!=t?String(t):e||null},e.option.asSize=function(t,i){return"function"==typeof t&&(t=t()),e.isString(t)?t:e.isNumber(t)?t+"px":i||null},e.option.asElement=function(t,e){return"function"==typeof t&&(t=t()),t||e||null},e.hexToRGB=function(t){var e=/^#?([a-f\d])([a-f\d])([a-f\d])$/i;t=t.replace(e,function(t,e,i,o){return e+e+i+i+o+o});var i=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return i?{r:parseInt(i[1],16),g:parseInt(i[2],16),b:parseInt(i[3],16)}:null},e.overrideOpacity=function(t,i){var o;return-1!=t.indexOf("rgba")?t:-1!=t.indexOf("rgb")?(o=t.substr(t.indexOf("(")+1).replace(")","").split(","),"rgba("+o[0]+","+o[1]+","+o[2]+","+i+")"):(o=e.hexToRGB(t),null==o?t:"rgba("+o.r+","+o.g+","+o.b+","+i+")")},e.RGBToHex=function(t,e,i){return"#"+((1<<24)+(t<<16)+(e<<8)+i).toString(16).slice(1)},e.parseColor=function(t){var i;if(!0===e.isString(t)){if(!0===e.isValidRGB(t)){var o=t.substr(4).substr(0,t.length-5).split(",").map(function(t){return parseInt(t)});t=e.RGBToHex(o[0],o[1],o[2])}if(!0===e.isValidHex(t)){var n=e.hexToHSV(t),s={h:n.h,s:.8*n.s,v:Math.min(1,1.02*n.v)},r={h:n.h,s:Math.min(1,1.25*n.s),v:.8*n.v},a=e.HSVToHex(r.h,r.s,r.v),h=e.HSVToHex(s.h,s.s,s.v);i={background:t,border:a,highlight:{background:h,border:a},hover:{background:h,border:a}}}else i={background:t,border:t,highlight:{background:t,border:t},hover:{background:t,border:t}}}else i={},i.background=t.background||void 0,i.border=t.border||void 0,e.isString(t.highlight)?i.highlight={border:t.highlight,background:t.highlight}:(i.highlight={},i.highlight.background=t.highlight&&t.highlight.background||void 0,i.highlight.border=t.highlight&&t.highlight.border||void 0),e.isString(t.hover)?i.hover={border:t.hover,background:t.hover}:(i.hover={},i.hover.background=t.hover&&t.hover.background||void 0,i.hover.border=t.hover&&t.hover.border||void 0);return i},e.RGBToHSV=function(t,e,i){t/=255,e/=255,i/=255;var o=Math.min(t,Math.min(e,i)),n=Math.max(t,Math.max(e,i));if(o==n)return{h:0,s:0,v:o};var s=t==o?e-i:i==o?t-e:i-t;return{h:60*((t==o?3:i==o?1:5)-s/(n-o))/360,s:(n-o)/n,v:n}};var v={split:function(t){var e={};return t.split(";").forEach(function(t){if(""!=t.trim()){var i=t.split(":"),o=i[0].trim(),n=i[1].trim();e[o]=n}}),e},join:function(t){return(0,l.default)(t).map(function(e){return e+": "+t[e]}).join("; ")}};e.addCssText=function(t,i){var o=v.split(t.style.cssText),n=v.split(i),s=e.extend(o,n);t.style.cssText=v.join(s)},e.removeCssText=function(t,e){var i=v.split(t.style.cssText),o=v.split(e);for(var n in o)o.hasOwnProperty(n)&&delete i[n];t.style.cssText=v.join(i)},e.HSVToRGB=function(t,e,i){var o,n,s,r=Math.floor(6*t),a=6*t-r,h=i*(1-e),d=i*(1-a*e),l=i*(1-(1-a)*e);switch(r%6){case 0:o=i,n=l,s=h;break;case 1:o=d,n=i,s=h;break;case 2:o=h,n=i,s=l;break;case 3:o=h,n=d,s=i;break;case 4:o=l,n=h,s=i;break;case 5:o=i,n=h,s=d}return{r:Math.floor(255*o),g:Math.floor(255*n),b:Math.floor(255*s)}},e.HSVToHex=function(t,i,o){var n=e.HSVToRGB(t,i,o);return e.RGBToHex(n.r,n.g,n.b)},e.hexToHSV=function(t){var i=e.hexToRGB(t);return e.RGBToHSV(i.r,i.g,i.b)},e.isValidHex=function(t){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(t)},e.isValidRGB=function(t){return t=t.replace(" ",""),/rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)/i.test(t)},e.isValidRGBA=function(t){return t=t.replace(" ",""),/rgba\((\d{1,3}),(\d{1,3}),(\d{1,3}),(.{1,3})\)/i.test(t)},e.selectiveBridgeObject=function(t,i){if(null!==i&&"object"===(void 0===i?"undefined":(0,c.default)(i))){for(var o=(0,h.default)(i),n=0;n<t.length;n++)i.hasOwnProperty(t[n])&&"object"==(0,c.default)(i[t[n]])&&(o[t[n]]=e.bridgeObject(i[t[n]]));return o}return null},e.bridgeObject=function(t){if(null!==t&&"object"===(void 0===t?"undefined":(0,c.default)(t))){var i=(0,h.default)(t);if(t instanceof Element)i=t;else{i=(0,h.default)(t);for(var o in t)t.hasOwnProperty(o)&&"object"==(0,c.default)(t[o])&&(i[o]=e.bridgeObject(t[o]))}return i}return null},e.insertSort=function(t,e){for(var i=0;i<t.length;i++){for(var o=t[i],n=i;n>0&&e(o,t[n-1])<0;n--)t[n]=t[n-1];t[n]=o}return t},e.mergeOptions=function(t,e,i){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},n=function(t){return null!==t&&void 0!==t},s=function(t){return null!==t&&"object"===(void 0===t?"undefined":(0,c.default)(t))};if(!s(t))throw new Error("Parameter mergeTarget must be an object");if(!s(e))throw new Error("Parameter options must be an object");if(!n(i))throw new Error("Parameter option must have a value");if(!s(o))throw new Error("Parameter globalOptions must be an object");var r=e[i],a=s(o)&&!function(t){for(var e in t)if(t.hasOwnProperty(e))return!1;return!0}(o),d=a?o[i]:void 0,l=d?d.enabled:void 0;if(void 0!==r){if("boolean"==typeof r)return s(t[i])||(t[i]={}),void(t[i].enabled=r);if(null===r&&!s(t[i])){if(!n(d))return;t[i]=(0,h.default)(d)}if(s(r)){var u=!0;void 0!==r.enabled?u=r.enabled:void 0!==l&&(u=d.enabled),function(t,e,i){s(t[i])||(t[i]={});var o=e[i],n=t[i];for(var r in o)o.hasOwnProperty(r)&&(n[r]=o[r])}(t,e,i),t[i].enabled=u}}},e.binarySearchCustom=function(t,e,i,o){for(var n=0,s=0,r=t.length-1;s<=r&&n<1e4;){var a=Math.floor((s+r)/2),h=t[a],d=void 0===o?h[i]:h[i][o],l=e(d);if(0==l)return a;-1==l?s=a+1:r=a-1,n++}return-1},e.binarySearchValue=function(t,e,i,o,n){var s,r,a,h,d=0,l=0,u=t.length-1;for(n=void 0!=n?n:function(t,e){return t==e?0:t<e?-1:1};l<=u&&d<1e4;){if(h=Math.floor(.5*(u+l)),s=t[Math.max(0,h-1)][i],r=t[h][i],a=t[Math.min(t.length-1,h+1)][i],0==n(r,e))return h;if(n(s,e)<0&&n(r,e)>0)return"before"==o?Math.max(0,h-1):h;if(n(r,e)<0&&n(a,e)>0)return"before"==o?h:Math.min(t.length-1,h+1);n(r,e)<0?l=h+1:u=h-1,d++}return-1},e.easingFunctions={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return t<.5?2*t*t:(4-2*t)*t-1},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return--t*t*t+1},easeInOutCubic:function(t){return t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return 1- --t*t*t*t},easeInOutQuart:function(t){return t<.5?8*t*t*t*t:1-8*--t*t*t*t},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return 1+--t*t*t*t*t},easeInOutQuint:function(t){return t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t}},e.getScrollBarWidth=function(){var t=document.createElement("p");t.style.width="100%",t.style.height="200px";var e=document.createElement("div");e.style.position="absolute",e.style.top="0px",e.style.left="0px",e.style.visibility="hidden",e.style.width="200px",e.style.height="150px",e.style.overflow="hidden",e.appendChild(t),document.body.appendChild(e);var i=t.offsetWidth;e.style.overflow="scroll";var o=t.offsetWidth;return i==o&&(o=e.clientWidth),document.body.removeChild(e),i-o},e.topMost=function(t,e){var i=void 0;Array.isArray(e)||(e=[e]);var o=!0,n=!1,s=void 0;try{for(var a,h=(0,r.default)(t);!(o=(a=h.next()).done);o=!0){var d=a.value;if(d){i=d[e[0]];for(var l=1;l<e.length;l++)i&&(i=i[e[l]]);if(void 0!==i)break}}}catch(t){n=!0,s=t}finally{try{!o&&h.return&&h.return()}finally{if(n)throw s}}return i}},function(t,e,i){t.exports={default:i(194),__esModule:!0}},function(t,e,i){e.__esModule=!0;var o=i(6),n=function(t){return t&&t.__esModule?t:{default:t}}(o);e.default=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!==(void 0===e?"undefined":(0,n.default)(e))&&"function"!=typeof e?t:e}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0;var n=i(196),s=o(n),r=i(29),a=o(r),h=i(6),d=o(h);e.default=function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+(void 0===e?"undefined":(0,d.default)(e)));t.prototype=(0,a.default)(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(s.default?(0,s.default)(t,e):t.__proto__=e)}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0;var n=i(142),s=o(n),r=i(144),a=o(r),h="function"==typeof a.default&&"symbol"==typeof s.default?function(t){return typeof t}:function(t){return t&&"function"==typeof a.default&&t.constructor===a.default&&t!==a.default.prototype?"symbol":typeof t};e.default="function"==typeof a.default&&"symbol"===h(s.default)?function(t){return void 0===t?"undefined":h(t)}:function(t){return t&&"function"==typeof a.default&&t.constructor===a.default&&t!==a.default.prototype?"symbol":void 0===t?"undefined":h(t)}},function(t,e){var i=t.exports={version:"2.5.1"};"number"==typeof __e&&(__e=i)},function(t,e,i){t.exports={default:i(140),__esModule:!0}},function(t,e,i){t.exports="undefined"!=typeof window&&window.moment||i(154)},function(t,e,i){function o(){var t=function(){};return{on:t,off:t,destroy:t,emit:t,get:function(e){return{set:t}}}}if("undefined"!=typeof window){var n=i(175),s=window.Hammer||i(176);t.exports=n(s,{preventDefault:"mouse"})}else t.exports=function(){return o()}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(t,e){if(t&&!Array.isArray(t)&&(e=t,t=null),this._options=e||{},this._data={},this.length=0,this._fieldId=this._options.fieldId||"id",this._type={},this._options.type)for(var i=(0,l.default)(this._options.type),o=0,n=i.length;o<n;o++){var s=i[o],r=this._options.type[s];this._type[s]="Date"==r||"ISODate"==r||"ASPDate"==r?"Date":r}this._subscribers={},t&&this.add(t),this.setOptions(e)}var s=i(19),r=o(s),a=i(6),h=o(a),d=i(8),l=o(d),u=i(2),c=i(43);n.prototype.setOptions=function(t){t&&void 0!==t.queue&&(!1===t.queue?this._queue&&(this._queue.destroy(),delete this._queue):(this._queue||(this._queue=c.extend(this,{replace:["add","update","remove"]})),"object"===(0,h.default)(t.queue)&&this._queue.setOptions(t.queue)))},n.prototype.on=function(t,e){var i=this._subscribers[t];i||(i=[],this._subscribers[t]=i),i.push({callback:e})},n.prototype.off=function(t,e){var i=this._subscribers[t];i&&(this._subscribers[t]=i.filter(function(t){return t.callback!=e}))},n.prototype._trigger=function(t,e,i){if("*"==t)throw new Error("Cannot trigger event *");var o=[];t in this._subscribers&&(o=o.concat(this._subscribers[t])),"*"in this._subscribers&&(o=o.concat(this._subscribers["*"]));for(var n=0,s=o.length;n<s;n++){var r=o[n];r.callback&&r.callback(t,e,i||null)}},n.prototype.add=function(t,e){var i,o=[],n=this;if(Array.isArray(t))for(var s=0,r=t.length;s<r;s++)i=n._addItem(t[s]),o.push(i);else{if(!t||"object"!==(void 0===t?"undefined":(0,h.default)(t)))throw new Error("Unknown dataType");i=n._addItem(t),o.push(i)}return o.length&&this._trigger("add",{items:o},e),o},n.prototype.update=function(t,e){var i=[],o=[],n=[],s=[],r=this,a=r._fieldId,d=function(t){var e=t[a];if(r._data[e]){var h=u.extend({},r._data[e]);e=r._updateItem(t),o.push(e),s.push(t),n.push(h)}else e=r._addItem(t),i.push(e)};if(Array.isArray(t))for(var l=0,c=t.length;l<c;l++)t[l]&&"object"===(0,h.default)(t[l])?d(t[l]):console.warn("Ignoring input item, which is not an object at index "+l);else{if(!t||"object"!==(void 0===t?"undefined":(0,h.default)(t)))throw new Error("Unknown dataType");d(t)}if(i.length&&this._trigger("add",{items:i},e),o.length){var p={items:o,oldData:n,data:s};this._trigger("update",p,e)}return i.concat(o)},n.prototype.get=function(t){var e,i,o,n=this,s=u.getType(arguments[0]);"String"==s||"Number"==s?(e=arguments[0],o=arguments[1]):"Array"==s?(i=arguments[0],o=arguments[1]):o=arguments[0];var r;if(o&&o.returnType){r=-1==["Array","Object"].indexOf(o.returnType)?"Array":o.returnType}else r="Array";var a,h,d,c,p,f=o&&o.type||this._options.type,m=o&&o.filter,v=[];if(void 0!=e)(a=n._getItem(e,f))&&m&&!m(a)&&(a=null);else if(void 0!=i)for(c=0,p=i.length;c<p;c++)a=n._getItem(i[c],f),m&&!m(a)||v.push(a);else for(h=(0,l.default)(this._data),c=0,p=h.length;c<p;c++)d=h[c],a=n._getItem(d,f),m&&!m(a)||v.push(a);if(o&&o.order&&void 0==e&&this._sort(v,o.order),o&&o.fields){var g=o.fields;if(void 0!=e)a=this._filterFields(a,g);else for(c=0,p=v.length;c<p;c++)v[c]=this._filterFields(v[c],g)}if("Object"==r){var y,b={};for(c=0,p=v.length;c<p;c++)y=v[c],b[y.id]=y;return b}return void 0!=e?a:v},n.prototype.getIds=function(t){var e,i,o,n,s,r=this._data,a=t&&t.filter,h=t&&t.order,d=t&&t.type||this._options.type,u=(0,l.default)(r),c=[];if(a)if(h){for(s=[],e=0,i=u.length;e<i;e++)o=u[e],n=this._getItem(o,d),a(n)&&s.push(n);for(this._sort(s,h),e=0,i=s.length;e<i;e++)c.push(s[e][this._fieldId])}else for(e=0,i=u.length;e<i;e++)o=u[e],n=this._getItem(o,d),a(n)&&c.push(n[this._fieldId]);else if(h){for(s=[],e=0,i=u.length;e<i;e++)o=u[e],s.push(r[o]);for(this._sort(s,h),e=0,i=s.length;e<i;e++)c.push(s[e][this._fieldId])}else for(e=0,i=u.length;e<i;e++)o=u[e],n=r[o],c.push(n[this._fieldId]);return c},n.prototype.getDataSet=function(){return this},n.prototype.forEach=function(t,e){var i,o,n,s,r=e&&e.filter,a=e&&e.type||this._options.type,h=this._data,d=(0,l.default)(h);if(e&&e.order){var u=this.get(e);for(i=0,o=u.length;i<o;i++)n=u[i],s=n[this._fieldId],t(n,s)}else for(i=0,o=d.length;i<o;i++)s=d[i],n=this._getItem(s,a),r&&!r(n)||t(n,s)},n.prototype.map=function(t,e){var i,o,n,s,r=e&&e.filter,a=e&&e.type||this._options.type,h=[],d=this._data,u=(0,l.default)(d);for(i=0,o=u.length;i<o;i++)n=u[i],s=this._getItem(n,a),r&&!r(s)||h.push(t(s,n));return e&&e.order&&this._sort(h,e.order),h},n.prototype._filterFields=function(t,e){if(!t)return t;var i,o,n={},s=(0,l.default)(t),r=s.length;if(Array.isArray(e))for(i=0;i<r;i++)o=s[i],-1!=e.indexOf(o)&&(n[o]=t[o]);else for(i=0;i<r;i++)o=s[i],e.hasOwnProperty(o)&&(n[e[o]]=t[o]);return n},n.prototype._sort=function(t,e){if(u.isString(e)){var i=e;t.sort(function(t,e){var o=t[i],n=e[i];return o>n?1:o<n?-1:0})}else{if("function"!=typeof e)throw new TypeError("Order must be a function or a string");t.sort(e)}},n.prototype.remove=function(t,e){var i,o,n,s,r=[],a=[],h=[];for(h=Array.isArray(t)?t:[t],i=0,o=h.length;i<o;i++)(s=this._remove(h[i]))&&void 0!=(n=s[this._fieldId])&&(r.push(n),a.push(s));return r.length&&this._trigger("remove",{items:r,oldData:a},e),r},n.prototype._remove=function(t){var e,i;return u.isNumber(t)||u.isString(t)?i=t:t&&"object"===(void 0===t?"undefined":(0,h.default)(t))&&(i=t[this._fieldId]),void 0!==i&&this._data[i]?(e=this._data[i],delete this._data[i],this.length--,e):null},n.prototype.clear=function(t){var e,i,o=(0,l.default)(this._data),n=[];for(e=0,i=o.length;e<i;e++)n.push(this._data[o[e]]);return this._data={},this.length=0,this._trigger("remove",{items:o,oldData:n},t),o},n.prototype.max=function(t){var e,i,o=this._data,n=(0,l.default)(o),s=null,r=null;for(e=0,i=n.length;e<i;e++){var a=n[e],h=o[a],d=h[t];null!=d&&(!s||d>r)&&(s=h,r=d)}return s},n.prototype.min=function(t){var e,i,o=this._data,n=(0,l.default)(o),s=null,r=null;for(e=0,i=n.length;e<i;e++){var a=n[e],h=o[a],d=h[t];null!=d&&(!s||d<r)&&(s=h,r=d)}return s},n.prototype.distinct=function(t){var e,i,o,n=this._data,s=(0,l.default)(n),r=[],a=this._options.type&&this._options.type[t]||null,h=0;for(e=0,o=s.length;e<o;e++){var d=s[e],c=n[d],p=c[t],f=!1;for(i=0;i<h;i++)if(r[i]==p){f=!0;break}f||void 0===p||(r[h]=p,h++)}if(a)for(e=0,o=r.length;e<o;e++)r[e]=u.convert(r[e],a);return r},n.prototype._addItem=function(t){var e=t[this._fieldId];if(void 0!=e){if(this._data[e])throw new Error("Cannot add item: item with id "+e+" already exists")}else e=u.randomUUID(),t[this._fieldId]=e;var i,o,n={},s=(0,l.default)(t);for(i=0,o=s.length;i<o;i++){var r=s[i],a=this._type[r];n[r]=u.convert(t[r],a)}return this._data[e]=n,this.length++,e},n.prototype._getItem=function(t,e){var i,o,n,s,r=this._data[t];if(!r)return null;var a={},h=(0,l.default)(r);if(e)for(n=0,s=h.length;n<s;n++)i=h[n],o=r[i],a[i]=u.convert(o,e[i]);else for(n=0,s=h.length;n<s;n++)i=h[n],o=r[i],a[i]=o;return a[this._fieldId]||(a[this._fieldId]=r.id),a},n.prototype._updateItem=function(t){var e=t[this._fieldId];if(void 0==e)throw new Error("Cannot update item: item has no id (item: "+(0,r.default)(t)+")");var i=this._data[e];if(!i)throw new Error("Cannot update item: no item with id "+e+" found");for(var o=(0,l.default)(t),n=0,s=o.length;n<s;n++){var a=o[n],h=this._type[a];i[a]=u.convert(t[a],h)}return e},t.exports=n},function(t,e,i){function o(t,e){this._data=null,this._ids={},this.length=0,this._options=e||{},this._fieldId="id",this._subscribers={};var i=this;this.listener=function(){i._onEvent.apply(i,arguments)},this.setData(t)}var n=i(8),s=function(t){return t&&t.__esModule?t:{default:t}}(n),r=i(2),a=i(11);o.prototype.setData=function(t){var e,i,o,n,s;if(this._data){for(this._data.off&&this._data.off("*",this.listener),e=this._data.getIds({filter:this._options&&this._options.filter}),s=[],o=0,n=e.length;o<n;o++)s.push(this._data._data[e[o]]);this._ids={},this.length=0,this._trigger("remove",{items:e,oldData:s})}if(this._data=t,this._data){for(this._fieldId=this._options.fieldId||this._data&&this._data.options&&this._data.options.fieldId||"id",e=this._data.getIds({filter:this._options&&this._options.filter}),o=0,n=e.length;o<n;o++)i=e[o],this._ids[i]=!0;this.length=e.length,this._trigger("add",{items:e}),this._data.on&&this._data.on("*",this.listener)}},o.prototype.refresh=function(){var t,e,i,o=this._data.getIds({filter:this._options&&this._options.filter}),n=(0,s.default)(this._ids),r={},a=[],h=[],d=[];for(e=0,i=o.length;e<i;e++)t=o[e],r[t]=!0,this._ids[t]||(a.push(t),this._ids[t]=!0);for(e=0,i=n.length;e<i;e++)t=n[e],r[t]||(h.push(t),d.push(this._data._data[t]),delete this._ids[t]);this.length+=a.length-h.length,a.length&&this._trigger("add",{items:a}),h.length&&this._trigger("remove",{items:h,oldData:d})},o.prototype.get=function(t){var e,i,o,n=this,s=r.getType(arguments[0]);"String"==s||"Number"==s||"Array"==s?(e=arguments[0],i=arguments[1],o=arguments[2]):(i=arguments[0],o=arguments[1]);var a=r.extend({},this._options,i);this._options.filter&&i&&i.filter&&(a.filter=function(t){return n._options.filter(t)&&i.filter(t)});var h=[];return void 0!=e&&h.push(e),h.push(a),h.push(o),this._data&&this._data.get.apply(this._data,h)},o.prototype.getIds=function(t){var e;if(this._data){var i,o=this._options.filter;i=t&&t.filter?o?function(e){return o(e)&&t.filter(e)}:t.filter:o,e=this._data.getIds({filter:i,order:t&&t.order})}else e=[];return e},o.prototype.map=function(t,e){var i=[];if(this._data){var o,n=this._options.filter;o=e&&e.filter?n?function(t){return n(t)&&e.filter(t)}:e.filter:n,i=this._data.map(t,{filter:o,order:e&&e.order})}else i=[];return i},o.prototype.getDataSet=function(){for(var t=this;t instanceof o;)t=t._data;return t||null},o.prototype._onEvent=function(t,e,i){var o,n,s,r,a=e&&e.items,h=[],d=[],l=[],u=[],c=[],p=[];if(a&&this._data){switch(t){case"add":for(o=0,n=a.length;o<n;o++)s=a[o],(r=this.get(s))&&(this._ids[s]=!0,h.push(s));break;case"update":for(o=0,n=a.length;o<n;o++)s=a[o],r=this.get(s),r?this._ids[s]?(d.push(s),c.push(e.data[o]),u.push(e.oldData[o])):(this._ids[s]=!0,h.push(s)):this._ids[s]&&(delete this._ids[s],l.push(s),p.push(e.oldData[o]));break;case"remove":for(o=0,n=a.length;o<n;o++)s=a[o],this._ids[s]&&(delete this._ids[s],l.push(s),p.push(e.oldData[o]))}this.length+=h.length-l.length,h.length&&this._trigger("add",{items:h},i),d.length&&this._trigger("update",{items:d,oldData:u,data:c},i),l.length&&this._trigger("remove",{items:l,oldData:p},i)}},o.prototype.on=a.prototype.on,o.prototype.off=a.prototype.off,o.prototype._trigger=a.prototype._trigger,o.prototype.subscribe=o.prototype.on,o.prototype.unsubscribe=o.prototype.off,t.exports=o},function(t,e,i){var o=i(57)("wks"),n=i(40),s=i(18).Symbol,r="function"==typeof s;(t.exports=function(t){return o[t]||(o[t]=r&&s[t]||(r?s:n)("Symbol."+t))}).store=o},function(t,e,i){e.prepareElements=function(t){for(var e in t)t.hasOwnProperty(e)&&(t[e].redundant=t[e].used,t[e].used=[])},e.cleanupElements=function(t){for(var e in t)if(t.hasOwnProperty(e)&&t[e].redundant){for(var i=0;i<t[e].redundant.length;i++)t[e].redundant[i].parentNode.removeChild(t[e].redundant[i]);t[e].redundant=[]}},e.resetElements=function(t){e.prepareElements(t),e.cleanupElements(t),e.prepareElements(t)},e.getSVGElement=function(t,e,i){var o;return e.hasOwnProperty(t)?e[t].redundant.length>0?(o=e[t].redundant[0],e[t].redundant.shift()):(o=document.createElementNS("http://www.w3.org/2000/svg",t),i.appendChild(o)):(o=document.createElementNS("http://www.w3.org/2000/svg",t),e[t]={used:[],redundant:[]},i.appendChild(o)),e[t].used.push(o),o},e.getDOMElement=function(t,e,i,o){var n;return e.hasOwnProperty(t)?e[t].redundant.length>0?(n=e[t].redundant[0],e[t].redundant.shift()):(n=document.createElement(t),void 0!==o?i.insertBefore(n,o):i.appendChild(n)):(n=document.createElement(t),e[t]={used:[],redundant:[]},void 0!==o?i.insertBefore(n,o):i.appendChild(n)),e[t].used.push(n),n},e.drawPoint=function(t,i,o,n,s,r){var a;if("circle"==o.style?(a=e.getSVGElement("circle",n,s),a.setAttributeNS(null,"cx",t),a.setAttributeNS(null,"cy",i),a.setAttributeNS(null,"r",.5*o.size)):(a=e.getSVGElement("rect",n,s),a.setAttributeNS(null,"x",t-.5*o.size),a.setAttributeNS(null,"y",i-.5*o.size),a.setAttributeNS(null,"width",o.size),a.setAttributeNS(null,"height",o.size)),void 0!==o.styles&&a.setAttributeNS(null,"style",o.styles),a.setAttributeNS(null,"class",o.className+" vis-point"),r){var h=e.getSVGElement("text",n,s);r.xOffset&&(t+=r.xOffset),r.yOffset&&(i+=r.yOffset),r.content&&(h.textContent=r.content),r.className&&h.setAttributeNS(null,"class",r.className+" vis-label"),h.setAttributeNS(null,"x",t),h.setAttributeNS(null,"y",i)}return a},e.drawBar=function(t,i,o,n,s,r,a,h){if(0!=n){n<0&&(n*=-1,i-=n);var d=e.getSVGElement("rect",r,a);d.setAttributeNS(null,"x",t-.5*o),d.setAttributeNS(null,"y",i),d.setAttributeNS(null,"width",o),d.setAttributeNS(null,"height",n),d.setAttributeNS(null,"class",s),h&&d.setAttributeNS(null,"style",h)}}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.printStyle=void 0;var n=i(19),s=o(n),r=i(6),a=o(r),h=i(8),d=o(h),l=i(0),u=o(l),c=i(1),p=o(c),f=i(2),m=!1,v=void 0,g="background: #FFeeee; color: #dd0000",y=function(){function t(){(0,u.default)(this,t)}return(0,p.default)(t,null,[{key:"validate",value:function(e,i,o){m=!1,v=i;var n=i;return void 0!==o&&(n=i[o]),t.parse(e,n,[]),m}},{key:"parse",value:function(e,i,o){for(var n in e)e.hasOwnProperty(n)&&t.check(n,e,i,o)}},{key:"check",value:function(e,i,o,n){if(void 0===o[e]&&void 0===o.__any__)return void t.getSuggestion(e,o,n);var s=e,r=!0;void 0===o[e]&&void 0!==o.__any__&&(s="__any__",r="object"===t.getType(i[e]));var a=o[s];r&&void 0!==a.__type__&&(a=a.__type__),t.checkFields(e,i,o,s,a,n)}},{key:"checkFields",value:function(e,i,o,n,s,r){var a=function(i){console.log("%c"+i+t.printLocation(r,e),g)},h=t.getType(i[e]),l=s[h];void 0!==l?"array"===t.getType(l)&&-1===l.indexOf(i[e])?(a('Invalid option detected in "'+e+'". Allowed values are:'+t.print(l)+' not "'+i[e]+'". '),m=!0):"object"===h&&"__any__"!==n&&(r=f.copyAndExtendArray(r,e),t.parse(i[e],o[n],r)):void 0===s.any&&(a('Invalid type received for "'+e+'". Expected: '+t.print((0,d.default)(s))+". Received ["+h+'] "'+i[e]+'"'),m=!0)}},{key:"getType",value:function(t){var e=void 0===t?"undefined":(0,a.default)(t);return"object"===e?null===t?"null":t instanceof Boolean?"boolean":t instanceof Number?"number":t instanceof String?"string":Array.isArray(t)?"array":t instanceof Date?"date":void 0!==t.nodeType?"dom":!0===t._isAMomentObject?"moment":"object":"number"===e?"number":"boolean"===e?"boolean":"string"===e?"string":void 0===e?"undefined":e}},{key:"getSuggestion",value:function(e,i,o){var n=t.findInOptions(e,i,o,!1),s=t.findInOptions(e,v,[],!0),r=void 0
+;r=void 0!==n.indexMatch?" in "+t.printLocation(n.path,e,"")+'Perhaps it was incomplete? Did you mean: "'+n.indexMatch+'"?\n\n':s.distance<=4&&n.distance>s.distance?" in "+t.printLocation(n.path,e,"")+"Perhaps it was misplaced? Matching option found at: "+t.printLocation(s.path,s.closestMatch,""):n.distance<=8?'. Did you mean "'+n.closestMatch+'"?'+t.printLocation(n.path,e):". Did you mean one of these: "+t.print((0,d.default)(i))+t.printLocation(o,e),console.log('%cUnknown option detected: "'+e+'"'+r,g),m=!0}},{key:"findInOptions",value:function(e,i,o){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=1e9,r="",a=[],h=e.toLowerCase(),d=void 0;for(var l in i){var u=void 0;if(void 0!==i[l].__type__&&!0===n){var c=t.findInOptions(e,i[l],f.copyAndExtendArray(o,l));s>c.distance&&(r=c.closestMatch,a=c.path,s=c.distance,d=c.indexMatch)}else-1!==l.toLowerCase().indexOf(h)&&(d=l),u=t.levenshteinDistance(e,l),s>u&&(r=l,a=f.copyArray(o),s=u)}return{closestMatch:r,path:a,distance:s,indexMatch:d}}},{key:"printLocation",value:function(t,e){for(var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"Problem value found at: \n",o="\n\n"+i+"options = {\n",n=0;n<t.length;n++){for(var s=0;s<n+1;s++)o+="  ";o+=t[n]+": {\n"}for(var r=0;r<t.length+1;r++)o+="  ";o+=e+"\n";for(var a=0;a<t.length+1;a++){for(var h=0;h<t.length-a;h++)o+="  ";o+="}\n"}return o+"\n\n"}},{key:"print",value:function(t){return(0,s.default)(t).replace(/(\")|(\[)|(\])|(,"__type__")/g,"").replace(/(\,)/g,", ")}},{key:"levenshteinDistance",value:function(t,e){if(0===t.length)return e.length;if(0===e.length)return t.length;var i,o=[];for(i=0;i<=e.length;i++)o[i]=[i];var n;for(n=0;n<=t.length;n++)o[0][n]=n;for(i=1;i<=e.length;i++)for(n=1;n<=t.length;n++)e.charAt(i-1)==t.charAt(n-1)?o[i][n]=o[i-1][n-1]:o[i][n]=Math.min(o[i-1][n-1]+1,Math.min(o[i][n-1]+1,o[i-1][n]+1));return o[e.length][t.length]}}]),t}();e.default=y,e.printStyle=g},function(t,e,i){function o(t,e){this.options=null,this.props=null}var n=i(2);o.prototype.setOptions=function(t){t&&n.extend(this.options,t)},o.prototype.redraw=function(){return!1},o.prototype.destroy=function(){},o.prototype._isResized=function(){var t=this.props._previousWidth!==this.props.width||this.props._previousHeight!==this.props.height;return this.props._previousWidth=this.props.width,this.props._previousHeight=this.props.height,t},t.exports=o},function(t,e,i){var o=i(18),n=i(7),s=i(80),r=i(26),a=function(t,e,i){var h,d,l,u=t&a.F,c=t&a.G,p=t&a.S,f=t&a.P,m=t&a.B,v=t&a.W,g=c?n:n[e]||(n[e]={}),y=g.prototype,b=c?o:p?o[e]:(o[e]||{}).prototype;c&&(i=e);for(h in i)(d=!u&&b&&void 0!==b[h])&&h in g||(l=d?b[h]:i[h],g[h]=c&&"function"!=typeof b[h]?i[h]:m&&d?s(l,o):v&&b[h]==l?function(t){var e=function(e,i,o){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,i)}return new t(e,i,o)}return t.apply(this,arguments)};return e.prototype=t.prototype,e}(l):f&&"function"==typeof l?s(Function.call,l):l,f&&((g.virtual||(g.virtual={}))[h]=l,t&a.R&&y&&!y[h]&&r(y,h,l)))};a.F=1,a.G=2,a.S=4,a.P=8,a.B=16,a.W=32,a.U=64,a.R=128,t.exports=a},function(t,e){var i=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=i)},function(t,e,i){t.exports={default:i(160),__esModule:!0}},function(t,e,i){var o=i(27),n=i(81),s=i(53),r=Object.defineProperty;e.f=i(21)?Object.defineProperty:function(t,e,i){if(o(t),e=s(e,!0),o(i),n)try{return r(t,e,i)}catch(t){}if("get"in i||"set"in i)throw TypeError("Accessors not supported!");return"value"in i&&(t[e]=i.value),t}},function(t,e,i){t.exports=!i(28)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e){var i={}.hasOwnProperty;t.exports=function(t,e){return i.call(t,e)}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(6),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=function(){function t(e,i,o){(0,a.default)(this,t),this.body=i,this.labelModule=o,this.setOptions(e),this.top=void 0,this.left=void 0,this.height=void 0,this.width=void 0,this.radius=void 0,this.margin=void 0,this.refreshNeeded=!0,this.boundingBox={top:0,left:0,right:0,bottom:0}}return(0,d.default)(t,[{key:"setOptions",value:function(t){this.options=t}},{key:"_setMargins",value:function(t){this.margin={},this.options.margin&&("object"==(0,s.default)(this.options.margin)?(this.margin.top=this.options.margin.top,this.margin.right=this.options.margin.right,this.margin.bottom=this.options.margin.bottom,this.margin.left=this.options.margin.left):(this.margin.top=this.options.margin,this.margin.right=this.options.margin,this.margin.bottom=this.options.margin,this.margin.left=this.options.margin)),t.adjustSizes(this.margin)}},{key:"_distanceToBorder",value:function(t,e){var i=this.options.borderWidth;return this.resize(t),Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}},{key:"enableShadow",value:function(t,e){e.shadow&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:"disableShadow",value:function(t,e){e.shadow&&(t.shadowColor="rgba(0,0,0,0)",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}},{key:"enableBorderDashes",value:function(t,e){if(!1!==e.borderDashes)if(void 0!==t.setLineDash){var i=e.borderDashes;!0===i&&(i=[5,15]),t.setLineDash(i)}else console.warn("setLineDash is not supported in this browser. The dashed borders cannot be used."),this.options.shapeProperties.borderDashes=!1,e.borderDashes=!1}},{key:"disableBorderDashes",value:function(t,e){!1!==e.borderDashes&&(void 0!==t.setLineDash?t.setLineDash([0]):(console.warn("setLineDash is not supported in this browser. The dashed borders cannot be used."),this.options.shapeProperties.borderDashes=!1,e.borderDashes=!1))}},{key:"needsRefresh",value:function(t,e){return!0===this.refreshNeeded?(this.refreshNeeded=!1,!0):void 0===this.width||this.labelModule.differentState(t,e)}},{key:"initContextForDraw",value:function(t,e){var i=e.borderWidth/this.body.view.scale;t.lineWidth=Math.min(this.width,i),t.strokeStyle=e.borderColor,t.fillStyle=e.color}},{key:"performStroke",value:function(t,e){var i=e.borderWidth/this.body.view.scale;t.save(),i>0&&(this.enableBorderDashes(t,e),t.stroke(),this.disableBorderDashes(t,e)),t.restore()}},{key:"performFill",value:function(t,e){this.enableShadow(t,e),t.fill(),this.disableShadow(t,e),this.performStroke(t,e)}},{key:"_addBoundingBoxMargin",value:function(t){this.boundingBox.left-=t,this.boundingBox.top-=t,this.boundingBox.bottom+=t,this.boundingBox.right+=t}},{key:"_updateBoundingBox",value:function(t,e,i,o,n){void 0!==i&&this.resize(i,o,n),this.left=t-this.width/2,this.top=e-this.height/2,this.boundingBox.left=this.left,this.boundingBox.top=this.top,this.boundingBox.bottom=this.top+this.height,this.boundingBox.right=this.left+this.width}},{key:"updateBoundingBox",value:function(t,e,i,o,n){this._updateBoundingBox(t,e,i,o,n)}},{key:"getDimensionsFromLabel",value:function(t,e,i){this.textSize=this.labelModule.getTextSize(t,e,i);var o=this.textSize.width,n=this.textSize.height;return 0===o&&(o=14,n=14),{width:o,height:n}}}]),t}();e.default=l},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(23),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{size:this.options.size};if(this.needsRefresh(e,i)){this.labelModule.getTextSize(t,e,i);var n=2*o.size;this.width=n,this.height=n,this.radius=.5*this.width}}},{key:"_drawShape",value:function(t,e,i,o,n,s,r,a){if(this.resize(t,s,r,a),this.left=o-this.width/2,this.top=n-this.height/2,this.initContextForDraw(t,a),t[e](o,n,a.size),this.performFill(t,a),void 0!==this.options.label){this.labelModule.calculateLabelSize(t,s,r,o,n,"hanging");var h=n+.5*this.height+.5*this.labelModule.size.height;this.labelModule.draw(t,o,h,s,r,"hanging")}this.updateBoundingBox(o,n)}},{key:"updateBoundingBox",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size,void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height))}}]),e}(m.default);e.default=v},function(t,e,i){var o=i(78),n=i(51);t.exports=function(t){return o(n(t))}},function(t,e,i){var o=i(20),n=i(39);t.exports=i(21)?function(t,e,i){return o.f(t,e,n(1,i))}:function(t,e,i){return t[e]=i,t}},function(t,e,i){var o=i(32);t.exports=function(t){if(!o(t))throw TypeError(t+" is not an object!");return t}},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,i){t.exports={default:i(138),__esModule:!0}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0;var n=i(188),s=o(n),r=i(77),a=o(r);e.default=function(){function t(t,e){var i=[],o=!0,n=!1,s=void 0;try{for(var r,h=(0,a.default)(t);!(o=(r=h.next()).done)&&(i.push(r.value),!e||i.length!==e);o=!0);}catch(t){n=!0,s=t}finally{try{!o&&h.return&&h.return()}finally{if(n)throw s}}return i}return function(e,i){if(Array.isArray(e))return e;if((0,s.default)(Object(e)))return t(e,i);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()},function(t,e){t.exports={}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,i){var o=i(84),n=i(58);t.exports=Object.keys||function(t){return o(t,n)}},function(t,e,i){function o(t,e,i){this.x=void 0!==t?t:0,this.y=void 0!==e?e:0,this.z=void 0!==i?i:0}o.subtract=function(t,e){var i=new o;return i.x=t.x-e.x,i.y=t.y-e.y,i.z=t.z-e.z,i},o.add=function(t,e){var i=new o;return i.x=t.x+e.x,i.y=t.y+e.y,i.z=t.z+e.z,i},o.avg=function(t,e){return new o((t.x+e.x)/2,(t.y+e.y)/2,(t.z+e.z)/2)},o.crossProduct=function(t,e){var i=new o;return i.x=t.y*e.z-t.z*e.y,i.y=t.z*e.x-t.x*e.z,i.z=t.x*e.y-t.y*e.x,i},o.prototype.length=function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},t.exports=o},function(t,e,i){var o,n,s;!function(i,r){n=[],o=r,void 0!==(s="function"==typeof o?o.apply(e,n):o)&&(t.exports=s)}(0,function(){function t(t){var e,i=t&&t.preventDefault||!1,o=t&&t.container||window,n={},s={keydown:{},keyup:{}},r={};for(e=97;e<=122;e++)r[String.fromCharCode(e)]={code:e-97+65,shift:!1};for(e=65;e<=90;e++)r[String.fromCharCode(e)]={code:e,shift:!0};for(e=0;e<=9;e++)r[""+e]={code:48+e,shift:!1};for(e=1;e<=12;e++)r["F"+e]={code:111+e,shift:!1};for(e=0;e<=9;e++)r["num"+e]={code:96+e,shift:!1};r["num*"]={code:106,shift:!1},r["num+"]={code:107,shift:!1},r["num-"]={code:109,shift:!1},r["num/"]={code:111,shift:!1},r["num."]={code:110,shift:!1},r.left={code:37,shift:!1},r.up={code:38,shift:!1},r.right={code:39,shift:!1},r.down={code:40,shift:!1},r.space={code:32,shift:!1},r.enter={code:13,shift:!1},r.shift={code:16,shift:void 0},r.esc={code:27,shift:!1},r.backspace={code:8,shift:!1},r.tab={code:9,shift:!1},r.ctrl={code:17,shift:!1},r.alt={code:18,shift:!1},r.delete={code:46,shift:!1},r.pageup={code:33,shift:!1},r.pagedown={code:34,shift:!1},r["="]={code:187,shift:!1},r["-"]={code:189,shift:!1},r["]"]={code:221,shift:!1},r["["]={code:219,shift:!1};var a=function(t){d(t,"keydown")},h=function(t){d(t,"keyup")},d=function(t,e){if(void 0!==s[e][t.keyCode]){for(var o=s[e][t.keyCode],n=0;n<o.length;n++)void 0===o[n].shift?o[n].fn(t):1==o[n].shift&&1==t.shiftKey?o[n].fn(t):0==o[n].shift&&0==t.shiftKey&&o[n].fn(t);1==i&&t.preventDefault()}};return n.bind=function(t,e,i){if(void 0===i&&(i="keydown"),void 0===r[t])throw new Error("unsupported key: "+t);void 0===s[i][r[t].code]&&(s[i][r[t].code]=[]),s[i][r[t].code].push({fn:e,shift:r[t].shift})},n.bindAll=function(t,e){void 0===e&&(e="keydown");for(var i in r)r.hasOwnProperty(i)&&n.bind(i,t,e)},n.getKey=function(t){for(var e in r)if(r.hasOwnProperty(e)){if(1==t.shiftKey&&1==r[e].shift&&t.keyCode==r[e].code)return e;if(0==t.shiftKey&&0==r[e].shift&&t.keyCode==r[e].code)return e;if(t.keyCode==r[e].code&&"shift"==e)return e}return"unknown key, currently not supported"},n.unbind=function(t,e,i){if(void 0===i&&(i="keydown"),void 0===r[t])throw new Error("unsupported key: "+t);if(void 0!==e){var o=[],n=s[i][r[t].code];if(void 0!==n)for(var a=0;a<n.length;a++)n[a].fn==e&&n[a].shift==r[t].shift||o.push(s[i][r[t].code][a]);s[i][r[t].code]=o}else s[i][r[t].code]=[]},n.reset=function(){s={keydown:{},keyup:{}}},n.destroy=function(){s={keydown:{},keyup:{}},o.removeEventListener("keydown",a,!0),o.removeEventListener("keyup",h,!0)},o.addEventListener("keydown",a,!0),o.addEventListener("keyup",h,!0),n}return t})},function(t,e,i){e.convertHiddenOptions=function(t,i,o){if(o&&!Array.isArray(o))return e.convertHiddenOptions(t,i,[o]);if(i.hiddenDates=[],o&&1==Array.isArray(o)){for(var n=0;n<o.length;n++)if(void 0===o[n].repeat){var s={};s.start=t(o[n].start).toDate().valueOf(),s.end=t(o[n].end).toDate().valueOf(),i.hiddenDates.push(s)}i.hiddenDates.sort(function(t,e){return t.start-e.start})}},e.updateHiddenDates=function(t,i,o){if(o&&!Array.isArray(o))return e.updateHiddenDates(t,i,[o]);if(o&&void 0!==i.domProps.centerContainer.width){e.convertHiddenOptions(t,i,o);for(var n=t(i.range.start),s=t(i.range.end),r=i.range.end-i.range.start,a=r/i.domProps.centerContainer.width,h=0;h<o.length;h++)if(void 0!==o[h].repeat){var d=t(o[h].start),l=t(o[h].end);if("Invalid Date"==d._d)throw new Error("Supplied start date is not valid: "+o[h].start);if("Invalid Date"==l._d)throw new Error("Supplied end date is not valid: "+o[h].end);var u=l-d;if(u>=4*a){var c=0,p=s.clone();switch(o[h].repeat){case"daily":d.day()!=l.day()&&(c=1),d.dayOfYear(n.dayOfYear()),d.year(n.year()),d.subtract(7,"days"),l.dayOfYear(n.dayOfYear()),l.year(n.year()),l.subtract(7-c,"days"),p.add(1,"weeks");break;case"weekly":var f=l.diff(d,"days"),m=d.day();d.date(n.date()),d.month(n.month()),d.year(n.year()),l=d.clone(),d.day(m),l.day(m),l.add(f,"days"),d.subtract(1,"weeks"),l.subtract(1,"weeks"),p.add(1,"weeks");break;case"monthly":d.month()!=l.month()&&(c=1),d.month(n.month()),d.year(n.year()),d.subtract(1,"months"),l.month(n.month()),l.year(n.year()),l.subtract(1,"months"),l.add(c,"months"),p.add(1,"months");break;case"yearly":d.year()!=l.year()&&(c=1),d.year(n.year()),d.subtract(1,"years"),l.year(n.year()),l.subtract(1,"years"),l.add(c,"years"),p.add(1,"years");break;default:return void console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:",o[h].repeat)}for(;d<p;)switch(i.hiddenDates.push({start:d.valueOf(),end:l.valueOf()}),o[h].repeat){case"daily":d.add(1,"days"),l.add(1,"days");break;case"weekly":d.add(1,"weeks"),l.add(1,"weeks");break;case"monthly":d.add(1,"months"),l.add(1,"months");break;case"yearly":d.add(1,"y"),l.add(1,"y");break;default:return void console.log("Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:",o[h].repeat)}i.hiddenDates.push({start:d.valueOf(),end:l.valueOf()})}}e.removeDuplicates(i);var v=e.isHidden(i.range.start,i.hiddenDates),g=e.isHidden(i.range.end,i.hiddenDates),y=i.range.start,b=i.range.end;1==v.hidden&&(y=1==i.range.startToFront?v.startDate-1:v.endDate+1),1==g.hidden&&(b=1==i.range.endToFront?g.startDate-1:g.endDate+1),1!=v.hidden&&1!=g.hidden||i.range._applyRange(y,b)}},e.removeDuplicates=function(t){for(var e=t.hiddenDates,i=[],o=0;o<e.length;o++)for(var n=0;n<e.length;n++)o!=n&&1!=e[n].remove&&1!=e[o].remove&&(e[n].start>=e[o].start&&e[n].end<=e[o].end?e[n].remove=!0:e[n].start>=e[o].start&&e[n].start<=e[o].end?(e[o].end=e[n].end,e[n].remove=!0):e[n].end>=e[o].start&&e[n].end<=e[o].end&&(e[o].start=e[n].start,e[n].remove=!0));for(o=0;o<e.length;o++)!0!==e[o].remove&&i.push(e[o]);t.hiddenDates=i,t.hiddenDates.sort(function(t,e){return t.start-e.start})},e.printDates=function(t){for(var e=0;e<t.length;e++)console.log(e,new Date(t[e].start),new Date(t[e].end),t[e].start,t[e].end,t[e].remove)},e.stepOverHiddenDates=function(t,e,i){for(var o=!1,n=e.current.valueOf(),s=0;s<e.hiddenDates.length;s++){var r=e.hiddenDates[s].start,a=e.hiddenDates[s].end;if(n>=r&&n<a){o=!0;break}}if(1==o&&n<e._end.valueOf()&&n!=i){var h=t(i),d=t(a);h.year()!=d.year()?e.switchedYear=!0:h.month()!=d.month()?e.switchedMonth=!0:h.dayOfYear()!=d.dayOfYear()&&(e.switchedDay=!0),e.current=d}},e.toScreen=function(t,i,o){var n;if(0==t.body.hiddenDates.length)return n=t.range.conversion(o),(i.valueOf()-n.offset)*n.scale;var s=e.isHidden(i,t.body.hiddenDates);1==s.hidden&&(i=s.startDate);var r=e.getHiddenDurationBetween(t.body.hiddenDates,t.range.start,t.range.end);if(i<t.range.start){n=t.range.conversion(o,r);var a=e.getHiddenDurationBeforeStart(t.body.hiddenDates,i,n.offset);return i=t.options.moment(i).toDate().valueOf(),i+=a,-(n.offset-i.valueOf())*n.scale}if(i>t.range.end){var h={start:t.range.start,end:i};return i=e.correctTimeForHidden(t.options.moment,t.body.hiddenDates,h,i),n=t.range.conversion(o,r),(i.valueOf()-n.offset)*n.scale}return i=e.correctTimeForHidden(t.options.moment,t.body.hiddenDates,t.range,i),n=t.range.conversion(o,r),(i.valueOf()-n.offset)*n.scale},e.toTime=function(t,i,o){if(0==t.body.hiddenDates.length){var n=t.range.conversion(o);return new Date(i/n.scale+n.offset)}var s=e.getHiddenDurationBetween(t.body.hiddenDates,t.range.start,t.range.end),r=t.range.end-t.range.start-s,a=r*i/o,h=e.getAccumulatedHiddenDuration(t.body.hiddenDates,t.range,a);return new Date(h+a+t.range.start)},e.getHiddenDurationBetween=function(t,e,i){for(var o=0,n=0;n<t.length;n++){var s=t[n].start,r=t[n].end;s>=e&&r<i&&(o+=r-s)}return o},e.getHiddenDurationBeforeStart=function(t,e,i){for(var o=0,n=0;n<t.length;n++){var s=t[n].start,r=t[n].end;s>=e&&r<=i&&(o+=r-s)}return o},e.correctTimeForHidden=function(t,i,o,n){return n=t(n).toDate().valueOf(),n-=e.getHiddenDurationBefore(t,i,o,n)},e.getHiddenDurationBefore=function(t,e,i,o){var n=0;o=t(o).toDate().valueOf();for(var s=0;s<e.length;s++){var r=e[s].start,a=e[s].end;r>=i.start&&a<i.end&&o>=a&&(n+=a-r)}return n},e.getAccumulatedHiddenDuration=function(t,e,i){for(var o=0,n=0,s=e.start,r=0;r<t.length;r++){var a=t[r].start,h=t[r].end;if(a>=e.start&&h<e.end){if(n+=a-s,s=h,n>=i)break;o+=h-a}}return o},e.snapAwayFromHidden=function(t,i,o,n){var s=e.isHidden(i,t);return 1==s.hidden?o<0?1==n?s.startDate-(s.endDate-i)-1:s.startDate-1:1==n?s.endDate+(i-s.startDate)+1:s.endDate+1:i},e.isHidden=function(t,e){for(var i=0;i<e.length;i++){var o=e[i].start,n=e[i].end;if(t>=o&&t<n)return{hidden:!0,startDate:o,endDate:n}}return{hidden:!1,startDate:o,endDate:n}}},function(t,e,i){e.onTouch=function(t,e){e.inputHandler=function(t){t.isFirst&&e(t)},t.on("hammer.input",e.inputHandler)},e.onRelease=function(t,e){return e.inputHandler=function(t){t.isFinal&&e(t)},t.on("hammer.input",e.inputHandler)},e.offTouch=function(t,e){t.off("hammer.input",e.inputHandler)},e.offRelease=e.offTouch,e.disablePreventDefaultVertically=function(t){return t.getTouchAction=function(){return["pan-y"]},t}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(t,e,i){this.id=null,this.parent=null,this.data=t,this.dom=null,this.conversion=e||{},this.options=i||{},this.selected=!1,this.displayed=!1,this.groupShowing=!0,this.dirty=!0,this.top=null,this.right=null,this.left=null,this.width=null,this.height=null,this.editable=null,this._updateEditStatus()}var s=i(6),r=o(s),a=i(8),h=o(a),d=i(10),l=i(2),u=i(9);n.prototype.stack=!0,n.prototype.select=function(){this.selected=!0,this.dirty=!0,this.displayed&&this.redraw()},n.prototype.unselect=function(){this.selected=!1,this.dirty=!0,this.displayed&&this.redraw()},n.prototype.setData=function(t){void 0!=t.group&&this.data.group!=t.group&&null!=this.parent&&this.parent.itemSet._moveToGroup(this,t.group),this.parent&&(this.parent.stackDirty=!0),void 0!=t.subgroup&&this.data.subgroup!=t.subgroup&&null!=this.parent&&this.parent.changeSubgroup(this,this.data.subgroup,t.subgroup),this.data=t,this._updateEditStatus(),this.dirty=!0,this.displayed&&this.redraw()},n.prototype.setParent=function(t){this.displayed?(this.hide(),this.parent=t,this.parent&&this.show()):this.parent=t},n.prototype.isVisible=function(t){return!1},n.prototype.show=function(){return!1},n.prototype.hide=function(){return!1},n.prototype.redraw=function(){},n.prototype.repositionX=function(){},n.prototype.repositionY=function(){},n.prototype._repaintDragCenter=function(){if(this.selected&&this.options.editable.updateTime&&!this.dom.dragCenter){var t=this,e=document.createElement("div");e.className="vis-drag-center",e.dragCenterItem=this;var i=new d(e);i.on("tap",function(e){t.parent.itemSet.body.emitter.emit("click",{event:e,item:t.id})}),i.on("doubletap",function(e){e.stopPropagation(),t.parent.itemSet._onUpdateItem(t),t.parent.itemSet.body.emitter.emit("doubleClick",{event:e,item:t.id})}),this.dom.box?this.dom.dragLeft?this.dom.box.insertBefore(e,this.dom.dragLeft):this.dom.box.appendChild(e):this.dom.point&&this.dom.point.appendChild(e),this.dom.dragCenter=e}else!this.selected&&this.dom.dragCenter&&(this.dom.dragCenter.parentNode&&this.dom.dragCenter.parentNode.removeChild(this.dom.dragCenter),this.dom.dragCenter=null)},n.prototype._repaintDeleteButton=function(t){var e=(this.options.editable.overrideItems||null==this.editable)&&this.options.editable.remove||!this.options.editable.overrideItems&&null!=this.editable&&this.editable.remove;if(this.selected&&e&&!this.dom.deleteButton){var i=this,o=document.createElement("div");this.options.rtl?o.className="vis-delete-rtl":o.className="vis-delete",o.title="Delete this item",new d(o).on("tap",function(t){t.stopPropagation(),i.parent.removeFromDataSet(i)}),t.appendChild(o),this.dom.deleteButton=o}else!this.selected&&this.dom.deleteButton&&(this.dom.deleteButton.parentNode&&this.dom.deleteButton.parentNode.removeChild(this.dom.deleteButton),this.dom.deleteButton=null)},n.prototype._repaintOnItemUpdateTimeTooltip=function(t){if(this.options.tooltipOnItemUpdateTime){var e=(this.options.editable.updateTime||!0===this.data.editable)&&!1!==this.data.editable;if(this.selected&&e&&!this.dom.onItemUpdateTimeTooltip){var i=document.createElement("div");i.className="vis-onUpdateTime-tooltip",t.appendChild(i),this.dom.onItemUpdateTimeTooltip=i}else!this.selected&&this.dom.onItemUpdateTimeTooltip&&(this.dom.onItemUpdateTimeTooltip.parentNode&&this.dom.onItemUpdateTimeTooltip.parentNode.removeChild(this.dom.onItemUpdateTimeTooltip),this.dom.onItemUpdateTimeTooltip=null);if(this.dom.onItemUpdateTimeTooltip){this.dom.onItemUpdateTimeTooltip.style.visibility=this.parent.itemSet.touchParams.itemIsDragging?"visible":"hidden",this.options.rtl?this.dom.onItemUpdateTimeTooltip.style.right=this.dom.content.style.right:this.dom.onItemUpdateTimeTooltip.style.left=this.dom.content.style.left;var o,n=this.parent.itemSet.body.domProps.scrollTop;o="top"==this.options.orientation.item?this.top:this.parent.height-this.top-this.height;o+this.parent.top-50<-n?(this.dom.onItemUpdateTimeTooltip.style.bottom="",this.dom.onItemUpdateTimeTooltip.style.top=this.height+2+"px"):(this.dom.onItemUpdateTimeTooltip.style.top="",this.dom.onItemUpdateTimeTooltip.style.bottom=this.height+2+"px");var s,r;this.options.tooltipOnItemUpdateTime&&this.options.tooltipOnItemUpdateTime.template?(r=this.options.tooltipOnItemUpdateTime.template.bind(this),s=r(this.data)):(s="start: "+u(this.data.start).format("MM/DD/YYYY hh:mm"),this.data.end&&(s+="<br> end: "+u(this.data.end).format("MM/DD/YYYY hh:mm"))),this.dom.onItemUpdateTimeTooltip.innerHTML=s}}},n.prototype._updateContents=function(t){var e,i,o,n,s=this.parent.itemSet.itemsData.get(this.id),r=this.dom.box||this.dom.point,a=r.getElementsByClassName("vis-item-visible-frame")[0];if(this.options.visibleFrameTemplate?(n=this.options.visibleFrameTemplate.bind(this),o=n(s,r)):o="",a)if(o instanceof Object&&!(o instanceof Element))n(s,a);else if(this._contentToString(this.itemVisibleFrameContent)!==this._contentToString(o)){if(o instanceof Element)a.innerHTML="",a.appendChild(o);else if(void 0!=o)a.innerHTML=o;else if("background"!=this.data.type||void 0!==this.data.content)throw new Error('Property "content" missing in item '+this.id);this.itemVisibleFrameContent=o}if(this.options.template?(i=this.options.template.bind(this),e=i(s,t,this.data)):e=this.data.content,e instanceof Object&&!(e instanceof Element))i(s,t);else if(this._contentToString(this.content)!==this._contentToString(e)){if(e instanceof Element)t.innerHTML="",t.appendChild(e);else if(void 0!=e)t.innerHTML=e;else if("background"!=this.data.type||void 0!==this.data.content)throw new Error('Property "content" missing in item '+this.id);this.content=e}},n.prototype._updateDataAttributes=function(t){if(this.options.dataAttributes&&this.options.dataAttributes.length>0){var e=[];if(Array.isArray(this.options.dataAttributes))e=this.options.dataAttributes;else{if("all"!=this.options.dataAttributes)return;e=(0,h.default)(this.data)}for(var i=0;i<e.length;i++){var o=e[i],n=this.data[o];null!=n?t.setAttribute("data-"+o,n):t.removeAttribute("data-"+o)}}},n.prototype._updateStyle=function(t){this.style&&(l.removeCssText(t,this.style),this.style=null),this.data.style&&(l.addCssText(t,this.data.style),this.style=this.data.style)},n.prototype._contentToString=function(t){return"string"==typeof t?t:t&&"outerHTML"in t?t.outerHTML:t},n.prototype._updateEditStatus=function(){this.options&&("boolean"==typeof this.options.editable?this.editable={updateTime:this.options.editable,updateGroup:this.options.editable,remove:this.options.editable}:"object"===(0,r.default)(this.options.editable)&&(this.editable={},l.selectiveExtend(["updateTime","updateGroup","remove"],this.editable,this.options.editable))),this.options&&this.options.editable&&!0===this.options.editable.overrideItems||this.data&&("boolean"==typeof this.data.editable?this.editable={updateTime:this.data.editable,updateGroup:this.data.editable,remove:this.data.editable}:"object"===(0,r.default)(this.data.editable)&&(this.editable={},l.selectiveExtend(["updateTime","updateGroup","remove"],this.editable,this.data.editable)))},n.prototype.getWidthLeft=function(){return 0},n.prototype.getWidthRight=function(){return 0},n.prototype.getTitle=function(){return this.data.title},t.exports=n},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e){var i=0,o=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++i+o).toString(36))}},function(t,e,i){var o=i(51);t.exports=function(t){return Object(o(t))}},function(t,e){e.f={}.propertyIsEnumerable},function(t,e,i){function o(t){this.delay=null,this.max=1/0,this._queue=[],this._timeout=null,this._extended=null,this.setOptions(t)}o.prototype.setOptions=function(t){t&&void 0!==t.delay&&(this.delay=t.delay),t&&void 0!==t.max&&(this.max=t.max),this._flushIfNeeded()},o.extend=function(t,e){var i=new o(e);if(void 0!==t.flush)throw new Error("Target object already has a property flush");t.flush=function(){i.flush()};var n=[{name:"flush",original:void 0}];if(e&&e.replace)for(var s=0;s<e.replace.length;s++){var r=e.replace[s];n.push({name:r,original:t[r]}),i.replace(t,r)}return i._extended={object:t,methods:n},i},o.prototype.destroy=function(){if(this.flush(),this._extended){for(var t=this._extended.object,e=this._extended.methods,i=0;i<e.length;i++){var o=e[i];o.original?t[o.name]=o.original:delete t[o.name]}this._extended=null}},o.prototype.replace=function(t,e){var i=this,o=t[e];if(!o)throw new Error("Method "+e+" undefined");t[e]=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];i.queue({args:t,fn:o,context:this})}},o.prototype.queue=function(t){"function"==typeof t?this._queue.push({fn:t}):this._queue.push(t),this._flushIfNeeded()},o.prototype._flushIfNeeded=function(){if(this._queue.length>this.max&&this.flush(),clearTimeout(this._timeout),this.queue.length>0&&"number"==typeof this.delay){var t=this;this._timeout=setTimeout(function(){t.flush()},this.delay)}},o.prototype.flush=function(){for(;this._queue.length>0;){var t=this._queue.shift();t.fn.apply(t.context||t.fn,t.args||[])}},t.exports=o},function(t,e){function i(t){if(t)return o(t)}function o(t){for(var e in i.prototype)t[e]=i.prototype[e];return t}t.exports=i,i.prototype.on=i.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks[t]=this._callbacks[t]||[]).push(e),this},i.prototype.once=function(t,e){function i(){o.off(t,i),e.apply(this,arguments)}var o=this;return this._callbacks=this._callbacks||{},i.fn=e,this.on(t,i),this},i.prototype.off=i.prototype.removeListener=i.prototype.removeAllListeners=i.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var i=this._callbacks[t];if(!i)return this;if(1==arguments.length)return delete this._callbacks[t],this;for(var o,n=0;n<i.length;n++)if((o=i[n])===e||o.fn===e){i.splice(n,1);break}return this},i.prototype.emit=function(t){this._callbacks=this._callbacks||{};var e=[].slice.call(arguments,1),i=this._callbacks[t];if(i){i=i.slice(0);for(var o=0,n=i.length;o<n;++o)i[o].apply(this,e)}return this},i.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks[t]||[]},i.prototype.hasListeners=function(t){return!!this.listeners(t).length}},function(t,e,i){function o(t,e){this.dom={foreground:null,lines:[],majorTexts:[],minorTexts:[],redundant:{lines:[],majorTexts:[],minorTexts:[]}},this.props={range:{start:0,end:0,minimumStep:0},lineTop:0},this.defaultOptions={orientation:{axis:"bottom"},showMinorLabels:!0,showMajorLabels:!0,maxMinorChars:7,format:h.FORMAT,moment:l,timeAxis:null},this.options=r.extend({},this.defaultOptions),this.body=t,this._create(),this.setOptions(e)}var n=i(6),s=function(t){return t&&t.__esModule?t:{default:t}}(n),r=i(2),a=i(16),h=i(66),d=i(36),l=i(9);o.prototype=new a,o.prototype.setOptions=function(t){t&&(r.selectiveExtend(["showMinorLabels","showMajorLabels","maxMinorChars","hiddenDates","timeAxis","moment","rtl"],this.options,t),r.selectiveDeepExtend(["format"],this.options,t),"orientation"in t&&("string"==typeof t.orientation?this.options.orientation.axis=t.orientation:"object"===(0,s.default)(t.orientation)&&"axis"in t.orientation&&(this.options.orientation.axis=t.orientation.axis)),"locale"in t&&("function"==typeof l.locale?l.locale(t.locale):l.lang(t.locale)))},o.prototype._create=function(){this.dom.foreground=document.createElement("div"),this.dom.background=document.createElement("div"),this.dom.foreground.className="vis-time-axis vis-foreground",this.dom.background.className="vis-time-axis vis-background"},o.prototype.destroy=function(){this.dom.foreground.parentNode&&this.dom.foreground.parentNode.removeChild(this.dom.foreground),this.dom.background.parentNode&&this.dom.background.parentNode.removeChild(this.dom.background),this.body=null},o.prototype.redraw=function(){var t=this.props,e=this.dom.foreground,i=this.dom.background,o="top"==this.options.orientation.axis?this.body.dom.top:this.body.dom.bottom,n=e.parentNode!==o;this._calculateCharSize()
+;var s=this.options.showMinorLabels&&"none"!==this.options.orientation.axis,r=this.options.showMajorLabels&&"none"!==this.options.orientation.axis;t.minorLabelHeight=s?t.minorCharHeight:0,t.majorLabelHeight=r?t.majorCharHeight:0,t.height=t.minorLabelHeight+t.majorLabelHeight,t.width=e.offsetWidth,t.minorLineHeight=this.body.domProps.root.height-t.majorLabelHeight-("top"==this.options.orientation.axis?this.body.domProps.bottom.height:this.body.domProps.top.height),t.minorLineWidth=1,t.majorLineHeight=t.minorLineHeight+t.majorLabelHeight,t.majorLineWidth=1;var a=e.nextSibling,h=i.nextSibling;return e.parentNode&&e.parentNode.removeChild(e),i.parentNode&&i.parentNode.removeChild(i),e.style.height=this.props.height+"px",this._repaintLabels(),a?o.insertBefore(e,a):o.appendChild(e),h?this.body.dom.backgroundVertical.insertBefore(i,h):this.body.dom.backgroundVertical.appendChild(i),this._isResized()||n},o.prototype._repaintLabels=function(){var t=this.options.orientation.axis,e=r.convert(this.body.range.start,"Number"),i=r.convert(this.body.range.end,"Number"),o=this.body.util.toTime((this.props.minorCharWidth||10)*this.options.maxMinorChars).valueOf(),n=o-d.getHiddenDurationBefore(this.options.moment,this.body.hiddenDates,this.body.range,o);n-=this.body.util.toTime(0).valueOf();var s=new h(new Date(e),new Date(i),n,this.body.hiddenDates,this.options);s.setMoment(this.options.moment),this.options.format&&s.setFormat(this.options.format),this.options.timeAxis&&s.setScale(this.options.timeAxis),this.step=s;var a=this.dom;a.redundant.lines=a.lines,a.redundant.majorTexts=a.majorTexts,a.redundant.minorTexts=a.minorTexts,a.lines=[],a.majorTexts=[],a.minorTexts=[];var l,c,p,f,m,v,g,y,b,_=0,w=void 0,x=0;for(s.start(),l=s.getCurrent(),p=this.body.util.toScreen(l);s.hasNext()&&x<1e3;){switch(x++,f=s.isMajor(),b=s.getClassName(),y=s.getLabelMinor(),l,c=p,s.next(),l=s.getCurrent(),s.isMajor(),p=this.body.util.toScreen(l),v=_,_=p-c,s.scale){case"week":m=!0;break;default:m=_>=.4*v}if(this.options.showMinorLabels&&m){var k=this._repaintMinorText(c,y,t,b);k.style.width=_+"px"}f&&this.options.showMajorLabels?(c>0&&(void 0==w&&(w=c),k=this._repaintMajorText(c,s.getLabelMajor(),t,b)),g=this._repaintMajorLine(c,_,t,b)):m?g=this._repaintMinorLine(c,_,t,b):g&&(g.style.width=parseInt(g.style.width)+_+"px")}if(1e3!==x||u||(console.warn("Something is wrong with the Timeline scale. Limited drawing of grid lines to 1000 lines."),u=!0),this.options.showMajorLabels){var S=this.body.util.toTime(0),D=s.getLabelMajor(S),M=D.length*(this.props.majorCharWidth||10)+10;(void 0==w||M<w)&&this._repaintMajorText(0,D,t,b)}r.forEach(this.dom.redundant,function(t){for(;t.length;){var e=t.pop();e&&e.parentNode&&e.parentNode.removeChild(e)}})},o.prototype._repaintMinorText=function(t,e,i,o){var n=this.dom.redundant.minorTexts.shift();if(!n){var s=document.createTextNode("");n=document.createElement("div"),n.appendChild(s),this.dom.foreground.appendChild(n)}return this.dom.minorTexts.push(n),n.innerHTML=e,n.style.top="top"==i?this.props.majorLabelHeight+"px":"0",this.options.rtl?(n.style.left="",n.style.right=t+"px"):n.style.left=t+"px",n.className="vis-text vis-minor "+o,n},o.prototype._repaintMajorText=function(t,e,i,o){var n=this.dom.redundant.majorTexts.shift();if(!n){var s=document.createElement("div");n=document.createElement("div"),n.appendChild(s),this.dom.foreground.appendChild(n)}return n.childNodes[0].innerHTML=e,n.className="vis-text vis-major "+o,n.style.top="top"==i?"0":this.props.minorLabelHeight+"px",this.options.rtl?(n.style.left="",n.style.right=t+"px"):n.style.left=t+"px",this.dom.majorTexts.push(n),n},o.prototype._repaintMinorLine=function(t,e,i,o){var n=this.dom.redundant.lines.shift();n||(n=document.createElement("div"),this.dom.background.appendChild(n)),this.dom.lines.push(n);var s=this.props;return n.style.top="top"==i?s.majorLabelHeight+"px":this.body.domProps.top.height+"px",n.style.height=s.minorLineHeight+"px",this.options.rtl?(n.style.left="",n.style.right=t-s.minorLineWidth/2+"px",n.className="vis-grid vis-vertical-rtl vis-minor "+o):(n.style.left=t-s.minorLineWidth/2+"px",n.className="vis-grid vis-vertical vis-minor "+o),n.style.width=e+"px",n},o.prototype._repaintMajorLine=function(t,e,i,o){var n=this.dom.redundant.lines.shift();n||(n=document.createElement("div"),this.dom.background.appendChild(n)),this.dom.lines.push(n);var s=this.props;return n.style.top="top"==i?"0":this.body.domProps.top.height+"px",this.options.rtl?(n.style.left="",n.style.right=t-s.majorLineWidth/2+"px",n.className="vis-grid vis-vertical-rtl vis-major "+o):(n.style.left=t-s.majorLineWidth/2+"px",n.className="vis-grid vis-vertical vis-major "+o),n.style.height=s.majorLineHeight+"px",n.style.width=e+"px",n},o.prototype._calculateCharSize=function(){this.dom.measureCharMinor||(this.dom.measureCharMinor=document.createElement("DIV"),this.dom.measureCharMinor.className="vis-text vis-minor vis-measure",this.dom.measureCharMinor.style.position="absolute",this.dom.measureCharMinor.appendChild(document.createTextNode("0")),this.dom.foreground.appendChild(this.dom.measureCharMinor)),this.props.minorCharHeight=this.dom.measureCharMinor.clientHeight,this.props.minorCharWidth=this.dom.measureCharMinor.clientWidth,this.dom.measureCharMajor||(this.dom.measureCharMajor=document.createElement("DIV"),this.dom.measureCharMajor.className="vis-text vis-major vis-measure",this.dom.measureCharMajor.style.position="absolute",this.dom.measureCharMajor.appendChild(document.createTextNode("0")),this.dom.foreground.appendChild(this.dom.measureCharMajor)),this.props.majorCharHeight=this.dom.measureCharMajor.clientHeight,this.props.majorCharWidth=this.dom.measureCharMajor.clientWidth};var u=!1;t.exports=o},function(t,e,i){function o(t,e){this.body=t,this.defaultOptions={moment:a,locales:h,locale:"en",id:void 0,title:void 0},this.options=s.extend({},this.defaultOptions),e&&e.time?this.customTime=e.time:this.customTime=new Date,this.eventParams={},this.setOptions(e),this._create()}var n=i(10),s=i(2),r=i(16),a=i(9),h=i(98);o.prototype=new r,o.prototype.setOptions=function(t){t&&s.selectiveExtend(["moment","locale","locales","id"],this.options,t)},o.prototype._create=function(){function t(t){this.body.range._onMouseWheel(t)}var e=document.createElement("div");e["custom-time"]=this,e.className="vis-custom-time "+(this.options.id||""),e.style.position="absolute",e.style.top="0px",e.style.height="100%",this.bar=e;var i=document.createElement("div");i.style.position="relative",i.style.top="0px",i.style.left="-10px",i.style.height="100%",i.style.width="20px",i.addEventListener?(i.addEventListener("mousewheel",t.bind(this),!1),i.addEventListener("DOMMouseScroll",t.bind(this),!1)):i.attachEvent("onmousewheel",t.bind(this)),e.appendChild(i),this.hammer=new n(i),this.hammer.on("panstart",this._onDragStart.bind(this)),this.hammer.on("panmove",this._onDrag.bind(this)),this.hammer.on("panend",this._onDragEnd.bind(this)),this.hammer.get("pan").set({threshold:5,direction:n.DIRECTION_HORIZONTAL})},o.prototype.destroy=function(){this.hide(),this.hammer.destroy(),this.hammer=null,this.body=null},o.prototype.redraw=function(){var t=this.body.dom.backgroundVertical;this.bar.parentNode!=t&&(this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),t.appendChild(this.bar));var e=this.body.util.toScreen(this.customTime),i=this.options.locales[this.options.locale];i||(this.warned||(console.log("WARNING: options.locales['"+this.options.locale+"'] not found. See http://visjs.org/docs/timeline/#Localization"),this.warned=!0),i=this.options.locales.en);var o=this.options.title;return void 0===o?(o=i.time+": "+this.options.moment(this.customTime).format("dddd, MMMM Do YYYY, H:mm:ss"),o=o.charAt(0).toUpperCase()+o.substring(1)):"function"==typeof o&&(o=o.call(this.customTime)),this.bar.style.left=e+"px",this.bar.title=o,!1},o.prototype.hide=function(){this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar)},o.prototype.setCustomTime=function(t){this.customTime=s.convert(t,"Date"),this.redraw()},o.prototype.getCustomTime=function(){return new Date(this.customTime.valueOf())},o.prototype.setCustomTitle=function(t){this.options.title=t},o.prototype._onDragStart=function(t){this.eventParams.dragging=!0,this.eventParams.customTime=this.customTime,t.stopPropagation()},o.prototype._onDrag=function(t){if(this.eventParams.dragging){var e=this.body.util.toScreen(this.eventParams.customTime)+t.deltaX,i=this.body.util.toTime(e);this.setCustomTime(i),this.body.emitter.emit("timechange",{id:this.options.id,time:new Date(this.customTime.valueOf()),event:t}),t.stopPropagation()}},o.prototype._onDragEnd=function(t){this.eventParams.dragging&&(this.body.emitter.emit("timechanged",{id:this.options.id,time:new Date(this.customTime.valueOf()),event:t}),t.stopPropagation())},o.customTimeFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("custom-time"))return e["custom-time"];e=e.parentNode}return null},t.exports=o},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=i(2),d=i(117).default,l=i(48).default,u=i(193).default,c=i(200).default,p=i(201).default,f=i(202).default,m=i(203).default,v=i(204).default,g=i(205).default,y=i(206).default,b=i(207).default,_=i(208).default,w=i(209).default,x=i(210).default,k=i(211).default,S=i(212).default,D=i(213).default,M=i(15),C=M.printStyle,O=function(){function t(e,i,o,n,r,a){(0,s.default)(this,t),this.options=h.bridgeObject(r),this.globalOptions=r,this.defaultOptions=a,this.body=i,this.edges=[],this.id=void 0,this.imagelist=o,this.grouplist=n,this.x=void 0,this.y=void 0,this.baseSize=this.options.size,this.baseFontSize=this.options.font.size,this.predefinedPosition=!1,this.selected=!1,this.hover=!1,this.labelModule=new d(this.body,this.options,!1),this.setOptions(e)}return(0,a.default)(t,[{key:"attachEdge",value:function(t){-1===this.edges.indexOf(t)&&this.edges.push(t)}},{key:"detachEdge",value:function(t){var e=this.edges.indexOf(t);-1!=e&&this.edges.splice(e,1)}},{key:"setOptions",value:function(e){var i=this.options.shape;if(e){if(void 0!==e.id&&(this.id=e.id),void 0===this.id)throw new Error("Node must have an id");t.checkMass(e,this.id),void 0!==e.x&&(null===e.x?(this.x=void 0,this.predefinedPosition=!1):(this.x=parseInt(e.x),this.predefinedPosition=!0)),void 0!==e.y&&(null===e.y?(this.y=void 0,this.predefinedPosition=!1):(this.y=parseInt(e.y),this.predefinedPosition=!0)),void 0!==e.size&&(this.baseSize=e.size),void 0!==e.value&&(e.value=parseFloat(e.value)),t.parseOptions(this.options,e,!0,this.globalOptions,this.grouplist);var o=[e,this.options,this.defaultOptions];return this.chooser=l.choosify("node",o),this._load_images(),this.updateLabelModule(e),this.updateShape(i),void 0!==e.hidden||void 0!==e.physics}}},{key:"_load_images",value:function(){if("circularImage"===this.options.shape||"image"===this.options.shape){if(void 0===this.options.image)throw new Error("Option image must be defined for node type '"+this.options.shape+"'");if(void 0===this.imagelist)throw new Error("Internal Error: No images provided");if("string"==typeof this.options.image)this.imageObj=this.imagelist.load(this.options.image,this.options.brokenImage,this.id);else{if(void 0===this.options.image.unselected)throw new Error("No unselected image provided");this.imageObj=this.imagelist.load(this.options.image.unselected,this.options.brokenImage,this.id),void 0!==this.options.image.selected?this.imageObjAlt=this.imagelist.load(this.options.image.selected,this.options.brokenImage,this.id):this.imageObjAlt=void 0}}}},{key:"getFormattingValues",value:function(){var t={color:this.options.color.background,borderWidth:this.options.borderWidth,borderColor:this.options.color.border,size:this.options.size,borderDashes:this.options.shapeProperties.borderDashes,borderRadius:this.options.shapeProperties.borderRadius,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y};return this.selected||this.hover?!0===this.chooser?this.selected?(t.borderWidth*=2,t.color=this.options.color.highlight.background,t.borderColor=this.options.color.highlight.border,t.shadow=this.options.shadow.enabled):this.hover&&(t.color=this.options.color.hover.background,t.borderColor=this.options.color.hover.border,t.shadow=this.options.shadow.enabled):"function"==typeof this.chooser&&(this.chooser(t,this.options.id,this.selected,this.hover),!1===t.shadow&&(t.shadowColor===this.options.shadow.color&&t.shadowSize===this.options.shadow.size&&t.shadowX===this.options.shadow.x&&t.shadowY===this.options.shadow.y||(t.shadow=!0))):t.shadow=this.options.shadow.enabled,t}},{key:"updateLabelModule",value:function(e){void 0!==this.options.label&&null!==this.options.label||(this.options.label=""),t.updateGroupOptions(this.options,e,this.grouplist);var i=this.grouplist.get(this.options.group,!1),o=[e,this.options,i,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,o),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}},{key:"updateShape",value:function(t){if(t===this.options.shape&&this.shape)this.shape.setOptions(this.options,this.imageObj,this.imageObjAlt);else switch(this.options.shape){case"box":this.shape=new u(this.options,this.body,this.labelModule);break;case"circle":this.shape=new c(this.options,this.body,this.labelModule);break;case"circularImage":this.shape=new p(this.options,this.body,this.labelModule,this.imageObj,this.imageObjAlt);break;case"database":this.shape=new f(this.options,this.body,this.labelModule);break;case"diamond":this.shape=new m(this.options,this.body,this.labelModule);break;case"dot":this.shape=new v(this.options,this.body,this.labelModule);break;case"ellipse":this.shape=new g(this.options,this.body,this.labelModule);break;case"icon":this.shape=new y(this.options,this.body,this.labelModule);break;case"image":this.shape=new b(this.options,this.body,this.labelModule,this.imageObj,this.imageObjAlt);break;case"square":this.shape=new _(this.options,this.body,this.labelModule);break;case"hexagon":this.shape=new w(this.options,this.body,this.labelModule);break;case"star":this.shape=new x(this.options,this.body,this.labelModule);break;case"text":this.shape=new k(this.options,this.body,this.labelModule);break;case"triangle":this.shape=new S(this.options,this.body,this.labelModule);break;case"triangleDown":this.shape=new D(this.options,this.body,this.labelModule);break;default:this.shape=new g(this.options,this.body,this.labelModule)}this.needsRefresh()}},{key:"select",value:function(){this.selected=!0,this.needsRefresh()}},{key:"unselect",value:function(){this.selected=!1,this.needsRefresh()}},{key:"needsRefresh",value:function(){this.shape.refreshNeeded=!0}},{key:"getTitle",value:function(){return this.options.title}},{key:"distanceToBorder",value:function(t,e){return this.shape.distanceToBorder(t,e)}},{key:"isFixed",value:function(){return this.options.fixed.x&&this.options.fixed.y}},{key:"isSelected",value:function(){return this.selected}},{key:"getValue",value:function(){return this.options.value}},{key:"getLabelSize",value:function(){return this.labelModule.size()}},{key:"setValueRange",value:function(t,e,i){if(void 0!==this.options.value){var o=this.options.scaling.customScalingFunction(t,e,i,this.options.value),n=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){var s=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+o*s}this.options.size=this.options.scaling.min+o*n}else this.options.size=this.baseSize,this.options.font.size=this.baseFontSize;this.updateLabelModule()}},{key:"draw",value:function(t){var e=this.getFormattingValues();this.shape.draw(t,this.x,this.y,this.selected,this.hover,e)}},{key:"updateBoundingBox",value:function(t){this.shape.updateBoundingBox(this.x,this.y,t)}},{key:"resize",value:function(t){var e=this.getFormattingValues();this.shape.resize(t,this.selected,this.hover,e)}},{key:"getItemsOnPoint",value:function(t){var e=[];return this.labelModule.visible()&&l.pointInRect(this.labelModule.getSize(),t)&&e.push({nodeId:this.id,labelId:0}),l.pointInRect(this.shape.boundingBox,t)&&e.push({nodeId:this.id}),e}},{key:"isOverlappingWith",value:function(t){return this.shape.left<t.right&&this.shape.left+this.shape.width>t.left&&this.shape.top<t.bottom&&this.shape.top+this.shape.height>t.top}},{key:"isBoundingBoxOverlappingWith",value:function(t){return this.shape.boundingBox.left<t.right&&this.shape.boundingBox.right>t.left&&this.shape.boundingBox.top<t.bottom&&this.shape.boundingBox.bottom>t.top}}],[{key:"updateGroupOptions",value:function(t,e,i){if(void 0!==i){var o=t.group;if(void 0!==e&&void 0!==e.group&&o!==e.group)throw new Error("updateGroupOptions: group values in options don't match.");if("number"==typeof o||"string"==typeof o&&""!=o){var n=i.get(o);h.selectiveNotDeepExtend(["font"],t,n),t.color=h.parseColor(t.color)}}}},{key:"parseOptions",value:function(e,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},s=arguments[4],r=["color","fixed","shadow"];if(h.selectiveNotDeepExtend(r,e,i,o),t.checkMass(i),h.mergeOptions(e,i,"shadow",n),void 0!==i.color&&null!==i.color){var a=h.parseColor(i.color);h.fillIfDefined(e.color,a)}else!0===o&&null===i.color&&(e.color=h.bridgeObject(n.color));void 0!==i.fixed&&null!==i.fixed&&("boolean"==typeof i.fixed?(e.fixed.x=i.fixed,e.fixed.y=i.fixed):(void 0!==i.fixed.x&&"boolean"==typeof i.fixed.x&&(e.fixed.x=i.fixed.x),void 0!==i.fixed.y&&"boolean"==typeof i.fixed.y&&(e.fixed.y=i.fixed.y))),!0===o&&null===i.font&&(e.font=h.bridgeObject(n.font)),t.updateGroupOptions(e,i,s),void 0!==i.scaling&&h.mergeOptions(e.scaling,i.scaling,"label",n.scaling)}},{key:"checkMass",value:function(t,e){if(void 0!==t.mass&&t.mass<=0){var i="";void 0!==e&&(i=" in node id: "+e),console.log("%cNegative or zero mass disallowed"+i+", setting mass to 1.",C),t.mass=1}}}]),t}();e.default=O},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(6),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(2),u=function(){function t(){(0,a.default)(this,t)}return(0,d.default)(t,null,[{key:"choosify",value:function(t,e){var i=["node","edge","label"],o=!0,n=l.topMost(e,"chosen");if("boolean"==typeof n)o=n;else if("object"===(void 0===n?"undefined":(0,s.default)(n))){if(-1===i.indexOf(t))throw new Error("choosify: subOption '"+t+"' should be one of '"+i.join("', '")+"'");var r=l.topMost(e,["chosen",t]);"boolean"!=typeof r&&"function"!=typeof r||(o=r)}return o}},{key:"pointInRect",value:function(t,e,i){if(t.width<=0||t.height<=0)return!1;if(void 0!==i){var o={x:e.x-i.x,y:e.y-i.y};if(0!==i.angle){var n=-i.angle;e={x:Math.cos(n)*o.x-Math.sin(n)*o.y,y:Math.sin(n)*o.x+Math.cos(n)*o.y}}else e=o}var s=t.x+t.width,r=t.y+t.width;return t.left<e.x&&s>e.x&&t.top<e.y&&r>e.y}},{key:"isValidLabel",value:function(t){return"string"==typeof t&&""!==t}}]),t}();e.default=u},function(t,e,i){i(125);for(var o=i(18),n=i(26),s=i(31),r=i(13)("toStringTag"),a="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),h=0;h<a.length;h++){var d=a[h],l=o[d],u=l&&l.prototype;u&&!u[r]&&n(u,r,d),s[d]=s.Array}},function(t,e){var i={}.toString;t.exports=function(t){return i.call(t).slice(8,-1)}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on  "+t);return t}},function(t,e){t.exports=!0},function(t,e,i){var o=i(32);t.exports=function(t,e){if(!o(t))return t;var i,n;if(e&&"function"==typeof(i=t.toString)&&!o(n=i.call(t)))return n;if("function"==typeof(i=t.valueOf)&&!o(n=i.call(t)))return n;if(!e&&"function"==typeof(i=t.toString)&&!o(n=i.call(t)))return n;throw TypeError("Can't convert object to primitive value")}},function(t,e,i){var o=i(27),n=i(130),s=i(58),r=i(56)("IE_PROTO"),a=function(){},h=function(){var t,e=i(82)("iframe"),o=s.length;for(e.style.display="none",i(134).appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write("<script>document.F=Object<\/script>"),t.close(),h=t.F;o--;)delete h.prototype[s[o]];return h()};t.exports=Object.create||function(t,e){var i;return null!==t?(a.prototype=o(t),i=new a,a.prototype=null,i[r]=t):i=h(),void 0===e?i:n(i,e)}},function(t,e){var i=Math.ceil,o=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?o:i)(t)}},function(t,e,i){var o=i(57)("keys"),n=i(40);t.exports=function(t){return o[t]||(o[t]=n(t))}},function(t,e,i){var o=i(18),n=o["__core-js_shared__"]||(o["__core-js_shared__"]={});t.exports=function(t){return n[t]||(n[t]={})}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,i){var o=i(20).f,n=i(22),s=i(13)("toStringTag");t.exports=function(t,e,i){t&&!n(t=i?t:t.prototype,s)&&o(t,s,{configurable:!0,value:e})}},function(t,e,i){var o=i(135)(!0);i(79)(String,"String",function(t){this._t=String(t),this._i=0},function(){var t,e=this._t,i=this._i;return i>=e.length?{value:void 0,done:!0}:(t=o(e,i),this._i+=t.length,{value:t,done:!1})})},function(t,e,i){e.f=i(13)},function(t,e,i){var o=i(18),n=i(7),s=i(52),r=i(61),a=i(20).f;t.exports=function(t){var e=n.Symbol||(n.Symbol=s?{}:o.Symbol||{});"_"==t.charAt(0)||t in e||a(e,t,{value:r.f(t)})}},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(t,e){var i=p().hours(0).minutes(0).seconds(0).milliseconds(0),o=i.clone().add(-3,"days").valueOf(),n=i.clone().add(3,"days").valueOf();this.millisecondsPerPixelCache=void 0,void 0===e?(this.start=o,this.end=n):(this.start=e.start||o,this.end=e.end||n),this.rolling=!1,this.body=t,this.deltaDifference=0,this.scaleOffset=0,this.startToFront=!1,this.endToFront=!0,this.defaultOptions={rtl:!1,start:null,end:null,moment:p,direction:"horizontal",moveable:!0,zoomable:!0,min:null,max:null,zoomMin:10,zoomMax:31536e10,rollingMode:{follow:!1,offset:.5}},this.options=c.extend({},this.defaultOptions),this.props={touch:{}},this.animationTimer=null,this.body.emitter.on("panstart",this._onDragStart.bind(this)),this.body.emitter.on("panmove",this._onDrag.bind(this)),this.body.emitter.on("panend",this._onDragEnd.bind(this)),this.body.emitter.on("mousewheel",this._onMouseWheel.bind(this)),this.body.emitter.on("touch",this._onTouch.bind(this)),this.body.emitter.on("pinch",this._onPinch.bind(this)),this.body.dom.rollingModeBtn.addEventListener("click",this.startRolling.bind(this)),this.setOptions(e)}function s(t){if("horizontal"!=t&&"vertical"!=t)throw new TypeError('Unknown direction "'+t+'". Choose "horizontal" or "vertical".')}var r=i(8),a=o(r),h=i(19),d=o(h),l=i(6),u=o(l),c=i(2),p=i(9),f=i(16),m=i(36);n.prototype=new f,n.prototype.setOptions=function(t){if(t){var e=["animation","direction","min","max","zoomMin","zoomMax","moveable","zoomable","moment","activate","hiddenDates","zoomKey","rtl","showCurrentTime","rollingMode","horizontalScroll"];c.selectiveExtend(e,this.options,t),t.rollingMode&&t.rollingMode.follow&&this.startRolling(),("start"in t||"end"in t)&&this.setRange(t.start,t.end)}},n.prototype.startRolling=function(){function t(){e.stopRolling(),e.rolling=!0;var i=e.end-e.start,o=c.convert(new Date,"Date").valueOf(),n=o-i*e.options.rollingMode.offset,s=o+i*(1-e.options.rollingMode.offset),r={animation:!1};e.setRange(n,s,r),i=1/e.conversion(e.body.domProps.center.width).scale/10,i<30&&(i=30),i>1e3&&(i=1e3),e.body.dom.rollingModeBtn.style.visibility="hidden",e.currentTimeTimer=setTimeout(t,i)}var e=this;t()},n.prototype.stopRolling=function(){void 0!==this.currentTimeTimer&&(clearTimeout(this.currentTimeTimer),this.rolling=!1,this.body.dom.rollingModeBtn.style.visibility="visible")},n.prototype.setRange=function(t,e,i,o,n){i||(i={}),!0!==i.byUser&&(i.byUser=!1);var s=this,r=void 0!=t?c.convert(t,"Date").valueOf():null,h=void 0!=e?c.convert(e,"Date").valueOf():null;if(this._cancelAnimation(),this.millisecondsPerPixelCache=void 0,i.animation){var l=this.start,p=this.end,f="object"===(0,u.default)(i.animation)&&"duration"in i.animation?i.animation.duration:500,v="object"===(0,u.default)(i.animation)&&"easingFunction"in i.animation?i.animation.easingFunction:"easeInOutQuad",g=c.easingFunctions[v];if(!g)throw new Error("Unknown easing function "+(0,d.default)(v)+". Choose from: "+(0,a.default)(c.easingFunctions).join(", "));var y=(new Date).valueOf(),b=!1;return function t(){if(!s.props.touch.dragging){var e=(new Date).valueOf(),a=e-y,d=g(a/f),u=a>f,c=u||null===r?r:l+(r-l)*d,v=u||null===h?h:p+(h-p)*d;_=s._applyRange(c,v),m.updateHiddenDates(s.options.moment,s.body,s.options.hiddenDates),b=b||_;var w={start:new Date(s.start),end:new Date(s.end),byUser:i.byUser,event:i.event};if(n&&n(d,_,u),_&&s.body.emitter.emit("rangechange",w),u){if(b&&(s.body.emitter.emit("rangechanged",w),o))return o()}else s.animationTimer=setTimeout(t,20)}}()}var _=this._applyRange(r,h);if(m.updateHiddenDates(this.options.moment,this.body,this.options.hiddenDates),_){var w={start:new Date(this.start),end:new Date(this.end),byUser:i.byUser,event:i.event};if(this.body.emitter.emit("rangechange",w),clearTimeout(s.timeoutID),s.timeoutID=setTimeout(function(){s.body.emitter.emit("rangechanged",w)},200),o)return o()}},n.prototype.getMillisecondsPerPixel=function(){return void 0===this.millisecondsPerPixelCache&&(this.millisecondsPerPixelCache=(this.end-this.start)/this.body.dom.center.clientWidth),this.millisecondsPerPixelCache},n.prototype._cancelAnimation=function(){this.animationTimer&&(clearTimeout(this.animationTimer),this.animationTimer=null)},n.prototype._applyRange=function(t,e){var i,o=null!=t?c.convert(t,"Date").valueOf():this.start,n=null!=e?c.convert(e,"Date").valueOf():this.end,s=null!=this.options.max?c.convert(this.options.max,"Date").valueOf():null,r=null!=this.options.min?c.convert(this.options.min,"Date").valueOf():null;if(isNaN(o)||null===o)throw new Error('Invalid start "'+t+'"');if(isNaN(n)||null===n)throw new Error('Invalid end "'+e+'"');if(n<o&&(n=o),null!==r&&o<r&&(i=r-o,o+=i,n+=i,null!=s&&n>s&&(n=s)),null!==s&&n>s&&(i=n-s,o-=i,n-=i,null!=r&&o<r&&(o=r)),null!==this.options.zoomMin){var a=parseFloat(this.options.zoomMin);if(a<0&&(a=0),n-o<a){this.end-this.start===a&&o>=this.start-.5&&n<=this.end?(o=this.start,n=this.end):(i=a-(n-o),o-=i/2,n+=i/2)}}if(null!==this.options.zoomMax){var h=parseFloat(this.options.zoomMax);h<0&&(h=0),n-o>h&&(this.end-this.start===h&&o<this.start&&n>this.end?(o=this.start,n=this.end):(i=n-o-h,o+=i/2,n-=i/2))}var d=this.start!=o||this.end!=n;return o>=this.start&&o<=this.end||n>=this.start&&n<=this.end||this.start>=o&&this.start<=n||this.end>=o&&this.end<=n||this.body.emitter.emit("checkRangedItems"),this.start=o,this.end=n,d},n.prototype.getRange=function(){return{start:this.start,end:this.end}},n.prototype.conversion=function(t,e){return n.conversion(this.start,this.end,t,e)},n.conversion=function(t,e,i,o){return void 0===o&&(o=0),0!=i&&e-t!=0?{offset:t,scale:i/(e-t-o)}:{offset:0,scale:1}},n.prototype._onDragStart=function(t){this.deltaDifference=0,this.previousDelta=0,this.options.moveable&&this._isInsideRange(t)&&this.props.touch.allowDragging&&(this.stopRolling(),this.props.touch.start=this.start,this.props.touch.end=this.end,this.props.touch.dragging=!0,this.body.dom.root&&(this.body.dom.root.style.cursor="move"))},n.prototype._onDrag=function(t){if(t&&this.props.touch.dragging&&this.options.moveable&&this.props.touch.allowDragging){var e=this.options.direction;s(e);var i="horizontal"==e?t.deltaX:t.deltaY;i-=this.deltaDifference;var o=this.props.touch.end-this.props.touch.start;o-=m.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end);var n,r="horizontal"==e?this.body.domProps.center.width:this.body.domProps.center.height;n=this.options.rtl?i/r*o:-i/r*o;var a=this.props.touch.start+n,h=this.props.touch.end+n,d=m.snapAwayFromHidden(this.body.hiddenDates,a,this.previousDelta-i,!0),l=m.snapAwayFromHidden(this.body.hiddenDates,h,this.previousDelta-i,!0);if(d!=a||l!=h)return this.deltaDifference+=i,this.props.touch.start=d,this.props.touch.end=l,void this._onDrag(t);this.previousDelta=i,this._applyRange(a,h);var u=new Date(this.start),c=new Date(this.end);this.body.emitter.emit("rangechange",{start:u,end:c,byUser:!0,event:t}),this.body.emitter.emit("panmove")}},n.prototype._onDragEnd=function(t){this.props.touch.dragging&&this.options.moveable&&this.props.touch.allowDragging&&(this.props.touch.dragging=!1,this.body.dom.root&&(this.body.dom.root.style.cursor="auto"),this.body.emitter.emit("rangechanged",{start:new Date(this.start),end:new Date(this.end),byUser:!0,event:t}))},n.prototype._onMouseWheel=function(t){var e=0;if(t.wheelDelta?e=t.wheelDelta/120:t.detail&&(e=-t.detail/3),!(this.options.zoomKey&&!t[this.options.zoomKey]&&this.options.zoomable||!this.options.zoomable&&this.options.moveable)&&this.options.zoomable&&this.options.moveable&&this._isInsideRange(t)&&e){var i;i=e<0?1-e/5:1/(1+e/5);var o;if(this.rolling)o=this.start+(this.end-this.start)*this.options.rollingMode.offset;else{var n=this.getPointer({x:t.clientX,y:t.clientY},this.body.dom.center);o=this._pointerToDate(n)}this.zoom(i,o,e,t),t.preventDefault()}},n.prototype._onTouch=function(t){this.props.touch.start=this.start,this.props.touch.end=this.end,this.props.touch.allowDragging=!0,this.props.touch.center=null,this.scaleOffset=0,this.deltaDifference=0,c.preventDefault(t)},n.prototype._onPinch=function(t){if(this.options.zoomable&&this.options.moveable){c.preventDefault(t),this.props.touch.allowDragging=!1,this.props.touch.center||(this.props.touch.center=this.getPointer(t.center,this.body.dom.center)),this.stopRolling();var e=1/(t.scale+this.scaleOffset),i=this._pointerToDate(this.props.touch.center),o=m.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end),n=m.getHiddenDurationBefore(this.options.moment,this.body.hiddenDates,this,i),s=o-n,r=i-n+(this.props.touch.start-(i-n))*e,a=i+s+(this.props.touch.end-(i+s))*e;this.startToFront=1-e<=0,this.endToFront=e-1<=0;var h=m.snapAwayFromHidden(this.body.hiddenDates,r,1-e,!0),d=m.snapAwayFromHidden(this.body.hiddenDates,a,e-1,!0);h==r&&d==a||(this.props.touch.start=h,this.props.touch.end=d,this.scaleOffset=1-t.scale,r=h,a=d);var l={animation:!1,byUser:!0,event:t};this.setRange(r,a,l),this.startToFront=!1,this.endToFront=!0}},n.prototype._isInsideRange=function(t){var e,i=t.center?t.center.x:t.clientX;e=this.options.rtl?i-c.getAbsoluteLeft(this.body.dom.centerContainer):c.getAbsoluteRight(this.body.dom.centerContainer)-i;var o=this.body.util.toTime(e);return o>=this.start&&o<=this.end},n.prototype._pointerToDate=function(t){var e,i=this.options.direction;if(s(i),"horizontal"==i)return this.body.util.toTime(t.x).valueOf();var o=this.body.domProps.center.height;return e=this.conversion(o),t.y/e.scale+e.offset},n.prototype.getPointer=function(t,e){return this.options.rtl?{x:c.getAbsoluteRight(e)-t.x,y:t.y-c.getAbsoluteTop(e)}:{x:t.x-c.getAbsoluteLeft(e),y:t.y-c.getAbsoluteTop(e)}},n.prototype.zoom=function(t,e,i,o){null==e&&(e=(this.start+this.end)/2);var n=m.getHiddenDurationBetween(this.body.hiddenDates,this.start,this.end),s=m.getHiddenDurationBefore(this.options.moment,this.body.hiddenDates,this,e),r=n-s,a=e-s+(this.start-(e-s))*t,h=e+r+(this.end-(e+r))*t;this.startToFront=!(i>0),this.endToFront=!(-i>0)
+;var d=m.snapAwayFromHidden(this.body.hiddenDates,a,i,!0),l=m.snapAwayFromHidden(this.body.hiddenDates,h,-i,!0);d==a&&l==h||(a=d,h=l);var u={animation:!1,byUser:!0,event:o};this.setRange(a,h,u),this.startToFront=!1,this.endToFront=!0},n.prototype.move=function(t){var e=this.end-this.start,i=this.start+e*t,o=this.end+e*t;this.start=i,this.end=o},n.prototype.moveTo=function(t){var e=(this.start+this.end)/2,i=e-t,o=this.start-i,n=this.end-i,s={animation:!1,byUser:!0,event:null};this.setRange(o,n,s)},t.exports=n},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(){}var s=i(19),r=o(s),a=i(6),h=o(a),d=i(44),l=i(10),u=i(37),c=i(2),p=i(45),f=i(97),m=i(36),v=i(46);d(n.prototype),n.prototype._create=function(t){function e(t){this.isActive()&&this.emit("mousewheel",t);var e=0,i=0;if("detail"in t&&(i=-1*t.detail),"wheelDelta"in t&&(i=t.wheelDelta),"wheelDeltaY"in t&&(i=t.wheelDeltaY),"wheelDeltaX"in t&&(e=-1*t.wheelDeltaX),"axis"in t&&t.axis===t.HORIZONTAL_AXIS&&(e=-1*i,i=0),"deltaY"in t&&(i=-1*t.deltaY),"deltaX"in t&&(e=t.deltaX),this.options.zoomKey&&!t[this.options.zoomKey])if(t.preventDefault(),this.options.verticalScroll&&Math.abs(i)>=Math.abs(e)){var o=this.props.scrollTop,n=o+i;this.isActive()&&(this._setScrollTop(n),this._redraw(),this.emit("scroll",t))}else if(this.options.horizontalScroll){var s=Math.abs(e)>=Math.abs(i)?e:i,r=s/120*(this.range.end-this.range.start)/20,a=this.range.start+r,h=this.range.end+r,d={animation:!1,byUser:!0,event:t};this.range.setRange(a,h,d)}}function i(t){if(s.options.verticalScroll&&(t.preventDefault(),s.isActive())){var e=-t.target.scrollTop;s._setScrollTop(e),s._redraw(),s.emit("scrollSide",t)}}function o(t){if(t.preventDefault&&t.preventDefault(),!(!t.target.className.indexOf("vis")>-1||a))return t.dataTransfer.dropEffect="move",a=!0,!1}function n(t){t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation();try{var e=JSON.parse(t.dataTransfer.getData("text"));if(!e||!e.content)return}catch(t){return!1}return a=!1,t.center={x:t.clientX,y:t.clientY},"item"!==e.target?s.itemSet._onAddItem(t):s.itemSet._onDropObjectOnItem(t),s.emit("drop",s.getEventProperties(t)),!1}this.dom={},this.dom.container=t,this.dom.root=document.createElement("div"),this.dom.background=document.createElement("div"),this.dom.backgroundVertical=document.createElement("div"),this.dom.backgroundHorizontal=document.createElement("div"),this.dom.centerContainer=document.createElement("div"),this.dom.leftContainer=document.createElement("div"),this.dom.rightContainer=document.createElement("div"),this.dom.center=document.createElement("div"),this.dom.left=document.createElement("div"),this.dom.right=document.createElement("div"),this.dom.top=document.createElement("div"),this.dom.bottom=document.createElement("div"),this.dom.shadowTop=document.createElement("div"),this.dom.shadowBottom=document.createElement("div"),this.dom.shadowTopLeft=document.createElement("div"),this.dom.shadowBottomLeft=document.createElement("div"),this.dom.shadowTopRight=document.createElement("div"),this.dom.shadowBottomRight=document.createElement("div"),this.dom.rollingModeBtn=document.createElement("div"),this.dom.root.className="vis-timeline",this.dom.background.className="vis-panel vis-background",this.dom.backgroundVertical.className="vis-panel vis-background vis-vertical",this.dom.backgroundHorizontal.className="vis-panel vis-background vis-horizontal",this.dom.centerContainer.className="vis-panel vis-center",this.dom.leftContainer.className="vis-panel vis-left",this.dom.rightContainer.className="vis-panel vis-right",this.dom.top.className="vis-panel vis-top",this.dom.bottom.className="vis-panel vis-bottom",this.dom.left.className="vis-content",this.dom.center.className="vis-content",this.dom.right.className="vis-content",this.dom.shadowTop.className="vis-shadow vis-top",this.dom.shadowBottom.className="vis-shadow vis-bottom",this.dom.shadowTopLeft.className="vis-shadow vis-top",this.dom.shadowBottomLeft.className="vis-shadow vis-bottom",this.dom.shadowTopRight.className="vis-shadow vis-top",this.dom.shadowBottomRight.className="vis-shadow vis-bottom",this.dom.rollingModeBtn.className="vis-rolling-mode-btn",this.dom.root.appendChild(this.dom.background),this.dom.root.appendChild(this.dom.backgroundVertical),this.dom.root.appendChild(this.dom.backgroundHorizontal),this.dom.root.appendChild(this.dom.centerContainer),this.dom.root.appendChild(this.dom.leftContainer),this.dom.root.appendChild(this.dom.rightContainer),this.dom.root.appendChild(this.dom.top),this.dom.root.appendChild(this.dom.bottom),this.dom.root.appendChild(this.dom.bottom),this.dom.root.appendChild(this.dom.rollingModeBtn),this.dom.centerContainer.appendChild(this.dom.center),this.dom.leftContainer.appendChild(this.dom.left),this.dom.rightContainer.appendChild(this.dom.right),this.dom.centerContainer.appendChild(this.dom.shadowTop),this.dom.centerContainer.appendChild(this.dom.shadowBottom),this.dom.leftContainer.appendChild(this.dom.shadowTopLeft),this.dom.leftContainer.appendChild(this.dom.shadowBottomLeft),this.dom.rightContainer.appendChild(this.dom.shadowTopRight),this.dom.rightContainer.appendChild(this.dom.shadowBottomRight),this.props={root:{},background:{},centerContainer:{},leftContainer:{},rightContainer:{},center:{},left:{},right:{},top:{},bottom:{},border:{},scrollTop:0,scrollTopMin:0},this.on("rangechange",function(){!0===this.initialDrawDone&&this._redraw()}.bind(this)),this.on("rangechanged",function(){this.initialRangeChangeDone||(this.initialRangeChangeDone=!0)}.bind(this)),this.on("touch",this._onTouch.bind(this)),this.on("panmove",this._onDrag.bind(this));var s=this;this._origRedraw=this._redraw.bind(this),this._redraw=c.throttle(this._origRedraw),this.on("_change",function(t){s.itemSet&&s.itemSet.initialItemSetDrawn&&t&&1==t.queue?s._redraw():s._origRedraw()}),this.hammer=new l(this.dom.root);var r=this.hammer.get("pinch").set({enable:!0});u.disablePreventDefaultVertically(r),this.hammer.get("pan").set({threshold:5,direction:l.DIRECTION_HORIZONTAL}),this.listeners={},["tap","doubletap","press","pinch","pan","panstart","panmove","panend"].forEach(function(t){var e=function(e){s.isActive()&&s.emit(t,e)};s.hammer.on(t,e),s.listeners[t]=e}),u.onTouch(this.hammer,function(t){s.emit("touch",t)}.bind(this)),u.onRelease(this.hammer,function(t){s.emit("release",t)}.bind(this)),this.dom.centerContainer.addEventListener?(this.dom.centerContainer.addEventListener("mousewheel",e.bind(this),!1),this.dom.centerContainer.addEventListener("DOMMouseScroll",e.bind(this),!1)):this.dom.centerContainer.attachEvent("onmousewheel",e.bind(this)),this.dom.left.parentNode.addEventListener("scroll",i.bind(this)),this.dom.right.parentNode.addEventListener("scroll",i.bind(this));var a=!1;if(this.dom.center.addEventListener("dragover",o.bind(this),!1),this.dom.center.addEventListener("drop",n.bind(this),!1),this.customTimes=[],this.touch={},this.redrawCount=0,this.initialDrawDone=!1,this.initialRangeChangeDone=!1,!t)throw new Error("No container provided");t.appendChild(this.dom.root)},n.prototype.setOptions=function(t){if(t){var e=["width","height","minHeight","maxHeight","autoResize","start","end","clickToUse","dataAttributes","hiddenDates","locale","locales","moment","rtl","zoomKey","horizontalScroll","verticalScroll"];if(c.selectiveExtend(e,this.options,t),this.dom.rollingModeBtn.style.visibility="hidden",this.options.rtl&&(this.dom.container.style.direction="rtl",this.dom.backgroundVertical.className="vis-panel vis-background vis-vertical-rtl"),this.options.verticalScroll&&(this.options.rtl?this.dom.rightContainer.className="vis-panel vis-right vis-vertical-scroll":this.dom.leftContainer.className="vis-panel vis-left vis-vertical-scroll"),"object"!==(0,h.default)(this.options.orientation)&&(this.options.orientation={item:void 0,axis:void 0}),"orientation"in t&&("string"==typeof t.orientation?this.options.orientation={item:t.orientation,axis:t.orientation}:"object"===(0,h.default)(t.orientation)&&("item"in t.orientation&&(this.options.orientation.item=t.orientation.item),"axis"in t.orientation&&(this.options.orientation.axis=t.orientation.axis))),"both"===this.options.orientation.axis){if(!this.timeAxis2){var i=this.timeAxis2=new p(this.body);i.setOptions=function(t){var e=t?c.extend({},t):{};e.orientation="top",p.prototype.setOptions.call(i,e)},this.components.push(i)}}else if(this.timeAxis2){var o=this.components.indexOf(this.timeAxis2);-1!==o&&this.components.splice(o,1),this.timeAxis2.destroy(),this.timeAxis2=null}if("function"==typeof t.drawPoints&&(t.drawPoints={onRender:t.drawPoints}),"hiddenDates"in this.options&&m.convertHiddenOptions(this.options.moment,this.body,this.options.hiddenDates),"clickToUse"in t&&(t.clickToUse?this.activator||(this.activator=new f(this.dom.root)):this.activator&&(this.activator.destroy(),delete this.activator)),"showCustomTime"in t)throw new Error("Option `showCustomTime` is deprecated. Create a custom time bar via timeline.addCustomTime(time [, id])");this._initAutoResize()}if(this.components.forEach(function(e){return e.setOptions(t)}),"configure"in t){this.configurator||(this.configurator=this._createConfigurator()),this.configurator.setOptions(t.configure);var n=c.deepExtend({},this.options);this.components.forEach(function(t){c.deepExtend(n,t.options)}),this.configurator.setModuleOptions({global:n})}this._redraw()},n.prototype.isActive=function(){return!this.activator||this.activator.active},n.prototype.destroy=function(){this.setItems(null),this.setGroups(null),this.off(),this._stopAutoResize(),this.dom.root.parentNode&&this.dom.root.parentNode.removeChild(this.dom.root),this.dom=null,this.activator&&(this.activator.destroy(),delete this.activator);for(var t in this.listeners)this.listeners.hasOwnProperty(t)&&delete this.listeners[t];this.listeners=null,this.hammer=null,this.components.forEach(function(t){return t.destroy()}),this.body=null},n.prototype.setCustomTime=function(t,e){var i=this.customTimes.filter(function(t){return e===t.options.id});if(0===i.length)throw new Error("No custom time bar found with id "+(0,r.default)(e));i.length>0&&i[0].setCustomTime(t)},n.prototype.getCustomTime=function(t){var e=this.customTimes.filter(function(e){return e.options.id===t});if(0===e.length)throw new Error("No custom time bar found with id "+(0,r.default)(t));return e[0].getCustomTime()},n.prototype.setCustomTimeTitle=function(t,e){var i=this.customTimes.filter(function(t){return t.options.id===e});if(0===i.length)throw new Error("No custom time bar found with id "+(0,r.default)(e));if(i.length>0)return i[0].setCustomTitle(t)},n.prototype.getEventProperties=function(t){return{event:t}},n.prototype.addCustomTime=function(t,e){var i=void 0!==t?c.convert(t,"Date").valueOf():new Date;if(this.customTimes.some(function(t){return t.options.id===e}))throw new Error("A custom time with id "+(0,r.default)(e)+" already exists");var o=new v(this.body,c.extend({},this.options,{time:i,id:e}));return this.customTimes.push(o),this.components.push(o),this._redraw(),e},n.prototype.removeCustomTime=function(t){var e=this.customTimes.filter(function(e){return e.options.id===t});if(0===e.length)throw new Error("No custom time bar found with id "+(0,r.default)(t));e.forEach(function(t){this.customTimes.splice(this.customTimes.indexOf(t),1),this.components.splice(this.components.indexOf(t),1),t.destroy()}.bind(this))},n.prototype.getVisibleItems=function(){return this.itemSet&&this.itemSet.getVisibleItems()||[]},n.prototype.fit=function(t,e){var i=this.getDataRange();if(null!==i.min||null!==i.max){var o=i.max-i.min,n=new Date(i.min.valueOf()-.01*o),s=new Date(i.max.valueOf()+.01*o),r=!t||void 0===t.animation||t.animation;this.range.setRange(n,s,{animation:r},e)}},n.prototype.getDataRange=function(){throw new Error("Cannot invoke abstract method getDataRange")},n.prototype.setWindow=function(t,e,i,o){"function"==typeof arguments[2]&&(o=arguments[2],i={});var n,s;1==arguments.length?(s=arguments[0],n=void 0===s.animation||s.animation,this.range.setRange(s.start,s.end,{animation:n})):2==arguments.length&&"function"==typeof arguments[1]?(s=arguments[0],o=arguments[1],n=void 0===s.animation||s.animation,this.range.setRange(s.start,s.end,{animation:n},o)):(n=!i||void 0===i.animation||i.animation,this.range.setRange(t,e,{animation:n},o))},n.prototype.moveTo=function(t,e,i){"function"==typeof arguments[1]&&(i=arguments[1],e={});var o=this.range.end-this.range.start,n=c.convert(t,"Date").valueOf(),s=n-o/2,r=n+o/2,a=!e||void 0===e.animation||e.animation;this.range.setRange(s,r,{animation:a},i)},n.prototype.getWindow=function(){var t=this.range.getRange();return{start:new Date(t.start),end:new Date(t.end)}},n.prototype.zoomIn=function(t,e,i){if(!(!t||t<0||t>1)){"function"==typeof arguments[1]&&(i=arguments[1],e={});var o=this.getWindow(),n=o.start.valueOf(),s=o.end.valueOf(),r=s-n,a=r/(1+t),h=(r-a)/2,d=n+h,l=s-h;this.setWindow(d,l,e,i)}},n.prototype.zoomOut=function(t,e,i){if(!(!t||t<0||t>1)){"function"==typeof arguments[1]&&(i=arguments[1],e={});var o=this.getWindow(),n=o.start.valueOf(),s=o.end.valueOf(),r=s-n,a=n-r*t/2,h=s+r*t/2;this.setWindow(a,h,e,i)}},n.prototype.redraw=function(){this._redraw()},n.prototype._redraw=function(){this.redrawCount++;var t=!1,e=this.options,i=this.props,o=this.dom;if(o&&o.container&&0!=o.root.offsetWidth){m.updateHiddenDates(this.options.moment,this.body,this.options.hiddenDates),"top"==e.orientation?(c.addClassName(o.root,"vis-top"),c.removeClassName(o.root,"vis-bottom")):(c.removeClassName(o.root,"vis-top"),c.addClassName(o.root,"vis-bottom")),o.root.style.maxHeight=c.option.asSize(e.maxHeight,""),o.root.style.minHeight=c.option.asSize(e.minHeight,""),o.root.style.width=c.option.asSize(e.width,""),i.border.left=(o.centerContainer.offsetWidth-o.centerContainer.clientWidth)/2,i.border.right=i.border.left,i.border.top=(o.centerContainer.offsetHeight-o.centerContainer.clientHeight)/2,i.border.bottom=i.border.top,i.borderRootHeight=o.root.offsetHeight-o.root.clientHeight,i.borderRootWidth=o.root.offsetWidth-o.root.clientWidth,0===o.centerContainer.clientHeight&&(i.border.left=i.border.top,i.border.right=i.border.left),0===o.root.clientHeight&&(i.borderRootWidth=i.borderRootHeight),i.center.height=o.center.offsetHeight,i.left.height=o.left.offsetHeight,i.right.height=o.right.offsetHeight,i.top.height=o.top.clientHeight||-i.border.top,i.bottom.height=o.bottom.clientHeight||-i.border.bottom;var n=Math.max(i.left.height,i.center.height,i.right.height),s=i.top.height+n+i.bottom.height+i.borderRootHeight+i.border.top+i.border.bottom;o.root.style.height=c.option.asSize(e.height,s+"px"),i.root.height=o.root.offsetHeight,i.background.height=i.root.height-i.borderRootHeight;var r=i.root.height-i.top.height-i.bottom.height-i.borderRootHeight;i.centerContainer.height=r,i.leftContainer.height=r,i.rightContainer.height=i.leftContainer.height,i.root.width=o.root.offsetWidth,i.background.width=i.root.width-i.borderRootWidth,this.initialDrawDone||(i.scrollbarWidth=c.getScrollBarWidth()),e.verticalScroll?e.rtl?(i.left.width=o.leftContainer.clientWidth||-i.border.left,i.right.width=o.rightContainer.clientWidth+i.scrollbarWidth||-i.border.right):(i.left.width=o.leftContainer.clientWidth+i.scrollbarWidth||-i.border.left,i.right.width=o.rightContainer.clientWidth||-i.border.right):(i.left.width=o.leftContainer.clientWidth||-i.border.left,i.right.width=o.rightContainer.clientWidth||-i.border.right),this._setDOM();var a=this._updateScrollTop();"top"!=e.orientation.item&&(a+=Math.max(i.centerContainer.height-i.center.height-i.border.top-i.border.bottom,0)),o.center.style.top=a+"px";var h=0==i.scrollTop?"hidden":"",d=i.scrollTop==i.scrollTopMin?"hidden":"";o.shadowTop.style.visibility=h,o.shadowBottom.style.visibility=d,o.shadowTopLeft.style.visibility=h,o.shadowBottomLeft.style.visibility=d,o.shadowTopRight.style.visibility=h,o.shadowBottomRight.style.visibility=d,e.verticalScroll&&(o.rightContainer.className="vis-panel vis-right vis-vertical-scroll",o.leftContainer.className="vis-panel vis-left vis-vertical-scroll",o.shadowTopRight.style.visibility="hidden",o.shadowBottomRight.style.visibility="hidden",o.shadowTopLeft.style.visibility="hidden",o.shadowBottomLeft.style.visibility="hidden",o.left.style.top="0px",o.right.style.top="0px"),(!e.verticalScroll||i.center.height<i.centerContainer.height)&&(o.left.style.top=a+"px",o.right.style.top=a+"px",o.rightContainer.className=o.rightContainer.className.replace(new RegExp("(?:^|\\s)vis-vertical-scroll(?:\\s|$)")," "),o.leftContainer.className=o.leftContainer.className.replace(new RegExp("(?:^|\\s)vis-vertical-scroll(?:\\s|$)")," "),i.left.width=o.leftContainer.clientWidth||-i.border.left,i.right.width=o.rightContainer.clientWidth||-i.border.right,this._setDOM());var u=i.center.height>i.centerContainer.height;this.hammer.get("pan").set({direction:u?l.DIRECTION_ALL:l.DIRECTION_HORIZONTAL}),this.components.forEach(function(e){t=e.redraw()||t});if(t){if(this.redrawCount<5)return void this.body.emitter.emit("_change");console.log("WARNING: infinite loop in redraw?")}else this.redrawCount=0;this.body.emitter.emit("changed")}},n.prototype._setDOM=function(){var t=this.props,e=this.dom;t.leftContainer.width=t.left.width,t.rightContainer.width=t.right.width;var i=t.root.width-t.left.width-t.right.width-t.borderRootWidth;t.center.width=i,t.centerContainer.width=i,t.top.width=i,t.bottom.width=i,e.background.style.height=t.background.height+"px",e.backgroundVertical.style.height=t.background.height+"px",e.backgroundHorizontal.style.height=t.centerContainer.height+"px",e.centerContainer.style.height=t.centerContainer.height+"px",e.leftContainer.style.height=t.leftContainer.height+"px",e.rightContainer.style.height=t.rightContainer.height+"px",e.background.style.width=t.background.width+"px",e.backgroundVertical.style.width=t.centerContainer.width+"px",e.backgroundHorizontal.style.width=t.background.width+"px",e.centerContainer.style.width=t.center.width+"px",e.top.style.width=t.top.width+"px",e.bottom.style.width=t.bottom.width+"px",e.background.style.left="0",e.background.style.top="0",e.backgroundVertical.style.left=t.left.width+t.border.left+"px",e.backgroundVertical.style.top="0",e.backgroundHorizontal.style.left="0",e.backgroundHorizontal.style.top=t.top.height+"px",e.centerContainer.style.left=t.left.width+"px",e.centerContainer.style.top=t.top.height+"px",e.leftContainer.style.left="0",e.leftContainer.style.top=t.top.height+"px",e.rightContainer.style.left=t.left.width+t.center.width+"px",e.rightContainer.style.top=t.top.height+"px",e.top.style.left=t.left.width+"px",e.top.style.top="0",e.bottom.style.left=t.left.width+"px",e.bottom.style.top=t.top.height+t.centerContainer.height+"px",e.center.style.left="0",e.left.style.left="0",e.right.style.left="0"},n.prototype.repaint=function(){throw new Error("Function repaint is deprecated. Use redraw instead.")},n.prototype.setCurrentTime=function(t){if(!this.currentTime)throw new Error("Option showCurrentTime must be true");this.currentTime.setCurrentTime(t)},n.prototype.getCurrentTime=function(){if(!this.currentTime)throw new Error("Option showCurrentTime must be true");return this.currentTime.getCurrentTime()},n.prototype._toTime=function(t){return m.toTime(this,t,this.props.center.width)},n.prototype._toGlobalTime=function(t){return m.toTime(this,t,this.props.root.width)},n.prototype._toScreen=function(t){return m.toScreen(this,t,this.props.center.width)},n.prototype._toGlobalScreen=function(t){return m.toScreen(this,t,this.props.root.width)},n.prototype._initAutoResize=function(){1==this.options.autoResize?this._startAutoResize():this._stopAutoResize()},n.prototype._startAutoResize=function(){var t=this;this._stopAutoResize(),this._onResize=function(){if(1!=t.options.autoResize)return void t._stopAutoResize();t.dom.root&&(t.dom.root.offsetWidth==t.props.lastWidth&&t.dom.root.offsetHeight==t.props.lastHeight||(t.props.lastWidth=t.dom.root.offsetWidth,t.props.lastHeight=t.dom.root.offsetHeight,t.props.scrollbarWidth=c.getScrollBarWidth(),t.body.emitter.emit("_change")))},c.addEventListener(window,"resize",this._onResize),t.dom.root&&(t.props.lastWidth=t.dom.root.offsetWidth,t.props.lastHeight=t.dom.root.offsetHeight),this.watchTimer=setInterval(this._onResize,1e3)},n.prototype._stopAutoResize=function(){this.watchTimer&&(clearInterval(this.watchTimer),this.watchTimer=void 0),this._onResize&&(c.removeEventListener(window,"resize",this._onResize),this._onResize=null)},n.prototype._onTouch=function(t){this.touch.allowDragging=!0,this.touch.initialScrollTop=this.props.scrollTop},n.prototype._onPinch=function(t){this.touch.allowDragging=!1},n.prototype._onDrag=function(t){if(t&&this.touch.allowDragging){var e=t.deltaY,i=this._getScrollTop(),o=this._setScrollTop(this.touch.initialScrollTop+e);this.options.verticalScroll&&(this.dom.left.parentNode.scrollTop=-this.props.scrollTop,this.dom.right.parentNode.scrollTop=-this.props.scrollTop),o!=i&&this.emit("verticalDrag")}},n.prototype._setScrollTop=function(t){return this.props.scrollTop=t,this._updateScrollTop(),this.props.scrollTop},n.prototype._updateScrollTop=function(){var t=Math.min(this.props.centerContainer.height-this.props.center.height,0);return t!=this.props.scrollTopMin&&("top"!=this.options.orientation.item&&(this.props.scrollTop+=t-this.props.scrollTopMin),this.props.scrollTopMin=t),this.props.scrollTop>0&&(this.props.scrollTop=0),this.props.scrollTop<t&&(this.props.scrollTop=t),this.options.verticalScroll&&(this.dom.left.parentNode.scrollTop=-this.props.scrollTop,this.dom.right.parentNode.scrollTop=-this.props.scrollTop),this.props.scrollTop},n.prototype._getScrollTop=function(){return this.props.scrollTop},n.prototype._createConfigurator=function(){throw new Error("Cannot invoke abstract method _createConfigurator")},t.exports=n},function(t,e,i){function o(t,e,i,s,r){this.moment=n,this.current=this.moment(),this._start=this.moment(),this._end=this.moment(),this.autoScale=!0,this.scale="day",this.step=1,this.setRange(t,e,i),this.switchedDay=!1,this.switchedMonth=!1,this.switchedYear=!1,Array.isArray(s)?this.hiddenDates=s:this.hiddenDates=void 0!=s?[s]:[],this.format=o.FORMAT,this.options=r||{}}var n=i(9),s=i(36),r=i(2);o.FORMAT={minorLabels:{millisecond:"SSS",second:"s",minute:"HH:mm",hour:"HH:mm",weekday:"ddd D",day:"D",week:"w",month:"MMM",year:"YYYY"},majorLabels:{millisecond:"HH:mm:ss",second:"D MMMM HH:mm",minute:"ddd D MMMM",hour:"ddd D MMMM",weekday:"MMMM YYYY",day:"MMMM YYYY",week:"MMMM YYYY",month:"YYYY",year:""}},o.prototype.setMoment=function(t){this.moment=t,this.current=this.moment(this.current.valueOf()),this._start=this.moment(this._start.valueOf()),this._end=this.moment(this._end.valueOf())},o.prototype.setFormat=function(t){var e=r.deepExtend({},o.FORMAT);this.format=r.deepExtend(e,t)},o.prototype.setRange=function(t,e,i){if(!(t instanceof Date&&e instanceof Date))throw"No legal start or end date in method setRange";this._start=void 0!=t?this.moment(t.valueOf()):new Date,this._end=void 0!=e?this.moment(e.valueOf()):new Date,this.autoScale&&this.setMinimumStep(i)},o.prototype.start=function(){this.current=this._start.clone(),this.roundToMinor()},o.prototype.roundToMinor=function(){switch("week"==this.scale&&this.current.weekday(0),this.scale){case"year":this.current.year(this.step*Math.floor(this.current.year()/this.step)),this.current.month(0);case"month":this.current.date(1);case"week":case"day":case"weekday":this.current.hours(0);case"hour":this.current.minutes(0);case"minute":this.current.seconds(0);case"second":this.current.milliseconds(0)}if(1!=this.step)switch(this.scale){case"millisecond":this.current.subtract(this.current.milliseconds()%this.step,"milliseconds");break;case"second":this.current.subtract(this.current.seconds()%this.step,"seconds");break;case"minute":this.current.subtract(this.current.minutes()%this.step,"minutes");break;case"hour":this.current.subtract(this.current.hours()%this.step,"hours");break;case"weekday":case"day":this.current.subtract((this.current.date()-1)%this.step,"day");break;case"week":this.current.subtract(this.current.week()%this.step,"week");break;case"month":this.current.subtract(this.current.month()%this.step,"month");break;case"year":this.current.subtract(this.current.year()%this.step,"year")}},o.prototype.hasNext=function(){return this.current.valueOf()<=this._end.valueOf()},o.prototype.next=function(){var t=this.current.valueOf();switch(this.scale){case"millisecond":this.current.add(this.step,"millisecond");break;case"second":this.current.add(this.step,"second");break;case"minute":this.current.add(this.step,"minute");break;case"hour":this.current.add(this.step,"hour"),this.current.month()<6?this.current.subtract(this.current.hours()%this.step,"hour"):this.current.hours()%this.step!=0&&this.current.add(this.step-this.current.hours()%this.step,"hour");break;case"weekday":case"day":this.current.add(this.step,"day");break;case"week":if(0!==this.current.weekday())this.current.weekday(0),this.current.add(this.step,"week");else if(!1===this.options.showMajorLabels)this.current.add(this.step,"week");else{var e=this.current.clone();e.add(1,"week"),e.isSame(this.current,"month")?this.current.add(this.step,"week"):(this.current.add(this.step,"week"),this.current.date(1))}break;case"month":this.current.add(this.step,"month");break;case"year":this.current.add(this.step,"year")}if(1!=this.step)switch(this.scale){case"millisecond":this.current.milliseconds()>0&&this.current.milliseconds()<this.step&&this.current.milliseconds(0);break;case"second":this.current.seconds()>0&&this.current.seconds()<this.step&&this.current.seconds(0);break;case"minute":this.current.minutes()>0&&this.current.minutes()<this.step&&this.current.minutes(0);break;case"hour":this.current.hours()>0&&this.current.hours()<this.step&&this.current.hours(0);break;case"weekday":case"day":this.current.date()<this.step+1&&this.current.date(1);break;case"week":this.current.week()<this.step&&this.current.week(1);break;case"month":this.current.month()<this.step&&this.current.month(0)}this.current.valueOf()==t&&(this.current=this._end.clone()),this.switchedDay=!1,this.switchedMonth=!1,this.switchedYear=!1,s.stepOverHiddenDates(this.moment,this,t)},o.prototype.getCurrent=function(){return this.current},o.prototype.setScale=function(t){t&&"string"==typeof t.scale&&(this.scale=t.scale,this.step=t.step>0?t.step:1,this.autoScale=!1)},o.prototype.setAutoScale=function(t){this.autoScale=t},o.prototype.setMinimumStep=function(t){if(void 0!=t){31104e9>t&&(this.scale="year",this.step=1e3),15552e9>t&&(this.scale="year",this.step=500),31104e8>t&&(this.scale="year",this.step=100),15552e8>t&&(this.scale="year",this.step=50),31104e7>t&&(this.scale="year",this.step=10),15552e7>t&&(this.scale="year",this.step=5),31104e6>t&&(this.scale="year",this.step=1),7776e6>t&&(this.scale="month",this.step=3),2592e6>t&&(this.scale="month",this.step=1),432e6>t&&(this.scale="day",this.step=5),1728e5>t&&(this.scale="day",this.step=2),864e5>t&&(this.scale="day",this.step=1),432e5>t&&(this.scale="weekday",this.step=1),144e5>t&&(this.scale="hour",this.step=4),36e5>t&&(this.scale="hour",this.step=1),9e5>t&&(this.scale="minute",this.step=15),6e5>t&&(this.scale="minute",this.step=10),3e5>t&&(this.scale="minute",this.step=5),6e4>t&&(this.scale="minute",this.step=1),15e3>t&&(this.scale="second",this.step=15),1e4>t&&(this.scale="second",this.step=10),5e3>t&&(this.scale="second",this.step=5),1e3>t&&(this.scale="second",this.step=1),200>t&&(this.scale="millisecond",this.step=200),100>t&&(this.scale="millisecond",this.step=100),50>t&&(this.scale="millisecond",this.step=50),10>t&&(this.scale="millisecond",this.step=10),5>t&&(this.scale="millisecond",this.step=5),1>t&&(this.scale="millisecond",this.step=1)}},o.snap=function(t,e,i){var o=n(t);if("year"==e){var s=o.year()+Math.round(o.month()/12);o.year(Math.round(s/i)*i),o.month(0),o.date(0),o.hours(0),o.minutes(0),o.seconds(0),o.milliseconds(0)}else if("month"==e)o.date()>15?(o.date(1),o.add(1,"month")):o.date(1),o.hours(0),o.minutes(0),o.seconds(0),o.milliseconds(0);else if("week"==e)o.weekday()>2?(o.weekday(0),o.add(1,"week")):o.weekday(0),o.hours(0),o.minutes(0),o.seconds(0),o.milliseconds(0);else if("day"==e){switch(i){case 5:case 2:o.hours(24*Math.round(o.hours()/24));break;default:o.hours(12*Math.round(o.hours()/12))}o.minutes(0),o.seconds(0),o.milliseconds(0)}else if("weekday"==e){switch(i){case 5:case 2:o.hours(12*Math.round(o.hours()/12));break;default:o.hours(6*Math.round(o.hours()/6))}o.minutes(0),o.seconds(0),o.milliseconds(0)}else if("hour"==e){switch(i){case 4:o.minutes(60*Math.round(o.minutes()/60));break;default:o.minutes(30*Math.round(o.minutes()/30))}o.seconds(0),o.milliseconds(0)}else if("minute"==e){switch(i){case 15:case 10:o.minutes(5*Math.round(o.minutes()/5)),o.seconds(0);break;case 5:o.seconds(60*Math.round(o.seconds()/60));break;default:o.seconds(30*Math.round(o.seconds()/30))}o.milliseconds(0)}else if("second"==e)switch(i){case 15:case 10:o.seconds(5*Math.round(o.seconds()/5)),o.milliseconds(0);break;case 5:o.milliseconds(1e3*Math.round(o.milliseconds()/1e3));break;default:o.milliseconds(500*Math.round(o.milliseconds()/500))}else if("millisecond"==e){var r=i>5?i/2:1;o.milliseconds(Math.round(o.milliseconds()/r)*r)}return o},o.prototype.isMajor=function(){if(1==this.switchedYear)switch(this.scale){case"year":case"month":case"week":case"weekday":case"day":case"hour":case"minute":case"second":case"millisecond":return!0;default:return!1}else if(1==this.switchedMonth)switch(this.scale){case"week":case"weekday":case"day":case"hour":case"minute":case"second":case"millisecond":return!0;default:return!1}else if(1==this.switchedDay)switch(this.scale){case"millisecond":case"second":case"minute":case"hour":return!0;default:return!1}var t=this.moment(this.current);switch(this.scale){case"millisecond":return 0==t.milliseconds();case"second":return 0==t.seconds();case"minute":return 0==t.hours()&&0==t.minutes();case"hour":return 0==t.hours();case"weekday":case"day":case"week":return 1==t.date();case"month":return 0==t.month();case"year":default:return!1}},o.prototype.getLabelMinor=function(t){if(void 0==t&&(t=this.current),t instanceof Date&&(t=this.moment(t)),"function"==typeof this.format.minorLabels)return this.format.minorLabels(t,this.scale,this.step);var e=this.format.minorLabels[this.scale];switch(this.scale){case"week":if(this.isMajor()&&0!==t.weekday())return"";default:return e&&e.length>0?this.moment(t).format(e):""}},o.prototype.getLabelMajor=function(t){if(void 0==t&&(t=this.current),t instanceof Date&&(t=this.moment(t)),"function"==typeof this.format.majorLabels)return this.format.majorLabels(t,this.scale,this.step);var e=this.format.majorLabels[this.scale];return e&&e.length>0?this.moment(t).format(e):""},o.prototype.getClassName=function(){function t(t){return t/a%2==0?" vis-even":" vis-odd"}function e(t){return t.isSame(new Date,"day")?" vis-today":t.isSame(n().add(1,"day"),"day")?" vis-tomorrow":t.isSame(n().add(-1,"day"),"day")?" vis-yesterday":""}function i(t){return t.isSame(new Date,"week")?" vis-current-week":""}function o(t){return t.isSame(new Date,"month")?" vis-current-month":""}var n=this.moment,s=this.moment(this.current),r=s.locale?s.locale("en"):s.lang("en"),a=this.step,h=[];switch(this.scale){case"millisecond":h.push(e(r)),h.push(t(r.milliseconds()));break;case"second":h.push(e(r)),h.push(t(r.seconds()));break;case"minute":h.push(e(r)),h.push(t(r.minutes()));break;case"hour":h.push("vis-h"+r.hours()+(4==this.step?"-h"+(r.hours()+4):"")),h.push(e(r)),h.push(t(r.hours()));break;case"weekday":h.push("vis-"+r.format("dddd").toLowerCase()),h.push(e(r)),h.push(i(r)),h.push(t(r.date()));break;case"day":h.push("vis-day"+r.date()),h.push("vis-"+r.format("MMMM").toLowerCase()),h.push(e(r)),h.push(o(r)),h.push(this.step<=2?e(r):""),h.push(this.step<=2?"vis-"+r.format("dddd").toLowerCase():""),
+h.push(t(r.date()-1));break;case"week":h.push("vis-week"+r.format("w")),h.push(i(r)),h.push(t(r.week()));break;case"month":h.push("vis-"+r.format("MMMM").toLowerCase()),h.push(o(r)),h.push(t(r.month()));break;case"year":h.push("vis-year"+r.year()),h.push(function(t){return t.isSame(new Date,"year")?" vis-current-year":""}(r)),h.push(t(r.year()))}return h.filter(String).join(" ")},t.exports=o},function(t,e,i){function o(t,e){this.body=t,this.defaultOptions={rtl:!1,showCurrentTime:!0,moment:r,locales:a,locale:"en"},this.options=n.extend({},this.defaultOptions),this.offset=0,this._create(),this.setOptions(e)}var n=i(2),s=i(16),r=i(9),a=i(98);o.prototype=new s,o.prototype._create=function(){var t=document.createElement("div");t.className="vis-current-time",t.style.position="absolute",t.style.top="0px",t.style.height="100%",this.bar=t},o.prototype.destroy=function(){this.options.showCurrentTime=!1,this.redraw(),this.body=null},o.prototype.setOptions=function(t){t&&n.selectiveExtend(["rtl","showCurrentTime","moment","locale","locales"],this.options,t)},o.prototype.redraw=function(){if(this.options.showCurrentTime){var t=this.body.dom.backgroundVertical;this.bar.parentNode!=t&&(this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),t.appendChild(this.bar),this.start());var e=this.options.moment((new Date).valueOf()+this.offset),i=this.body.util.toScreen(e),o=this.options.locales[this.options.locale];o||(this.warned||(console.log("WARNING: options.locales['"+this.options.locale+"'] not found. See http://visjs.org/docs/timeline/#Localization"),this.warned=!0),o=this.options.locales.en);var n=o.current+" "+o.time+": "+e.format("dddd, MMMM Do YYYY, H:mm:ss");n=n.charAt(0).toUpperCase()+n.substring(1),this.options.rtl?this.bar.style.right=i+"px":this.bar.style.left=i+"px",this.bar.title=n}else this.bar.parentNode&&this.bar.parentNode.removeChild(this.bar),this.stop();return!1},o.prototype.start=function(){function t(){e.stop();var i=e.body.range.conversion(e.body.domProps.center.width).scale,o=1/i/10;o<30&&(o=30),o>1e3&&(o=1e3),e.redraw(),e.body.emitter.emit("currentTimeTick"),e.currentTimeTimer=setTimeout(t,o)}var e=this;t()},o.prototype.stop=function(){void 0!==this.currentTimeTimer&&(clearTimeout(this.currentTimeTimer),delete this.currentTimeTimer)},o.prototype.setCurrentTime=function(t){var e=n.convert(t,"Date").valueOf(),i=(new Date).valueOf();this.offset=e-i,this.redraw()},o.prototype.getCurrentTime=function(){return new Date((new Date).valueOf()+this.offset)},t.exports=o},function(t,e,i){function o(t,e,i){if(this.groupId=t,this.subgroups={},this.subgroupStack={},this.subgroupStackAll=!1,this.doInnerStack=!1,this.subgroupIndex=0,this.subgroupOrderer=e&&e.subgroupOrder,this.itemSet=i,this.isVisible=null,this.stackDirty=!0,e&&e.nestedGroups&&(this.nestedGroups=e.nestedGroups,0==e.showNested?this.showNested=!1:this.showNested=!0),e&&e.subgroupStack)if("boolean"==typeof e.subgroupStack)this.doInnerStack=e.subgroupStack,this.subgroupStackAll=e.subgroupStack;else for(var o in e.subgroupStack)this.subgroupStack[o]=e.subgroupStack[o],this.doInnerStack=this.doInnerStack||e.subgroupStack[o];this.nestedInGroup=null,this.dom={},this.props={label:{width:0,height:0}},this.className=null,this.items={},this.visibleItems=[],this.itemsInRange=[],this.orderedItems={byStart:[],byEnd:[]},this.checkRangedItems=!1;var n=this;this.itemSet.body.emitter.on("checkRangedItems",function(){n.checkRangedItems=!0}),this._create(),this.setData(e)}var n=i(8),s=function(t){return t&&t.__esModule?t:{default:t}}(n),r=i(2),a=i(100);o.prototype._create=function(){var t=document.createElement("div");this.itemSet.options.groupEditable.order?t.className="vis-label draggable":t.className="vis-label",this.dom.label=t;var e=document.createElement("div");e.className="vis-inner",t.appendChild(e),this.dom.inner=e;var i=document.createElement("div");i.className="vis-group",i["timeline-group"]=this,this.dom.foreground=i,this.dom.background=document.createElement("div"),this.dom.background.className="vis-group",this.dom.axis=document.createElement("div"),this.dom.axis.className="vis-group",this.dom.marker=document.createElement("div"),this.dom.marker.style.visibility="hidden",this.dom.marker.style.position="absolute",this.dom.marker.innerHTML="",this.dom.background.appendChild(this.dom.marker)},o.prototype.setData=function(t){var e,i;if(this.itemSet.options&&this.itemSet.options.groupTemplate?(i=this.itemSet.options.groupTemplate.bind(this),e=i(t,this.dom.inner)):e=t&&t.content,e instanceof Element){for(this.dom.inner.appendChild(e);this.dom.inner.firstChild;)this.dom.inner.removeChild(this.dom.inner.firstChild);this.dom.inner.appendChild(e)}else e instanceof Object?i(t,this.dom.inner):this.dom.inner.innerHTML=void 0!==e&&null!==e?e:this.groupId||"";if(this.dom.label.title=t&&t.title||"",this.dom.inner.firstChild?r.removeClassName(this.dom.inner,"vis-hidden"):r.addClassName(this.dom.inner,"vis-hidden"),t&&t.nestedGroups){this.nestedGroups&&this.nestedGroups==t.nestedGroups||(this.nestedGroups=t.nestedGroups),void 0===t.showNested&&void 0!==this.showNested||(0==t.showNested?this.showNested=!1:this.showNested=!0),r.addClassName(this.dom.label,"vis-nesting-group");var o=this.itemSet.options.rtl?"collapsed-rtl":"collapsed";this.showNested?(r.removeClassName(this.dom.label,o),r.addClassName(this.dom.label,"expanded")):(r.removeClassName(this.dom.label,"expanded"),r.addClassName(this.dom.label,o))}else this.nestedGroups&&(this.nestedGroups=null,o=this.itemSet.options.rtl?"collapsed-rtl":"collapsed",r.removeClassName(this.dom.label,o),r.removeClassName(this.dom.label,"expanded"),r.removeClassName(this.dom.label,"vis-nesting-group"));t&&t.nestedInGroup&&(r.addClassName(this.dom.label,"vis-nested-group"),this.itemSet.options&&this.itemSet.options.rtl?this.dom.inner.style.paddingRight="30px":this.dom.inner.style.paddingLeft="30px");var n=t&&t.className||null;n!=this.className&&(this.className&&(r.removeClassName(this.dom.label,this.className),r.removeClassName(this.dom.foreground,this.className),r.removeClassName(this.dom.background,this.className),r.removeClassName(this.dom.axis,this.className)),r.addClassName(this.dom.label,n),r.addClassName(this.dom.foreground,n),r.addClassName(this.dom.background,n),r.addClassName(this.dom.axis,n),this.className=n),this.style&&(r.removeCssText(this.dom.label,this.style),this.style=null),t&&t.style&&(r.addCssText(this.dom.label,t.style),this.style=t.style)},o.prototype.getLabelWidth=function(){return this.props.label.width},o.prototype._didMarkerHeightChange=function(){var t=this.dom.marker.clientHeight;if(t!=this.lastMarkerHeight){this.lastMarkerHeight=t;var e={},i=0;r.forEach(this.items,function(t,o){if(t.dirty=!0,t.displayed){e[o]=t.redraw(!0),i=e[o].length}});if(i>0)for(var o=0;o<i;o++)r.forEach(e,function(t){t[o]()});return!0}},o.prototype._calculateGroupSizeAndPosition=function(){var t=this.dom.foreground.offsetTop,e=this.dom.foreground.offsetLeft,i=this.dom.foreground.offsetWidth;this.top=t,this.right=e,this.width=i},o.prototype._redrawItems=function(t,e,i,o){if(t||this.stackDirty||this.isVisible&&!e){var n={},s=null;if("function"==typeof this.itemSet.options.order){var h=this,d={},l=0;if(r.forEach(this.items,function(t,e){t.displayed||(d[e]=t.redraw(!0),l=d[e].length,h.visibleItems.push(t))}),l>0)for(var u=0;u<l;u++)r.forEach(d,function(t){t[u]()});if(r.forEach(this.items,function(t){t.repositionX(!1)}),this.doInnerStack&&this.itemSet.options.stackSubgroups){for(s in this.subgroups)n[s]=this.subgroups[s].items.slice().sort(function(t,e){return h.itemSet.options.order(t.data,e.data)});a.stackSubgroupsWithInnerStack(n,i,this.subgroups)}else{var c=this.orderedItems.byStart.slice().sort(function(t,e){return h.itemSet.options.order(t.data,e.data)});a.stack(c,i,!0)}this.visibleItems=this._updateItemsInRange(this.orderedItems,this.visibleItems,o)}else if(this.visibleItems=this._updateItemsInRange(this.orderedItems,this.visibleItems,o),this.itemSet.options.stack)if(this.doInnerStack&&this.itemSet.options.stackSubgroups){for(s in this.subgroups)n[s]=this.subgroups[s].items;a.stackSubgroupsWithInnerStack(n,i,this.subgroups)}else a.stack(this.visibleItems,i,!0);else a.nostack(this.visibleItems,i,this.subgroups,this.itemSet.options.stackSubgroups);this.stackDirty=!1}},o.prototype._didResize=function(t,e){t=r.updateProperty(this,"height",e)||t;var i=this.dom.inner.clientWidth,o=this.dom.inner.clientHeight;return t=r.updateProperty(this.props.label,"width",i)||t,t=r.updateProperty(this.props.label,"height",o)||t},o.prototype._applyGroupHeight=function(t){this.dom.background.style.height=t+"px",this.dom.foreground.style.height=t+"px",this.dom.label.style.height=t+"px"},o.prototype._updateItemsVerticalPosition=function(t){for(var e=0,i=this.visibleItems.length;e<i;e++){var o=this.visibleItems[e];o.repositionY(t),this.isVisible||"__background__"==this.groupId||o.displayed&&o.hide()}},o.prototype.redraw=function(t,e,i,o){var n,s=!1,r=this.isVisible,a=[function(){i=this._didMarkerHeightChange.bind(this)}.bind(this),this._updateSubGroupHeights.bind(this,e),this._calculateGroupSizeAndPosition.bind(this),function(){this.isVisible=this._isGroupVisible.bind(this)(t,e)}.bind(this),function(){this._redrawItems.bind(this)(i,r,e,t)}.bind(this),this._updateSubgroupsSizes.bind(this),function(){n=this._calculateHeight.bind(this)(e)}.bind(this),this._calculateGroupSizeAndPosition.bind(this),function(){s=this._didResize.bind(this)(s,n)}.bind(this),function(){this._applyGroupHeight.bind(this)(n)}.bind(this),function(){this._updateItemsVerticalPosition.bind(this)(e)}.bind(this),function(){return!this.isVisible&&this.height&&(s=!1),s}];if(o)return a;var h;return a.forEach(function(t){h=t()}),h},o.prototype._updateSubGroupHeights=function(t){if((0,s.default)(this.subgroups).length>0){var e=this;this.resetSubgroups(),r.forEach(this.visibleItems,function(i){void 0!==i.data.subgroup&&(e.subgroups[i.data.subgroup].height=Math.max(e.subgroups[i.data.subgroup].height,i.height+t.item.vertical),e.subgroups[i.data.subgroup].visible=!0)})}},o.prototype._isGroupVisible=function(t,e){return this.top<=t.body.domProps.centerContainer.height-t.body.domProps.scrollTop+e.axis&&this.top+this.height+e.axis>=-t.body.domProps.scrollTop},o.prototype._calculateHeight=function(t){var e,i=this.visibleItems;if(i.length>0){var o=i[0].top,n=i[0].top+i[0].height;if(r.forEach(i,function(t){o=Math.min(o,t.top),n=Math.max(n,t.top+t.height)}),o>t.axis){var s=o-t.axis;n-=s,r.forEach(i,function(t){t.top-=s})}e=n+t.item.vertical/2}else e=0;return e=Math.max(e,this.props.label.height)},o.prototype.show=function(){this.dom.label.parentNode||this.itemSet.dom.labelSet.appendChild(this.dom.label),this.dom.foreground.parentNode||this.itemSet.dom.foreground.appendChild(this.dom.foreground),this.dom.background.parentNode||this.itemSet.dom.background.appendChild(this.dom.background),this.dom.axis.parentNode||this.itemSet.dom.axis.appendChild(this.dom.axis)},o.prototype.hide=function(){var t=this.dom.label;t.parentNode&&t.parentNode.removeChild(t);var e=this.dom.foreground;e.parentNode&&e.parentNode.removeChild(e);var i=this.dom.background;i.parentNode&&i.parentNode.removeChild(i);var o=this.dom.axis;o.parentNode&&o.parentNode.removeChild(o)},o.prototype.add=function(t){if(this.items[t.id]=t,t.setParent(this),this.stackDirty=!0,void 0!==t.data.subgroup&&(this._addToSubgroup(t),this.orderSubgroups()),-1==this.visibleItems.indexOf(t)){var e=this.itemSet.body.range;this._checkIfVisible(t,this.visibleItems,e)}},o.prototype._addToSubgroup=function(t,e){e=e||t.data.subgroup,void 0!=e&&void 0===this.subgroups[e]&&(this.subgroups[e]={height:0,top:0,start:t.data.start,end:t.data.end||t.data.start,visible:!1,index:this.subgroupIndex,items:[],stack:this.subgroupStackAll||this.subgroupStack[e]||!1},this.subgroupIndex++),new Date(t.data.start)<new Date(this.subgroups[e].start)&&(this.subgroups[e].start=t.data.start);var i=t.data.end||t.data.start;new Date(i)>new Date(this.subgroups[e].end)&&(this.subgroups[e].end=i),this.subgroups[e].items.push(t)},o.prototype._updateSubgroupsSizes=function(){var t=this;if(t.subgroups)for(var e in t.subgroups){var i=t.subgroups[e].items[0].data.end||t.subgroups[e].items[0].data.start,o=t.subgroups[e].items[0].data.start,n=i-1;t.subgroups[e].items.forEach(function(t){new Date(t.data.start)<new Date(o)&&(o=t.data.start);var e=t.data.end||t.data.start;new Date(e)>new Date(n)&&(n=e)}),t.subgroups[e].start=o,t.subgroups[e].end=new Date(n-1)}},o.prototype.orderSubgroups=function(){if(void 0!==this.subgroupOrderer){var t,e=[];if("string"==typeof this.subgroupOrderer){for(t in this.subgroups)e.push({subgroup:t,sortField:this.subgroups[t].items[0].data[this.subgroupOrderer]});e.sort(function(t,e){return t.sortField-e.sortField})}else if("function"==typeof this.subgroupOrderer){for(t in this.subgroups)e.push(this.subgroups[t].items[0].data);e.sort(this.subgroupOrderer)}if(e.length>0)for(var i=0;i<e.length;i++)this.subgroups[e[i].subgroup].index=i}},o.prototype.resetSubgroups=function(){for(var t in this.subgroups)this.subgroups.hasOwnProperty(t)&&(this.subgroups[t].visible=!1,this.subgroups[t].height=0)},o.prototype.remove=function(t){delete this.items[t.id],t.setParent(null),this.stackDirty=!0;var e=this.visibleItems.indexOf(t);-1!=e&&this.visibleItems.splice(e,1),void 0!==t.data.subgroup&&(this._removeFromSubgroup(t),this.orderSubgroups())},o.prototype._removeFromSubgroup=function(t,e){if(void 0!=(e=e||t.data.subgroup)){var i=this.subgroups[e];if(i){var o=i.items.indexOf(t);o>=0&&(i.items.splice(o,1),i.items.length?this._updateSubgroupsSizes():delete this.subgroups[e])}}},o.prototype.removeFromDataSet=function(t){this.itemSet.removeItem(t.id)},o.prototype.order=function(){for(var t=r.toArray(this.items),e=[],i=[],o=0;o<t.length;o++)void 0!==t[o].data.end&&i.push(t[o]),e.push(t[o]);this.orderedItems={byStart:e,byEnd:i},a.orderByStart(this.orderedItems.byStart),a.orderByEnd(this.orderedItems.byEnd)},o.prototype._updateItemsInRange=function(t,e,i){var o=[],n={},s=(i.end-i.start)/4,a=i.start-s,h=i.end+s,d=function(t){return t<a?-1:t<=h?0:1};if(e.length>0)for(var l=0;l<e.length;l++)this._checkIfVisibleWithReference(e[l],o,n,i);var u=r.binarySearchCustom(t.byStart,d,"data","start");if(this._traceVisible(u,t.byStart,o,n,function(t){return t.data.start<a||t.data.start>h}),1==this.checkRangedItems)for(this.checkRangedItems=!1,l=0;l<t.byEnd.length;l++)this._checkIfVisibleWithReference(t.byEnd[l],o,n,i);else{var c=r.binarySearchCustom(t.byEnd,d,"data","end");this._traceVisible(c,t.byEnd,o,n,function(t){return t.data.end<a||t.data.end>h})}var p={},f=0;for(l=0;l<o.length;l++){var m=o[l];if(!m.displayed){p[l]=m.redraw(!0),f=p[l].length}}if(f>0)for(var v=0;v<f;v++)r.forEach(p,function(t){t[v]()});for(l=0;l<o.length;l++)o[l].repositionX();return o},o.prototype._traceVisible=function(t,e,i,o,n){if(-1!=t){var s,r;for(s=t;s>=0&&(r=e[s],!n(r));s--)void 0===o[r.id]&&(o[r.id]=!0,i.push(r));for(s=t+1;s<e.length&&(r=e[s],!n(r));s++)void 0===o[r.id]&&(o[r.id]=!0,i.push(r))}},o.prototype._checkIfVisible=function(t,e,i){t.isVisible(i)?(t.displayed||t.show(),t.repositionX(),e.push(t)):t.displayed&&t.hide()},o.prototype._checkIfVisibleWithReference=function(t,e,i,o){t.isVisible(o)?void 0===i[t.id]&&(i[t.id]=!0,e.push(t)):t.displayed&&t.hide()},o.prototype.changeSubgroup=function(t,e,i){this._removeFromSubgroup(t,e),this._addToSubgroup(t,i),this.orderSubgroups()},t.exports=o},function(t,e,i){function o(t,e,i){r.call(this,t,e,i),this.width=0,this.height=0,this.top=0,this.left=0}var n=i(29),s=function(t){return t&&t.__esModule?t:{default:t}}(n),r=i(68);o.prototype=(0,s.default)(r.prototype),o.prototype.redraw=function(t,e,i){this.visibleItems=this._updateItemsInRange(this.orderedItems,this.visibleItems,t),this.width=this.dom.background.offsetWidth,this.dom.background.style.height="0";for(var o=0,n=this.visibleItems.length;o<n;o++){this.visibleItems[o].repositionY(e)}return!1},o.prototype.show=function(){this.dom.background.parentNode||this.itemSet.dom.background.appendChild(this.dom.background)},t.exports=o},function(t,e,i){function o(t,e,i){if(this.props={content:{width:0}},this.overflow=!1,this.options=i,t){if(void 0==t.start)throw new Error('Property "start" missing in item '+t.id);if(void 0==t.end)throw new Error('Property "end" missing in item '+t.id)}n.call(this,t,e,i)}var n=i(38);o.prototype=new n(null,null,null),o.prototype.baseClassName="vis-item vis-range",o.prototype.isVisible=function(t){return this.data.start<t.end&&this.data.end>t.start},o.prototype._createDomElement=function(){this.dom||(this.dom={},this.dom.box=document.createElement("div"),this.dom.frame=document.createElement("div"),this.dom.frame.className="vis-item-overflow",this.dom.box.appendChild(this.dom.frame),this.dom.visibleFrame=document.createElement("div"),this.dom.visibleFrame.className="vis-item-visible-frame",this.dom.box.appendChild(this.dom.visibleFrame),this.dom.content=document.createElement("div"),this.dom.content.className="vis-item-content",this.dom.frame.appendChild(this.dom.content),this.dom.box["timeline-item"]=this,this.dirty=!0)},o.prototype._appendDomElement=function(){if(!this.parent)throw new Error("Cannot redraw item: no parent attached");if(!this.dom.box.parentNode){var t=this.parent.dom.foreground;if(!t)throw new Error("Cannot redraw item: parent has no foreground container element");t.appendChild(this.dom.box)}this.displayed=!0},o.prototype._updateDirtyDomComponents=function(){if(this.dirty){this._updateContents(this.dom.content),this._updateDataAttributes(this.dom.box),this._updateStyle(this.dom.box);var t=this.editable.updateTime||this.editable.updateGroup,e=(this.data.className?" "+this.data.className:"")+(this.selected?" vis-selected":"")+(t?" vis-editable":" vis-readonly");this.dom.box.className=this.baseClassName+e,this.dom.content.style.maxWidth="none"}},o.prototype._getDomComponentsSizes=function(){return this.overflow="hidden"!==window.getComputedStyle(this.dom.frame).overflow,{content:{width:this.dom.content.offsetWidth},box:{height:this.dom.box.offsetHeight}}},o.prototype._updateDomComponentsSizes=function(t){this.props.content.width=t.content.width,this.height=t.box.height,this.dom.content.style.maxWidth="",this.dirty=!1},o.prototype._repaintDomAdditionals=function(){this._repaintOnItemUpdateTimeTooltip(this.dom.box),this._repaintDeleteButton(this.dom.box),this._repaintDragCenter(),this._repaintDragLeft(),this._repaintDragRight()},o.prototype.redraw=function(t){var e,i=[this._createDomElement.bind(this),this._appendDomElement.bind(this),this._updateDirtyDomComponents.bind(this),function(){this.dirty&&(e=this._getDomComponentsSizes.bind(this)())}.bind(this),function(){this.dirty&&this._updateDomComponentsSizes.bind(this)(e)}.bind(this),this._repaintDomAdditionals.bind(this)];if(t)return i;var o;return i.forEach(function(t){o=t()}),o},o.prototype.show=function(){this.displayed||this.redraw()},o.prototype.hide=function(){if(this.displayed){var t=this.dom.box;t.parentNode&&t.parentNode.removeChild(t),this.displayed=!1}},o.prototype.repositionX=function(t){var e,i,o=this.parent.width,n=this.conversion.toScreen(this.data.start),s=this.conversion.toScreen(this.data.end),r=void 0===this.data.align?this.options.align:this.data.align;!1===this.data.limitSize||void 0!==t&&!0!==t||(n<-o&&(n=-o),s>2*o&&(s=2*o));var a=Math.max(s-n+.5,1);switch(this.overflow?(this.options.rtl?this.right=n:this.left=n,this.width=a+this.props.content.width,i=this.props.content.width):(this.options.rtl?this.right=n:this.left=n,this.width=a,i=Math.min(s-n,this.props.content.width)),this.options.rtl?this.dom.box.style.right=this.right+"px":this.dom.box.style.left=this.left+"px",this.dom.box.style.width=a+"px",r){case"left":this.options.rtl?this.dom.content.style.right="0":this.dom.content.style.left="0";break;case"right":this.options.rtl?this.dom.content.style.right=Math.max(a-i,0)+"px":this.dom.content.style.left=Math.max(a-i,0)+"px";break;case"center":this.options.rtl?this.dom.content.style.right=Math.max((a-i)/2,0)+"px":this.dom.content.style.left=Math.max((a-i)/2,0)+"px";break;default:e=this.overflow?s>0?Math.max(-n,0):-i:n<0?-n:0,this.options.rtl?this.dom.content.style.right=e+"px":(this.dom.content.style.left=e+"px",this.dom.content.style.width="calc(100% - "+e+"px)")}},o.prototype.repositionY=function(){var t=this.options.orientation.item,e=this.dom.box;e.style.top="top"==t?this.top+"px":this.parent.height-this.top-this.height+"px"},o.prototype._repaintDragLeft=function(){if((this.selected||this.options.itemsAlwaysDraggable.range)&&this.options.editable.updateTime&&!this.dom.dragLeft){var t=document.createElement("div");t.className="vis-drag-left",t.dragLeftItem=this,this.dom.box.appendChild(t),this.dom.dragLeft=t}else this.selected||this.options.itemsAlwaysDraggable.range||!this.dom.dragLeft||(this.dom.dragLeft.parentNode&&this.dom.dragLeft.parentNode.removeChild(this.dom.dragLeft),this.dom.dragLeft=null)},o.prototype._repaintDragRight=function(){if((this.selected||this.options.itemsAlwaysDraggable.range)&&this.options.editable.updateTime&&!this.dom.dragRight){var t=document.createElement("div");t.className="vis-drag-right",t.dragRightItem=this,this.dom.box.appendChild(t),this.dom.dragRight=t}else this.selected||this.options.itemsAlwaysDraggable.range||!this.dom.dragRight||(this.dom.dragRight.parentNode&&this.dom.dragRight.parentNode.removeChild(this.dom.dragRight),this.dom.dragRight=null)},t.exports=o},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(19),s=o(n),r=i(6),a=o(r),h=i(0),d=o(h),l=i(1),u=o(l),c=i(2),p=i(179).default,f=function(){function t(e,i,o){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;(0,d.default)(this,t),this.parent=e,this.changedOptions=[],this.container=i,this.allowCreation=!1,this.options={},this.initialized=!1,this.popupCounter=0,this.defaultOptions={enabled:!1,filter:!0,container:void 0,showButton:!0},c.extend(this.options,this.defaultOptions),this.configureOptions=o,this.moduleOptions={},this.domElements=[],this.popupDiv={},this.popupLimit=5,this.popupHistory={},this.colorPicker=new p(n),this.wrapper=void 0}return(0,u.default)(t,[{key:"setOptions",value:function(t){if(void 0!==t){this.popupHistory={},this._removePopup();var e=!0;"string"==typeof t?this.options.filter=t:t instanceof Array?this.options.filter=t.join():"object"===(void 0===t?"undefined":(0,a.default)(t))?(void 0!==t.container&&(this.options.container=t.container),void 0!==t.filter&&(this.options.filter=t.filter),void 0!==t.showButton&&(this.options.showButton=t.showButton),void 0!==t.enabled&&(e=t.enabled)):"boolean"==typeof t?(this.options.filter=!0,e=t):"function"==typeof t&&(this.options.filter=t,e=!0),!1===this.options.filter&&(e=!1),this.options.enabled=e}this._clean()}},{key:"setModuleOptions",value:function(t){this.moduleOptions=t,!0===this.options.enabled&&(this._clean(),void 0!==this.options.container&&(this.container=this.options.container),this._create())}},{key:"_create",value:function(){var t=this;this._clean(),this.changedOptions=[];var e=this.options.filter,i=0,o=!1;for(var n in this.configureOptions)this.configureOptions.hasOwnProperty(n)&&(this.allowCreation=!1,o=!1,"function"==typeof e?(o=e(n,[]),o=o||this._handleObject(this.configureOptions[n],[n],!0)):!0!==e&&-1===e.indexOf(n)||(o=!0),!1!==o&&(this.allowCreation=!0,i>0&&this._makeItem([]),this._makeHeader(n),this._handleObject(this.configureOptions[n],[n])),i++);if(!0===this.options.showButton){var s=document.createElement("div");s.className="vis-configuration vis-config-button",s.innerHTML="generate options",s.onclick=function(){t._printOptions()},s.onmouseover=function(){s.className="vis-configuration vis-config-button hover"},s.onmouseout=function(){s.className="vis-configuration vis-config-button"},this.optionsContainer=document.createElement("div"),this.optionsContainer.className="vis-configuration vis-config-option-container",this.domElements.push(this.optionsContainer),this.domElements.push(s)}this._push()}},{key:"_push",value:function(){this.wrapper=document.createElement("div"),this.wrapper.className="vis-configuration-wrapper",this.container.appendChild(this.wrapper);for(var t=0;t<this.domElements.length;t++)this.wrapper.appendChild(this.domElements[t]);this._showPopupIfNeeded()}},{key:"_clean",value:function(){for(var t=0;t<this.domElements.length;t++)this.wrapper.removeChild(this.domElements[t]);void 0!==this.wrapper&&(this.container.removeChild(this.wrapper),this.wrapper=void 0),this.domElements=[],this._removePopup()}},{key:"_getValue",value:function(t){for(var e=this.moduleOptions,i=0;i<t.length;i++){if(void 0===e[t[i]]){e=void 0;break}e=e[t[i]]}return e}},{key:"_makeItem",value:function(t){if(!0===this.allowCreation){var e=document.createElement("div");e.className="vis-configuration vis-config-item vis-config-s"+t.length;for(var i=arguments.length,o=Array(i>1?i-1:0),n=1;n<i;n++)o[n-1]=arguments[n];return o.forEach(function(t){e.appendChild(t)}),this.domElements.push(e),this.domElements.length}return 0}},{key:"_makeHeader",value:function(t){var e=document.createElement("div");e.className="vis-configuration vis-config-header",e.innerHTML=t,this._makeItem([],e)}},{key:"_makeLabel",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=document.createElement("div");return o.className="vis-configuration vis-config-label vis-config-s"+e.length,o.innerHTML=!0===i?"<i><b>"+t+":</b></i>":t+":",o}},{key:"_makeDropdown",value:function(t,e,i){var o=document.createElement("select");o.className="vis-configuration vis-config-select";var n=0;void 0!==e&&-1!==t.indexOf(e)&&(n=t.indexOf(e));for(var s=0;s<t.length;s++){var r=document.createElement("option");r.value=t[s],s===n&&(r.selected="selected"),r.innerHTML=t[s],o.appendChild(r)}var a=this;o.onchange=function(){a._update(this.value,i)};var h=this._makeLabel(i[i.length-1],i);this._makeItem(i,h,o)}},{key:"_makeRange",value:function(t,e,i){var o=t[0],n=t[1],s=t[2],r=t[3],a=document.createElement("input");a.className="vis-configuration vis-config-range";try{a.type="range",a.min=n,a.max=s}catch(t){}a.step=r;var h="",d=0;if(void 0!==e){e<0&&1.2*e<n?(a.min=Math.ceil(1.2*e),d=a.min,h="range increased"):e/1.2<n&&(a.min=Math.ceil(e/1.2),d=a.min,h="range increased"),1.2*e>s&&1!==s&&(a.max=Math.ceil(1.2*e),d=a.max,h="range increased"),a.value=e}else a.value=o;var l=document.createElement("input");l.className="vis-configuration vis-config-rangeinput",l.value=a.value;var u=this;a.onchange=function(){l.value=this.value,u._update(Number(this.value),i)},a.oninput=function(){l.value=this.value};var c=this._makeLabel(i[i.length-1],i),p=this._makeItem(i,c,a,l);""!==h&&this.popupHistory[p]!==d&&(this.popupHistory[p]=d,this._setupPopup(h,p))}},{key:"_setupPopup",value:function(t,e){var i=this;if(!0===this.initialized&&!0===this.allowCreation&&this.popupCounter<this.popupLimit){var o=document.createElement("div");o.id="vis-configuration-popup",o.className="vis-configuration-popup",o.innerHTML=t,o.onclick=function(){i._removePopup()},this.popupCounter+=1,this.popupDiv={html:o,index:e}}}},{key:"_removePopup",value:function(){void 0!==this.popupDiv.html&&(this.popupDiv.html.parentNode.removeChild(this.popupDiv.html),clearTimeout(this.popupDiv.hideTimeout),clearTimeout(this.popupDiv.deleteTimeout),this.popupDiv={})}},{key:"_showPopupIfNeeded",value:function(){var t=this;if(void 0!==this.popupDiv.html){var e=this.domElements[this.popupDiv.index],i=e.getBoundingClientRect();this.popupDiv.html.style.left=i.left+"px",this.popupDiv.html.style.top=i.top-30+"px",document.body.appendChild(this.popupDiv.html),this.popupDiv.hideTimeout=setTimeout(function(){t.popupDiv.html.style.opacity=0},1500),this.popupDiv.deleteTimeout=setTimeout(function(){t._removePopup()},1800)}}},{key:"_makeCheckbox",value:function(t,e,i){var o=document.createElement("input");o.type="checkbox",o.className="vis-configuration vis-config-checkbox",o.checked=t,void 0!==e&&(o.checked=e,e!==t&&("object"===(void 0===t?"undefined":(0,a.default)(t))?e!==t.enabled&&this.changedOptions.push({path:i,value:e}):this.changedOptions.push({path:i,value:e})));var n=this;o.onchange=function(){n._update(this.checked,i)};var s=this._makeLabel(i[i.length-1],i);this._makeItem(i,s,o)}},{key:"_makeTextInput",value:function(t,e,i){var o=document.createElement("input");o.type="text",o.className="vis-configuration vis-config-text",o.value=e,e!==t&&this.changedOptions.push({path:i,value:e});var n=this;o.onchange=function(){n._update(this.value,i)};var s=this._makeLabel(i[i.length-1],i);this._makeItem(i,s,o)}},{key:"_makeColorField",value:function(t,e,i){var o=this,n=t[1],s=document.createElement("div");e=void 0===e?n:e,"none"!==e?(s.className="vis-configuration vis-config-colorBlock",s.style.backgroundColor=e):s.className="vis-configuration vis-config-colorBlock none",e=void 0===e?n:e,s.onclick=function(){o._showColorPicker(e,s,i)};var r=this._makeLabel(i[i.length-1],i);this._makeItem(i,r,s)}},{key:"_showColorPicker",value:function(t,e,i){var o=this;e.onclick=function(){},this.colorPicker.insertTo(e),this.colorPicker.show(),this.colorPicker.setColor(t),this.colorPicker.setUpdateCallback(function(t){var n="rgba("+t.r+","+t.g+","+t.b+","+t.a+")";e.style.backgroundColor=n,o._update(n,i)}),this.colorPicker.setCloseCallback(function(){e.onclick=function(){o._showColorPicker(t,e,i)}})}},{key:"_handleObject",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=!1,n=this.options.filter,s=!1;for(var r in t)if(t.hasOwnProperty(r)){o=!0;var a=t[r],h=c.copyAndExtendArray(e,r);if("function"==typeof n&&!1===(o=n(r,e))&&!(a instanceof Array)&&"string"!=typeof a&&"boolean"!=typeof a&&a instanceof Object&&(this.allowCreation=!1,o=this._handleObject(a,h,!0),this.allowCreation=!1===i),!1!==o){s=!0;var d=this._getValue(h);if(a instanceof Array)this._handleArray(a,d,h);else if("string"==typeof a)this._makeTextInput(a,d,h);else if("boolean"==typeof a)this._makeCheckbox(a,d,h);else if(a instanceof Object){var l=!0;if(-1!==e.indexOf("physics")&&this.moduleOptions.physics.solver!==r&&(l=!1),!0===l)if(void 0!==a.enabled){var u=c.copyAndExtendArray(h,"enabled"),p=this._getValue(u);if(!0===p){var f=this._makeLabel(r,h,!0);this._makeItem(h,f),s=this._handleObject(a,h)||s}else this._makeCheckbox(a,p,h)}else{var m=this._makeLabel(r,h,!0);this._makeItem(h,m),s=this._handleObject(a,h)||s}}else console.error("dont know how to handle",a,r,h)}}return s}},{key:"_handleArray",value:function(t,e,i){"string"==typeof t[0]&&"color"===t[0]?(this._makeColorField(t,e,i),t[1]!==e&&this.changedOptions.push({path:i,value:e})):"string"==typeof t[0]?(this._makeDropdown(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:e})):"number"==typeof t[0]&&(this._makeRange(t,e,i),t[0]!==e&&this.changedOptions.push({path:i,value:Number(e)}))}},{key:"_update",value:function(t,e){var i=this._constructOptions(t,e);this.parent.body&&this.parent.body.emitter&&this.parent.body.emitter.emit&&this.parent.body.emitter.emit("configChange",i),this.initialized=!0,this.parent.setOptions(i)}},{key:"_constructOptions",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=i;t="true"===t||t,t="false"!==t&&t;for(var n=0;n<e.length;n++)"global"!==e[n]&&(void 0===o[e[n]]&&(o[e[n]]={}),n!==e.length-1?o=o[e[n]]:o[e[n]]=t);return i}},{key:"_printOptions",value:function(){var t=this.getOptions();this.optionsContainer.innerHTML="<pre>var options = "+(0,s.default)(t,null,2)+"</pre>"}},{key:"getOptions",value:function(){for(var t={},e=0;e<this.changedOptions.length;e++)this._constructOptions(this.changedOptions[e].value,this.changedOptions[e].path,t);return t}}]),t}();e.default=f},function(t,e,i){function o(t,e){}function n(t,e){return e=void 0===e?{}:e,{style:e.style||t.options.drawPoints.style,
+styles:e.styles||t.options.drawPoints.styles,size:e.size||t.options.drawPoints.size,className:e.className||t.className}}function s(t,e){var i=void 0;return t.options&&t.options.drawPoints&&t.options.drawPoints.onRender&&"function"==typeof t.options.drawPoints.onRender&&(i=t.options.drawPoints.onRender),e.group.options&&e.group.options.drawPoints&&e.group.options.drawPoints.onRender&&"function"==typeof e.group.options.drawPoints.onRender&&(i=e.group.options.drawPoints.onRender),i}var r=i(6),a=function(t){return t&&t.__esModule?t:{default:t}}(r),h=i(14);o.draw=function(t,e,i,o){o=o||0;for(var r=s(i,e),d=0;d<t.length;d++)if(r){var l=r(t[d],e);!0!==l&&"object"!==(void 0===l?"undefined":(0,a.default)(l))||h.drawPoint(t[d].screen_x+o,t[d].screen_y,n(e,l),i.svgElements,i.svg,t[d].label)}else h.drawPoint(t[d].screen_x+o,t[d].screen_y,n(e),i.svgElements,i.svg,t[d].label)},o.drawIcon=function(t,e,i,o,s,r){var a=.5*s,d=h.getSVGElement("rect",r.svgElements,r.svg);d.setAttributeNS(null,"x",e),d.setAttributeNS(null,"y",i-a),d.setAttributeNS(null,"width",o),d.setAttributeNS(null,"height",2*a),d.setAttributeNS(null,"class","vis-outline"),h.drawPoint(e+.5*o,i,n(t),r.svgElements,r.svg)},t.exports=o},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(23),m=o(f),v=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n.labelOffset=0,n.selected=!1,n}return(0,p.default)(e,t),(0,d.default)(e,[{key:"setOptions",value:function(t,e,i){this.options=t,void 0===e&&void 0===i||this.setImages(e,i)}},{key:"setImages",value:function(t,e){e&&this.selected?(this.imageObj=e,this.imageObjAlt=t):(this.imageObj=t,this.imageObjAlt=e)}},{key:"switchImages",value:function(t){var e=t&&!this.selected||!t&&this.selected;if(this.selected=t,void 0!==this.imageObjAlt&&e){var i=this.imageObj;this.imageObj=this.imageObjAlt,this.imageObjAlt=i}}},{key:"_resizeImage",value:function(){var t,e;if(!1===this.options.shapeProperties.useImageSize){var i=1,o=1;this.imageObj.width&&this.imageObj.height&&(this.imageObj.width>this.imageObj.height?i=this.imageObj.width/this.imageObj.height:o=this.imageObj.height/this.imageObj.width),t=2*this.options.size*i,e=2*this.options.size*o}else t=this.imageObj.width,e=this.imageObj.height;this.width=t,this.height=e,this.radius=.5*this.width}},{key:"_drawRawCircle",value:function(t,e,i,o){this.initContextForDraw(t,o),t.circle(e,i,o.size),this.performFill(t,o)}},{key:"_drawImageAtPosition",value:function(t,e){if(0!=this.imageObj.width){t.globalAlpha=1,this.enableShadow(t,e);var i=1;!0===this.options.shapeProperties.interpolation&&(i=this.imageObj.width/this.width/this.body.view.scale),this.imageObj.drawImageAtPosition(t,i,this.left,this.top,this.width,this.height),this.disableShadow(t,e)}}},{key:"_drawImageLabel",value:function(t,e,i,o,n){var s,r=0;if(void 0!==this.height){r=.5*this.height;var a=this.labelModule.getTextSize(t,o,n);a.lineCount>=1&&(r+=a.height/2)}s=i+r,this.options.label&&(this.labelOffset=r),this.labelModule.draw(t,e,s,o,n,"hanging")}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(19),s=o(n),r=i(6),a=o(r),h=i(29),d=o(h),l=i(0),u=o(l),c=i(1),p=o(c),f=i(2),m=i(117).default,v=i(48).default,g=i(215).default,y=i(217).default,b=i(218).default,_=i(219).default,w=function(){function t(e,i,o,n){if((0,u.default)(this,t),void 0===i)throw new Error("No body provided");this.options=f.bridgeObject(o),this.globalOptions=o,this.defaultOptions=n,this.body=i,this.id=void 0,this.fromId=void 0,this.toId=void 0,this.selected=!1,this.hover=!1,this.labelDirty=!0,this.baseWidth=this.options.width,this.baseFontSize=this.options.font.size,this.from=void 0,this.to=void 0,this.edgeType=void 0,this.connected=!1,this.labelModule=new m(this.body,this.options,!0),this.setOptions(e)}return(0,p.default)(t,[{key:"setOptions",value:function(e){if(e){t.parseOptions(this.options,e,!0,this.globalOptions),void 0!==e.id&&(this.id=e.id),void 0!==e.from&&(this.fromId=e.from),void 0!==e.to&&(this.toId=e.to),void 0!==e.title&&(this.title=e.title),void 0!==e.value&&(e.value=parseFloat(e.value));var i=[e,this.options,this.defaultOptions];this.chooser=v.choosify("edge",i),this.updateLabelModule(e);var o=this.updateEdgeType();return this._setInteractionWidths(),this.connect(),void 0===e.hidden&&void 0===e.physics||(o=!0),o}}},{key:"getFormattingValues",value:function(){var t=!0===this.options.arrows.to||!0===this.options.arrows.to.enabled,e=!0===this.options.arrows.from||!0===this.options.arrows.from.enabled,i=!0===this.options.arrows.middle||!0===this.options.arrows.middle.enabled,o=this.options.color.inherit,n={toArrow:t,toArrowScale:this.options.arrows.to.scaleFactor,toArrowType:this.options.arrows.to.type,middleArrow:i,middleArrowScale:this.options.arrows.middle.scaleFactor,middleArrowType:this.options.arrows.middle.type,fromArrow:e,fromArrowScale:this.options.arrows.from.scaleFactor,fromArrowType:this.options.arrows.from.type,arrowStrikethrough:this.options.arrowStrikethrough,color:o?void 0:this.options.color.color,inheritsColor:o,opacity:this.options.color.opacity,hidden:this.options.hidden,length:this.options.length,shadow:this.options.shadow.enabled,shadowColor:this.options.shadow.color,shadowSize:this.options.shadow.size,shadowX:this.options.shadow.x,shadowY:this.options.shadow.y,dashes:this.options.dashes,width:this.options.width};if(this.selected||this.hover)if(!0===this.chooser){if(this.selected){var s=this.options.selectionWidth;"function"==typeof s?n.width=s(n.width):"number"==typeof s&&(n.width+=s),n.width=Math.max(n.width,.3/this.body.view.scale),n.color=this.options.color.highlight,n.shadow=this.options.shadow.enabled}else if(this.hover){var r=this.options.hoverWidth;"function"==typeof r?n.width=r(n.width):"number"==typeof r&&(n.width+=r),n.width=Math.max(n.width,.3/this.body.view.scale),n.color=this.options.color.hover,n.shadow=this.options.shadow.enabled}}else"function"==typeof this.chooser&&(this.chooser(n,this.options.id,this.selected,this.hover),void 0!==n.color&&(n.inheritsColor=!1),!1===n.shadow&&(n.shadowColor===this.options.shadow.color&&n.shadowSize===this.options.shadow.size&&n.shadowX===this.options.shadow.x&&n.shadowY===this.options.shadow.y||(n.shadow=!0)));else n.shadow=this.options.shadow.enabled,n.width=Math.max(n.width,.3/this.body.view.scale);return n}},{key:"updateLabelModule",value:function(t){var e=[t,this.options,this.globalOptions,this.defaultOptions];this.labelModule.update(this.options,e),void 0!==this.labelModule.baseSize&&(this.baseFontSize=this.labelModule.baseSize)}},{key:"updateEdgeType",value:function(){var t=this.options.smooth,e=!1,i=!0;return void 0!==this.edgeType&&((this.edgeType instanceof y&&!0===t.enabled&&"dynamic"===t.type||this.edgeType instanceof g&&!0===t.enabled&&"cubicBezier"===t.type||this.edgeType instanceof b&&!0===t.enabled&&"dynamic"!==t.type&&"cubicBezier"!==t.type||this.edgeType instanceof _&&!1===t.type.enabled)&&(i=!1),!0===i&&(e=this.cleanup())),!0===i?!0===t.enabled?"dynamic"===t.type?(e=!0,this.edgeType=new y(this.options,this.body,this.labelModule)):"cubicBezier"===t.type?this.edgeType=new g(this.options,this.body,this.labelModule):this.edgeType=new b(this.options,this.body,this.labelModule):this.edgeType=new _(this.options,this.body,this.labelModule):this.edgeType.setOptions(this.options),e}},{key:"connect",value:function(){this.disconnect(),this.from=this.body.nodes[this.fromId]||void 0,this.to=this.body.nodes[this.toId]||void 0,this.connected=void 0!==this.from&&void 0!==this.to,!0===this.connected?(this.from.attachEdge(this),this.to.attachEdge(this)):(this.from&&this.from.detachEdge(this),this.to&&this.to.detachEdge(this)),this.edgeType.connect()}},{key:"disconnect",value:function(){this.from&&(this.from.detachEdge(this),this.from=void 0),this.to&&(this.to.detachEdge(this),this.to=void 0),this.connected=!1}},{key:"getTitle",value:function(){return this.title}},{key:"isSelected",value:function(){return this.selected}},{key:"getValue",value:function(){return this.options.value}},{key:"setValueRange",value:function(t,e,i){if(void 0!==this.options.value){var o=this.options.scaling.customScalingFunction(t,e,i,this.options.value),n=this.options.scaling.max-this.options.scaling.min;if(!0===this.options.scaling.label.enabled){var s=this.options.scaling.label.max-this.options.scaling.label.min;this.options.font.size=this.options.scaling.label.min+o*s}this.options.width=this.options.scaling.min+o*n}else this.options.width=this.baseWidth,this.options.font.size=this.baseFontSize;this._setInteractionWidths(),this.updateLabelModule()}},{key:"_setInteractionWidths",value:function(){"function"==typeof this.options.hoverWidth?this.edgeType.hoverWidth=this.options.hoverWidth(this.options.width):this.edgeType.hoverWidth=this.options.hoverWidth+this.options.width,"function"==typeof this.options.selectionWidth?this.edgeType.selectionWidth=this.options.selectionWidth(this.options.width):this.edgeType.selectionWidth=this.options.selectionWidth+this.options.width}},{key:"draw",value:function(t){var e=this.getFormattingValues();if(!e.hidden){var i=this.edgeType.getViaNode(),o={};this.edgeType.fromPoint=this.edgeType.from,this.edgeType.toPoint=this.edgeType.to,e.fromArrow&&(o.from=this.edgeType.getArrowData(t,"from",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.fromPoint=o.from.core)),e.toArrow&&(o.to=this.edgeType.getArrowData(t,"to",i,this.selected,this.hover,e),!1===e.arrowStrikethrough&&(this.edgeType.toPoint=o.to.core)),e.middleArrow&&(o.middle=this.edgeType.getArrowData(t,"middle",i,this.selected,this.hover,e)),this.edgeType.drawLine(t,e,this.selected,this.hover,i),this.drawArrows(t,o,e),this.drawLabel(t,i)}}},{key:"drawArrows",value:function(t,e,i){i.fromArrow&&this.edgeType.drawArrowHead(t,i,this.selected,this.hover,e.from),i.middleArrow&&this.edgeType.drawArrowHead(t,i,this.selected,this.hover,e.middle),i.toArrow&&this.edgeType.drawArrowHead(t,i,this.selected,this.hover,e.to)}},{key:"drawLabel",value:function(t,e){if(void 0!==this.options.label){var i=this.from,o=this.to;if(this.labelModule.differentState(this.selected,this.hover)&&this.labelModule.getTextSize(t,this.selected,this.hover),i.id!=o.id){this.labelModule.pointToSelf=!1;var n=this.edgeType.getPoint(.5,e);t.save();var s=this._getRotation(t);0!=s.angle&&(t.translate(s.x,s.y),t.rotate(s.angle)),this.labelModule.draw(t,n.x,n.y,this.selected,this.hover),t.restore()}else{this.labelModule.pointToSelf=!0;var r,a,h=this.options.selfReferenceSize;i.shape.width>i.shape.height?(r=i.x+.5*i.shape.width,a=i.y-h):(r=i.x+h,a=i.y-.5*i.shape.height),n=this._pointOnCircle(r,a,h,.125),this.labelModule.draw(t,n.x,n.y,this.selected,this.hover)}}}},{key:"getItemsOnPoint",value:function(t){var e=[];if(this.labelModule.visible()){var i=this._getRotation();v.pointInRect(this.labelModule.getSize(),t,i)&&e.push({edgeId:this.id,labelId:0})}var o={left:t.x,top:t.y};return this.isOverlappingWith(o)&&e.push({edgeId:this.id}),e}},{key:"isOverlappingWith",value:function(t){if(this.connected){var e=this.from.x,i=this.from.y,o=this.to.x,n=this.to.y,s=t.left,r=t.top;return this.edgeType.getDistanceToEdge(e,i,o,n,s,r)<10}return!1}},{key:"_getRotation",value:function(t){var e=this.edgeType.getViaNode(),i=this.edgeType.getPoint(.5,e);void 0!==t&&this.labelModule.calculateLabelSize(t,this.selected,this.hover,i.x,i.y);var o={x:i.x,y:this.labelModule.size.yLine,angle:0};if(!this.labelModule.visible())return o;if("horizontal"===this.options.font.align)return o;var n=this.from.y-this.to.y,s=this.from.x-this.to.x,r=Math.atan2(n,s);return(r<-1&&s<0||r>0&&s<0)&&(r+=Math.PI),o.angle=r,o}},{key:"_pointOnCircle",value:function(t,e,i,o){var n=2*o*Math.PI;return{x:t+i*Math.cos(n),y:e-i*Math.sin(n)}}},{key:"select",value:function(){this.selected=!0}},{key:"unselect",value:function(){this.selected=!1}},{key:"cleanup",value:function(){return this.edgeType.cleanup()}},{key:"remove",value:function(){this.cleanup(),this.disconnect(),delete this.body.edges[this.id]}},{key:"endPointsValid",value:function(){return void 0!==this.body.nodes[this.fromId]&&void 0!==this.body.nodes[this.toId]}}],[{key:"parseOptions",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},n=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r=["arrowStrikethrough","id","from","hidden","hoverWidth","labelHighlightBold","length","line","opacity","physics","scaling","selectionWidth","selfReferenceSize","to","title","value","width","font","chosen","widthConstraint"];if(f.selectiveDeepExtend(r,t,e,i),v.isValidLabel(e.label)?t.label=e.label:t.label=void 0,f.mergeOptions(t,e,"smooth",o),f.mergeOptions(t,e,"shadow",o),void 0!==e.dashes&&null!==e.dashes?t.dashes=e.dashes:!0===i&&null===e.dashes&&(t.dashes=(0,d.default)(o.dashes)),void 0!==e.scaling&&null!==e.scaling?(void 0!==e.scaling.min&&(t.scaling.min=e.scaling.min),void 0!==e.scaling.max&&(t.scaling.max=e.scaling.max),f.mergeOptions(t.scaling,e.scaling,"label",o.scaling)):!0===i&&null===e.scaling&&(t.scaling=(0,d.default)(o.scaling)),void 0!==e.arrows&&null!==e.arrows)if("string"==typeof e.arrows){var h=e.arrows.toLowerCase();t.arrows.to.enabled=-1!=h.indexOf("to"),t.arrows.middle.enabled=-1!=h.indexOf("middle"),t.arrows.from.enabled=-1!=h.indexOf("from")}else{if("object"!==(0,a.default)(e.arrows))throw new Error("The arrow newOptions can only be an object or a string. Refer to the documentation. You used:"+(0,s.default)(e.arrows));f.mergeOptions(t.arrows,e.arrows,"to",o.arrows),f.mergeOptions(t.arrows,e.arrows,"middle",o.arrows),f.mergeOptions(t.arrows,e.arrows,"from",o.arrows)}else!0===i&&null===e.arrows&&(t.arrows=(0,d.default)(o.arrows));if(void 0!==e.color&&null!==e.color){var l=e.color,u=t.color;if(n)f.deepExtend(u,o.color,!1,i);else for(var c in u)u.hasOwnProperty(c)&&delete u[c];if(f.isString(u))u.color=u,u.highlight=u,u.hover=u,u.inherit=!1,void 0===l.opacity&&(u.opacity=1);else{var p=!1;void 0!==l.color&&(u.color=l.color,p=!0),void 0!==l.highlight&&(u.highlight=l.highlight,p=!0),void 0!==l.hover&&(u.hover=l.hover,p=!0),void 0!==l.inherit&&(u.inherit=l.inherit),void 0!==l.opacity&&(u.opacity=Math.min(1,Math.max(0,l.opacity))),!0===p?u.inherit=!1:void 0===u.inherit&&(u.inherit="from")}}else!0===i&&null===e.color&&(t.color=f.bridgeObject(o.color));!0===i&&null===e.font&&(t.font=f.bridgeObject(o.font))}}]),t}();e.default=w},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(118),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"_findBorderPositionBezier",value:function(t,e){var i,o,n,s,r,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this._getViaCoordinates(),h=0,d=0,l=1,u=this.to,c=!1;for(t.id===this.from.id&&(u=this.from,c=!0);d<=l&&h<10;){var p=.5*(d+l);if(i=this.getPoint(p,a),o=Math.atan2(u.y-i.y,u.x-i.x),n=u.distanceToBorder(e,o),s=Math.sqrt(Math.pow(i.x-u.x,2)+Math.pow(i.y-u.y,2)),r=n-s,Math.abs(r)<.2)break;r<0?!1===c?d=p:l=p:!1===c?l=p:d=p,h++}return i.t=p,i}},{key:"_getDistanceToBezierEdge",value:function(t,e,i,o,n,s,r){var a=1e9,h=void 0,d=void 0,l=void 0,u=void 0,c=void 0,p=t,f=e;for(d=1;d<10;d++)l=.1*d,u=Math.pow(1-l,2)*t+2*l*(1-l)*r.x+Math.pow(l,2)*i,c=Math.pow(1-l,2)*e+2*l*(1-l)*r.y+Math.pow(l,2)*o,d>0&&(h=this._getDistanceToLine(p,f,u,c,n,s),a=h<a?h:a),p=u,f=c;return a}},{key:"_bezierCurve",value:function(t,e,i,o){var n=void 0!==i&&void 0!==i.x,s=void 0!==o&&void 0!==o.x;t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),n&&s?t.bezierCurveTo(i.x,i.y,o.x,o.y,this.toPoint.x,this.toPoint.y):n?t.quadraticCurveTo(i.x,i.y,this.toPoint.x,this.toPoint.y):t.lineTo(this.toPoint.x,this.toPoint.y),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=i(2),d=function(){function t(){(0,s.default)(this,t)}return(0,a.default)(t,null,[{key:"getRange",value:function(t){var e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],o=1e9,n=-1e9,s=1e9,r=-1e9;if(i.length>0)for(var a=0;a<i.length;a++)e=t[i[a]],s>e.shape.boundingBox.left&&(s=e.shape.boundingBox.left),r<e.shape.boundingBox.right&&(r=e.shape.boundingBox.right),o>e.shape.boundingBox.top&&(o=e.shape.boundingBox.top),n<e.shape.boundingBox.bottom&&(n=e.shape.boundingBox.bottom);return 1e9===s&&-1e9===r&&1e9===o&&-1e9===n&&(o=0,n=0,s=0,r=0),{minX:s,maxX:r,minY:o,maxY:n}}},{key:"getRangeCore",value:function(t){var e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],o=1e9,n=-1e9,s=1e9,r=-1e9;if(i.length>0)for(var a=0;a<i.length;a++)e=t[i[a]],s>e.x&&(s=e.x),r<e.x&&(r=e.x),o>e.y&&(o=e.y),n<e.y&&(n=e.y);return 1e9===s&&-1e9===r&&1e9===o&&-1e9===n&&(o=0,n=0,s=0,r=0),{minX:s,maxX:r,minY:o,maxY:n}}},{key:"findCenter",value:function(t){return{x:.5*(t.maxX+t.minX),y:.5*(t.maxY+t.minY)}}},{key:"cloneOptions",value:function(t,e){var i={};return void 0===e||"node"===e?(h.deepExtend(i,t.options,!0),i.x=t.x,i.y=t.y,i.amountOfConnections=t.edges.length):h.deepExtend(i,t.options,!0),i}}]),t}();e.default=d},function(t,e,i){t.exports={default:i(124),__esModule:!0}},function(t,e,i){var o=i(50);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==o(t)?t.split(""):Object(t)}},function(t,e,i){var o=i(52),n=i(17),s=i(83),r=i(26),a=i(22),h=i(31),d=i(129),l=i(59),u=i(85),c=i(13)("iterator"),p=!([].keys&&"next"in[].keys()),f=function(){return this};t.exports=function(t,e,i,m,v,g,y){d(i,e,m);var b,_,w,x=function(t){if(!p&&t in M)return M[t];switch(t){case"keys":case"values":return function(){return new i(this,t)}}return function(){return new i(this,t)}},k=e+" Iterator",S="values"==v,D=!1,M=t.prototype,C=M[c]||M["@@iterator"]||v&&M[v],O=C||x(v),E=v?S?x("entries"):O:void 0,T="Array"==e?M.entries||C:C;if(T&&(w=u(T.call(new t)))!==Object.prototype&&w.next&&(l(w,k,!0),o||a(w,c)||r(w,c,f)),S&&C&&"values"!==C.name&&(D=!0,O=function(){return C.call(this)}),o&&!y||!p&&!D&&M[c]||r(M,c,O),h[e]=O,h[k]=f,v)if(b={values:S?O:x("values"),keys:g?O:x("keys"),entries:E},y)for(_ in b)_ in M||s(M,_,b[_]);else n(n.P+n.F*(p||D),e,b);return b}},function(t,e,i){var o=i(128);t.exports=function(t,e,i){if(o(t),void 0===e)return t;switch(i){case 1:return function(i){return t.call(e,i)};case 2:return function(i,o){return t.call(e,i,o)};case 3:return function(i,o,n){return t.call(e,i,o,n)}}return function(){return t.apply(e,arguments)}}},function(t,e,i){t.exports=!i(21)&&!i(28)(function(){return 7!=Object.defineProperty(i(82)("div"),"a",{get:function(){return 7}}).a})},function(t,e,i){var o=i(32),n=i(18).document,s=o(n)&&o(n.createElement);t.exports=function(t){return s?n.createElement(t):{}}},function(t,e,i){t.exports=i(26)},function(t,e,i){var o=i(22),n=i(25),s=i(131)(!1),r=i(56)("IE_PROTO");t.exports=function(t,e){var i,a=n(t),h=0,d=[];for(i in a)i!=r&&o(a,i)&&d.push(i);for(;e.length>h;)o(a,i=e[h++])&&(~s(d,i)||d.push(i));return d}},function(t,e,i){var o=i(22),n=i(41),s=i(56)("IE_PROTO"),r=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=n(t),o(t,s)?t[s]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?r:null}},function(t,e,i){var o=i(50),n=i(13)("toStringTag"),s="Arguments"==o(function(){return arguments}()),r=function(t,e){try{return t[e]}catch(t){}};t.exports=function(t){var e,i,a;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(i=r(e=Object(t),n))?i:s?o(e):"Object"==(a=o(e))&&"function"==typeof e.callee?"Arguments":a}},function(t,e,i){var o=i(17),n=i(7),s=i(28);t.exports=function(t,e){var i=(n.Object||{})[t]||Object[t],r={};r[t]=e(i),o(o.S+o.F*s(function(){i(1)}),"Object",r)}},function(t,e,i){var o=i(84),n=i(58).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return o(t,n)}},function(t,e,i){var o=i(42),n=i(39),s=i(25),r=i(53),a=i(22),h=i(81),d=Object.getOwnPropertyDescriptor;e.f=i(21)?d:function(t,e){if(t=s(t),e=r(e,!0),h)try{return d(t,e)}catch(t){}if(a(t,e))return n(!o.f.call(t,e),t[e])}},function(t,e,i){t.exports={default:i(162),__esModule:!0}},function(t,e,i){function o(t,e){this.x=void 0!==t?t:0,this.y=void 0!==e?e:0}t.exports=o},function(t,e,i){function o(t,e){if(void 0===t)throw new Error("No container element defined");if(this.container=t,this.visible=!e||void 0==e.visible||e.visible,this.visible){this.frame=document.createElement("DIV"),this.frame.style.width="100%",this.frame.style.position="relative",this.container.appendChild(this.frame),this.frame.prev=document.createElement("INPUT"),this.frame.prev.type="BUTTON",this.frame.prev.value="Prev",this.frame.appendChild(this.frame.prev),this.frame.play=document.createElement("INPUT"),this.frame.play.type="BUTTON",this.frame.play.value="Play",this.frame.appendChild(this.frame.play),this.frame.next=document.createElement("INPUT"),this.frame.next.type="BUTTON",this.frame.next.value="Next",this.frame.appendChild(this.frame.next),this.frame.bar=document.createElement("INPUT"),this.frame.bar.type="BUTTON",this.frame.bar.style.position="absolute",this.frame.bar.style.border="1px solid red",this.frame.bar.style.width="100px",this.frame.bar.style.height="6px",this.frame.bar.style.borderRadius="2px",this.frame.bar.style.MozBorderRadius="2px",this.frame.bar.style.border="1px solid #7F7F7F",this.frame.bar.style.backgroundColor="#E5E5E5",this.frame.appendChild(this.frame.bar),this.frame.slide=document.createElement("INPUT"),this.frame.slide.type="BUTTON",this.frame.slide.style.margin="0px",this.frame.slide.value=" ",this.frame.slide.style.position="relative",this.frame.slide.style.left="-100px",this.frame.appendChild(this.frame.slide);var i=this;this.frame.slide.onmousedown=function(t){i._onMouseDown(t)},this.frame.prev.onclick=function(t){i.prev(t)},this.frame.play.onclick=function(t){i.togglePlay(t)},this.frame.next.onclick=function(t){i.next(t)}}this.onChangeCallback=void 0,this.values=[],this.index=void 0,this.playTimeout=void 0,this.playInterval=1e3,this.playLoop=!0}var n=i(2);o.prototype.prev=function(){var t=this.getIndex();t>0&&(t--,this.setIndex(t))},o.prototype.next=function(){var t=this.getIndex();t<this.values.length-1&&(t++,this.setIndex(t))},o.prototype.playNext=function(){var t=new Date,e=this.getIndex();e<this.values.length-1?(e++,this.setIndex(e)):this.playLoop&&(e=0,this.setIndex(e));var i=new Date,o=i-t,n=Math.max(this.playInterval-o,0),s=this;this.playTimeout=setTimeout(function(){s.playNext()},n)},o.prototype.togglePlay=function(){void 0===this.playTimeout?this.play():this.stop()},o.prototype.play=function(){this.playTimeout||(this.playNext(),this.frame&&(this.frame.play.value="Stop"))},o.prototype.stop=function(){clearInterval(this.playTimeout),this.playTimeout=void 0,this.frame&&(this.frame.play.value="Play")},o.prototype.setOnChangeCallback=function(t){this.onChangeCallback=t},o.prototype.setPlayInterval=function(t){this.playInterval=t},o.prototype.getPlayInterval=function(){return this.playInterval},o.prototype.setPlayLoop=function(t){this.playLoop=t},o.prototype.onChange=function(){void 0!==this.onChangeCallback&&this.onChangeCallback()},o.prototype.redraw=function(){if(this.frame){this.frame.bar.style.top=this.frame.clientHeight/2-this.frame.bar.offsetHeight/2+"px",this.frame.bar.style.width=this.frame.clientWidth-this.frame.prev.clientWidth-this.frame.play.clientWidth-this.frame.next.clientWidth-30+"px";var t=this.indexToLeft(this.index);this.frame.slide.style.left=t+"px"}},o.prototype.setValues=function(t){this.values=t,this.values.length>0?this.setIndex(0):this.index=void 0},o.prototype.setIndex=function(t){if(!(t<this.values.length))throw new Error("Index out of range");this.index=t,this.redraw(),this.onChange()},o.prototype.getIndex=function(){return this.index},o.prototype.get=function(){return this.values[this.index]},o.prototype._onMouseDown=function(t){if(t.which?1===t.which:1===t.button){this.startClientX=t.clientX,this.startSlideX=parseFloat(this.frame.slide.style.left),this.frame.style.cursor="move";var e=this;this.onmousemove=function(t){e._onMouseMove(t)},this.onmouseup=function(t){e._onMouseUp(t)},n.addEventListener(document,"mousemove",this.onmousemove),n.addEventListener(document,"mouseup",this.onmouseup),n.preventDefault(t)}},o.prototype.leftToIndex=function(t){var e=parseFloat(this.frame.bar.style.width)-this.frame.slide.clientWidth-10,i=t-3,o=Math.round(i/e*(this.values.length-1));return o<0&&(o=0),o>this.values.length-1&&(o=this.values.length-1),o},o.prototype.indexToLeft=function(t){var e=parseFloat(this.frame.bar.style.width)-this.frame.slide.clientWidth-10;return t/(this.values.length-1)*e+3},o.prototype._onMouseMove=function(t){var e=t.clientX-this.startClientX,i=this.startSlideX+e,o=this.leftToIndex(i);this.setIndex(o),n.preventDefault()},o.prototype._onMouseUp=function(t){this.frame.style.cursor="auto",n.removeEventListener(document,"mousemove",this.onmousemove),n.removeEventListener(document,"mouseup",this.onmouseup),n.preventDefault()},t.exports=o},function(t,e,i){function o(t,e,i,o){this._start=0,this._end=0,this._step=1,this.prettyStep=!0,this.precision=5,this._current=0,this.setRange(t,e,i,o)}o.prototype.isNumeric=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},o.prototype.setRange=function(t,e,i,o){if(!this.isNumeric(t))throw new Error("Parameter 'start' is not numeric; value: "+t);if(!this.isNumeric(e))throw new Error("Parameter 'end' is not numeric; value: "+t);if(!this.isNumeric(i))throw new Error("Parameter 'step' is not numeric; value: "+t);this._start=t||0,this._end=e||0,this.setStep(i,o)},o.prototype.setStep=function(t,e){void 0===t||t<=0||(void 0!==e&&(this.prettyStep=e),!0===this.prettyStep?this._step=o.calculatePrettyStep(t):this._step=t)},o.calculatePrettyStep=function(t){var e=function(t){return Math.log(t)/Math.LN10},i=Math.pow(10,Math.round(e(t))),o=2*Math.pow(10,Math.round(e(t/2))),n=5*Math.pow(10,Math.round(e(t/5))),s=i;return Math.abs(o-t)<=Math.abs(s-t)&&(s=o),Math.abs(n-t)<=Math.abs(s-t)&&(s=n),s<=0&&(s=1),s},o.prototype.getCurrent=function(){return parseFloat(this._current.toPrecision(this.precision))},o.prototype.getStep=function(){return this._step},o.prototype.start=function(t){void 0===t&&(t=!1),this._current=this._start-this._start%this._step,t&&this.getCurrent()<this._start&&this.next()},o.prototype.next=function(){this._current+=this._step},o.prototype.end=function(){return this._current>this._end},t.exports=o},function(t,e,i){function o(t){for(var e in t)if(t.hasOwnProperty(e))return!1;return!0}function n(t){return void 0===t||""===t||"string"!=typeof t?t:t.charAt(0).toUpperCase()+t.slice(1)}function s(t,e){return void 0===t||""===t?e:t+n(e)}function r(t,e,i,o){for(var n,r,a=0;a<i.length;++a)n=i[a],r=s(o,n),e[r]=t[n]}function a(t,e,i,o){for(var n,r,a=0;a<i.length;++a)n=i[a],void 0!==t[n]&&(r=s(o,n),e[r]=t[n])}function h(t,e){if(void 0===t||o(t))throw new Error("No DEFAULTS passed");if(void 0===e)throw new Error("No dst passed");C=t,r(t,e,D),r(t,e,M,"default"),l(t,e),e.margin=10,e.showGrayBottom=!1,e.showTooltip=!1,e.onclick_callback=null,e.eye=new x(0,0,-1)}function d(t,e){if(void 0!==t){if(void 0===e)throw new Error("No dst passed");if(void 0===C||o(C))throw new Error("DEFAULTS not set for module Settings");a(t,e,D),a(t,e,M,"default"),l(t,e)}}function l(t,e){void 0!==t.backgroundColor&&m(t.backgroundColor,e),v(t.dataColor,e),f(t.style,e),u(t.showLegend,e),g(t.cameraPosition,e),void 0!==t.tooltip&&(e.showTooltip=t.tooltip),void 0!=t.onclick&&(e.onclick_callback=t.onclick),void 0!==t.tooltipStyle&&_.selectiveDeepExtend(["tooltipStyle"],e,t)}function u(t,e){if(void 0===t){if(void 0===C.showLegend){var i=e.style===k.DOTCOLOR||e.style===k.DOTSIZE;e.showLegend=i}}else e.showLegend=t}function c(t){var e=S[t];return void 0===e?-1:e}function p(t){var e=!1;for(var i in k)if(k[i]===t){e=!0;break}return e}function f(t,e){if(void 0!==t){var i;if("string"==typeof t){if(-1===(i=c(t)))throw new Error("Style '"+t+"' is invalid")}else{if(!p(t))throw new Error("Style '"+t+"' is invalid");i=t}e.style=i}}function m(t,e){var i="white",o="gray",n=1;if("string"==typeof t)i=t,o="none",n=0;else{if("object"!==(void 0===t?"undefined":(0,b.default)(t)))throw new Error("Unsupported type of backgroundColor");void 0!==t.fill&&(i=t.fill),void 0!==t.stroke&&(o=t.stroke),void 0!==t.strokeWidth&&(n=t.strokeWidth)}e.frame.style.backgroundColor=i,e.frame.style.borderColor=o,e.frame.style.borderWidth=n+"px",e.frame.style.borderStyle="solid"}function v(t,e){void 0!==t&&(void 0===e.dataColor&&(e.dataColor={}),"string"==typeof t?(e.dataColor.fill=t,e.dataColor.stroke=t):(t.fill&&(e.dataColor.fill=t.fill),t.stroke&&(e.dataColor.stroke=t.stroke),void 0!==t.strokeWidth&&(e.dataColor.strokeWidth=t.strokeWidth)))}function g(t,e){var i=t;void 0!==i&&(void 0===e.camera&&(e.camera=new w),e.camera.setArmRotation(i.horizontal,i.vertical),e.camera.setArmLength(i.distance))}var y=i(6),b=function(t){return t&&t.__esModule?t:{default:t}}(y),_=i(2),w=i(95),x=i(34),k={BAR:0,BARCOLOR:1,BARSIZE:2,DOT:3,DOTLINE:4,DOTCOLOR:5,DOTSIZE:6,GRID:7,LINE:8,SURFACE:9},S={dot:k.DOT,"dot-line":k.DOTLINE,"dot-color":k.DOTCOLOR,"dot-size":k.DOTSIZE,line:k.LINE,grid:k.GRID,surface:k.SURFACE,bar:k.BAR,"bar-color":k.BARCOLOR,"bar-size":k.BARSIZE},D=["width","height","filterLabel","legendLabel","xLabel","yLabel","zLabel","xValueLabel","yValueLabel","zValueLabel","showXAxis","showYAxis","showZAxis","showGrid","showPerspective","showShadow","keepAspectRatio","verticalRatio","dotSizeRatio","dotSizeMinFraction","dotSizeMaxFraction","showAnimationControls","animationInterval","animationPreload","animationAutoStart","axisColor","gridColor","xCenter","yCenter"],M=["xBarWidth","yBarWidth","valueMin","valueMax","xMin","xMax","xStep","yMin","yMax","yStep","zMin","zMax","zStep"],C=void 0;t.exports.STYLE=k,t.exports.setDefaults=h,t.exports.setOptions=d,t.exports.setCameraPosition=g},function(t,e,i){function o(){this.armLocation=new r,this.armRotation={},this.armRotation.horizontal=0,this.armRotation.vertical=0,this.armLength=1.7,this.cameraOffset=new r,this.offsetMultiplier=.6,this.cameraLocation=new r,this.cameraRotation=new r(.5*Math.PI,0,0),this.calculateCameraOrientation()}var n=i(165),s=function(t){return t&&t.__esModule?t:{default:t}}(n),r=i(34);o.prototype.setOffset=function(t,e){var i=Math.abs,o=s.default,n=this.offsetMultiplier,r=this.armLength*n;i(t)>r&&(t=o(t)*r),i(e)>r&&(e=o(e)*r),this.cameraOffset.x=t,this.cameraOffset.y=e,this.calculateCameraOrientation()},o.prototype.getOffset=function(){return this.cameraOffset},o.prototype.setArmLocation=function(t,e,i){this.armLocation.x=t,this.armLocation.y=e,this.armLocation.z=i,this.calculateCameraOrientation()},o.prototype.setArmRotation=function(t,e){void 0!==t&&(this.armRotation.horizontal=t),void 0!==e&&(this.armRotation.vertical=e,this.armRotation.vertical<0&&(this.armRotation.vertical=0),this.armRotation.vertical>.5*Math.PI&&(this.armRotation.vertical=.5*Math.PI)),void 0===t&&void 0===e||this.calculateCameraOrientation()},o.prototype.getArmRotation=function(){var t={};return t.horizontal=this.armRotation.horizontal,t.vertical=this.armRotation.vertical,t},o.prototype.setArmLength=function(t){void 0!==t&&(this.armLength=t,this.armLength<.71&&(this.armLength=.71),this.armLength>5&&(this.armLength=5),this.setOffset(this.cameraOffset.x,this.cameraOffset.y),this.calculateCameraOrientation())},
+o.prototype.getArmLength=function(){return this.armLength},o.prototype.getCameraLocation=function(){return this.cameraLocation},o.prototype.getCameraRotation=function(){return this.cameraRotation},o.prototype.calculateCameraOrientation=function(){this.cameraLocation.x=this.armLocation.x-this.armLength*Math.sin(this.armRotation.horizontal)*Math.cos(this.armRotation.vertical),this.cameraLocation.y=this.armLocation.y-this.armLength*Math.cos(this.armRotation.horizontal)*Math.cos(this.armRotation.vertical),this.cameraLocation.z=this.armLocation.z+this.armLength*Math.sin(this.armRotation.vertical),this.cameraRotation.x=Math.PI/2-this.armRotation.vertical,this.cameraRotation.y=0,this.cameraRotation.z=-this.armRotation.horizontal;var t=this.cameraRotation.x,e=this.cameraRotation.z,i=this.cameraOffset.x,o=this.cameraOffset.y,n=Math.sin,s=Math.cos;this.cameraLocation.x=this.cameraLocation.x+i*s(e)+o*-n(e)*s(t),this.cameraLocation.y=this.cameraLocation.y+i*n(e)+o*s(e)*s(t),this.cameraLocation.z=this.cameraLocation.z+o*n(t)},t.exports=o},function(t,e,i){function o(t,e,i){this.dataGroup=t,this.column=e,this.graph=i,this.index=void 0,this.value=void 0,this.values=t.getDistinctValues(this.column),this.values.length>0&&this.selectValue(0),this.dataPoints=[],this.loaded=!1,this.onLoadCallback=void 0,i.animationPreload?(this.loaded=!1,this.loadInBackground()):this.loaded=!0}var n=i(12);o.prototype.isLoaded=function(){return this.loaded},o.prototype.getLoadedProgress=function(){for(var t=this.values.length,e=0;this.dataPoints[e];)e++;return Math.round(e/t*100)},o.prototype.getLabel=function(){return this.graph.filterLabel},o.prototype.getColumn=function(){return this.column},o.prototype.getSelectedValue=function(){if(void 0!==this.index)return this.values[this.index]},o.prototype.getValues=function(){return this.values},o.prototype.getValue=function(t){if(t>=this.values.length)throw new Error("Index out of range");return this.values[t]},o.prototype._getDataPoints=function(t){if(void 0===t&&(t=this.index),void 0===t)return[];var e;if(this.dataPoints[t])e=this.dataPoints[t];else{var i={};i.column=this.column,i.value=this.values[t];var o=new n(this.dataGroup.getDataSet(),{filter:function(t){return t[i.column]==i.value}}).get();e=this.dataGroup._getDataPoints(o),this.dataPoints[t]=e}return e},o.prototype.setOnLoadCallback=function(t){this.onLoadCallback=t},o.prototype.selectValue=function(t){if(t>=this.values.length)throw new Error("Index out of range");this.index=t,this.value=this.values[t]},o.prototype.loadInBackground=function(t){void 0===t&&(t=0);var e=this.graph.frame;if(t<this.values.length){void 0===e.progress&&(e.progress=document.createElement("DIV"),e.progress.style.position="absolute",e.progress.style.color="gray",e.appendChild(e.progress));var i=this.getLoadedProgress();e.progress.innerHTML="Loading animation... "+i+"%",e.progress.style.bottom="60px",e.progress.style.left="10px";var o=this;setTimeout(function(){o.loadInBackground(t+1)},10),this.loaded=!1}else this.loaded=!0,void 0!==e.progress&&(e.removeChild(e.progress),e.progress=void 0),this.onLoadCallback&&this.onLoadCallback()},t.exports=o},function(t,e,i){function o(t){this.active=!1,this.dom={container:t},this.dom.overlay=document.createElement("div"),this.dom.overlay.className="vis-overlay",this.dom.container.appendChild(this.dom.overlay),this.hammer=a(this.dom.overlay),this.hammer.on("tap",this._onTapOverlay.bind(this));var e=this;["tap","doubletap","press","pinch","pan","panstart","panmove","panend"].forEach(function(t){e.hammer.on(t,function(t){t.stopPropagation()})}),document&&document.body&&(this.onClick=function(i){n(i.target,t)||e.deactivate()},document.body.addEventListener("click",this.onClick)),void 0!==this.keycharm&&this.keycharm.destroy(),this.keycharm=s(),this.escListener=this.deactivate.bind(this)}function n(t,e){for(;t;){if(t===e)return!0;t=t.parentNode}return!1}var s=i(35),r=i(44),a=i(10),h=i(2);r(o.prototype),o.current=null,o.prototype.destroy=function(){this.deactivate(),this.dom.overlay.parentNode.removeChild(this.dom.overlay),this.onClick&&document.body.removeEventListener("click",this.onClick),this.hammer.destroy(),this.hammer=null},o.prototype.activate=function(){o.current&&o.current.deactivate(),o.current=this,this.active=!0,this.dom.overlay.style.display="none",h.addClassName(this.dom.container,"vis-active"),this.emit("change"),this.emit("activate"),this.keycharm.bind("esc",this.escListener)},o.prototype.deactivate=function(){this.active=!1,this.dom.overlay.style.display="",h.removeClassName(this.dom.container,"vis-active"),this.keycharm.unbind("esc",this.escListener),this.emit("change"),this.emit("deactivate")},o.prototype._onTapOverlay=function(t){this.activate(),t.stopPropagation()},t.exports=o},function(t,e,i){e.en={current:"current",time:"time"},e.en_EN=e.en,e.en_US=e.en,e.it={current:"attuale",time:"tempo"},e.it_IT=e.it,e.it_CH=e.it,e.nl={current:"huidige",time:"tijd"},e.nl_NL=e.nl,e.nl_BE=e.nl,e.de={current:"Aktuelle",time:"Zeit"},e.de_DE=e.de,e.fr={current:"actuel",time:"heure"},e.fr_FR=e.fr,e.fr_CA=e.fr,e.fr_BE=e.fr,e.es={current:"corriente",time:"hora"},e.es_ES=e.es},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(t,e){this.body=t,this.defaultOptions={type:null,orientation:{item:"bottom"},align:"auto",stack:!0,stackSubgroups:!0,groupOrderSwap:function(t,e,i){var o=e.order;e.order=t.order,t.order=o},groupOrder:"order",selectable:!0,multiselect:!1,itemsAlwaysDraggable:{item:!1,range:!1},editable:{updateTime:!1,updateGroup:!1,add:!1,remove:!1,overrideItems:!1},groupEditable:{order:!1,add:!1,remove:!1},snap:p.snap,onDropObjectOnItem:function(t,e,i){i(e)},onAdd:function(t,e){e(t)},onUpdate:function(t,e){e(t)},onMove:function(t,e){e(t)},onRemove:function(t,e){e(t)},onMoving:function(t,e){e(t)},onAddGroup:function(t,e){e(t)},onMoveGroup:function(t,e){e(t)},onRemoveGroup:function(t,e){e(t)},margin:{item:{horizontal:10,vertical:10},axis:20},showTooltips:!0,tooltip:{followMouse:!1,overflowMethod:"flip"},tooltipOnItemUpdateTime:!1},this.options=l.extend({},this.defaultOptions),this.options.rtl=e.rtl,this.itemOptions={type:{start:"Date",end:"Date"}},this.conversion={toScreen:t.util.toScreen,toTime:t.util.toTime},this.dom={},this.props={},this.hammer=null;var i=this;this.itemsData=null,this.groupsData=null,this.itemListeners={add:function(t,e,o){i._onAdd(e.items)},update:function(t,e,o){i._onUpdate(e.items)},remove:function(t,e,o){i._onRemove(e.items)}},this.groupListeners={add:function(t,e,o){if(i._onAddGroups(e.items),i.groupsData&&i.groupsData.length>0){var n=i.groupsData.getDataSet();n.get().forEach(function(t){if(t.nestedGroups){0!=t.showNested&&(t.showNested=!0);var e=[];t.nestedGroups.forEach(function(i){var o=n.get(i);o&&(o.nestedInGroup=t.id,0==t.showNested&&(o.visible=!1),e=e.concat(o))}),n.update(e,o)}})}},update:function(t,e,o){i._onUpdateGroups(e.items)},remove:function(t,e,o){i._onRemoveGroups(e.items)}},this.items={},this.groups={},this.groupIds=[],this.selection=[],this.popup=null,this.touchParams={},this.groupTouchParams={},this._create(),this.setOptions(e)}var s=i(29),r=o(s),a=i(6),h=o(a),d=i(10),l=i(2),u=i(11),c=i(12),p=i(66),f=i(16),m=i(68),v=i(69),g=i(101),y=i(102),b=i(70),_=i(103),w=i(104).default,x="__ungrouped__",k="__background__";n.prototype=new f,n.types={background:_,box:g,range:b,point:y},n.prototype._create=function(){var t=document.createElement("div");t.className="vis-itemset",t["timeline-itemset"]=this,this.dom.frame=t;var e=document.createElement("div");e.className="vis-background",t.appendChild(e),this.dom.background=e;var i=document.createElement("div");i.className="vis-foreground",t.appendChild(i),this.dom.foreground=i;var o=document.createElement("div");o.className="vis-axis",this.dom.axis=o;var n=document.createElement("div");n.className="vis-labelset",this.dom.labelSet=n,this._updateUngrouped();var s=new v(k,null,this);s.show(),this.groups[k]=s,this.hammer=new d(this.body.dom.centerContainer),this.hammer.on("hammer.input",function(t){t.isFirst&&this._onTouch(t)}.bind(this)),this.hammer.on("panstart",this._onDragStart.bind(this)),this.hammer.on("panmove",this._onDrag.bind(this)),this.hammer.on("panend",this._onDragEnd.bind(this)),this.hammer.get("pan").set({threshold:5,direction:d.DIRECTION_HORIZONTAL}),this.hammer.on("tap",this._onSelectItem.bind(this)),this.hammer.on("press",this._onMultiSelectItem.bind(this)),this.hammer.on("doubletap",this._onAddItem.bind(this)),this.options.rtl?this.groupHammer=new d(this.body.dom.rightContainer):this.groupHammer=new d(this.body.dom.leftContainer),this.groupHammer.on("tap",this._onGroupClick.bind(this)),this.groupHammer.on("panstart",this._onGroupDragStart.bind(this)),this.groupHammer.on("panmove",this._onGroupDrag.bind(this)),this.groupHammer.on("panend",this._onGroupDragEnd.bind(this)),this.groupHammer.get("pan").set({threshold:5,direction:d.DIRECTION_VERTICAL}),this.body.dom.centerContainer.addEventListener("mouseover",this._onMouseOver.bind(this)),this.body.dom.centerContainer.addEventListener("mouseout",this._onMouseOut.bind(this)),this.body.dom.centerContainer.addEventListener("mousemove",this._onMouseMove.bind(this)),this.body.dom.centerContainer.addEventListener("contextmenu",this._onDragEnd.bind(this)),this.body.dom.centerContainer.addEventListener("mousewheel",this._onMouseWheel.bind(this)),this.show()},n.prototype.setOptions=function(t){if(t){var e=["type","rtl","align","order","stack","stackSubgroups","selectable","multiselect","multiselectPerGroup","groupOrder","dataAttributes","template","groupTemplate","visibleFrameTemplate","hide","snap","groupOrderSwap","showTooltips","tooltip","tooltipOnItemUpdateTime"];l.selectiveExtend(e,this.options,t),"itemsAlwaysDraggable"in t&&("boolean"==typeof t.itemsAlwaysDraggable?(this.options.itemsAlwaysDraggable.item=t.itemsAlwaysDraggable,this.options.itemsAlwaysDraggable.range=!1):"object"===(0,h.default)(t.itemsAlwaysDraggable)&&(l.selectiveExtend(["item","range"],this.options.itemsAlwaysDraggable,t.itemsAlwaysDraggable),this.options.itemsAlwaysDraggable.item||(this.options.itemsAlwaysDraggable.range=!1))),"orientation"in t&&("string"==typeof t.orientation?this.options.orientation.item="top"===t.orientation?"top":"bottom":"object"===(0,h.default)(t.orientation)&&"item"in t.orientation&&(this.options.orientation.item=t.orientation.item)),"margin"in t&&("number"==typeof t.margin?(this.options.margin.axis=t.margin,this.options.margin.item.horizontal=t.margin,this.options.margin.item.vertical=t.margin):"object"===(0,h.default)(t.margin)&&(l.selectiveExtend(["axis"],this.options.margin,t.margin),"item"in t.margin&&("number"==typeof t.margin.item?(this.options.margin.item.horizontal=t.margin.item,this.options.margin.item.vertical=t.margin.item):"object"===(0,h.default)(t.margin.item)&&l.selectiveExtend(["horizontal","vertical"],this.options.margin.item,t.margin.item)))),"editable"in t&&("boolean"==typeof t.editable?(this.options.editable.updateTime=t.editable,this.options.editable.updateGroup=t.editable,this.options.editable.add=t.editable,this.options.editable.remove=t.editable,this.options.editable.overrideItems=!1):"object"===(0,h.default)(t.editable)&&l.selectiveExtend(["updateTime","updateGroup","add","remove","overrideItems"],this.options.editable,t.editable)),"groupEditable"in t&&("boolean"==typeof t.groupEditable?(this.options.groupEditable.order=t.groupEditable,this.options.groupEditable.add=t.groupEditable,this.options.groupEditable.remove=t.groupEditable):"object"===(0,h.default)(t.groupEditable)&&l.selectiveExtend(["order","add","remove"],this.options.groupEditable,t.groupEditable));["onDropObjectOnItem","onAdd","onUpdate","onRemove","onMove","onMoving","onAddGroup","onMoveGroup","onRemoveGroup"].forEach(function(e){var i=t[e];if(i){if(!(i instanceof Function))throw new Error("option "+e+" must be a function "+e+"(item, callback)");this.options[e]=i}}.bind(this)),this.markDirty()}},n.prototype.markDirty=function(t){this.groupIds=[],t&&t.refreshItems&&l.forEach(this.items,function(t){t.dirty=!0,t.displayed&&t.redraw()})},n.prototype.destroy=function(){this.hide(),this.setItems(null),this.setGroups(null),this.hammer=null,this.body=null,this.conversion=null},n.prototype.hide=function(){this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame),this.dom.axis.parentNode&&this.dom.axis.parentNode.removeChild(this.dom.axis),this.dom.labelSet.parentNode&&this.dom.labelSet.parentNode.removeChild(this.dom.labelSet)},n.prototype.show=function(){this.dom.frame.parentNode||this.body.dom.center.appendChild(this.dom.frame),this.dom.axis.parentNode||this.body.dom.backgroundVertical.appendChild(this.dom.axis),this.dom.labelSet.parentNode||(this.options.rtl?this.body.dom.right.appendChild(this.dom.labelSet):this.body.dom.left.appendChild(this.dom.labelSet))},n.prototype.setSelection=function(t){var e,i,o,n;for(void 0==t&&(t=[]),Array.isArray(t)||(t=[t]),e=0,i=this.selection.length;e<i;e++)o=this.selection[e],(n=this.items[o])&&n.unselect();for(this.selection=[],e=0,i=t.length;e<i;e++)o=t[e],(n=this.items[o])&&(this.selection.push(o),n.select())},n.prototype.getSelection=function(){return this.selection.concat([])},n.prototype.getVisibleItems=function(){var t,e,i=this.body.range.getRange();this.options.rtl?(t=this.body.util.toScreen(i.start),e=this.body.util.toScreen(i.end)):(e=this.body.util.toScreen(i.start),t=this.body.util.toScreen(i.end));var o=[];for(var n in this.groups)if(this.groups.hasOwnProperty(n))for(var s=this.groups[n],r=s.isVisible?s.visibleItems:[],a=0;a<r.length;a++){var h=r[a];this.options.rtl?h.right<e&&h.right+h.width>t&&o.push(h.id):h.left<t&&h.left+h.width>e&&o.push(h.id)}return o},n.prototype._deselect=function(t){for(var e=this.selection,i=0,o=e.length;i<o;i++)if(e[i]==t){e.splice(i,1);break}},n.prototype.redraw=function(){var t=this.options.margin,e=this.body.range,i=l.option.asSize,o=this.options,n=o.orientation.item,s=!1,r=this.dom.frame;this.props.top=this.body.domProps.top.height+this.body.domProps.border.top,this.options.rtl?this.props.right=this.body.domProps.right.width+this.body.domProps.border.right:this.props.left=this.body.domProps.left.width+this.body.domProps.border.left,r.className="vis-itemset",s=this._orderGroups()||s;var a=e.end-e.start,h=a!=this.lastVisibleInterval||this.props.width!=this.props.lastWidth,d=e.start!=this.lastRangeStart,u=o.stack!=this.lastStack,c=o.stackSubgroups!=this.lastStackSubgroups,p=h||d||u||c;this.lastVisibleInterval=a,this.lastRangeStart=e.start,this.lastStack=o.stack,this.lastStackSubgroups=o.stackSubgroups,this.props.lastWidth=this.props.width;var f=this._firstGroup(),m={item:t.item,axis:t.axis},v={item:t.item,axis:t.item.vertical/2},g=0,y=t.axis+t.item.vertical;this.groups[k].redraw(e,v,p);var b={},_=0;if(l.forEach(this.groups,function(t,i){if(i!==k){var o=t==f?m:v;b[i]=t.redraw(e,o,p,!0),_=b[i].length}}),_>0){for(var w={},x=0;x<_;x++)l.forEach(b,function(t,e){w[e]=t[x]()});l.forEach(this.groups,function(t,e){if(e!==k){var i=w[e];s=i||s,g+=t.height}}),g=Math.max(g,y)}return g=Math.max(g,y),r.style.height=i(g),this.props.width=r.offsetWidth,this.props.height=g,this.dom.axis.style.top=i("top"==n?this.body.domProps.top.height+this.body.domProps.border.top:this.body.domProps.top.height+this.body.domProps.centerContainer.height),this.options.rtl?this.dom.axis.style.right="0":this.dom.axis.style.left="0",this.initialItemSetDrawn=!0,s=this._isResized()||s},n.prototype._firstGroup=function(){var t="top"==this.options.orientation.item?0:this.groupIds.length-1,e=this.groupIds[t];return this.groups[e]||this.groups[x]||null},n.prototype._updateUngrouped=function(){var t,e,i=this.groups[x];if(this.groupsData){if(i){i.hide(),delete this.groups[x];for(e in this.items)if(this.items.hasOwnProperty(e)){t=this.items[e],t.parent&&t.parent.remove(t);var o=this._getGroupId(t.data),n=this.groups[o];n&&n.add(t)||t.hide()}}}else if(!i){i=new m(null,null,this),this.groups[x]=i;for(e in this.items)this.items.hasOwnProperty(e)&&(t=this.items[e],i.add(t));i.show()}},n.prototype.getLabelSet=function(){return this.dom.labelSet},n.prototype.setItems=function(t){var e,i=this,o=this.itemsData;if(t){if(!(t instanceof u||t instanceof c))throw new TypeError("Data must be an instance of DataSet or DataView");this.itemsData=t}else this.itemsData=null;if(o&&(l.forEach(this.itemListeners,function(t,e){o.off(e,t)}),e=o.getIds(),this._onRemove(e)),this.itemsData){var n=this.id;l.forEach(this.itemListeners,function(t,e){i.itemsData.on(e,t,n)}),e=this.itemsData.getIds(),this._onAdd(e),this._updateUngrouped()}this.body.emitter.emit("_change",{queue:!0})},n.prototype.getItems=function(){return this.itemsData},n.prototype.setGroups=function(t){var e,i=this;if(this.groupsData&&(l.forEach(this.groupListeners,function(t,e){i.groupsData.off(e,t)}),e=this.groupsData.getIds(),this.groupsData=null,this._onRemoveGroups(e)),t){if(!(t instanceof u||t instanceof c))throw new TypeError("Data must be an instance of DataSet or DataView");this.groupsData=t}else this.groupsData=null;if(this.groupsData){var o=this.groupsData;this.groupsData instanceof c&&(o=this.groupsData.getDataSet()),o.get().forEach(function(t){t.nestedGroups&&t.nestedGroups.forEach(function(e){var i=o.get(e);i.nestedInGroup=t.id,0==t.showNested&&(i.visible=!1),o.update(i)})});var n=this.id;l.forEach(this.groupListeners,function(t,e){i.groupsData.on(e,t,n)}),e=this.groupsData.getIds(),this._onAddGroups(e)}this._updateUngrouped(),this._order(),this.body.emitter.emit("_change",{queue:!0})},n.prototype.getGroups=function(){return this.groupsData},n.prototype.removeItem=function(t){var e=this.itemsData.get(t),i=this.itemsData.getDataSet();e&&this.options.onRemove(e,function(e){e&&i.remove(t)})},n.prototype._getType=function(t){return t.type||this.options.type||(t.end?"range":"box")},n.prototype._getGroupId=function(t){return"background"==this._getType(t)&&void 0==t.group?k:this.groupsData?t.group:x},n.prototype._onUpdate=function(t){var e=this;t.forEach(function(t){var i,o=e.itemsData.get(t,e.itemOptions),s=e.items[t],r=o?e._getType(o):null,a=n.types[r];if(s&&(a&&s instanceof a?e._updateItem(s,o):(i=s.selected,e._removeItem(s),s=null)),!s&&o){if(!a)throw"rangeoverflow"==r?new TypeError('Item type "rangeoverflow" is deprecated. Use css styling instead: .vis-item.vis-range .vis-item-content {overflow: visible;}'):new TypeError('Unknown item type "'+r+'"');s=new a(o,e.conversion,e.options),s.id=t,e._addItem(s),i&&(this.selection.push(t),s.select())}}.bind(this)),this._order(),this.body.emitter.emit("_change",{queue:!0})},n.prototype._onAdd=n.prototype._onUpdate,n.prototype._onRemove=function(t){var e=0,i=this;t.forEach(function(t){var o=i.items[t];o&&(e++,i._removeItem(o))}),e&&(this._order(),this.body.emitter.emit("_change",{queue:!0}))},n.prototype._order=function(){l.forEach(this.groups,function(t){t.order()})},n.prototype._onUpdateGroups=function(t){this._onAddGroups(t)},n.prototype._onAddGroups=function(t){var e=this;t.forEach(function(t){var i=e.groupsData.get(t),o=e.groups[t];if(o)o.setData(i);else{if(t==x||t==k)throw new Error("Illegal group id. "+t+" is a reserved id.");var n=(0,r.default)(e.options);l.extend(n,{height:null}),o=new m(t,i,e),e.groups[t]=o;for(var s in e.items)if(e.items.hasOwnProperty(s)){var a=e.items[s];a.data.group==t&&o.add(a)}o.order(),o.show()}}),this.body.emitter.emit("_change",{queue:!0})},n.prototype._onRemoveGroups=function(t){var e=this.groups;t.forEach(function(t){var i=e[t];i&&(i.hide(),delete e[t])}),this.markDirty(),this.body.emitter.emit("_change",{queue:!0})},n.prototype._orderGroups=function(){if(this.groupsData){var t=this.groupsData.getIds({order:this.options.groupOrder});t=this._orderNestedGroups(t);var e=!l.equalArray(t,this.groupIds);if(e){var i=this.groups;t.forEach(function(t){i[t].hide()}),t.forEach(function(t){i[t].show()}),this.groupIds=t}return e}return!1},n.prototype._orderNestedGroups=function(t){var e=[];return t.forEach(function(t){var i=this.groupsData.get(t);if(i.nestedInGroup||e.push(t),i.nestedGroups){var o=this.groupsData.get({filter:function(e){return e.nestedInGroup==t},order:this.options.groupOrder}),n=o.map(function(t){return t.id});e=e.concat(n)}},this),e},n.prototype._addItem=function(t){this.items[t.id]=t;var e=this._getGroupId(t.data),i=this.groups[e];i?i&&i.data&&i.data.showNested&&(t.groupShowing=!0):t.groupShowing=!1,i&&i.add(t)},n.prototype._updateItem=function(t,e){t.setData(e);var i=this._getGroupId(t.data),o=this.groups[i];o?o&&o.data&&o.data.showNested&&(t.groupShowing=!0):t.groupShowing=!1},n.prototype._removeItem=function(t){t.hide(),delete this.items[t.id];var e=this.selection.indexOf(t.id);-1!=e&&this.selection.splice(e,1),t.parent&&t.parent.remove(t)},n.prototype._constructByEndArray=function(t){for(var e=[],i=0;i<t.length;i++)t[i]instanceof b&&e.push(t[i]);return e},n.prototype._onTouch=function(t){this.touchParams.item=this.itemFromTarget(t),this.touchParams.dragLeftItem=t.target.dragLeftItem||!1,this.touchParams.dragRightItem=t.target.dragRightItem||!1,this.touchParams.itemProps=null},n.prototype._getGroupIndex=function(t){for(var e=0;e<this.groupIds.length;e++)if(t==this.groupIds[e])return e},n.prototype._onDragStart=function(t){if(!this.touchParams.itemIsDragging){var e,i=this.touchParams.item||null,o=this;if(i&&(i.selected||this.options.itemsAlwaysDraggable.item)){if(this.options.editable.overrideItems&&!this.options.editable.updateTime&&!this.options.editable.updateGroup)return;if(null!=i.editable&&!i.editable.updateTime&&!i.editable.updateGroup&&!this.options.editable.overrideItems)return;var n=this.touchParams.dragLeftItem,s=this.touchParams.dragRightItem;if(this.touchParams.itemIsDragging=!0,this.touchParams.selectedItem=i,n)e={item:n,initialX:t.center.x,dragLeft:!0,data:this._cloneItemData(i.data)},this.touchParams.itemProps=[e];else if(s)e={item:s,initialX:t.center.x,dragRight:!0,data:this._cloneItemData(i.data)},this.touchParams.itemProps=[e];else if(this.options.editable.add&&(t.srcEvent.ctrlKey||t.srcEvent.metaKey))this._onDragStartAddItem(t);else{this.groupIds.length<1&&this.redraw();var r=this._getGroupIndex(i.data.group),a=this.options.itemsAlwaysDraggable.item&&!i.selected?[i.id]:this.getSelection();this.touchParams.itemProps=a.map(function(e){var i=o.items[e],n=o._getGroupIndex(i.data.group);return{item:i,initialX:t.center.x,groupOffset:r-n,data:this._cloneItemData(i.data)}}.bind(this))}t.stopPropagation()}else this.options.editable.add&&(t.srcEvent.ctrlKey||t.srcEvent.metaKey)&&this._onDragStartAddItem(t)}},n.prototype._onDragStartAddItem=function(t){var e,i,o=this.options.snap||null;this.options.rtl?(e=l.getAbsoluteRight(this.dom.frame),i=e-t.center.x+10):(e=l.getAbsoluteLeft(this.dom.frame),i=t.center.x-e-10);var n=this.body.util.toTime(i),s=this.body.util.getScale(),r=this.body.util.getStep(),a=o?o(n,s,r):n,h=a,d={type:"range",start:a,end:h,content:"new item"},u=l.randomUUID();d[this.itemsData._fieldId]=u;var c=this.groupFromTarget(t);c&&(d.group=c.groupId);var p=new b(d,this.conversion,this.options);p.id=u,p.data=this._cloneItemData(d),this._addItem(p),this.touchParams.selectedItem=p;var f={item:p,initialX:t.center.x,data:p.data};this.options.rtl?f.dragLeft=!0:f.dragRight=!0,this.touchParams.itemProps=[f],t.stopPropagation()},n.prototype._onDrag=function(t){if(this.touchParams.itemProps){t.stopPropagation();var e,i=this,o=this.options.snap||null;e=this.options.rtl?this.body.dom.root.offsetLeft+this.body.domProps.right.width:this.body.dom.root.offsetLeft+this.body.domProps.left.width;var n=this.body.util.getScale(),s=this.body.util.getStep(),r=this.touchParams.selectedItem,a=(this.options.editable.overrideItems||null==r.editable)&&this.options.editable.updateGroup||!this.options.editable.overrideItems&&null!=r.editable&&r.editable.updateGroup,h=null;if(a&&r&&void 0!=r.data.group){var d=i.groupFromTarget(t);d&&(h=this._getGroupIndex(d.groupId))}this.touchParams.itemProps.forEach(function(d){var u,c,p,f,m,v=i.body.util.toTime(t.center.x-e),g=i.body.util.toTime(d.initialX-e);u=this.options.rtl?-(v-g):v-g;var y=this._cloneItemData(d.item.data);if(null==d.item.editable||d.item.editable.updateTime||d.item.editable.updateGroup||i.options.editable.overrideItems){if((this.options.editable.overrideItems||null==r.editable)&&this.options.editable.updateTime||!this.options.editable.overrideItems&&null!=r.editable&&r.editable.updateTime)if(d.dragLeft)this.options.rtl?void 0!=y.end&&(p=l.convert(d.data.end,"Date"),m=new Date(p.valueOf()+u),y.end=o?o(m,n,s):m):void 0!=y.start&&(c=l.convert(d.data.start,"Date"),f=new Date(c.valueOf()+u),y.start=o?o(f,n,s):f);else if(d.dragRight)this.options.rtl?void 0!=y.start&&(c=l.convert(d.data.start,"Date"),f=new Date(c.valueOf()+u),y.start=o?o(f,n,s):f):void 0!=y.end&&(p=l.convert(d.data.end,"Date"),m=new Date(p.valueOf()+u),y.end=o?o(m,n,s):m);else if(void 0!=y.start)if(c=l.convert(d.data.start,"Date").valueOf(),f=new Date(c+u),void 0!=y.end){p=l.convert(d.data.end,"Date");var b=p.valueOf()-c.valueOf();y.start=o?o(f,n,s):f,y.end=new Date(y.start.valueOf()+b)}else y.start=o?o(f,n,s):f;if(a&&!d.dragLeft&&!d.dragRight&&null!=h&&void 0!=y.group){var _=h-d.groupOffset;_=Math.max(0,_),_=Math.min(i.groupIds.length-1,_),y.group=i.groupIds[_]}y=this._cloneItemData(y),i.options.onMoving(y,function(t){t&&d.item.setData(this._cloneItemData(t,"Date"))}.bind(this))}}.bind(this)),this.body.emitter.emit("_change")}},n.prototype._moveToGroup=function(t,e){var i=this.groups[e];if(i&&i.groupId!=t.data.group){var o=t.parent;o.remove(t),o.order(),t.data.group=i.groupId,i.add(t),i.order()}},n.prototype._onDragEnd=function(t){if(this.touchParams.itemIsDragging=!1,this.touchParams.itemProps){t.stopPropagation();var e=this,i=this.itemsData.getDataSet(),o=this.touchParams.itemProps;this.touchParams.itemProps=null,o.forEach(function(t){var o=t.item.id;if(null!=e.itemsData.get(o,e.itemOptions)){var n=this._cloneItemData(t.item.data);e.options.onMove(n,function(n){n?(n[i._fieldId]=o,i.update(n)):(t.item.setData(t.data),e.body.emitter.emit("_change"))})}else e.options.onAdd(t.item.data,function(i){e._removeItem(t.item),i&&e.itemsData.getDataSet().add(i),e.body.emitter.emit("_change")})}.bind(this))}},n.prototype._onGroupClick=function(t){var e=this.groupFromTarget(t);if(e&&e.nestedGroups){var i=this.groupsData.getDataSet(),o=i.get(e.groupId);void 0==o.showNested&&(o.showNested=!0),o.showNested=!o.showNested;var n=i.get(e.nestedGroups).map(function(t){return t.visible=o.showNested,t});if(i.update(n.concat(o)),o.showNested)l.removeClassName(e.dom.label,"collapsed"),l.addClassName(e.dom.label,"expanded");else{l.removeClassName(e.dom.label,"expanded");var s=this.options.rtl?"collapsed-rtl":"collapsed";l.addClassName(e.dom.label,s)}}},n.prototype._onGroupDragStart=function(t){this.options.groupEditable.order&&(this.groupTouchParams.group=this.groupFromTarget(t),this.groupTouchParams.group&&(t.stopPropagation(),this.groupTouchParams.originalOrder=this.groupsData.getIds({order:this.options.groupOrder})))},n.prototype._onGroupDrag=function(t){if(this.options.groupEditable.order&&this.groupTouchParams.group){t.stopPropagation();var e=this.groupsData;this.groupsData instanceof c&&(e=this.groupsData.getDataSet());var i=this.groupFromTarget(t);if(i&&i.height!=this.groupTouchParams.group.height){var o=i.top<this.groupTouchParams.group.top,n=t.center?t.center.y:t.clientY,s=l.getAbsoluteTop(i.dom.foreground),r=this.groupTouchParams.group.height;if(o){if(s+r<n)return}else{if(s+i.height-r>n)return}}if(i&&i!=this.groupTouchParams.group){var a=e.get(i.groupId),h=e.get(this.groupTouchParams.group.groupId);h&&a&&(this.options.groupOrderSwap(h,a,e),e.update(h),e.update(a));var d=e.getIds({order:this.options.groupOrder});if(!l.equalArray(d,this.groupTouchParams.originalOrder))for(var u=this.groupTouchParams.originalOrder,p=this.groupTouchParams.group.groupId,f=Math.min(u.length,d.length),m=0,v=0,g=0;m<f;){for(;m+v<f&&m+g<f&&d[m+v]==u[m+g];)m++;if(m+v>=f)break;if(d[m+v]==p)v=1;else if(u[m+g]==p)g=1;else{var y=d.indexOf(u[m+g]),b=e.get(d[m+v]),_=e.get(u[m+g]);this.options.groupOrderSwap(b,_,e),e.update(b),e.update(_);var w=d[m+v];d[m+v]=u[m+g],d[y]=w,m++}}}}},n.prototype._onGroupDragEnd=function(t){if(this.options.groupEditable.order&&this.groupTouchParams.group){t.stopPropagation();var e=this,i=e.groupTouchParams.group.groupId,o=e.groupsData.getDataSet(),n=l.extend({},o.get(i));e.options.onMoveGroup(n,function(t){if(t)t[o._fieldId]=i,o.update(t);else{var n=o.getIds({order:e.options.groupOrder});if(!l.equalArray(n,e.groupTouchParams.originalOrder))for(var s=e.groupTouchParams.originalOrder,r=Math.min(s.length,n.length),a=0;a<r;){for(;a<r&&n[a]==s[a];)a++;if(a>=r)break;var h=n.indexOf(s[a]),d=o.get(n[a]),u=o.get(s[a]);e.options.groupOrderSwap(d,u,o),o.update(d),o.update(u);var c=n[a];n[a]=s[a],n[h]=c,a++}}}),e.body.emitter.emit("groupDragged",{groupId:i})}},n.prototype._onSelectItem=function(t){if(this.options.selectable){var e=t.srcEvent&&(t.srcEvent.ctrlKey||t.srcEvent.metaKey),i=t.srcEvent&&t.srcEvent.shiftKey;if(e||i)return void this._onMultiSelectItem(t);var o=this.getSelection(),n=this.itemFromTarget(t),s=n?[n.id]:[];this.setSelection(s);var r=this.getSelection();(r.length>0||o.length>0)&&this.body.emitter.emit("select",{items:r,event:t})}},n.prototype._onMouseOver=function(t){var e=this.itemFromTarget(t);if(e){if(e!==this.itemFromRelatedTarget(t)){var i=e.getTitle();if(this.options.showTooltips&&i){null==this.popup&&(this.popup=new w(this.body.dom.root,this.options.tooltip.overflowMethod||"flip")),this.popup.setText(i);var o=this.body.dom.centerContainer;this.popup.setPosition(t.clientX-l.getAbsoluteLeft(o)+o.offsetLeft,t.clientY-l.getAbsoluteTop(o)+o.offsetTop),this.popup.show()}else null!=this.popup&&this.popup.hide();this.body.emitter.emit("itemover",{item:e.id,event:t})}}},n.prototype._onMouseOut=function(t){var e=this.itemFromTarget(t);if(e){e!==this.itemFromRelatedTarget(t)&&(null!=this.popup&&this.popup.hide(),this.body.emitter.emit("itemout",{item:e.id,event:t}))}},n.prototype._onMouseMove=function(t){if(this.itemFromTarget(t)&&this.options.showTooltips&&this.options.tooltip.followMouse&&this.popup&&!this.popup.hidden){var e=this.body.dom.centerContainer;this.popup.setPosition(t.clientX-l.getAbsoluteLeft(e)+e.offsetLeft,t.clientY-l.getAbsoluteTop(e)+e.offsetTop),this.popup.show()}},n.prototype._onMouseWheel=function(t){this.touchParams.itemIsDragging&&this._onDragEnd(t)},n.prototype._onUpdateItem=function(t){if(this.options.selectable&&this.options.editable.add){var e=this;if(t){var i=e.itemsData.get(t.id);this.options.onUpdate(i,function(t){t&&e.itemsData.getDataSet().update(t)})}}},n.prototype._onDropObjectOnItem=function(t){var e=this.itemFromTarget(t),i=JSON.parse(t.dataTransfer.getData("text"));this.options.onDropObjectOnItem(i,e)},n.prototype._onAddItem=function(t){if(this.options.selectable&&this.options.editable.add){var e,i,o=this,n=this.options.snap||null;this.options.rtl?(e=l.getAbsoluteRight(this.dom.frame),i=e-t.center.x):(e=l.getAbsoluteLeft(this.dom.frame),i=t.center.x-e);var s,r,a=this.body.util.toTime(i),h=this.body.util.getScale(),d=this.body.util.getStep();"drop"==t.type?(r=JSON.parse(t.dataTransfer.getData("text")),r.content=r.content?r.content:"new item",r.start=r.start?r.start:n?n(a,h,d):a,r.type=r.type||"box",r[this.itemsData._fieldId]=r.id||l.randomUUID(),"range"!=r.type||r.end||(s=this.body.util.toTime(i+this.props.width/5),r.end=n?n(s,h,d):s)):(r={start:n?n(a,h,d):a,content:"new item"},r[this.itemsData._fieldId]=l.randomUUID(),"range"===this.options.type&&(s=this.body.util.toTime(i+this.props.width/5),r.end=n?n(s,h,d):s));var u=this.groupFromTarget(t);u&&(r.group=u.groupId),r=this._cloneItemData(r),this.options.onAdd(r,function(e){e&&(o.itemsData.getDataSet().add(e),"drop"==t.type&&o.setSelection([e.id]))})}},n.prototype._onMultiSelectItem=function(t){if(this.options.selectable){var e=this.itemFromTarget(t);if(e){
+var i=this.options.multiselect?this.getSelection():[];if((t.srcEvent&&t.srcEvent.shiftKey||!1)&&this.options.multiselect){var o=this.itemsData.get(e.id).group,s=void 0;this.options.multiselectPerGroup&&i.length>0&&(s=this.itemsData.get(i[0]).group),this.options.multiselectPerGroup&&void 0!=s&&s!=o||i.push(e.id);var r=n._getItemRange(this.itemsData.get(i,this.itemOptions));if(!this.options.multiselectPerGroup||s==o){i=[];for(var a in this.items)if(this.items.hasOwnProperty(a)){var h=this.items[a],d=h.data.start,l=void 0!==h.data.end?h.data.end:d;!(d>=r.min&&l<=r.max)||this.options.multiselectPerGroup&&s!=this.itemsData.get(h.id).group||h instanceof _||i.push(h.id)}}}else{var u=i.indexOf(e.id);-1==u?i.push(e.id):i.splice(u,1)}this.setSelection(i),this.body.emitter.emit("select",{items:this.getSelection(),event:t})}}},n._getItemRange=function(t){var e=null,i=null;return t.forEach(function(t){(null==i||t.start<i)&&(i=t.start),void 0!=t.end?(null==e||t.end>e)&&(e=t.end):(null==e||t.start>e)&&(e=t.start)}),{min:i,max:e}},n.prototype.itemFromElement=function(t){for(var e=t;e;){if(e.hasOwnProperty("timeline-item"))return e["timeline-item"];e=e.parentNode}return null},n.prototype.itemFromTarget=function(t){return this.itemFromElement(t.target)},n.prototype.itemFromRelatedTarget=function(t){return this.itemFromElement(t.relatedTarget)},n.prototype.groupFromTarget=function(t){var e=t.center?t.center.y:t.clientY,i=this.groupIds;i.length<=0&&this.groupsData&&(i=this.groupsData.getIds({order:this.options.groupOrder}));for(var o=0;o<i.length;o++){var n=i[o],s=this.groups[n],r=s.dom.foreground,a=l.getAbsoluteTop(r);if(e>a&&e<a+r.offsetHeight)return s;if("top"===this.options.orientation.item){if(o===this.groupIds.length-1&&e>a)return s}else if(0===o&&e<a+r.offset)return s}return null},n.itemSetFromTarget=function(t){for(var e=t.target;e;){if(e.hasOwnProperty("timeline-itemset"))return e["timeline-itemset"];e=e.parentNode}return null},n.prototype._cloneItemData=function(t,e){var i=l.extend({},t);return e||(e=this.itemsData.getDataSet()._options.type),void 0!=i.start&&(i.start=l.convert(i.start,e&&e.start||"Date")),void 0!=i.end&&(i.end=l.convert(i.end,e&&e.end||"Date")),i},t.exports=n},function(t,e,i){e.orderByStart=function(t){t.sort(function(t,e){return t.data.start-e.data.start})},e.orderByEnd=function(t){t.sort(function(t,e){return("end"in t.data?t.data.end:t.data.start)-("end"in e.data?e.data.end:e.data.start)})},e.stack=function(t,i,o){if(o)for(var n=0;n<t.length;n++)t[n].top=null;for(var n=0;n<t.length;n++){var s=t[n];if(s.stack&&null===s.top){s.top=i.axis;do{for(var r=null,a=0,h=t.length;a<h;a++){var d=t[a];if(null!==d.top&&d!==s&&d.stack&&e.collision(s,d,i.item,d.options.rtl)){r=d;break}}null!=r&&(s.top=r.top+r.height+i.item.vertical)}while(r)}}},e.substack=function(t,i,o){for(var n=0;n<t.length;n++)t[n].top=null;var s=o.height;for(n=0;n<t.length;n++){var r=t[n];if(r.stack&&null===r.top){r.top=r.baseTop;do{for(var a=null,h=0,d=t.length;h<d;h++){var l=t[h];if(null!==l.top&&l!==r&&e.collision(r,l,i.item,l.options.rtl)){a=l;break}}null!=a&&(r.top=a.top+a.height+i.item.vertical),r.top+r.height>s&&(s=r.top+r.height)}while(a)}}o.height=s-o.top+.5*i.item.vertical},e.nostack=function(t,i,o,n){for(var s=0;s<t.length;s++)if(void 0==t[s].data.subgroup)t[s].top=i.item.vertical;else if(void 0!==t[s].data.subgroup&&n){var r=0;for(var a in o)o.hasOwnProperty(a)&&1==o[a].visible&&o[a].index<o[t[s].data.subgroup].index&&(r+=o[a].height,o[t[s].data.subgroup].top=r);t[s].top=r+.5*i.item.vertical}n||e.stackSubgroups(t,i,o)},e.stackSubgroups=function(t,i,o){for(var n in o)if(o.hasOwnProperty(n)){o[n].top=0;do{var s=null;for(var r in o)if(null!==o[r].top&&r!==n&&o[n].index>o[r].index&&e.collisionByTimes(o[n],o[r])){s=o[r];break}null!=s&&(o[n].top=s.top+s.height)}while(s)}for(var a=0;a<t.length;a++)void 0!==t[a].data.subgroup&&(t[a].top=o[t[a].data.subgroup].top+.5*i.item.vertical)},e.stackSubgroupsWithInnerStack=function(t,i,o){var n=!1,s=[];for(var r in o)o[r].hasOwnProperty("index")?s[o[r].index]=r:s.push(r);for(var a=0;a<s.length;a++)if(r=s[a],o.hasOwnProperty(r)){n=n||o[r].stack,o[r].top=0;for(var h in o)o[h].visible&&o[r].index>o[h].index&&(o[r].top+=o[h].height);for(var d=t[r],l=0;l<d.length;l++)void 0!==d[l].data.subgroup&&(d[l].top=o[d[l].data.subgroup].top+.5*i.item.vertical,o[r].stack&&(d[l].baseTop=d[l].top));n&&o[r].stack&&e.substack(t[r],i,o[r])}},e.collision=function(t,e,i,o){return o?t.right-i.horizontal+.001<e.right+e.width&&t.right+t.width+i.horizontal-.001>e.right&&t.top-i.vertical+.001<e.top+e.height&&t.top+t.height+i.vertical-.001>e.top:t.left-i.horizontal+.001<e.left+e.width&&t.left+t.width+i.horizontal-.001>e.left&&t.top-i.vertical+.001<e.top+e.height&&t.top+t.height+i.vertical-.001>e.top},e.collisionByTimes=function(t,e){return t.start<=e.start&&t.end>=e.start&&t.top<e.top+e.height&&t.top+t.height>e.top||e.start<=t.start&&e.end>=t.start&&e.top<t.top+t.height&&e.top+e.height>t.top}},function(t,e,i){function o(t,e,i){if(this.props={dot:{width:0,height:0},line:{width:0,height:0}},this.options=i,t&&void 0==t.start)throw new Error('Property "start" missing in item '+t);n.call(this,t,e,i)}var n=i(38);o.prototype=new n(null,null,null),o.prototype.isVisible=function(t){var e=this.options.align,i=this.width*t.getMillisecondsPerPixel();return"right"==e?this.data.start.getTime()>t.start&&this.data.start.getTime()-i<t.end:"left"==e?this.data.start.getTime()+i>t.start&&this.data.start.getTime()<t.end:this.data.start.getTime()+i/2>t.start&&this.data.start.getTime()-i/2<t.end},o.prototype._createDomElement=function(){this.dom||(this.dom={},this.dom.box=document.createElement("DIV"),this.dom.content=document.createElement("DIV"),this.dom.content.className="vis-item-content",this.dom.box.appendChild(this.dom.content),this.dom.line=document.createElement("DIV"),this.dom.line.className="vis-line",this.dom.dot=document.createElement("DIV"),this.dom.dot.className="vis-dot",this.dom.box["timeline-item"]=this,this.dirty=!0)},o.prototype._appendDomElement=function(){if(!this.parent)throw new Error("Cannot redraw item: no parent attached");if(!this.dom.box.parentNode){var t=this.parent.dom.foreground;if(!t)throw new Error("Cannot redraw item: parent has no foreground container element");t.appendChild(this.dom.box)}if(!this.dom.line.parentNode){var e=this.parent.dom.background;if(!e)throw new Error("Cannot redraw item: parent has no background container element");e.appendChild(this.dom.line)}if(!this.dom.dot.parentNode){var i=this.parent.dom.axis;if(!e)throw new Error("Cannot redraw item: parent has no axis container element");i.appendChild(this.dom.dot)}this.displayed=!0},o.prototype._updateDirtyDomComponents=function(){if(this.dirty){this._updateContents(this.dom.content),this._updateDataAttributes(this.dom.box),this._updateStyle(this.dom.box);var t=this.editable.updateTime||this.editable.updateGroup,e=(this.data.className?" "+this.data.className:"")+(this.selected?" vis-selected":"")+(t?" vis-editable":" vis-readonly");this.dom.box.className="vis-item vis-box"+e,this.dom.line.className="vis-item vis-line"+e,this.dom.dot.className="vis-item vis-dot"+e}},o.prototype._getDomComponentsSizes=function(){return{previous:{right:this.dom.box.style.right,left:this.dom.box.style.left},dot:{height:this.dom.dot.offsetHeight,width:this.dom.dot.offsetWidth},line:{width:this.dom.line.offsetWidth},box:{width:this.dom.box.offsetWidth,height:this.dom.box.offsetHeight}}},o.prototype._updateDomComponentsSizes=function(t){this.options.rtl?this.dom.box.style.right="0px":this.dom.box.style.left="0px",this.props.dot.height=t.dot.height,this.props.dot.width=t.dot.width,this.props.line.width=t.line.width,this.width=t.box.width,this.height=t.box.height,this.options.rtl?this.dom.box.style.right=t.previous.right:this.dom.box.style.left=t.previous.left,this.dirty=!1},o.prototype._repaintDomAdditionals=function(){this._repaintOnItemUpdateTimeTooltip(this.dom.box),this._repaintDragCenter(),this._repaintDeleteButton(this.dom.box)},o.prototype.redraw=function(t){var e,i=[this._createDomElement.bind(this),this._appendDomElement.bind(this),this._updateDirtyDomComponents.bind(this),function(){this.dirty&&(e=this._getDomComponentsSizes())}.bind(this),function(){this.dirty&&this._updateDomComponentsSizes.bind(this)(e)}.bind(this),this._repaintDomAdditionals.bind(this)];if(t)return i;var o;return i.forEach(function(t){o=t()}),o},o.prototype.show=function(){this.displayed||this.redraw()},o.prototype.hide=function(){if(this.displayed){var t=this.dom;t.box.parentNode&&t.box.parentNode.removeChild(t.box),t.line.parentNode&&t.line.parentNode.removeChild(t.line),t.dot.parentNode&&t.dot.parentNode.removeChild(t.dot),this.displayed=!1}},o.prototype.repositionX=function(){var t=this.conversion.toScreen(this.data.start),e=this.options.align;"right"==e?this.options.rtl?(this.right=t-this.width,this.dom.box.style.right=this.right+"px",this.dom.line.style.right=t-this.props.line.width+"px",this.dom.dot.style.right=t-this.props.line.width/2-this.props.dot.width/2+"px"):(this.left=t-this.width,this.dom.box.style.left=this.left+"px",this.dom.line.style.left=t-this.props.line.width+"px",this.dom.dot.style.left=t-this.props.line.width/2-this.props.dot.width/2+"px"):"left"==e?this.options.rtl?(this.right=t,this.dom.box.style.right=this.right+"px",this.dom.line.style.right=t+"px",this.dom.dot.style.right=t+this.props.line.width/2-this.props.dot.width/2+"px"):(this.left=t,this.dom.box.style.left=this.left+"px",this.dom.line.style.left=t+"px",this.dom.dot.style.left=t+this.props.line.width/2-this.props.dot.width/2+"px"):this.options.rtl?(this.right=t-this.width/2,this.dom.box.style.right=this.right+"px",this.dom.line.style.right=t-this.props.line.width+"px",this.dom.dot.style.right=t-this.props.dot.width/2+"px"):(this.left=t-this.width/2,this.dom.box.style.left=this.left+"px",this.dom.line.style.left=t-this.props.line.width/2+"px",this.dom.dot.style.left=t-this.props.dot.width/2+"px")},o.prototype.repositionY=function(){var t=this.options.orientation.item,e=this.dom.box,i=this.dom.line,o=this.dom.dot;if("top"==t)e.style.top=(this.top||0)+"px",i.style.top="0",i.style.height=this.parent.top+this.top+1+"px",i.style.bottom="";else{var n=this.parent.itemSet.props.height,s=n-this.parent.top-this.parent.height+this.top;e.style.top=(this.parent.height-this.top-this.height||0)+"px",i.style.top=n-s+"px",i.style.bottom="0"}o.style.top=-this.props.dot.height/2+"px"},o.prototype.getWidthLeft=function(){return this.width/2},o.prototype.getWidthRight=function(){return this.width/2},t.exports=o},function(t,e,i){function o(t,e,i){if(this.props={dot:{top:0,width:0,height:0},content:{height:0,marginLeft:0,marginRight:0}},this.options=i,t&&void 0==t.start)throw new Error('Property "start" missing in item '+t);n.call(this,t,e,i)}var n=i(38);o.prototype=new n(null,null,null),o.prototype.isVisible=function(t){var e=this.width*t.getMillisecondsPerPixel();return this.data.start.getTime()+e>t.start&&this.data.start<t.end},o.prototype._createDomElement=function(){this.dom||(this.dom={},this.dom.point=document.createElement("div"),this.dom.content=document.createElement("div"),this.dom.content.className="vis-item-content",this.dom.point.appendChild(this.dom.content),this.dom.dot=document.createElement("div"),this.dom.point.appendChild(this.dom.dot),this.dom.point["timeline-item"]=this,this.dirty=!0)},o.prototype._appendDomElement=function(){if(!this.parent)throw new Error("Cannot redraw item: no parent attached");if(!this.dom.point.parentNode){var t=this.parent.dom.foreground;if(!t)throw new Error("Cannot redraw item: parent has no foreground container element");t.appendChild(this.dom.point)}this.displayed=!0},o.prototype._updateDirtyDomComponents=function(){if(this.dirty){this._updateContents(this.dom.content),this._updateDataAttributes(this.dom.point),this._updateStyle(this.dom.point);var t=this.editable.updateTime||this.editable.updateGroup,e=(this.data.className?" "+this.data.className:"")+(this.selected?" vis-selected":"")+(t?" vis-editable":" vis-readonly");this.dom.point.className="vis-item vis-point"+e,this.dom.dot.className="vis-item vis-dot"+e}},o.prototype._getDomComponentsSizes=function(){return{dot:{width:this.dom.dot.offsetWidth,height:this.dom.dot.offsetHeight},content:{width:this.dom.content.offsetWidth,height:this.dom.content.offsetHeight},point:{width:this.dom.point.offsetWidth,height:this.dom.point.offsetHeight}}},o.prototype._updateDomComponentsSizes=function(t){this.props.dot.width=t.dot.width,this.props.dot.height=t.dot.height,this.props.content.height=t.content.height,this.options.rtl?this.dom.content.style.marginRight=2*this.props.dot.width+"px":this.dom.content.style.marginLeft=2*this.props.dot.width+"px",this.width=t.point.width,this.height=t.point.height,this.dom.dot.style.top=(this.height-this.props.dot.height)/2+"px",this.options.rtl?this.dom.dot.style.right=this.props.dot.width/2+"px":this.dom.dot.style.left=this.props.dot.width/2+"px",this.dirty=!1},o.prototype._repaintDomAdditionals=function(){this._repaintOnItemUpdateTimeTooltip(this.dom.point),this._repaintDragCenter(),this._repaintDeleteButton(this.dom.point)},o.prototype.redraw=function(t){var e,i=[this._createDomElement.bind(this),this._appendDomElement.bind(this),this._updateDirtyDomComponents.bind(this),function(){this.dirty&&(e=this._getDomComponentsSizes())}.bind(this),function(){this.dirty&&this._updateDomComponentsSizes.bind(this)(e)}.bind(this),this._repaintDomAdditionals.bind(this)];if(t)return i;var o;return i.forEach(function(t){o=t()}),o},o.prototype.show=function(){this.displayed||this.redraw()},o.prototype.hide=function(){this.displayed&&(this.dom.point.parentNode&&this.dom.point.parentNode.removeChild(this.dom.point),this.displayed=!1)},o.prototype.repositionX=function(){var t=this.conversion.toScreen(this.data.start);this.options.rtl?(this.right=t-this.props.dot.width,this.dom.point.style.right=this.right+"px"):(this.left=t-this.props.dot.width,this.dom.point.style.left=this.left+"px")},o.prototype.repositionY=function(){var t=this.options.orientation.item,e=this.dom.point;e.style.top="top"==t?this.top+"px":this.parent.height-this.top-this.height+"px"},o.prototype.getWidthLeft=function(){return this.props.dot.width},o.prototype.getWidthRight=function(){return this.props.dot.width},t.exports=o},function(t,e,i){function o(t,e,i){if(this.props={content:{width:0}},this.overflow=!1,t){if(void 0==t.start)throw new Error('Property "start" missing in item '+t.id);if(void 0==t.end)throw new Error('Property "end" missing in item '+t.id)}n.call(this,t,e,i)}var n=i(38),s=i(69),r=i(70);o.prototype=new n(null,null,null),o.prototype.baseClassName="vis-item vis-background",o.prototype.stack=!1,o.prototype.isVisible=function(t){return this.data.start<t.end&&this.data.end>t.start},o.prototype._createDomElement=function(){this.dom||(this.dom={},this.dom.box=document.createElement("div"),this.dom.frame=document.createElement("div"),this.dom.frame.className="vis-item-overflow",this.dom.box.appendChild(this.dom.frame),this.dom.content=document.createElement("div"),this.dom.content.className="vis-item-content",this.dom.frame.appendChild(this.dom.content),this.dirty=!0)},o.prototype._appendDomElement=function(){if(!this.parent)throw new Error("Cannot redraw item: no parent attached");if(!this.dom.box.parentNode){var t=this.parent.dom.background;if(!t)throw new Error("Cannot redraw item: parent has no background container element");t.appendChild(this.dom.box)}this.displayed=!0},o.prototype._updateDirtyDomComponents=function(){if(this.dirty){this._updateContents(this.dom.content),this._updateDataAttributes(this.dom.content),this._updateStyle(this.dom.box);var t=(this.data.className?" "+this.data.className:"")+(this.selected?" vis-selected":"");this.dom.box.className=this.baseClassName+t}},o.prototype._getDomComponentsSizes=function(){return this.overflow="hidden"!==window.getComputedStyle(this.dom.content).overflow,{content:{width:this.dom.content.offsetWidth}}},o.prototype._updateDomComponentsSizes=function(t){this.props.content.width=t.content.width,this.height=0,this.dirty=!1},o.prototype._repaintDomAdditionals=function(){},o.prototype.redraw=function(t){var e,i=[this._createDomElement.bind(this),this._appendDomElement.bind(this),this._updateDirtyDomComponents.bind(this),function(){this.dirty&&(e=this._getDomComponentsSizes.bind(this)())}.bind(this),function(){this.dirty&&this._updateDomComponentsSizes.bind(this)(e)}.bind(this),this._repaintDomAdditionals.bind(this)];if(t)return i;var o;return i.forEach(function(t){o=t()}),o},o.prototype.show=r.prototype.show,o.prototype.hide=r.prototype.hide,o.prototype.repositionX=r.prototype.repositionX,o.prototype.repositionY=function(t){var e,i=this.options.orientation.item;if(void 0!==this.data.subgroup){var o=this.data.subgroup;this.dom.box.style.height=this.parent.subgroups[o].height+"px",this.dom.box.style.top="top"==i?this.parent.top+this.parent.subgroups[o].top+"px":this.parent.top+this.parent.height-this.parent.subgroups[o].top-this.parent.subgroups[o].height+"px",this.dom.box.style.bottom=""}else this.parent instanceof s?(e=Math.max(this.parent.height,this.parent.itemSet.body.domProps.center.height,this.parent.itemSet.body.domProps.centerContainer.height),this.dom.box.style.bottom="bottom"==i?"0":"",this.dom.box.style.top="top"==i?"0":""):(e=this.parent.height,this.dom.box.style.top=this.parent.top+"px",this.dom.box.style.bottom="");this.dom.box.style.height=e+"px"},t.exports=o},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=function(){function t(e,i){(0,s.default)(this,t),this.container=e,this.overflowMethod=i||"cap",this.x=0,this.y=0,this.padding=5,this.hidden=!1,this.frame=document.createElement("div"),this.frame.className="vis-tooltip",this.container.appendChild(this.frame)}return(0,a.default)(t,[{key:"setPosition",value:function(t,e){this.x=parseInt(t),this.y=parseInt(e)}},{key:"setText",value:function(t){t instanceof Element?(this.frame.innerHTML="",this.frame.appendChild(t)):this.frame.innerHTML=t}},{key:"show",value:function(t){if(void 0===t&&(t=!0),!0===t){var e=this.frame.clientHeight,i=this.frame.clientWidth,o=this.frame.parentNode.clientHeight,n=this.frame.parentNode.clientWidth,s=0,r=0;if("flip"==this.overflowMethod){var a=!1,h=!0;this.y-e<this.padding&&(h=!1),this.x+i>n-this.padding&&(a=!0),s=a?this.x-i:this.x,r=h?this.y-e:this.y}else r=this.y-e,r+e+this.padding>o&&(r=o-e-this.padding),r<this.padding&&(r=this.padding),s=this.x,s+i+this.padding>n&&(s=n-i-this.padding),s<this.padding&&(s=this.padding);this.frame.style.left=s+"px",this.frame.style.top=r+"px",this.frame.style.visibility="visible",this.hidden=!1}else this.hide()}},{key:"hide",value:function(){this.hidden=!0,this.frame.style.left="0",this.frame.style.top="0",this.frame.style.visibility="hidden"}},{key:"destroy",value:function(){this.frame.parentNode.removeChild(this.frame)}}]),t}();e.default=h},function(t,e,i){Object.defineProperty(e,"__esModule",{value:!0});var o="string",n="boolean",s="number",r="object",a={configure:{enabled:{boolean:n},filter:{boolean:n,function:"function"},container:{dom:"dom"},__type__:{object:r,boolean:n,function:"function"}},align:{string:o},rtl:{boolean:n,undefined:"undefined"},rollingMode:{follow:{boolean:n},offset:{number:s,undefined:"undefined"},__type__:{object:r}},verticalScroll:{boolean:n,undefined:"undefined"},horizontalScroll:{boolean:n,undefined:"undefined"},autoResize:{boolean:n},throttleRedraw:{number:s},clickToUse:{boolean:n},dataAttributes:{string:o,array:"array"},editable:{add:{boolean:n,undefined:"undefined"},remove:{boolean:n,undefined:"undefined"},updateGroup:{boolean:n,undefined:"undefined"},updateTime:{boolean:n,undefined:"undefined"},overrideItems:{boolean:n,undefined:"undefined"},__type__:{boolean:n,object:r}},end:{number:s,date:"date",string:o,moment:"moment"},format:{minorLabels:{millisecond:{string:o,undefined:"undefined"},second:{string:o,undefined:"undefined"},minute:{string:o,undefined:"undefined"},hour:{string:o,undefined:"undefined"},weekday:{string:o,undefined:"undefined"},day:{string:o,undefined:"undefined"},week:{string:o,undefined:"undefined"},month:{string:o,undefined:"undefined"},year:{string:o,undefined:"undefined"},__type__:{object:r,function:"function"}},majorLabels:{millisecond:{string:o,undefined:"undefined"},second:{string:o,undefined:"undefined"},minute:{string:o,undefined:"undefined"},hour:{string:o,undefined:"undefined"},weekday:{string:o,undefined:"undefined"},day:{string:o,undefined:"undefined"},week:{string:o,undefined:"undefined"},month:{string:o,undefined:"undefined"},year:{string:o,undefined:"undefined"},__type__:{object:r,function:"function"}},__type__:{object:r}},moment:{function:"function"},groupOrder:{string:o,function:"function"},groupEditable:{add:{boolean:n,undefined:"undefined"},remove:{boolean:n,undefined:"undefined"},order:{boolean:n,undefined:"undefined"},__type__:{boolean:n,object:r}},groupOrderSwap:{function:"function"},height:{string:o,number:s},hiddenDates:{start:{date:"date",number:s,string:o,moment:"moment"},end:{date:"date",number:s,string:o,moment:"moment"},repeat:{string:o},__type__:{object:r,array:"array"}},itemsAlwaysDraggable:{item:{boolean:n,undefined:"undefined"},range:{boolean:n,undefined:"undefined"},__type__:{boolean:n,object:r}},limitSize:{boolean:n},locale:{string:o},locales:{__any__:{any:"any"},__type__:{object:r}},margin:{axis:{number:s},item:{horizontal:{number:s,undefined:"undefined"},vertical:{number:s,undefined:"undefined"},__type__:{object:r,number:s}},__type__:{object:r,number:s}},max:{date:"date",number:s,string:o,moment:"moment"},maxHeight:{number:s,string:o},maxMinorChars:{number:s},min:{date:"date",number:s,string:o,moment:"moment"},minHeight:{number:s,string:o},moveable:{boolean:n},multiselect:{boolean:n},multiselectPerGroup:{boolean:n},onAdd:{function:"function"},onDropObjectOnItem:{function:"function"},onUpdate:{function:"function"},onMove:{function:"function"},onMoving:{function:"function"},onRemove:{function:"function"},onAddGroup:{function:"function"},onMoveGroup:{function:"function"},onRemoveGroup:{function:"function"},onInitialDrawComplete:{function:"function"},order:{function:"function"},orientation:{axis:{string:o,undefined:"undefined"},item:{string:o,undefined:"undefined"},__type__:{string:o,object:r}},selectable:{boolean:n},showCurrentTime:{boolean:n},showMajorLabels:{boolean:n},showMinorLabels:{boolean:n},stack:{boolean:n},stackSubgroups:{boolean:n},snap:{function:"function",null:"null"},start:{date:"date",number:s,string:o,moment:"moment"},template:{function:"function"},groupTemplate:{function:"function"},visibleFrameTemplate:{string:o,function:"function"},showTooltips:{boolean:n},tooltip:{followMouse:{boolean:n},overflowMethod:{string:["cap","flip"]},__type__:{object:r}},tooltipOnItemUpdateTime:{template:{function:"function"},__type__:{boolean:n,object:r}},timeAxis:{scale:{string:o,undefined:"undefined"},step:{number:s,undefined:"undefined"},__type__:{object:r}},type:{string:o},width:{string:o,number:s},zoomable:{boolean:n},zoomKey:{string:["ctrlKey","altKey","metaKey",""]},zoomMax:{number:s},zoomMin:{number:s},__type__:{object:r}},h={global:{align:["center","left","right"],direction:!1,autoResize:!0,clickToUse:!1,editable:{add:!1,remove:!1,updateGroup:!1,updateTime:!1},end:"",format:{minorLabels:{millisecond:"SSS",second:"s",minute:"HH:mm",hour:"HH:mm",weekday:"ddd D",day:"D",week:"w",month:"MMM",year:"YYYY"},majorLabels:{millisecond:"HH:mm:ss",second:"D MMMM HH:mm",minute:"ddd D MMMM",hour:"ddd D MMMM",weekday:"MMMM YYYY",day:"MMMM YYYY",week:"MMMM YYYY",month:"YYYY",year:""}},groupsDraggable:!1,height:"",locale:"",margin:{axis:[20,0,100,1],item:{horizontal:[10,0,100,1],vertical:[10,0,100,1]}},max:"",maxHeight:"",maxMinorChars:[7,0,20,1],min:"",minHeight:"",moveable:!1,multiselect:!1,multiselectPerGroup:!1,orientation:{axis:["both","bottom","top"],item:["bottom","top"]},selectable:!0,showCurrentTime:!1,showMajorLabels:!0,showMinorLabels:!0,stack:!0,stackSubgroups:!0,start:"",showTooltips:!0,tooltip:{followMouse:!1,overflowMethod:"flip"},tooltipOnItemUpdateTime:!1,type:["box","point","range","background"],width:"100%",zoomable:!0,zoomKey:["ctrlKey","altKey","metaKey",""],zoomMax:[31536e10,10,31536e10,1],zoomMin:[10,10,31536e10,1]}};e.allOptions=a,e.configureOptions=h},function(t,e,i){function o(t,e){this.id=r.randomUUID(),this.body=t,this.defaultOptions={yAxisOrientation:"left",defaultGroup:"default",sort:!0,sampling:!0,stack:!1,graphHeight:"400px",shaded:{enabled:!1,orientation:"bottom"},style:"line",barChart:{width:50,sideBySide:!1,align:"center"},interpolation:{enabled:!0,parametrization:"centripetal",alpha:.5},drawPoints:{enabled:!0,size:6,style:"square"},dataAxis:{},legend:{},groups:{visibility:{}}},this.options=r.extend({},this.defaultOptions),this.dom={},this.props={},this.hammer=null,this.groups={},this.abortedGraphUpdate=!1,this.updateSVGheight=!1,this.updateSVGheightOnResize=!1,this.forceGraphUpdate=!0;var i=this;this.itemsData=null,this.groupsData=null,this.itemListeners={add:function(t,e,o){i._onAdd(e.items)},update:function(t,e,o){i._onUpdate(e.items)},remove:function(t,e,o){i._onRemove(e.items)}},this.groupListeners={add:function(t,e,o){i._onAddGroups(e.items)},update:function(t,e,o){i._onUpdateGroups(e.items)},remove:function(t,e,o){i._onRemoveGroups(e.items)}},this.items={},this.selection=[],this.lastStart=this.body.range.start,this.touchParams={},this.svgElements={},this.setOptions(e),this.groupsUsingDefaultStyles=[0],this.body.emitter.on("rangechanged",function(){i.lastStart=i.body.range.start,i.svg.style.left=r.option.asSize(-i.props.width),i.forceGraphUpdate=!0,i.redraw.call(i)}),this._create(),this.framework={svg:this.svg,svgElements:this.svgElements,options:this.options,groups:this.groups}}var n=i(6),s=function(t){return t&&t.__esModule?t:{default:t}}(n),r=i(2),a=i(14),h=i(11),d=i(12),l=i(16),u=i(107),c=i(109),p=i(112),f=i(110),m=i(111),v=i(72);o.prototype=new l,o.prototype._create=function(){var t=document.createElement("div");t.className="vis-line-graph",this.dom.frame=t,this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="relative",this.svg.style.height=(""+this.options.graphHeight).replace("px","")+"px",this.svg.style.display="block",t.appendChild(this.svg),this.options.dataAxis.orientation="left",this.yAxisLeft=new u(this.body,this.options.dataAxis,this.svg,this.options.groups),this.options.dataAxis.orientation="right",this.yAxisRight=new u(this.body,this.options.dataAxis,this.svg,this.options.groups),delete this.options.dataAxis.orientation,this.legendLeft=new p(this.body,this.options.legend,"left",this.options.groups),this.legendRight=new p(this.body,this.options.legend,"right",this.options.groups),this.show()},o.prototype.setOptions=function(t){if(t){var e=["sampling","defaultGroup","stack","height","graphHeight","yAxisOrientation","style","barChart","dataAxis","sort","groups"];void 0===t.graphHeight&&void 0!==t.height?(this.updateSVGheight=!0,this.updateSVGheightOnResize=!0):void 0!==this.body.domProps.centerContainer.height&&void 0!==t.graphHeight&&parseInt((t.graphHeight+"").replace("px",""))<this.body.domProps.centerContainer.height&&(this.updateSVGheight=!0),r.selectiveDeepExtend(e,this.options,t),r.mergeOptions(this.options,t,"interpolation"),r.mergeOptions(this.options,t,"drawPoints"),r.mergeOptions(this.options,t,"shaded"),r.mergeOptions(this.options,t,"legend"),t.interpolation&&"object"==(0,s.default)(t.interpolation)&&t.interpolation.parametrization&&("uniform"==t.interpolation.parametrization?this.options.interpolation.alpha=0:"chordal"==t.interpolation.parametrization?this.options.interpolation.alpha=1:(this.options.interpolation.parametrization="centripetal",this.options.interpolation.alpha=.5)),this.yAxisLeft&&void 0!==t.dataAxis&&(this.yAxisLeft.setOptions(this.options.dataAxis),this.yAxisRight.setOptions(this.options.dataAxis)),this.legendLeft&&void 0!==t.legend&&(this.legendLeft.setOptions(this.options.legend),this.legendRight.setOptions(this.options.legend)),this.groups.hasOwnProperty("__ungrouped__")&&this.groups.__ungrouped__.setOptions(t)}this.dom.frame&&(this.forceGraphUpdate=!0,this.body.emitter.emit("_change",{queue:!0}))},o.prototype.hide=function(){this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame)},o.prototype.show=function(){this.dom.frame.parentNode||this.body.dom.center.appendChild(this.dom.frame)},o.prototype.setItems=function(t){var e,i=this,o=this.itemsData;if(t){if(!(t instanceof h||t instanceof d))throw new TypeError("Data must be an instance of DataSet or DataView");this.itemsData=t}else this.itemsData=null;if(o&&(r.forEach(this.itemListeners,function(t,e){o.off(e,t)}),e=o.getIds(),this._onRemove(e)),this.itemsData){var n=this.id;r.forEach(this.itemListeners,function(t,e){i.itemsData.on(e,t,n)}),e=this.itemsData.getIds(),this._onAdd(e)}},o.prototype.setGroups=function(t){var e,i=this;if(this.groupsData){r.forEach(this.groupListeners,function(t,e){i.groupsData.off(e,t)}),e=this.groupsData.getIds(),this.groupsData=null;for(var o=0;o<e.length;o++)this._removeGroup(e[o])}if(t){if(!(t instanceof h||t instanceof d))throw new TypeError("Data must be an instance of DataSet or DataView");this.groupsData=t}else this.groupsData=null;if(this.groupsData){var n=this.id;r.forEach(this.groupListeners,function(t,e){i.groupsData.on(e,t,n)}),e=this.groupsData.getIds(),this._onAddGroups(e)}},o.prototype._onUpdate=function(t){this._updateAllGroupData(t)},o.prototype._onAdd=function(t){this._onUpdate(t)},o.prototype._onRemove=function(t){this._onUpdate(t)},o.prototype._onUpdateGroups=function(t){this._updateAllGroupData(null,t)},o.prototype._onAddGroups=function(t){this._onUpdateGroups(t)},o.prototype._onRemoveGroups=function(t){for(var e=0;e<t.length;e++)this._removeGroup(t[e]);this.forceGraphUpdate=!0,this.body.emitter.emit("_change",{queue:!0})},o.prototype._removeGroup=function(t){this.groups.hasOwnProperty(t)&&("right"==this.groups[t].options.yAxisOrientation?(this.yAxisRight.removeGroup(t),this.legendRight.removeGroup(t),this.legendRight.redraw()):(this.yAxisLeft.removeGroup(t),this.legendLeft.removeGroup(t),this.legendLeft.redraw()),delete this.groups[t])},o.prototype._updateGroup=function(t,e){this.groups.hasOwnProperty(e)?(this.groups[e].update(t),"right"==this.groups[e].options.yAxisOrientation?(this.yAxisRight.updateGroup(e,this.groups[e]),this.legendRight.updateGroup(e,this.groups[e]),this.yAxisLeft.removeGroup(e),this.legendLeft.removeGroup(e)):(this.yAxisLeft.updateGroup(e,this.groups[e]),this.legendLeft.updateGroup(e,this.groups[e]),this.yAxisRight.removeGroup(e),this.legendRight.removeGroup(e))):(this.groups[e]=new c(t,e,this.options,this.groupsUsingDefaultStyles),"right"==this.groups[e].options.yAxisOrientation?(this.yAxisRight.addGroup(e,this.groups[e]),this.legendRight.addGroup(e,this.groups[e])):(this.yAxisLeft.addGroup(e,this.groups[e]),this.legendLeft.addGroup(e,this.groups[e]))),this.legendLeft.redraw(),this.legendRight.redraw()},o.prototype._updateAllGroupData=function(t,e){if(null!=this.itemsData){var i={},o=this.itemsData.get(),n=this.itemsData._fieldId,s={};t&&t.map(function(t){s[t]=t});for(var a={},h=0;h<o.length;h++){var d=o[h],l=d.group;null!==l&&void 0!==l||(l="__ungrouped__"),a.hasOwnProperty(l)?a[l]++:a[l]=1}var u={};if(!e&&t)for(l in this.groups)if(this.groups.hasOwnProperty(l)){v=this.groups[l];var c=v.getItems();i[l]=c.filter(function(t){return u[t[n]]=t[n],t[n]!==s[t[n]]});var p=a[l];a[l]-=i[l].length,i[l].length<p&&(i[l][p-1]={})}for(h=0;h<o.length;h++)if(d=o[h],l=d.group,null!==l&&void 0!==l||(l="__ungrouped__"),e||!t||d[n]===s[d[n]]||!u.hasOwnProperty(d[n])){i.hasOwnProperty(l)||(i[l]=new Array(a[l]));var f=r.bridgeObject(d);f.x=r.convert(d.x,"Date"),f.end=r.convert(d.end,"Date"),f.orginalY=d.y,f.y=Number(d.y),
+f[n]=d[n];var m=i[l].length-a[l]--;i[l][m]=f}for(l in this.groups)this.groups.hasOwnProperty(l)&&(i.hasOwnProperty(l)||(i[l]=new Array(0)));for(l in i)if(i.hasOwnProperty(l))if(0==i[l].length)this.groups.hasOwnProperty(l)&&this._removeGroup(l);else{var v=void 0;void 0!=this.groupsData&&(v=this.groupsData.get(l)),void 0==v&&(v={id:l,content:this.options.defaultGroup+l}),this._updateGroup(v,l),this.groups[l].setItems(i[l])}this.forceGraphUpdate=!0,this.body.emitter.emit("_change",{queue:!0})}},o.prototype.redraw=function(){var t=!1;this.props.width=this.dom.frame.offsetWidth,this.props.height=this.body.domProps.centerContainer.height-this.body.domProps.border.top-this.body.domProps.border.bottom,t=this._isResized()||t;var e=this.body.range.end-this.body.range.start,i=e!=this.lastVisibleInterval;if(this.lastVisibleInterval=e,1==t&&(this.svg.style.width=r.option.asSize(3*this.props.width),this.svg.style.left=r.option.asSize(-this.props.width),-1==(this.options.height+"").indexOf("%")&&1!=this.updateSVGheightOnResize||(this.updateSVGheight=!0)),1==this.updateSVGheight?(this.options.graphHeight!=this.props.height+"px"&&(this.options.graphHeight=this.props.height+"px",this.svg.style.height=this.props.height+"px"),this.updateSVGheight=!1):this.svg.style.height=(""+this.options.graphHeight).replace("px","")+"px",1==t||1==i||1==this.abortedGraphUpdate||1==this.forceGraphUpdate)t=this._updateGraph()||t,this.forceGraphUpdate=!1;else if(0!=this.lastStart){var o=this.body.range.start-this.lastStart,n=this.body.range.end-this.body.range.start;if(0!=this.props.width){var s=this.props.width/n,a=o*s;this.svg.style.left=-this.props.width-a+"px"}}return this.legendLeft.redraw(),this.legendRight.redraw(),t},o.prototype._getSortedGroupIds=function(){var t=[];for(var e in this.groups)if(this.groups.hasOwnProperty(e)){var i=this.groups[e];1!=i.visible||void 0!==this.options.groups.visibility[e]&&1!=this.options.groups.visibility[e]||t.push({id:e,zIndex:i.options.zIndex})}r.insertSort(t,function(t,e){var i=t.zIndex,o=e.zIndex;return void 0===i&&(i=0),void 0===o&&(o=0),i==o?0:i<o?-1:1});for(var o=new Array(t.length),n=0;n<t.length;n++)o[n]=t[n].id;return o},o.prototype._updateGraph=function(){if(a.prepareElements(this.svgElements),0!=this.props.width&&null!=this.itemsData){var t,e,i={},o=this.body.util.toGlobalTime(-this.body.domProps.root.width),n=this.body.util.toGlobalTime(2*this.body.domProps.root.width),s=this._getSortedGroupIds();if(s.length>0){var r={};for(this._getRelevantData(s,r,o,n),this._applySampling(s,r),e=0;e<s.length;e++)this._convertXcoordinates(r[s[e]]);if(this._getYRanges(s,r,i),1==this._updateYAxis(s,i))return a.cleanupElements(this.svgElements),this.abortedGraphUpdate=!0,!0;this.abortedGraphUpdate=!1;var h=void 0;for(e=0;e<s.length;e++)t=this.groups[s[e]],!0===this.options.stack&&"line"===this.options.style&&(void 0!=t.options.excludeFromStacking&&t.options.excludeFromStacking||(void 0!=h&&(this._stack(r[t.id],r[h.id]),1==t.options.shaded.enabled&&"group"!==t.options.shaded.orientation&&("top"==t.options.shaded.orientation&&"group"!==h.options.shaded.orientation?(h.options.shaded.orientation="group",h.options.shaded.groupId=t.id):(t.options.shaded.orientation="group",t.options.shaded.groupId=h.id))),h=t)),this._convertYcoordinates(r[s[e]],t);var d={};for(e=0;e<s.length;e++)if(t=this.groups[s[e]],"line"===t.options.style&&1==t.options.shaded.enabled){var l=r[s[e]];if(null==l||0==l.length)continue;if(d.hasOwnProperty(s[e])||(d[s[e]]=m.calcPath(l,t)),"group"===t.options.shaded.orientation){var u=t.options.shaded.groupId;if(-1===s.indexOf(u)){console.log(t.id+": Unknown shading group target given:"+u);continue}d.hasOwnProperty(u)||(d[u]=m.calcPath(r[u],this.groups[u])),m.drawShading(d[s[e]],t,d[u],this.framework)}else m.drawShading(d[s[e]],t,void 0,this.framework)}for(f.draw(s,r,this.framework),e=0;e<s.length;e++)if(t=this.groups[s[e]],r[s[e]].length>0)switch(t.options.style){case"line":d.hasOwnProperty(s[e])||(d[s[e]]=m.calcPath(r[s[e]],t)),m.draw(d[s[e]],t,this.framework);case"point":case"points":"point"!=t.options.style&&"points"!=t.options.style&&1!=t.options.drawPoints.enabled||v.draw(r[s[e]],t,this.framework)}}}return a.cleanupElements(this.svgElements),!1},o.prototype._stack=function(t,e){var i,o,n,s,r;i=0;for(var a=0;a<t.length;a++){s=void 0,r=void 0;for(var h=i;h<e.length;h++){if(e[h].x===t[a].x){s=e[h],r=e[h],i=h;break}if(e[h].x>t[a].x){r=e[h],s=0==h?r:e[h-1],i=h;break}}void 0===r&&(s=e[e.length-1],r=e[e.length-1]),o=r.x-s.x,n=r.y-s.y,t[a].y=0==o?t[a].orginalY+r.y:t[a].orginalY+n/o*(t[a].x-s.x)+s.y}},o.prototype._getRelevantData=function(t,e,i,o){var n,s,a,h;if(t.length>0)for(s=0;s<t.length;s++){n=this.groups[t[s]];var d=n.getItems();if(1==n.options.sort){var l=function(t,e){return t.getTime()==e.getTime()?0:t<e?-1:1},u=Math.max(0,r.binarySearchValue(d,i,"x","before",l)),c=Math.min(d.length,r.binarySearchValue(d,o,"x","after",l)+1);c<=0&&(c=d.length);var p=new Array(c-u);for(a=u;a<c;a++)h=n.itemsData[a],p[a-u]=h;e[t[s]]=p}else e[t[s]]=n.itemsData}},o.prototype._applySampling=function(t,e){var i;if(t.length>0)for(var o=0;o<t.length;o++)if(i=this.groups[t[o]],1==i.options.sampling){var n=e[t[o]];if(n.length>0){var s=1,r=n.length,a=this.body.util.toGlobalScreen(n[n.length-1].x)-this.body.util.toGlobalScreen(n[0].x),h=r/a;s=Math.min(Math.ceil(.2*r),Math.max(1,Math.round(h)));for(var d=new Array(r),l=0;l<r;l+=s){var u=Math.round(l/s);d[u]=n[l]}e[t[o]]=d.splice(0,Math.round(r/s))}}},o.prototype._getYRanges=function(t,e,i){var o,n,s,r,a=[],h=[];if(t.length>0){for(s=0;s<t.length;s++)o=e[t[s]],r=this.groups[t[s]].options,o.length>0&&(n=this.groups[t[s]],!0===r.stack&&"bar"===r.style?"left"===r.yAxisOrientation?a=a.concat(o):h=h.concat(o):i[t[s]]=n.getYRange(o,t[s]));f.getStackedYRange(a,i,t,"__barStackLeft","left"),f.getStackedYRange(h,i,t,"__barStackRight","right")}},o.prototype._updateYAxis=function(t,e){var i,o,n=!1,s=!1,r=!1,a=1e9,h=1e9,d=-1e9,l=-1e9;if(t.length>0){for(var u=0;u<t.length;u++){var c=this.groups[t[u]];c&&"right"!=c.options.yAxisOrientation?(s=!0,a=1e9,d=-1e9):c&&c.options.yAxisOrientation&&(r=!0,h=1e9,l=-1e9)}for(u=0;u<t.length;u++)e.hasOwnProperty(t[u])&&!0!==e[t[u]].ignore&&(i=e[t[u]].min,o=e[t[u]].max,"right"!=e[t[u]].yAxisOrientation?(s=!0,a=a>i?i:a,d=d<o?o:d):(r=!0,h=h>i?i:h,l=l<o?o:l));1==s&&this.yAxisLeft.setRange(a,d),1==r&&this.yAxisRight.setRange(h,l)}n=this._toggleAxisVisiblity(s,this.yAxisLeft)||n,n=this._toggleAxisVisiblity(r,this.yAxisRight)||n,1==r&&1==s?(this.yAxisLeft.drawIcons=!0,this.yAxisRight.drawIcons=!0):(this.yAxisLeft.drawIcons=!1,this.yAxisRight.drawIcons=!1),this.yAxisRight.master=!s,this.yAxisRight.masterAxis=this.yAxisLeft,0==this.yAxisRight.master?(this.yAxisLeft.lineOffset=1==r?this.yAxisRight.width:0,n=this.yAxisLeft.redraw()||n,n=this.yAxisRight.redraw()||n):n=this.yAxisRight.redraw()||n;var p=["__barStackLeft","__barStackRight","__lineStackLeft","__lineStackRight"];for(u=0;u<p.length;u++)-1!=t.indexOf(p[u])&&t.splice(t.indexOf(p[u]),1);return n},o.prototype._toggleAxisVisiblity=function(t,e){var i=!1;return 0==t?e.dom.frame.parentNode&&0==e.hidden&&(e.hide(),i=!0):e.dom.frame.parentNode||1!=e.hidden||(e.show(),i=!0),i},o.prototype._convertXcoordinates=function(t){for(var e=this.body.util.toScreen,i=0;i<t.length;i++)t[i].screen_x=e(t[i].x)+this.props.width,t[i].screen_y=t[i].y,void 0!=t[i].end?t[i].screen_end=e(t[i].end)+this.props.width:t[i].screen_end=void 0},o.prototype._convertYcoordinates=function(t,e){var i=this.yAxisLeft,o=Number(this.svg.style.height.replace("px",""));"right"==e.options.yAxisOrientation&&(i=this.yAxisRight);for(var n=0;n<t.length;n++)t[n].screen_y=Math.round(i.convertValue(t[n].y));e.setZeroPosition(Math.min(o,i.convertValue(0)))},t.exports=o},function(t,e,i){function o(t,e,i,o){this.id=r.randomUUID(),this.body=t,this.defaultOptions={orientation:"left",showMinorLabels:!0,showMajorLabels:!0,icons:!1,majorLinesOffset:7,minorLinesOffset:4,labelOffsetX:10,labelOffsetY:2,iconWidth:20,width:"40px",visible:!0,alignZeros:!0,left:{range:{min:void 0,max:void 0},format:function(t){return""+parseFloat(t.toPrecision(3))},title:{text:void 0,style:void 0}},right:{range:{min:void 0,max:void 0},format:function(t){return""+parseFloat(t.toPrecision(3))},title:{text:void 0,style:void 0}}},this.linegraphOptions=o,this.linegraphSVG=i,this.props={},this.DOMelements={lines:{},labels:{},title:{}},this.dom={},this.scale=void 0,this.range={start:0,end:0},this.options=r.extend({},this.defaultOptions),this.conversionFactor=1,this.setOptions(e),this.width=Number((""+this.options.width).replace("px","")),this.minWidth=this.width,this.height=this.linegraphSVG.getBoundingClientRect().height,this.hidden=!1,this.stepPixels=25,this.zeroCrossing=-1,this.amountOfSteps=-1,this.lineOffset=0,this.master=!0,this.masterAxis=null,this.svgElements={},this.iconsRemoved=!1,this.groups={},this.amountOfGroups=0,this._create(),this.framework={svg:this.svg,svgElements:this.svgElements,options:this.options,groups:this.groups};var n=this;this.body.emitter.on("verticalDrag",function(){n.dom.lineContainer.style.top=n.body.domProps.scrollTop+"px"})}var n=i(8),s=function(t){return t&&t.__esModule?t:{default:t}}(n),r=i(2),a=i(14),h=i(16),d=i(108);o.prototype=new h,o.prototype.addGroup=function(t,e){this.groups.hasOwnProperty(t)||(this.groups[t]=e),this.amountOfGroups+=1},o.prototype.updateGroup=function(t,e){this.groups.hasOwnProperty(t)||(this.amountOfGroups+=1),this.groups[t]=e},o.prototype.removeGroup=function(t){this.groups.hasOwnProperty(t)&&(delete this.groups[t],this.amountOfGroups-=1)},o.prototype.setOptions=function(t){if(t){var e=!1;this.options.orientation!=t.orientation&&void 0!==t.orientation&&(e=!0);var i=["orientation","showMinorLabels","showMajorLabels","icons","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","width","visible","left","right","alignZeros"];r.selectiveDeepExtend(i,this.options,t),this.minWidth=Number((""+this.options.width).replace("px","")),!0===e&&this.dom.frame&&(this.hide(),this.show())}},o.prototype._create=function(){this.dom.frame=document.createElement("div"),this.dom.frame.style.width=this.options.width,this.dom.frame.style.height=this.height,this.dom.lineContainer=document.createElement("div"),this.dom.lineContainer.style.width="100%",this.dom.lineContainer.style.height=this.height,this.dom.lineContainer.style.position="relative",this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="absolute",this.svg.style.top="0px",this.svg.style.height="100%",this.svg.style.width="100%",this.svg.style.display="block",this.dom.frame.appendChild(this.svg)},o.prototype._redrawGroupIcons=function(){a.prepareElements(this.svgElements);var t,e=this.options.iconWidth,i=11.5;t="left"===this.options.orientation?4:this.width-e-4;var o=(0,s.default)(this.groups);o.sort(function(t,e){return t<e?-1:1});for(var n=0;n<o.length;n++){var r=o[n];!0!==this.groups[r].visible||void 0!==this.linegraphOptions.visibility[r]&&!0!==this.linegraphOptions.visibility[r]||(this.groups[r].getLegend(e,15,this.framework,t,i),i+=19)}a.cleanupElements(this.svgElements),this.iconsRemoved=!1},o.prototype._cleanupIcons=function(){!1===this.iconsRemoved&&(a.prepareElements(this.svgElements),a.cleanupElements(this.svgElements),this.iconsRemoved=!0)},o.prototype.show=function(){this.hidden=!1,this.dom.frame.parentNode||("left"===this.options.orientation?this.body.dom.left.appendChild(this.dom.frame):this.body.dom.right.appendChild(this.dom.frame)),this.dom.lineContainer.parentNode||this.body.dom.backgroundHorizontal.appendChild(this.dom.lineContainer)},o.prototype.hide=function(){this.hidden=!0,this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame),this.dom.lineContainer.parentNode&&this.dom.lineContainer.parentNode.removeChild(this.dom.lineContainer)},o.prototype.setRange=function(t,e){this.range.start=t,this.range.end=e},o.prototype.redraw=function(){var t=!1,e=0;this.dom.lineContainer.style.top=this.body.domProps.scrollTop+"px";for(var i in this.groups)this.groups.hasOwnProperty(i)&&(!0!==this.groups[i].visible||void 0!==this.linegraphOptions.visibility[i]&&!0!==this.linegraphOptions.visibility[i]||e++);if(0===this.amountOfGroups||0===e)this.hide();else{this.show(),this.height=Number(this.linegraphSVG.style.height.replace("px","")),this.dom.lineContainer.style.height=this.height+"px",this.width=!0===this.options.visible?Number((""+this.options.width).replace("px","")):0;var o=this.props,n=this.dom.frame;n.className="vis-data-axis",this._calculateCharSize();var s=this.options.orientation,r=this.options.showMinorLabels,a=this.options.showMajorLabels;o.minorLabelHeight=r?o.minorCharHeight:0,o.majorLabelHeight=a?o.majorCharHeight:0,o.minorLineWidth=this.body.dom.backgroundHorizontal.offsetWidth-this.lineOffset-this.width+2*this.options.minorLinesOffset,o.minorLineHeight=1,o.majorLineWidth=this.body.dom.backgroundHorizontal.offsetWidth-this.lineOffset-this.width+2*this.options.majorLinesOffset,o.majorLineHeight=1,"left"===s?(n.style.top="0",n.style.left="0",n.style.bottom="",n.style.width=this.width+"px",n.style.height=this.height+"px",this.props.width=this.body.domProps.left.width,this.props.height=this.body.domProps.left.height):(n.style.top="",n.style.bottom="0",n.style.left="0",n.style.width=this.width+"px",n.style.height=this.height+"px",this.props.width=this.body.domProps.right.width,this.props.height=this.body.domProps.right.height),t=this._redrawLabels(),t=this._isResized()||t,!0===this.options.icons?this._redrawGroupIcons():this._cleanupIcons(),this._redrawTitle(s)}return t},o.prototype._redrawLabels=function(){var t=this,e=!1;a.prepareElements(this.DOMelements.lines),a.prepareElements(this.DOMelements.labels);var i=this.options.orientation,o=void 0!=this.options[i].range?this.options[i].range:{},n=!0;void 0!=o.max&&(this.range.end=o.max,n=!1);var s=!0;void 0!=o.min&&(this.range.start=o.min,s=!1),this.scale=new d(this.range.start,this.range.end,s,n,this.dom.frame.offsetHeight,this.props.majorCharHeight,this.options.alignZeros,this.options[i].format),!1===this.master&&void 0!=this.masterAxis&&this.scale.followScale(this.masterAxis.scale),this.maxLabelSize=0,this.scale.getLines().forEach(function(e){var o=e.y,n=e.major;t.options.showMinorLabels&&!1===n&&t._redrawLabel(o-2,e.val,i,"vis-y-axis vis-minor",t.props.minorCharHeight),n&&o>=0&&t._redrawLabel(o-2,e.val,i,"vis-y-axis vis-major",t.props.majorCharHeight),!0===t.master&&(n?t._redrawLine(o,i,"vis-grid vis-horizontal vis-major",t.options.majorLinesOffset,t.props.majorLineWidth):t._redrawLine(o,i,"vis-grid vis-horizontal vis-minor",t.options.minorLinesOffset,t.props.minorLineWidth))});var r=0;void 0!==this.options[i].title&&void 0!==this.options[i].title.text&&(r=this.props.titleCharHeight);var h=!0===this.options.icons?Math.max(this.options.iconWidth,r)+this.options.labelOffsetX+15:r+this.options.labelOffsetX+15;return this.maxLabelSize>this.width-h&&!0===this.options.visible?(this.width=this.maxLabelSize+h,this.options.width=this.width+"px",a.cleanupElements(this.DOMelements.lines),a.cleanupElements(this.DOMelements.labels),this.redraw(),e=!0):this.maxLabelSize<this.width-h&&!0===this.options.visible&&this.width>this.minWidth?(this.width=Math.max(this.minWidth,this.maxLabelSize+h),this.options.width=this.width+"px",a.cleanupElements(this.DOMelements.lines),a.cleanupElements(this.DOMelements.labels),this.redraw(),e=!0):(a.cleanupElements(this.DOMelements.lines),a.cleanupElements(this.DOMelements.labels),e=!1),e},o.prototype.convertValue=function(t){return this.scale.convertValue(t)},o.prototype.screenToValue=function(t){return this.scale.screenToValue(t)},o.prototype._redrawLabel=function(t,e,i,o,n){var s=a.getDOMElement("div",this.DOMelements.labels,this.dom.frame);s.className=o,s.innerHTML=e,"left"===i?(s.style.left="-"+this.options.labelOffsetX+"px",s.style.textAlign="right"):(s.style.right="-"+this.options.labelOffsetX+"px",s.style.textAlign="left"),s.style.top=t-.5*n+this.options.labelOffsetY+"px",e+="";var r=Math.max(this.props.majorCharWidth,this.props.minorCharWidth);this.maxLabelSize<e.length*r&&(this.maxLabelSize=e.length*r)},o.prototype._redrawLine=function(t,e,i,o,n){if(!0===this.master){var s=a.getDOMElement("div",this.DOMelements.lines,this.dom.lineContainer);s.className=i,s.innerHTML="","left"===e?s.style.left=this.width-o+"px":s.style.right=this.width-o+"px",s.style.width=n+"px",s.style.top=t+"px"}},o.prototype._redrawTitle=function(t){if(a.prepareElements(this.DOMelements.title),void 0!==this.options[t].title&&void 0!==this.options[t].title.text){var e=a.getDOMElement("div",this.DOMelements.title,this.dom.frame);e.className="vis-y-axis vis-title vis-"+t,e.innerHTML=this.options[t].title.text,void 0!==this.options[t].title.style&&r.addCssText(e,this.options[t].title.style),"left"===t?e.style.left=this.props.titleCharHeight+"px":e.style.right=this.props.titleCharHeight+"px",e.style.width=this.height+"px"}a.cleanupElements(this.DOMelements.title)},o.prototype._calculateCharSize=function(){if(!("minorCharHeight"in this.props)){var t=document.createTextNode("0"),e=document.createElement("div");e.className="vis-y-axis vis-minor vis-measure",e.appendChild(t),this.dom.frame.appendChild(e),this.props.minorCharHeight=e.clientHeight,this.props.minorCharWidth=e.clientWidth,this.dom.frame.removeChild(e)}if(!("majorCharHeight"in this.props)){var i=document.createTextNode("0"),o=document.createElement("div");o.className="vis-y-axis vis-major vis-measure",o.appendChild(i),this.dom.frame.appendChild(o),this.props.majorCharHeight=o.clientHeight,this.props.majorCharWidth=o.clientWidth,this.dom.frame.removeChild(o)}if(!("titleCharHeight"in this.props)){var n=document.createTextNode("0"),s=document.createElement("div");s.className="vis-y-axis vis-title vis-measure",s.appendChild(n),this.dom.frame.appendChild(s),this.props.titleCharHeight=s.clientHeight,this.props.titleCharWidth=s.clientWidth,this.dom.frame.removeChild(s)}},t.exports=o},function(t,e,i){function o(t,e,i,o,n,s){var r=arguments.length>6&&void 0!==arguments[6]&&arguments[6],a=arguments.length>7&&void 0!==arguments[7]&&arguments[7];if(this.majorSteps=[1,2,5,10],this.minorSteps=[.25,.5,1,2],this.customLines=null,this.containerHeight=n,this.majorCharHeight=s,this._start=t,this._end=e,this.scale=1,this.minorStepIdx=-1,this.magnitudefactor=1,this.determineScale(),this.zeroAlign=r,this.autoScaleStart=i,this.autoScaleEnd=o,this.formattingFunction=a,i||o){var h=this,d=function(t){var e=t-t%(h.magnitudefactor*h.minorSteps[h.minorStepIdx]);return t%(h.magnitudefactor*h.minorSteps[h.minorStepIdx])>h.magnitudefactor*h.minorSteps[h.minorStepIdx]*.5?e+h.magnitudefactor*h.minorSteps[h.minorStepIdx]:e};i&&(this._start-=2*this.magnitudefactor*this.minorSteps[this.minorStepIdx],this._start=d(this._start)),o&&(this._end+=this.magnitudefactor*this.minorSteps[this.minorStepIdx],this._end=d(this._end)),this.determineScale()}}o.prototype.setCharHeight=function(t){this.majorCharHeight=t},o.prototype.setHeight=function(t){this.containerHeight=t},o.prototype.determineScale=function(){var t=this._end-this._start;this.scale=this.containerHeight/t;var e=this.majorCharHeight/this.scale,i=t>0?Math.round(Math.log(t)/Math.LN10):0;this.minorStepIdx=-1,this.magnitudefactor=Math.pow(10,i);var o=0;i<0&&(o=i);for(var n=!1,s=o;Math.abs(s)<=Math.abs(i);s++){this.magnitudefactor=Math.pow(10,s);for(var r=0;r<this.minorSteps.length;r++){if(this.magnitudefactor*this.minorSteps[r]>=e){n=!0,this.minorStepIdx=r;break}}if(!0===n)break}},o.prototype.is_major=function(t){return t%(this.magnitudefactor*this.majorSteps[this.minorStepIdx])==0},o.prototype.getStep=function(){return this.magnitudefactor*this.minorSteps[this.minorStepIdx]},o.prototype.getFirstMajor=function(){var t=this.magnitudefactor*this.majorSteps[this.minorStepIdx];return this.convertValue(this._start+(t-this._start%t)%t)},o.prototype.formatValue=function(t){var e=t.toPrecision(5);return"function"==typeof this.formattingFunction&&(e=this.formattingFunction(t)),"number"==typeof e?""+e:"string"==typeof e?e:t.toPrecision(5)},o.prototype.getLines=function(){for(var t=[],e=this.getStep(),i=(e-this._start%e)%e,o=this._start+i;this._end-o>1e-5;o+=e)o!=this._start&&t.push({major:this.is_major(o),y:this.convertValue(o),val:this.formatValue(o)});return t},o.prototype.followScale=function(t){var e=this.minorStepIdx,i=this._start,o=this._end,n=this,s=function(){n.magnitudefactor*=2},r=function(){n.magnitudefactor/=2};t.minorStepIdx<=1&&this.minorStepIdx<=1||t.minorStepIdx>1&&this.minorStepIdx>1||(t.minorStepIdx<this.minorStepIdx?(this.minorStepIdx=1,2==e?s():(s(),s())):(this.minorStepIdx=2,1==e?r():(r(),r())));for(var a=t.convertValue(0),h=t.getStep()*t.scale,d=!1,l=0;!d&&l++<5;){this.scale=h/(this.minorSteps[this.minorStepIdx]*this.magnitudefactor);var u=this.containerHeight/this.scale;this._start=i,this._end=this._start+u;var c=this._end*this.scale,p=this.magnitudefactor*this.majorSteps[this.minorStepIdx],f=this.getFirstMajor()-t.getFirstMajor();if(this.zeroAlign){var m=a-c;this._end+=m/this.scale,this._start=this._end-u}else this.autoScaleStart?(this._start-=f/this.scale,this._end=this._start+u):(this._start+=p-f/this.scale,this._end=this._start+u);if(!this.autoScaleEnd&&this._end>o+1e-5)r(),d=!1;else{if(!this.autoScaleStart&&this._start<i-1e-5){if(!(this.zeroAlign&&i>=0)){r(),d=!1;continue}console.warn("Can't adhere to given 'min' range, due to zeroalign")}this.autoScaleStart&&this.autoScaleEnd&&u<o-i?(s(),d=!1):d=!0}}},o.prototype.convertValue=function(t){return this.containerHeight-(t-this._start)*this.scale},o.prototype.screenToValue=function(t){return(this.containerHeight-t)/this.scale+this._start},t.exports=o},function(t,e,i){function o(t,e,i,o){this.id=e;var n=["sampling","style","sort","yAxisOrientation","barChart","drawPoints","shaded","interpolation","zIndex","excludeFromStacking","excludeFromLegend"];this.options=r.selectiveBridgeObject(n,i),this.usingDefaultStyle=void 0===t.className,this.groupsUsingDefaultStyles=o,this.zeroPosition=0,this.update(t),1==this.usingDefaultStyle&&(this.groupsUsingDefaultStyles[0]+=1),this.itemsData=[],this.visible=void 0===t.visible||t.visible}var n=i(6),s=function(t){return t&&t.__esModule?t:{default:t}}(n),r=i(2),a=i(110),h=i(111),d=i(72);o.prototype.setItems=function(t){null!=t?(this.itemsData=t,1==this.options.sort&&r.insertSort(this.itemsData,function(t,e){return t.x>e.x?1:-1})):this.itemsData=[]},o.prototype.getItems=function(){return this.itemsData},o.prototype.setZeroPosition=function(t){this.zeroPosition=t},o.prototype.setOptions=function(t){if(void 0!==t){var e=["sampling","style","sort","yAxisOrientation","barChart","zIndex","excludeFromStacking","excludeFromLegend"];r.selectiveDeepExtend(e,this.options,t),"function"==typeof t.drawPoints&&(t.drawPoints={onRender:t.drawPoints}),r.mergeOptions(this.options,t,"interpolation"),r.mergeOptions(this.options,t,"drawPoints"),r.mergeOptions(this.options,t,"shaded"),t.interpolation&&"object"==(0,s.default)(t.interpolation)&&t.interpolation.parametrization&&("uniform"==t.interpolation.parametrization?this.options.interpolation.alpha=0:"chordal"==t.interpolation.parametrization?this.options.interpolation.alpha=1:(this.options.interpolation.parametrization="centripetal",this.options.interpolation.alpha=.5))}},o.prototype.update=function(t){this.group=t,this.content=t.content||"graph",this.className=t.className||this.className||"vis-graph-group"+this.groupsUsingDefaultStyles[0]%10,this.visible=void 0===t.visible||t.visible,this.style=t.style,this.setOptions(t.options)},o.prototype.getLegend=function(t,e,i,o,n){if(void 0==i||null==i){i={svg:document.createElementNS("http://www.w3.org/2000/svg","svg"),svgElements:{},options:this.options,groups:[this]}}switch(void 0!=o&&null!=o||(o=0),void 0!=n&&null!=n||(n=.5*e),this.options.style){case"line":h.drawIcon(this,o,n,t,e,i);break;case"points":case"point":d.drawIcon(this,o,n,t,e,i);break;case"bar":a.drawIcon(this,o,n,t,e,i)}return{icon:i.svg,label:this.content,orientation:this.options.yAxisOrientation}},o.prototype.getYRange=function(t){for(var e=t[0].y,i=t[0].y,o=0;o<t.length;o++)e=e>t[o].y?t[o].y:e,i=i<t[o].y?t[o].y:i;return{min:e,max:i,yAxisOrientation:this.options.yAxisOrientation}},t.exports=o},function(t,e,i){function o(t,e){}var n=i(14),s=i(72);o.drawIcon=function(t,e,i,o,s,r){var a=.5*s,h=n.getSVGElement("rect",r.svgElements,r.svg);h.setAttributeNS(null,"x",e),h.setAttributeNS(null,"y",i-a),h.setAttributeNS(null,"width",o),h.setAttributeNS(null,"height",2*a),h.setAttributeNS(null,"class","vis-outline");var d=Math.round(.3*o),l=t.options.barChart.width,u=l/d,c=Math.round(.4*s),p=Math.round(.75*s),f=Math.round((o-2*d)/3);if(n.drawBar(e+.5*d+f,i+a-c-1,d,c,t.className+" vis-bar",r.svgElements,r.svg,t.style),n.drawBar(e+1.5*d+f+2,i+a-p-1,d,p,t.className+" vis-bar",r.svgElements,r.svg,t.style),1==t.options.drawPoints.enabled){var m={style:t.options.drawPoints.style,styles:t.options.drawPoints.styles,size:t.options.drawPoints.size/u,className:t.className};n.drawPoint(e+.5*d+f,i+a-c-1,m,r.svgElements,r.svg),n.drawPoint(e+1.5*d+f+2,i+a-p-1,m,r.svgElements,r.svg)}},o.draw=function(t,e,i){var r,a,h,d,l,u,c=[],p={},f=0;for(l=0;l<t.length;l++)if(d=i.groups[t[l]],"bar"===d.options.style&&!0===d.visible&&(void 0===i.options.groups.visibility[t[l]]||!0===i.options.groups.visibility[t[l]]))for(u=0;u<e[t[l]].length;u++)c.push({screen_x:e[t[l]][u].screen_x,screen_end:e[t[l]][u].screen_end,screen_y:e[t[l]][u].screen_y,x:e[t[l]][u].x,end:e[t[l]][u].end,y:e[t[l]][u].y,groupId:t[l],label:e[t[l]][u].label}),f+=1;if(0!==f)for(c.sort(function(t,e){return t.screen_x===e.screen_x?t.groupId<e.groupId?-1:1:t.screen_x-e.screen_x}),o._getDataIntersections(p,c),l=0;l<c.length;l++){d=i.groups[c[l].groupId];var m=void 0!=d.options.barChart.minWidth?d.options.barChart.minWidth:.1*d.options.barChart.width;a=c[l].screen_x;var v=0;if(void 0===p[a])l+1<c.length&&(r=Math.abs(c[l+1].screen_x-a)),h=o._getSafeDrawData(r,d,m);else{var g=l+(p[a].amount-p[a].resolved);g<c.length&&(r=Math.abs(c[g].screen_x-a)),h=o._getSafeDrawData(r,d,m),p[a].resolved+=1,!0===d.options.stack&&!0!==d.options.excludeFromStacking?c[l].screen_y<d.zeroPosition?(v=p[a].accumulatedNegative,p[a].accumulatedNegative+=d.zeroPosition-c[l].screen_y):(v=p[a].accumulatedPositive,p[a].accumulatedPositive+=d.zeroPosition-c[l].screen_y):!0===d.options.barChart.sideBySide&&(h.width=h.width/p[a].amount,h.offset+=p[a].resolved*h.width-.5*h.width*(p[a].amount+1))}var y=h.width,b=c[l].screen_x;if(void 0!=c[l].screen_end?(y=c[l].screen_end-c[l].screen_x,b+=.5*y):b+=h.offset,n.drawBar(b,c[l].screen_y-v,y,d.zeroPosition-c[l].screen_y,d.className+" vis-bar",i.svgElements,i.svg,d.style),!0===d.options.drawPoints.enabled){var _={screen_x:c[l].screen_x,screen_y:c[l].screen_y-v,x:c[l].x,y:c[l].y,groupId:c[l].groupId,label:c[l].label};s.draw([_],d,i,h.offset)}}},o._getDataIntersections=function(t,e){for(var i,o=0;o<e.length;o++)o+1<e.length&&(i=Math.abs(e[o+1].screen_x-e[o].screen_x)),o>0&&(i=Math.min(i,Math.abs(e[o-1].screen_x-e[o].screen_x))),0===i&&(void 0===t[e[o].screen_x]&&(t[e[o].screen_x]={amount:0,resolved:0,accumulatedPositive:0,accumulatedNegative:0}),t[e[o].screen_x].amount+=1)},o._getSafeDrawData=function(t,e,i){var o,n;return t<e.options.barChart.width&&t>0?(o=t<i?i:t,n=0,"left"===e.options.barChart.align?n-=.5*t:"right"===e.options.barChart.align&&(n+=.5*t)):(o=e.options.barChart.width,n=0,"left"===e.options.barChart.align?n-=.5*e.options.barChart.width:"right"===e.options.barChart.align&&(n+=.5*e.options.barChart.width)),{width:o,offset:n}},o.getStackedYRange=function(t,e,i,n,s){if(t.length>0){t.sort(function(t,e){return t.screen_x===e.screen_x?t.groupId<e.groupId?-1:1:t.screen_x-e.screen_x});var r={};o._getDataIntersections(r,t),e[n]=o._getStackedYRange(r,t),e[n].yAxisOrientation=s,i.push(n)}},o._getStackedYRange=function(t,e){for(var i,o=e[0].screen_y,n=e[0].screen_y,s=0;s<e.length;s++)i=e[s].screen_x,void 0===t[i]?(o=o>e[s].screen_y?e[s].screen_y:o,n=n<e[s].screen_y?e[s].screen_y:n):e[s].screen_y<0?t[i].accumulatedNegative+=e[s].screen_y:t[i].accumulatedPositive+=e[s].screen_y;for(var r in t)t.hasOwnProperty(r)&&(o=o>t[r].accumulatedNegative?t[r].accumulatedNegative:o,o=o>t[r].accumulatedPositive?t[r].accumulatedPositive:o,n=n<t[r].accumulatedNegative?t[r].accumulatedNegative:n,n=n<t[r].accumulatedPositive?t[r].accumulatedPositive:n);return{min:o,max:n}},t.exports=o},function(t,e,i){function o(t,e){}var n=i(14);o.calcPath=function(t,e){if(null!=t&&t.length>0){return 1==e.options.interpolation.enabled?o._catmullRom(t,e):o._linear(t)}},o.drawIcon=function(t,e,i,o,s,r){var a,h,d=.5*s,l=n.getSVGElement("rect",r.svgElements,r.svg);if(l.setAttributeNS(null,"x",e),l.setAttributeNS(null,"y",i-d),l.setAttributeNS(null,"width",o),l.setAttributeNS(null,"height",2*d),l.setAttributeNS(null,"class","vis-outline"),a=n.getSVGElement("path",r.svgElements,r.svg),a.setAttributeNS(null,"class",t.className),void 0!==t.style&&a.setAttributeNS(null,"style",t.style),a.setAttributeNS(null,"d","M"+e+","+i+" L"+(e+o)+","+i),1==t.options.shaded.enabled&&(h=n.getSVGElement("path",r.svgElements,r.svg),"top"==t.options.shaded.orientation?h.setAttributeNS(null,"d","M"+e+", "+(i-d)+"L"+e+","+i+" L"+(e+o)+","+i+" L"+(e+o)+","+(i-d)):h.setAttributeNS(null,"d","M"+e+","+i+" L"+e+","+(i+d)+" L"+(e+o)+","+(i+d)+"L"+(e+o)+","+i),h.setAttributeNS(null,"class",t.className+" vis-icon-fill"),void 0!==t.options.shaded.style&&""!==t.options.shaded.style&&h.setAttributeNS(null,"style",t.options.shaded.style)),1==t.options.drawPoints.enabled){var u={style:t.options.drawPoints.style,styles:t.options.drawPoints.styles,size:t.options.drawPoints.size,className:t.className};n.drawPoint(e+.5*o,i,u,r.svgElements,r.svg)}},o.drawShading=function(t,e,i,o){if(1==e.options.shaded.enabled){var s=Number(o.svg.style.height.replace("px","")),r=n.getSVGElement("path",o.svgElements,o.svg),a="L";1==e.options.interpolation.enabled&&(a="C");var h,d=0;d="top"==e.options.shaded.orientation?0:"bottom"==e.options.shaded.orientation?s:Math.min(Math.max(0,e.zeroPosition),s),h="group"==e.options.shaded.orientation&&null!=i&&void 0!=i?"M"+t[0][0]+","+t[0][1]+" "+this.serializePath(t,a,!1)+" L"+i[i.length-1][0]+","+i[i.length-1][1]+" "+this.serializePath(i,a,!0)+i[0][0]+","+i[0][1]+" Z":"M"+t[0][0]+","+t[0][1]+" "+this.serializePath(t,a,!1)+" V"+d+" H"+t[0][0]+" Z",r.setAttributeNS(null,"class",e.className+" vis-fill"),void 0!==e.options.shaded.style&&r.setAttributeNS(null,"style",e.options.shaded.style),r.setAttributeNS(null,"d",h)}},o.draw=function(t,e,i){if(null!=t&&void 0!=t){var o=n.getSVGElement("path",i.svgElements,i.svg);o.setAttributeNS(null,"class",e.className),void 0!==e.style&&o.setAttributeNS(null,"style",e.style);var s="L";1==e.options.interpolation.enabled&&(s="C"),o.setAttributeNS(null,"d","M"+t[0][0]+","+t[0][1]+" "+this.serializePath(t,s,!1))}},o.serializePath=function(t,e,i){if(t.length<2)return"";var o,n=e;if(i)for(o=t.length-2;o>0;o--)n+=t[o][0]+","+t[o][1]+" ";else for(o=1;o<t.length;o++)n+=t[o][0]+","+t[o][1]+" ";return n},o._catmullRomUniform=function(t){var e,i,o,n,s,r,a=[];a.push([Math.round(t[0].screen_x),Math.round(t[0].screen_y)]);for(var h=t.length,d=0;d<h-1;d++)e=0==d?t[0]:t[d-1],i=t[d],o=t[d+1],n=d+2<h?t[d+2]:o,s={screen_x:(-e.screen_x+6*i.screen_x+o.screen_x)*(1/6),screen_y:(-e.screen_y+6*i.screen_y+o.screen_y)*(1/6)},r={screen_x:(i.screen_x+6*o.screen_x-n.screen_x)*(1/6),screen_y:(i.screen_y+6*o.screen_y-n.screen_y)*(1/6)},a.push([s.screen_x,s.screen_y]),a.push([r.screen_x,r.screen_y]),a.push([o.screen_x,o.screen_y]);return a},o._catmullRom=function(t,e){var i=e.options.interpolation.alpha;if(0==i||void 0===i)return this._catmullRomUniform(t);var o,n,s,r,a,h,d,l,u,c,p,f,m,v,g,y,b,_,w,x=[];x.push([Math.round(t[0].screen_x),Math.round(t[0].screen_y)]);for(var k=t.length,S=0;S<k-1;S++)o=0==S?t[0]:t[S-1],n=t[S],s=t[S+1],r=S+2<k?t[S+2]:s,
+d=Math.sqrt(Math.pow(o.screen_x-n.screen_x,2)+Math.pow(o.screen_y-n.screen_y,2)),l=Math.sqrt(Math.pow(n.screen_x-s.screen_x,2)+Math.pow(n.screen_y-s.screen_y,2)),u=Math.sqrt(Math.pow(s.screen_x-r.screen_x,2)+Math.pow(s.screen_y-r.screen_y,2)),v=Math.pow(u,i),y=Math.pow(u,2*i),g=Math.pow(l,i),b=Math.pow(l,2*i),w=Math.pow(d,i),_=Math.pow(d,2*i),c=2*_+3*w*g+b,p=2*y+3*v*g+b,f=3*w*(w+g),f>0&&(f=1/f),m=3*v*(v+g),m>0&&(m=1/m),a={screen_x:(-b*o.screen_x+c*n.screen_x+_*s.screen_x)*f,screen_y:(-b*o.screen_y+c*n.screen_y+_*s.screen_y)*f},h={screen_x:(y*n.screen_x+p*s.screen_x-b*r.screen_x)*m,screen_y:(y*n.screen_y+p*s.screen_y-b*r.screen_y)*m},0==a.screen_x&&0==a.screen_y&&(a=n),0==h.screen_x&&0==h.screen_y&&(h=s),x.push([a.screen_x,a.screen_y]),x.push([h.screen_x,h.screen_y]),x.push([s.screen_x,s.screen_y]);return x},o._linear=function(t){for(var e=[],i=0;i<t.length;i++)e.push([t[i].screen_x,t[i].screen_y]);return e},t.exports=o},function(t,e,i){function o(t,e,i,o){this.body=t,this.defaultOptions={enabled:!1,icons:!0,iconSize:20,iconSpacing:6,left:{visible:!0,position:"top-left"},right:{visible:!0,position:"top-right"}},this.side=i,this.options=r.extend({},this.defaultOptions),this.linegraphOptions=o,this.svgElements={},this.dom={},this.groups={},this.amountOfGroups=0,this._create(),this.framework={svg:this.svg,svgElements:this.svgElements,options:this.options,groups:this.groups},this.setOptions(e)}var n=i(8),s=function(t){return t&&t.__esModule?t:{default:t}}(n),r=i(2),a=i(14),h=i(16);o.prototype=new h,o.prototype.clear=function(){this.groups={},this.amountOfGroups=0},o.prototype.addGroup=function(t,e){1!=e.options.excludeFromLegend&&(this.groups.hasOwnProperty(t)||(this.groups[t]=e),this.amountOfGroups+=1)},o.prototype.updateGroup=function(t,e){this.groups[t]=e},o.prototype.removeGroup=function(t){this.groups.hasOwnProperty(t)&&(delete this.groups[t],this.amountOfGroups-=1)},o.prototype._create=function(){this.dom.frame=document.createElement("div"),this.dom.frame.className="vis-legend",this.dom.frame.style.position="absolute",this.dom.frame.style.top="10px",this.dom.frame.style.display="block",this.dom.textArea=document.createElement("div"),this.dom.textArea.className="vis-legend-text",this.dom.textArea.style.position="relative",this.dom.textArea.style.top="0px",this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.style.position="absolute",this.svg.style.top="0px",this.svg.style.width=this.options.iconSize+5+"px",this.svg.style.height="100%",this.dom.frame.appendChild(this.svg),this.dom.frame.appendChild(this.dom.textArea)},o.prototype.hide=function(){this.dom.frame.parentNode&&this.dom.frame.parentNode.removeChild(this.dom.frame)},o.prototype.show=function(){this.dom.frame.parentNode||this.body.dom.center.appendChild(this.dom.frame)},o.prototype.setOptions=function(t){var e=["enabled","orientation","icons","left","right"];r.selectiveDeepExtend(e,this.options,t)},o.prototype.redraw=function(){var t=0,e=(0,s.default)(this.groups);e.sort(function(t,e){return t<e?-1:1});for(var i=0;i<e.length;i++){var o=e[i];1!=this.groups[o].visible||void 0!==this.linegraphOptions.visibility[o]&&1!=this.linegraphOptions.visibility[o]||t++}if(0==this.options[this.side].visible||0==this.amountOfGroups||0==this.options.enabled||0==t)this.hide();else{if(this.show(),"top-left"==this.options[this.side].position||"bottom-left"==this.options[this.side].position?(this.dom.frame.style.left="4px",this.dom.frame.style.textAlign="left",this.dom.textArea.style.textAlign="left",this.dom.textArea.style.left=this.options.iconSize+15+"px",this.dom.textArea.style.right="",this.svg.style.left="0px",this.svg.style.right=""):(this.dom.frame.style.right="4px",this.dom.frame.style.textAlign="right",this.dom.textArea.style.textAlign="right",this.dom.textArea.style.right=this.options.iconSize+15+"px",this.dom.textArea.style.left="",this.svg.style.right="0px",this.svg.style.left=""),"top-left"==this.options[this.side].position||"top-right"==this.options[this.side].position)this.dom.frame.style.top=4-Number(this.body.dom.center.style.top.replace("px",""))+"px",this.dom.frame.style.bottom="";else{var n=this.body.domProps.center.height-this.body.domProps.centerContainer.height;this.dom.frame.style.bottom=4+n+Number(this.body.dom.center.style.top.replace("px",""))+"px",this.dom.frame.style.top=""}0==this.options.icons?(this.dom.frame.style.width=this.dom.textArea.offsetWidth+10+"px",this.dom.textArea.style.right="",this.dom.textArea.style.left="",this.svg.style.width="0px"):(this.dom.frame.style.width=this.options.iconSize+15+this.dom.textArea.offsetWidth+10+"px",this.drawLegendIcons());var r="";for(i=0;i<e.length;i++)o=e[i],1!=this.groups[o].visible||void 0!==this.linegraphOptions.visibility[o]&&1!=this.linegraphOptions.visibility[o]||(r+=this.groups[o].content+"<br />");this.dom.textArea.innerHTML=r,this.dom.textArea.style.lineHeight=.75*this.options.iconSize+this.options.iconSpacing+"px"}},o.prototype.drawLegendIcons=function(){if(this.dom.frame.parentNode){var t=(0,s.default)(this.groups);t.sort(function(t,e){return t<e?-1:1}),a.resetElements(this.svgElements);var e=window.getComputedStyle(this.dom.frame).paddingTop,i=Number(e.replace("px","")),o=i,n=this.options.iconSize,r=.75*this.options.iconSize,h=i+.5*r+3;this.svg.style.width=n+5+i+"px";for(var d=0;d<t.length;d++){var l=t[d];1!=this.groups[l].visible||void 0!==this.linegraphOptions.visibility[l]&&1!=this.linegraphOptions.visibility[l]||(this.groups[l].getLegend(n,r,this.framework,o,h),h+=r+this.options.iconSpacing)}}},t.exports=o},function(t,e,i){Object.defineProperty(e,"__esModule",{value:!0});var o="string",n="boolean",s="number",r="object",a={configure:{enabled:{boolean:n},filter:{boolean:n,function:"function"},container:{dom:"dom"},__type__:{object:r,boolean:n,function:"function"}},yAxisOrientation:{string:["left","right"]},defaultGroup:{string:o},sort:{boolean:n},sampling:{boolean:n},stack:{boolean:n},graphHeight:{string:o,number:s},shaded:{enabled:{boolean:n},orientation:{string:["bottom","top","zero","group"]},groupId:{object:r},__type__:{boolean:n,object:r}},style:{string:["line","bar","points"]},barChart:{width:{number:s},minWidth:{number:s},sideBySide:{boolean:n},align:{string:["left","center","right"]},__type__:{object:r}},interpolation:{enabled:{boolean:n},parametrization:{string:["centripetal","chordal","uniform"]},alpha:{number:s},__type__:{object:r,boolean:n}},drawPoints:{enabled:{boolean:n},onRender:{function:"function"},size:{number:s},style:{string:["square","circle"]},__type__:{object:r,boolean:n,function:"function"}},dataAxis:{showMinorLabels:{boolean:n},showMajorLabels:{boolean:n},icons:{boolean:n},width:{string:o,number:s},visible:{boolean:n},alignZeros:{boolean:n},left:{range:{min:{number:s,undefined:"undefined"},max:{number:s,undefined:"undefined"},__type__:{object:r}},format:{function:"function"},title:{text:{string:o,number:s,undefined:"undefined"},style:{string:o,undefined:"undefined"},__type__:{object:r}},__type__:{object:r}},right:{range:{min:{number:s,undefined:"undefined"},max:{number:s,undefined:"undefined"},__type__:{object:r}},format:{function:"function"},title:{text:{string:o,number:s,undefined:"undefined"},style:{string:o,undefined:"undefined"},__type__:{object:r}},__type__:{object:r}},__type__:{object:r}},legend:{enabled:{boolean:n},icons:{boolean:n},left:{visible:{boolean:n},position:{string:["top-right","bottom-right","top-left","bottom-left"]},__type__:{object:r}},right:{visible:{boolean:n},position:{string:["top-right","bottom-right","top-left","bottom-left"]},__type__:{object:r}},__type__:{object:r,boolean:n}},groups:{visibility:{any:"any"},__type__:{object:r}},autoResize:{boolean:n},throttleRedraw:{number:s},clickToUse:{boolean:n},end:{number:s,date:"date",string:o,moment:"moment"},format:{minorLabels:{millisecond:{string:o,undefined:"undefined"},second:{string:o,undefined:"undefined"},minute:{string:o,undefined:"undefined"},hour:{string:o,undefined:"undefined"},weekday:{string:o,undefined:"undefined"},day:{string:o,undefined:"undefined"},month:{string:o,undefined:"undefined"},year:{string:o,undefined:"undefined"},__type__:{object:r}},majorLabels:{millisecond:{string:o,undefined:"undefined"},second:{string:o,undefined:"undefined"},minute:{string:o,undefined:"undefined"},hour:{string:o,undefined:"undefined"},weekday:{string:o,undefined:"undefined"},day:{string:o,undefined:"undefined"},month:{string:o,undefined:"undefined"},year:{string:o,undefined:"undefined"},__type__:{object:r}},__type__:{object:r}},moment:{function:"function"},height:{string:o,number:s},hiddenDates:{start:{date:"date",number:s,string:o,moment:"moment"},end:{date:"date",number:s,string:o,moment:"moment"},repeat:{string:o},__type__:{object:r,array:"array"}},locale:{string:o},locales:{__any__:{any:"any"},__type__:{object:r}},max:{date:"date",number:s,string:o,moment:"moment"},maxHeight:{number:s,string:o},maxMinorChars:{number:s},min:{date:"date",number:s,string:o,moment:"moment"},minHeight:{number:s,string:o},moveable:{boolean:n},multiselect:{boolean:n},orientation:{string:o},showCurrentTime:{boolean:n},showMajorLabels:{boolean:n},showMinorLabels:{boolean:n},start:{date:"date",number:s,string:o,moment:"moment"},timeAxis:{scale:{string:o,undefined:"undefined"},step:{number:s,undefined:"undefined"},__type__:{object:r}},width:{string:o,number:s},zoomable:{boolean:n},zoomKey:{string:["ctrlKey","altKey","metaKey",""]},zoomMax:{number:s},zoomMin:{number:s},zIndex:{number:s},__type__:{object:r}},h={global:{sort:!0,sampling:!0,stack:!1,shaded:{enabled:!1,orientation:["zero","top","bottom","group"]},style:["line","bar","points"],barChart:{width:[50,5,100,5],minWidth:[50,5,100,5],sideBySide:!1,align:["left","center","right"]},interpolation:{enabled:!0,parametrization:["centripetal","chordal","uniform"]},drawPoints:{enabled:!0,size:[6,2,30,1],style:["square","circle"]},dataAxis:{showMinorLabels:!0,showMajorLabels:!0,icons:!1,width:[40,0,200,1],visible:!0,alignZeros:!0,left:{title:{text:"",style:""}},right:{title:{text:"",style:""}}},legend:{enabled:!1,icons:!0,left:{visible:!0,position:["top-right","bottom-right","top-left","bottom-left"]},right:{visible:!0,position:["top-right","bottom-right","top-left","bottom-left"]}},autoResize:!0,clickToUse:!1,end:"",format:{minorLabels:{millisecond:"SSS",second:"s",minute:"HH:mm",hour:"HH:mm",weekday:"ddd D",day:"D",month:"MMM",year:"YYYY"},majorLabels:{millisecond:"HH:mm:ss",second:"D MMMM HH:mm",minute:"ddd D MMMM",hour:"ddd D MMMM",weekday:"MMMM YYYY",day:"MMMM YYYY",month:"YYYY",year:""}},height:"",locale:"",max:"",maxHeight:"",maxMinorChars:[7,0,20,1],min:"",minHeight:"",moveable:!0,orientation:["both","bottom","top"],showCurrentTime:!1,showMajorLabels:!0,showMinorLabels:!0,start:"",width:"100%",zoomable:!0,zoomKey:["ctrlKey","altKey","metaKey",""],zoomMax:[31536e10,10,31536e10,1],zoomMin:[10,10,31536e10,1],zIndex:0}};e.allOptions=a,e.configureOptions=h},function(t,e,i){function o(t){return R=t,f()}function n(){A=0,z=R.charAt(0)}function s(){A++,z=R.charAt(A)}function r(){return R.charAt(A+1)}function a(t){return B.test(t)}function h(t,e){if(t||(t={}),e)for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return t}function d(t,e,i){for(var o=e.split("."),n=t;o.length;){var s=o.shift();o.length?(n[s]||(n[s]={}),n=n[s]):n[s]=i}}function l(t,e){for(var i,o,n=null,s=[t],r=t;r.parent;)s.push(r.parent),r=r.parent;if(r.nodes)for(i=0,o=r.nodes.length;i<o;i++)if(e.id===r.nodes[i].id){n=r.nodes[i];break}for(n||(n={id:e.id},t.node&&(n.attr=h(n.attr,t.node))),i=s.length-1;i>=0;i--){var a=s[i];a.nodes||(a.nodes=[]),-1===a.nodes.indexOf(n)&&a.nodes.push(n)}e.attr&&(n.attr=h(n.attr,e.attr))}function u(t,e){if(t.edges||(t.edges=[]),t.edges.push(e),t.edge){var i=h({},t.edge);e.attr=h(i,e.attr)}}function c(t,e,i,o,n){var s={from:e,to:i,type:o};return t.edge&&(s.attr=h({},t.edge)),s.attr=h(s.attr||{},n),s}function p(){for(F=I.NULL,L="";" "===z||"\t"===z||"\n"===z||"\r"===z;)s();do{var t=!1;if("#"===z){for(var e=A-1;" "===R.charAt(e)||"\t"===R.charAt(e);)e--;if("\n"===R.charAt(e)||""===R.charAt(e)){for(;""!=z&&"\n"!=z;)s();t=!0}}if("/"===z&&"/"===r()){for(;""!=z&&"\n"!=z;)s();t=!0}if("/"===z&&"*"===r()){for(;""!=z;){if("*"===z&&"/"===r()){s(),s();break}s()}t=!0}for(;" "===z||"\t"===z||"\n"===z||"\r"===z;)s()}while(t);if(""===z)return void(F=I.DELIMITER);var i=z+r();if(N[i])return F=I.DELIMITER,L=i,s(),void s();if(N[z])return F=I.DELIMITER,L=z,void s();if(a(z)||"-"===z){for(L+=z,s();a(z);)L+=z,s();return"false"===L?L=!1:"true"===L?L=!0:isNaN(Number(L))||(L=Number(L)),void(F=I.IDENTIFIER)}if('"'===z){for(s();""!=z&&('"'!=z||'"'===z&&'"'===r());)'"'===z?(L+=z,s()):"\\"===z&&"n"===r()?(L+="\n",s()):L+=z,s();if('"'!=z)throw x('End of string " expected');return s(),void(F=I.IDENTIFIER)}for(F=I.UNKNOWN;""!=z;)L+=z,s();throw new SyntaxError('Syntax error in part "'+k(L,30)+'"')}function f(){var t={};if(n(),p(),"strict"===L&&(t.strict=!0,p()),"graph"!==L&&"digraph"!==L||(t.type=L,p()),F===I.IDENTIFIER&&(t.id=L,p()),"{"!=L)throw x("Angle bracket { expected");if(p(),m(t),"}"!=L)throw x("Angle bracket } expected");if(p(),""!==L)throw x("End of file expected");return p(),delete t.node,delete t.edge,delete t.graph,t}function m(t){for(;""!==L&&"}"!=L;)v(t),";"===L&&p()}function v(t){var e=g(t);if(e)return void _(t,e);if(!y(t)){if(F!=I.IDENTIFIER)throw x("Identifier expected");var i=L;if(p(),"="===L){if(p(),F!=I.IDENTIFIER)throw x("Identifier expected");t[i]=L,p()}else b(t,i)}}function g(t){var e=null;if("subgraph"===L&&(e={},e.type="subgraph",p(),F===I.IDENTIFIER&&(e.id=L,p())),"{"===L){if(p(),e||(e={}),e.parent=t,e.node=t.node,e.edge=t.edge,e.graph=t.graph,m(e),"}"!=L)throw x("Angle bracket } expected");p(),delete e.node,delete e.edge,delete e.graph,delete e.parent,t.subgraphs||(t.subgraphs=[]),t.subgraphs.push(e)}return e}function y(t){return"node"===L?(p(),t.node=w(),"node"):"edge"===L?(p(),t.edge=w(),"edge"):"graph"===L?(p(),t.graph=w(),"graph"):null}function b(t,e){var i={id:e},o=w();o&&(i.attr=o),l(t,i),_(t,e)}function _(t,e){for(;"->"===L||"--"===L;){var i,o=L;p();var n=g(t);if(n)i=n;else{if(F!=I.IDENTIFIER)throw x("Identifier or subgraph expected");i=L,l(t,{id:i}),p()}u(t,c(t,e,i,o,w())),e=i}}function w(){for(var t=null,e={dashed:!0,solid:!1,dotted:[1,5]};"["===L;){for(p(),t={};""!==L&&"]"!=L;){if(F!=I.IDENTIFIER)throw x("Attribute name expected");var i=L;if(p(),"="!=L)throw x("Equal sign = expected");if(p(),F!=I.IDENTIFIER)throw x("Attribute value expected");var o=L;"style"===i&&(o=e[o]),d(t,i,o),p(),","==L&&p()}if("]"!=L)throw x("Bracket ] expected");p()}return t}function x(t){return new SyntaxError(t+', got "'+k(L,30)+'" (char '+A+")")}function k(t,e){return t.length<=e?t:t.substr(0,27)+"..."}function S(t,e,i){Array.isArray(t)?t.forEach(function(t){Array.isArray(e)?e.forEach(function(e){i(t,e)}):i(t,e)}):Array.isArray(e)?e.forEach(function(e){i(t,e)}):i(t,e)}function D(t,e,i){for(var o=e.split("."),n=o.pop(),s=t,r=0;r<o.length;r++){var a=o[r];a in s||(s[a]={}),s=s[a]}return s[n]=i,t}function M(t,e){var i={};for(var o in t)if(t.hasOwnProperty(o)){var n=e[o];Array.isArray(n)?n.forEach(function(e){D(i,e,t[o])}):"string"==typeof n?D(i,n,t[o]):D(i,o,t[o])}return i}function C(t){var e=o(t),i={nodes:[],edges:[],options:{}};if(e.nodes&&e.nodes.forEach(function(t){var e={id:t.id,label:String(t.label||t.id)};h(e,M(t.attr,T)),e.image&&(e.shape="image"),i.nodes.push(e)}),e.edges){var n=function(t){var e={from:t.from,to:t.to};return h(e,M(t.attr,P)),e.arrows="->"===t.type?"to":void 0,e};e.edges.forEach(function(t){var e,o;e=t.from instanceof Object?t.from.nodes:{id:t.from},o=t.to instanceof Object?t.to.nodes:{id:t.to},t.from instanceof Object&&t.from.edges&&t.from.edges.forEach(function(t){var e=n(t);i.edges.push(e)}),S(e,o,function(e,o){var s=c(i,e.id,o.id,t.type,t.attr),r=n(s);i.edges.push(r)}),t.to instanceof Object&&t.to.edges&&t.to.edges.forEach(function(t){var e=n(t);i.edges.push(e)})})}return e.attr&&(i.options=e.attr),i}var O=i(29),E=function(t){return t&&t.__esModule?t:{default:t}}(O),T={fontsize:"font.size",fontcolor:"font.color",labelfontcolor:"font.color",fontname:"font.face",color:["color.border","color.background"],fillcolor:"color.background",tooltip:"title",labeltooltip:"title"},P=(0,E.default)(T);P.color="color.color",P.style="dashes";var I={NULL:0,DELIMITER:1,IDENTIFIER:2,UNKNOWN:3},N={"{":!0,"}":!0,"[":!0,"]":!0,";":!0,"=":!0,",":!0,"->":!0,"--":!0},R="",A=0,z="",L="",F=I.NULL,B=/[a-zA-Z_0-9.:#]/;e.parseDOT=o,e.DOTToGraph=C},function(t,e,i){function o(t,e){var i=[],o=[],n={edges:{inheritColor:!1},nodes:{fixed:!1,parseColor:!1}};void 0!==e&&(void 0!==e.fixed&&(n.nodes.fixed=e.fixed),void 0!==e.parseColor&&(n.nodes.parseColor=e.parseColor),void 0!==e.inheritColor&&(n.edges.inheritColor=e.inheritColor));for(var s=t.edges,r=t.nodes,a=0;a<s.length;a++){var h={},d=s[a];h.id=d.id,h.from=d.source,h.to=d.target,h.attributes=d.attributes,h.label=d.label,h.title=void 0!==d.attributes?d.attributes.title:void 0,"Directed"===d.type&&(h.arrows="to"),d.color&&!1===n.inheritColor&&(h.color=d.color),i.push(h)}for(var l=0;l<r.length;l++){var u={},c=r[l];u.id=c.id,u.attributes=c.attributes,u.x=c.x,u.y=c.y,u.label=c.label,u.title=void 0!==c.attributes?c.attributes.title:c.title,!0===n.nodes.parseColor?u.color=c.color:u.color=void 0!==c.color?{background:c.color,border:c.color,highlight:{background:c.color,border:c.color},hover:{background:c.color,border:c.color}}:void 0,u.size=c.size,u.fixed=n.nodes.fixed&&void 0!==c.x&&void 0!==c.y,o.push(u)}return{nodes:o,edges:i}}e.parseGephi=o},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=i(185),d=o(h),l=function(){function t(e){(0,s.default)(this,t),this.images={},this.imageBroken={},this.callback=e}return(0,a.default)(t,[{key:"_tryloadBrokenUrl",value:function(t,e,i){if(void 0!==t&&void 0!==i){if(void 0===e)return void console.warn("No broken url image defined");i.onerror=function(){console.error("Could not load brokenImage:",e)},i.image.src=e}}},{key:"_redrawWithImage",value:function(t){this.callback&&this.callback(t)}},{key:"load",value:function(t,e){var i=this,o=this.images[t];if(o)return o;var n=new d.default;return this.images[t]=n,n.image.onload=function(){i._fixImageCoordinates(n.image),n.init(),i._redrawWithImage(n)},n.image.onerror=function(){console.error("Could not load image:",t),i._tryloadBrokenUrl(t,e,n)},n.image.src=t,n}},{key:"_fixImageCoordinates",value:function(t){0===t.width&&(document.body.appendChild(t),t.width=t.offsetWidth,t.height=t.offsetHeight,document.body.removeChild(t))}}]),t}();e.default=l},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(30),s=o(n),r=i(6),a=o(r),h=i(0),d=o(h),l=i(1),u=o(l),c=i(2),p=i(48).default,f=i(191).default,m=["bold","ital","boldital","mono"],v=function(){function t(e,i){var o=arguments.length>2&&void 0!==arguments[2]&&arguments[2];(0,d.default)(this,t),this.body=e,this.pointToSelf=!1,this.baseSize=void 0,this.fontOptions={},this.setOptions(i),this.size={top:0,left:0,width:0,height:0,yLine:0},this.isEdgeLabel=o}return(0,u.default)(t,[{key:"setOptions",value:function(t){if(this.elementOptions=t,this.initFontOptions(t.font),p.isValidLabel(t.label)?this.labelDirty=!0:t.label="",void 0!==t.font&&null!==t.font)if("string"==typeof t.font)this.baseSize=this.fontOptions.size;else if("object"===(0,a.default)(t.font)){var e=t.font.size;void 0!==e&&(this.baseSize=e)}}},{key:"initFontOptions",value:function(e){var i=this;if(c.forEach(m,function(t){i.fontOptions[t]={}}),t.parseFontString(this.fontOptions,e))return void(this.fontOptions.vadjust=0);c.forEach(e,function(t,e){void 0!==t&&null!==t&&"object"!==(void 0===t?"undefined":(0,a.default)(t))&&(i.fontOptions[e]=t)})}},{key:"constrain",value:function(t){var e={constrainWidth:!1,maxWdt:-1,minWdt:-1,constrainHeight:!1,minHgt:-1,valign:"middle"},i=c.topMost(t,"widthConstraint");if("number"==typeof i)e.maxWdt=Number(i),e.minWdt=Number(i);else if("object"===(void 0===i?"undefined":(0,a.default)(i))){var o=c.topMost(t,["widthConstraint","maximum"]);"number"==typeof o&&(e.maxWdt=Number(o));var n=c.topMost(t,["widthConstraint","minimum"]);"number"==typeof n&&(e.minWdt=Number(n))}var s=c.topMost(t,"heightConstraint");if("number"==typeof s)e.minHgt=Number(s);else if("object"===(void 0===s?"undefined":(0,a.default)(s))){var r=c.topMost(t,["heightConstraint","minimum"]);"number"==typeof r&&(e.minHgt=Number(r));var h=c.topMost(t,["heightConstraint","valign"]);"string"==typeof h&&("top"!==h&&"bottom"!==h||(e.valign=h))}return e}},{key:"update",value:function(t,e){this.setOptions(t,!0),this.propagateFonts(e),c.deepExtend(this.fontOptions,this.constrain(e)),this.fontOptions.chooser=p.choosify("label",e)}},{key:"adjustSizes",value:function(t){var e=t?t.right+t.left:0;this.fontOptions.constrainWidth&&(this.fontOptions.maxWdt-=e,this.fontOptions.minWdt-=e);var i=t?t.top+t.bottom:0;this.fontOptions.constrainHeight&&(this.fontOptions.minHgt-=i)}},{key:"addFontOptionsToPile",value:function(t,e){for(var i=0;i<e.length;++i)this.addFontToPile(t,e[i])}},{key:"addFontToPile",value:function(t,e){if(void 0!==e&&void 0!==e.font&&null!==e.font){var i=e.font;t.push(i)}}},{key:"getBasicOptions",value:function(e){for(var i={},o=0;o<e.length;++o){var n=e[o],s={};t.parseFontString(s,n)&&(n=s),c.forEach(n,function(t,e){void 0!==t&&(i.hasOwnProperty(e)||(-1!==m.indexOf(e)?i[e]={}:i[e]=t))})}return i}},{key:"getFontOption",value:function(e,i,o){for(var n=void 0,s=0;s<e.length;++s){var r=e[s];if(r.hasOwnProperty(i)){if(void 0===(n=r[i])||null===n)continue;var a={};if(t.parseFontString(a,n)&&(n=a),n.hasOwnProperty(o))return n[o]}}if(this.fontOptions.hasOwnProperty(o))return this.fontOptions[o];throw new Error("Did not find value for multi-font for property: '"+o+"'")}},{key:"getFontOptions",value:function(t,e){for(var i={},o=["color","size","face","mod","vadjust"],n=0;n<o.length;++n){var s=o[n];i[s]=this.getFontOption(t,e,s)}return i}},{key:"propagateFonts",value:function(t){var e=this,i=[];this.addFontOptionsToPile(i,t),this.fontOptions=this.getBasicOptions(i);for(var o=0;o<m.length;++o)!function(t){var o=m[t],n=e.fontOptions[o],s=e.getFontOptions(i,o);c.forEach(s,function(t,e){n[e]=t}),n.size=Number(n.size),n.vadjust=Number(n.vadjust)}(o)}},{key:"draw",value:function(t,e,i,o,n){var s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"middle";if(void 0!==this.elementOptions.label){var r=this.fontOptions.size*this.body.view.scale;this.elementOptions.label&&r<this.elementOptions.scaling.label.drawThreshold-1||(r>=this.elementOptions.scaling.label.maxVisible&&(r=Number(this.elementOptions.scaling.label.maxVisible)/this.body.view.scale),this.calculateLabelSize(t,o,n,e,i,s),this._drawBackground(t),this._drawText(t,e,this.size.yLine,s,r))}}},{key:"_drawBackground",value:function(t){if(void 0!==this.fontOptions.background&&"none"!==this.fontOptions.background){t.fillStyle=this.fontOptions.background;var e=this.getSize();t.fillRect(e.left,e.top,e.width,e.height)}}},{key:"_drawText",value:function(t,e,i){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"middle",n=arguments[4],r=this._setAlignment(t,e,i,o),a=(0,s.default)(r,2);e=a[0],i=a[1],t.textAlign="left",e-=this.size.width/2,this.fontOptions.valign&&this.size.height>this.size.labelHeight&&("top"===this.fontOptions.valign&&(i-=(this.size.height-this.size.labelHeight)/2),"bottom"===this.fontOptions.valign&&(i+=(this.size.height-this.size.labelHeight)/2));for(var h=0;h<this.lineCount;h++){var d=this.lines[h];if(d&&d.blocks){var l=0;this.isEdgeLabel||"center"===this.fontOptions.align?l+=(this.size.width-d.width)/2:"right"===this.fontOptions.align&&(l+=this.size.width-d.width);for(var u=0;u<d.blocks.length;u++){var c=d.blocks[u];t.font=c.font;var p=this._getColor(c.color,n,c.strokeColor),f=(0,s.default)(p,2),m=f[0],v=f[1];c.strokeWidth>0&&(t.lineWidth=c.strokeWidth,t.strokeStyle=v,t.lineJoin="round"),t.fillStyle=m,c.strokeWidth>0&&t.strokeText(c.text,e+l,i+c.vadjust),t.fillText(c.text,e+l,i+c.vadjust),l+=c.width}i+=d.height}}}},{key:"_setAlignment",value:function(t,e,i,o){if(this.isEdgeLabel&&"horizontal"!==this.fontOptions.align&&!1===this.pointToSelf){e=0,i=0;"top"===this.fontOptions.align?(t.textBaseline="alphabetic",i-=4):"bottom"===this.fontOptions.align?(t.textBaseline="hanging",i+=4):t.textBaseline="middle"}else t.textBaseline=o;return[e,i]}},{key:"_getColor",value:function(t,e,i){var o=t||"#000000",n=i||"#ffffff";if(e<=this.elementOptions.scaling.label.drawThreshold){var s=Math.max(0,Math.min(1,1-(this.elementOptions.scaling.label.drawThreshold-e)));o=c.overrideOpacity(o,s),n=c.overrideOpacity(n,s)}return[o,n]}},{key:"getTextSize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return this._processLabel(t,e,i),{width:this.size.width,height:this.size.height,lineCount:this.lineCount}}},{key:"getSize",value:function(){var t=this.size.left,e=this.size.top-1;if(this.isEdgeLabel){var i=.5*-this.size.width;switch(this.fontOptions.align){case"middle":t=i,e=.5*-this.size.height;break;case"top":t=i,e=-(this.size.height+2);break;case"bottom":t=i,e=2}}return{left:t,top:e,width:this.size.width,height:this.size.height}}},{key:"calculateLabelSize",value:function(t,e,i){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"middle";this._processLabel(t,e,i),this.size.left=o-.5*this.size.width,this.size.top=n-.5*this.size.height,this.size.yLine=n+.5*(1-this.lineCount)*this.fontOptions.size,"hanging"===s&&(this.size.top+=.5*this.fontOptions.size,this.size.top+=4,this.size.yLine+=4)}},{key:"getFormattingValues",value:function(t,e,i,o){var n=function(t,e,i){return"normal"===e?"mod"===i?"":t[i]:void 0!==t[e][i]?t[e][i]:t[i]},s={color:n(this.fontOptions,o,"color"),size:n(this.fontOptions,o,"size"),face:n(this.fontOptions,o,"face"),mod:n(this.fontOptions,o,"mod"),vadjust:n(this.fontOptions,o,"vadjust"),strokeWidth:this.fontOptions.strokeWidth,strokeColor:this.fontOptions.strokeColor};(e||i)&&("normal"===o&&!0===this.fontOptions.chooser&&this.elementOptions.labelHighlightBold?s.mod="bold":"function"==typeof this.fontOptions.chooser&&this.fontOptions.chooser(s,this.elementOptions.id,e,i));var r="";return void 0!==s.mod&&""!==s.mod&&(r+=s.mod+" "),r+=s.size+"px "+s.face,t.font=r.replace(/"/g,""),s.font=t.font,s.height=s.size,s}},{key:"differentState",value:function(t,e){return t!==this.selectedState||e!==this.hoverState}},{key:"_processLabelText",value:function(t,e,i,o){return new f(t,this,e,i).process(o)}},{key:"_processLabel",value:function(t,e,i){if(!1!==this.labelDirty||this.differentState(e,i)){var o=this._processLabelText(t,e,i,this.elementOptions.label);this.fontOptions.minWdt>0&&o.width<this.fontOptions.minWdt&&(o.width=this.fontOptions.minWdt),this.size.labelHeight=o.height,this.fontOptions.minHgt>0&&o.height<this.fontOptions.minHgt&&(o.height=this.fontOptions.minHgt),this.lines=o.lines,this.lineCount=o.lines.length,this.size.width=o.width,this.size.height=o.height,this.selectedState=e,this.hoverState=i,this.labelDirty=!1}}},{key:"visible",value:function(){return 0!==this.size.width&&0!==this.size.height&&void 0!==this.elementOptions.label&&!(this.fontOptions.size*this.body.view.scale<this.elementOptions.scaling.label.drawThreshold-1)}}],[{key:"parseFontString",value:function(t,e){if(!e||"string"!=typeof e)return!1;var i=e.split(" ");return t.size=i[0].replace("px",""),t.face=i[1],t.color=i[2],!0}}]),t}();e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(30),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(2),u=i(119).default,c=function(){function t(e,i,o){(0,a.default)(this,t),this.body=i,this.labelModule=o,this.options={},this.setOptions(e),this.colorDirty=!0,this.color={},this.selectionWidth=2,this.hoverWidth=1.5,this.fromPoint=this.from,this.toPoint=this.to}return(0,d.default)(t,[{key:"connect",value:function(){this.from=this.body.nodes[this.options.from],this.to=this.body.nodes[this.options.to]}},{key:"cleanup",value:function(){return!1}},{key:"setOptions",value:function(t){this.options=t,this.from=this.body.nodes[this.options.from],this.to=this.body.nodes[this.options.to],this.id=this.options.id}},{key:"drawLine",value:function(t,e,i,o,n){t.strokeStyle=this.getColor(t,e,i,o),t.lineWidth=e.width,!1!==e.dashes?this._drawDashedLine(t,e,n):this._drawLine(t,e,n)}},{key:"_drawLine",value:function(t,e,i,o,n){if(this.from!=this.to)this._line(t,e,i,o,n);else{var r=this._getCircleData(t),a=(0,s.default)(r,3),h=a[0],d=a[1],l=a[2];this._circle(t,e,h,d,l)}}},{key:"_drawDashedLine",value:function(t,e,i,o,n){t.lineCap="round";var r=[5,5];if(!0===Array.isArray(e.dashes)&&(r=e.dashes),void 0!==t.setLineDash){if(t.save(),t.setLineDash(r),t.lineDashOffset=0,this.from!=this.to)this._line(t,e,i);else{var a=this._getCircleData(t),h=(0,s.default)(a,3),d=h[0],l=h[1],u=h[2];this._circle(t,e,d,l,u)}t.setLineDash([0]),t.lineDashOffset=0,t.restore()}else{if(this.from!=this.to)t.dashedLine(this.from.x,this.from.y,this.to.x,this.to.y,r);else{var c=this._getCircleData(t),p=(0,s.default)(c,3),f=p[0],m=p[1],v=p[2];this._circle(t,e,f,m,v)}this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}}},{key:"findBorderPosition",value:function(t,e,i){return this.from!=this.to?this._findBorderPosition(t,e,i):this._findBorderPositionCircle(t,e,i)}},{key:"findBorderPositions",value:function(t){var e={},i={};if(this.from!=this.to)e=this._findBorderPosition(this.from,t),i=this._findBorderPosition(this.to,t);else{var o=this._getCircleData(t).slice(0,2),n=(0,s.default)(o,2),r=n[0],a=n[1];e=this._findBorderPositionCircle(this.from,t,{x:r,y:a,low:.25,high:.6,direction:-1}),i=this._findBorderPositionCircle(this.from,t,{x:r,y:a,low:.6,high:.8,direction:1})}return{from:e,to:i}}},{key:"_getCircleData",value:function(t){var e=void 0,i=void 0,o=this.from,n=this.options.selfReferenceSize;return void 0!==t&&void 0===o.shape.width&&o.shape.resize(t),o.shape.width>o.shape.height?(e=o.x+.5*o.shape.width,i=o.y-n):(e=o.x+n,i=o.y-.5*o.shape.height),[e,i,n]}},{key:"_pointOnCircle",value:function(t,e,i,o){var n=2*o*Math.PI;return{x:t+i*Math.cos(n),y:e-i*Math.sin(n)}}},{key:"_findBorderPositionCircle",value:function(t,e,i){for(var o=i.x,n=i.y,s=i.low,r=i.high,a=i.direction,h=0,d=this.options.selfReferenceSize,l=void 0,u=void 0,c=void 0,p=void 0,f=void 0,m=.5*(s+r);s<=r&&h<10&&(m=.5*(s+r),l=this._pointOnCircle(o,n,d,m),u=Math.atan2(t.y-l.y,t.x-l.x),c=t.distanceToBorder(e,u),p=Math.sqrt(Math.pow(l.x-t.x,2)+Math.pow(l.y-t.y,2)),f=c-p,!(Math.abs(f)<.05));)f>0?a>0?s=m:r=m:a>0?r=m:s=m,h++;return l.t=m,l}},{key:"getLineWidth",value:function(t,e){return!0===t?Math.max(this.selectionWidth,.3/this.body.view.scale):!0===e?Math.max(this.hoverWidth,.3/this.body.view.scale):Math.max(this.options.width,.3/this.body.view.scale)}},{key:"getColor",value:function(t,e,i,o){if(!1!==e.inheritsColor){if("both"===e.inheritsColor&&this.from.id!==this.to.id){var n=t.createLinearGradient(this.from.x,this.from.y,this.to.x,this.to.y),s=void 0,r=void 0;return s=this.from.options.color.highlight.border,r=this.to.options.color.highlight.border,!1===this.from.selected&&!1===this.to.selected?(s=l.overrideOpacity(this.from.options.color.border,e.opacity),r=l.overrideOpacity(this.to.options.color.border,e.opacity)):!0===this.from.selected&&!1===this.to.selected?r=this.to.options.color.border:!1===this.from.selected&&!0===this.to.selected&&(s=this.from.options.color.border),n.addColorStop(0,s),n.addColorStop(1,r),n}return"to"===e.inheritsColor?l.overrideOpacity(this.to.options.color.border,e.opacity):l.overrideOpacity(this.from.options.color.border,e.opacity)}return l.overrideOpacity(e.color,e.opacity)}},{key:"_circle",
+value:function(t,e,i,o,n){this.enableShadow(t,e),t.beginPath(),t.arc(i,o,n,0,2*Math.PI,!1),t.stroke(),this.disableShadow(t,e)}},{key:"getDistanceToEdge",value:function(t,e,i,o,n,r,a,h){var d=0;if(this.from!=this.to)d=this._getDistanceToEdge(t,e,i,o,n,r,a);else{var l=this._getCircleData(void 0),u=(0,s.default)(l,3),c=u[0],p=u[1],f=u[2],m=c-n,v=p-r;d=Math.abs(Math.sqrt(m*m+v*v)-f)}return d}},{key:"_getDistanceToLine",value:function(t,e,i,o,n,s){var r=i-t,a=o-e,h=r*r+a*a,d=((n-t)*r+(s-e)*a)/h;d>1?d=1:d<0&&(d=0);var l=t+d*r,u=e+d*a,c=l-n,p=u-s;return Math.sqrt(c*c+p*p)}},{key:"getArrowData",value:function(t,e,i,o,n,r){var a=void 0,h=void 0,d=void 0,l=void 0,u=void 0,c=void 0,p=void 0,f=r.width;if("from"===e?(d=this.from,l=this.to,u=.1,c=r.fromArrowScale,p=r.fromArrowType):"to"===e?(d=this.to,l=this.from,u=-.1,c=r.toArrowScale,p=r.toArrowType):(d=this.to,l=this.from,c=r.middleArrowScale,p=r.middleArrowType),d!=l)if("middle"!==e)if(!0===this.options.smooth.enabled){h=this.findBorderPosition(d,t,{via:i});var m=this.getPoint(Math.max(0,Math.min(1,h.t+u)),i);a=Math.atan2(h.y-m.y,h.x-m.x)}else a=Math.atan2(d.y-l.y,d.x-l.x),h=this.findBorderPosition(d,t);else a=Math.atan2(d.y-l.y,d.x-l.x),h=this.getPoint(.5,i);else{var v=this._getCircleData(t),g=(0,s.default)(v,3),y=g[0],b=g[1],_=g[2];"from"===e?(h=this.findBorderPosition(this.from,t,{x:y,y:b,low:.25,high:.6,direction:-1}),a=-2*h.t*Math.PI+1.5*Math.PI+.1*Math.PI):"to"===e?(h=this.findBorderPosition(this.from,t,{x:y,y:b,low:.6,high:1,direction:1}),a=-2*h.t*Math.PI+1.5*Math.PI-1.1*Math.PI):(h=this._pointOnCircle(y,b,_,.175),a=3.9269908169872414)}"middle"===e&&c<0&&(f*=-1);var w=15*c+3*f;return{point:h,core:{x:h.x-.9*w*Math.cos(a),y:h.y-.9*w*Math.sin(a)},angle:a,length:w,type:p}}},{key:"drawArrowHead",value:function(t,e,i,o,n){t.strokeStyle=this.getColor(t,e,i,o),t.fillStyle=t.strokeStyle,t.lineWidth=e.width,u.draw(t,n),this.enableShadow(t,e),t.fill(),this.disableShadow(t,e)}},{key:"enableShadow",value:function(t,e){!0===e.shadow&&(t.shadowColor=e.shadowColor,t.shadowBlur=e.shadowSize,t.shadowOffsetX=e.shadowX,t.shadowOffsetY=e.shadowY)}},{key:"disableShadow",value:function(t,e){!0===e.shadow&&(t.shadowColor="rgba(0,0,0,0)",t.shadowBlur=0,t.shadowOffsetX=0,t.shadowOffsetY=0)}}]),t}();e.default=c},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(4),a=o(r),h=i(5),d=o(h),l=i(0),u=o(l),c=i(1),p=o(c),f=function(){function t(){(0,u.default)(this,t)}return(0,p.default)(t,null,[{key:"transform",value:function(t,e){t instanceof Array||(t=[t]);for(var i=e.point.x,o=e.point.y,n=e.angle,s=e.length,r=0;r<t.length;++r){var a=t[r],h=a.x*Math.cos(n)-a.y*Math.sin(n),d=a.x*Math.sin(n)+a.y*Math.cos(n);a.x=i+s*h,a.y=o+s*d}}},{key:"drawPath",value:function(t,e){t.beginPath(),t.moveTo(e[0].x,e[0].y);for(var i=1;i<e.length;++i)t.lineTo(e[i].x,e[i].y);t.closePath()}}]),t}(),m=function(t){function e(){return(0,u.default)(this,e),(0,a.default)(this,(e.__proto__||(0,s.default)(e)).apply(this,arguments))}return(0,d.default)(e,t),(0,p.default)(e,null,[{key:"draw",value:function(t,e){var i=[{x:0,y:0},{x:-1,y:.3},{x:-.9,y:0},{x:-1,y:-.3}];f.transform(i,e),f.drawPath(t,i)}}]),e}(f),v=function(){function t(){(0,u.default)(this,t)}return(0,p.default)(t,null,[{key:"draw",value:function(t,e){var i={x:-.4,y:0};f.transform(i,e),t.circle(i.x,i.y,.4*e.length)}}]),t}(),g=function(){function t(){(0,u.default)(this,t)}return(0,p.default)(t,null,[{key:"draw",value:function(t,e){var i=[{x:0,y:.5},{x:0,y:-.5},{x:-.15,y:-.5},{x:-.15,y:.5}];f.transform(i,e),f.drawPath(t,i)}}]),t}(),y=function(){function t(){(0,u.default)(this,t)}return(0,p.default)(t,null,[{key:"draw",value:function(t,e){var i;switch(e.type&&(i=e.type.toLowerCase()),i){case"circle":v.draw(t,e);break;case"bar":g.draw(t,e);break;case"arrow":default:m.draw(t,e)}}}]),t}();e.default=y},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=function(){function t(e,i,o){(0,s.default)(this,t),this.body=e,this.physicsBody=i,this.barnesHutTree,this.setOptions(o),this.randomSeed=5}return(0,a.default)(t,[{key:"setOptions",value:function(t){this.options=t,this.thetaInversed=1/this.options.theta,this.overlapAvoidanceFactor=1-Math.max(0,Math.min(1,this.options.avoidOverlap))}},{key:"seededRandom",value:function(){var t=1e4*Math.sin(this.randomSeed++);return t-Math.floor(t)}},{key:"solve",value:function(){if(0!==this.options.gravitationalConstant&&this.physicsBody.physicsNodeIndices.length>0){var t=void 0,e=this.body.nodes,i=this.physicsBody.physicsNodeIndices,o=i.length,n=this._formBarnesHutTree(e,i);this.barnesHutTree=n;for(var s=0;s<o;s++)t=e[i[s]],t.options.mass>0&&this._getForceContributions(n.root,t)}}},{key:"_getForceContributions",value:function(t,e){this._getForceContribution(t.children.NW,e),this._getForceContribution(t.children.NE,e),this._getForceContribution(t.children.SW,e),this._getForceContribution(t.children.SE,e)}},{key:"_getForceContribution",value:function(t,e){if(t.childrenCount>0){var i=void 0,o=void 0,n=void 0;i=t.centerOfMass.x-e.x,o=t.centerOfMass.y-e.y,n=Math.sqrt(i*i+o*o),n*t.calcSize>this.thetaInversed?this._calculateForces(n,i,o,e,t):4===t.childrenCount?this._getForceContributions(t,e):t.children.data.id!=e.id&&this._calculateForces(n,i,o,e,t)}}},{key:"_calculateForces",value:function(t,e,i,o,n){0===t&&(t=.1,e=t),this.overlapAvoidanceFactor<1&&o.shape.radius&&(t=Math.max(.1+this.overlapAvoidanceFactor*o.shape.radius,t-o.shape.radius));var s=this.options.gravitationalConstant*n.mass*o.options.mass/Math.pow(t,3),r=e*s,a=i*s;this.physicsBody.forces[o.id].x+=r,this.physicsBody.forces[o.id].y+=a}},{key:"_formBarnesHutTree",value:function(t,e){for(var i=void 0,o=e.length,n=t[e[0]].x,s=t[e[0]].y,r=t[e[0]].x,a=t[e[0]].y,h=1;h<o;h++){var d=t[e[h]],l=d.x,u=d.y;d.options.mass>0&&(l<n&&(n=l),l>r&&(r=l),u<s&&(s=u),u>a&&(a=u))}var c=Math.abs(r-n)-Math.abs(a-s);c>0?(s-=.5*c,a+=.5*c):(n+=.5*c,r-=.5*c);var p=Math.max(1e-5,Math.abs(r-n)),f=.5*p,m=.5*(n+r),v=.5*(s+a),g={root:{centerOfMass:{x:0,y:0},mass:0,range:{minX:m-f,maxX:m+f,minY:v-f,maxY:v+f},size:p,calcSize:1/p,children:{data:null},maxWidth:0,level:0,childrenCount:4}};this._splitBranch(g.root);for(var y=0;y<o;y++)i=t[e[y]],i.options.mass>0&&this._placeInTree(g.root,i);return g}},{key:"_updateBranchMass",value:function(t,e){var i=t.centerOfMass,o=t.mass+e.options.mass,n=1/o;i.x=i.x*t.mass+e.x*e.options.mass,i.x*=n,i.y=i.y*t.mass+e.y*e.options.mass,i.y*=n,t.mass=o;var s=Math.max(Math.max(e.height,e.radius),e.width);t.maxWidth=t.maxWidth<s?s:t.maxWidth}},{key:"_placeInTree",value:function(t,e,i){1==i&&void 0!==i||this._updateBranchMass(t,e);var o=t.children.NW.range,n=void 0;n=o.maxX>e.x?o.maxY>e.y?"NW":"SW":o.maxY>e.y?"NE":"SE",this._placeInRegion(t,e,n)}},{key:"_placeInRegion",value:function(t,e,i){var o=t.children[i];switch(o.childrenCount){case 0:o.children.data=e,o.childrenCount=1,this._updateBranchMass(o,e);break;case 1:o.children.data.x===e.x&&o.children.data.y===e.y?(e.x+=this.seededRandom(),e.y+=this.seededRandom()):(this._splitBranch(o),this._placeInTree(o,e));break;case 4:this._placeInTree(o,e)}}},{key:"_splitBranch",value:function(t){var e=null;1===t.childrenCount&&(e=t.children.data,t.mass=0,t.centerOfMass.x=0,t.centerOfMass.y=0),t.childrenCount=4,t.children.data=null,this._insertRegion(t,"NW"),this._insertRegion(t,"NE"),this._insertRegion(t,"SW"),this._insertRegion(t,"SE"),null!=e&&this._placeInTree(t,e)}},{key:"_insertRegion",value:function(t,e){var i=void 0,o=void 0,n=void 0,s=void 0,r=.5*t.size;switch(e){case"NW":i=t.range.minX,o=t.range.minX+r,n=t.range.minY,s=t.range.minY+r;break;case"NE":i=t.range.minX+r,o=t.range.maxX,n=t.range.minY,s=t.range.minY+r;break;case"SW":i=t.range.minX,o=t.range.minX+r,n=t.range.minY+r,s=t.range.maxY;break;case"SE":i=t.range.minX+r,o=t.range.maxX,n=t.range.minY+r,s=t.range.maxY}t.children[e]={centerOfMass:{x:0,y:0},mass:0,range:{minX:i,maxX:o,minY:n,maxY:s},size:.5*t.size,calcSize:2*t.calcSize,children:{data:null},maxWidth:0,level:t.level+1,childrenCount:0}}},{key:"_debug",value:function(t,e){void 0!==this.barnesHutTree&&(t.lineWidth=1,this._drawBranch(this.barnesHutTree.root,t,e))}},{key:"_drawBranch",value:function(t,e,i){void 0===i&&(i="#FF0000"),4===t.childrenCount&&(this._drawBranch(t.children.NW,e),this._drawBranch(t.children.NE,e),this._drawBranch(t.children.SE,e),this._drawBranch(t.children.SW,e)),e.strokeStyle=i,e.beginPath(),e.moveTo(t.range.minX,t.range.minY),e.lineTo(t.range.maxX,t.range.minY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.minY),e.lineTo(t.range.maxX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.maxX,t.range.maxY),e.lineTo(t.range.minX,t.range.maxY),e.stroke(),e.beginPath(),e.moveTo(t.range.minX,t.range.maxY),e.lineTo(t.range.minX,t.range.minY),e.stroke()}}]),t}();e.default=h},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=function(){function t(e,i,o){(0,s.default)(this,t),this.body=e,this.physicsBody=i,this.setOptions(o)}return(0,a.default)(t,[{key:"setOptions",value:function(t){this.options=t}},{key:"solve",value:function(){for(var t=void 0,e=void 0,i=void 0,o=void 0,n=this.body.nodes,s=this.physicsBody.physicsNodeIndices,r=this.physicsBody.forces,a=0;a<s.length;a++){o=n[s[a]],t=-o.x,e=-o.y,i=Math.sqrt(t*t+e*e),this._calculateForces(i,t,e,r,o)}}},{key:"_calculateForces",value:function(t,e,i,o,n){var s=0===t?0:this.options.centralGravity/t;o[n.id].x=e*s,o[n.id].y=i*s}}]),t}();e.default=h},function(t,e,i){Object.defineProperty(e,"__esModule",{value:!0});var o="string",n="boolean",s="number",r="object",a=["arrow","circle","bar"],h={configure:{enabled:{boolean:n},filter:{boolean:n,string:o,array:"array",function:"function"},container:{dom:"dom"},showButton:{boolean:n},__type__:{object:r,boolean:n,string:o,array:"array",function:"function"}},edges:{arrows:{to:{enabled:{boolean:n},scaleFactor:{number:s},type:{string:a},__type__:{object:r,boolean:n}},middle:{enabled:{boolean:n},scaleFactor:{number:s},type:{string:a},__type__:{object:r,boolean:n}},from:{enabled:{boolean:n},scaleFactor:{number:s},type:{string:a},__type__:{object:r,boolean:n}},__type__:{string:["from","to","middle"],object:r}},arrowStrikethrough:{boolean:n},chosen:{label:{boolean:n,function:"function"},edge:{boolean:n,function:"function"},__type__:{object:r,boolean:n}},color:{color:{string:o},highlight:{string:o},hover:{string:o},inherit:{string:["from","to","both"],boolean:n},opacity:{number:s},__type__:{object:r,string:o}},dashes:{boolean:n,array:"array"},font:{color:{string:o},size:{number:s},face:{string:o},background:{string:o},strokeWidth:{number:s},strokeColor:{string:o},align:{string:["horizontal","top","middle","bottom"]},vadjust:{number:s},multi:{boolean:n,string:o},bold:{color:{string:o},size:{number:s},face:{string:o},mod:{string:o},vadjust:{number:s},__type__:{object:r,string:o}},boldital:{color:{string:o},size:{number:s},face:{string:o},mod:{string:o},vadjust:{number:s},__type__:{object:r,string:o}},ital:{color:{string:o},size:{number:s},face:{string:o},mod:{string:o},vadjust:{number:s},__type__:{object:r,string:o}},mono:{color:{string:o},size:{number:s},face:{string:o},mod:{string:o},vadjust:{number:s},__type__:{object:r,string:o}},__type__:{object:r,string:o}},hidden:{boolean:n},hoverWidth:{function:"function",number:s},label:{string:o,undefined:"undefined"},labelHighlightBold:{boolean:n},length:{number:s,undefined:"undefined"},physics:{boolean:n},scaling:{min:{number:s},max:{number:s},label:{enabled:{boolean:n},min:{number:s},max:{number:s},maxVisible:{number:s},drawThreshold:{number:s},__type__:{object:r,boolean:n}},customScalingFunction:{function:"function"},__type__:{object:r}},selectionWidth:{function:"function",number:s},selfReferenceSize:{number:s},shadow:{enabled:{boolean:n},color:{string:o},size:{number:s},x:{number:s},y:{number:s},__type__:{object:r,boolean:n}},smooth:{enabled:{boolean:n},type:{string:["dynamic","continuous","discrete","diagonalCross","straightCross","horizontal","vertical","curvedCW","curvedCCW","cubicBezier"]},roundness:{number:s},forceDirection:{string:["horizontal","vertical","none"],boolean:n},__type__:{object:r,boolean:n}},title:{string:o,undefined:"undefined"},width:{number:s},widthConstraint:{maximum:{number:s},__type__:{object:r,boolean:n,number:s}},value:{number:s,undefined:"undefined"},__type__:{object:r}},groups:{useDefaultGroups:{boolean:n},__any__:"get from nodes, will be overwritten below",__type__:{object:r}},interaction:{dragNodes:{boolean:n},dragView:{boolean:n},hideEdgesOnDrag:{boolean:n},hideNodesOnDrag:{boolean:n},hover:{boolean:n},keyboard:{enabled:{boolean:n},speed:{x:{number:s},y:{number:s},zoom:{number:s},__type__:{object:r}},bindToWindow:{boolean:n},__type__:{object:r,boolean:n}},multiselect:{boolean:n},navigationButtons:{boolean:n},selectable:{boolean:n},selectConnectedEdges:{boolean:n},hoverConnectedEdges:{boolean:n},tooltipDelay:{number:s},zoomView:{boolean:n},__type__:{object:r}},layout:{randomSeed:{undefined:"undefined",number:s},improvedLayout:{boolean:n},hierarchical:{enabled:{boolean:n},levelSeparation:{number:s},nodeSpacing:{number:s},treeSpacing:{number:s},blockShifting:{boolean:n},edgeMinimization:{boolean:n},parentCentralization:{boolean:n},direction:{string:["UD","DU","LR","RL"]},sortMethod:{string:["hubsize","directed"]},__type__:{object:r,boolean:n}},__type__:{object:r}},manipulation:{enabled:{boolean:n},initiallyActive:{boolean:n},addNode:{boolean:n,function:"function"},addEdge:{boolean:n,function:"function"},editNode:{function:"function"},editEdge:{editWithoutDrag:{function:"function"},__type__:{object:r,boolean:n,function:"function"}},deleteNode:{boolean:n,function:"function"},deleteEdge:{boolean:n,function:"function"},controlNodeStyle:"get from nodes, will be overwritten below",__type__:{object:r,boolean:n}},nodes:{borderWidth:{number:s},borderWidthSelected:{number:s,undefined:"undefined"},brokenImage:{string:o,undefined:"undefined"},chosen:{label:{boolean:n,function:"function"},node:{boolean:n,function:"function"},__type__:{object:r,boolean:n}},color:{border:{string:o},background:{string:o},highlight:{border:{string:o},background:{string:o},__type__:{object:r,string:o}},hover:{border:{string:o},background:{string:o},__type__:{object:r,string:o}},__type__:{object:r,string:o}},fixed:{x:{boolean:n},y:{boolean:n},__type__:{object:r,boolean:n}},font:{align:{string:o},color:{string:o},size:{number:s},face:{string:o},background:{string:o},strokeWidth:{number:s},strokeColor:{string:o},vadjust:{number:s},multi:{boolean:n,string:o},bold:{color:{string:o},size:{number:s},face:{string:o},mod:{string:o},vadjust:{number:s},__type__:{object:r,string:o}},boldital:{color:{string:o},size:{number:s},face:{string:o},mod:{string:o},vadjust:{number:s},__type__:{object:r,string:o}},ital:{color:{string:o},size:{number:s},face:{string:o},mod:{string:o},vadjust:{number:s},__type__:{object:r,string:o}},mono:{color:{string:o},size:{number:s},face:{string:o},mod:{string:o},vadjust:{number:s},__type__:{object:r,string:o}},__type__:{object:r,string:o}},group:{string:o,number:s,undefined:"undefined"},heightConstraint:{minimum:{number:s},valign:{string:o},__type__:{object:r,boolean:n,number:s}},hidden:{boolean:n},icon:{face:{string:o},code:{string:o},size:{number:s},color:{string:o},__type__:{object:r}},id:{string:o,number:s},image:{selected:{string:o,undefined:"undefined"},unselected:{string:o,undefined:"undefined"},__type__:{object:r,string:o}},label:{string:o,undefined:"undefined"},labelHighlightBold:{boolean:n},level:{number:s,undefined:"undefined"},margin:{top:{number:s},right:{number:s},bottom:{number:s},left:{number:s},__type__:{object:r,number:s}},mass:{number:s},physics:{boolean:n},scaling:{min:{number:s},max:{number:s},label:{enabled:{boolean:n},min:{number:s},max:{number:s},maxVisible:{number:s},drawThreshold:{number:s},__type__:{object:r,boolean:n}},customScalingFunction:{function:"function"},__type__:{object:r}},shadow:{enabled:{boolean:n},color:{string:o},size:{number:s},x:{number:s},y:{number:s},__type__:{object:r,boolean:n}},shape:{string:["ellipse","circle","database","box","text","image","circularImage","diamond","dot","star","triangle","triangleDown","square","icon","hexagon"]},shapeProperties:{borderDashes:{boolean:n,array:"array"},borderRadius:{number:s},interpolation:{boolean:n},useImageSize:{boolean:n},useBorderWithImage:{boolean:n},__type__:{object:r}},size:{number:s},title:{string:o,dom:"dom",undefined:"undefined"},value:{number:s,undefined:"undefined"},widthConstraint:{minimum:{number:s},maximum:{number:s},__type__:{object:r,boolean:n,number:s}},x:{number:s},y:{number:s},__type__:{object:r}},physics:{enabled:{boolean:n},barnesHut:{gravitationalConstant:{number:s},centralGravity:{number:s},springLength:{number:s},springConstant:{number:s},damping:{number:s},avoidOverlap:{number:s},__type__:{object:r}},forceAtlas2Based:{gravitationalConstant:{number:s},centralGravity:{number:s},springLength:{number:s},springConstant:{number:s},damping:{number:s},avoidOverlap:{number:s},__type__:{object:r}},repulsion:{centralGravity:{number:s},springLength:{number:s},springConstant:{number:s},nodeDistance:{number:s},damping:{number:s},__type__:{object:r}},hierarchicalRepulsion:{centralGravity:{number:s},springLength:{number:s},springConstant:{number:s},nodeDistance:{number:s},damping:{number:s},__type__:{object:r}},maxVelocity:{number:s},minVelocity:{number:s},solver:{string:["barnesHut","repulsion","hierarchicalRepulsion","forceAtlas2Based"]},stabilization:{enabled:{boolean:n},iterations:{number:s},updateInterval:{number:s},onlyDynamicEdges:{boolean:n},fit:{boolean:n},__type__:{object:r,boolean:n}},timestep:{number:s},adaptiveTimestep:{boolean:n},__type__:{object:r,boolean:n}},autoResize:{boolean:n},clickToUse:{boolean:n},locale:{string:o},locales:{__any__:{any:"any"},__type__:{object:r}},height:{string:o},width:{string:o},__type__:{object:r}};h.groups.__any__=h.nodes,h.manipulation.controlNodeStyle=h.nodes;var d={nodes:{borderWidth:[1,0,10,1],borderWidthSelected:[2,0,10,1],color:{border:["color","#2B7CE9"],background:["color","#97C2FC"],highlight:{border:["color","#2B7CE9"],background:["color","#D2E5FF"]},hover:{border:["color","#2B7CE9"],background:["color","#D2E5FF"]}},fixed:{x:!1,y:!1},font:{color:["color","#343434"],size:[14,0,100,1],face:["arial","verdana","tahoma"],background:["color","none"],strokeWidth:[0,0,50,1],strokeColor:["color","#ffffff"]},hidden:!1,labelHighlightBold:!0,physics:!0,scaling:{min:[10,0,200,1],max:[30,0,200,1],label:{enabled:!1,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},shape:["ellipse","box","circle","database","diamond","dot","square","star","text","triangle","triangleDown","hexagon"],shapeProperties:{borderDashes:!1,borderRadius:[6,0,20,1],interpolation:!0,useImageSize:!1},size:[25,0,200,1]},edges:{arrows:{to:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"},middle:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"},from:{enabled:!1,scaleFactor:[1,0,3,.05],type:"arrow"}},arrowStrikethrough:!0,color:{color:["color","#848484"],highlight:["color","#848484"],hover:["color","#848484"],inherit:["from","to","both",!0,!1],opacity:[1,0,1,.05]},dashes:!1,font:{color:["color","#343434"],size:[14,0,100,1],face:["arial","verdana","tahoma"],background:["color","none"],strokeWidth:[2,0,50,1],strokeColor:["color","#ffffff"],align:["horizontal","top","middle","bottom"]},hidden:!1,hoverWidth:[1.5,0,5,.1],labelHighlightBold:!0,physics:!0,scaling:{min:[1,0,100,1],max:[15,0,100,1],label:{enabled:!0,min:[14,0,200,1],max:[30,0,200,1],maxVisible:[30,0,200,1],drawThreshold:[5,0,20,1]}},selectionWidth:[1.5,0,5,.1],selfReferenceSize:[20,0,200,1],shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:[10,0,20,1],x:[5,-30,30,1],y:[5,-30,30,1]},smooth:{enabled:!0,type:["dynamic","continuous","discrete","diagonalCross","straightCross","horizontal","vertical","curvedCW","curvedCCW","cubicBezier"],forceDirection:["horizontal","vertical","none"],roundness:[.5,0,1,.05]},width:[1,0,30,1]},layout:{hierarchical:{enabled:!1,levelSeparation:[150,20,500,5],nodeSpacing:[100,20,500,5],treeSpacing:[200,20,500,5],blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:["UD","DU","LR","RL"],sortMethod:["hubsize","directed"]}},interaction:{dragNodes:!0,dragView:!0,hideEdgesOnDrag:!1,hideNodesOnDrag:!1,hover:!1,keyboard:{enabled:!1,speed:{x:[10,0,40,1],y:[10,0,40,1],zoom:[.02,0,.1,.005]},bindToWindow:!0},multiselect:!1,navigationButtons:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0,tooltipDelay:[300,0,1e3,25],zoomView:!0},manipulation:{enabled:!1,initiallyActive:!1},physics:{enabled:!0,barnesHut:{gravitationalConstant:[-2e3,-3e4,0,50],centralGravity:[.3,0,10,.05],springLength:[95,0,500,5],springConstant:[.04,0,1.2,.005],damping:[.09,0,1,.01],avoidOverlap:[0,0,1,.01]},forceAtlas2Based:{gravitationalConstant:[-50,-500,0,1],centralGravity:[.01,0,1,.005],springLength:[95,0,500,5],springConstant:[.08,0,1.2,.005],damping:[.4,0,1,.01],avoidOverlap:[0,0,1,.01]},repulsion:{centralGravity:[.2,0,10,.05],springLength:[200,0,500,5],springConstant:[.05,0,1.2,.005],nodeDistance:[100,0,500,5],damping:[.09,0,1,.01]},hierarchicalRepulsion:{centralGravity:[.2,0,10,.05],springLength:[100,0,500,5],springConstant:[.01,0,1.2,.005],nodeDistance:[120,0,500,5],damping:[.09,0,1,.01]},maxVelocity:[50,0,150,1],minVelocity:[.1,.01,.5,.01],solver:["barnesHut","forceAtlas2Based","repulsion","hierarchicalRepulsion"],timestep:[.5,.01,1,.01]}};e.allOptions=h,e.configureOptions=d},function(t,e,i){var o=i(2);o.extend(e,i(159)),o.extend(e,i(177)),o.extend(e,i(181))},function(t,e,i){i(49),i(60),t.exports=i(136)},function(t,e,i){var o=i(126),n=i(127),s=i(31),r=i(25);t.exports=i(79)(Array,"Array",function(t,e){this._t=r(t),this._i=0,this._k=e},function(){var t=this._t,e=this._k,i=this._i++;return!t||i>=t.length?(this._t=void 0,n(1)):"keys"==e?n(0,i):"values"==e?n(0,t[i]):n(0,[i,t[i]])},"values"),s.Arguments=s.Array,o("keys"),o("values"),o("entries")},function(t,e){t.exports=function(){}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,i){var o=i(54),n=i(39),s=i(59),r={};i(26)(r,i(13)("iterator"),function(){return this}),t.exports=function(t,e,i){t.prototype=o(r,{next:n(1,i)}),s(t,e+" Iterator")}},function(t,e,i){var o=i(20),n=i(27),s=i(33);t.exports=i(21)?Object.defineProperties:function(t,e){n(t);for(var i,r=s(e),a=r.length,h=0;a>h;)o.f(t,i=r[h++],e[i]);return t}},function(t,e,i){var o=i(25),n=i(132),s=i(133);t.exports=function(t){return function(e,i,r){var a,h=o(e),d=n(h.length),l=s(r,d);if(t&&i!=i){for(;d>l;)if((a=h[l++])!=a)return!0}else for(;d>l;l++)if((t||l in h)&&h[l]===i)return t||l||0;return!t&&-1}}},function(t,e,i){var o=i(55),n=Math.min;t.exports=function(t){return t>0?n(o(t),9007199254740991):0}},function(t,e,i){var o=i(55),n=Math.max,s=Math.min;t.exports=function(t,e){return t=o(t),t<0?n(t+e,0):s(t,e)}},function(t,e,i){var o=i(18).document;t.exports=o&&o.documentElement},function(t,e,i){var o=i(55),n=i(51);t.exports=function(t){return function(e,i){var s,r,a=String(n(e)),h=o(i),d=a.length;return h<0||h>=d?t?"":void 0:(s=a.charCodeAt(h),s<55296||s>56319||h+1===d||(r=a.charCodeAt(h+1))<56320||r>57343?t?a.charAt(h):s:t?a.slice(h,h+2):r-56320+(s-55296<<10)+65536)}}},function(t,e,i){var o=i(27),n=i(137);t.exports=i(7).getIterator=function(t){var e=n(t);if("function"!=typeof e)throw TypeError(t+" is not iterable!");return o(e.call(t))}},function(t,e,i){var o=i(86),n=i(13)("iterator"),s=i(31);t.exports=i(7).getIteratorMethod=function(t){if(void 0!=t)return t[n]||t["@@iterator"]||s[o(t)]}},function(t,e,i){i(139);var o=i(7).Object;t.exports=function(t,e){return o.create(t,e)}},function(t,e,i){var o=i(17);o(o.S,"Object",{create:i(54)})},function(t,e,i){i(141),t.exports=i(7).Object.keys},function(t,e,i){var o=i(41),n=i(33);i(87)("keys",function(){return function(t){return n(o(t))}})},function(t,e,i){t.exports={default:i(143),__esModule:!0}},function(t,e,i){i(60),i(49),t.exports=i(61).f("iterator")},function(t,e,i){t.exports={default:i(145),__esModule:!0}},function(t,e,i){i(146),i(151),i(152),i(153),t.exports=i(7).Symbol},function(t,e,i){var o=i(18),n=i(22),s=i(21),r=i(17),a=i(83),h=i(147).KEY,d=i(28),l=i(57),u=i(59),c=i(40),p=i(13),f=i(61),m=i(62),v=i(148),g=i(149),y=i(27),b=i(25),_=i(53),w=i(39),x=i(54),k=i(150),S=i(89),D=i(20),M=i(33),C=S.f,O=D.f,E=k.f,T=o.Symbol,P=o.JSON,I=P&&P.stringify,N=p("_hidden"),R=p("toPrimitive"),A={}.propertyIsEnumerable,z=l("symbol-registry"),L=l("symbols"),F=l("op-symbols"),B=Object.prototype,j="function"==typeof T,H=o.QObject,W=!H||!H.prototype||!H.prototype.findChild,Y=s&&d(function(){return 7!=x(O({},"a",{get:function(){return O(this,"a",{value:7}).a}})).a})?function(t,e,i){var o=C(B,e);o&&delete B[e],O(t,e,i),o&&t!==B&&O(B,e,o)}:O,G=function(t){var e=L[t]=x(T.prototype);return e._k=t,e},V=j&&"symbol"==typeof T.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof T},U=function(t,e,i){return t===B&&U(F,e,i),y(t),e=_(e,!0),y(i),n(L,e)?(i.enumerable?(n(t,N)&&t[N][e]&&(t[N][e]=!1),i=x(i,{enumerable:w(0,!1)})):(n(t,N)||O(t,N,w(1,{})),t[N][e]=!0),Y(t,e,i)):O(t,e,i)},q=function(t,e){y(t);for(var i,o=v(e=b(e)),n=0,s=o.length;s>n;)U(t,i=o[n++],e[i]);return t},X=function(t,e){return void 0===e?x(t):q(x(t),e)},Z=function(t){var e=A.call(this,t=_(t,!0));return!(this===B&&n(L,t)&&!n(F,t))&&(!(e||!n(this,t)||!n(L,t)||n(this,N)&&this[N][t])||e)},K=function(t,e){if(t=b(t),e=_(e,!0),t!==B||!n(L,e)||n(F,e)){var i=C(t,e);return!i||!n(L,e)||n(t,N)&&t[N][e]||(i.enumerable=!0),i}},J=function(t){for(var e,i=E(b(t)),o=[],s=0;i.length>s;)n(L,e=i[s++])||e==N||e==h||o.push(e);return o},$=function(t){for(var e,i=t===B,o=E(i?F:b(t)),s=[],r=0;o.length>r;)!n(L,e=o[r++])||i&&!n(B,e)||s.push(L[e]);return s};j||(T=function(){if(this instanceof T)throw TypeError("Symbol is not a constructor!");var t=c(arguments.length>0?arguments[0]:void 0),e=function(i){this===B&&e.call(F,i),n(this,N)&&n(this[N],t)&&(this[N][t]=!1),Y(this,t,w(1,i))};return s&&W&&Y(B,t,{configurable:!0,set:e}),G(t)},a(T.prototype,"toString",function(){return this._k}),S.f=K,D.f=U,i(88).f=k.f=J,i(42).f=Z,i(63).f=$,s&&!i(52)&&a(B,"propertyIsEnumerable",Z,!0),f.f=function(t){return G(p(t))}),r(r.G+r.W+r.F*!j,{Symbol:T});for(var Q="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),tt=0;Q.length>tt;)p(Q[tt++]);for(var et=M(p.store),it=0;et.length>it;)m(et[it++]);r(r.S+r.F*!j,"Symbol",{for:function(t){return n(z,t+="")?z[t]:z[t]=T(t)},keyFor:function(t){if(!V(t))throw TypeError(t+" is not a symbol!");for(var e in z)if(z[e]===t)return e},useSetter:function(){W=!0},useSimple:function(){W=!1}}),r(r.S+r.F*!j,"Object",{create:X,defineProperty:U,defineProperties:q,getOwnPropertyDescriptor:K,getOwnPropertyNames:J,getOwnPropertySymbols:$}),P&&r(r.S+r.F*(!j||d(function(){var t=T();return"[null]"!=I([t])||"{}"!=I({a:t})||"{}"!=I(Object(t))})),"JSON",{stringify:function(t){if(void 0!==t&&!V(t)){for(var e,i,o=[t],n=1;arguments.length>n;)o.push(arguments[n++]);return e=o[1],"function"==typeof e&&(i=e),!i&&g(e)||(e=function(t,e){if(i&&(e=i.call(this,t,e)),!V(e))return e}),o[1]=e,I.apply(P,o)}}}),T.prototype[R]||i(26)(T.prototype,R,T.prototype.valueOf),u(T,"Symbol"),u(Math,"Math",!0),u(o.JSON,"JSON",!0)},function(t,e,i){var o=i(40)("meta"),n=i(32),s=i(22),r=i(20).f,a=0,h=Object.isExtensible||function(){return!0},d=!i(28)(function(){return h(Object.preventExtensions({}))}),l=function(t){r(t,o,{value:{i:"O"+ ++a,w:{}}})},u=function(t,e){if(!n(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!s(t,o)){if(!h(t))return"F";if(!e)return"E";l(t)}return t[o].i},c=function(t,e){if(!s(t,o)){if(!h(t))return!0;if(!e)return!1;l(t)}return t[o].w},p=function(t){return d&&f.NEED&&h(t)&&!s(t,o)&&l(t),t},f=t.exports={KEY:o,NEED:!1,fastKey:u,getWeak:c,onFreeze:p}},function(t,e,i){var o=i(33),n=i(63),s=i(42);t.exports=function(t){var e=o(t),i=n.f;if(i)for(var r,a=i(t),h=s.f,d=0;a.length>d;)h.call(t,r=a[d++])&&e.push(r);return e}},function(t,e,i){var o=i(50);t.exports=Array.isArray||function(t){return"Array"==o(t)}},function(t,e,i){var o=i(25),n=i(88).f,s={}.toString,r="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],a=function(t){try{return n(t)}catch(t){return r.slice()}};t.exports.f=function(t){return r&&"[object Window]"==s.call(t)?a(t):n(o(t))}},function(t,e){},function(t,e,i){i(62)("asyncIterator")},function(t,e,i){i(62)("observable")},function(t,e,i){(function(t){!function(e,i){t.exports=i()}(0,function(){function e(){return Co.apply(null,arguments)}function i(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function o(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function n(t){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(t).length;var e;for(e in t)if(t.hasOwnProperty(e))return!1;return!0}function s(t){return void 0===t}function r(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function a(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function h(t,e){var i,o=[];for(i=0;i<t.length;++i)o.push(e(t[i],i));return o}function d(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function l(t,e){for(var i in e)d(e,i)&&(t[i]=e[i]);return d(e,"toString")&&(t.toString=e.toString),d(e,"valueOf")&&(t.valueOf=e.valueOf),t}function u(t,e,i,o){return Se(t,e,i,o,!0).utc()}function c(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function p(t){return null==t._pf&&(t._pf=c()),t._pf}function f(t){if(null==t._isValid){var e=p(t),i=Oo.call(e.parsedDateParts,function(t){return null!=t}),o=!isNaN(t._d.getTime())&&e.overflow<0&&!e.empty&&!e.invalidMonth&&!e.invalidWeekday&&!e.weekdayMismatch&&!e.nullInput&&!e.invalidFormat&&!e.userInvalidated&&(!e.meridiem||e.meridiem&&i);if(t._strict&&(o=o&&0===e.charsLeftOver&&0===e.unusedTokens.length&&void 0===e.bigHour),null!=Object.isFrozen&&Object.isFrozen(t))return o;t._isValid=o}return t._isValid}function m(t){var e=u(NaN);return null!=t?l(p(e),t):p(e).userInvalidated=!0,e}function v(t,e){var i,o,n;if(s(e._isAMomentObject)||(t._isAMomentObject=e._isAMomentObject),s(e._i)||(t._i=e._i),s(e._f)||(t._f=e._f),s(e._l)||(t._l=e._l),s(e._strict)||(t._strict=e._strict),s(e._tzm)||(t._tzm=e._tzm),s(e._isUTC)||(t._isUTC=e._isUTC),s(e._offset)||(t._offset=e._offset),s(e._pf)||(t._pf=p(e)),s(e._locale)||(t._locale=e._locale),Eo.length>0)for(i=0;i<Eo.length;i++)o=Eo[i],n=e[o],s(n)||(t[o]=n);return t}function g(t){v(this,t),this._d=new Date(null!=t._d?t._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===To&&(To=!0,e.updateOffset(this),To=!1)}function y(t){return t instanceof g||null!=t&&null!=t._isAMomentObject}function b(t){return t<0?Math.ceil(t)||0:Math.floor(t)}function _(t){var e=+t,i=0;return 0!==e&&isFinite(e)&&(i=b(e)),i}function w(t,e,i){var o,n=Math.min(t.length,e.length),s=Math.abs(t.length-e.length),r=0;for(o=0;o<n;o++)(i&&t[o]!==e[o]||!i&&_(t[o])!==_(e[o]))&&r++;return r+s}function x(t){!1===e.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function k(t,i){var o=!0;return l(function(){if(null!=e.deprecationHandler&&e.deprecationHandler(null,t),o){for(var n,s=[],r=0;r<arguments.length;r++){if(n="","object"==typeof arguments[r]){n+="\n["+r+"] "
+;for(var a in arguments[0])n+=a+": "+arguments[0][a]+", ";n=n.slice(0,-2)}else n=arguments[r];s.push(n)}x(t+"\nArguments: "+Array.prototype.slice.call(s).join("")+"\n"+(new Error).stack),o=!1}return i.apply(this,arguments)},i)}function S(t,i){null!=e.deprecationHandler&&e.deprecationHandler(t,i),Po[t]||(x(i),Po[t]=!0)}function D(t){return t instanceof Function||"[object Function]"===Object.prototype.toString.call(t)}function M(t){var e,i;for(i in t)e=t[i],D(e)?this[i]=e:this["_"+i]=e;this._config=t,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function C(t,e){var i,n=l({},t);for(i in e)d(e,i)&&(o(t[i])&&o(e[i])?(n[i]={},l(n[i],t[i]),l(n[i],e[i])):null!=e[i]?n[i]=e[i]:delete n[i]);for(i in t)d(t,i)&&!d(e,i)&&o(t[i])&&(n[i]=l({},n[i]));return n}function O(t){null!=t&&this.set(t)}function E(t,e,i){var o=this._calendar[t]||this._calendar.sameElse;return D(o)?o.call(e,i):o}function T(t){var e=this._longDateFormat[t],i=this._longDateFormat[t.toUpperCase()];return e||!i?e:(this._longDateFormat[t]=i.replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t])}function P(){return this._invalidDate}function I(t){return this._ordinal.replace("%d",t)}function N(t,e,i,o){var n=this._relativeTime[i];return D(n)?n(t,e,i,o):n.replace(/%d/i,t)}function R(t,e){var i=this._relativeTime[t>0?"future":"past"];return D(i)?i(e):i.replace(/%s/i,e)}function A(t,e){var i=t.toLowerCase();Lo[i]=Lo[i+"s"]=Lo[e]=t}function z(t){return"string"==typeof t?Lo[t]||Lo[t.toLowerCase()]:void 0}function L(t){var e,i,o={};for(i in t)d(t,i)&&(e=z(i))&&(o[e]=t[i]);return o}function F(t,e){Fo[t]=e}function B(t){var e=[];for(var i in t)e.push({unit:i,priority:Fo[i]});return e.sort(function(t,e){return t.priority-e.priority}),e}function j(t,e,i){var o=""+Math.abs(t),n=e-o.length;return(t>=0?i?"+":"":"-")+Math.pow(10,Math.max(0,n)).toString().substr(1)+o}function H(t,e,i,o){var n=o;"string"==typeof o&&(n=function(){return this[o]()}),t&&(Wo[t]=n),e&&(Wo[e[0]]=function(){return j(n.apply(this,arguments),e[1],e[2])}),i&&(Wo[i]=function(){return this.localeData().ordinal(n.apply(this,arguments),t)})}function W(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function Y(t){var e,i,o=t.match(Bo);for(e=0,i=o.length;e<i;e++)Wo[o[e]]?o[e]=Wo[o[e]]:o[e]=W(o[e]);return function(e){var n,s="";for(n=0;n<i;n++)s+=D(o[n])?o[n].call(e,t):o[n];return s}}function G(t,e){return t.isValid()?(e=V(e,t.localeData()),Ho[e]=Ho[e]||Y(e),Ho[e](t)):t.localeData().invalidDate()}function V(t,e){function i(t){return e.longDateFormat(t)||t}var o=5;for(jo.lastIndex=0;o>=0&&jo.test(t);)t=t.replace(jo,i),jo.lastIndex=0,o-=1;return t}function U(t,e,i){an[t]=D(e)?e:function(t,o){return t&&i?i:e}}function q(t,e){return d(an,t)?an[t](e._strict,e._locale):new RegExp(X(t))}function X(t){return Z(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,i,o,n){return e||i||o||n}))}function Z(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function K(t,e){var i,o=e;for("string"==typeof t&&(t=[t]),r(e)&&(o=function(t,i){i[e]=_(t)}),i=0;i<t.length;i++)hn[t[i]]=o}function J(t,e){K(t,function(t,i,o,n){o._w=o._w||{},e(t,o._w,o,n)})}function $(t,e,i){null!=e&&d(hn,t)&&hn[t](e,i._a,i,t)}function Q(t){return tt(t)?366:365}function tt(t){return t%4==0&&t%100!=0||t%400==0}function et(){return tt(this.year())}function it(t,i){return function(o){return null!=o?(nt(this,t,o),e.updateOffset(this,i),this):ot(this,t)}}function ot(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}function nt(t,e,i){t.isValid()&&!isNaN(i)&&("FullYear"===e&&tt(t.year())?t._d["set"+(t._isUTC?"UTC":"")+e](i,t.month(),ht(i,t.month())):t._d["set"+(t._isUTC?"UTC":"")+e](i))}function st(t){return t=z(t),D(this[t])?this[t]():this}function rt(t,e){if("object"==typeof t){t=L(t);for(var i=B(t),o=0;o<i.length;o++)this[i[o].unit](t[i[o].unit])}else if(t=z(t),D(this[t]))return this[t](e);return this}function at(t,e){return(t%e+e)%e}function ht(t,e){if(isNaN(t)||isNaN(e))return NaN;var i=at(e,12);return t+=(e-i)/12,1===i?tt(t)?29:28:31-i%7%2}function dt(t,e){return t?i(this._months)?this._months[t.month()]:this._months[(this._months.isFormat||_n).test(e)?"format":"standalone"][t.month()]:i(this._months)?this._months:this._months.standalone}function lt(t,e){return t?i(this._monthsShort)?this._monthsShort[t.month()]:this._monthsShort[_n.test(e)?"format":"standalone"][t.month()]:i(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function ut(t,e,i){var o,n,s,r=t.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],o=0;o<12;++o)s=u([2e3,o]),this._shortMonthsParse[o]=this.monthsShort(s,"").toLocaleLowerCase(),this._longMonthsParse[o]=this.months(s,"").toLocaleLowerCase();return i?"MMM"===e?(n=yn.call(this._shortMonthsParse,r),-1!==n?n:null):(n=yn.call(this._longMonthsParse,r),-1!==n?n:null):"MMM"===e?-1!==(n=yn.call(this._shortMonthsParse,r))?n:(n=yn.call(this._longMonthsParse,r),-1!==n?n:null):-1!==(n=yn.call(this._longMonthsParse,r))?n:(n=yn.call(this._shortMonthsParse,r),-1!==n?n:null)}function ct(t,e,i){var o,n,s;if(this._monthsParseExact)return ut.call(this,t,e,i);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),o=0;o<12;o++){if(n=u([2e3,o]),i&&!this._longMonthsParse[o]&&(this._longMonthsParse[o]=new RegExp("^"+this.months(n,"").replace(".","")+"$","i"),this._shortMonthsParse[o]=new RegExp("^"+this.monthsShort(n,"").replace(".","")+"$","i")),i||this._monthsParse[o]||(s="^"+this.months(n,"")+"|^"+this.monthsShort(n,""),this._monthsParse[o]=new RegExp(s.replace(".",""),"i")),i&&"MMMM"===e&&this._longMonthsParse[o].test(t))return o;if(i&&"MMM"===e&&this._shortMonthsParse[o].test(t))return o;if(!i&&this._monthsParse[o].test(t))return o}}function pt(t,e){var i;if(!t.isValid())return t;if("string"==typeof e)if(/^\d+$/.test(e))e=_(e);else if(e=t.localeData().monthsParse(e),!r(e))return t;return i=Math.min(t.date(),ht(t.year(),e)),t._d["set"+(t._isUTC?"UTC":"")+"Month"](e,i),t}function ft(t){return null!=t?(pt(this,t),e.updateOffset(this,!0),this):ot(this,"Month")}function mt(){return ht(this.year(),this.month())}function vt(t){return this._monthsParseExact?(d(this,"_monthsRegex")||yt.call(this),t?this._monthsShortStrictRegex:this._monthsShortRegex):(d(this,"_monthsShortRegex")||(this._monthsShortRegex=kn),this._monthsShortStrictRegex&&t?this._monthsShortStrictRegex:this._monthsShortRegex)}function gt(t){return this._monthsParseExact?(d(this,"_monthsRegex")||yt.call(this),t?this._monthsStrictRegex:this._monthsRegex):(d(this,"_monthsRegex")||(this._monthsRegex=Sn),this._monthsStrictRegex&&t?this._monthsStrictRegex:this._monthsRegex)}function yt(){function t(t,e){return e.length-t.length}var e,i,o=[],n=[],s=[];for(e=0;e<12;e++)i=u([2e3,e]),o.push(this.monthsShort(i,"")),n.push(this.months(i,"")),s.push(this.months(i,"")),s.push(this.monthsShort(i,""));for(o.sort(t),n.sort(t),s.sort(t),e=0;e<12;e++)o[e]=Z(o[e]),n[e]=Z(n[e]);for(e=0;e<24;e++)s[e]=Z(s[e]);this._monthsRegex=new RegExp("^("+s.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+n.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+o.join("|")+")","i")}function bt(t,e,i,o,n,s,r){var a=new Date(t,e,i,o,n,s,r);return t<100&&t>=0&&isFinite(a.getFullYear())&&a.setFullYear(t),a}function _t(t){var e=new Date(Date.UTC.apply(null,arguments));return t<100&&t>=0&&isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t),e}function wt(t,e,i){var o=7+e-i;return-(7+_t(t,0,o).getUTCDay()-e)%7+o-1}function xt(t,e,i,o,n){var s,r,a=(7+i-o)%7,h=wt(t,o,n),d=1+7*(e-1)+a+h;return d<=0?(s=t-1,r=Q(s)+d):d>Q(t)?(s=t+1,r=d-Q(t)):(s=t,r=d),{year:s,dayOfYear:r}}function kt(t,e,i){var o,n,s=wt(t.year(),e,i),r=Math.floor((t.dayOfYear()-s-1)/7)+1;return r<1?(n=t.year()-1,o=r+St(n,e,i)):r>St(t.year(),e,i)?(o=r-St(t.year(),e,i),n=t.year()+1):(n=t.year(),o=r),{week:o,year:n}}function St(t,e,i){var o=wt(t,e,i),n=wt(t+1,e,i);return(Q(t)-o+n)/7}function Dt(t){return kt(t,this._week.dow,this._week.doy).week}function Mt(){return this._week.dow}function Ct(){return this._week.doy}function Ot(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")}function Et(t){var e=kt(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")}function Tt(t,e){return"string"!=typeof t?t:isNaN(t)?(t=e.weekdaysParse(t),"number"==typeof t?t:null):parseInt(t,10)}function Pt(t,e){return"string"==typeof t?e.weekdaysParse(t)%7||7:isNaN(t)?null:t}function It(t,e){return t?i(this._weekdays)?this._weekdays[t.day()]:this._weekdays[this._weekdays.isFormat.test(e)?"format":"standalone"][t.day()]:i(this._weekdays)?this._weekdays:this._weekdays.standalone}function Nt(t){return t?this._weekdaysShort[t.day()]:this._weekdaysShort}function Rt(t){return t?this._weekdaysMin[t.day()]:this._weekdaysMin}function At(t,e,i){var o,n,s,r=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],o=0;o<7;++o)s=u([2e3,1]).day(o),this._minWeekdaysParse[o]=this.weekdaysMin(s,"").toLocaleLowerCase(),this._shortWeekdaysParse[o]=this.weekdaysShort(s,"").toLocaleLowerCase(),this._weekdaysParse[o]=this.weekdays(s,"").toLocaleLowerCase();return i?"dddd"===e?(n=yn.call(this._weekdaysParse,r),-1!==n?n:null):"ddd"===e?(n=yn.call(this._shortWeekdaysParse,r),-1!==n?n:null):(n=yn.call(this._minWeekdaysParse,r),-1!==n?n:null):"dddd"===e?-1!==(n=yn.call(this._weekdaysParse,r))?n:-1!==(n=yn.call(this._shortWeekdaysParse,r))?n:(n=yn.call(this._minWeekdaysParse,r),-1!==n?n:null):"ddd"===e?-1!==(n=yn.call(this._shortWeekdaysParse,r))?n:-1!==(n=yn.call(this._weekdaysParse,r))?n:(n=yn.call(this._minWeekdaysParse,r),-1!==n?n:null):-1!==(n=yn.call(this._minWeekdaysParse,r))?n:-1!==(n=yn.call(this._weekdaysParse,r))?n:(n=yn.call(this._shortWeekdaysParse,r),-1!==n?n:null)}function zt(t,e,i){var o,n,s;if(this._weekdaysParseExact)return At.call(this,t,e,i);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),o=0;o<7;o++){if(n=u([2e3,1]).day(o),i&&!this._fullWeekdaysParse[o]&&(this._fullWeekdaysParse[o]=new RegExp("^"+this.weekdays(n,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[o]=new RegExp("^"+this.weekdaysShort(n,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[o]=new RegExp("^"+this.weekdaysMin(n,"").replace(".",".?")+"$","i")),this._weekdaysParse[o]||(s="^"+this.weekdays(n,"")+"|^"+this.weekdaysShort(n,"")+"|^"+this.weekdaysMin(n,""),this._weekdaysParse[o]=new RegExp(s.replace(".",""),"i")),i&&"dddd"===e&&this._fullWeekdaysParse[o].test(t))return o;if(i&&"ddd"===e&&this._shortWeekdaysParse[o].test(t))return o;if(i&&"dd"===e&&this._minWeekdaysParse[o].test(t))return o;if(!i&&this._weekdaysParse[o].test(t))return o}}function Lt(t){if(!this.isValid())return null!=t?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=Tt(t,this.localeData()),this.add(t-e,"d")):e}function Ft(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")}function Bt(t){if(!this.isValid())return null!=t?this:NaN;if(null!=t){var e=Pt(t,this.localeData());return this.day(this.day()%7?e:e-7)}return this.day()||7}function jt(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||Yt.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):(d(this,"_weekdaysRegex")||(this._weekdaysRegex=En),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)}function Ht(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||Yt.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(d(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Tn),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Wt(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||Yt.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(d(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Pn),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Yt(){function t(t,e){return e.length-t.length}var e,i,o,n,s,r=[],a=[],h=[],d=[];for(e=0;e<7;e++)i=u([2e3,1]).day(e),o=this.weekdaysMin(i,""),n=this.weekdaysShort(i,""),s=this.weekdays(i,""),r.push(o),a.push(n),h.push(s),d.push(o),d.push(n),d.push(s);for(r.sort(t),a.sort(t),h.sort(t),d.sort(t),e=0;e<7;e++)a[e]=Z(a[e]),h[e]=Z(h[e]),d[e]=Z(d[e]);this._weekdaysRegex=new RegExp("^("+d.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+h.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+r.join("|")+")","i")}function Gt(){return this.hours()%12||12}function Vt(){return this.hours()||24}function Ut(t,e){H(t,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)})}function qt(t,e){return e._meridiemParse}function Xt(t){return"p"===(t+"").toLowerCase().charAt(0)}function Zt(t,e,i){return t>11?i?"pm":"PM":i?"am":"AM"}function Kt(t){return t?t.toLowerCase().replace("_","-"):t}function Jt(t){for(var e,i,o,n,s=0;s<t.length;){for(n=Kt(t[s]).split("-"),e=n.length,i=Kt(t[s+1]),i=i?i.split("-"):null;e>0;){if(o=$t(n.slice(0,e).join("-")))return o;if(i&&i.length>=e&&w(n,i,!0)>=e-1)break;e--}s++}return null}function $t(e){var i=null;if(!zn[e]&&void 0!==t&&t&&t.exports)try{i=In._abbr;!function(){var t=new Error('Cannot find module "./locale"');throw t.code="MODULE_NOT_FOUND",t}(),Qt(i)}catch(t){}return zn[e]}function Qt(t,e){var i;return t&&(i=s(e)?ie(t):te(t,e))&&(In=i),In._abbr}function te(t,e){if(null!==e){var i=An;if(e.abbr=t,null!=zn[t])S("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),i=zn[t]._config;else if(null!=e.parentLocale){if(null==zn[e.parentLocale])return Ln[e.parentLocale]||(Ln[e.parentLocale]=[]),Ln[e.parentLocale].push({name:t,config:e}),null;i=zn[e.parentLocale]._config}return zn[t]=new O(C(i,e)),Ln[t]&&Ln[t].forEach(function(t){te(t.name,t.config)}),Qt(t),zn[t]}return delete zn[t],null}function ee(t,e){if(null!=e){var i,o=An;null!=zn[t]&&(o=zn[t]._config),e=C(o,e),i=new O(e),i.parentLocale=zn[t],zn[t]=i,Qt(t)}else null!=zn[t]&&(null!=zn[t].parentLocale?zn[t]=zn[t].parentLocale:null!=zn[t]&&delete zn[t]);return zn[t]}function ie(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return In;if(!i(t)){if(e=$t(t))return e;t=[t]}return Jt(t)}function oe(){return Io(zn)}function ne(t){var e,i=t._a;return i&&-2===p(t).overflow&&(e=i[ln]<0||i[ln]>11?ln:i[un]<1||i[un]>ht(i[dn],i[ln])?un:i[cn]<0||i[cn]>24||24===i[cn]&&(0!==i[pn]||0!==i[fn]||0!==i[mn])?cn:i[pn]<0||i[pn]>59?pn:i[fn]<0||i[fn]>59?fn:i[mn]<0||i[mn]>999?mn:-1,p(t)._overflowDayOfYear&&(e<dn||e>un)&&(e=un),p(t)._overflowWeeks&&-1===e&&(e=vn),p(t)._overflowWeekday&&-1===e&&(e=gn),p(t).overflow=e),t}function se(t,e,i){return null!=t?t:null!=e?e:i}function re(t){var i=new Date(e.now());return t._useUTC?[i.getUTCFullYear(),i.getUTCMonth(),i.getUTCDate()]:[i.getFullYear(),i.getMonth(),i.getDate()]}function ae(t){var e,i,o,n,s=[];if(!t._d){for(o=re(t),t._w&&null==t._a[un]&&null==t._a[ln]&&he(t),null!=t._dayOfYear&&(n=se(t._a[dn],o[dn]),(t._dayOfYear>Q(n)||0===t._dayOfYear)&&(p(t)._overflowDayOfYear=!0),i=_t(n,0,t._dayOfYear),t._a[ln]=i.getUTCMonth(),t._a[un]=i.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=s[e]=o[e];for(;e<7;e++)t._a[e]=s[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[cn]&&0===t._a[pn]&&0===t._a[fn]&&0===t._a[mn]&&(t._nextDay=!0,t._a[cn]=0),t._d=(t._useUTC?_t:bt).apply(null,s),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[cn]=24),t._w&&void 0!==t._w.d&&t._w.d!==t._d.getDay()&&(p(t).weekdayMismatch=!0)}}function he(t){var e,i,o,n,s,r,a,h;if(e=t._w,null!=e.GG||null!=e.W||null!=e.E)s=1,r=4,i=se(e.GG,t._a[dn],kt(De(),1,4).year),o=se(e.W,1),((n=se(e.E,1))<1||n>7)&&(h=!0);else{s=t._locale._week.dow,r=t._locale._week.doy;var d=kt(De(),s,r);i=se(e.gg,t._a[dn],d.year),o=se(e.w,d.week),null!=e.d?((n=e.d)<0||n>6)&&(h=!0):null!=e.e?(n=e.e+s,(e.e<0||e.e>6)&&(h=!0)):n=s}o<1||o>St(i,s,r)?p(t)._overflowWeeks=!0:null!=h?p(t)._overflowWeekday=!0:(a=xt(i,o,n,s,r),t._a[dn]=a.year,t._dayOfYear=a.dayOfYear)}function de(t){var e,i,o,n,s,r,a=t._i,h=Fn.exec(a)||Bn.exec(a);if(h){for(p(t).iso=!0,e=0,i=Hn.length;e<i;e++)if(Hn[e][1].exec(h[1])){n=Hn[e][0],o=!1!==Hn[e][2];break}if(null==n)return void(t._isValid=!1);if(h[3]){for(e=0,i=Wn.length;e<i;e++)if(Wn[e][1].exec(h[3])){s=(h[2]||" ")+Wn[e][0];break}if(null==s)return void(t._isValid=!1)}if(!o&&null!=s)return void(t._isValid=!1);if(h[4]){if(!jn.exec(h[4]))return void(t._isValid=!1);r="Z"}t._f=n+(s||"")+(r||""),ge(t)}else t._isValid=!1}function le(t,e,i,o,n,s){var r=[ue(t),xn.indexOf(e),parseInt(i,10),parseInt(o,10),parseInt(n,10)];return s&&r.push(parseInt(s,10)),r}function ue(t){var e=parseInt(t,10);return e<=49?2e3+e:e<=999?1900+e:e}function ce(t){return t.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").trim()}function pe(t,e,i){if(t){if(Cn.indexOf(t)!==new Date(e[0],e[1],e[2]).getDay())return p(i).weekdayMismatch=!0,i._isValid=!1,!1}return!0}function fe(t,e,i){if(t)return Vn[t];if(e)return 0;var o=parseInt(i,10),n=o%100;return(o-n)/100*60+n}function me(t){var e=Gn.exec(ce(t._i));if(e){var i=le(e[4],e[3],e[2],e[5],e[6],e[7]);if(!pe(e[1],i,t))return;t._a=i,t._tzm=fe(e[8],e[9],e[10]),t._d=_t.apply(null,t._a),t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),p(t).rfc2822=!0}else t._isValid=!1}function ve(t){var i=Yn.exec(t._i);if(null!==i)return void(t._d=new Date(+i[1]));de(t),!1===t._isValid&&(delete t._isValid,me(t),!1===t._isValid&&(delete t._isValid,e.createFromInputFallback(t)))}function ge(t){if(t._f===e.ISO_8601)return void de(t);if(t._f===e.RFC_2822)return void me(t);t._a=[],p(t).empty=!0;var i,o,n,s,r,a=""+t._i,h=a.length,d=0;for(n=V(t._f,t._locale).match(Bo)||[],i=0;i<n.length;i++)s=n[i],o=(a.match(q(s,t))||[])[0],o&&(r=a.substr(0,a.indexOf(o)),r.length>0&&p(t).unusedInput.push(r),a=a.slice(a.indexOf(o)+o.length),d+=o.length),Wo[s]?(o?p(t).empty=!1:p(t).unusedTokens.push(s),$(s,o,t)):t._strict&&!o&&p(t).unusedTokens.push(s);p(t).charsLeftOver=h-d,a.length>0&&p(t).unusedInput.push(a),t._a[cn]<=12&&!0===p(t).bigHour&&t._a[cn]>0&&(p(t).bigHour=void 0),p(t).parsedDateParts=t._a.slice(0),p(t).meridiem=t._meridiem,t._a[cn]=ye(t._locale,t._a[cn],t._meridiem),ae(t),ne(t)}function ye(t,e,i){var o;return null==i?e:null!=t.meridiemHour?t.meridiemHour(e,i):null!=t.isPM?(o=t.isPM(i),o&&e<12&&(e+=12),o||12!==e||(e=0),e):e}function be(t){var e,i,o,n,s;if(0===t._f.length)return p(t).invalidFormat=!0,void(t._d=new Date(NaN));for(n=0;n<t._f.length;n++)s=0,e=v({},t),null!=t._useUTC&&(e._useUTC=t._useUTC),e._f=t._f[n],ge(e),f(e)&&(s+=p(e).charsLeftOver,s+=10*p(e).unusedTokens.length,p(e).score=s,(null==o||s<o)&&(o=s,i=e));l(t,i||e)}function _e(t){if(!t._d){var e=L(t._i);t._a=h([e.year,e.month,e.day||e.date,e.hour,e.minute,e.second,e.millisecond],function(t){return t&&parseInt(t,10)}),ae(t)}}function we(t){var e=new g(ne(xe(t)));return e._nextDay&&(e.add(1,"d"),e._nextDay=void 0),e}function xe(t){var e=t._i,o=t._f;return t._locale=t._locale||ie(t._l),null===e||void 0===o&&""===e?m({nullInput:!0}):("string"==typeof e&&(t._i=e=t._locale.preparse(e)),y(e)?new g(ne(e)):(a(e)?t._d=e:i(o)?be(t):o?ge(t):ke(t),f(t)||(t._d=null),t))}function ke(t){var n=t._i;s(n)?t._d=new Date(e.now()):a(n)?t._d=new Date(n.valueOf()):"string"==typeof n?ve(t):i(n)?(t._a=h(n.slice(0),function(t){return parseInt(t,10)}),ae(t)):o(n)?_e(t):r(n)?t._d=new Date(n):e.createFromInputFallback(t)}function Se(t,e,s,r,a){var h={};return!0!==s&&!1!==s||(r=s,s=void 0),(o(t)&&n(t)||i(t)&&0===t.length)&&(t=void 0),h._isAMomentObject=!0,h._useUTC=h._isUTC=a,h._l=s,h._i=t,h._f=e,h._strict=r,we(h)}function De(t,e,i,o){return Se(t,e,i,o,!1)}function Me(t,e){var o,n;if(1===e.length&&i(e[0])&&(e=e[0]),!e.length)return De();for(o=e[0],n=1;n<e.length;++n)e[n].isValid()&&!e[n][t](o)||(o=e[n]);return o}function Ce(){return Me("isBefore",[].slice.call(arguments,0))}function Oe(){return Me("isAfter",[].slice.call(arguments,0))}function Ee(t){for(var e in t)if(-1===yn.call(Zn,e)||null!=t[e]&&isNaN(t[e]))return!1;for(var i=!1,o=0;o<Zn.length;++o)if(t[Zn[o]]){if(i)return!1;parseFloat(t[Zn[o]])!==_(t[Zn[o]])&&(i=!0)}return!0}function Te(){return this._isValid}function Pe(){return Ke(NaN)}function Ie(t){var e=L(t),i=e.year||0,o=e.quarter||0,n=e.month||0,s=e.week||0,r=e.day||0,a=e.hour||0,h=e.minute||0,d=e.second||0,l=e.millisecond||0;this._isValid=Ee(e),this._milliseconds=+l+1e3*d+6e4*h+1e3*a*60*60,this._days=+r+7*s,this._months=+n+3*o+12*i,this._data={},this._locale=ie(),this._bubble()}function Ne(t){return t instanceof Ie}function Re(t){return t<0?-1*Math.round(-1*t):Math.round(t)}function Ae(t,e){H(t,0,0,function(){var t=this.utcOffset(),i="+";return t<0&&(t=-t,i="-"),i+j(~~(t/60),2)+e+j(~~t%60,2)})}function ze(t,e){var i=(e||"").match(t);if(null===i)return null;var o=i[i.length-1]||[],n=(o+"").match(Kn)||["-",0,0],s=60*n[1]+_(n[2]);return 0===s?0:"+"===n[0]?s:-s}function Le(t,i){var o,n;return i._isUTC?(o=i.clone(),n=(y(t)||a(t)?t.valueOf():De(t).valueOf())-o.valueOf(),o._d.setTime(o._d.valueOf()+n),e.updateOffset(o,!1),o):De(t).local()}function Fe(t){return 15*-Math.round(t._d.getTimezoneOffset()/15)}function Be(t,i,o){var n,s=this._offset||0;if(!this.isValid())return null!=t?this:NaN;if(null!=t){if("string"==typeof t){if(null===(t=ze(nn,t)))return this}else Math.abs(t)<16&&!o&&(t*=60);return!this._isUTC&&i&&(n=Fe(this)),this._offset=t,this._isUTC=!0,null!=n&&this.add(n,"m"),s!==t&&(!i||this._changeInProgress?ei(this,Ke(t-s,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,e.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?s:Fe(this)}function je(t,e){return null!=t?("string"!=typeof t&&(t=-t),this.utcOffset(t,e),this):-this.utcOffset()}function He(t){return this.utcOffset(0,t)}function We(t){return this._isUTC&&(this.utcOffset(0,t),this._isUTC=!1,t&&this.subtract(Fe(this),"m")),this}function Ye(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var t=ze(on,this._i);null!=t?this.utcOffset(t):this.utcOffset(0,!0)}return this}function Ge(t){return!!this.isValid()&&(t=t?De(t).utcOffset():0,(this.utcOffset()-t)%60==0)}function Ve(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Ue(){if(!s(this._isDSTShifted))return this._isDSTShifted;var t={};if(v(t,this),t=xe(t),t._a){var e=t._isUTC?u(t._a):De(t._a);this._isDSTShifted=this.isValid()&&w(t._a,e.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function qe(){return!!this.isValid()&&!this._isUTC}function Xe(){return!!this.isValid()&&this._isUTC}function Ze(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Ke(t,e){var i,o,n,s=t,a=null;return Ne(t)?s={ms:t._milliseconds,d:t._days,M:t._months}:r(t)?(s={},e?s[e]=t:s.milliseconds=t):(a=Jn.exec(t))?(i="-"===a[1]?-1:1,s={y:0,d:_(a[un])*i,h:_(a[cn])*i,m:_(a[pn])*i,s:_(a[fn])*i,ms:_(Re(1e3*a[mn]))*i}):(a=$n.exec(t))?(i="-"===a[1]?-1:(a[1],1),s={y:Je(a[2],i),M:Je(a[3],i),w:Je(a[4],i),d:Je(a[5],i),h:Je(a[6],i),m:Je(a[7],i),s:Je(a[8],i)}):null==s?s={}:"object"==typeof s&&("from"in s||"to"in s)&&(n=Qe(De(s.from),De(s.to)),s={},s.ms=n.milliseconds,s.M=n.months),o=new Ie(s),Ne(t)&&d(t,"_locale")&&(o._locale=t._locale),o}function Je(t,e){var i=t&&parseFloat(t.replace(",","."));return(isNaN(i)?0:i)*e}function $e(t,e){var i={milliseconds:0,months:0};return i.months=e.month()-t.month()+12*(e.year()-t.year()),t.clone().add(i.months,"M").isAfter(e)&&--i.months,i.milliseconds=+e-+t.clone().add(i.months,"M"),i}function Qe(t,e){var i;return t.isValid()&&e.isValid()?(e=Le(e,t),t.isBefore(e)?i=$e(t,e):(i=$e(e,t),i.milliseconds=-i.milliseconds,i.months=-i.months),i):{milliseconds:0,months:0}}function ti(t,e){return function(i,o){var n,s;return null===o||isNaN(+o)||(S(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),s=i,i=o,o=s),i="string"==typeof i?+i:i,n=Ke(i,o),ei(this,n,t),this}}function ei(t,i,o,n){var s=i._milliseconds,r=Re(i._days),a=Re(i._months);t.isValid()&&(n=null==n||n,a&&pt(t,ot(t,"Month")+a*o),r&&nt(t,"Date",ot(t,"Date")+r*o),s&&t._d.setTime(t._d.valueOf()+s*o),n&&e.updateOffset(t,r||a))}function ii(t,e){var i=t.diff(e,"days",!0);return i<-6?"sameElse":i<-1?"lastWeek":i<0?"lastDay":i<1?"sameDay":i<2?"nextDay":i<7?"nextWeek":"sameElse"}function oi(t,i){var o=t||De(),n=Le(o,this).startOf("day"),s=e.calendarFormat(this,n)||"sameElse",r=i&&(D(i[s])?i[s].call(this,o):i[s]);return this.format(r||this.localeData().calendar(s,this,De(o)))}function ni(){return new g(this)}function si(t,e){var i=y(t)?t:De(t);return!(!this.isValid()||!i.isValid())&&(e=z(s(e)?"millisecond":e),"millisecond"===e?this.valueOf()>i.valueOf():i.valueOf()<this.clone().startOf(e).valueOf())}function ri(t,e){var i=y(t)?t:De(t);return!(!this.isValid()||!i.isValid())&&(e=z(s(e)?"millisecond":e),"millisecond"===e?this.valueOf()<i.valueOf():this.clone().endOf(e).valueOf()<i.valueOf())}function ai(t,e,i,o){return o=o||"()",("("===o[0]?this.isAfter(t,i):!this.isBefore(t,i))&&(")"===o[1]?this.isBefore(e,i):!this.isAfter(e,i))}function hi(t,e){var i,o=y(t)?t:De(t);return!(!this.isValid()||!o.isValid())&&(e=z(e||"millisecond"),"millisecond"===e?this.valueOf()===o.valueOf():(i=o.valueOf(),this.clone().startOf(e).valueOf()<=i&&i<=this.clone().endOf(e).valueOf()))}function di(t,e){return this.isSame(t,e)||this.isAfter(t,e)}function li(t,e){return this.isSame(t,e)||this.isBefore(t,e)}function ui(t,e,i){var o,n,s;if(!this.isValid())return NaN;if(o=Le(t,this),!o.isValid())return NaN;switch(n=6e4*(o.utcOffset()-this.utcOffset()),e=z(e)){case"year":s=ci(this,o)/12;break;case"month":s=ci(this,o);break;case"quarter":s=ci(this,o)/3;break;case"second":s=(this-o)/1e3;break;case"minute":s=(this-o)/6e4;break;case"hour":s=(this-o)/36e5;break;case"day":s=(this-o-n)/864e5;break;case"week":s=(this-o-n)/6048e5;break;default:s=this-o}return i?s:b(s)}function ci(t,e){var i,o,n=12*(e.year()-t.year())+(e.month()-t.month()),s=t.clone().add(n,"months");return e-s<0?(i=t.clone().add(n-1,"months"),o=(e-s)/(s-i)):(i=t.clone().add(n+1,"months"),o=(e-s)/(i-s)),-(n+o)||0}function pi(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function fi(){if(!this.isValid())return null;var t=this.clone().utc();return t.year()<0||t.year()>9999?G(t,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):D(Date.prototype.toISOString)?this.toDate().toISOString():G(t,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")}function mi(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var t="moment",e="";this.isLocal()||(t=0===this.utcOffset()?"moment.utc":"moment.parseZone",e="Z");var i="["+t+'("]',o=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",n=e+'[")]';return this.format(i+o+"-MM-DD[T]HH:mm:ss.SSS"+n)}function vi(t){t||(t=this.isUtc()?e.defaultFormatUtc:e.defaultFormat);var i=G(this,t);return this.localeData().postformat(i)}function gi(t,e){return this.isValid()&&(y(t)&&t.isValid()||De(t).isValid())?Ke({to:this,from:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function yi(t){return this.from(De(),t)}function bi(t,e){return this.isValid()&&(y(t)&&t.isValid()||De(t).isValid())?Ke({from:this,to:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function _i(t){return this.to(De(),t)}function wi(t){var e;return void 0===t?this._locale._abbr:(e=ie(t),null!=e&&(this._locale=e),this)}function xi(){return this._locale}function ki(t){switch(t=z(t)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===t&&this.weekday(0),"isoWeek"===t&&this.isoWeekday(1),"quarter"===t&&this.month(3*Math.floor(this.month()/3)),this}function Si(t){return void 0===(t=z(t))||"millisecond"===t?this:("date"===t&&(t="day"),this.startOf(t).add(1,"isoWeek"===t?"week":t).subtract(1,"ms"))}function Di(){return this._d.valueOf()-6e4*(this._offset||0)}function Mi(){return Math.floor(this.valueOf()/1e3)}function Ci(){return new Date(this.valueOf())}function Oi(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.minute(),t.second(),t.millisecond()]}function Ei(){var t=this;return{years:t.year(),months:t.month(),date:t.date(),hours:t.hours(),minutes:t.minutes(),seconds:t.seconds(),milliseconds:t.milliseconds()}}function Ti(){return this.isValid()?this.toISOString():null}function Pi(){return f(this)}function Ii(){return l({},p(this))}function Ni(){return p(this).overflow}function Ri(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Ai(t,e){H(0,[t,t.length],0,e)}function zi(t){return ji.call(this,t,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Li(t){return ji.call(this,t,this.isoWeek(),this.isoWeekday(),1,4)}function Fi(){return St(this.year(),1,4)}function Bi(){var t=this.localeData()._week;return St(this.year(),t.dow,t.doy)}function ji(t,e,i,o,n){var s;return null==t?kt(this,o,n).year:(s=St(t,o,n),e>s&&(e=s),Hi.call(this,t,e,i,o,n))}function Hi(t,e,i,o,n){var s=xt(t,e,i,o,n),r=_t(s.year,0,s.dayOfYear);return this.year(r.getUTCFullYear()),this.month(r.getUTCMonth()),this.date(r.getUTCDate()),this}function Wi(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)}function Yi(t){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")}function Gi(t,e){e[mn]=_(1e3*("0."+t))}function Vi(){return this._isUTC?"UTC":""}function Ui(){return this._isUTC?"Coordinated Universal Time":""}function qi(t){return De(1e3*t)}function Xi(){return De.apply(null,arguments).parseZone()}function Zi(t){return t}function Ki(t,e,i,o){var n=ie(),s=u().set(o,e);return n[i](s,t)}function Ji(t,e,i){if(r(t)&&(e=t,t=void 0),t=t||"",null!=e)return Ki(t,e,i,"month");var o,n=[];for(o=0;o<12;o++)n[o]=Ki(t,o,i,"month");return n}function $i(t,e,i,o){"boolean"==typeof t?(r(e)&&(i=e,e=void 0),e=e||""):(e=t,i=e,t=!1,r(e)&&(i=e,e=void 0),e=e||"");var n=ie(),s=t?n._week.dow:0;if(null!=i)return Ki(e,(i+s)%7,o,"day");var a,h=[];for(a=0;a<7;a++)h[a]=Ki(e,(a+s)%7,o,"day");return h}function Qi(t,e){return Ji(t,e,"months")}function to(t,e){return Ji(t,e,"monthsShort")}function eo(t,e,i){return $i(t,e,i,"weekdays")}function io(t,e,i){return $i(t,e,i,"weekdaysShort")}function oo(t,e,i){return $i(t,e,i,"weekdaysMin")}function no(){var t=this._data;return this._milliseconds=ds(this._milliseconds),this._days=ds(this._days),this._months=ds(this._months),t.milliseconds=ds(t.milliseconds),t.seconds=ds(t.seconds),t.minutes=ds(t.minutes),t.hours=ds(t.hours),t.months=ds(t.months),t.years=ds(t.years),this}function so(t,e,i,o){var n=Ke(e,i);return t._milliseconds+=o*n._milliseconds,t._days+=o*n._days,t._months+=o*n._months,t._bubble()}function ro(t,e){return so(this,t,e,1)}function ao(t,e){return so(this,t,e,-1)}function ho(t){return t<0?Math.floor(t):Math.ceil(t)}function lo(){var t,e,i,o,n,s=this._milliseconds,r=this._days,a=this._months,h=this._data;return s>=0&&r>=0&&a>=0||s<=0&&r<=0&&a<=0||(s+=864e5*ho(co(a)+r),r=0,a=0),h.milliseconds=s%1e3,t=b(s/1e3),h.seconds=t%60,e=b(t/60),h.minutes=e%60,i=b(e/60),h.hours=i%24,r+=b(i/24),n=b(uo(r)),a+=n,
+r-=ho(co(n)),o=b(a/12),a%=12,h.days=r,h.months=a,h.years=o,this}function uo(t){return 4800*t/146097}function co(t){return 146097*t/4800}function po(t){if(!this.isValid())return NaN;var e,i,o=this._milliseconds;if("month"===(t=z(t))||"year"===t)return e=this._days+o/864e5,i=this._months+uo(e),"month"===t?i:i/12;switch(e=this._days+Math.round(co(this._months)),t){case"week":return e/7+o/6048e5;case"day":return e+o/864e5;case"hour":return 24*e+o/36e5;case"minute":return 1440*e+o/6e4;case"second":return 86400*e+o/1e3;case"millisecond":return Math.floor(864e5*e)+o;default:throw new Error("Unknown unit "+t)}}function fo(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*_(this._months/12):NaN}function mo(t){return function(){return this.as(t)}}function vo(){return Ke(this)}function go(t){return t=z(t),this.isValid()?this[t+"s"]():NaN}function yo(t){return function(){return this.isValid()?this._data[t]:NaN}}function bo(){return b(this.days()/7)}function _o(t,e,i,o,n){return n.relativeTime(e||1,!!i,t,o)}function wo(t,e,i){var o=Ke(t).abs(),n=Ds(o.as("s")),s=Ds(o.as("m")),r=Ds(o.as("h")),a=Ds(o.as("d")),h=Ds(o.as("M")),d=Ds(o.as("y")),l=n<=Ms.ss&&["s",n]||n<Ms.s&&["ss",n]||s<=1&&["m"]||s<Ms.m&&["mm",s]||r<=1&&["h"]||r<Ms.h&&["hh",r]||a<=1&&["d"]||a<Ms.d&&["dd",a]||h<=1&&["M"]||h<Ms.M&&["MM",h]||d<=1&&["y"]||["yy",d];return l[2]=e,l[3]=+t>0,l[4]=i,_o.apply(null,l)}function xo(t){return void 0===t?Ds:"function"==typeof t&&(Ds=t,!0)}function ko(t,e){return void 0!==Ms[t]&&(void 0===e?Ms[t]:(Ms[t]=e,"s"===t&&(Ms.ss=e-1),!0))}function So(t){if(!this.isValid())return this.localeData().invalidDate();var e=this.localeData(),i=wo(this,!t,e);return t&&(i=e.pastFuture(+this,i)),e.postformat(i)}function Do(t){return(t>0)-(t<0)||+t}function Mo(){if(!this.isValid())return this.localeData().invalidDate();var t,e,i,o=Cs(this._milliseconds)/1e3,n=Cs(this._days),s=Cs(this._months);t=b(o/60),e=b(t/60),o%=60,t%=60,i=b(s/12),s%=12;var r=i,a=s,h=n,d=e,l=t,u=o?o.toFixed(3).replace(/\.?0+$/,""):"",c=this.asSeconds();if(!c)return"P0D";var p=c<0?"-":"",f=Do(this._months)!==Do(c)?"-":"",m=Do(this._days)!==Do(c)?"-":"",v=Do(this._milliseconds)!==Do(c)?"-":"";return p+"P"+(r?f+r+"Y":"")+(a?f+a+"M":"")+(h?m+h+"D":"")+(d||l||u?"T":"")+(d?v+d+"H":"")+(l?v+l+"M":"")+(u?v+u+"S":"")}var Co,Oo;Oo=Array.prototype.some?Array.prototype.some:function(t){for(var e=Object(this),i=e.length>>>0,o=0;o<i;o++)if(o in e&&t.call(this,e[o],o,e))return!0;return!1};var Eo=e.momentProperties=[],To=!1,Po={};e.suppressDeprecationWarnings=!1,e.deprecationHandler=null;var Io;Io=Object.keys?Object.keys:function(t){var e,i=[];for(e in t)d(t,e)&&i.push(e);return i};var No={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},Ro={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},Ao=/\d{1,2}/,zo={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},Lo={},Fo={},Bo=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,jo=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Ho={},Wo={},Yo=/\d/,Go=/\d\d/,Vo=/\d{3}/,Uo=/\d{4}/,qo=/[+-]?\d{6}/,Xo=/\d\d?/,Zo=/\d\d\d\d?/,Ko=/\d\d\d\d\d\d?/,Jo=/\d{1,3}/,$o=/\d{1,4}/,Qo=/[+-]?\d{1,6}/,tn=/\d+/,en=/[+-]?\d+/,on=/Z|[+-]\d\d:?\d\d/gi,nn=/Z|[+-]\d\d(?::?\d\d)?/gi,sn=/[+-]?\d+(\.\d{1,3})?/,rn=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,an={},hn={},dn=0,ln=1,un=2,cn=3,pn=4,fn=5,mn=6,vn=7,gn=8;H("Y",0,0,function(){var t=this.year();return t<=9999?""+t:"+"+t}),H(0,["YY",2],0,function(){return this.year()%100}),H(0,["YYYY",4],0,"year"),H(0,["YYYYY",5],0,"year"),H(0,["YYYYYY",6,!0],0,"year"),A("year","y"),F("year",1),U("Y",en),U("YY",Xo,Go),U("YYYY",$o,Uo),U("YYYYY",Qo,qo),U("YYYYYY",Qo,qo),K(["YYYYY","YYYYYY"],dn),K("YYYY",function(t,i){i[dn]=2===t.length?e.parseTwoDigitYear(t):_(t)}),K("YY",function(t,i){i[dn]=e.parseTwoDigitYear(t)}),K("Y",function(t,e){e[dn]=parseInt(t,10)}),e.parseTwoDigitYear=function(t){return _(t)+(_(t)>68?1900:2e3)};var yn,bn=it("FullYear",!0);yn=Array.prototype.indexOf?Array.prototype.indexOf:function(t){var e;for(e=0;e<this.length;++e)if(this[e]===t)return e;return-1},H("M",["MM",2],"Mo",function(){return this.month()+1}),H("MMM",0,0,function(t){return this.localeData().monthsShort(this,t)}),H("MMMM",0,0,function(t){return this.localeData().months(this,t)}),A("month","M"),F("month",8),U("M",Xo),U("MM",Xo,Go),U("MMM",function(t,e){return e.monthsShortRegex(t)}),U("MMMM",function(t,e){return e.monthsRegex(t)}),K(["M","MM"],function(t,e){e[ln]=_(t)-1}),K(["MMM","MMMM"],function(t,e,i,o){var n=i._locale.monthsParse(t,o,i._strict);null!=n?e[ln]=n:p(i).invalidMonth=t});var _n=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,wn="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),xn="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),kn=rn,Sn=rn;H("w",["ww",2],"wo","week"),H("W",["WW",2],"Wo","isoWeek"),A("week","w"),A("isoWeek","W"),F("week",5),F("isoWeek",5),U("w",Xo),U("ww",Xo,Go),U("W",Xo),U("WW",Xo,Go),J(["w","ww","W","WW"],function(t,e,i,o){e[o.substr(0,1)]=_(t)});var Dn={dow:0,doy:6};H("d",0,"do","day"),H("dd",0,0,function(t){return this.localeData().weekdaysMin(this,t)}),H("ddd",0,0,function(t){return this.localeData().weekdaysShort(this,t)}),H("dddd",0,0,function(t){return this.localeData().weekdays(this,t)}),H("e",0,0,"weekday"),H("E",0,0,"isoWeekday"),A("day","d"),A("weekday","e"),A("isoWeekday","E"),F("day",11),F("weekday",11),F("isoWeekday",11),U("d",Xo),U("e",Xo),U("E",Xo),U("dd",function(t,e){return e.weekdaysMinRegex(t)}),U("ddd",function(t,e){return e.weekdaysShortRegex(t)}),U("dddd",function(t,e){return e.weekdaysRegex(t)}),J(["dd","ddd","dddd"],function(t,e,i,o){var n=i._locale.weekdaysParse(t,o,i._strict);null!=n?e.d=n:p(i).invalidWeekday=t}),J(["d","e","E"],function(t,e,i,o){e[o]=_(t)});var Mn="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Cn="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),On="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),En=rn,Tn=rn,Pn=rn;H("H",["HH",2],0,"hour"),H("h",["hh",2],0,Gt),H("k",["kk",2],0,Vt),H("hmm",0,0,function(){return""+Gt.apply(this)+j(this.minutes(),2)}),H("hmmss",0,0,function(){return""+Gt.apply(this)+j(this.minutes(),2)+j(this.seconds(),2)}),H("Hmm",0,0,function(){return""+this.hours()+j(this.minutes(),2)}),H("Hmmss",0,0,function(){return""+this.hours()+j(this.minutes(),2)+j(this.seconds(),2)}),Ut("a",!0),Ut("A",!1),A("hour","h"),F("hour",13),U("a",qt),U("A",qt),U("H",Xo),U("h",Xo),U("k",Xo),U("HH",Xo,Go),U("hh",Xo,Go),U("kk",Xo,Go),U("hmm",Zo),U("hmmss",Ko),U("Hmm",Zo),U("Hmmss",Ko),K(["H","HH"],cn),K(["k","kk"],function(t,e,i){var o=_(t);e[cn]=24===o?0:o}),K(["a","A"],function(t,e,i){i._isPm=i._locale.isPM(t),i._meridiem=t}),K(["h","hh"],function(t,e,i){e[cn]=_(t),p(i).bigHour=!0}),K("hmm",function(t,e,i){var o=t.length-2;e[cn]=_(t.substr(0,o)),e[pn]=_(t.substr(o)),p(i).bigHour=!0}),K("hmmss",function(t,e,i){var o=t.length-4,n=t.length-2;e[cn]=_(t.substr(0,o)),e[pn]=_(t.substr(o,2)),e[fn]=_(t.substr(n)),p(i).bigHour=!0}),K("Hmm",function(t,e,i){var o=t.length-2;e[cn]=_(t.substr(0,o)),e[pn]=_(t.substr(o))}),K("Hmmss",function(t,e,i){var o=t.length-4,n=t.length-2;e[cn]=_(t.substr(0,o)),e[pn]=_(t.substr(o,2)),e[fn]=_(t.substr(n))});var In,Nn=/[ap]\.?m?\.?/i,Rn=it("Hours",!0),An={calendar:No,longDateFormat:Ro,invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:Ao,relativeTime:zo,months:wn,monthsShort:xn,week:Dn,weekdays:Mn,weekdaysMin:On,weekdaysShort:Cn,meridiemParse:Nn},zn={},Ln={},Fn=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Bn=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,jn=/Z|[+-]\d\d(?::?\d\d)?/,Hn=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Wn=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Yn=/^\/?Date\((\-?\d+)/i,Gn=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,Vn={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};e.createFromInputFallback=k("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))}),e.ISO_8601=function(){},e.RFC_2822=function(){};var Un=k("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var t=De.apply(null,arguments);return this.isValid()&&t.isValid()?t<this?this:t:m()}),qn=k("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var t=De.apply(null,arguments);return this.isValid()&&t.isValid()?t>this?this:t:m()}),Xn=function(){return Date.now?Date.now():+new Date},Zn=["year","quarter","month","week","day","hour","minute","second","millisecond"];Ae("Z",":"),Ae("ZZ",""),U("Z",nn),U("ZZ",nn),K(["Z","ZZ"],function(t,e,i){i._useUTC=!0,i._tzm=ze(nn,t)});var Kn=/([\+\-]|\d\d)/gi;e.updateOffset=function(){};var Jn=/^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,$n=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;Ke.fn=Ie.prototype,Ke.invalid=Pe;var Qn=ti(1,"add"),ts=ti(-1,"subtract");e.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",e.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var es=k("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(t){return void 0===t?this.localeData():this.locale(t)});H(0,["gg",2],0,function(){return this.weekYear()%100}),H(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Ai("gggg","weekYear"),Ai("ggggg","weekYear"),Ai("GGGG","isoWeekYear"),Ai("GGGGG","isoWeekYear"),A("weekYear","gg"),A("isoWeekYear","GG"),F("weekYear",1),F("isoWeekYear",1),U("G",en),U("g",en),U("GG",Xo,Go),U("gg",Xo,Go),U("GGGG",$o,Uo),U("gggg",$o,Uo),U("GGGGG",Qo,qo),U("ggggg",Qo,qo),J(["gggg","ggggg","GGGG","GGGGG"],function(t,e,i,o){e[o.substr(0,2)]=_(t)}),J(["gg","GG"],function(t,i,o,n){i[n]=e.parseTwoDigitYear(t)}),H("Q",0,"Qo","quarter"),A("quarter","Q"),F("quarter",7),U("Q",Yo),K("Q",function(t,e){e[ln]=3*(_(t)-1)}),H("D",["DD",2],"Do","date"),A("date","D"),F("date",9),U("D",Xo),U("DD",Xo,Go),U("Do",function(t,e){return t?e._dayOfMonthOrdinalParse||e._ordinalParse:e._dayOfMonthOrdinalParseLenient}),K(["D","DD"],un),K("Do",function(t,e){e[un]=_(t.match(Xo)[0],10)});var is=it("Date",!0);H("DDD",["DDDD",3],"DDDo","dayOfYear"),A("dayOfYear","DDD"),F("dayOfYear",4),U("DDD",Jo),U("DDDD",Vo),K(["DDD","DDDD"],function(t,e,i){i._dayOfYear=_(t)}),H("m",["mm",2],0,"minute"),A("minute","m"),F("minute",14),U("m",Xo),U("mm",Xo,Go),K(["m","mm"],pn);var os=it("Minutes",!1);H("s",["ss",2],0,"second"),A("second","s"),F("second",15),U("s",Xo),U("ss",Xo,Go),K(["s","ss"],fn);var ns=it("Seconds",!1);H("S",0,0,function(){return~~(this.millisecond()/100)}),H(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),H(0,["SSS",3],0,"millisecond"),H(0,["SSSS",4],0,function(){return 10*this.millisecond()}),H(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),H(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),H(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),H(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),H(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),A("millisecond","ms"),F("millisecond",16),U("S",Jo,Yo),U("SS",Jo,Go),U("SSS",Jo,Vo);var ss;for(ss="SSSS";ss.length<=9;ss+="S")U(ss,tn);for(ss="S";ss.length<=9;ss+="S")K(ss,Gi);var rs=it("Milliseconds",!1);H("z",0,0,"zoneAbbr"),H("zz",0,0,"zoneName");var as=g.prototype;as.add=Qn,as.calendar=oi,as.clone=ni,as.diff=ui,as.endOf=Si,as.format=vi,as.from=gi,as.fromNow=yi,as.to=bi,as.toNow=_i,as.get=st,as.invalidAt=Ni,as.isAfter=si,as.isBefore=ri,as.isBetween=ai,as.isSame=hi,as.isSameOrAfter=di,as.isSameOrBefore=li,as.isValid=Pi,as.lang=es,as.locale=wi,as.localeData=xi,as.max=qn,as.min=Un,as.parsingFlags=Ii,as.set=rt,as.startOf=ki,as.subtract=ts,as.toArray=Oi,as.toObject=Ei,as.toDate=Ci,as.toISOString=fi,as.inspect=mi,as.toJSON=Ti,as.toString=pi,as.unix=Mi,as.valueOf=Di,as.creationData=Ri,as.year=bn,as.isLeapYear=et,as.weekYear=zi,as.isoWeekYear=Li,as.quarter=as.quarters=Wi,as.month=ft,as.daysInMonth=mt,as.week=as.weeks=Ot,as.isoWeek=as.isoWeeks=Et,as.weeksInYear=Bi,as.isoWeeksInYear=Fi,as.date=is,as.day=as.days=Lt,as.weekday=Ft,as.isoWeekday=Bt,as.dayOfYear=Yi,as.hour=as.hours=Rn,as.minute=as.minutes=os,as.second=as.seconds=ns,as.millisecond=as.milliseconds=rs,as.utcOffset=Be,as.utc=He,as.local=We,as.parseZone=Ye,as.hasAlignedHourOffset=Ge,as.isDST=Ve,as.isLocal=qe,as.isUtcOffset=Xe,as.isUtc=Ze,as.isUTC=Ze,as.zoneAbbr=Vi,as.zoneName=Ui,as.dates=k("dates accessor is deprecated. Use date instead.",is),as.months=k("months accessor is deprecated. Use month instead",ft),as.years=k("years accessor is deprecated. Use year instead",bn),as.zone=k("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",je),as.isDSTShifted=k("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Ue);var hs=O.prototype;hs.calendar=E,hs.longDateFormat=T,hs.invalidDate=P,hs.ordinal=I,hs.preparse=Zi,hs.postformat=Zi,hs.relativeTime=N,hs.pastFuture=R,hs.set=M,hs.months=dt,hs.monthsShort=lt,hs.monthsParse=ct,hs.monthsRegex=gt,hs.monthsShortRegex=vt,hs.week=Dt,hs.firstDayOfYear=Ct,hs.firstDayOfWeek=Mt,hs.weekdays=It,hs.weekdaysMin=Rt,hs.weekdaysShort=Nt,hs.weekdaysParse=zt,hs.weekdaysRegex=jt,hs.weekdaysShortRegex=Ht,hs.weekdaysMinRegex=Wt,hs.isPM=Xt,hs.meridiem=Zt,Qt("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10;return t+(1===_(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")}}),e.lang=k("moment.lang is deprecated. Use moment.locale instead.",Qt),e.langData=k("moment.langData is deprecated. Use moment.localeData instead.",ie);var ds=Math.abs,ls=mo("ms"),us=mo("s"),cs=mo("m"),ps=mo("h"),fs=mo("d"),ms=mo("w"),vs=mo("M"),gs=mo("y"),ys=yo("milliseconds"),bs=yo("seconds"),_s=yo("minutes"),ws=yo("hours"),xs=yo("days"),ks=yo("months"),Ss=yo("years"),Ds=Math.round,Ms={ss:44,s:45,m:45,h:22,d:26,M:11},Cs=Math.abs,Os=Ie.prototype;return Os.isValid=Te,Os.abs=no,Os.add=ro,Os.subtract=ao,Os.as=po,Os.asMilliseconds=ls,Os.asSeconds=us,Os.asMinutes=cs,Os.asHours=ps,Os.asDays=fs,Os.asWeeks=ms,Os.asMonths=vs,Os.asYears=gs,Os.valueOf=fo,Os._bubble=lo,Os.clone=vo,Os.get=go,Os.milliseconds=ys,Os.seconds=bs,Os.minutes=_s,Os.hours=ws,Os.days=xs,Os.weeks=bo,Os.months=ks,Os.years=Ss,Os.humanize=So,Os.toISOString=Mo,Os.toString=Mo,Os.toJSON=Mo,Os.locale=wi,Os.localeData=xi,Os.toIsoString=k("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Mo),Os.lang=es,H("X",0,0,"unix"),H("x",0,0,"valueOf"),U("x",en),U("X",sn),K("X",function(t,e,i){i._d=new Date(1e3*parseFloat(t,10))}),K("x",function(t,e,i){i._d=new Date(_(t))}),e.version="2.19.1",function(t){Co=t}(De),e.fn=as,e.min=Ce,e.max=Oe,e.now=Xn,e.utc=u,e.unix=qi,e.months=Qi,e.isDate=a,e.locale=Qt,e.invalid=m,e.duration=Ke,e.isMoment=y,e.weekdays=eo,e.parseZone=Xi,e.localeData=ie,e.isDuration=Ne,e.monthsShort=to,e.weekdaysMin=oo,e.defineLocale=te,e.updateLocale=ee,e.locales=oe,e.weekdaysShort=io,e.normalizeUnits=z,e.relativeTimeRounding=xo,e.relativeTimeThreshold=ko,e.calendarFormat=ii,e.prototype=as,e})}).call(e,i(155)(t))},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e){function i(t){throw new Error("Cannot find module '"+t+"'.")}i.keys=function(){return[]},i.resolve=i,t.exports=i,i.id=156},function(t,e,i){(function(e){function i(t,e,i){var o=e&&i||0,n=0;for(e=e||[],t.toLowerCase().replace(/[0-9a-f]{2}/g,function(t){n<16&&(e[o+n++]=u[t])});n<16;)e[o+n++]=0;return e}function o(t,e){var i=e||0,o=l;return o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+"-"+o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]+o[t[i++]]}function n(t,e,i){var n=e&&i||0,s=e||[];t=t||{};var r=void 0!==t.clockseq?t.clockseq:m,a=void 0!==t.msecs?t.msecs:(new Date).getTime(),h=void 0!==t.nsecs?t.nsecs:g+1,d=a-v+(h-g)/1e4;if(d<0&&void 0===t.clockseq&&(r=r+1&16383),(d<0||a>v)&&void 0===t.nsecs&&(h=0),h>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");v=a,g=h,m=r,a+=122192928e5;var l=(1e4*(268435455&a)+h)%4294967296;s[n++]=l>>>24&255,s[n++]=l>>>16&255,s[n++]=l>>>8&255,s[n++]=255&l;var u=a/4294967296*1e4&268435455;s[n++]=u>>>8&255,s[n++]=255&u,s[n++]=u>>>24&15|16,s[n++]=u>>>16&255,s[n++]=r>>>8|128,s[n++]=255&r;for(var c=t.node||f,p=0;p<6;p++)s[n+p]=c[p];return e||o(s)}function s(t,e,i){var n=e&&i||0;"string"==typeof t&&(e="binary"==t?new Array(16):null,t=null),t=t||{};var s=t.random||(t.rng||r)();if(s[6]=15&s[6]|64,s[8]=63&s[8]|128,e)for(var a=0;a<16;a++)e[n+a]=s[a];return e||o(s)}var r,a="undefined"!=typeof window?window:void 0!==e?e:null;if(a&&a.crypto&&crypto.getRandomValues){var h=new Uint8Array(16);r=function(){return crypto.getRandomValues(h),h}}if(!r){var d=new Array(16);r=function(){for(var t,e=0;e<16;e++)0==(3&e)&&(t=4294967296*Math.random()),d[e]=t>>>((3&e)<<3)&255;return d}}for(var l=[],u={},c=0;c<256;c++)l[c]=(c+256).toString(16).substr(1),u[l[c]]=c;var p=r(),f=[1|p[0],p[1],p[2],p[3],p[4],p[5]],m=16383&(p[6]<<8|p[7]),v=0,g=0,y=s;y.v1=n,y.v4=s,y.parse=i,y.unparse=o,t.exports=y}).call(e,i(158))},function(t,e){var i;i=function(){return this}();try{i=i||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(i=window)}t.exports=i},function(t,e,i){e.util=i(2),e.DOMutil=i(14),e.DataSet=i(11),e.DataView=i(12),e.Queue=i(43),e.Graph3d=i(161),e.graph3d={Camera:i(95),Filter:i(96),Point2d:i(91),Point3d:i(34),Slider:i(92),StepNumber:i(93)},e.moment=i(9),e.Hammer=i(10),e.keycharm=i(35)},function(t,e,i){var o=i(7),n=o.JSON||(o.JSON={stringify:JSON.stringify});t.exports=function(t){return n.stringify.apply(n,arguments)}},function(t,e,i){function o(t,e,i){if(!(this instanceof o))throw new SyntaxError("Constructor must be called with the new operator");this.containerElement=t,this.dataGroup=new _,this.dataPoints=null,this.create(),f.setDefaults(o.DEFAULTS,this),this.colX=void 0,this.colY=void 0,this.colZ=void 0,this.colValue=void 0,this.setOptions(i),this.setData(e)}function n(t){return"clientX"in t?t.clientX:t.targetTouches[0]&&t.targetTouches[0].clientX||0}function s(t){return"clientY"in t?t.clientY:t.targetTouches[0]&&t.targetTouches[0].clientY||0}var r=i(90),a=function(t){return t&&t.__esModule?t:{default:t}}(r),h=i(44),d=i(2),l=i(34),u=i(91),c=i(92),p=i(93),f=i(94),m=i(15).default,v=i(15),g=v.printStyle,y=i(172),b=y.allOptions,_=i(173);o.STYLE=f.STYLE;o.DEFAULTS={width:"400px",height:"400px",filterLabel:"time",legendLabel:"value",xLabel:"x",yLabel:"y",zLabel:"z",xValueLabel:function(t){return t},yValueLabel:function(t){return t},zValueLabel:function(t){return t},showXAxis:!0,showYAxis:!0,showZAxis:!0,showGrid:!0,showPerspective:!0,showShadow:!1,keepAspectRatio:!0,verticalRatio:.5,dotSizeRatio:.02,dotSizeMinFraction:.5,dotSizeMaxFraction:2.5,showAnimationControls:void 0,animationInterval:1e3,animationPreload:!1,animationAutoStart:void 0,axisColor:"#4D4D4D",gridColor:"#D3D3D3",xCenter:"55%",yCenter:"50%",style:o.STYLE.DOT,tooltip:!1,tooltipStyle:{content:{padding:"10px",border:"1px solid #4d4d4d",color:"#1a1a1a",background:"rgba(255,255,255,0.7)",borderRadius:"2px",boxShadow:"5px 5px 10px rgba(128,128,128,0.5)"},line:{height:"40px",width:"0",borderLeft:"1px solid #4d4d4d"},dot:{height:"0",width:"0",border:"5px solid #4d4d4d",borderRadius:"5px"}},dataColor:{fill:"#7DC1FF",stroke:"#3267D2",strokeWidth:1},cameraPosition:{horizontal:1,vertical:.5,distance:1.7},showLegend:void 0,backgroundColor:void 0,xBarWidth:void 0,yBarWidth:void 0,valueMin:void 0,valueMax:void 0,xMin:void 0,xMax:void 0,xStep:void 0,yMin:void 0,yMax:void 0,yStep:void 0,zMin:void 0,zMax:void 0,zStep:void 0},h(o.prototype),o.prototype._setScale=function(){this.scale=new l(1/this.xRange.range(),1/this.yRange.range(),1/this.zRange.range()),this.keepAspectRatio&&(this.scale.x<this.scale.y?this.scale.y=this.scale.x:this.scale.x=this.scale.y),this.scale.z*=this.verticalRatio,void 0!==this.valueRange&&(this.scale.value=1/this.valueRange.range());var t=this.xRange.center()*this.scale.x,e=this.yRange.center()*this.scale.y,i=this.zRange.center()*this.scale.z;this.camera.setArmLocation(t,e,i)},o.prototype._convert3Dto2D=function(t){var e=this._convertPointToTranslation(t);return this._convertTranslationToScreen(e)},o.prototype._convertPointToTranslation=function(t){var e=this.camera.getCameraLocation(),i=this.camera.getCameraRotation(),o=t.x*this.scale.x,n=t.y*this.scale.y,s=t.z*this.scale.z,r=e.x,a=e.y,h=e.z,d=Math.sin(i.x),u=Math.cos(i.x),c=Math.sin(i.y),p=Math.cos(i.y),f=Math.sin(i.z),m=Math.cos(i.z);return new l(p*(f*(n-a)+m*(o-r))-c*(s-h),d*(p*(s-h)+c*(f*(n-a)+m*(o-r)))+u*(m*(n-a)-f*(o-r)),u*(p*(s-h)+c*(f*(n-a)+m*(o-r)))-d*(m*(n-a)-f*(o-r)))},o.prototype._convertTranslationToScreen=function(t){var e,i,o=this.eye.x,n=this.eye.y,s=this.eye.z,r=t.x,a=t.y,h=t.z;return this.showPerspective?(e=s/h*(r-o),i=s/h*(a-n)):(e=r*(-s/this.camera.getArmLength()),i=a*(-s/this.camera.getArmLength())),new u(this.currentXCenter+e*this.frame.canvas.clientWidth,this.currentYCenter-i*this.frame.canvas.clientWidth)},o.prototype._calcTranslations=function(t){for(var e=0;e<t.length;e++){var i=t[e];i.trans=this._convertPointToTranslation(i.point),i.screen=this._convertTranslationToScreen(i.trans);var o=this._convertPointToTranslation(i.bottom);i.dist=this.showPerspective?o.length():-o.z}var n=function(t,e){return e.dist-t.dist};t.sort(n)},o.prototype._initializeRanges=function(){var t=this.dataGroup;this.xRange=t.xRange,this.yRange=t.yRange,this.zRange=t.zRange,this.valueRange=t.valueRange,this.xStep=t.xStep,this.yStep=t.yStep,this.zStep=t.zStep,this.xBarWidth=t.xBarWidth,this.yBarWidth=t.yBarWidth,this.colX=t.colX,this.colY=t.colY,this.colZ=t.colZ,this.colValue=t.colValue,this._setScale()},o.prototype.getDataPoints=function(t){for(var e=[],i=0;i<t.length;i++){var o=new l;o.x=t[i][this.colX]||0,o.y=t[i][this.colY]||0,o.z=t[i][this.colZ]||0,o.data=t[i],void 0!==this.colValue&&(o.value=t[i][this.colValue]||0);var n={};n.point=o,n.bottom=new l(o.x,o.y,this.zRange.min),n.trans=void 0,n.screen=void 0,e.push(n)}return e},o.prototype._getDataPoints=function(t){var e,i,n,s,r=[];if(this.style===o.STYLE.GRID||this.style===o.STYLE.SURFACE){var a=this.dataGroup.getDistinctValues(this.colX,t),h=this.dataGroup.getDistinctValues(this.colY,t);r=this.getDataPoints(t);var d=[];for(n=0;n<r.length;n++){s=r[n];var l=a.indexOf(s.point.x),u=h.indexOf(s.point.y);void 0===d[l]&&(d[l]=[]),d[l][u]=s}for(e=0;e<d.length;e++)for(i=0;i<d[e].length;i++)d[e][i]&&(d[e][i].pointRight=e<d.length-1?d[e+1][i]:void 0,d[e][i].pointTop=i<d[e].length-1?d[e][i+1]:void 0,d[e][i].pointCross=e<d.length-1&&i<d[e].length-1?d[e+1][i+1]:void 0)}else if(this._checkValueField(t),r=this.getDataPoints(t),this.style===o.STYLE.LINE)for(n=0;n<r.length;n++)n>0&&(r[n-1].pointNext=r[n]);return r},o.prototype.create=function(){for(;this.containerElement.hasChildNodes();)this.containerElement.removeChild(this.containerElement.firstChild);this.frame=document.createElement("div"),this.frame.style.position="relative",this.frame.style.overflow="hidden",this.frame.canvas=document.createElement("canvas"),this.frame.canvas.style.position="relative",this.frame.appendChild(this.frame.canvas);var t=document.createElement("DIV");t.style.color="red",t.style.fontWeight="bold",t.style.padding="10px",t.innerHTML="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(t),this.frame.filter=document.createElement("div"),this.frame.filter.style.position="absolute",this.frame.filter.style.bottom="0px",this.frame.filter.style.left="0px",this.frame.filter.style.width="100%",this.frame.appendChild(this.frame.filter);var e=this,i=function(t){e._onMouseDown(t)},o=function(t){e._onTouchStart(t)},n=function(t){e._onWheel(t)},s=function(t){e._onTooltip(t)},r=function(t){e._onClick(t)};d.addEventListener(this.frame.canvas,"mousedown",i),d.addEventListener(this.frame.canvas,"touchstart",o),d.addEventListener(this.frame.canvas,"mousewheel",n),d.addEventListener(this.frame.canvas,"mousemove",s),d.addEventListener(this.frame.canvas,"click",r),this.containerElement.appendChild(this.frame)},o.prototype._setSize=function(t,e){this.frame.style.width=t,this.frame.style.height=e,this._resizeCanvas()},o.prototype._resizeCanvas=function(){this.frame.canvas.style.width="100%",this.frame.canvas.style.height="100%",this.frame.canvas.width=this.frame.canvas.clientWidth,this.frame.canvas.height=this.frame.canvas.clientHeight,this.frame.filter.style.width=this.frame.canvas.clientWidth-20+"px"},o.prototype.animationStart=function(){if(this.animationAutoStart&&this.dataGroup.dataFilter){if(!this.frame.filter||!this.frame.filter.slider)throw new Error("No animation available");this.frame.filter.slider.play()}},o.prototype.animationStop=function(){this.frame.filter&&this.frame.filter.slider&&this.frame.filter.slider.stop()},o.prototype._resizeCenter=function(){"%"===this.xCenter.charAt(this.xCenter.length-1)?this.currentXCenter=parseFloat(this.xCenter)/100*this.frame.canvas.clientWidth:this.currentXCenter=parseFloat(this.xCenter),"%"===this.yCenter.charAt(this.yCenter.length-1)?this.currentYCenter=parseFloat(this.yCenter)/100*(this.frame.canvas.clientHeight-this.frame.filter.clientHeight):this.currentYCenter=parseFloat(this.yCenter)},o.prototype.getCameraPosition=function(){var t=this.camera.getArmRotation();return t.distance=this.camera.getArmLength(),t},o.prototype._readData=function(t){this.dataPoints=this.dataGroup.initializeData(this,t,this.style),this._initializeRanges(),this._redrawFilter()},o.prototype.setData=function(t){void 0!==t&&null!==t&&(this._readData(t),this.redraw(),this.animationStart())},o.prototype.setOptions=function(t){if(void 0!==t){!0===m.validate(t,b)&&console.log("%cErrors have been found in the supplied options object.",g),this.animationStop(),f.setOptions(t,this),this.setPointDrawingMethod(),this._setSize(this.width,this.height),this.setData(this.dataGroup.getDataTable()),this.animationStart()}},o.prototype.setPointDrawingMethod=function(){var t=void 0;switch(this.style){case o.STYLE.BAR:t=o.prototype._redrawBarGraphPoint;break;case o.STYLE.BARCOLOR:t=o.prototype._redrawBarColorGraphPoint;break;case o.STYLE.BARSIZE:t=o.prototype._redrawBarSizeGraphPoint;break;case o.STYLE.DOT:t=o.prototype._redrawDotGraphPoint;break;case o.STYLE.DOTLINE:t=o.prototype._redrawDotLineGraphPoint;break;case o.STYLE.DOTCOLOR:t=o.prototype._redrawDotColorGraphPoint;break;case o.STYLE.DOTSIZE:t=o.prototype._redrawDotSizeGraphPoint;break;case o.STYLE.SURFACE:t=o.prototype._redrawSurfaceGraphPoint;break;case o.STYLE.GRID:t=o.prototype._redrawGridGraphPoint;break;case o.STYLE.LINE:t=o.prototype._redrawLineGraphPoint;break;default:throw new Error("Can not determine point drawing method for graph style '"+this.style+"'")}this._pointDrawingMethod=t},o.prototype.redraw=function(){if(void 0===this.dataPoints)throw new Error("Graph data not initialized");this._resizeCanvas(),this._resizeCenter(),this._redrawSlider(),this._redrawClear(),this._redrawAxis(),this._redrawDataGraph(),this._redrawInfo(),this._redrawLegend()},o.prototype._getContext=function(){var t=this.frame.canvas,e=t.getContext("2d");return e.lineJoin="round",e.lineCap="round",e},o.prototype._redrawClear=function(){var t=this.frame.canvas;t.getContext("2d").clearRect(0,0,t.width,t.height)},o.prototype._dotSize=function(){return this.frame.clientWidth*this.dotSizeRatio},o.prototype._getLegendWidth=function(){var t;if(this.style===o.STYLE.DOTSIZE){t=this._dotSize()*this.dotSizeMaxFraction}else t=this.style===o.STYLE.BARSIZE?this.xBarWidth:20;return t},o.prototype._redrawLegend=function(){if(!0===this.showLegend&&this.style!==o.STYLE.LINE&&this.style!==o.STYLE.BARSIZE){var t=this.style===o.STYLE.BARSIZE||this.style===o.STYLE.DOTSIZE,e=this.style===o.STYLE.DOTSIZE||this.style===o.STYLE.DOTCOLOR||this.style===o.STYLE.BARCOLOR,i=Math.max(.25*this.frame.clientHeight,100),n=this.margin,s=this._getLegendWidth(),r=this.frame.clientWidth-this.margin,a=r-s,h=n+i,d=this._getContext();if(d.lineWidth=1,d.font="14px arial",!1===t){var l,c=i;for(l=0;l<c;l++){var f=(l-0)/(c-0),m=240*f,v=this._hsv2rgb(m,1,1);d.strokeStyle=v,d.beginPath(),d.moveTo(a,n+l),d.lineTo(r,n+l),d.stroke()}d.strokeStyle=this.axisColor,d.strokeRect(a,n,s,i)}else{var g;this.style===o.STYLE.DOTSIZE?g=s*(this.dotSizeMinFraction/this.dotSizeMaxFraction):(this.style,o.STYLE.BARSIZE),d.strokeStyle=this.axisColor,d.fillStyle=this.dataColor.fill,d.beginPath(),d.moveTo(a,n),d.lineTo(r,n),d.lineTo(a+g,h),d.lineTo(a,h),d.closePath(),d.fill(),d.stroke()}var y=e?this.valueRange.min:this.zRange.min,b=e?this.valueRange.max:this.zRange.max,_=new p(y,b,(b-y)/5,!0);_.start(!0);for(var w,x;!_.end();)l=h-(_.getCurrent()-y)/(b-y)*i,w=new u(a-5,l),x=new u(a,l),this._line(d,w,x),d.textAlign="right",d.textBaseline="middle",d.fillStyle=this.axisColor,d.fillText(_.getCurrent(),a-10,l),_.next();d.textAlign="right",d.textBaseline="top";var k=this.legendLabel;d.fillText(k,r,h+this.margin)}},o.prototype._redrawFilter=function(){var t=this.dataGroup.dataFilter,e=this.frame.filter;if(e.innerHTML="",!t)return void(e.slider=void 0);var i={visible:this.showAnimationControls},o=new c(e,i);e.slider=o,e.style.padding="10px",o.setValues(t.values),o.setPlayInterval(this.animationInterval);var n=this,s=function(){var t=n.dataGroup.dataFilter,e=o.getIndex();t.selectValue(e),n.dataPoints=t._getDataPoints(),n.redraw()};o.setOnChangeCallback(s)},o.prototype._redrawSlider=function(){void 0!==this.frame.filter.slider&&this.frame.filter.slider.redraw()},o.prototype._redrawInfo=function(){var t=this.dataGroup.getInfo();if(void 0!==t){var e=this._getContext();e.font="14px arial",e.lineStyle="gray",e.fillStyle="gray",e.textAlign="left",e.textBaseline="top";var i=this.margin,o=this.margin;e.fillText(t,i,o)}},o.prototype._line=function(t,e,i,o){void 0!==o&&(t.strokeStyle=o),t.beginPath(),t.moveTo(e.x,e.y),t.lineTo(i.x,i.y),t.stroke()},o.prototype.drawAxisLabelX=function(t,e,i,o,n){void 0===n&&(n=0);var s=this._convert3Dto2D(e)
+;Math.cos(2*o)>0?(t.textAlign="center",t.textBaseline="top",s.y+=n):Math.sin(2*o)<0?(t.textAlign="right",t.textBaseline="middle"):(t.textAlign="left",t.textBaseline="middle"),t.fillStyle=this.axisColor,t.fillText(i,s.x,s.y)},o.prototype.drawAxisLabelY=function(t,e,i,o,n){void 0===n&&(n=0);var s=this._convert3Dto2D(e);Math.cos(2*o)<0?(t.textAlign="center",t.textBaseline="top",s.y+=n):Math.sin(2*o)>0?(t.textAlign="right",t.textBaseline="middle"):(t.textAlign="left",t.textBaseline="middle"),t.fillStyle=this.axisColor,t.fillText(i,s.x,s.y)},o.prototype.drawAxisLabelZ=function(t,e,i,o){void 0===o&&(o=0);var n=this._convert3Dto2D(e);t.textAlign="right",t.textBaseline="middle",t.fillStyle=this.axisColor,t.fillText(i,n.x-o,n.y)},o.prototype._line3d=function(t,e,i,o){var n=this._convert3Dto2D(e),s=this._convert3Dto2D(i);this._line(t,n,s,o)},o.prototype._redrawAxis=function(){var t,e,i,o,n,s,r,a,h,d,c,f=this._getContext();f.font=24/this.camera.getArmLength()+"px arial";var m,v=.025/this.scale.x,g=.025/this.scale.y,y=5/this.camera.getArmLength(),b=this.camera.getArmRotation().horizontal,_=new u(Math.cos(b),Math.sin(b)),w=this.xRange,x=this.yRange,k=this.zRange;for(f.lineWidth=1,o=void 0===this.defaultXStep,i=new p(w.min,w.max,this.xStep,o),i.start(!0);!i.end();){var S=i.getCurrent();if(this.showGrid?(t=new l(S,x.min,k.min),e=new l(S,x.max,k.min),this._line3d(f,t,e,this.gridColor)):this.showXAxis&&(t=new l(S,x.min,k.min),e=new l(S,x.min+v,k.min),this._line3d(f,t,e,this.axisColor),t=new l(S,x.max,k.min),e=new l(S,x.max-v,k.min),this._line3d(f,t,e,this.axisColor)),this.showXAxis){r=_.x>0?x.min:x.max,m=new l(S,r,k.min);var D="  "+this.xValueLabel(S)+"  ";this.drawAxisLabelX(f,m,D,b,y)}i.next()}for(f.lineWidth=1,o=void 0===this.defaultYStep,i=new p(x.min,x.max,this.yStep,o),i.start(!0);!i.end();){var M=i.getCurrent();if(this.showGrid?(t=new l(w.min,M,k.min),e=new l(w.max,M,k.min),this._line3d(f,t,e,this.gridColor)):this.showYAxis&&(t=new l(w.min,M,k.min),e=new l(w.min+g,M,k.min),this._line3d(f,t,e,this.axisColor),t=new l(w.max,M,k.min),e=new l(w.max-g,M,k.min),this._line3d(f,t,e,this.axisColor)),this.showYAxis){s=_.y>0?w.min:w.max,m=new l(s,M,k.min);var C="  "+this.yValueLabel(M)+"  ";this.drawAxisLabelY(f,m,C,b,y)}i.next()}if(this.showZAxis){for(f.lineWidth=1,o=void 0===this.defaultZStep,i=new p(k.min,k.max,this.zStep,o),i.start(!0),s=_.x>0?w.min:w.max,r=_.y<0?x.min:x.max;!i.end();){var O=i.getCurrent(),E=new l(s,r,O),T=this._convert3Dto2D(E);e=new u(T.x-y,T.y),this._line(f,T,e,this.axisColor);var P=this.zValueLabel(O)+" ";this.drawAxisLabelZ(f,E,P,5),i.next()}f.lineWidth=1,t=new l(s,r,k.min),e=new l(s,r,k.max),this._line3d(f,t,e,this.axisColor)}if(this.showXAxis){var I,N;f.lineWidth=1,I=new l(w.min,x.min,k.min),N=new l(w.max,x.min,k.min),this._line3d(f,I,N,this.axisColor),I=new l(w.min,x.max,k.min),N=new l(w.max,x.max,k.min),this._line3d(f,I,N,this.axisColor)}this.showYAxis&&(f.lineWidth=1,t=new l(w.min,x.min,k.min),e=new l(w.min,x.max,k.min),this._line3d(f,t,e,this.axisColor),t=new l(w.max,x.min,k.min),e=new l(w.max,x.max,k.min),this._line3d(f,t,e,this.axisColor));var R=this.xLabel;R.length>0&&this.showXAxis&&(c=.1/this.scale.y,s=(w.max+3*w.min)/4,r=_.x>0?x.min-c:x.max+c,n=new l(s,r,k.min),this.drawAxisLabelX(f,n,R,b));var A=this.yLabel;A.length>0&&this.showYAxis&&(d=.1/this.scale.x,s=_.y>0?w.min-d:w.max+d,r=(x.max+3*x.min)/4,n=new l(s,r,k.min),this.drawAxisLabelY(f,n,A,b));var z=this.zLabel;z.length>0&&this.showZAxis&&(h=30,s=_.x>0?w.min:w.max,r=_.y<0?x.min:x.max,a=(k.max+3*k.min)/4,n=new l(s,r,a),this.drawAxisLabelZ(f,n,z,h))},o.prototype._hsv2rgb=function(t,e,i){var o,n,s,r,a,h;switch(r=i*e,a=Math.floor(t/60),h=r*(1-Math.abs(t/60%2-1)),a){case 0:o=r,n=h,s=0;break;case 1:o=h,n=r,s=0;break;case 2:o=0,n=r,s=h;break;case 3:o=0,n=h,s=r;break;case 4:o=h,n=0,s=r;break;case 5:o=r,n=0,s=h;break;default:o=0,n=0,s=0}return"RGB("+parseInt(255*o)+","+parseInt(255*n)+","+parseInt(255*s)+")"},o.prototype._getStrokeWidth=function(t){return void 0!==t?this.showPerspective?1/-t.trans.z*this.dataColor.strokeWidth:-this.eye.z/this.camera.getArmLength()*this.dataColor.strokeWidth:this.dataColor.strokeWidth},o.prototype._redrawBar=function(t,e,i,o,n,s){var r,a=this,h=e.point,d=this.zRange.min,u=[{point:new l(h.x-i,h.y-o,h.z)},{point:new l(h.x+i,h.y-o,h.z)},{point:new l(h.x+i,h.y+o,h.z)},{point:new l(h.x-i,h.y+o,h.z)}],c=[{point:new l(h.x-i,h.y-o,d)},{point:new l(h.x+i,h.y-o,d)},{point:new l(h.x+i,h.y+o,d)},{point:new l(h.x-i,h.y+o,d)}];u.forEach(function(t){t.screen=a._convert3Dto2D(t.point)}),c.forEach(function(t){t.screen=a._convert3Dto2D(t.point)});var p=[{corners:u,center:l.avg(c[0].point,c[2].point)},{corners:[u[0],u[1],c[1],c[0]],center:l.avg(c[1].point,c[0].point)},{corners:[u[1],u[2],c[2],c[1]],center:l.avg(c[2].point,c[1].point)},{corners:[u[2],u[3],c[3],c[2]],center:l.avg(c[3].point,c[2].point)},{corners:[u[3],u[0],c[0],c[3]],center:l.avg(c[0].point,c[3].point)}];e.surfaces=p;for(var f=0;f<p.length;f++){r=p[f];var m=this._convertPointToTranslation(r.center);r.dist=this.showPerspective?m.length():-m.z}p.sort(function(t,e){var i=e.dist-t.dist;return i||(t.corners===u?1:e.corners===u?-1:0)}),t.lineWidth=this._getStrokeWidth(e),t.strokeStyle=s,t.fillStyle=n;for(var v=2;v<p.length;v++)r=p[v],this._polygon(t,r.corners)},o.prototype._polygon=function(t,e,i,o){if(!(e.length<2)){void 0!==i&&(t.fillStyle=i),void 0!==o&&(t.strokeStyle=o),t.beginPath(),t.moveTo(e[0].screen.x,e[0].screen.y);for(var n=1;n<e.length;++n){var s=e[n];t.lineTo(s.screen.x,s.screen.y)}t.closePath(),t.fill(),t.stroke()}},o.prototype._drawCircle=function(t,e,i,o,n){var s=this._calcRadius(e,n);t.lineWidth=this._getStrokeWidth(e),t.strokeStyle=o,t.fillStyle=i,t.beginPath(),t.arc(e.screen.x,e.screen.y,s,0,2*Math.PI,!0),t.fill(),t.stroke()},o.prototype._getColorsRegular=function(t){var e=240*(1-(t.point.z-this.zRange.min)*this.scale.z/this.verticalRatio);return{fill:this._hsv2rgb(e,1,1),border:this._hsv2rgb(e,1,.8)}},o.prototype._getColorsColor=function(t){var e,i;if("string"==typeof t.point.value)e=t.point.value,i=t.point.value;else{var o=240*(1-(t.point.value-this.valueRange.min)*this.scale.value);e=this._hsv2rgb(o,1,1),i=this._hsv2rgb(o,1,.8)}return{fill:e,border:i}},o.prototype._getColorsSize=function(){return{fill:this.dataColor.fill,border:this.dataColor.stroke}},o.prototype._calcRadius=function(t,e){void 0===e&&(e=this._dotSize());var i;return i=this.showPerspective?e/-t.trans.z:e*(-this.eye.z/this.camera.getArmLength()),i<0&&(i=0),i},o.prototype._redrawBarGraphPoint=function(t,e){var i=this.xBarWidth/2,o=this.yBarWidth/2,n=this._getColorsRegular(e);this._redrawBar(t,e,i,o,n.fill,n.border)},o.prototype._redrawBarColorGraphPoint=function(t,e){var i=this.xBarWidth/2,o=this.yBarWidth/2,n=this._getColorsColor(e);this._redrawBar(t,e,i,o,n.fill,n.border)},o.prototype._redrawBarSizeGraphPoint=function(t,e){var i=(e.point.value-this.valueRange.min)/this.valueRange.range(),o=this.xBarWidth/2*(.8*i+.2),n=this.yBarWidth/2*(.8*i+.2),s=this._getColorsSize();this._redrawBar(t,e,o,n,s.fill,s.border)},o.prototype._redrawDotGraphPoint=function(t,e){var i=this._getColorsRegular(e);this._drawCircle(t,e,i.fill,i.border)},o.prototype._redrawDotLineGraphPoint=function(t,e){var i=this._convert3Dto2D(e.bottom);t.lineWidth=1,this._line(t,i,e.screen,this.gridColor),this._redrawDotGraphPoint(t,e)},o.prototype._redrawDotColorGraphPoint=function(t,e){var i=this._getColorsColor(e);this._drawCircle(t,e,i.fill,i.border)},o.prototype._redrawDotSizeGraphPoint=function(t,e){var i=this._dotSize(),o=(e.point.value-this.valueRange.min)/this.valueRange.range(),n=i*this.dotSizeMinFraction,s=i*this.dotSizeMaxFraction-n,r=n+s*o,a=this._getColorsSize();this._drawCircle(t,e,a.fill,a.border,r)},o.prototype._redrawSurfaceGraphPoint=function(t,e){var i=e.pointRight,o=e.pointTop,n=e.pointCross;if(void 0!==e&&void 0!==i&&void 0!==o&&void 0!==n){var s,r,a=!0;if(this.showGrayBottom||this.showShadow){var h=l.subtract(n.trans,e.trans),d=l.subtract(o.trans,i.trans),u=l.crossProduct(h,d),c=u.length();a=u.z>0}if(a){var p,f=(e.point.z+i.point.z+o.point.z+n.point.z)/4,m=240*(1-(f-this.zRange.min)*this.scale.z/this.verticalRatio);this.showShadow?(p=Math.min(1+u.x/c/2,1),s=this._hsv2rgb(m,1,p),r=s):(p=1,s=this._hsv2rgb(m,1,p),r=this.axisColor)}else s="gray",r=this.axisColor;t.lineWidth=this._getStrokeWidth(e);var v=[e,i,n,o];this._polygon(t,v,s,r)}},o.prototype._drawGridLine=function(t,e,i){if(void 0!==e&&void 0!==i){var o=(e.point.z+i.point.z)/2,n=240*(1-(o-this.zRange.min)*this.scale.z/this.verticalRatio);t.lineWidth=2*this._getStrokeWidth(e),t.strokeStyle=this._hsv2rgb(n,1,1),this._line(t,e.screen,i.screen)}},o.prototype._redrawGridGraphPoint=function(t,e){this._drawGridLine(t,e,e.pointRight),this._drawGridLine(t,e,e.pointTop)},o.prototype._redrawLineGraphPoint=function(t,e){void 0!==e.pointNext&&(t.lineWidth=this._getStrokeWidth(e),t.strokeStyle=this.dataColor.stroke,this._line(t,e.screen,e.pointNext.screen))},o.prototype._redrawDataGraph=function(){var t,e=this._getContext();if(!(void 0===this.dataPoints||this.dataPoints.length<=0))for(this._calcTranslations(this.dataPoints),t=0;t<this.dataPoints.length;t++){var i=this.dataPoints[t];this._pointDrawingMethod.call(this,e,i)}},o.prototype._storeMousePosition=function(t){this.startMouseX=n(t),this.startMouseY=s(t),this._startCameraOffset=this.camera.getOffset()},o.prototype._onMouseDown=function(t){if(t=t||window.event,this.leftButtonDown&&this._onMouseUp(t),this.leftButtonDown=t.which?1===t.which:1===t.button,this.leftButtonDown||this.touchDown){this._storeMousePosition(t),this.startStart=new Date(this.start),this.startEnd=new Date(this.end),this.startArmRotation=this.camera.getArmRotation(),this.frame.style.cursor="move";var e=this;this.onmousemove=function(t){e._onMouseMove(t)},this.onmouseup=function(t){e._onMouseUp(t)},d.addEventListener(document,"mousemove",e.onmousemove),d.addEventListener(document,"mouseup",e.onmouseup),d.preventDefault(t)}},o.prototype._onMouseMove=function(t){this.moving=!0,t=t||window.event;var e=parseFloat(n(t))-this.startMouseX,i=parseFloat(s(t))-this.startMouseY;if(t&&!0===t.ctrlKey){var o=.5*this.frame.clientWidth,r=.5*this.frame.clientHeight,a=(this._startCameraOffset.x||0)-e/o*this.camera.armLength*.8,h=(this._startCameraOffset.y||0)+i/r*this.camera.armLength*.8;this.camera.setOffset(a,h),this._storeMousePosition(t)}else{var l=this.startArmRotation.horizontal+e/200,u=this.startArmRotation.vertical+i/200,c=Math.sin(4/360*2*Math.PI);Math.abs(Math.sin(l))<c&&(l=Math.round(l/Math.PI)*Math.PI-.001),Math.abs(Math.cos(l))<c&&(l=(Math.round(l/Math.PI-.5)+.5)*Math.PI-.001),Math.abs(Math.sin(u))<c&&(u=Math.round(u/Math.PI)*Math.PI),Math.abs(Math.cos(u))<c&&(u=(Math.round(u/Math.PI-.5)+.5)*Math.PI),this.camera.setArmRotation(l,u)}this.redraw();var p=this.getCameraPosition();this.emit("cameraPositionChange",p),d.preventDefault(t)},o.prototype._onMouseUp=function(t){this.frame.style.cursor="auto",this.leftButtonDown=!1,d.removeEventListener(document,"mousemove",this.onmousemove),d.removeEventListener(document,"mouseup",this.onmouseup),d.preventDefault(t)},o.prototype._onClick=function(t){if(this.onclick_callback){if(this.moving)this.moving=!1;else{var e=this.frame.getBoundingClientRect(),i=n(t)-e.left,o=s(t)-e.top,r=this._dataPointFromXY(i,o);r&&this.onclick_callback(r.point.data)}d.preventDefault(t)}},o.prototype._onTooltip=function(t){var e=this.frame.getBoundingClientRect(),i=n(t)-e.left,o=s(t)-e.top;if(this.showTooltip){if(this.tooltipTimeout&&clearTimeout(this.tooltipTimeout),this.leftButtonDown)return void this._hideTooltip();if(this.tooltip&&this.tooltip.dataPoint){var r=this._dataPointFromXY(i,o);r!==this.tooltip.dataPoint&&(r?this._showTooltip(r):this._hideTooltip())}else{var a=this;this.tooltipTimeout=setTimeout(function(){a.tooltipTimeout=null;var t=a._dataPointFromXY(i,o);t&&a._showTooltip(t)},300)}}},o.prototype._onTouchStart=function(t){this.touchDown=!0;var e=this;this.ontouchmove=function(t){e._onTouchMove(t)},this.ontouchend=function(t){e._onTouchEnd(t)},d.addEventListener(document,"touchmove",e.ontouchmove),d.addEventListener(document,"touchend",e.ontouchend),this._onMouseDown(t)},o.prototype._onTouchMove=function(t){this._onMouseMove(t)},o.prototype._onTouchEnd=function(t){this.touchDown=!1,d.removeEventListener(document,"touchmove",this.ontouchmove),d.removeEventListener(document,"touchend",this.ontouchend),this._onMouseUp(t)},o.prototype._onWheel=function(t){t||(t=window.event);var e=0;if(t.wheelDelta?e=t.wheelDelta/120:t.detail&&(e=-t.detail/3),e){var i=this.camera.getArmLength(),o=i*(1-e/10);this.camera.setArmLength(o),this.redraw(),this._hideTooltip()}var n=this.getCameraPosition();this.emit("cameraPositionChange",n),d.preventDefault(t)},o.prototype._insideTriangle=function(t,e){function i(t){return t>0?1:t<0?-1:0}var o=e[0],n=e[1],s=e[2],r=i((n.x-o.x)*(t.y-o.y)-(n.y-o.y)*(t.x-o.x)),a=i((s.x-n.x)*(t.y-n.y)-(s.y-n.y)*(t.x-n.x)),h=i((o.x-s.x)*(t.y-s.y)-(o.y-s.y)*(t.x-s.x));return!(0!=r&&0!=a&&r!=a||0!=a&&0!=h&&a!=h||0!=r&&0!=h&&r!=h)},o.prototype._dataPointFromXY=function(t,e){var i,n=null,s=null,r=null,a=new u(t,e);if(this.style===o.STYLE.BAR||this.style===o.STYLE.BARCOLOR||this.style===o.STYLE.BARSIZE)for(i=this.dataPoints.length-1;i>=0;i--){n=this.dataPoints[i];var h=n.surfaces;if(h)for(var d=h.length-1;d>=0;d--){var l=h[d],c=l.corners,p=[c[0].screen,c[1].screen,c[2].screen],f=[c[2].screen,c[3].screen,c[0].screen];if(this._insideTriangle(a,p)||this._insideTriangle(a,f))return n}}else for(i=0;i<this.dataPoints.length;i++){n=this.dataPoints[i];var m=n.screen;if(m){var v=Math.abs(t-m.x),g=Math.abs(e-m.y),y=Math.sqrt(v*v+g*g);(null===r||y<r)&&y<100&&(r=y,s=n)}}return s},o.prototype.hasBars=function(t){return t==o.STYLE.BAR||t==o.STYLE.BARCOLOR||t==o.STYLE.BARSIZE},o.prototype._showTooltip=function(t){var e,i,o;this.tooltip?(e=this.tooltip.dom.content,i=this.tooltip.dom.line,o=this.tooltip.dom.dot):(e=document.createElement("div"),(0,a.default)(e.style,{},this.tooltipStyle.content),e.style.position="absolute",i=document.createElement("div"),(0,a.default)(i.style,{},this.tooltipStyle.line),i.style.position="absolute",o=document.createElement("div"),(0,a.default)(o.style,{},this.tooltipStyle.dot),o.style.position="absolute",this.tooltip={dataPoint:null,dom:{content:e,line:i,dot:o}}),this._hideTooltip(),this.tooltip.dataPoint=t,"function"==typeof this.showTooltip?e.innerHTML=this.showTooltip(t.point):e.innerHTML="<table><tr><td>"+this.xLabel+":</td><td>"+t.point.x+"</td></tr><tr><td>"+this.yLabel+":</td><td>"+t.point.y+"</td></tr><tr><td>"+this.zLabel+":</td><td>"+t.point.z+"</td></tr></table>",e.style.left="0",e.style.top="0",this.frame.appendChild(e),this.frame.appendChild(i),this.frame.appendChild(o);var n=e.offsetWidth,s=e.offsetHeight,r=i.offsetHeight,h=o.offsetWidth,d=o.offsetHeight,l=t.screen.x-n/2;l=Math.min(Math.max(l,10),this.frame.clientWidth-10-n),i.style.left=t.screen.x+"px",i.style.top=t.screen.y-r+"px",e.style.left=l+"px",e.style.top=t.screen.y-r-s+"px",o.style.left=t.screen.x-h/2+"px",o.style.top=t.screen.y-d/2+"px"},o.prototype._hideTooltip=function(){if(this.tooltip){this.tooltip.dataPoint=null;for(var t in this.tooltip.dom)if(this.tooltip.dom.hasOwnProperty(t)){var e=this.tooltip.dom[t];e&&e.parentNode&&e.parentNode.removeChild(e)}}},o.prototype.setCameraPosition=function(t){f.setCameraPosition(t,this),this.redraw()},o.prototype.setSize=function(t,e){this._setSize(t,e),this.redraw()},t.exports=o},function(t,e,i){i(163),t.exports=i(7).Object.assign},function(t,e,i){var o=i(17);o(o.S+o.F,"Object",{assign:i(164)})},function(t,e,i){var o=i(33),n=i(63),s=i(42),r=i(41),a=i(78),h=Object.assign;t.exports=!h||i(28)(function(){var t={},e={},i=Symbol(),o="abcdefghijklmnopqrst";return t[i]=7,o.split("").forEach(function(t){e[t]=t}),7!=h({},t)[i]||Object.keys(h({},e)).join("")!=o})?function(t,e){for(var i=r(t),h=arguments.length,d=1,l=n.f,u=s.f;h>d;)for(var c,p=a(arguments[d++]),f=l?o(p).concat(l(p)):o(p),m=f.length,v=0;m>v;)u.call(p,c=f[v++])&&(i[c]=p[c]);return i}:h},function(t,e,i){t.exports={default:i(166),__esModule:!0}},function(t,e,i){i(167),t.exports=i(7).Math.sign},function(t,e,i){var o=i(17);o(o.S,"Math",{sign:i(168)})},function(t,e){t.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},function(t,e,i){t.exports={default:i(170),__esModule:!0}},function(t,e,i){i(171);var o=i(7).Object;t.exports=function(t,e,i){return o.defineProperty(t,e,i)}},function(t,e,i){var o=i(17);o(o.S+o.F*!i(21),"Object",{defineProperty:i(20).f})},function(t,e,i){Object.defineProperty(e,"__esModule",{value:!0});var o="string",n="boolean",s="number",r={fill:{string:o},stroke:{string:o},strokeWidth:{number:s},__type__:{string:o,object:"object",undefined:"undefined"}},a={animationAutoStart:{boolean:n,undefined:"undefined"},animationInterval:{number:s},animationPreload:{boolean:n},axisColor:{string:o},backgroundColor:r,xBarWidth:{number:s,undefined:"undefined"},yBarWidth:{number:s,undefined:"undefined"},cameraPosition:{distance:{number:s},horizontal:{number:s},vertical:{number:s},__type__:{object:"object"}},xCenter:{string:o},yCenter:{string:o},dataColor:r,dotSizeMinFraction:{number:s},dotSizeMaxFraction:{number:s},dotSizeRatio:{number:s},filterLabel:{string:o},gridColor:{string:o},onclick:{function:"function"},keepAspectRatio:{boolean:n},xLabel:{string:o},yLabel:{string:o},zLabel:{string:o},legendLabel:{string:o},xMin:{number:s,undefined:"undefined"},yMin:{number:s,undefined:"undefined"},zMin:{number:s,undefined:"undefined"},xMax:{number:s,undefined:"undefined"},yMax:{number:s,undefined:"undefined"},zMax:{number:s,undefined:"undefined"},showAnimationControls:{boolean:n,undefined:"undefined"},showGrid:{boolean:n},showLegend:{boolean:n,undefined:"undefined"},showPerspective:{boolean:n},showShadow:{boolean:n},showXAxis:{boolean:n},showYAxis:{boolean:n},showZAxis:{boolean:n},xStep:{number:s,undefined:"undefined"},yStep:{number:s,undefined:"undefined"},zStep:{number:s,undefined:"undefined"},style:{number:s,string:["bar","bar-color","bar-size","dot","dot-line","dot-color","dot-size","line","grid","surface"]},tooltip:{boolean:n,function:"function"},tooltipStyle:{content:{color:{string:o},background:{string:o},border:{string:o},borderRadius:{string:o},boxShadow:{string:o},padding:{string:o},__type__:{object:"object"}},line:{borderLeft:{string:o},height:{string:o},width:{string:o},__type__:{object:"object"}},dot:{border:{string:o},borderRadius:{string:o},height:{string:o},width:{string:o},__type__:{object:"object"}},__type__:{object:"object"}},xValueLabel:{function:"function"},yValueLabel:{function:"function"},zValueLabel:{function:"function"},valueMax:{number:s,undefined:"undefined"},valueMin:{number:s,undefined:"undefined"},verticalRatio:{number:s},height:{string:o},width:{string:o},__type__:{object:"object"}};e.allOptions=a},function(t,e,i){function o(){this.dataTable=null}var n=i(11),s=i(12),r=i(174),a=i(96),h=i(94),d=i(34);o.prototype.initializeData=function(t,e,i){if(void 0!==e){Array.isArray(e)&&(e=new n(e));var o;if(!(e instanceof n||e instanceof s))throw new Error("Array, DataSet, or DataView expected");if(o=e.get(),0!=o.length){this.style=i,this.dataSet&&this.dataSet.off("*",this._onChange),this.dataSet=e,this.dataTable=o;var r=this;this._onChange=function(){t.setData(r.dataSet)},this.dataSet.on("*",this._onChange),this.colX="x",this.colY="y",this.colZ="z";var h=t.hasBars(i);if(h&&(void 0!==t.defaultXBarWidth?this.xBarWidth=t.defaultXBarWidth:this.xBarWidth=this.getSmallestDifference(o,this.colX)||1,void 0!==t.defaultYBarWidth?this.yBarWidth=t.defaultYBarWidth:this.yBarWidth=this.getSmallestDifference(o,this.colY)||1),this._initializeRange(o,this.colX,t,h),this._initializeRange(o,this.colY,t,h),this._initializeRange(o,this.colZ,t,!1),o[0].hasOwnProperty("style")){this.colValue="style";var d=this.getColumnRange(o,this.colValue);this._setRangeDefaults(d,t.defaultValueMin,t.defaultValueMax),this.valueRange=d}this.getDataTable()[0].hasOwnProperty("filter")&&void 0===this.dataFilter&&(this.dataFilter=new a(this,"filter",t),this.dataFilter.setOnLoadCallback(function(){t.redraw()}));return this.dataFilter?this.dataFilter._getDataPoints():this._getDataPoints(this.getDataTable())}}},o.prototype._collectRangeSettings=function(t,e){if(-1==["x","y","z"].indexOf(t))throw new Error("Column '"+t+"' invalid");var i=t.toUpperCase();return{barWidth:this[t+"BarWidth"],min:e["default"+i+"Min"],max:e["default"+i+"Max"],step:e["default"+i+"Step"],range_label:t+"Range",step_label:t+"Step"}},o.prototype._initializeRange=function(t,e,i,o){var n=this._collectRangeSettings(e,i),s=this.getColumnRange(t,e);o&&"z"!=e&&s.expand(n.barWidth/2),this._setRangeDefaults(s,n.min,n.max),this[n.range_label]=s,this[n.step_label]=void 0!==n.step?n.step:s.range()/5},o.prototype.getDistinctValues=function(t,e){void 0===e&&(e=this.dataTable);for(var i=[],o=0;o<e.length;o++){var n=e[o][t]||0;-1===i.indexOf(n)&&i.push(n)}return i.sort(function(t,e){return t-e})},o.prototype.getSmallestDifference=function(t,e){for(var i=this.getDistinctValues(t,e),o=null,n=1;n<i.length;n++){var s=i[n]-i[n-1];(null==o||o>s)&&(o=s)}return o},o.prototype.getColumnRange=function(t,e){for(var i=new r,o=0;o<t.length;o++){var n=t[o][e];i.adjust(n)}return i},o.prototype.getNumberOfRows=function(){return this.dataTable.length},o.prototype._setRangeDefaults=function(t,e,i){void 0!==e&&(t.min=e),void 0!==i&&(t.max=i),t.max<=t.min&&(t.max=t.min+1)},o.prototype.getDataTable=function(){return this.dataTable},o.prototype.getDataSet=function(){return this.dataSet},o.prototype.getDataPoints=function(t){for(var e=[],i=0;i<t.length;i++){var o=new d;o.x=t[i][this.colX]||0,o.y=t[i][this.colY]||0,o.z=t[i][this.colZ]||0,o.data=t[i],void 0!==this.colValue&&(o.value=t[i][this.colValue]||0);var n={};n.point=o,n.bottom=new d(o.x,o.y,this.zRange.min),n.trans=void 0,n.screen=void 0,e.push(n)}return e},o.prototype.initDataAsMatrix=function(t){var e,i,o,n,s=this.getDistinctValues(this.colX,t),r=this.getDistinctValues(this.colY,t),a=this.getDataPoints(t),h=[];for(o=0;o<a.length;o++){n=a[o];var d=s.indexOf(n.point.x),l=r.indexOf(n.point.y);void 0===h[d]&&(h[d]=[]),h[d][l]=n}for(e=0;e<h.length;e++)for(i=0;i<h[e].length;i++)h[e][i]&&(h[e][i].pointRight=e<h.length-1?h[e+1][i]:void 0,h[e][i].pointTop=i<h[e].length-1?h[e][i+1]:void 0,h[e][i].pointCross=e<h.length-1&&i<h[e].length-1?h[e+1][i+1]:void 0);return a},o.prototype.getInfo=function(){var t=this.dataFilter;if(t)return t.getLabel()+": "+t.getSelectedValue()},o.prototype.reload=function(){this.dataTable&&this.setData(this.dataTable)},o.prototype._getDataPoints=function(t){var e=[];if(this.style===h.STYLE.GRID||this.style===h.STYLE.SURFACE)e=this.initDataAsMatrix(t);else if(this._checkValueField(t),e=this.getDataPoints(t),this.style===h.STYLE.LINE)for(var i=0;i<e.length;i++)i>0&&(e[i-1].pointNext=e[i]);return e},o.prototype._checkValueField=function(t){if(this.style===h.STYLE.BARCOLOR||this.style===h.STYLE.BARSIZE||this.style===h.STYLE.DOTCOLOR||this.style===h.STYLE.DOTSIZE){if(void 0===this.colValue)throw new Error("Expected data to have  field 'style'  for graph style '"+this.style+"'");if(void 0===t[0][this.colValue])throw new Error("Expected data to have  field '"+this.colValue+"'  for graph style '"+this.style+"'")}},t.exports=o},function(t,e,i){function o(){this.min=void 0,this.max=void 0}o.prototype.adjust=function(t){void 0!==t&&((void 0===this.min||this.min>t)&&(this.min=t),(void 0===this.max||this.max<t)&&(this.max=t))},o.prototype.combine=function(t){this.add(t.min),this.add(t.max)},o.prototype.expand=function(t){if(void 0!==t){var e=this.min-t,i=this.max+t;if(e>i)throw new Error("Passed expansion value makes range invalid");this.min=e,this.max=i}},o.prototype.range=function(){return this.max-this.min},o.prototype.center=function(){return(this.min+this.max)/2},t.exports=o},function(t,e,i){var o,n,s;!function(i){n=[],o=i,void 0!==(s="function"==typeof o?o.apply(e,n):o)&&(t.exports=s)}(function(){var t=null;return function e(i,o){function n(t){return t.match(/[^ ]+/g)}function s(e){if("hammer.input"!==e.type){if(e.srcEvent._handled||(e.srcEvent._handled={}),e.srcEvent._handled[e.type])return;e.srcEvent._handled[e.type]=!0}var i=!1;e.stopPropagation=function(){i=!0};var o=e.srcEvent.stopPropagation.bind(e.srcEvent);"function"==typeof o&&(e.srcEvent.stopPropagation=function(){o(),e.stopPropagation()}),e.firstTarget=t;for(var n=t;n&&!i;){var s=n.hammer;if(s)for(var r,a=0;a<s.length;a++)if(r=s[a]._handlers[e.type])for(var h=0;h<r.length&&!i;h++)r[h](e);n=n.parentNode}}var r=o||{preventDefault:!1};if(i.Manager){var a=i,h=function(t,i){var o=Object.create(r);return i&&a.assign(o,i),e(new a(t,o),o)};return a.assign(h,a),h.Manager=function(t,i){var o=Object.create(r);return i&&a.assign(o,i),e(new a.Manager(t,o),o)},h}var d=Object.create(i),l=i.element;return l.hammer||(l.hammer=[]),l.hammer.push(d),i.on("hammer.input",function(e){!0!==r.preventDefault&&r.preventDefault!==e.pointerType||e.preventDefault(),e.isFirst&&(t=e.target)}),d._handlers={},d.on=function(t,e){return n(t).forEach(function(t){var o=d._handlers[t];o||(d._handlers[t]=o=[],i.on(t,s)),o.push(e)}),d},d.off=function(t,e){return n(t).forEach(function(t){var o=d._handlers[t];o&&(o=e?o.filter(function(t){return t!==e}):[],o.length>0?d._handlers[t]=o:(i.off(t,s),delete d._handlers[t]))}),d},d.emit=function(e,o){t=o.target,i.emit(e,o)},d.destroy=function(){var t=i.element.hammer,e=t.indexOf(d);-1!==e&&t.splice(e,1),t.length||delete i.element.hammer,d._handlers={},i.destroy()},d}})},function(t,e,i){var o;!function(n,s,r,a){function h(t,e,i){return setTimeout(p(t,i),e)}function d(t,e,i){return!!Array.isArray(t)&&(l(t,i[e],i),!0)}function l(t,e,i){var o;if(t)if(t.forEach)t.forEach(e,i);else if(t.length!==a)for(o=0;o<t.length;)e.call(i,t[o],o,t),o++;else for(o in t)t.hasOwnProperty(o)&&e.call(i,t[o],o,t)}function u(t,e,i){var o="DEPRECATED METHOD: "+e+"\n"+i+" AT \n";return function(){var e=new Error("get-stack-trace"),i=e&&e.stack?e.stack.replace(/^[^\(]+?[\n$]/gm,"").replace(/^\s+at\s+/gm,"").replace(/^Object.<anonymous>\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",s=n.console&&(n.console.warn||n.console.log);return s&&s.call(n.console,o,i),t.apply(this,arguments)}}function c(t,e,i){var o,n=e.prototype;o=t.prototype=Object.create(n),o.constructor=t,o._super=n,i&&ft(o,i)}function p(t,e){return function(){return t.apply(e,arguments)}}function f(t,e){return typeof t==gt?t.apply(e?e[0]||a:a,e):t}function m(t,e){return t===a?e:t}function v(t,e,i){l(_(e),function(e){t.addEventListener(e,i,!1)})}function g(t,e,i){l(_(e),function(e){t.removeEventListener(e,i,!1)})}function y(t,e){for(;t;){if(t==e)return!0;t=t.parentNode}return!1}function b(t,e){return t.indexOf(e)>-1}function _(t){return t.trim().split(/\s+/g)}function w(t,e,i){if(t.indexOf&&!i)return t.indexOf(e);for(var o=0;o<t.length;){if(i&&t[o][i]==e||!i&&t[o]===e)return o;o++}return-1}function x(t){return Array.prototype.slice.call(t,0)}function k(t,e,i){for(var o=[],n=[],s=0;s<t.length;){var r=e?t[s][e]:t[s];w(n,r)<0&&o.push(t[s]),n[s]=r,s++}return i&&(o=e?o.sort(function(t,i){return t[e]>i[e]}):o.sort()),o}function S(t,e){for(var i,o,n=e[0].toUpperCase()+e.slice(1),s=0;s<mt.length;){if(i=mt[s],(o=i?i+n:e)in t)return o;s++}return a}function D(){return kt++}function M(t){var e=t.ownerDocument||t;return e.defaultView||e.parentWindow||n}function C(t,e){var i=this;this.manager=t,this.callback=e,this.element=t.element,this.target=t.options.inputTarget,this.domHandler=function(e){f(t.options.enable,[t])&&i.handler(e)},this.init()}function O(t){var e=t.options.inputClass;return new(e||(Mt?W:Ct?V:Dt?q:H))(t,E)}function E(t,e,i){var o=i.pointers.length,n=i.changedPointers.length,s=e&Et&&o-n==0,r=e&(Pt|It)&&o-n==0;i.isFirst=!!s,i.isFinal=!!r,s&&(t.session={}),i.eventType=e,T(t,i),t.emit("hammer.input",i),t.recognize(i),t.session.prevInput=i}function T(t,e){var i=t.session,o=e.pointers,n=o.length;i.firstInput||(i.firstInput=N(e)),n>1&&!i.firstMultiple?i.firstMultiple=N(e):1===n&&(i.firstMultiple=!1);var s=i.firstInput,r=i.firstMultiple,a=r?r.center:s.center,h=e.center=R(o);e.timeStamp=_t(),e.deltaTime=e.timeStamp-s.timeStamp,e.angle=F(a,h),e.distance=L(a,h),P(i,e),e.offsetDirection=z(e.deltaX,e.deltaY);var d=A(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=d.x,e.overallVelocityY=d.y,e.overallVelocity=bt(d.x)>bt(d.y)?d.x:d.y,e.scale=r?j(r.pointers,o):1,e.rotation=r?B(r.pointers,o):0,e.maxPointers=i.prevInput?e.pointers.length>i.prevInput.maxPointers?e.pointers.length:i.prevInput.maxPointers:e.pointers.length,I(i,e);var l=t.element;y(e.srcEvent.target,l)&&(l=e.srcEvent.target),e.target=l}function P(t,e){var i=e.center,o=t.offsetDelta||{},n=t.prevDelta||{},s=t.prevInput||{};e.eventType!==Et&&s.eventType!==Pt||(n=t.prevDelta={x:s.deltaX||0,y:s.deltaY||0},o=t.offsetDelta={x:i.x,y:i.y}),e.deltaX=n.x+(i.x-o.x),e.deltaY=n.y+(i.y-o.y)}function I(t,e){var i,o,n,s,r=t.lastInterval||e,h=e.timeStamp-r.timeStamp;if(e.eventType!=It&&(h>Ot||r.velocity===a)){var d=e.deltaX-r.deltaX,l=e.deltaY-r.deltaY,u=A(h,d,l);o=u.x,n=u.y,i=bt(u.x)>bt(u.y)?u.x:u.y,s=z(d,l),t.lastInterval=e}else i=r.velocity,o=r.velocityX,n=r.velocityY,s=r.direction;e.velocity=i,e.velocityX=o,e.velocityY=n,e.direction=s}function N(t){for(var e=[],i=0;i<t.pointers.length;)e[i]={clientX:yt(t.pointers[i].clientX),clientY:yt(t.pointers[i].clientY)},i++;return{timeStamp:_t(),pointers:e,center:R(e),deltaX:t.deltaX,deltaY:t.deltaY}}function R(t){var e=t.length;if(1===e)return{x:yt(t[0].clientX),y:yt(t[0].clientY)};for(var i=0,o=0,n=0;n<e;)i+=t[n].clientX,o+=t[n].clientY,n++;return{x:yt(i/e),y:yt(o/e)}}function A(t,e,i){return{x:e/t||0,y:i/t||0}}function z(t,e){return t===e?Nt:bt(t)>=bt(e)?t<0?Rt:At:e<0?zt:Lt}function L(t,e,i){i||(i=Ht);var o=e[i[0]]-t[i[0]],n=e[i[1]]-t[i[1]];return Math.sqrt(o*o+n*n)}function F(t,e,i){i||(i=Ht);var o=e[i[0]]-t[i[0]],n=e[i[1]]-t[i[1]];return 180*Math.atan2(n,o)/Math.PI}function B(t,e){return F(e[1],e[0],Wt)+F(t[1],t[0],Wt)}function j(t,e){return L(e[0],e[1],Wt)/L(t[0],t[1],Wt)}function H(){this.evEl=Gt,this.evWin=Vt,this.pressed=!1,C.apply(this,arguments)}function W(){this.evEl=Xt,this.evWin=Zt,C.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function Y(){this.evTarget=Jt,this.evWin=$t,this.started=!1,C.apply(this,arguments)}function G(t,e){var i=x(t.touches),o=x(t.changedTouches);return e&(Pt|It)&&(i=k(i.concat(o),"identifier",!0)),[i,o]}function V(){this.evTarget=te,this.targetIds={},C.apply(this,arguments)}function U(t,e){var i=x(t.touches),o=this.targetIds;if(e&(Et|Tt)&&1===i.length)return o[i[0].identifier]=!0,[i,i];var n,s,r=x(t.changedTouches),a=[],h=this.target;if(s=i.filter(function(t){return y(t.target,h)}),e===Et)for(n=0;n<s.length;)o[s[n].identifier]=!0,n++;for(n=0;n<r.length;)o[r[n].identifier]&&a.push(r[n]),e&(Pt|It)&&delete o[r[n].identifier],n++;return a.length?[k(s.concat(a),"identifier",!0),a]:void 0}function q(){C.apply(this,arguments);var t=p(this.handler,this);this.touch=new V(this.manager,t),this.mouse=new H(this.manager,t),this.primaryTouch=null,this.lastTouches=[]}function X(t,e){t&Et?(this.primaryTouch=e.changedPointers[0].identifier,Z.call(this,e)):t&(Pt|It)&&Z.call(this,e)}function Z(t){var e=t.changedPointers[0];if(e.identifier===this.primaryTouch){var i={x:e.clientX,y:e.clientY};this.lastTouches.push(i);var o=this.lastTouches,n=function(){var t=o.indexOf(i);t>-1&&o.splice(t,1)};setTimeout(n,ee)}}function K(t){for(var e=t.srcEvent.clientX,i=t.srcEvent.clientY,o=0;o<this.lastTouches.length;o++){var n=this.lastTouches[o],s=Math.abs(e-n.x),r=Math.abs(i-n.y);if(s<=ie&&r<=ie)return!0}return!1}function J(t,e){this.manager=t,this.set(e)}function $(t){if(b(t,ae))return ae;var e=b(t,he),i=b(t,de);return e&&i?ae:e||i?e?he:de:b(t,re)?re:se}function Q(t){this.options=ft({},this.defaults,t||{}),this.id=D(),this.manager=null,this.options.enable=m(this.options.enable,!0),this.state=ue,this.simultaneous={},this.requireFail=[]}
+function tt(t){return t&ve?"cancel":t&fe?"end":t&pe?"move":t&ce?"start":""}function et(t){return t==Lt?"down":t==zt?"up":t==Rt?"left":t==At?"right":""}function it(t,e){var i=e.manager;return i?i.get(t):t}function ot(){Q.apply(this,arguments)}function nt(){ot.apply(this,arguments),this.pX=null,this.pY=null}function st(){ot.apply(this,arguments)}function rt(){Q.apply(this,arguments),this._timer=null,this._input=null}function at(){ot.apply(this,arguments)}function ht(){ot.apply(this,arguments)}function dt(){Q.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}function lt(t,e){return e=e||{},e.recognizers=m(e.recognizers,lt.defaults.preset),new ut(t,e)}function ut(t,e){this.options=ft({},lt.defaults,e||{}),this.options.inputTarget=this.options.inputTarget||t,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=t,this.input=O(this),this.touchAction=new J(this,this.options.touchAction),ct(this,!0),l(this.options.recognizers,function(t){var e=this.add(new t[0](t[1]));t[2]&&e.recognizeWith(t[2]),t[3]&&e.requireFailure(t[3])},this)}function ct(t,e){var i=t.element;if(i.style){var o;l(t.options.cssProps,function(n,s){o=S(i.style,s),e?(t.oldCssProps[o]=i.style[o],i.style[o]=n):i.style[o]=t.oldCssProps[o]||""}),e||(t.oldCssProps={})}}function pt(t,e){var i=s.createEvent("Event");i.initEvent(t,!0,!0),i.gesture=e,e.target.dispatchEvent(i)}var ft,mt=["","webkit","Moz","MS","ms","o"],vt=s.createElement("div"),gt="function",yt=Math.round,bt=Math.abs,_t=Date.now;ft="function"!=typeof Object.assign?function(t){if(t===a||null===t)throw new TypeError("Cannot convert undefined or null to object");for(var e=Object(t),i=1;i<arguments.length;i++){var o=arguments[i];if(o!==a&&null!==o)for(var n in o)o.hasOwnProperty(n)&&(e[n]=o[n])}return e}:Object.assign;var wt=u(function(t,e,i){for(var o=Object.keys(e),n=0;n<o.length;)(!i||i&&t[o[n]]===a)&&(t[o[n]]=e[o[n]]),n++;return t},"extend","Use `assign`."),xt=u(function(t,e){return wt(t,e,!0)},"merge","Use `assign`."),kt=1,St=/mobile|tablet|ip(ad|hone|od)|android/i,Dt="ontouchstart"in n,Mt=S(n,"PointerEvent")!==a,Ct=Dt&&St.test(navigator.userAgent),Ot=25,Et=1,Tt=2,Pt=4,It=8,Nt=1,Rt=2,At=4,zt=8,Lt=16,Ft=Rt|At,Bt=zt|Lt,jt=Ft|Bt,Ht=["x","y"],Wt=["clientX","clientY"];C.prototype={handler:function(){},init:function(){this.evEl&&v(this.element,this.evEl,this.domHandler),this.evTarget&&v(this.target,this.evTarget,this.domHandler),this.evWin&&v(M(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&g(this.element,this.evEl,this.domHandler),this.evTarget&&g(this.target,this.evTarget,this.domHandler),this.evWin&&g(M(this.element),this.evWin,this.domHandler)}};var Yt={mousedown:Et,mousemove:Tt,mouseup:Pt},Gt="mousedown",Vt="mousemove mouseup";c(H,C,{handler:function(t){var e=Yt[t.type];e&Et&&0===t.button&&(this.pressed=!0),e&Tt&&1!==t.which&&(e=Pt),this.pressed&&(e&Pt&&(this.pressed=!1),this.callback(this.manager,e,{pointers:[t],changedPointers:[t],pointerType:"mouse",srcEvent:t}))}});var Ut={pointerdown:Et,pointermove:Tt,pointerup:Pt,pointercancel:It,pointerout:It},qt={2:"touch",3:"pen",4:"mouse",5:"kinect"},Xt="pointerdown",Zt="pointermove pointerup pointercancel";n.MSPointerEvent&&!n.PointerEvent&&(Xt="MSPointerDown",Zt="MSPointerMove MSPointerUp MSPointerCancel"),c(W,C,{handler:function(t){var e=this.store,i=!1,o=t.type.toLowerCase().replace("ms",""),n=Ut[o],s=qt[t.pointerType]||t.pointerType,r="touch"==s,a=w(e,t.pointerId,"pointerId");n&Et&&(0===t.button||r)?a<0&&(e.push(t),a=e.length-1):n&(Pt|It)&&(i=!0),a<0||(e[a]=t,this.callback(this.manager,n,{pointers:e,changedPointers:[t],pointerType:s,srcEvent:t}),i&&e.splice(a,1))}});var Kt={touchstart:Et,touchmove:Tt,touchend:Pt,touchcancel:It},Jt="touchstart",$t="touchstart touchmove touchend touchcancel";c(Y,C,{handler:function(t){var e=Kt[t.type];if(e===Et&&(this.started=!0),this.started){var i=G.call(this,t,e);e&(Pt|It)&&i[0].length-i[1].length==0&&(this.started=!1),this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:"touch",srcEvent:t})}}});var Qt={touchstart:Et,touchmove:Tt,touchend:Pt,touchcancel:It},te="touchstart touchmove touchend touchcancel";c(V,C,{handler:function(t){var e=Qt[t.type],i=U.call(this,t,e);i&&this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:"touch",srcEvent:t})}});var ee=2500,ie=25;c(q,C,{handler:function(t,e,i){var o="touch"==i.pointerType,n="mouse"==i.pointerType;if(!(n&&i.sourceCapabilities&&i.sourceCapabilities.firesTouchEvents)){if(o)X.call(this,e,i);else if(n&&K.call(this,i))return;this.callback(t,e,i)}},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var oe=S(vt.style,"touchAction"),ne=oe!==a,se="auto",re="manipulation",ae="none",he="pan-x",de="pan-y",le=function(){if(!ne)return!1;var t={},e=n.CSS&&n.CSS.supports;return["auto","manipulation","pan-y","pan-x","pan-x pan-y","none"].forEach(function(i){t[i]=!e||n.CSS.supports("touch-action",i)}),t}();J.prototype={set:function(t){"compute"==t&&(t=this.compute()),ne&&this.manager.element.style&&le[t]&&(this.manager.element.style[oe]=t),this.actions=t.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var t=[];return l(this.manager.recognizers,function(e){f(e.options.enable,[e])&&(t=t.concat(e.getTouchAction()))}),$(t.join(" "))},preventDefaults:function(t){var e=t.srcEvent,i=t.offsetDirection;if(this.manager.session.prevented)return void e.preventDefault();var o=this.actions,n=b(o,ae)&&!le[ae],s=b(o,de)&&!le[de],r=b(o,he)&&!le[he];if(n){var a=1===t.pointers.length,h=t.distance<2,d=t.deltaTime<250;if(a&&h&&d)return}return r&&s?void 0:n||s&&i&Ft||r&&i&Bt?this.preventSrc(e):void 0},preventSrc:function(t){this.manager.session.prevented=!0,t.preventDefault()}};var ue=1,ce=2,pe=4,fe=8,me=fe,ve=16;Q.prototype={defaults:{},set:function(t){return ft(this.options,t),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(t){if(d(t,"recognizeWith",this))return this;var e=this.simultaneous;return t=it(t,this),e[t.id]||(e[t.id]=t,t.recognizeWith(this)),this},dropRecognizeWith:function(t){return d(t,"dropRecognizeWith",this)?this:(t=it(t,this),delete this.simultaneous[t.id],this)},requireFailure:function(t){if(d(t,"requireFailure",this))return this;var e=this.requireFail;return t=it(t,this),-1===w(e,t)&&(e.push(t),t.requireFailure(this)),this},dropRequireFailure:function(t){if(d(t,"dropRequireFailure",this))return this;t=it(t,this);var e=w(this.requireFail,t);return e>-1&&this.requireFail.splice(e,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(t){return!!this.simultaneous[t.id]},emit:function(t){function e(e){i.manager.emit(e,t)}var i=this,o=this.state;o<fe&&e(i.options.event+tt(o)),e(i.options.event),t.additionalEvent&&e(t.additionalEvent),o>=fe&&e(i.options.event+tt(o))},tryEmit:function(t){if(this.canEmit())return this.emit(t);this.state=32},canEmit:function(){for(var t=0;t<this.requireFail.length;){if(!(this.requireFail[t].state&(32|ue)))return!1;t++}return!0},recognize:function(t){var e=ft({},t);if(!f(this.options.enable,[this,e]))return this.reset(),void(this.state=32);this.state&(me|ve|32)&&(this.state=ue),this.state=this.process(e),this.state&(ce|pe|fe|ve)&&this.tryEmit(e)},process:function(t){},getTouchAction:function(){},reset:function(){}},c(ot,Q,{defaults:{pointers:1},attrTest:function(t){var e=this.options.pointers;return 0===e||t.pointers.length===e},process:function(t){var e=this.state,i=t.eventType,o=e&(ce|pe),n=this.attrTest(t);return o&&(i&It||!n)?e|ve:o||n?i&Pt?e|fe:e&ce?e|pe:ce:32}}),c(nt,ot,{defaults:{event:"pan",threshold:10,pointers:1,direction:jt},getTouchAction:function(){var t=this.options.direction,e=[];return t&Ft&&e.push(de),t&Bt&&e.push(he),e},directionTest:function(t){var e=this.options,i=!0,o=t.distance,n=t.direction,s=t.deltaX,r=t.deltaY;return n&e.direction||(e.direction&Ft?(n=0===s?Nt:s<0?Rt:At,i=s!=this.pX,o=Math.abs(t.deltaX)):(n=0===r?Nt:r<0?zt:Lt,i=r!=this.pY,o=Math.abs(t.deltaY))),t.direction=n,i&&o>e.threshold&&n&e.direction},attrTest:function(t){return ot.prototype.attrTest.call(this,t)&&(this.state&ce||!(this.state&ce)&&this.directionTest(t))},emit:function(t){this.pX=t.deltaX,this.pY=t.deltaY;var e=et(t.direction);e&&(t.additionalEvent=this.options.event+e),this._super.emit.call(this,t)}}),c(st,ot,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[ae]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.scale-1)>this.options.threshold||this.state&ce)},emit:function(t){if(1!==t.scale){var e=t.scale<1?"in":"out";t.additionalEvent=this.options.event+e}this._super.emit.call(this,t)}}),c(rt,Q,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return[se]},process:function(t){var e=this.options,i=t.pointers.length===e.pointers,o=t.distance<e.threshold,n=t.deltaTime>e.time;if(this._input=t,!o||!i||t.eventType&(Pt|It)&&!n)this.reset();else if(t.eventType&Et)this.reset(),this._timer=h(function(){this.state=me,this.tryEmit()},e.time,this);else if(t.eventType&Pt)return me;return 32},reset:function(){clearTimeout(this._timer)},emit:function(t){this.state===me&&(t&&t.eventType&Pt?this.manager.emit(this.options.event+"up",t):(this._input.timeStamp=_t(),this.manager.emit(this.options.event,this._input)))}}),c(at,ot,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[ae]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.rotation)>this.options.threshold||this.state&ce)}}),c(ht,ot,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:Ft|Bt,pointers:1},getTouchAction:function(){return nt.prototype.getTouchAction.call(this)},attrTest:function(t){var e,i=this.options.direction;return i&(Ft|Bt)?e=t.overallVelocity:i&Ft?e=t.overallVelocityX:i&Bt&&(e=t.overallVelocityY),this._super.attrTest.call(this,t)&&i&t.offsetDirection&&t.distance>this.options.threshold&&t.maxPointers==this.options.pointers&&bt(e)>this.options.velocity&&t.eventType&Pt},emit:function(t){var e=et(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)}}),c(dt,Q,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[re]},process:function(t){var e=this.options,i=t.pointers.length===e.pointers,o=t.distance<e.threshold,n=t.deltaTime<e.time;if(this.reset(),t.eventType&Et&&0===this.count)return this.failTimeout();if(o&&n&&i){if(t.eventType!=Pt)return this.failTimeout();var s=!this.pTime||t.timeStamp-this.pTime<e.interval,r=!this.pCenter||L(this.pCenter,t.center)<e.posThreshold;this.pTime=t.timeStamp,this.pCenter=t.center,r&&s?this.count+=1:this.count=1,this._input=t;if(0===this.count%e.taps)return this.hasRequireFailures()?(this._timer=h(function(){this.state=me,this.tryEmit()},e.interval,this),ce):me}return 32},failTimeout:function(){return this._timer=h(function(){this.state=32},this.options.interval,this),32},reset:function(){clearTimeout(this._timer)},emit:function(){this.state==me&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))}}),lt.VERSION="2.0.7",lt.defaults={domEvents:!1,touchAction:"compute",enable:!0,inputTarget:null,inputClass:null,preset:[[at,{enable:!1}],[st,{enable:!1},["rotate"]],[ht,{direction:Ft}],[nt,{direction:Ft},["swipe"]],[dt],[dt,{event:"doubletap",taps:2},["tap"]],[rt]],cssProps:{userSelect:"none",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}};ut.prototype={set:function(t){return ft(this.options,t),t.touchAction&&this.touchAction.update(),t.inputTarget&&(this.input.destroy(),this.input.target=t.inputTarget,this.input.init()),this},stop:function(t){this.session.stopped=t?2:1},recognize:function(t){var e=this.session;if(!e.stopped){this.touchAction.preventDefaults(t);var i,o=this.recognizers,n=e.curRecognizer;(!n||n&&n.state&me)&&(n=e.curRecognizer=null);for(var s=0;s<o.length;)i=o[s],2===e.stopped||n&&i!=n&&!i.canRecognizeWith(n)?i.reset():i.recognize(t),!n&&i.state&(ce|pe|fe)&&(n=e.curRecognizer=i),s++}},get:function(t){if(t instanceof Q)return t;for(var e=this.recognizers,i=0;i<e.length;i++)if(e[i].options.event==t)return e[i];return null},add:function(t){if(d(t,"add",this))return this;var e=this.get(t.options.event);return e&&this.remove(e),this.recognizers.push(t),t.manager=this,this.touchAction.update(),t},remove:function(t){if(d(t,"remove",this))return this;if(t=this.get(t)){var e=this.recognizers,i=w(e,t);-1!==i&&(e.splice(i,1),this.touchAction.update())}return this},on:function(t,e){if(t!==a&&e!==a){var i=this.handlers;return l(_(t),function(t){i[t]=i[t]||[],i[t].push(e)}),this}},off:function(t,e){if(t!==a){var i=this.handlers;return l(_(t),function(t){e?i[t]&&i[t].splice(w(i[t],e),1):delete i[t]}),this}},emit:function(t,e){this.options.domEvents&&pt(t,e);var i=this.handlers[t]&&this.handlers[t].slice();if(i&&i.length){e.type=t,e.preventDefault=function(){e.srcEvent.preventDefault()};for(var o=0;o<i.length;)i[o](e),o++}},destroy:function(){this.element&&ct(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}},ft(lt,{INPUT_START:Et,INPUT_MOVE:Tt,INPUT_END:Pt,INPUT_CANCEL:It,STATE_POSSIBLE:ue,STATE_BEGAN:ce,STATE_CHANGED:pe,STATE_ENDED:fe,STATE_RECOGNIZED:me,STATE_CANCELLED:ve,STATE_FAILED:32,DIRECTION_NONE:Nt,DIRECTION_LEFT:Rt,DIRECTION_RIGHT:At,DIRECTION_UP:zt,DIRECTION_DOWN:Lt,DIRECTION_HORIZONTAL:Ft,DIRECTION_VERTICAL:Bt,DIRECTION_ALL:jt,Manager:ut,Input:C,TouchAction:J,TouchInput:V,MouseInput:H,PointerEventInput:W,TouchMouseInput:q,SingleTouchInput:Y,Recognizer:Q,AttrRecognizer:ot,Tap:dt,Pan:nt,Swipe:ht,Pinch:st,Rotate:at,Press:rt,on:v,off:g,each:l,merge:xt,extend:wt,assign:ft,inherit:c,bindFn:p,prefixed:S}),(void 0!==n?n:"undefined"!=typeof self?self:{}).Hammer=lt,(o=function(){return lt}.call(e,i,e,t))!==a&&(t.exports=o)}(window,document)},function(t,e,i){e.util=i(2),e.DOMutil=i(14),e.DataSet=i(11),e.DataView=i(12),e.Queue=i(43),e.Timeline=i(178),e.Graph2d=i(180),e.timeline={Core:i(65),DateUtil:i(36),Range:i(64),stack:i(100),TimeStep:i(66),components:{items:{Item:i(38),BackgroundItem:i(103),BoxItem:i(101),PointItem:i(102),RangeItem:i(70)},BackgroundGroup:i(69),Component:i(16),CurrentTime:i(67),CustomTime:i(46),DataAxis:i(107),DataScale:i(108),GraphGroup:i(109),Group:i(68),ItemSet:i(99),Legend:i(112),LineGraph:i(106),TimeAxis:i(45)}},e.moment=i(9),e.Hammer=i(10),e.keycharm=i(35)},function(t,e,i){function o(t,e,i,n){if(!(this instanceof o))throw new SyntaxError("Constructor must be called with the new operator");if(!(Array.isArray(i)||i instanceof d||i instanceof l)&&i instanceof Object){var s=n;n=i,i=s}n&&n.throttleRedraw&&console.warn('Timeline option "throttleRedraw" is DEPRICATED and no longer supported. It will be removed in the next MAJOR release.');var r=this;if(this.defaultOptions={start:null,end:null,autoResize:!0,orientation:{axis:"bottom",item:"bottom"},moment:a,width:null,height:null,maxHeight:null,minHeight:null},this.options=h.deepExtend({},this.defaultOptions),this._create(t),!n||n&&void 0===n.rtl){this.dom.root.style.visibility="hidden";for(var c,m=this.dom.root;!c&&m;)c=window.getComputedStyle(m,null).direction,m=m.parentElement;this.options.rtl=c&&"rtl"==c.toLowerCase()}else this.options.rtl=n.rtl;this.options.rollingMode=n&&n.rollingMode,this.options.onInitialDrawComplete=n&&n.onInitialDrawComplete,this.components=[],this.body={dom:this.dom,domProps:this.props,emitter:{on:this.on.bind(this),off:this.off.bind(this),emit:this.emit.bind(this)},hiddenDates:[],util:{getScale:function(){return r.timeAxis.step.scale},getStep:function(){return r.timeAxis.step.step},toScreen:r._toScreen.bind(r),toGlobalScreen:r._toGlobalScreen.bind(r),toTime:r._toTime.bind(r),toGlobalTime:r._toGlobalTime.bind(r)}},this.range=new u(this.body,this.options),this.components.push(this.range),this.body.range=this.range,this.timeAxis=new p(this.body,this.options),this.timeAxis2=null,this.components.push(this.timeAxis),this.currentTime=new f(this.body,this.options),this.components.push(this.currentTime),this.itemSet=new v(this.body,this.options),this.components.push(this.itemSet),this.itemsData=null,this.groupsData=null,this.dom.root.onclick=function(t){r.emit("click",r.getEventProperties(t))},this.dom.root.ondblclick=function(t){r.emit("doubleClick",r.getEventProperties(t))},this.dom.root.oncontextmenu=function(t){r.emit("contextmenu",r.getEventProperties(t))},this.dom.root.onmouseover=function(t){r.emit("mouseOver",r.getEventProperties(t))},window.PointerEvent?(this.dom.root.onpointerdown=function(t){r.emit("mouseDown",r.getEventProperties(t))},this.dom.root.onpointermove=function(t){r.emit("mouseMove",r.getEventProperties(t))},this.dom.root.onpointerup=function(t){r.emit("mouseUp",r.getEventProperties(t))}):(this.dom.root.onmousemove=function(t){r.emit("mouseMove",r.getEventProperties(t))},this.dom.root.onmousedown=function(t){r.emit("mouseDown",r.getEventProperties(t))},this.dom.root.onmouseup=function(t){r.emit("mouseUp",r.getEventProperties(t))}),this.initialFitDone=!1,this.on("changed",function(){if(null!=this.itemsData&&!this.options.rollingMode){if(!r.initialFitDone)if(r.initialFitDone=!0,void 0!=r.options.start||void 0!=r.options.end){if(void 0==r.options.start||void 0==r.options.end)var t=r.getItemRange();var e=void 0!=r.options.start?r.options.start:t.min,i=void 0!=r.options.end?r.options.end:t.max;r.setWindow(e,i,{animation:!1})}else r.fit({animation:!1});!r.initialDrawDone&&r.initialRangeChangeDone&&(r.initialDrawDone=!0,r.dom.root.style.visibility="visible",r.options.onInitialDrawComplete&&setTimeout(function(){return r.options.onInitialDrawComplete()},0))}}),n&&this.setOptions(n),i&&this.setGroups(i),e&&this.setItems(e),this._redraw()}function n(t){return h.convert(t.data.start,"Date").valueOf()}function s(t){var e=void 0!=t.data.end?t.data.end:t.data.start;return h.convert(e,"Date").valueOf()}function r(t,e){var i=t.props.leftContainer.height,o=t.props.left.height,n=e.parent,s=n.top,r=!0,a=t.timeAxis.options.orientation.axis,h=function(){return"bottom"==a?n.height-e.top-e.height:e.top},d=-1*t._getScrollTop(),l=s+h(),u=e.height;return l<d?s+i<=s+h()+u&&(s+=h()-t.itemSet.options.margin.item.vertical):l+u>d+i?s+=h()+u-i+t.itemSet.options.margin.item.vertical:r=!1,s=Math.min(s,o-i),{shouldScroll:r,scrollOffset:s,itemTop:l}}var a=i(9),h=i(2),d=i(11),l=i(12),u=i(64),c=i(65),p=i(45),f=i(67),m=i(46),v=i(99),g=i(15).printStyle,y=i(105).allOptions,b=i(105).configureOptions,_=i(71).default,w=i(15).default;o.prototype=new c,o.prototype._createConfigurator=function(){return new _(this,this.dom.container,b)},o.prototype.redraw=function(){this.itemSet&&this.itemSet.markDirty({refreshItems:!0}),this._redraw()},o.prototype.setOptions=function(t){if(!0===w.validate(t,y)&&console.log("%cErrors have been found in the supplied options object.",g),c.prototype.setOptions.call(this,t),"type"in t&&t.type!==this.options.type){this.options.type=t.type;var e=this.itemsData;if(e){var i=this.getSelection();this.setItems(null),this.setItems(e),this.setSelection(i)}}},o.prototype.setItems=function(t){var e;e=t?t instanceof d||t instanceof l?t:new d(t,{type:{start:"Date",end:"Date"}}):null,this.itemsData=e,this.itemSet&&this.itemSet.setItems(e)},o.prototype.setGroups=function(t){var e;if(t){var i=function(t){return!1!==t.visible};e=t instanceof d||t instanceof l?new l(t,{filter:i}):new d(t.filter(i))}else e=null;this.groupsData=e,this.itemSet.setGroups(e)},o.prototype.setData=function(t){t&&t.groups&&this.setGroups(t.groups),t&&t.items&&this.setItems(t.items)},o.prototype.setSelection=function(t,e){this.itemSet&&this.itemSet.setSelection(t),e&&e.focus&&this.focus(t,e)},o.prototype.getSelection=function(){return this.itemSet&&this.itemSet.getSelection()||[]},o.prototype.focus=function(t,e){if(this.itemsData&&void 0!=t){var i=Array.isArray(t)?t:[t],o=this.itemsData.getDataSet().get(i,{type:{start:"Date",end:"Date"}}),n=null,s=null;if(o.forEach(function(t){var e=t.start.valueOf(),i="end"in t?t.end.valueOf():t.start.valueOf();(null===n||e<n)&&(n=e),(null===s||i>s)&&(s=i)}),null!==n&&null!==s){var a=this,h=this.itemSet.items[i[0]],d=-1*this._getScrollTop(),l=null,u=function(t,e,i){var o=r(a,h);if(l||(l=o),l.itemTop!=o.itemTop||l.shouldScroll){l.itemTop!=o.itemTop&&o.shouldScroll&&(l=o,d=-1*a._getScrollTop());var n=d,s=l.scrollOffset,u=i?s:n+(s-n)*t;a._setScrollTop(-u),e||a._redraw()}},c=function(){var t=r(a,h);t.shouldScroll&&t.itemTop!=l.itemTop&&(a._setScrollTop(-t.scrollOffset),a._redraw())},p=function(){c(),setTimeout(c,100)},f=(n+s)/2,m=Math.max(this.range.end-this.range.start,1.1*(s-n)),v=!e||void 0===e.animation||e.animation;v||(l={shouldScroll:!1,scrollOffset:-1,itemTop:-1}),this.range.setRange(f-m/2,f+m/2,{animation:v},p,u)}}},o.prototype.fit=function(t,e){var i,o=!t||void 0===t.animation||t.animation,n=this.itemsData&&this.itemsData.getDataSet();1===n.length&&void 0===n.get()[0].end?(i=this.getDataRange(),this.moveTo(i.min.valueOf(),{animation:o},e)):(i=this.getItemRange(),this.range.setRange(i.min,i.max,{animation:o},e))},o.prototype.getItemRange=function(){var t=this.getDataRange(),e=null!==t.min?t.min.valueOf():null,i=null!==t.max?t.max.valueOf():null,o=null,r=null;if(null!=e&&null!=i){var a=i-e;a<=0&&(a=10);var d=a/this.props.center.width,l={},u=0;h.forEach(this.itemSet.items,function(t,e){if(t.groupShowing){l[e]=t.redraw(!0),u=l[e].length}});if(u>0)for(var c=0;c<u;c++)h.forEach(l,function(t){t[c]()});if(h.forEach(this.itemSet.items,function(t){var a,h,l=n(t),u=s(t);this.options.rtl?(a=l-(t.getWidthRight()+10)*d,h=u+(t.getWidthLeft()+10)*d):(a=l-(t.getWidthLeft()+10)*d,h=u+(t.getWidthRight()+10)*d),a<e&&(e=a,o=t),h>i&&(i=h,r=t)}.bind(this)),o&&r){var p=o.getWidthLeft()+10,f=r.getWidthRight()+10,m=this.props.center.width-p-f;m>0&&(this.options.rtl?(e=n(o)-f*a/m,i=s(r)+p*a/m):(e=n(o)-p*a/m,i=s(r)+f*a/m))}}return{min:null!=e?new Date(e):null,max:null!=i?new Date(i):null}},o.prototype.getDataRange=function(){var t=null,e=null,i=this.itemsData&&this.itemsData.getDataSet();return i&&i.forEach(function(i){var o=h.convert(i.start,"Date").valueOf(),n=h.convert(void 0!=i.end?i.end:i.start,"Date").valueOf();(null===t||o<t)&&(t=o),(null===e||n>e)&&(e=n)}),{min:null!=t?new Date(t):null,max:null!=e?new Date(e):null}},o.prototype.getEventProperties=function(t){var e,i=t.center?t.center.x:t.clientX,o=t.center?t.center.y:t.clientY;e=this.options.rtl?h.getAbsoluteRight(this.dom.centerContainer)-i:i-h.getAbsoluteLeft(this.dom.centerContainer);var n=o-h.getAbsoluteTop(this.dom.centerContainer),s=this.itemSet.itemFromTarget(t),r=this.itemSet.groupFromTarget(t),a=m.customTimeFromTarget(t),d=this.itemSet.options.snap||null,l=this.body.util.getScale(),u=this.body.util.getStep(),c=this._toTime(e),p=d?d(c,l,u):c,f=h.getTarget(t),v=null;return null!=s?v="item":null!=a?v="custom-time":h.hasParent(f,this.timeAxis.dom.foreground)?v="axis":this.timeAxis2&&h.hasParent(f,this.timeAxis2.dom.foreground)?v="axis":h.hasParent(f,this.itemSet.dom.labelSet)?v="group-label":h.hasParent(f,this.currentTime.bar)?v="current-time":h.hasParent(f,this.dom.center)&&(v="background"),{event:t,item:s?s.id:null,group:r?r.groupId:null,what:v,pageX:t.srcEvent?t.srcEvent.pageX:t.pageX,pageY:t.srcEvent?t.srcEvent.pageY:t.pageY,x:e,y:n,time:c,snappedTime:p}},o.prototype.toggleRollingMode=function(){this.range.rolling?this.range.stopRolling():(void 0==this.options.rollingMode&&this.setOptions(this.options),this.range.startRolling())},t.exports=o},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(19),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(10),u=i(37),c=i(2),p=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;(0,a.default)(this,t),this.pixelRatio=e,this.generated=!1,this.centerCoordinates={x:144.5,y:144.5},this.r=289*.49,this.color={r:255,g:255,b:255,a:1},this.hueCircle=void 0,this.initialColor={r:255,g:255,b:255,a:1},this.previousColor=void 0,this.applied=!1,this.updateCallback=function(){},this.closeCallback=function(){},this._create()}return(0,d.default)(t,[{key:"insertTo",value:function(t){void 0!==this.hammer&&(this.hammer.destroy(),this.hammer=void 0),this.container=t,this.container.appendChild(this.frame),this._bindHammer(),this._setSize()}},{key:"setUpdateCallback",value:function(t){if("function"!=typeof t)throw new Error("Function attempted to set as colorPicker update callback is not a function.");this.updateCallback=t}},{key:"setCloseCallback",value:function(t){if("function"!=typeof t)throw new Error("Function attempted to set as colorPicker closing callback is not a function.");this.closeCallback=t}},{key:"_isColorString",value:function(t){var e={black:"#000000",navy:"#000080",darkblue:"#00008B",mediumblue:"#0000CD",blue:"#0000FF",darkgreen:"#006400",green:"#008000",teal:"#008080",darkcyan:"#008B8B",deepskyblue:"#00BFFF",darkturquoise:"#00CED1",mediumspringgreen:"#00FA9A",lime:"#00FF00",springgreen:"#00FF7F",aqua:"#00FFFF",cyan:"#00FFFF",midnightblue:"#191970",dodgerblue:"#1E90FF",lightseagreen:"#20B2AA",forestgreen:"#228B22",seagreen:"#2E8B57",darkslategray:"#2F4F4F",limegreen:"#32CD32",mediumseagreen:"#3CB371",turquoise:"#40E0D0",royalblue:"#4169E1",steelblue:"#4682B4",darkslateblue:"#483D8B",mediumturquoise:"#48D1CC",indigo:"#4B0082",darkolivegreen:"#556B2F",cadetblue:"#5F9EA0",cornflowerblue:"#6495ED",mediumaquamarine:"#66CDAA",dimgray:"#696969",slateblue:"#6A5ACD",olivedrab:"#6B8E23",slategray:"#708090",lightslategray:"#778899",mediumslateblue:"#7B68EE",lawngreen:"#7CFC00",chartreuse:"#7FFF00",aquamarine:"#7FFFD4",maroon:"#800000",purple:"#800080",olive:"#808000",gray:"#808080",skyblue:"#87CEEB",lightskyblue:"#87CEFA",blueviolet:"#8A2BE2",darkred:"#8B0000",darkmagenta:"#8B008B",saddlebrown:"#8B4513",darkseagreen:"#8FBC8F",lightgreen:"#90EE90",mediumpurple:"#9370D8",darkviolet:"#9400D3",palegreen:"#98FB98",darkorchid:"#9932CC",yellowgreen:"#9ACD32",sienna:"#A0522D",brown:"#A52A2A",darkgray:"#A9A9A9",lightblue:"#ADD8E6",greenyellow:"#ADFF2F",paleturquoise:"#AFEEEE",lightsteelblue:"#B0C4DE",powderblue:"#B0E0E6",firebrick:"#B22222",darkgoldenrod:"#B8860B",mediumorchid:"#BA55D3",rosybrown:"#BC8F8F",darkkhaki:"#BDB76B",silver:"#C0C0C0",mediumvioletred:"#C71585",indianred:"#CD5C5C",peru:"#CD853F",chocolate:"#D2691E",tan:"#D2B48C",lightgrey:"#D3D3D3",palevioletred:"#D87093",thistle:"#D8BFD8",orchid:"#DA70D6",goldenrod:"#DAA520",crimson:"#DC143C",gainsboro:"#DCDCDC",plum:"#DDA0DD",burlywood:"#DEB887",lightcyan:"#E0FFFF",lavender:"#E6E6FA",darksalmon:"#E9967A",violet:"#EE82EE",palegoldenrod:"#EEE8AA",lightcoral:"#F08080",khaki:"#F0E68C",aliceblue:"#F0F8FF",honeydew:"#F0FFF0",azure:"#F0FFFF",sandybrown:"#F4A460",wheat:"#F5DEB3",beige:"#F5F5DC",whitesmoke:"#F5F5F5",mintcream:"#F5FFFA",ghostwhite:"#F8F8FF",salmon:"#FA8072",antiquewhite:"#FAEBD7",linen:"#FAF0E6",lightgoldenrodyellow:"#FAFAD2",oldlace:"#FDF5E6",red:"#FF0000",fuchsia:"#FF00FF",magenta:"#FF00FF",deeppink:"#FF1493",orangered:"#FF4500",tomato:"#FF6347",hotpink:"#FF69B4",coral:"#FF7F50",darkorange:"#FF8C00",lightsalmon:"#FFA07A",orange:"#FFA500",lightpink:"#FFB6C1",pink:"#FFC0CB",gold:"#FFD700",peachpuff:"#FFDAB9",navajowhite:"#FFDEAD",moccasin:"#FFE4B5",bisque:"#FFE4C4",mistyrose:"#FFE4E1",blanchedalmond:"#FFEBCD",papayawhip:"#FFEFD5",lavenderblush:"#FFF0F5",seashell:"#FFF5EE",cornsilk:"#FFF8DC",lemonchiffon:"#FFFACD",floralwhite:"#FFFAF0",snow:"#FFFAFA",yellow:"#FFFF00",lightyellow:"#FFFFE0",ivory:"#FFFFF0",white:"#FFFFFF"};if("string"==typeof t)return e[t]}},{key:"setColor",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if("none"!==t){var i=void 0,o=this._isColorString(t);if(void 0!==o&&(t=o),!0===c.isString(t)){if(!0===c.isValidRGB(t)){var n=t.substr(4).substr(0,t.length-5).split(",");i={r:n[0],g:n[1],b:n[2],a:1}}else if(!0===c.isValidRGBA(t)){var r=t.substr(5).substr(0,t.length-6).split(",");i={r:r[0],g:r[1],b:r[2],a:r[3]}}else if(!0===c.isValidHex(t)){var a=c.hexToRGB(t);i={r:a.r,g:a.g,b:a.b,a:1}}}else if(t instanceof Object&&void 0!==t.r&&void 0!==t.g&&void 0!==t.b){var h=void 0!==t.a?t.a:"1.0";i={r:t.r,g:t.g,b:t.b,a:h}}if(void 0===i)throw new Error("Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: "+(0,s.default)(t));this._setColor(i,e)}}},{key:"show",value:function(){void 0!==this.closeCallback&&(this.closeCallback(),this.closeCallback=void 0),this.applied=!1,this.frame.style.display="block",this._generateHueCircle()}},{key:"_hide",value:function(){var t=this;!0===(!(arguments.length>0&&void 0!==arguments[0])||arguments[0])&&(this.previousColor=c.extend({},this.color)),!0===this.applied&&this.updateCallback(this.initialColor),this.frame.style.display="none",setTimeout(function(){void 0!==t.closeCallback&&(t.closeCallback(),t.closeCallback=void 0)},0)}},{key:"_save",value:function(){this.updateCallback(this.color),this.applied=!1,this._hide()}},{key:"_apply",value:function(){this.applied=!0,this.updateCallback(this.color),this._updatePicker(this.color)}},{key:"_loadLast",value:function(){void 0!==this.previousColor?this.setColor(this.previousColor,!1):alert("There is no last color to load...")}},{key:"_setColor",value:function(t){!0===(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])&&(this.initialColor=c.extend({},t)),this.color=t;var e=c.RGBToHSV(t.r,t.g,t.b),i=2*Math.PI,o=this.r*e.s,n=this.centerCoordinates.x+o*Math.sin(i*e.h),s=this.centerCoordinates.y+o*Math.cos(i*e.h);this.colorPickerSelector.style.left=n-.5*this.colorPickerSelector.clientWidth+"px",this.colorPickerSelector.style.top=s-.5*this.colorPickerSelector.clientHeight+"px",this._updatePicker(t)}},{key:"_setOpacity",value:function(t){this.color.a=t/100,this._updatePicker(this.color)}},{key:"_setBrightness",value:function(t){var e=c.RGBToHSV(this.color.r,this.color.g,this.color.b);e.v=t/100;var i=c.HSVToRGB(e.h,e.s,e.v);i.a=this.color.a,this.color=i,this._updatePicker()}},{key:"_updatePicker",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.color,e=c.RGBToHSV(t.r,t.g,t.b),i=this.colorPickerCanvas.getContext("2d");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(i.webkitBackingStorePixelRatio||i.mozBackingStorePixelRatio||i.msBackingStorePixelRatio||i.oBackingStorePixelRatio||i.backingStorePixelRatio||1)),i.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var o=this.colorPickerCanvas.clientWidth,n=this.colorPickerCanvas.clientHeight;i.clearRect(0,0,o,n),i.putImageData(this.hueCircle,0,0),i.fillStyle="rgba(0,0,0,"+(1-e.v)+")",i.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),i.fill(),this.brightnessRange.value=100*e.v,this.opacityRange.value=100*t.a,this.initialColorDiv.style.backgroundColor="rgba("+this.initialColor.r+","+this.initialColor.g+","+this.initialColor.b+","+this.initialColor.a+")",this.newColorDiv.style.backgroundColor="rgba("+this.color.r+","+this.color.g+","+this.color.b+","+this.color.a+")"}},{key:"_setSize",value:function(){this.colorPickerCanvas.style.width="100%",this.colorPickerCanvas.style.height="100%",this.colorPickerCanvas.width=289*this.pixelRatio,this.colorPickerCanvas.height=289*this.pixelRatio}},{key:"_create",value:function(){if(this.frame=document.createElement("div"),this.frame.className="vis-color-picker",this.colorPickerDiv=document.createElement("div"),this.colorPickerSelector=document.createElement("div"),this.colorPickerSelector.className="vis-selector",this.colorPickerDiv.appendChild(this.colorPickerSelector),this.colorPickerCanvas=document.createElement("canvas"),this.colorPickerDiv.appendChild(this.colorPickerCanvas),this.colorPickerCanvas.getContext){var t=this.colorPickerCanvas.getContext("2d")
+;this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1),this.colorPickerCanvas.getContext("2d").setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}else{var e=document.createElement("DIV");e.style.color="red",e.style.fontWeight="bold",e.style.padding="10px",e.innerHTML="Error: your browser does not support HTML canvas",this.colorPickerCanvas.appendChild(e)}this.colorPickerDiv.className="vis-color",this.opacityDiv=document.createElement("div"),this.opacityDiv.className="vis-opacity",this.brightnessDiv=document.createElement("div"),this.brightnessDiv.className="vis-brightness",this.arrowDiv=document.createElement("div"),this.arrowDiv.className="vis-arrow",this.opacityRange=document.createElement("input");try{this.opacityRange.type="range",this.opacityRange.min="0",this.opacityRange.max="100"}catch(t){}this.opacityRange.value="100",this.opacityRange.className="vis-range",this.brightnessRange=document.createElement("input");try{this.brightnessRange.type="range",this.brightnessRange.min="0",this.brightnessRange.max="100"}catch(t){}this.brightnessRange.value="100",this.brightnessRange.className="vis-range",this.opacityDiv.appendChild(this.opacityRange),this.brightnessDiv.appendChild(this.brightnessRange);var i=this;this.opacityRange.onchange=function(){i._setOpacity(this.value)},this.opacityRange.oninput=function(){i._setOpacity(this.value)},this.brightnessRange.onchange=function(){i._setBrightness(this.value)},this.brightnessRange.oninput=function(){i._setBrightness(this.value)},this.brightnessLabel=document.createElement("div"),this.brightnessLabel.className="vis-label vis-brightness",this.brightnessLabel.innerHTML="brightness:",this.opacityLabel=document.createElement("div"),this.opacityLabel.className="vis-label vis-opacity",this.opacityLabel.innerHTML="opacity:",this.newColorDiv=document.createElement("div"),this.newColorDiv.className="vis-new-color",this.newColorDiv.innerHTML="new",this.initialColorDiv=document.createElement("div"),this.initialColorDiv.className="vis-initial-color",this.initialColorDiv.innerHTML="initial",this.cancelButton=document.createElement("div"),this.cancelButton.className="vis-button vis-cancel",this.cancelButton.innerHTML="cancel",this.cancelButton.onclick=this._hide.bind(this,!1),this.applyButton=document.createElement("div"),this.applyButton.className="vis-button vis-apply",this.applyButton.innerHTML="apply",this.applyButton.onclick=this._apply.bind(this),this.saveButton=document.createElement("div"),this.saveButton.className="vis-button vis-save",this.saveButton.innerHTML="save",this.saveButton.onclick=this._save.bind(this),this.loadButton=document.createElement("div"),this.loadButton.className="vis-button vis-load",this.loadButton.innerHTML="load last",this.loadButton.onclick=this._loadLast.bind(this),this.frame.appendChild(this.colorPickerDiv),this.frame.appendChild(this.arrowDiv),this.frame.appendChild(this.brightnessLabel),this.frame.appendChild(this.brightnessDiv),this.frame.appendChild(this.opacityLabel),this.frame.appendChild(this.opacityDiv),this.frame.appendChild(this.newColorDiv),this.frame.appendChild(this.initialColorDiv),this.frame.appendChild(this.cancelButton),this.frame.appendChild(this.applyButton),this.frame.appendChild(this.saveButton),this.frame.appendChild(this.loadButton)}},{key:"_bindHammer",value:function(){var t=this;this.drag={},this.pinch={},this.hammer=new l(this.colorPickerCanvas),this.hammer.get("pinch").set({enable:!0}),u.onTouch(this.hammer,function(e){t._moveSelector(e)}),this.hammer.on("tap",function(e){t._moveSelector(e)}),this.hammer.on("panstart",function(e){t._moveSelector(e)}),this.hammer.on("panmove",function(e){t._moveSelector(e)}),this.hammer.on("panend",function(e){t._moveSelector(e)})}},{key:"_generateHueCircle",value:function(){if(!1===this.generated){var t=this.colorPickerCanvas.getContext("2d");void 0===this.pixelRation&&(this.pixelRatio=(window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)),t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0);var e=this.colorPickerCanvas.clientWidth,i=this.colorPickerCanvas.clientHeight;t.clearRect(0,0,e,i);var o=void 0,n=void 0,s=void 0,r=void 0;this.centerCoordinates={x:.5*e,y:.5*i},this.r=.49*e;var a=2*Math.PI/360,h=1/this.r,d=void 0;for(s=0;s<360;s++)for(r=0;r<this.r;r++)o=this.centerCoordinates.x+r*Math.sin(a*s),n=this.centerCoordinates.y+r*Math.cos(a*s),d=c.HSVToRGB(s*(1/360),r*h,1),t.fillStyle="rgb("+d.r+","+d.g+","+d.b+")",t.fillRect(o-.5,n-.5,2,2);t.strokeStyle="rgba(0,0,0,1)",t.circle(this.centerCoordinates.x,this.centerCoordinates.y,this.r),t.stroke(),this.hueCircle=t.getImageData(0,0,e,i)}this.generated=!0}},{key:"_moveSelector",value:function(t){var e=this.colorPickerDiv.getBoundingClientRect(),i=t.center.x-e.left,o=t.center.y-e.top,n=.5*this.colorPickerDiv.clientHeight,s=.5*this.colorPickerDiv.clientWidth,r=i-s,a=o-n,h=Math.atan2(r,a),d=.98*Math.min(Math.sqrt(r*r+a*a),s),l=Math.cos(h)*d+n,u=Math.sin(h)*d+s;this.colorPickerSelector.style.top=l-.5*this.colorPickerSelector.clientHeight+"px",this.colorPickerSelector.style.left=u-.5*this.colorPickerSelector.clientWidth+"px";var p=h/(2*Math.PI);p=p<0?p+1:p;var f=d/this.r,m=c.RGBToHSV(this.color.r,this.color.g,this.color.b);m.h=p,m.s=f;var v=c.HSVToRGB(m.h,m.s,m.v);v.a=this.color.a,this.color=v,this.initialColorDiv.style.backgroundColor="rgba("+this.initialColor.r+","+this.initialColor.g+","+this.initialColor.b+","+this.initialColor.a+")",this.newColorDiv.style.backgroundColor="rgba("+this.color.r+","+this.color.g+","+this.color.b+","+this.color.a+")"}}]),t}();e.default=p},function(t,e,i){function o(t,e,i,o){if(!(Array.isArray(i)||i instanceof r||i instanceof a)&&i instanceof Object){var d=o;o=i,i=d}o&&o.throttleRedraw&&console.warn('Graph2d option "throttleRedraw" is DEPRICATED and no longer supported. It will be removed in the next MAJOR release.');var c=this;this.defaultOptions={start:null,end:null,autoResize:!0,orientation:{axis:"bottom",item:"bottom"},moment:n,width:null,height:null,maxHeight:null,minHeight:null},this.options=s.deepExtend({},this.defaultOptions),this._create(t),this.components=[],this.body={dom:this.dom,domProps:this.props,emitter:{on:this.on.bind(this),off:this.off.bind(this),emit:this.emit.bind(this)},hiddenDates:[],util:{toScreen:c._toScreen.bind(c),toGlobalScreen:c._toGlobalScreen.bind(c),toTime:c._toTime.bind(c),toGlobalTime:c._toGlobalTime.bind(c)}},this.range=new h(this.body),this.components.push(this.range),this.body.range=this.range,this.timeAxis=new l(this.body),this.components.push(this.timeAxis),this.currentTime=new u(this.body),this.components.push(this.currentTime),this.linegraph=new p(this.body),this.components.push(this.linegraph),this.itemsData=null,this.groupsData=null,this.on("tap",function(t){c.emit("click",c.getEventProperties(t))}),this.on("doubletap",function(t){c.emit("doubleClick",c.getEventProperties(t))}),this.dom.root.oncontextmenu=function(t){c.emit("contextmenu",c.getEventProperties(t))},o&&this.setOptions(o),i&&this.setGroups(i),e&&this.setItems(e),this._redraw()}var n=i(9),s=i(2),r=i(11),a=i(12),h=i(64),d=i(65),l=i(45),u=i(67),c=i(46),p=i(106),f=i(15).printStyle,m=i(113).allOptions,v=i(113).configureOptions,g=i(71).default,y=i(15).default;o.prototype=new d,o.prototype.setOptions=function(t){!0===y.validate(t,m)&&console.log("%cErrors have been found in the supplied options object.",f),d.prototype.setOptions.call(this,t)},o.prototype.setItems=function(t){var e,i=null==this.itemsData;if(e=t?t instanceof r||t instanceof a?t:new r(t,{type:{start:"Date",end:"Date"}}):null,this.itemsData=e,this.linegraph&&this.linegraph.setItems(e),i)if(void 0!=this.options.start||void 0!=this.options.end){var o=void 0!=this.options.start?this.options.start:null,n=void 0!=this.options.end?this.options.end:null;this.setWindow(o,n,{animation:!1})}else this.fit({animation:!1})},o.prototype.setGroups=function(t){var e;e=t?t instanceof r||t instanceof a?t:new r(t):null,this.groupsData=e,this.linegraph.setGroups(e)},o.prototype.getLegend=function(t,e,i){return void 0===e&&(e=15),void 0===i&&(i=15),void 0!==this.linegraph.groups[t]?this.linegraph.groups[t].getLegend(e,i):"cannot find group:'"+t+"'"},o.prototype.isGroupVisible=function(t){return void 0!==this.linegraph.groups[t]&&(this.linegraph.groups[t].visible&&(void 0===this.linegraph.options.groups.visibility[t]||1==this.linegraph.options.groups.visibility[t]))},o.prototype.getDataRange=function(){var t=null,e=null;for(var i in this.linegraph.groups)if(this.linegraph.groups.hasOwnProperty(i)&&1==this.linegraph.groups[i].visible)for(var o=0;o<this.linegraph.groups[i].itemsData.length;o++){var n=this.linegraph.groups[i].itemsData[o],r=s.convert(n.x,"Date").valueOf();t=null==t?r:t>r?r:t,e=null==e?r:e<r?r:e}return{min:null!=t?new Date(t):null,max:null!=e?new Date(e):null}},o.prototype.getEventProperties=function(t){var e=t.center?t.center.x:t.clientX,i=t.center?t.center.y:t.clientY,o=e-s.getAbsoluteLeft(this.dom.centerContainer),n=i-s.getAbsoluteTop(this.dom.centerContainer),r=this._toTime(o),a=c.customTimeFromTarget(t),h=s.getTarget(t),d=null;s.hasParent(h,this.timeAxis.dom.foreground)?d="axis":this.timeAxis2&&s.hasParent(h,this.timeAxis2.dom.foreground)?d="axis":s.hasParent(h,this.linegraph.yAxisLeft.dom.frame)?d="data-axis":s.hasParent(h,this.linegraph.yAxisRight.dom.frame)?d="data-axis":s.hasParent(h,this.linegraph.legendLeft.dom.frame)?d="legend":s.hasParent(h,this.linegraph.legendRight.dom.frame)?d="legend":null!=a?d="custom-time":s.hasParent(h,this.currentTime.bar)?d="current-time":s.hasParent(h,this.dom.center)&&(d="background");var l=[],u=this.linegraph.yAxisLeft,p=this.linegraph.yAxisRight;return!u.hidden&&this.itemsData.length>0&&l.push(u.screenToValue(n)),!p.hidden&&this.itemsData.length>0&&l.push(p.screenToValue(n)),{event:t,what:d,pageX:t.srcEvent?t.srcEvent.pageX:t.pageX,pageY:t.srcEvent?t.srcEvent.pageY:t.pageY,x:o,y:n,time:r,value:l}},o.prototype._createConfigurator=function(){return new g(this,this.dom.container,v)},t.exports=o},function(t,e,i){e.util=i(2),e.DOMutil=i(14),e.DataSet=i(11),e.DataView=i(12),e.Queue=i(43),e.Network=i(182),e.network={Images:i(116),dotparser:i(114),gephiParser:i(115),allOptions:i(122)},e.network.convertDot=function(t){return e.network.dotparser.DOTToGraph(t)},e.network.convertGephi=function(t,i){return e.network.gephiParser.parseGephi(t,i)},e.moment=i(9),e.Hammer=i(10),e.keycharm=i(35)},function(t,e,i){function o(t,e,i){var n=this;if(!(this instanceof o))throw new SyntaxError("Constructor must be called with the new operator");this.options={},this.defaultOptions={locale:"en",locales:d,clickToUse:!1},s.extend(this.options,this.defaultOptions),this.body={container:t,nodes:{},nodeIndices:[],edges:{},edgeIndices:[],emitter:{on:this.on.bind(this),off:this.off.bind(this),emit:this.emit.bind(this),once:this.once.bind(this)},eventListeners:{onTap:function(){},onTouch:function(){},onDoubleTap:function(){},onHold:function(){},onDragStart:function(){},onDrag:function(){},onDragEnd:function(){},onMouseWheel:function(){},onPinch:function(){},onMouseMove:function(){},onRelease:function(){},onContext:function(){}},data:{nodes:null,edges:null},functions:{createNode:function(){},createEdge:function(){},getPointer:function(){}},modules:{},view:{scale:1,translation:{x:0,y:0}}},this.bindEventListeners(),this.images=new l(function(){return n.body.emitter.emit("_requestRedraw")}),this.groups=new u,this.canvas=new g(this.body),this.selectionHandler=new _(this.body,this.canvas),this.interactionHandler=new b(this.body,this.canvas,this.selectionHandler),this.view=new y(this.body,this.canvas),this.renderer=new v(this.body,this.canvas),this.physics=new f(this.body),this.layoutEngine=new w(this.body),this.clustering=new m(this.body),this.manipulation=new x(this.body,this.canvas,this.selectionHandler),this.nodesHandler=new c(this.body,this.images,this.groups,this.layoutEngine),this.edgesHandler=new p(this.body,this.images,this.groups),this.body.modules.kamadaKawai=new T(this.body,150,.05),this.body.modules.clustering=this.clustering,this.canvas._create(),this.setOptions(i),this.setData(e)}i(183);var n=i(44),s=i(2),r=i(114),a=i(115),h=i(97),d=i(184),l=i(116).default,u=i(186).default,c=i(187).default,p=i(214).default,f=i(220).default,m=i(227).default,v=i(229).default,g=i(230).default,y=i(231).default,b=i(232).default,_=i(234).default,w=i(235).default,x=i(237).default,k=i(71).default,S=i(15).default,D=i(15),M=D.printStyle,C=i(122),O=C.allOptions,E=C.configureOptions,T=i(238).default;n(o.prototype),o.prototype.setOptions=function(t){var e=this;if(void 0!==t){!0===S.validate(t,O)&&console.log("%cErrors have been found in the supplied options object.",M);var i=["locale","locales","clickToUse"];if(s.selectiveDeepExtend(i,this.options,t),t=this.layoutEngine.setOptions(t.layout,t),this.canvas.setOptions(t),this.groups.setOptions(t.groups),this.nodesHandler.setOptions(t.nodes),this.edgesHandler.setOptions(t.edges),this.physics.setOptions(t.physics),this.manipulation.setOptions(t.manipulation,t,this.options),this.interactionHandler.setOptions(t.interaction),this.renderer.setOptions(t.interaction),this.selectionHandler.setOptions(t.interaction),void 0!==t.groups&&this.body.emitter.emit("refreshNodes"),"configure"in t&&(this.configurator||(this.configurator=new k(this,this.body.container,E,this.canvas.pixelRatio)),this.configurator.setOptions(t.configure)),this.configurator&&!0===this.configurator.options.enabled){var o={nodes:{},edges:{},layout:{},interaction:{},manipulation:{},physics:{},global:{}};s.deepExtend(o.nodes,this.nodesHandler.options),s.deepExtend(o.edges,this.edgesHandler.options),s.deepExtend(o.layout,this.layoutEngine.options),s.deepExtend(o.interaction,this.selectionHandler.options),s.deepExtend(o.interaction,this.renderer.options),s.deepExtend(o.interaction,this.interactionHandler.options),s.deepExtend(o.manipulation,this.manipulation.options),s.deepExtend(o.physics,this.physics.options),s.deepExtend(o.global,this.canvas.options),s.deepExtend(o.global,this.options),this.configurator.setModuleOptions(o)}void 0!==t.clickToUse?!0===t.clickToUse?void 0===this.activator&&(this.activator=new h(this.canvas.frame),this.activator.on("change",function(){e.body.emitter.emit("activate")})):(void 0!==this.activator&&(this.activator.destroy(),delete this.activator),this.body.emitter.emit("activate")):this.body.emitter.emit("activate"),this.canvas.setSize(),this.body.emitter.emit("startSimulation")}},o.prototype._updateVisibleIndices=function(){var t=this.body.nodes,e=this.body.edges;this.body.nodeIndices=[],this.body.edgeIndices=[];for(var i in t)t.hasOwnProperty(i)&&(this.clustering._isClusteredNode(i)||!1!==t[i].options.hidden||this.body.nodeIndices.push(t[i].id));for(var o in e)if(e.hasOwnProperty(o)){var n=e[o],s=t[n.fromId],r=t[n.toId],a=void 0!==s&&void 0!==r,h=!this.clustering._isClusteredEdge(o)&&!1===n.options.hidden&&a&&!1===s.options.hidden&&!1===r.options.hidden;h&&this.body.edgeIndices.push(n.id)}},o.prototype.bindEventListeners=function(){var t=this;this.body.emitter.on("_dataChanged",function(){t.edgesHandler._updateState(),t.body.emitter.emit("_dataUpdated")}),this.body.emitter.on("_dataUpdated",function(){t.clustering._updateState(),t._updateVisibleIndices(),t._updateValueRange(t.body.nodes),t._updateValueRange(t.body.edges),t.body.emitter.emit("startSimulation"),t.body.emitter.emit("_requestRedraw")})},o.prototype.setData=function(t){if(this.body.emitter.emit("resetPhysics"),this.body.emitter.emit("_resetData"),this.selectionHandler.unselectAll(),t&&t.dot&&(t.nodes||t.edges))throw new SyntaxError('Data must contain either parameter "dot" or  parameter pair "nodes" and "edges", but not both.');if(this.setOptions(t&&t.options),t&&t.dot){console.log("The dot property has been deprecated. Please use the static convertDot method to convert DOT into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertDot(dotString);");var e=r.DOTToGraph(t.dot);return void this.setData(e)}if(t&&t.gephi){console.log("The gephi property has been deprecated. Please use the static convertGephi method to convert gephi into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertGephi(gephiJson);");var i=a.parseGephi(t.gephi);return void this.setData(i)}this.nodesHandler.setData(t&&t.nodes,!0),this.edgesHandler.setData(t&&t.edges,!0),this.body.emitter.emit("_dataChanged"),this.body.emitter.emit("_dataLoaded"),this.body.emitter.emit("initPhysics")},o.prototype.destroy=function(){this.body.emitter.emit("destroy"),this.body.emitter.off(),this.off(),delete this.groups,delete this.canvas,delete this.selectionHandler,delete this.interactionHandler,delete this.view,delete this.renderer,delete this.physics,delete this.layoutEngine,delete this.clustering,delete this.manipulation,delete this.nodesHandler,delete this.edgesHandler,delete this.configurator,delete this.images;for(var t in this.body.nodes)this.body.nodes.hasOwnProperty(t)&&delete this.body.nodes[t];for(var e in this.body.edges)this.body.edges.hasOwnProperty(e)&&delete this.body.edges[e];s.recursiveDOMDelete(this.body.container)},o.prototype._updateValueRange=function(t){var e,i=void 0,o=void 0,n=0;for(e in t)if(t.hasOwnProperty(e)){var s=t[e].getValue();void 0!==s&&(i=void 0===i?s:Math.min(s,i),o=void 0===o?s:Math.max(s,o),n+=s)}if(void 0!==i&&void 0!==o)for(e in t)t.hasOwnProperty(e)&&t[e].setValueRange(i,o,n)},o.prototype.isActive=function(){return!this.activator||this.activator.active},o.prototype.setSize=function(){return this.canvas.setSize.apply(this.canvas,arguments)},o.prototype.canvasToDOM=function(){return this.canvas.canvasToDOM.apply(this.canvas,arguments)},o.prototype.DOMtoCanvas=function(){return this.canvas.DOMtoCanvas.apply(this.canvas,arguments)},o.prototype.findNode=function(){return this.clustering.findNode.apply(this.clustering,arguments)},o.prototype.isCluster=function(){return this.clustering.isCluster.apply(this.clustering,arguments)},o.prototype.openCluster=function(){return this.clustering.openCluster.apply(this.clustering,arguments)},o.prototype.cluster=function(){return this.clustering.cluster.apply(this.clustering,arguments)},o.prototype.getNodesInCluster=function(){return this.clustering.getNodesInCluster.apply(this.clustering,arguments)},o.prototype.clusterByConnection=function(){return this.clustering.clusterByConnection.apply(this.clustering,arguments)},o.prototype.clusterByHubsize=function(){return this.clustering.clusterByHubsize.apply(this.clustering,arguments)},o.prototype.clusterOutliers=function(){return this.clustering.clusterOutliers.apply(this.clustering,arguments)},o.prototype.getSeed=function(){return this.layoutEngine.getSeed.apply(this.layoutEngine,arguments)},o.prototype.enableEditMode=function(){return this.manipulation.enableEditMode.apply(this.manipulation,arguments)},o.prototype.disableEditMode=function(){return this.manipulation.disableEditMode.apply(this.manipulation,arguments)},o.prototype.addNodeMode=function(){return this.manipulation.addNodeMode.apply(this.manipulation,arguments)},o.prototype.editNode=function(){return this.manipulation.editNode.apply(this.manipulation,arguments)},o.prototype.editNodeMode=function(){return console.log("Deprecated: Please use editNode instead of editNodeMode."),this.manipulation.editNode.apply(this.manipulation,arguments)},o.prototype.addEdgeMode=function(){return this.manipulation.addEdgeMode.apply(this.manipulation,arguments)},o.prototype.editEdgeMode=function(){return this.manipulation.editEdgeMode.apply(this.manipulation,arguments)},o.prototype.deleteSelected=function(){return this.manipulation.deleteSelected.apply(this.manipulation,arguments)},o.prototype.getPositions=function(){return this.nodesHandler.getPositions.apply(this.nodesHandler,arguments)},o.prototype.storePositions=function(){return this.nodesHandler.storePositions.apply(this.nodesHandler,arguments)},o.prototype.moveNode=function(){return this.nodesHandler.moveNode.apply(this.nodesHandler,arguments)},o.prototype.getBoundingBox=function(){return this.nodesHandler.getBoundingBox.apply(this.nodesHandler,arguments)},o.prototype.getConnectedNodes=function(t){return void 0!==this.body.nodes[t]?this.nodesHandler.getConnectedNodes.apply(this.nodesHandler,arguments):this.edgesHandler.getConnectedNodes.apply(this.edgesHandler,arguments)},o.prototype.getConnectedEdges=function(){return this.nodesHandler.getConnectedEdges.apply(this.nodesHandler,arguments)},o.prototype.startSimulation=function(){return this.physics.startSimulation.apply(this.physics,arguments)},o.prototype.stopSimulation=function(){return this.physics.stopSimulation.apply(this.physics,arguments)},o.prototype.stabilize=function(){return this.physics.stabilize.apply(this.physics,arguments)},o.prototype.getSelection=function(){return this.selectionHandler.getSelection.apply(this.selectionHandler,arguments)},o.prototype.setSelection=function(){return this.selectionHandler.setSelection.apply(this.selectionHandler,arguments)},o.prototype.getSelectedNodes=function(){return this.selectionHandler.getSelectedNodes.apply(this.selectionHandler,arguments)},o.prototype.getSelectedEdges=function(){return this.selectionHandler.getSelectedEdges.apply(this.selectionHandler,arguments)},o.prototype.getNodeAt=function(){var t=this.selectionHandler.getNodeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},o.prototype.getEdgeAt=function(){var t=this.selectionHandler.getEdgeAt.apply(this.selectionHandler,arguments);return void 0!==t&&void 0!==t.id?t.id:t},o.prototype.selectNodes=function(){return this.selectionHandler.selectNodes.apply(this.selectionHandler,arguments)},o.prototype.selectEdges=function(){return this.selectionHandler.selectEdges.apply(this.selectionHandler,arguments)},o.prototype.unselectAll=function(){this.selectionHandler.unselectAll.apply(this.selectionHandler,arguments),this.redraw()},o.prototype.redraw=function(){return this.renderer.redraw.apply(this.renderer,arguments)},o.prototype.getScale=function(){return this.view.getScale.apply(this.view,arguments)},o.prototype.getViewPosition=function(){return this.view.getViewPosition.apply(this.view,arguments)},o.prototype.fit=function(){return this.view.fit.apply(this.view,arguments)},o.prototype.moveTo=function(){return this.view.moveTo.apply(this.view,arguments)},o.prototype.focus=function(){return this.view.focus.apply(this.view,arguments)},o.prototype.releaseNode=function(){return this.view.releaseNode.apply(this.view,arguments)},o.prototype.getOptionsFromConfigurator=function(){var t={};return this.configurator&&(t=this.configurator.getOptions.apply(this.configurator)),t},t.exports=o},function(t,e,i){"undefined"!=typeof CanvasRenderingContext2D&&(CanvasRenderingContext2D.prototype.circle=function(t,e,i){this.beginPath(),this.arc(t,e,i,0,2*Math.PI,!1),this.closePath()},CanvasRenderingContext2D.prototype.square=function(t,e,i){this.beginPath(),this.rect(t-i,e-i,2*i,2*i),this.closePath()},CanvasRenderingContext2D.prototype.triangle=function(t,e,i){this.beginPath(),i*=1.15,e+=.275*i;var o=2*i,n=o/2,s=Math.sqrt(3)/6*o,r=Math.sqrt(o*o-n*n);this.moveTo(t,e-(r-s)),this.lineTo(t+n,e+s),this.lineTo(t-n,e+s),this.lineTo(t,e-(r-s)),this.closePath()},CanvasRenderingContext2D.prototype.triangleDown=function(t,e,i){this.beginPath(),i*=1.15,e-=.275*i;var o=2*i,n=o/2,s=Math.sqrt(3)/6*o,r=Math.sqrt(o*o-n*n);this.moveTo(t,e+(r-s)),this.lineTo(t+n,e-s),this.lineTo(t-n,e-s),this.lineTo(t,e+(r-s)),this.closePath()},CanvasRenderingContext2D.prototype.star=function(t,e,i){this.beginPath(),i*=.82,e+=.1*i;for(var o=0;o<10;o++){var n=o%2==0?1.3*i:.5*i;this.lineTo(t+n*Math.sin(2*o*Math.PI/10),e-n*Math.cos(2*o*Math.PI/10))}this.closePath()},CanvasRenderingContext2D.prototype.diamond=function(t,e,i){this.beginPath(),this.lineTo(t,e+i),this.lineTo(t+i,e),this.lineTo(t,e-i),this.lineTo(t-i,e),this.closePath()},CanvasRenderingContext2D.prototype.roundRect=function(t,e,i,o,n){var s=Math.PI/180;i-2*n<0&&(n=i/2),o-2*n<0&&(n=o/2),this.beginPath(),this.moveTo(t+n,e),this.lineTo(t+i-n,e),this.arc(t+i-n,e+n,n,270*s,360*s,!1),this.lineTo(t+i,e+o-n),this.arc(t+i-n,e+o-n,n,0,90*s,!1),this.lineTo(t+n,e+o),this.arc(t+n,e+o-n,n,90*s,180*s,!1),this.lineTo(t,e+n),this.arc(t+n,e+n,n,180*s,270*s,!1),this.closePath()},CanvasRenderingContext2D.prototype.ellipse_vis=function(t,e,i,o){var n=i/2*.5522848,s=o/2*.5522848,r=t+i,a=e+o,h=t+i/2,d=e+o/2;this.beginPath(),this.moveTo(t,d),this.bezierCurveTo(t,d-s,h-n,e,h,e),this.bezierCurveTo(h+n,e,r,d-s,r,d),this.bezierCurveTo(r,d+s,h+n,a,h,a),this.bezierCurveTo(h-n,a,t,d+s,t,d),this.closePath()},CanvasRenderingContext2D.prototype.database=function(t,e,i,o){var n=i,s=o*(1/3),r=n/2*.5522848,a=s/2*.5522848,h=t+n,d=e+s,l=t+n/2,u=e+s/2,c=e+(o-s/2),p=e+o;this.beginPath(),this.moveTo(h,u),this.bezierCurveTo(h,u+a,l+r,d,l,d),this.bezierCurveTo(l-r,d,t,u+a,t,u),this.bezierCurveTo(t,u-a,l-r,e,l,e),this.bezierCurveTo(l+r,e,h,u-a,h,u),this.lineTo(h,c),this.bezierCurveTo(h,c+a,l+r,p,l,p),this.bezierCurveTo(l-r,p,t,c+a,t,c),this.lineTo(t,u)},CanvasRenderingContext2D.prototype.dashedLine=function(t,e,i,o,n){this.beginPath(),this.moveTo(t,e);for(var s=n.length,r=i-t,a=o-e,h=a/r,d=Math.sqrt(r*r+a*a),l=0,u=!0,c=0,p=n[0];d>=.1;)p=n[l++%s],p>d&&(p=d),c=Math.sqrt(p*p/(1+h*h)),c=r<0?-c:c,t+=c,e+=h*c,!0===u?this.lineTo(t,e):this.moveTo(t,e),d-=p,u=!u},CanvasRenderingContext2D.prototype.hexagon=function(t,e,i){this.beginPath();var o=2*Math.PI/6;this.moveTo(t+i,e);for(var n=1;n<6;n++)this.lineTo(t+i*Math.cos(o*n),e+i*Math.sin(o*n));this.closePath()})},function(t,e,i){e.en={edit:"Edit",del:"Delete selected",back:"Back",addNode:"Add Node",addEdge:"Add Edge",editNode:"Edit Node",editEdge:"Edit Edge",addDescription:"Click in an empty space to place a new node.",edgeDescription:"Click on a node and drag the edge to another node to connect them.",editEdgeDescription:"Click on the control points and drag them to a node to connect to it.",createEdgeError:"Cannot link edges to a cluster.",deleteClusterError:"Clusters cannot be deleted.",editClusterError:"Clusters cannot be edited."},e.en_EN=e.en,e.en_US=e.en,e.de={edit:"Editieren",del:"Lösche Auswahl",back:"Zurück",addNode:"Knoten hinzufügen",addEdge:"Kante hinzufügen",editNode:"Knoten editieren",editEdge:"Kante editieren",addDescription:"Klicke auf eine freie Stelle, um einen neuen Knoten zu plazieren.",edgeDescription:"Klicke auf einen Knoten und ziehe die Kante zu einem anderen Knoten, um diese zu verbinden.",editEdgeDescription:"Klicke auf die Verbindungspunkte und ziehe diese auf einen Knoten, um sie zu verbinden.",createEdgeError:"Es ist nicht möglich, Kanten mit Clustern zu verbinden.",deleteClusterError:"Cluster können nicht gelöscht werden.",editClusterError:"Cluster können nicht editiert werden."},e.de_DE=e.de,e.es={edit:"Editar",del:"Eliminar selección",back:"Átras",addNode:"Añadir nodo",addEdge:"Añadir arista",editNode:"Editar nodo",editEdge:"Editar arista",addDescription:"Haga clic en un lugar vacío para colocar un nuevo nodo.",edgeDescription:"Haga clic en un nodo y arrastre la arista hacia otro nodo para conectarlos.",editEdgeDescription:"Haga clic en un punto de control y arrastrelo a un nodo para conectarlo.",createEdgeError:"No se puede conectar una arista a un grupo.",deleteClusterError:"No es posible eliminar grupos.",editClusterError:"No es posible editar grupos."},e.es_ES=e.es,e.it={edit:"Modifica",del:"Cancella la selezione",back:"Indietro",addNode:"Aggiungi un nodo",addEdge:"Aggiungi un vertice",editNode:"Modifica il nodo",editEdge:"Modifica il vertice",addDescription:"Clicca per aggiungere un nuovo nodo",edgeDescription:"Clicca su un nodo e trascinalo ad un altro nodo per connetterli.",editEdgeDescription:"Clicca sui Punti di controllo e trascinali ad un nodo per connetterli.",createEdgeError:"Non si possono collegare vertici ad un cluster",deleteClusterError:"I cluster non possono essere cancellati",editClusterError:"I clusters non possono essere modificati."},e.it_IT=e.it,e.nl={edit:"Wijzigen",del:"Selectie verwijderen",back:"Terug",addNode:"Node toevoegen",addEdge:"Link toevoegen",editNode:"Node wijzigen",editEdge:"Link wijzigen",addDescription:"Klik op een leeg gebied om een nieuwe node te maken.",edgeDescription:"Klik op een node en sleep de link naar een andere node om ze te verbinden.",editEdgeDescription:"Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.",createEdgeError:"Kan geen link maken naar een cluster.",deleteClusterError:"Clusters kunnen niet worden verwijderd.",editClusterError:"Clusters kunnen niet worden aangepast."},e.nl_NL=e.nl,e.nl_BE=e.nl,e["pt-br"]={edit:"Editar",del:"Remover selecionado",back:"Voltar",addNode:"Adicionar nó",addEdge:"Adicionar aresta",editNode:"Editar nó",editEdge:"Editar aresta",addDescription:"Clique em um espaço em branco para adicionar um novo nó",edgeDescription:"Clique em um nó e arraste a aresta até outro nó para conectá-los",editEdgeDescription:"Clique nos pontos de controle e os arraste para um nó para conectá-los",createEdgeError:"Não foi possível linkar arestas a um cluster.",deleteClusterError:"Clusters não puderam ser removidos.",editClusterError:"Clusters não puderam ser editados."},e["pt-BR"]=e["pt-br"],e.pt_BR=e["pt-br"],e.pt_br=e["pt-br"],e.ru={edit:"Редактировать",del:"Удалить выбранное",back:"Назад",addNode:"Добавить узел",addEdge:"Добавить ребро",editNode:"Редактировать узел",editEdge:"Редактировать ребро",addDescription:"Кликните в свободное место, чтобы добавить новый узел.",edgeDescription:"Кликните на узел и протяните ребро к другому узлу, чтобы соединить их.",editEdgeDescription:"Кликните на контрольные точки и перетащите их в узел, чтобы подключиться к нему.",createEdgeError:"Невозможно соединить ребра в кластер.",deleteClusterError:"Кластеры не могут быть удалены",editClusterError:"Кластеры недоступны для редактирования."},e.ru_RU=e.ru,e.cn={edit:"编辑",del:"删除选定",back:"返回",addNode:"添加节点",addEdge:"添加连接线",editNode:"编辑节点",editEdge:"编辑连接线",addDescription:"单击空白处放置新节点。",edgeDescription:"单击某个节点并将该连接线拖动到另一个节点以连接它们。",editEdgeDescription:"单击控制节点并将它们拖到节点上连接。",createEdgeError:"无法将连接线连接到群集。",deleteClusterError:"无法删除群集。",editClusterError:"无法编辑群集。"},e.zh_CN=e.cn},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=function(){function t(){(0,s.default)(this,t),this.NUM_ITERATIONS=4,this.image=new Image,this.canvas=document.createElement("canvas")}return(0,a.default)(t,[{key:"init",value:function(){if(!this.initialized()){this.src=this.image.src;var t=this.image.width,e=this.image.height;this.width=t,this.height=e;var i=Math.floor(e/2),o=Math.floor(e/4),n=Math.floor(e/8),s=Math.floor(e/16),r=Math.floor(t/2),a=Math.floor(t/4),h=Math.floor(t/8),d=Math.floor(t/16);this.canvas.width=3*a,this.canvas.height=i,this.coordinates=[[0,0,r,i],[r,0,a,o],[r,o,h,n],[5*h,o,d,s]],this._fillMipMap()}}},{key:"initialized",value:function(){return void 0!==this.coordinates}},{key:"_fillMipMap",value:function(){var t=this.canvas.getContext("2d"),e=this.coordinates[0];t.drawImage(this.image,e[0],e[1],e[2],e[3]);for(var i=1;i<this.NUM_ITERATIONS;i++){var o=this.coordinates[i-1],n=this.coordinates[i];t.drawImage(this.canvas,o[0],o[1],o[2],o[3],n[0],n[1],n[2],n[3])}}},{key:"drawImageAtPosition",value:function(t,e,i,o,n,s){if(this.initialized())if(e>2){e*=.5;for(var r=0;e>2&&r<this.NUM_ITERATIONS;)e*=.5,r+=1;r>=this.NUM_ITERATIONS&&(r=this.NUM_ITERATIONS-1);var a=this.coordinates[r];t.drawImage(this.canvas,a[0],a[1],a[2],a[3],i,o,n,s)}else t.drawImage(this.image,i,o,n,s)}}]),t}();e.default=h},function(t,e,i){
+function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=i(2),d=function(){function t(){(0,s.default)(this,t),this.clear(),this.defaultIndex=0,this.groupsArray=[],this.groupIndex=0,this.defaultGroups=[{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},{border:"#FFA500",background:"#FFFF00",highlight:{border:"#FFA500",background:"#FFFFA3"},hover:{border:"#FFA500",background:"#FFFFA3"}},{border:"#FA0A10",background:"#FB7E81",highlight:{border:"#FA0A10",background:"#FFAFB1"},hover:{border:"#FA0A10",background:"#FFAFB1"}},{border:"#41A906",background:"#7BE141",highlight:{border:"#41A906",background:"#A1EC76"},hover:{border:"#41A906",background:"#A1EC76"}},{border:"#E129F0",background:"#EB7DF4",highlight:{border:"#E129F0",background:"#F0B3F5"},hover:{border:"#E129F0",background:"#F0B3F5"}},{border:"#7C29F0",background:"#AD85E4",highlight:{border:"#7C29F0",background:"#D3BDF0"},hover:{border:"#7C29F0",background:"#D3BDF0"}},{border:"#C37F00",background:"#FFA807",highlight:{border:"#C37F00",background:"#FFCA66"},hover:{border:"#C37F00",background:"#FFCA66"}},{border:"#4220FB",background:"#6E6EFD",highlight:{border:"#4220FB",background:"#9B9BFD"},hover:{border:"#4220FB",background:"#9B9BFD"}},{border:"#FD5A77",background:"#FFC0CB",highlight:{border:"#FD5A77",background:"#FFD1D9"},hover:{border:"#FD5A77",background:"#FFD1D9"}},{border:"#4AD63A",background:"#C2FABC",highlight:{border:"#4AD63A",background:"#E6FFE3"},hover:{border:"#4AD63A",background:"#E6FFE3"}},{border:"#990000",background:"#EE0000",highlight:{border:"#BB0000",background:"#FF3333"},hover:{border:"#BB0000",background:"#FF3333"}},{border:"#FF6000",background:"#FF6000",highlight:{border:"#FF6000",background:"#FF6000"},hover:{border:"#FF6000",background:"#FF6000"}},{border:"#97C2FC",background:"#2B7CE9",highlight:{border:"#D2E5FF",background:"#2B7CE9"},hover:{border:"#D2E5FF",background:"#2B7CE9"}},{border:"#399605",background:"#255C03",highlight:{border:"#399605",background:"#255C03"},hover:{border:"#399605",background:"#255C03"}},{border:"#B70054",background:"#FF007E",highlight:{border:"#B70054",background:"#FF007E"},hover:{border:"#B70054",background:"#FF007E"}},{border:"#AD85E4",background:"#7C29F0",highlight:{border:"#D3BDF0",background:"#7C29F0"},hover:{border:"#D3BDF0",background:"#7C29F0"}},{border:"#4557FA",background:"#000EA1",highlight:{border:"#6E6EFD",background:"#000EA1"},hover:{border:"#6E6EFD",background:"#000EA1"}},{border:"#FFC0CB",background:"#FD5A77",highlight:{border:"#FFD1D9",background:"#FD5A77"},hover:{border:"#FFD1D9",background:"#FD5A77"}},{border:"#C2FABC",background:"#74D66A",highlight:{border:"#E6FFE3",background:"#74D66A"},hover:{border:"#E6FFE3",background:"#74D66A"}},{border:"#EE0000",background:"#990000",highlight:{border:"#FF3333",background:"#BB0000"},hover:{border:"#FF3333",background:"#BB0000"}}],this.options={},this.defaultOptions={useDefaultGroups:!0},h.extend(this.options,this.defaultOptions)}return(0,a.default)(t,[{key:"setOptions",value:function(t){var e=["useDefaultGroups"];if(void 0!==t)for(var i in t)if(t.hasOwnProperty(i)&&-1===e.indexOf(i)){var o=t[i];this.add(i,o)}}},{key:"clear",value:function(){this.groups={},this.groupsArray=[]}},{key:"get",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.groups[t];if(void 0===i&&e)if(!1===this.options.useDefaultGroups&&this.groupsArray.length>0){var o=this.groupIndex%this.groupsArray.length;this.groupIndex++,i={},i.color=this.groups[this.groupsArray[o]],this.groups[t]=i}else{var n=this.defaultIndex%this.defaultGroups.length;this.defaultIndex++,i={},i.color=this.defaultGroups[n],this.groups[t]=i}return i}},{key:"add",value:function(t,e){return this.groups[t]=e,this.groupsArray.push(t),e}}]),t}();e.default=d},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=i(2),d=i(11),l=i(12),u=i(47).default,c=function(){function t(e,i,o,n){var r=this;if((0,s.default)(this,t),this.body=e,this.images=i,this.groups=o,this.layoutEngine=n,this.body.functions.createNode=this.create.bind(this),this.nodesListeners={add:function(t,e){r.add(e.items)},update:function(t,e){r.update(e.items,e.data,e.oldData)},remove:function(t,e){r.remove(e.items)}},this.defaultOptions={borderWidth:1,borderWidthSelected:2,brokenImage:void 0,color:{border:"#2B7CE9",background:"#97C2FC",highlight:{border:"#2B7CE9",background:"#D2E5FF"},hover:{border:"#2B7CE9",background:"#D2E5FF"}},fixed:{x:!1,y:!1},font:{color:"#343434",size:14,face:"arial",background:"none",strokeWidth:0,strokeColor:"#ffffff",align:"center",vadjust:0,multi:!1,bold:{mod:"bold"},boldital:{mod:"bold italic"},ital:{mod:"italic"},mono:{mod:"",size:15,face:"monospace",vadjust:2}},group:void 0,hidden:!1,icon:{face:"FontAwesome",code:void 0,size:50,color:"#2B7CE9"},image:void 0,label:void 0,labelHighlightBold:!0,level:void 0,margin:{top:5,right:5,bottom:5,left:5},mass:1,physics:!0,scaling:{min:10,max:30,label:{enabled:!1,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,o){if(e===t)return.5;var n=1/(e-t);return Math.max(0,(o-t)*n)}},shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:10,x:5,y:5},shape:"ellipse",shapeProperties:{borderDashes:!1,borderRadius:6,interpolation:!0,useImageSize:!1,useBorderWithImage:!1},size:25,title:void 0,value:void 0,x:void 0,y:void 0},this.defaultOptions.mass<=0)throw"Internal error: mass in defaultOptions of NodesHandler may not be zero or negative";this.options=h.bridgeObject(this.defaultOptions),this.bindEventListeners()}return(0,a.default)(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.on("refreshNodes",this.refresh.bind(this)),this.body.emitter.on("refresh",this.refresh.bind(this)),this.body.emitter.on("destroy",function(){h.forEach(t.nodesListeners,function(e,i){t.body.data.nodes&&t.body.data.nodes.off(i,e)}),delete t.body.functions.createNode,delete t.nodesListeners.add,delete t.nodesListeners.update,delete t.nodesListeners.remove,delete t.nodesListeners})}},{key:"setOptions",value:function(t){if(void 0!==t){if(u.parseOptions(this.options,t),void 0!==t.shape)for(var e in this.body.nodes)this.body.nodes.hasOwnProperty(e)&&this.body.nodes[e].updateShape();if(void 0!==t.font)for(var i in this.body.nodes)this.body.nodes.hasOwnProperty(i)&&(this.body.nodes[i].updateLabelModule(),this.body.nodes[i].needsRefresh());if(void 0!==t.size)for(var o in this.body.nodes)this.body.nodes.hasOwnProperty(o)&&this.body.nodes[o].needsRefresh();void 0===t.hidden&&void 0===t.physics||this.body.emitter.emit("_dataChanged")}}},{key:"setData",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.data.nodes;if(t instanceof d||t instanceof l)this.body.data.nodes=t;else if(Array.isArray(t))this.body.data.nodes=new d,this.body.data.nodes.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.body.data.nodes=new d}if(i&&h.forEach(this.nodesListeners,function(t,e){i.off(e,t)}),this.body.nodes={},this.body.data.nodes){var o=this;h.forEach(this.nodesListeners,function(t,e){o.body.data.nodes.on(e,t)});var n=this.body.data.nodes.getIds();this.add(n,!0)}!1===e&&this.body.emitter.emit("_dataChanged")}},{key:"add",value:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=void 0,o=[],n=0;n<t.length;n++){i=t[n];var s=this.body.data.nodes.get(i),r=this.create(s);o.push(r),this.body.nodes[i]=r}this.layoutEngine.positionInitially(o),!1===e&&this.body.emitter.emit("_dataChanged")}},{key:"update",value:function(t,e,i){for(var o=this.body.nodes,n=!1,s=0;s<t.length;s++){var r=t[s],a=o[r],h=e[s];void 0!==a?a.setOptions(h)&&(n=!0):(n=!0,a=this.create(h),o[r]=a)}n||void 0===i||(n=e.some(function(t,e){var o=i[e];return o&&o.level!==t.level})),!0===n?this.body.emitter.emit("_dataChanged"):this.body.emitter.emit("_dataUpdated")}},{key:"remove",value:function(t){for(var e=this.body.nodes,i=0;i<t.length;i++){delete e[t[i]]}this.body.emitter.emit("_dataChanged")}},{key:"create",value:function(t){return new(arguments.length>1&&void 0!==arguments[1]?arguments[1]:u)(t,this.body,this.images,this.groups,this.options,this.defaultOptions)}},{key:"refresh",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];h.forEach(this.body.nodes,function(i,o){var n=t.body.data.nodes.get(o);void 0!==n&&(!0===e&&i.setOptions({x:null,y:null}),i.setOptions({fixed:!1}),i.setOptions(n))})}},{key:"getPositions",value:function(t){var e={};if(void 0!==t){if(!0===Array.isArray(t)){for(var i=0;i<t.length;i++)if(void 0!==this.body.nodes[t[i]]){var o=this.body.nodes[t[i]];e[t[i]]={x:Math.round(o.x),y:Math.round(o.y)}}}else if(void 0!==this.body.nodes[t]){var n=this.body.nodes[t];e[t]={x:Math.round(n.x),y:Math.round(n.y)}}}else for(var s=0;s<this.body.nodeIndices.length;s++){var r=this.body.nodes[this.body.nodeIndices[s]];e[this.body.nodeIndices[s]]={x:Math.round(r.x),y:Math.round(r.y)}}return e}},{key:"storePositions",value:function(){var t=[],e=this.body.data.nodes.getDataSet();for(var i in e._data)if(e._data.hasOwnProperty(i)){var o=this.body.nodes[i];e._data[i].x==Math.round(o.x)&&e._data[i].y==Math.round(o.y)||t.push({id:o.id,x:Math.round(o.x),y:Math.round(o.y)})}e.update(t)}},{key:"getBoundingBox",value:function(t){if(void 0!==this.body.nodes[t])return this.body.nodes[t].shape.boundingBox}},{key:"getConnectedNodes",value:function(t,e){var i=[];if(void 0!==this.body.nodes[t])for(var o=this.body.nodes[t],n={},s=0;s<o.edges.length;s++){var r=o.edges[s];"to"!==e&&r.toId==o.id?void 0===n[r.fromId]&&(i.push(r.fromId),n[r.fromId]=!0):"from"!==e&&r.fromId==o.id&&void 0===n[r.toId]&&(i.push(r.toId),n[r.toId]=!0)}return i}},{key:"getConnectedEdges",value:function(t){var e=[];if(void 0!==this.body.nodes[t])for(var i=this.body.nodes[t],o=0;o<i.edges.length;o++)e.push(i.edges[o].id);else console.log("NodeId provided for getConnectedEdges does not exist. Provided: ",t);return e}},{key:"moveNode",value:function(t,e,i){var o=this;void 0!==this.body.nodes[t]?(this.body.nodes[t].x=Number(e),this.body.nodes[t].y=Number(i),setTimeout(function(){o.body.emitter.emit("startSimulation")},0)):console.log("Node id supplied to moveNode does not exist. Provided: ",t)}}]),t}();e.default=c},function(t,e,i){t.exports={default:i(189),__esModule:!0}},function(t,e,i){i(49),i(60),t.exports=i(190)},function(t,e,i){var o=i(86),n=i(13)("iterator"),s=i(31);t.exports=i(7).isIterable=function(t){var e=Object(t);return void 0!==e[n]||"@@iterator"in e||s.hasOwnProperty(o(e))}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=i(192).default,d=i(48).default,l=function(){function t(e,i,o,n){var r=this;(0,s.default)(this,t),this.ctx=e,this.parent=i;var a=function(t,i){if(void 0===t)return 0;var s=r.parent.getFormattingValues(e,o,n,i),a=0;if(""!==t){a=r.ctx.measureText(t).width}return{width:a,values:s}};this.lines=new h(a)}return(0,a.default)(t,[{key:"process",value:function(t){if(!d.isValidLabel(t))return this.lines.finalize();var e=this.parent.fontOptions;t=t.replace(/\r\n/g,"\n"),t=t.replace(/\r/g,"\n");var i=String(t).split("\n"),o=i.length;if(e.multi)for(var n=0;n<o;n++){var s=this.splitBlocks(i[n],e.multi);if(void 0!==s)if(0!==s.length){if(e.maxWdt>0)for(var r=0;r<s.length;r++){var a=s[r].mod,h=s[r].text;this.splitStringIntoLines(h,a,!0)}else for(var l=0;l<s.length;l++){var u=s[l].mod,c=s[l].text;this.lines.append(c,u)}this.lines.newLine()}else this.lines.newLine("")}else if(e.maxWdt>0)for(var p=0;p<o;p++)this.splitStringIntoLines(i[p]);else for(var f=0;f<o;f++)this.lines.newLine(i[f]);return this.lines.finalize()}},{key:"decodeMarkupSystem",value:function(t){var e="none";return"markdown"===t||"md"===t?e="markdown":!0!==t&&"html"!==t||(e="html"),e}},{key:"splitHtmlBlocks",value:function(t){var e=[],i={bold:!1,ital:!1,mono:!1,spacing:!1,position:0,buffer:"",modStack:[]};for(i.mod=function(){return 0===this.modStack.length?"normal":this.modStack[0]},i.modName=function(){return 0===this.modStack.length?"normal":"mono"===this.modStack[0]?"mono":i.bold&&i.ital?"boldital":i.bold?"bold":i.ital?"ital":void 0},i.emitBlock=function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.spacing&&(this.add(" "),this.spacing=!1),this.buffer.length>0&&(e.push({text:this.buffer,mod:this.modName()}),this.buffer="")},i.add=function(t){" "===t&&(i.spacing=!0),i.spacing&&(this.buffer+=" ",this.spacing=!1)," "!=t&&(this.buffer+=t)};i.position<t.length;){var o=t.charAt(i.position);/[ \t]/.test(o)?i.mono?i.add(o):i.spacing=!0:/</.test(o)?i.mono||i.bold||!/<b>/.test(t.substr(i.position,3))?i.mono||i.ital||!/<i>/.test(t.substr(i.position,3))?!i.mono&&/<code>/.test(t.substr(i.position,6))?(i.emitBlock(),i.mono=!0,i.modStack.unshift("mono"),i.position+=5):!i.mono&&"bold"===i.mod()&&/<\/b>/.test(t.substr(i.position,4))?(i.emitBlock(),i.bold=!1,i.modStack.shift(),i.position+=3):!i.mono&&"ital"===i.mod()&&/<\/i>/.test(t.substr(i.position,4))?(i.emitBlock(),i.ital=!1,i.modStack.shift(),i.position+=3):"mono"===i.mod()&&/<\/code>/.test(t.substr(i.position,7))?(i.emitBlock(),i.mono=!1,i.modStack.shift(),i.position+=6):i.add(o):(i.emitBlock(),i.ital=!0,i.modStack.unshift("ital"),i.position+=2):(i.emitBlock(),i.bold=!0,i.modStack.unshift("bold"),i.position+=2):/&/.test(o)?/&lt;/.test(t.substr(i.position,4))?(i.add("<"),i.position+=3):/&amp;/.test(t.substr(i.position,5))?(i.add("&"),i.position+=4):i.add("&"):i.add(o),i.position++}return i.emitBlock(),e}},{key:"splitMarkdownBlocks",value:function(t){var e=[],i={bold:!1,ital:!1,mono:!1,beginable:!0,spacing:!1,position:0,buffer:"",modStack:[]};for(i.mod=function(){return 0===this.modStack.length?"normal":this.modStack[0]},i.modName=function(){return 0===this.modStack.length?"normal":"mono"===this.modStack[0]?"mono":i.bold&&i.ital?"boldital":i.bold?"bold":i.ital?"ital":void 0},i.emitBlock=function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.spacing&&(this.add(" "),this.spacing=!1),this.buffer.length>0&&(e.push({text:this.buffer,mod:this.modName()}),this.buffer="")},i.add=function(t){" "===t&&(i.spacing=!0),i.spacing&&(this.buffer+=" ",this.spacing=!1)," "!=t&&(this.buffer+=t)};i.position<t.length;){var o=t.charAt(i.position);/[ \t]/.test(o)?(i.mono?i.add(o):i.spacing=!0,i.beginable=!0):/\\/.test(o)?i.position<t.length+1&&(i.position++,o=t.charAt(i.position),/ \t/.test(o)?i.spacing=!0:(i.add(o),i.beginable=!1)):i.mono||i.bold||!i.beginable&&!i.spacing||!/\*/.test(o)?i.mono||i.ital||!i.beginable&&!i.spacing||!/\_/.test(o)?!i.mono&&(i.beginable||i.spacing)&&/`/.test(o)?(i.emitBlock(),i.mono=!0,i.modStack.unshift("mono")):!i.mono&&"bold"===i.mod()&&/\*/.test(o)?i.position===t.length-1||/[.,_` \t\n]/.test(t.charAt(i.position+1))?(i.emitBlock(),i.bold=!1,i.modStack.shift()):i.add(o):!i.mono&&"ital"===i.mod()&&/\_/.test(o)?i.position===t.length-1||/[.,*` \t\n]/.test(t.charAt(i.position+1))?(i.emitBlock(),i.ital=!1,i.modStack.shift()):i.add(o):i.mono&&"mono"===i.mod()&&/`/.test(o)?i.position===t.length-1||/[.,*_ \t\n]/.test(t.charAt(i.position+1))?(i.emitBlock(),i.mono=!1,i.modStack.shift()):i.add(o):(i.add(o),i.beginable=!1):(i.emitBlock(),i.ital=!0,i.modStack.unshift("ital")):(i.emitBlock(),i.bold=!0,i.modStack.unshift("bold")),i.position++}return i.emitBlock(),e}},{key:"splitBlocks",value:function(t,e){var i=this.decodeMarkupSystem(e);return"none"===i?[{text:t,mod:"normal"}]:"markdown"===i?this.splitMarkdownBlocks(t):"html"===i?this.splitHtmlBlocks(t):void 0}},{key:"overMaxWidth",value:function(t){var e=this.ctx.measureText(t).width;return this.lines.curWidth()+e>this.parent.fontOptions.maxWdt}},{key:"getLongestFit",value:function(t){for(var e="",i=0;i<t.length;){var o=""===e?"":" ",n=e+o+t[i];if(this.overMaxWidth(n))break;e=n,i++}return i}},{key:"getLongestFitWord",value:function(t){for(var e=0;e<t.length&&!this.overMaxWidth(t.slice(0,e));)e++;return e}},{key:"splitStringIntoLines",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"normal",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];t=t.replace(/^( +)/g,"$1\r"),t=t.replace(/([^\r][^ ]*)( +)/g,"$1\r$2\r");for(var o=t.split("\r");o.length>0;){var n=this.getLongestFit(o);if(0===n){var s=o[0],r=this.getLongestFitWord(s);this.lines.newLine(s.slice(0,r),e),o[0]=s.slice(r)}else{var a=n;" "===o[n-1]?n--:" "===o[a]&&a++;var h=o.slice(0,n).join("");n==o.length&&i?this.lines.append(h,e):this.lines.newLine(h,e),o=o.slice(a)}}}}]),t}();e.default=l},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(90),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=function(){function t(e){(0,a.default)(this,t),this.measureText=e,this.current=0,this.width=0,this.height=0,this.lines=[]}return(0,d.default)(t,[{key:"_add",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"normal";void 0===this.lines[t]&&(this.lines[t]={width:0,height:0,blocks:[]});var o=e;void 0!==e&&""!==e||(o=" ");var n=this.measureText(o,i),r=(0,s.default)({},n.values);r.text=e,r.width=n.width,r.mod=i,void 0!==e&&""!==e||(r.width=0),this.lines[t].blocks.push(r),this.lines[t].width+=r.width}},{key:"curWidth",value:function(){var t=this.lines[this.current];return void 0===t?0:t.width}},{key:"append",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"normal";this._add(this.current,t,e)}},{key:"newLine",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"normal";this._add(this.current,t,e),this.current++}},{key:"determineLineHeights",value:function(){for(var t=0;t<this.lines.length;t++){var e=this.lines[t],i=0;if(void 0!==e.blocks)for(var o=0;o<e.blocks.length;o++){var n=e.blocks[o];i<n.height&&(i=n.height)}e.height=i}}},{key:"determineLabelSize",value:function(){for(var t=0,e=0,i=0;i<this.lines.length;i++){var o=this.lines[i];o.width>t&&(t=o.width),e+=o.height}this.width=t,this.height=e}},{key:"removeEmptyBlocks",value:function(){for(var t=[],e=0;e<this.lines.length;e++){var i=this.lines[e];if(0!==i.blocks.length&&(e!==this.lines.length-1||0!==i.width)){var o={};(0,s.default)(o,i),o.blocks=[];for(var n=void 0,r=[],a=0;a<i.blocks.length;a++){var h=i.blocks[a];0!==h.width?r.push(h):void 0===n&&(n=h)}0===r.length&&void 0!==n&&r.push(n),o.blocks=r,t.push(o)}}return t}},{key:"finalize",value:function(){this.determineLineHeights(),this.determineLabelSize();var t=this.removeEmptyBlocks();return{width:this.width,height:this.height,lines:t}}}]),t}();e.default=l},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(23),m=o(f),v=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n._setMargins(o),n}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var o=this.getDimensionsFromLabel(t,e,i);this.width=o.width+this.margin.right+this.margin.left,this.height=o.height+this.margin.top+this.margin.bottom,this.radius=this.width/2}}},{key:"draw",value:function(t,e,i,o,n,s){this.resize(t,o,n),this.left=e-this.width/2,this.top=i-this.height/2,this.initContextForDraw(t,s),t.roundRect(this.left,this.top,this.width,this.height,s.borderRadius),this.performFill(t,s),this.updateBoundingBox(e,i,t,o,n),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,o,n)}},{key:"updateBoundingBox",value:function(t,e,i,o,n){this._updateBoundingBox(t,e,i,o,n);var s=this.options.shapeProperties.borderRadius;this._addBoundingBoxMargin(s)}},{key:"distanceToBorder",value:function(t,e){this.resize(t);var i=this.options.borderWidth;return Math.min(Math.abs(this.width/2/Math.cos(e)),Math.abs(this.height/2/Math.sin(e)))+i}}]),e}(m.default);e.default=v},function(t,e,i){i(195),t.exports=i(7).Object.getPrototypeOf},function(t,e,i){var o=i(41),n=i(85);i(87)("getPrototypeOf",function(){return function(t){return n(o(t))}})},function(t,e,i){t.exports={default:i(197),__esModule:!0}},function(t,e,i){i(198),t.exports=i(7).Object.setPrototypeOf},function(t,e,i){var o=i(17);o(o.S,"Object",{setPrototypeOf:i(199).set})},function(t,e,i){var o=i(32),n=i(27),s=function(t,e){if(n(t),!o(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,e,o){try{o=i(80)(Function.call,i(89).f(Object.prototype,"__proto__").set,2),o(t,[]),e=!(t instanceof Array)}catch(t){e=!0}return function(t,i){return s(t,i),e?t.__proto__=i:o(t,i),t}}({},!1):void 0),check:s}},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(73),m=o(f),v=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n._setMargins(o),n}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var o=this.getDimensionsFromLabel(t,e,i),n=Math.max(o.width+this.margin.right+this.margin.left,o.height+this.margin.top+this.margin.bottom);this.options.size=n/2,this.width=n,this.height=n,this.radius=this.width/2}}},{key:"draw",value:function(t,e,i,o,n,s){this.resize(t,o,n),this.left=e-this.width/2,this.top=i-this.height/2,this._drawRawCircle(t,e,i,s),this.updateBoundingBox(e,i),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,i,o,n)}},{key:"updateBoundingBox",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size}},{key:"distanceToBorder",value:function(t,e){return this.resize(t),.5*this.width}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(73),m=o(f),v=function(t){function e(t,i,o,n,r){(0,a.default)(this,e);var h=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return h.setImages(n,r),h}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height){var o=2*this.options.size;return this.width=o,this.height=o,void(this.radius=.5*this.width)}this.needsRefresh(e,i)&&this._resizeImage()}},{key:"draw",value:function(t,e,i,o,n,s){this.switchImages(o),this.resize(),this.left=e-this.width/2,this.top=i-this.height/2,this._drawRawCircle(t,e,i,s),t.save(),t.clip(),this._drawImageAtPosition(t,s),t.restore(),this._drawImageLabel(t,e,i,o,n),this.updateBoundingBox(e,i)}},{key:"updateBoundingBox",value:function(t,e){this.boundingBox.top=e-this.options.size,this.boundingBox.left=t-this.options.size,this.boundingBox.right=t+this.options.size,this.boundingBox.bottom=e+this.options.size,this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset)}},{key:"distanceToBorder",value:function(t,e){return this.resize(t),.5*this.width}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(23),m=o(f),v=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n._setMargins(o),n}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t,e,i){if(this.needsRefresh(e,i)){var o=this.getDimensionsFromLabel(t,e,i),n=o.width+this.margin.right+this.margin.left;this.width=n,this.height=n,this.radius=this.width/2}}},{key:"draw",value:function(t,e,i,o,n,s){this.resize(t,o,n),this.left=e-this.width/2,this.top=i-this.height/2,this.initContextForDraw(t,s),t.database(e-this.width/2,i-this.height/2,this.width,this.height),this.performFill(t,s),this.updateBoundingBox(e,i,t,o,n),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,o,n)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(24),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"diamond",4,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(24),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"circle",2,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this.resize(t),this.options.size}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(23),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(this.needsRefresh(e,i)){var o=this.getDimensionsFromLabel(t,e,i);this.height=2*o.height,this.width=o.width+o.height,this.radius=.5*this.width}}},{key:"draw",value:function(t,e,i,o,n,s){this.resize(t,o,n),this.left=e-.5*this.width,this.top=i-.5*this.height,this.initContextForDraw(t,s),t.ellipse_vis(this.left,this.top,this.width,this.height),this.performFill(t,s),this.updateBoundingBox(e,i,t,o,n),this.labelModule.draw(t,e,i,o,n)}},{key:"distanceToBorder",value:function(t,e){this.resize(t);var i=.5*this.width,o=.5*this.height,n=Math.sin(e)*i,s=Math.cos(e)*o;return i*o/Math.sqrt(n*n+s*s)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(23),m=o(f),v=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n._setMargins(o),n}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t,e,i){this.needsRefresh(e,i)&&(this.iconSize={width:Number(this.options.icon.size),height:Number(this.options.icon.size)},this.width=this.iconSize.width+this.margin.right+this.margin.left,this.height=this.iconSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:"draw",value:function(t,e,i,o,n,s){if(this.resize(t,o,n),this.options.icon.size=this.options.icon.size||50,this.left=e-this.width/2,this.top=i-this.height/2,this._icon(t,e,i,o,n,s),void 0!==this.options.label){this.labelModule.draw(t,this.left+this.iconSize.width/2+this.margin.left,i+this.height/2+5,o)}this.updateBoundingBox(e,i)}},{key:"updateBoundingBox",value:function(t,e){if(this.boundingBox.top=e-.5*this.options.icon.size,this.boundingBox.left=t-.5*this.options.icon.size,this.boundingBox.right=t+.5*this.options.icon.size,this.boundingBox.bottom=e+.5*this.options.icon.size,void 0!==this.options.label&&this.labelModule.size.width>0){this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelModule.size.height+5)}}},{key:"_icon",value:function(t,e,i,o,n,s){var r=Number(this.options.icon.size);void 0!==this.options.icon.code?(t.font=(o?"bold ":"")+r+"px "+this.options.icon.face,t.fillStyle=this.options.icon.color||"black",t.textAlign="center",t.textBaseline="middle",this.enableShadow(t,s),t.fillText(this.options.icon.code,e,i),this.disableShadow(t,s)):console.error("When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.")}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(73),m=o(f),v=function(t){function e(t,i,o,n,r){(0,a.default)(this,e);var h=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return h.setImages(n,r),h}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.selected,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hover;if(void 0===this.imageObj.src||void 0===this.imageObj.width||void 0===this.imageObj.height){var o=2*this.options.size;return this.width=o,void(this.height=o)}this.needsRefresh(e,i)&&this._resizeImage()}},{key:"draw",value:function(t,e,i,o,n,s){if(this.switchImages(o),this.resize(),this.left=e-this.width/2,this.top=i-this.height/2,!0===this.options.shapeProperties.useBorderWithImage){var r=this.options.borderWidth,a=this.options.borderWidthSelected||2*this.options.borderWidth,h=(o?a:r)/this.body.view.scale;t.lineWidth=Math.min(this.width,h),t.beginPath(),t.strokeStyle=o?this.options.color.highlight.border:n?this.options.color.hover.border:this.options.color.border,t.fillStyle=o?this.options.color.highlight.background:n?this.options.color.hover.background:this.options.color.background,t.rect(this.left-.5*t.lineWidth,this.top-.5*t.lineWidth,this.width+t.lineWidth,this.height+t.lineWidth),t.fill(),this.performStroke(t,s),t.closePath()}this._drawImageAtPosition(t,s),this._drawImageLabel(t,e,i,o,n),this.updateBoundingBox(e,i)}},{key:"updateBoundingBox",value:function(t,e){this.resize(),this._updateBoundingBox(t,e),void 0!==this.options.label&&this.labelModule.size.width>0&&(this.boundingBox.left=Math.min(this.boundingBox.left,this.labelModule.size.left),this.boundingBox.right=Math.max(this.boundingBox.right,this.labelModule.size.left+this.labelModule.size.width),this.boundingBox.bottom=Math.max(this.boundingBox.bottom,this.boundingBox.bottom+this.labelOffset))}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}
+}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(24),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"square",2,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(24),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"hexagon",4,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(24),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"star",4,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(23),m=o(f),v=function(t){function e(t,i,o){(0,a.default)(this,e);var n=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o));return n._setMargins(o),n}return(0,p.default)(e,t),(0,d.default)(e,[{key:"resize",value:function(t,e,i){this.needsRefresh(e,i)&&(this.textSize=this.labelModule.getTextSize(t,e,i),this.width=this.textSize.width+this.margin.right+this.margin.left,this.height=this.textSize.height+this.margin.top+this.margin.bottom,this.radius=.5*this.width)}},{key:"draw",value:function(t,e,i,o,n,s){this.resize(t,o,n),this.left=e-this.width/2,this.top=i-this.height/2,this.enableShadow(t,s),this.labelModule.draw(t,this.left+this.textSize.width/2+this.margin.left,this.top+this.textSize.height/2+this.margin.top,o,n),this.disableShadow(t,s),this.updateBoundingBox(e,i,t,o,n)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(24),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"triangle",3,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(24),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"draw",value:function(t,e,i,o,n,s){this._drawShape(t,"triangleDown",3,e,i,o,n,s)}},{key:"distanceToBorder",value:function(t,e){return this._distanceToBorder(t,e)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=i(2),d=i(11),l=i(12),u=i(74).default,c=function(){function t(e,i,o){var n=this;(0,s.default)(this,t),this.body=e,this.images=i,this.groups=o,this.body.functions.createEdge=this.create.bind(this),this.edgesListeners={add:function(t,e){n.add(e.items)},update:function(t,e){n.update(e.items)},remove:function(t,e){n.remove(e.items)}},this.options={},this.defaultOptions={arrows:{to:{enabled:!1,scaleFactor:1,type:"arrow"},middle:{enabled:!1,scaleFactor:1,type:"arrow"},from:{enabled:!1,scaleFactor:1,type:"arrow"}},arrowStrikethrough:!0,color:{color:"#848484",highlight:"#848484",hover:"#848484",inherit:"from",opacity:1},dashes:!1,font:{color:"#343434",size:14,face:"arial",background:"none",strokeWidth:2,strokeColor:"#ffffff",align:"horizontal",multi:!1,vadjust:0,bold:{mod:"bold"},boldital:{mod:"bold italic"},ital:{mod:"italic"},mono:{mod:"",size:15,face:"courier new",vadjust:2}},hidden:!1,hoverWidth:1.5,label:void 0,labelHighlightBold:!0,length:void 0,physics:!0,scaling:{min:1,max:15,label:{enabled:!0,min:14,max:30,maxVisible:30,drawThreshold:5},customScalingFunction:function(t,e,i,o){if(e===t)return.5;var n=1/(e-t);return Math.max(0,(o-t)*n)}},selectionWidth:1.5,selfReferenceSize:20,shadow:{enabled:!1,color:"rgba(0,0,0,0.5)",size:10,x:5,y:5},smooth:{enabled:!0,type:"dynamic",forceDirection:"none",roundness:.5},title:void 0,width:1,value:void 0},h.deepExtend(this.options,this.defaultOptions),this.bindEventListeners()}return(0,a.default)(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.on("_forceDisableDynamicCurves",function(e){var i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];"dynamic"===e&&(e="continuous");var o=!1;for(var n in t.body.edges)if(t.body.edges.hasOwnProperty(n)){var s=t.body.edges[n],r=t.body.data.edges._data[n];if(void 0!==r){var a=r.smooth;void 0!==a&&!0===a.enabled&&"dynamic"===a.type&&(void 0===e?s.setOptions({smooth:!1}):s.setOptions({smooth:{type:e}}),o=!0)}}!0===i&&!0===o&&t.body.emitter.emit("_dataChanged")}),this.body.emitter.on("_dataUpdated",function(){t.reconnectEdges()}),this.body.emitter.on("refreshEdges",this.refresh.bind(this)),this.body.emitter.on("refresh",this.refresh.bind(this)),this.body.emitter.on("destroy",function(){h.forEach(t.edgesListeners,function(e,i){t.body.data.edges&&t.body.data.edges.off(i,e)}),delete t.body.functions.createEdge,delete t.edgesListeners.add,delete t.edgesListeners.update,delete t.edgesListeners.remove,delete t.edgesListeners})}},{key:"setOptions",value:function(t){if(void 0!==t){u.parseOptions(this.options,t,!0,this.defaultOptions,!0);var e=!1;if(void 0!==t.smooth)for(var i in this.body.edges)this.body.edges.hasOwnProperty(i)&&(e=this.body.edges[i].updateEdgeType()||e);if(void 0!==t.font)for(var o in this.body.edges)this.body.edges.hasOwnProperty(o)&&this.body.edges[o].updateLabelModule();void 0===t.hidden&&void 0===t.physics&&!0!==e||this.body.emitter.emit("_dataChanged")}}},{key:"setData",value:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=this.body.data.edges;if(t instanceof d||t instanceof l)this.body.data.edges=t;else if(Array.isArray(t))this.body.data.edges=new d,this.body.data.edges.add(t);else{if(t)throw new TypeError("Array or DataSet expected");this.body.data.edges=new d}if(o&&h.forEach(this.edgesListeners,function(t,e){o.off(e,t)}),this.body.edges={},this.body.data.edges){h.forEach(this.edgesListeners,function(t,i){e.body.data.edges.on(i,t)});var n=this.body.data.edges.getIds();this.add(n,!0)}this.body.emitter.emit("_adjustEdgesForHierarchicalLayout"),!1===i&&this.body.emitter.emit("_dataChanged")}},{key:"add",value:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.edges,o=this.body.data.edges,n=0;n<t.length;n++){var s=t[n],r=i[s];r&&r.disconnect();var a=o.get(s,{showInternalIds:!0});i[s]=this.create(a)}this.body.emitter.emit("_adjustEdgesForHierarchicalLayout"),!1===e&&this.body.emitter.emit("_dataChanged")}},{key:"update",value:function(t){for(var e=this.body.edges,i=this.body.data.edges,o=!1,n=0;n<t.length;n++){var s=t[n],r=i.get(s),a=e[s];void 0!==a?(a.disconnect(),o=a.setOptions(r)||o,a.connect()):(this.body.edges[s]=this.create(r),o=!0)}!0===o?(this.body.emitter.emit("_adjustEdgesForHierarchicalLayout"),this.body.emitter.emit("_dataChanged")):this.body.emitter.emit("_dataUpdated")}},{key:"remove",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(0!==t.length){var i=this.body.edges;h.forEach(t,function(t){var e=i[t];void 0!==e&&e.remove()}),e&&this.body.emitter.emit("_dataChanged")}}},{key:"refresh",value:function(){var t=this;h.forEach(this.body.edges,function(e,i){var o=t.body.data.edges._data[i];void 0!==o&&e.setOptions(o)})}},{key:"create",value:function(t){return new u(t,this.body,this.options,this.defaultOptions)}},{key:"reconnectEdges",value:function(){var t,e=this.body.nodes,i=this.body.edges;for(t in e)e.hasOwnProperty(t)&&(e[t].edges=[]);for(t in i)if(i.hasOwnProperty(t)){var o=i[t];o.from=null,o.to=null,o.connect()}}},{key:"getConnectedNodes",value:function(t){var e=[];if(void 0!==this.body.edges[t]){var i=this.body.edges[t];void 0!==i.fromId&&e.push(i.fromId),void 0!==i.toId&&e.push(i.toId)}return e}},{key:"_updateState",value:function(){this._addMissingEdges(),this._removeInvalidEdges()}},{key:"_removeInvalidEdges",value:function(){var t=this,e=[];h.forEach(this.body.edges,function(i,o){var n=t.body.nodes[i.toId],s=t.body.nodes[i.fromId];void 0!==n&&!0===n.isCluster||void 0!==s&&!0===s.isCluster||void 0!==n&&void 0!==s||e.push(o)}),this.remove(e,!1)}},{key:"_addMissingEdges",value:function(){var t=this.body.edges,e=this.body.data.edges,i=[];e.forEach(function(e,o){void 0===t[o]&&i.push(o)}),this.add(i,!0)}}]),t}();e.default=c},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(30),s=o(n),r=i(3),a=o(r),h=i(0),d=o(h),l=i(1),u=o(l),c=i(4),p=o(c),f=i(5),m=o(f),v=i(216),g=o(v),y=function(t){function e(t,i,o){return(0,d.default)(this,e),(0,p.default)(this,(e.__proto__||(0,a.default)(e)).call(this,t,i,o))}return(0,m.default)(e,t),(0,u.default)(e,[{key:"_line",value:function(t,e,i){var o=i[0],n=i[1];this._bezierCurve(t,e,o,n)}},{key:"_getViaCoordinates",value:function(){var t=this.from.x-this.to.x,e=this.from.y-this.to.y,i=void 0,o=void 0,n=void 0,s=void 0,r=this.options.smooth.roundness;return(Math.abs(t)>Math.abs(e)||!0===this.options.smooth.forceDirection||"horizontal"===this.options.smooth.forceDirection)&&"vertical"!==this.options.smooth.forceDirection?(o=this.from.y,s=this.to.y,i=this.from.x-r*t,n=this.to.x+r*t):(o=this.from.y-r*e,s=this.to.y+r*e,i=this.from.x,n=this.to.x),[{x:i,y:o},{x:n,y:s}]}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}},{key:"_findBorderPosition",value:function(t,e){return this._findBorderPositionBezier(t,e)}},{key:"_getDistanceToEdge",value:function(t,e,i,o,n,r){var a=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates(),h=(0,s.default)(a,2),d=h[0],l=h[1];return this._getDistanceToBezierEdge(t,e,i,o,n,r,d,l)}},{key:"getPoint",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=(0,s.default)(e,2),o=i[0],n=i[1],r=t,a=[];return a[0]=Math.pow(1-r,3),a[1]=3*r*Math.pow(1-r,2),a[2]=3*Math.pow(r,2)*(1-r),a[3]=Math.pow(r,3),{x:a[0]*this.fromPoint.x+a[1]*o.x+a[2]*n.x+a[3]*this.toPoint.x,y:a[0]*this.fromPoint.y+a[1]*o.y+a[2]*n.y+a[3]*this.toPoint.y}}}]),e}(g.default);e.default=y},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(75),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"_getDistanceToBezierEdge",value:function(t,e,i,o,n,s,r,a){var h=1e9,d=void 0,l=void 0,u=void 0,c=void 0,p=void 0,f=t,m=e,v=[0,0,0,0];for(l=1;l<10;l++)u=.1*l,v[0]=Math.pow(1-u,3),v[1]=3*u*Math.pow(1-u,2),v[2]=3*Math.pow(u,2)*(1-u),v[3]=Math.pow(u,3),c=v[0]*t+v[1]*r.x+v[2]*a.x+v[3]*i,p=v[0]*e+v[1]*r.y+v[2]*a.y+v[3]*o,l>0&&(d=this._getDistanceToLine(f,m,c,p,n,s),h=d<h?d:h),f=c,m=p;return h}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(30),s=o(n),r=i(3),a=o(r),h=i(0),d=o(h),l=i(1),u=o(l),c=i(4),p=o(c),f=i(5),m=o(f),v=i(75),g=o(v),y=function(t){function e(t,i,o){(0,d.default)(this,e);var n=(0,p.default)(this,(e.__proto__||(0,a.default)(e)).call(this,t,i,o));return n._boundFunction=function(){n.positionBezierNode()},n.body.emitter.on("_repositionBezierNodes",n._boundFunction),n}return(0,m.default)(e,t),(0,u.default)(e,[{key:"setOptions",value:function(t){var e=!1;this.options.physics!==t.physics&&(e=!0),this.options=t,this.id=this.options.id,this.from=this.body.nodes[this.options.from],this.to=this.body.nodes[this.options.to],this.setupSupportNode(),this.connect(),!0===e&&(this.via.setOptions({physics:this.options.physics}),this.positionBezierNode())}},{key:"connect",value:function(){this.from=this.body.nodes[this.options.from],this.to=this.body.nodes[this.options.to],void 0===this.from||void 0===this.to||!1===this.options.physics?this.via.setOptions({physics:!1}):this.from.id===this.to.id?this.via.setOptions({physics:!1}):this.via.setOptions({physics:!0})}},{key:"cleanup",value:function(){return this.body.emitter.off("_repositionBezierNodes",this._boundFunction),void 0!==this.via&&(delete this.body.nodes[this.via.id],this.via=void 0,!0)}},{key:"setupSupportNode",value:function(){if(void 0===this.via){var t="edgeId:"+this.id,e=this.body.functions.createNode({id:t,shape:"circle",physics:!0,hidden:!0});this.body.nodes[t]=e,this.via=e,this.via.parentEdgeId=this.id,this.positionBezierNode()}}},{key:"positionBezierNode",value:function(){void 0!==this.via&&void 0!==this.from&&void 0!==this.to?(this.via.x=.5*(this.from.x+this.to.x),this.via.y=.5*(this.from.y+this.to.y)):void 0!==this.via&&(this.via.x=0,this.via.y=0)}},{key:"_line",value:function(t,e,i){this._bezierCurve(t,e,i)}},{key:"getViaNode",value:function(){return this.via}},{key:"getPoint",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.via,i=t,o=void 0,n=void 0;if(this.from===this.to){var r=this._getCircleData(this.from),a=(0,s.default)(r,3),h=a[0],d=a[1],l=a[2],u=2*Math.PI*(1-i);o=h+l*Math.sin(u),n=d+l-l*(1-Math.cos(u))}else o=Math.pow(1-i,2)*this.fromPoint.x+2*i*(1-i)*e.x+Math.pow(i,2)*this.toPoint.x,n=Math.pow(1-i,2)*this.fromPoint.y+2*i*(1-i)*e.y+Math.pow(i,2)*this.toPoint.y;return{x:o,y:n}}},{key:"_findBorderPosition",value:function(t,e){return this._findBorderPositionBezier(t,e,this.via)}},{key:"_getDistanceToEdge",value:function(t,e,i,o,n,s){return this._getDistanceToBezierEdge(t,e,i,o,n,s,this.via)}}]),e}(g.default);e.default=y},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(75),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"_line",value:function(t,e,i){this._bezierCurve(t,e,i)}},{key:"getViaNode",value:function(){return this._getViaCoordinates()}},{key:"_getViaCoordinates",value:function(){var t=void 0,e=void 0,i=this.options.smooth.roundness,o=this.options.smooth.type,n=Math.abs(this.from.x-this.to.x),s=Math.abs(this.from.y-this.to.y);if("discrete"===o||"diagonalCross"===o){var r=void 0,a=void 0;r=a=n<=s?i*s:i*n,this.from.x>this.to.x&&(r=-r),this.from.y>=this.to.y&&(a=-a),t=this.from.x+r,e=this.from.y+a,"discrete"===o&&(n<=s?t=n<i*s?this.from.x:t:e=s<i*n?this.from.y:e)}else if("straightCross"===o){var h=(1-i)*n,d=(1-i)*s;n<=s?(h=0,this.from.y<this.to.y&&(d=-d)):(this.from.x<this.to.x&&(h=-h),d=0),t=this.to.x+h,e=this.to.y+d}else if("horizontal"===o){var l=(1-i)*n;this.from.x<this.to.x&&(l=-l),t=this.to.x+l,e=this.from.y}else if("vertical"===o){var u=(1-i)*s;this.from.y<this.to.y&&(u=-u),t=this.from.x,e=this.to.y+u}else if("curvedCW"===o){n=this.to.x-this.from.x,s=this.from.y-this.to.y;var c=Math.sqrt(n*n+s*s),p=Math.PI,f=Math.atan2(s,n),m=(f+(.5*i+.5)*p)%(2*p);t=this.from.x+(.5*i+.5)*c*Math.sin(m),e=this.from.y+(.5*i+.5)*c*Math.cos(m)}else if("curvedCCW"===o){n=this.to.x-this.from.x,s=this.from.y-this.to.y;var v=Math.sqrt(n*n+s*s),g=Math.PI,y=Math.atan2(s,n),b=(y+(.5*-i+.5)*g)%(2*g);t=this.from.x+(.5*i+.5)*v*Math.sin(b),e=this.from.y+(.5*i+.5)*v*Math.cos(b)}else{var _=void 0,w=void 0;_=w=n<=s?i*s:i*n,this.from.x>this.to.x&&(_=-_),this.from.y>=this.to.y&&(w=-w),t=this.from.x+_,e=this.from.y+w,n<=s?t=this.from.x<=this.to.x?this.to.x<t?this.to.x:t:this.to.x>t?this.to.x:t:e=this.from.y>=this.to.y?this.to.y>e?this.to.y:e:this.to.y<e?this.to.y:e}return{x:t,y:e}}},{key:"_findBorderPosition",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this._findBorderPositionBezier(t,e,i.via)}},{key:"_getDistanceToEdge",value:function(t,e,i,o,n,s){var r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:this._getViaCoordinates();return this._getDistanceToBezierEdge(t,e,i,o,n,s,r)}},{key:"getPoint",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._getViaCoordinates(),i=t;return{x:Math.pow(1-i,2)*this.fromPoint.x+2*i*(1-i)*e.x+Math.pow(i,2)*this.toPoint.x,y:Math.pow(1-i,2)*this.fromPoint.y+2*i*(1-i)*e.y+Math.pow(i,2)*this.toPoint.y}}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(118),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"_line",value:function(t,e){t.beginPath(),t.moveTo(this.fromPoint.x,this.fromPoint.y),t.lineTo(this.toPoint.x,this.toPoint.y),this.enableShadow(t,e),t.stroke(),this.disableShadow(t,e)}},{key:"getViaNode",value:function(){}},{key:"getPoint",value:function(t){return{x:(1-t)*this.fromPoint.x+t*this.toPoint.x,y:(1-t)*this.fromPoint.y+t*this.toPoint.y}}},{key:"_findBorderPosition",value:function(t,e){var i=this.to,o=this.from;t.id===this.from.id&&(i=this.from,o=this.to);var n=Math.atan2(i.y-o.y,i.x-o.x),s=i.x-o.x,r=i.y-o.y,a=Math.sqrt(s*s+r*r),h=t.distanceToBorder(e,n),d=(a-h)/a,l={};return l.x=(1-d)*o.x+d*i.x,l.y=(1-d)*o.y+d*i.y,l}},{key:"_getDistanceToEdge",value:function(t,e,i,o,n,s){return this._getDistanceToLine(t,e,i,o,n,s)}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(8),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(120).default,u=i(221).default,c=i(222).default,p=i(223).default,f=i(224).default,m=i(121).default,v=i(225).default,g=i(226).default,y=i(2),b=i(119).default,_=function(){function t(e){(0,a.default)(this,t),this.body=e,this.physicsBody={physicsNodeIndices:[],physicsEdgeIndices:[],forces:{},velocities:{}},this.physicsEnabled=!0,this.simulationInterval=1e3/60,this.requiresTimeout=!0,this.previousStates={},this.referenceState={},this.freezeCache={},this.renderTimer=void 0,this.adaptiveTimestep=!1,this.adaptiveTimestepEnabled=!1,this.adaptiveCounter=0,this.adaptiveInterval=3,this.stabilized=!1,this.startedStabilization=!1,this.stabilizationIterations=0,this.ready=!1,this.options={},this.defaultOptions={enabled:!0,barnesHut:{theta:.5,gravitationalConstant:-2e3,centralGravity:.3,springLength:95,springConstant:.04,damping:.09,avoidOverlap:0},forceAtlas2Based:{theta:.5,gravitationalConstant:-50,centralGravity:.01,springConstant:.08,springLength:100,damping:.4,avoidOverlap:0},repulsion:{centralGravity:.2,springLength:200,springConstant:.05,nodeDistance:100,damping:.09,avoidOverlap:0},hierarchicalRepulsion:{centralGravity:0,springLength:100,springConstant:.01,nodeDistance:120,damping:.09},maxVelocity:50,minVelocity:.75,solver:"barnesHut",stabilization:{enabled:!0,iterations:1e3,updateInterval:50,onlyDynamicEdges:!1,fit:!0},timestep:.5,adaptiveTimestep:!0},y.extend(this.options,this.defaultOptions),this.timestep=.5,this.layoutFailed=!1,this.bindEventListeners()}return(0,d.default)(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.on("initPhysics",function(){t.initPhysics()}),this.body.emitter.on("_layoutFailed",function(){t.layoutFailed=!0}),this.body.emitter.on("resetPhysics",function(){t.stopSimulation(),t.ready=!1}),this.body.emitter.on("disablePhysics",function(){t.physicsEnabled=!1,t.stopSimulation()}),this.body.emitter.on("restorePhysics",function(){t.setOptions(t.options),!0===t.ready&&t.startSimulation()}),this.body.emitter.on("startSimulation",function(){!0===t.ready&&t.startSimulation()}),this.body.emitter.on("stopSimulation",function(){t.stopSimulation()}),this.body.emitter.on("destroy",function(){t.stopSimulation(!1),t.body.emitter.off()}),this.body.emitter.on("_dataChanged",function(){t.updatePhysicsData()})}},{key:"setOptions",value:function(t){void 0!==t&&(!1===t?(this.options.enabled=!1,this.physicsEnabled=!1,this.stopSimulation()):!0===t?(this.options.enabled=!0,this.physicsEnabled=!0,this.startSimulation()):(this.physicsEnabled=!0,y.selectiveNotDeepExtend(["stabilization"],this.options,t),y.mergeOptions(this.options,t,"stabilization"),void 0===t.enabled&&(this.options.enabled=!0),!1===this.options.enabled&&(this.physicsEnabled=!1,this.stopSimulation()),this.timestep=this.options.timestep)),this.init()}},{key:"init",value:function(){var t;"forceAtlas2Based"===this.options.solver?(t=this.options.forceAtlas2Based,this.nodesSolver=new v(this.body,this.physicsBody,t),this.edgesSolver=new p(this.body,this.physicsBody,t),this.gravitySolver=new g(this.body,this.physicsBody,t)):"repulsion"===this.options.solver?(t=this.options.repulsion,this.nodesSolver=new u(this.body,this.physicsBody,t),this.edgesSolver=new p(this.body,this.physicsBody,t),this.gravitySolver=new m(this.body,this.physicsBody,t)):"hierarchicalRepulsion"===this.options.solver?(t=this.options.hierarchicalRepulsion,this.nodesSolver=new c(this.body,this.physicsBody,t),this.edgesSolver=new f(this.body,this.physicsBody,t),this.gravitySolver=new m(this.body,this.physicsBody,t)):(t=this.options.barnesHut,this.nodesSolver=new l(this.body,this.physicsBody,t),this.edgesSolver=new p(this.body,this.physicsBody,t),this.gravitySolver=new m(this.body,this.physicsBody,t)),this.modelOptions=t}},{key:"initPhysics",value:function(){!0===this.physicsEnabled&&!0===this.options.enabled?!0===this.options.stabilization.enabled?this.stabilize():(this.stabilized=!1,this.ready=!0,this.body.emitter.emit("fit",{},this.layoutFailed),this.startSimulation()):(this.ready=!0,this.body.emitter.emit("fit"))}},{key:"startSimulation",value:function(){!0===this.physicsEnabled&&!0===this.options.enabled?(this.stabilized=!1,this.adaptiveTimestep=!1,this.body.emitter.emit("_resizeNodes"),void 0===this.viewFunction&&(this.viewFunction=this.simulationStep.bind(this),this.body.emitter.on("initRedraw",this.viewFunction),this.body.emitter.emit("_startRendering"))):this.body.emitter.emit("_redraw")}},{key:"stopSimulation",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.stabilized=!0,!0===t&&this._emitStabilized(),void 0!==this.viewFunction&&(this.body.emitter.off("initRedraw",this.viewFunction),this.viewFunction=void 0,!0===t&&this.body.emitter.emit("_stopRendering"))}},{key:"simulationStep",value:function(){var t=Date.now();this.physicsTick(),(Date.now()-t<.4*this.simulationInterval||!0===this.runDoubleSpeed)&&!1===this.stabilized&&(this.physicsTick(),this.runDoubleSpeed=!0),!0===this.stabilized&&this.stopSimulation()}},{key:"_emitStabilized",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.stabilizationIterations;(this.stabilizationIterations>1||!0===this.startedStabilization)&&setTimeout(function(){t.body.emitter.emit("stabilized",{iterations:e}),t.startedStabilization=!1,t.stabilizationIterations=0},0)}},{key:"physicsStep",value:function(){this.gravitySolver.solve(),this.nodesSolver.solve(),this.edgesSolver.solve(),this.moveNodes()}},{key:"adjustTimeStep",value:function(){!0===this._evaluateStepQuality()?this.timestep=1.2*this.timestep:this.timestep/1.2<this.options.timestep?this.timestep=this.options.timestep:(this.adaptiveCounter=-1,this.timestep=Math.max(this.options.timestep,this.timestep/1.2))}},{key:"physicsTick",value:function(){if(this._startStabilizing(),!0!==this.stabilized){if(!0===this.adaptiveTimestep&&!0===this.adaptiveTimestepEnabled){this.adaptiveCounter%this.adaptiveInterval==0?(this.timestep=2*this.timestep,this.physicsStep(),this.revert(),this.timestep=.5*this.timestep,this.physicsStep(),this.physicsStep(),this.adjustTimeStep()):this.physicsStep(),this.adaptiveCounter+=1}else this.timestep=this.options.timestep,this.physicsStep();!0===this.stabilized&&this.revert(),this.stabilizationIterations++}}},{key:"updatePhysicsData",value:function(){this.physicsBody.forces={},this.physicsBody.physicsNodeIndices=[],this.physicsBody.physicsEdgeIndices=[];var t=this.body.nodes,e=this.body.edges;for(var i in t)t.hasOwnProperty(i)&&!0===t[i].options.physics&&this.physicsBody.physicsNodeIndices.push(t[i].id);for(var o in e)e.hasOwnProperty(o)&&!0===e[o].options.physics&&this.physicsBody.physicsEdgeIndices.push(e[o].id);for(var n=0;n<this.physicsBody.physicsNodeIndices.length;n++){var s=this.physicsBody.physicsNodeIndices[n];this.physicsBody.forces[s]={x:0,y:0},void 0===this.physicsBody.velocities[s]&&(this.physicsBody.velocities[s]={x:0,y:0})}for(var r in this.physicsBody.velocities)void 0===t[r]&&delete this.physicsBody.velocities[r]}},{key:"revert",value:function(){var t=(0,s.default)(this.previousStates),e=this.body.nodes,i=this.physicsBody.velocities;this.referenceState={};for(var o=0;o<t.length;o++){var n=t[o];void 0!==e[n]?!0===e[n].options.physics&&(this.referenceState[n]={positions:{x:e[n].x,y:e[n].y}},i[n].x=this.previousStates[n].vx,i[n].y=this.previousStates[n].vy,e[n].x=this.previousStates[n].x,e[n].y=this.previousStates[n].y):delete this.previousStates[n]}}},{key:"_evaluateStepQuality",value:function(){var t=void 0,e=void 0,i=this.body.nodes,o=this.referenceState;for(var n in this.referenceState)if(this.referenceState.hasOwnProperty(n)&&void 0!==i[n]&&(t=i[n].x-o[n].positions.x,e=i[n].y-o[n].positions.y,Math.sqrt(Math.pow(t,2)+Math.pow(e,2))>.3))return!1;return!0}},{key:"moveNodes",value:function(){for(var t=this.physicsBody.physicsNodeIndices,e=0,i=0,o=0;o<t.length;o++){var n=t[o],s=this._performStep(n);e=Math.max(e,s),i+=s}this.adaptiveTimestepEnabled=i/t.length<5,this.stabilized=e<this.options.minVelocity}},{key:"calculateComponentVelocity",value:function(t,e,i){t+=(e-this.modelOptions.damping*t)/i*this.timestep;var o=this.options.maxVelocity||1e9;return Math.abs(t)>o&&(t=t>0?o:-o),t}},{key:"_performStep",value:function(t){var e=this.body.nodes[t],i=this.physicsBody.forces[t],o=this.physicsBody.velocities[t];return this.previousStates[t]={x:e.x,y:e.y,vx:o.x,vy:o.y},!1===e.options.fixed.x?(o.x=this.calculateComponentVelocity(o.x,i.x,e.options.mass),e.x+=o.x*this.timestep):(i.x=0,o.x=0),!1===e.options.fixed.y?(o.y=this.calculateComponentVelocity(o.y,i.y,e.options.mass),e.y+=o.y*this.timestep):(i.y=0,o.y=0),Math.sqrt(Math.pow(o.x,2)+Math.pow(o.y,2))}},{key:"_freezeNodes",value:function(){var t=this.body.nodes;for(var e in t)if(t.hasOwnProperty(e)&&t[e].x&&t[e].y){var i=t[e].options.fixed;this.freezeCache[e]={x:i.x,y:i.y},i.x=!0,i.y=!0}}},{key:"_restoreFrozenNodes",value:function(){var t=this.body.nodes;for(var e in t)t.hasOwnProperty(e)&&void 0!==this.freezeCache[e]&&(t[e].options.fixed.x=this.freezeCache[e].x,t[e].options.fixed.y=this.freezeCache[e].y);this.freezeCache={}}},{key:"stabilize",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.stabilization.iterations;if("number"!=typeof e&&(e=this.options.stabilization.iterations,console.log("The stabilize method needs a numeric amount of iterations. Switching to default: ",e)),0===this.physicsBody.physicsNodeIndices.length)return void(this.ready=!0);this.adaptiveTimestep=this.options.adaptiveTimestep,this.body.emitter.emit("_resizeNodes"),this.stopSimulation(),this.stabilized=!1,this.body.emitter.emit("_blockRedraw"),this.targetIterations=e,!0===this.options.stabilization.onlyDynamicEdges&&this._freezeNodes(),this.stabilizationIterations=0,setTimeout(function(){return t._stabilizationBatch()},0)}},{key:"_startStabilizing",value:function(){return!0!==this.startedStabilization&&(this.body.emitter.emit("startStabilizing"),this.startedStabilization=!0,!0)}},{key:"_stabilizationBatch",value:function(){var t=this,e=function(){return!1===t.stabilized&&t.stabilizationIterations<t.targetIterations},i=function(){t.body.emitter.emit("stabilizationProgress",{iterations:t.stabilizationIterations,total:t.targetIterations})};this._startStabilizing()&&i();for(var o=0;e()&&o<this.options.stabilization.updateInterval;)this.physicsTick(),o++;i(),e()?setTimeout(this._stabilizationBatch.bind(this),0):this._finalizeStabilization()}},{key:"_finalizeStabilization",value:function(){this.body.emitter.emit("_allowRedraw"),!0===this.options.stabilization.fit&&this.body.emitter.emit("fit"),!0===this.options.stabilization.onlyDynamicEdges&&this._restoreFrozenNodes(),this.body.emitter.emit("stabilizationIterationsDone"),this.body.emitter.emit("_requestRedraw"),!0===this.stabilized?this._emitStabilized():this.startSimulation(),this.ready=!0}},{key:"_drawForces",value:function(t){for(var e=0;e<this.physicsBody.physicsNodeIndices.length;e++){var i=this.physicsBody.physicsNodeIndices[e],o=this.body.nodes[i],n=this.physicsBody.forces[i],s=Math.sqrt(Math.pow(n.x,2)+Math.pow(n.x,2)),r=Math.min(Math.max(5,s),15),a=3*r,h=y.HSVToHex((180-180*Math.min(1,Math.max(0,.03*s)))/360,1,1),d={x:o.x+20*n.x,y:o.y+20*n.y};t.lineWidth=r,t.strokeStyle=h,t.beginPath(),t.moveTo(o.x,o.y),t.lineTo(d.x,d.y),t.stroke();var l=Math.atan2(n.y,n.x);t.fillStyle=h,b.draw(t,{type:"arrow",point:d,angle:l,length:a}),t.fill()}}}]),t}();e.default=_},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=function(){function t(e,i,o){(0,s.default)(this,t),this.body=e,this.physicsBody=i,this.setOptions(o)}return(0,a.default)(t,[{key:"setOptions",value:function(t){this.options=t}},{key:"solve",value:function(){for(var t,e,i,o,n,s,r,a,h=this.body.nodes,d=this.physicsBody.physicsNodeIndices,l=this.physicsBody.forces,u=this.options.nodeDistance,c=-2/3/u,p=0;p<d.length-1;p++){r=h[d[p]];for(var f=p+1;f<d.length;f++)a=h[d[f]],t=a.x-r.x,e=a.y-r.y,i=Math.sqrt(t*t+e*e),0===i&&(i=.1*Math.random(),t=i),i<2*u&&(s=i<.5*u?1:c*i+4/3,s/=i,o=t*s,n=e*s,l[r.id].x-=o,l[r.id].y-=n,l[a.id].x+=o,l[a.id].y+=n)}}}]),t}();e.default=h},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=function(){function t(e,i,o){(0,s.default)(this,t),this.body=e,this.physicsBody=i,this.setOptions(o)}return(0,a.default)(t,[{key:"setOptions",value:function(t){this.options=t}},{key:"solve",value:function(){var t,e,i,o,n,s,r,a,h,d,l=this.body.nodes,u=this.physicsBody.physicsNodeIndices,c=this.physicsBody.forces,p=this.options.nodeDistance;for(h=0;h<u.length-1;h++)for(r=l[u[h]],d=h+1;d<u.length;d++)if(a=l[u[d]],r.level===a.level){t=a.x-r.x,e=a.y-r.y,i=Math.sqrt(t*t+e*e)
+;s=i<p?-Math.pow(.05*i,2)+Math.pow(.05*p,2):0,0===i?i=.01:s/=i,o=t*s,n=e*s,c[r.id].x-=o,c[r.id].y-=n,c[a.id].x+=o,c[a.id].y+=n}}}]),t}();e.default=h},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=function(){function t(e,i,o){(0,s.default)(this,t),this.body=e,this.physicsBody=i,this.setOptions(o)}return(0,a.default)(t,[{key:"setOptions",value:function(t){this.options=t}},{key:"solve",value:function(){for(var t=void 0,e=void 0,i=this.physicsBody.physicsEdgeIndices,o=this.body.edges,n=void 0,s=void 0,r=void 0,a=0;a<i.length;a++)e=o[i[a]],!0===e.connected&&e.toId!==e.fromId&&void 0!==this.body.nodes[e.toId]&&void 0!==this.body.nodes[e.fromId]&&(void 0!==e.edgeType.via?(t=void 0===e.options.length?this.options.springLength:e.options.length,n=e.to,s=e.edgeType.via,r=e.from,this._calculateSpringForce(n,s,.5*t),this._calculateSpringForce(s,r,.5*t)):(t=void 0===e.options.length?1.5*this.options.springLength:e.options.length,this._calculateSpringForce(e.from,e.to,t)))}},{key:"_calculateSpringForce",value:function(t,e,i){var o=t.x-e.x,n=t.y-e.y,s=Math.max(Math.sqrt(o*o+n*n),.01),r=this.options.springConstant*(i-s)/s,a=o*r,h=n*r;void 0!==this.physicsBody.forces[t.id]&&(this.physicsBody.forces[t.id].x+=a,this.physicsBody.forces[t.id].y+=h),void 0!==this.physicsBody.forces[e.id]&&(this.physicsBody.forces[e.id].x-=a,this.physicsBody.forces[e.id].y-=h)}}]),t}();e.default=h},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=function(){function t(e,i,o){(0,s.default)(this,t),this.body=e,this.physicsBody=i,this.setOptions(o)}return(0,a.default)(t,[{key:"setOptions",value:function(t){this.options=t}},{key:"solve",value:function(){for(var t,e,i,o,n,s,r,a,h=this.body.edges,d=this.physicsBody.physicsEdgeIndices,l=this.physicsBody.physicsNodeIndices,u=this.physicsBody.forces,c=0;c<l.length;c++){var p=l[c];u[p].springFx=0,u[p].springFy=0}for(var f=0;f<d.length;f++)e=h[d[f]],!0===e.connected&&(t=void 0===e.options.length?this.options.springLength:e.options.length,i=e.from.x-e.to.x,o=e.from.y-e.to.y,a=Math.sqrt(i*i+o*o),a=0===a?.01:a,r=this.options.springConstant*(t-a)/a,n=i*r,s=o*r,e.to.level!=e.from.level?(void 0!==u[e.toId]&&(u[e.toId].springFx-=n,u[e.toId].springFy-=s),void 0!==u[e.fromId]&&(u[e.fromId].springFx+=n,u[e.fromId].springFy+=s)):(void 0!==u[e.toId]&&(u[e.toId].x-=.5*n,u[e.toId].y-=.5*s),void 0!==u[e.fromId]&&(u[e.fromId].x+=.5*n,u[e.fromId].y+=.5*s)));r=1;for(var m,v,g=0;g<l.length;g++){var y=l[g];m=Math.min(r,Math.max(-r,u[y].springFx)),v=Math.min(r,Math.max(-r,u[y].springFy)),u[y].x+=m,u[y].y+=v}for(var b=0,_=0,w=0;w<l.length;w++){var x=l[w];b+=u[x].x,_+=u[x].y}for(var k=b/l.length,S=_/l.length,D=0;D<l.length;D++){var M=l[D];u[M].x-=k,u[M].y-=S}}}]),t}();e.default=h},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(120),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"_calculateForces",value:function(t,e,i,o,n){0===t&&(t=.1*Math.random(),e=t),this.overlapAvoidanceFactor<1&&o.shape.radius&&(t=Math.max(.1+this.overlapAvoidanceFactor*o.shape.radius,t-o.shape.radius));var s=o.edges.length+1,r=this.options.gravitationalConstant*n.mass*o.options.mass*s/Math.pow(t,2),a=e*r,h=i*r;this.physicsBody.forces[o.id].x+=a,this.physicsBody.forces[o.id].y+=h}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(121),m=o(f),v=function(t){function e(t,i,o){return(0,a.default)(this,e),(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o))}return(0,p.default)(e,t),(0,d.default)(e,[{key:"_calculateForces",value:function(t,e,i,o,n){if(t>0){var s=n.edges.length+1,r=this.options.centralGravity*s*n.options.mass;o[n.id].x=e*r,o[n.id].y=i*r}}}]),e}(m.default);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(8),s=o(n),r=i(6),a=o(r),h=i(0),d=o(h),l=i(1),u=o(l),c=i(2),p=i(76).default,f=i(228).default,m=i(74).default,v=i(47).default,g=function(){function t(e){var i=this;(0,d.default)(this,t),this.body=e,this.clusteredNodes={},this.clusteredEdges={},this.options={},this.defaultOptions={},c.extend(this.options,this.defaultOptions),this.body.emitter.on("_resetData",function(){i.clusteredNodes={},i.clusteredEdges={}})}return(0,u.default)(t,[{key:"clusterByHubsize",value:function(t,e){void 0===t?t=this._getHubSize():"object"===(void 0===t?"undefined":(0,a.default)(t))&&(e=this._checkOptions(t),t=this._getHubSize());for(var i=[],o=0;o<this.body.nodeIndices.length;o++){var n=this.body.nodes[this.body.nodeIndices[o]];n.edges.length>=t&&i.push(n.id)}for(var s=0;s<i.length;s++)this.clusterByConnection(i[s],e,!0);this.body.emitter.emit("_dataChanged")}},{key:"cluster",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(void 0===e.joinCondition)throw new Error("Cannot call clusterByNodeData without a joinCondition function in the options.");e=this._checkOptions(e);var o={},n={};c.forEach(this.body.nodes,function(i,s){var r=p.cloneOptions(i);!0===e.joinCondition(r)&&(o[s]=i,c.forEach(i.edges,function(e){void 0===t.clusteredEdges[e.id]&&(n[e.id]=e)}))}),this._cluster(o,n,e,i)}},{key:"clusterByEdgeCount",value:function(t,e){var i=this,o=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];e=this._checkOptions(e);for(var n=[],r={},a=void 0,h=void 0,d=void 0,l=0;l<this.body.nodeIndices.length;l++){var u,c,f;!function(o){var l={},m={},v=i.body.nodeIndices[o],g=i.body.nodes[v];if(void 0===r[v]){d=0,h=[];for(var y=0;y<g.edges.length;y++)a=g.edges[y],void 0===i.clusteredEdges[a.id]&&(a.toId!==a.fromId&&d++,h.push(a));if(d===t){u=function(t){if(void 0===e.joinCondition||null===e.joinCondition)return!0;var i=p.cloneOptions(t);return e.joinCondition(i)};for(var b=!0,_=0;_<h.length;_++){a=h[_];var w=i._getConnectedId(a,v);if(!u(g)){b=!1;break}m[a.id]=a,l[v]=g,l[w]=i.body.nodes[w],r[v]=!0}if((0,s.default)(l).length>0&&(0,s.default)(m).length>0&&!0===b)if(c=function(){for(var t=0;t<n.length;++t)for(var e in l)if(void 0!==n[t].nodes[e])return n[t]},void 0!==(f=c())){for(var x in l)void 0===f.nodes[x]&&(f.nodes[x]=l[x]);for(var k in m)void 0===f.edges[k]&&(f.edges[k]=m[k])}else n.push({nodes:l,edges:m})}}}(l)}for(var l=0;l<n.length;l++)this._cluster(n[l].nodes,n[l].edges,e,!1);!0===o&&this.body.emitter.emit("_dataChanged")}},{key:"clusterOutliers",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(1,t,e)}},{key:"clusterBridges",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.clusterByEdgeCount(2,t,e)}},{key:"clusterByConnection",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error("No nodeId supplied to clusterByConnection!");if(void 0===this.body.nodes[t])throw new Error("The nodeId given to clusterByConnection does not exist!");var o=this.body.nodes[t];e=this._checkOptions(e,o),void 0===e.clusterNodeProperties.x&&(e.clusterNodeProperties.x=o.x),void 0===e.clusterNodeProperties.y&&(e.clusterNodeProperties.y=o.y),void 0===e.clusterNodeProperties.fixed&&(e.clusterNodeProperties.fixed={},e.clusterNodeProperties.fixed.x=o.options.fixed.x,e.clusterNodeProperties.fixed.y=o.options.fixed.y);var n={},r={},a=o.id,h=p.cloneOptions(o);n[a]=o;for(var d=0;d<o.edges.length;d++){var l=o.edges[d];if(void 0===this.clusteredEdges[l.id]){var u=this._getConnectedId(l,a);if(void 0===this.clusteredNodes[u])if(u!==a)if(void 0===e.joinCondition)r[l.id]=l,n[u]=this.body.nodes[u];else{var c=p.cloneOptions(this.body.nodes[u]);!0===e.joinCondition(h,c)&&(r[l.id]=l,n[u]=this.body.nodes[u])}else r[l.id]=l}}var f=(0,s.default)(n).map(function(t){return n[t].id});for(m in n)if(n.hasOwnProperty(m))for(var m=n[m],v=0;v<m.edges.length;v++){var g=m.edges[v];f.indexOf(this._getConnectedId(g,m.id))>-1&&(r[g.id]=g)}this._cluster(n,r,e,i)}},{key:"_createClusterEdges",value:function(t,e,i,o){for(var n=void 0,r=void 0,a=void 0,h=void 0,d=void 0,l=void 0,u=(0,s.default)(t),c=[],p=0;p<u.length;p++){r=u[p],a=t[r];for(var f=0;f<a.edges.length;f++)n=a.edges[f],void 0===this.clusteredEdges[n.id]&&(n.toId==n.fromId?e[n.id]=n:n.toId==r?(h=i.id,d=n.fromId,l=d):(h=n.toId,d=i.id,l=h),void 0===t[l]&&c.push({edge:n,fromId:d,toId:h}))}for(var m=[],v=0;v<c.length;v++){var g=c[v],y=g.edge,b=function(t){for(var e=0;e<m.length;e++){var i=m[e],o=t.fromId===i.fromId&&t.toId===i.toId,n=t.fromId===i.toId&&t.toId===i.fromId;if(o||n)return i}return null}(g);null===b?(b=this._createClusteredEdge(g.fromId,g.toId,y,o),m.push(b)):b.clusteringEdgeReplacingIds.push(y.id),this.body.edges[y.id].edgeReplacedById=b.id,this._backupEdgeOptions(y),y.setOptions({physics:!1})}}},{key:"_checkOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return void 0===t.clusterEdgeProperties&&(t.clusterEdgeProperties={}),void 0===t.clusterNodeProperties&&(t.clusterNodeProperties={}),t}},{key:"_cluster",value:function(t,e,i){var o=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],n=[];for(var r in t)t.hasOwnProperty(r)&&void 0!==this.clusteredNodes[r]&&n.push(r);for(var a=0;a<n.length;++a)delete t[n[a]];if(0!=(0,s.default)(t).length&&(1!=(0,s.default)(t).length||1==i.clusterNodeProperties.allowSingleNodeCluster)){var h=c.deepExtend({},i.clusterNodeProperties);if(void 0!==i.processProperties){var d=[];for(var l in t)if(t.hasOwnProperty(l)){var u=p.cloneOptions(t[l]);d.push(u)}var m=[];for(var v in e)if(e.hasOwnProperty(v)&&"clusterEdge:"!==v.substr(0,12)){var g=p.cloneOptions(e[v],"edge");m.push(g)}if(!(h=i.processProperties(h,d,m)))throw new Error("The processProperties function does not return properties!")}void 0===h.id&&(h.id="cluster:"+c.randomUUID());var y=h.id;void 0===h.label&&(h.label="cluster");var b=void 0;void 0===h.x&&(b=this._getClusterPosition(t),h.x=b.x),void 0===h.y&&(void 0===b&&(b=this._getClusterPosition(t)),h.y=b.y),h.id=y;var _=this.body.functions.createNode(h,f);_.containedNodes=t,_.containedEdges=e,_.clusterEdgeProperties=i.clusterEdgeProperties,this.body.nodes[h.id]=_,this._clusterEdges(t,e,h,i.clusterEdgeProperties),h.id=void 0,!0===o&&this.body.emitter.emit("_dataChanged")}}},{key:"_backupEdgeOptions",value:function(t){void 0===this.clusteredEdges[t.id]&&(this.clusteredEdges[t.id]={physics:t.options.physics})}},{key:"_restoreEdge",value:function(t){var e=this.clusteredEdges[t.id];void 0!==e&&(t.setOptions({physics:e.physics}),delete this.clusteredEdges[t.id])}},{key:"isCluster",value:function(t){return void 0!==this.body.nodes[t]?!0===this.body.nodes[t].isCluster:(console.log("Node does not exist."),!1)}},{key:"_getClusterPosition",value:function(t){for(var e=(0,s.default)(t),i=t[e[0]].x,o=t[e[0]].x,n=t[e[0]].y,r=t[e[0]].y,a=void 0,h=1;h<e.length;h++)a=t[e[h]],i=a.x<i?a.x:i,o=a.x>o?a.x:o,n=a.y<n?a.y:n,r=a.y>r?a.y:r;return{x:.5*(i+o),y:.5*(n+r)}}},{key:"openCluster",value:function(t,e){var i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(void 0===t)throw new Error("No clusterNodeId supplied to openCluster.");var o=this.body.nodes[t];if(void 0===o)throw new Error("The clusterNodeId supplied to openCluster does not exist.");if(!0!==o.isCluster||void 0===o.containedNodes||void 0===o.containedEdges)throw new Error("The node:"+t+" is not a valid cluster.");var n=this.findNode(t),s=n.indexOf(t)-1;if(s>=0){var r=n[s];return this.body.nodes[r]._openChildCluster(t),delete this.body.nodes[t],void(!0===i&&this.body.emitter.emit("_dataChanged"))}var a=o.containedNodes,h=o.containedEdges;if(void 0!==e&&void 0!==e.releaseFunction&&"function"==typeof e.releaseFunction){var d={},l={x:o.x,y:o.y};for(var u in a)if(a.hasOwnProperty(u)){var p=this.body.nodes[u];d[u]={x:p.x,y:p.y}}var f=e.releaseFunction(l,d);for(var m in a)if(a.hasOwnProperty(m)){var v=this.body.nodes[m];void 0!==f[m]&&(v.x=void 0===f[m].x?o.x:f[m].x,v.y=void 0===f[m].y?o.y:f[m].y)}}else c.forEach(a,function(t){!1===t.options.fixed.x&&(t.x=o.x),!1===t.options.fixed.y&&(t.y=o.y)});for(var g in a)if(a.hasOwnProperty(g)){var y=this.body.nodes[g];y.vx=o.vx,y.vy=o.vy,y.setOptions({physics:!0}),delete this.clusteredNodes[g]}for(var b=[],_=0;_<o.edges.length;_++)b.push(o.edges[_]);for(var w=0;w<b.length;w++){for(var x=b[w],k=this._getConnectedId(x,t),S=this.clusteredNodes[k],D=0;D<x.clusteringEdgeReplacingIds.length;D++){var M=x.clusteringEdgeReplacingIds[D],C=this.body.edges[M];if(void 0!==C)if(void 0!==S){var O=this.body.nodes[S.clusterId];O.containedEdges[C.id]=C,delete h[C.id];var E=C.fromId,T=C.toId;C.toId==k?T=S.clusterId:E=S.clusterId,this._createClusteredEdge(E,T,C,O.clusterEdgeProperties,{hidden:!1,physics:!0})}else this._restoreEdge(C)}x.remove()}for(var P in h)h.hasOwnProperty(P)&&this._restoreEdge(h[P]);delete this.body.nodes[t],!0===i&&this.body.emitter.emit("_dataChanged")}},{key:"getNodesInCluster",value:function(t){var e=[];if(!0===this.isCluster(t)){var i=this.body.nodes[t].containedNodes;for(var o in i)i.hasOwnProperty(o)&&e.push(this.body.nodes[o].id)}return e}},{key:"findNode",value:function(t){for(var e=[],i=0,o=void 0;void 0!==this.clusteredNodes[t]&&i<100;){if(void 0===(o=this.body.nodes[t]))return[];e.push(o.id),t=this.clusteredNodes[t].clusterId,i++}return void 0===(o=this.body.nodes[t])?[]:(e.push(o.id),e.reverse(),e)}},{key:"updateClusteredNode",value:function(t,e){if(void 0===t)throw new Error("No clusteredNodeId supplied to updateClusteredNode.");if(void 0===e)throw new Error("No newOptions supplied to updateClusteredNode.");if(void 0===this.body.nodes[t])throw new Error("The clusteredNodeId supplied to updateClusteredNode does not exist.");this.body.nodes[t].setOptions(e),this.body.emitter.emit("_dataChanged")}},{key:"updateEdge",value:function(t,e){if(void 0===t)throw new Error("No startEdgeId supplied to updateEdge.");if(void 0===e)throw new Error("No newOptions supplied to updateEdge.");if(void 0===this.body.edges[t])throw new Error("The startEdgeId supplied to updateEdge does not exist.");for(var i=this.getClusteredEdges(t),o=0;o<i.length;o++){this.body.edges[i[o]].setOptions(e)}this.body.emitter.emit("_dataChanged")}},{key:"getClusteredEdges",value:function(t){for(var e=[],i=0;void 0!==t&&void 0!==this.body.edges[t]&&i<100;)e.push(this.body.edges[t].id),t=this.body.edges[t].edgeReplacedById,i++;return e.reverse(),e}},{key:"getBaseEdge",value:function(t){return this.getBaseEdges(t)[0]}},{key:"getBaseEdges",value:function(t){for(var e=[t],i=[],o=[],n=0;e.length>0&&n<100;){var s=e.pop();if(void 0!==s){var r=this.body.edges[s];if(void 0!==r){n++;var a=r.clusteringEdgeReplacingIds;if(void 0===a)o.push(s);else for(var h=0;h<a.length;++h){var d=a[h];-1===e.indexOf(a)&&-1===i.indexOf(a)&&e.push(d)}i.push(s)}}}return o}},{key:"_getConnectedId",value:function(t,e){return t.toId!=e?t.toId:(t.fromId,t.fromId)}},{key:"_getHubSize",value:function(){for(var t=0,e=0,i=0,o=0,n=0;n<this.body.nodeIndices.length;n++){var s=this.body.nodes[this.body.nodeIndices[n]];s.edges.length>o&&(o=s.edges.length),t+=s.edges.length,e+=Math.pow(s.edges.length,2),i+=1}t/=i,e/=i;var r=e-Math.pow(t,2),a=Math.sqrt(r),h=Math.floor(t+2*a);return h>o&&(h=o),h}},{key:"_createClusteredEdge",value:function(t,e,i,o,n){var s=p.cloneOptions(i,"edge");c.deepExtend(s,o),s.from=t,s.to=e,s.id="clusterEdge:"+c.randomUUID(),void 0!==n&&c.deepExtend(s,n);var r=this.body.functions.createEdge(s);return r.clusteringEdgeReplacingIds=[i.id],r.connect(),this.body.edges[r.id]=r,r}},{key:"_clusterEdges",value:function(t,e,i,o){if(e instanceof m){var n=e,s={};s[n.id]=n,e=s}if(t instanceof v){var r=t,a={};a[r.id]=r,t=a}if(void 0===i||null===i)throw new Error("_clusterEdges: parameter clusterNode required");void 0===o&&(o=i.clusterEdgeProperties),this._createClusterEdges(t,e,i,o);for(var h in e)if(e.hasOwnProperty(h)&&void 0!==this.body.edges[h]){var d=this.body.edges[h];this._backupEdgeOptions(d),d.setOptions({physics:!1})}for(var l in t)t.hasOwnProperty(l)&&(this.clusteredNodes[l]={clusterId:i.id,node:this.body.nodes[l]},this.body.nodes[l].setOptions({physics:!1}))}},{key:"_getClusterNodeForNode",value:function(t){if(void 0!==t){var e=this.clusteredNodes[t];if(void 0!==e){var i=e.clusterId;if(void 0!==i)return this.body.nodes[i]}}}},{key:"_filter",value:function(t,e){var i=[];return c.forEach(t,function(t){e(t)&&i.push(t)}),i}},{key:"_updateState",value:function(){var t=this,e=void 0,i=[],o=[],n=function(e){c.forEach(t.body.nodes,function(t){!0===t.isCluster&&e(t)})};for(e in this.clusteredNodes)if(this.clusteredNodes.hasOwnProperty(e)){var r=this.body.nodes[e];void 0===r&&i.push(e)}n(function(t){for(var e=0;e<i.length;e++)delete t.containedNodes[i[e]]});for(var a=0;a<i.length;a++)delete this.clusteredNodes[i[a]];c.forEach(this.clusteredEdges,function(e){var i=t.body.edges[e];void 0!==i&&i.endPointsValid()||o.push(e)}),n(function(t){c.forEach(t.containedEdges,function(t,e){t.endPointsValid()||-1!==o.indexOf(e)||o.push(e)})}),c.forEach(this.body.edges,function(e,i){var n=!0,s=e.clusteringEdgeReplacingIds;if(void 0!==s){var r=0;c.forEach(s,function(e){var i=t.body.edges[e];void 0!==i&&i.endPointsValid()&&(r+=1)}),n=r>0}e.endPointsValid()&&n||o.push(i)}),n(function(e){c.forEach(o,function(i){delete e.containedEdges[i],c.forEach(e.edges,function(n,s){if(n.id===i)return void(e.edges[s]=null);n.clusteringEdgeReplacingIds=t._filter(n.clusteringEdgeReplacingIds,function(t){return-1===o.indexOf(t)})}),e.edges=t._filter(e.edges,function(t){return null!==t})})}),c.forEach(o,function(e){delete t.clusteredEdges[e]}),c.forEach(o,function(e){delete t.body.edges[e]});var h=(0,s.default)(this.body.edges);c.forEach(h,function(e){var i=t.body.edges[e],o=t._isClusteredNode(i.fromId)||t._isClusteredNode(i.toId);if(o!==t._isClusteredEdge(i.id)){if(!o)throw new Error("remove edge from clustering not implemented!");var n=t._getClusterNodeForNode(i.fromId);void 0!==n&&t._clusterEdges(t.body.nodes[i.fromId],i,n);var s=t._getClusterNodeForNode(i.toId);void 0!==s&&t._clusterEdges(t.body.nodes[i.toId],i,s)}});for(var d=!1,l=!0;l;)!function(){var e=[];n(function(t){var i=(0,s.default)(t.containedNodes).length,o=!0===t.options.allowSingleNodeCluster;(o&&i<1||!o&&i<2)&&e.push(t.id)});for(var i=0;i<e.length;++i)t.openCluster(e[i],{},!1);l=e.length>0,d=d||l}();d&&this._updateState()}},{key:"_isClusteredNode",value:function(t){return void 0!==this.clusteredNodes[t]}},{key:"_isClusteredEdge",value:function(t){return void 0!==this.clusteredEdges[t]}}]),t}();e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(3),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(4),u=o(l),c=i(5),p=o(c),f=i(2),m=i(47).default,v=function(t){function e(t,i,o,n,r,h){(0,a.default)(this,e);var d=(0,u.default)(this,(e.__proto__||(0,s.default)(e)).call(this,t,i,o,n,r,h));return d.isCluster=!0,d.containedNodes={},d.containedEdges={},d}return(0,p.default)(e,t),(0,d.default)(e,[{key:"_openChildCluster",value:function(t){var e=this,i=this.body.nodes[t];if(void 0===this.containedNodes[t])throw new Error("node with id: "+t+" not in current cluster");if(!i.isCluster)throw new Error("node with id: "+t+" is not a cluster");delete this.containedNodes[t],f.forEach(i.edges,function(t){delete e.containedEdges[t.id]}),f.forEach(i.containedNodes,function(t,i){e.containedNodes[i]=t}),i.containedNodes={},f.forEach(i.containedEdges,function(t,i){e.containedEdges[i]=t}),i.containedEdges={},f.forEach(i.edges,function(t){f.forEach(e.edges,function(i){var o=i.clusteringEdgeReplacingIds.indexOf(t.id);-1!==o&&(f.forEach(t.clusteringEdgeReplacingIds,function(t){i.clusteringEdgeReplacingIds.push(t),e.body.edges[t].edgeReplacedById=i.id}),i.clusteringEdgeReplacingIds.splice(o,1))})}),i.edges=[]}}]),e}(m);e.default=v},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}function n(){var t;void 0!==window&&(t=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame),window.requestAnimationFrame=void 0===t?function(t){t()}:t}Object.defineProperty(e,"__esModule",{value:!0});var s=i(0),r=o(s),a=i(1),h=o(a),d=i(2),l=function(){function t(e,i){(0,r.default)(this,t),n(),this.body=e,this.canvas=i,this.redrawRequested=!1,this.renderTimer=void 0,this.requiresTimeout=!0,this.renderingActive=!1,this.renderRequests=0,this.allowRedraw=!0,this.dragging=!1,this.options={},this.defaultOptions={hideEdgesOnDrag:!1,hideNodesOnDrag:!1},d.extend(this.options,this.defaultOptions),this._determineBrowserMethod(),this.bindEventListeners()}return(0,h.default)(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.on("dragStart",function(){t.dragging=!0}),this.body.emitter.on("dragEnd",function(){t.dragging=!1}),this.body.emitter.on("_resizeNodes",function(){t._resizeNodes()}),this.body.emitter.on("_redraw",function(){!1===t.renderingActive&&t._redraw()}),this.body.emitter.on("_blockRedraw",function(){t.allowRedraw=!1}),this.body.emitter.on("_allowRedraw",function(){t.allowRedraw=!0,t.redrawRequested=!1}),this.body.emitter.on("_requestRedraw",this._requestRedraw.bind(this)),this.body.emitter.on("_startRendering",function(){t.renderRequests+=1,t.renderingActive=!0,t._startRendering()}),this.body.emitter.on("_stopRendering",function(){t.renderRequests-=1,t.renderingActive=t.renderRequests>0,t.renderTimer=void 0}),this.body.emitter.on("destroy",function(){t.renderRequests=0,t.allowRedraw=!1,t.renderingActive=!1,!0===t.requiresTimeout?clearTimeout(t.renderTimer):window.cancelAnimationFrame(t.renderTimer),t.body.emitter.off()})}},{key:"setOptions",value:function(t){if(void 0!==t){var e=["hideEdgesOnDrag","hideNodesOnDrag"];d.selectiveDeepExtend(e,this.options,t)}}},{key:"_requestNextFrame",value:function(t,e){if("undefined"!=typeof window){var i=void 0,o=window;return!0===this.requiresTimeout?i=o.setTimeout(t,e):o.requestAnimationFrame&&(i=o.requestAnimationFrame(t)),i}}},{key:"_startRendering",value:function(){!0===this.renderingActive&&void 0===this.renderTimer&&(this.renderTimer=this._requestNextFrame(this._renderStep.bind(this),this.simulationInterval))}},{key:"_renderStep",value:function(){!0===this.renderingActive&&(this.renderTimer=void 0,!0===this.requiresTimeout&&this._startRendering(),this._redraw(),!1===this.requiresTimeout&&this._startRendering())}},{key:"redraw",value:function(){this.body.emitter.emit("setSize"),this._redraw()}},{key:"_requestRedraw",value:function(){var t=this;!0!==this.redrawRequested&&!1===this.renderingActive&&!0===this.allowRedraw&&(this.redrawRequested=!0,this._requestNextFrame(function(){t._redraw(!1)},0))}},{key:"_redraw",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!0===this.allowRedraw){this.body.emitter.emit("initRedraw"),this.redrawRequested=!1,0!==this.canvas.frame.canvas.width&&0!==this.canvas.frame.canvas.height||this.canvas.setSize(),this.canvas.setTransform();var e=this.canvas.getContext(),i=this.canvas.frame.canvas.clientWidth,o=this.canvas.frame.canvas.clientHeight;if(e.clearRect(0,0,i,o),0===this.canvas.frame.clientWidth)return;e.save(),e.translate(this.body.view.translation.x,this.body.view.translation.y),e.scale(this.body.view.scale,this.body.view.scale),e.beginPath(),this.body.emitter.emit("beforeDrawing",e),e.closePath(),!1===t&&(!1===this.dragging||!0===this.dragging&&!1===this.options.hideEdgesOnDrag)&&this._drawEdges(e),(!1===this.dragging||!0===this.dragging&&!1===this.options.hideNodesOnDrag)&&this._drawNodes(e,t),e.beginPath(),this.body.emitter.emit("afterDrawing",e),e.closePath(),e.restore(),!0===t&&e.clearRect(0,0,i,o)}}},{key:"_resizeNodes",value:function(){this.canvas.setTransform();var t=this.canvas.getContext();t.save(),t.translate(this.body.view.translation.x,this.body.view.translation.y),t.scale(this.body.view.scale,this.body.view.scale);var e=this.body.nodes,i=void 0;for(var o in e)e.hasOwnProperty(o)&&(i=e[o],i.resize(t),i.updateBoundingBox(t,i.selected));t.restore()}},{key:"_drawNodes",value:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.body.nodes,o=this.body.nodeIndices,n=void 0,s=[],r=this.canvas.DOMtoCanvas({x:-20,y:-20}),a=this.canvas.DOMtoCanvas({x:this.canvas.frame.canvas.clientWidth+20,y:this.canvas.frame.canvas.clientHeight+20}),h={top:r.y,left:r.x,bottom:a.y,right:a.x},d=0;d<o.length;d++)n=i[o[d]],n.isSelected()?s.push(o[d]):!0===e?n.draw(t):!0===n.isBoundingBoxOverlappingWith(h)?n.draw(t):n.updateBoundingBox(t,n.selected);for(var l=0;l<s.length;l++)n=i[s[l]],n.draw(t)}},{key:"_drawEdges",value:function(t){for(var e=this.body.edges,i=this.body.edgeIndices,o=void 0,n=0;n<i.length;n++)o=e[i[n]],!0===o.connected&&o.draw(t)}},{key:"_determineBrowserMethod",value:function(){if("undefined"!=typeof window){var t=navigator.userAgent.toLowerCase();this.requiresTimeout=!1,-1!=t.indexOf("msie 9.0")?this.requiresTimeout=!0:-1!=t.indexOf("safari")&&t.indexOf("chrome")<=-1&&(this.requiresTimeout=!0)}else this.requiresTimeout=!0}}]),t}();e.default=l},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=i(10),d=i(37),l=i(2),u=function(){function t(e){(0,s.default)(this,t),this.body=e,this.pixelRatio=1,this.resizeTimer=void 0,this.resizeFunction=this._onResize.bind(this),this.cameraState={},this.initialized=!1,this.canvasViewCenter={},this.options={},this.defaultOptions={autoResize:!0,height:"100%",width:"100%"},l.extend(this.options,this.defaultOptions),this.bindEventListeners()}return(0,a.default)(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.once("resize",function(e){0!==e.width&&(t.body.view.translation.x=.5*e.width),0!==e.height&&(t.body.view.translation.y=.5*e.height)}),this.body.emitter.on("setSize",this.setSize.bind(this)),this.body.emitter.on("destroy",function(){t.hammerFrame.destroy(),t.hammer.destroy(),t._cleanUp()})}},{key:"setOptions",value:function(t){var e=this;if(void 0!==t){var i=["width","height","autoResize"];l.selectiveDeepExtend(i,this.options,t)}!0===this.options.autoResize&&(this._cleanUp(),this.resizeTimer=setInterval(function(){!0===e.setSize()&&e.body.emitter.emit("_requestRedraw")},1e3),this.resizeFunction=this._onResize.bind(this),l.addEventListener(window,"resize",this.resizeFunction))}},{key:"_cleanUp",value:function(){void 0!==this.resizeTimer&&clearInterval(this.resizeTimer),l.removeEventListener(window,"resize",this.resizeFunction),this.resizeFunction=void 0}},{key:"_onResize",value:function(){this.setSize(),this.body.emitter.emit("_redraw")}},{key:"_getCameraState",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.pixelRatio;!0===this.initialized&&(this.cameraState.previousWidth=this.frame.canvas.width/t,this.cameraState.previousHeight=this.frame.canvas.height/t,this.cameraState.scale=this.body.view.scale,this.cameraState.position=this.DOMtoCanvas({x:.5*this.frame.canvas.width/t,y:.5*this.frame.canvas.height/t}))}},{key:"_setCameraState",value:function(){if(void 0!==this.cameraState.scale&&0!==this.frame.canvas.clientWidth&&0!==this.frame.canvas.clientHeight&&0!==this.pixelRatio&&this.cameraState.previousWidth>0){var t=this.frame.canvas.width/this.pixelRatio/this.cameraState.previousWidth,e=this.frame.canvas.height/this.pixelRatio/this.cameraState.previousHeight,i=this.cameraState.scale;1!=t&&1!=e?i=.5*this.cameraState.scale*(t+e):1!=t?i=this.cameraState.scale*t:1!=e&&(i=this.cameraState.scale*e),this.body.view.scale=i;var o=this.DOMtoCanvas({x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight}),n={x:o.x-this.cameraState.position.x,y:o.y-this.cameraState.position.y};this.body.view.translation.x+=n.x*this.body.view.scale,this.body.view.translation.y+=n.y*this.body.view.scale}}},{key:"_prepareValue",value:function(t){if("number"==typeof t)return t+"px";if("string"==typeof t){if(-1!==t.indexOf("%")||-1!==t.indexOf("px"))return t;if(-1===t.indexOf("%"))return t+"px"}throw new Error("Could not use the value supplied for width or height:"+t)}},{key:"_create",value:function(){for(;this.body.container.hasChildNodes();)this.body.container.removeChild(this.body.container.firstChild);if(this.frame=document.createElement("div"),this.frame.className="vis-network",this.frame.style.position="relative",this.frame.style.overflow="hidden",this.frame.tabIndex=900,this.frame.canvas=document.createElement("canvas"),this.frame.canvas.style.position="relative",this.frame.appendChild(this.frame.canvas),this.frame.canvas.getContext)this._setPixelRatio(),this.setTransform();else{var t=document.createElement("DIV");t.style.color="red",t.style.fontWeight="bold",t.style.padding="10px",t.innerHTML="Error: your browser does not support HTML canvas",this.frame.canvas.appendChild(t)}this.body.container.appendChild(this.frame),this.body.view.scale=1,this.body.view.translation={x:.5*this.frame.canvas.clientWidth,y:.5*this.frame.canvas.clientHeight},this._bindHammer()}},{key:"_bindHammer",value:function(){var t=this;void 0!==this.hammer&&this.hammer.destroy(),this.drag={},this.pinch={},this.hammer=new h(this.frame.canvas),this.hammer.get("pinch").set({enable:!0}),this.hammer.get("pan").set({threshold:5,direction:h.DIRECTION_ALL}),d.onTouch(this.hammer,function(e){t.body.eventListeners.onTouch(e)}),this.hammer.on("tap",function(e){t.body.eventListeners.onTap(e)}),this.hammer.on("doubletap",function(e){t.body.eventListeners.onDoubleTap(e)}),this.hammer.on("press",function(e){t.body.eventListeners.onHold(e)}),this.hammer.on("panstart",function(e){t.body.eventListeners.onDragStart(e)}),this.hammer.on("panmove",function(e){t.body.eventListeners.onDrag(e)}),this.hammer.on("panend",function(e){t.body.eventListeners.onDragEnd(e)}),this.hammer.on("pinch",function(e){t.body.eventListeners.onPinch(e)}),this.frame.canvas.addEventListener("mousewheel",function(e){t.body.eventListeners.onMouseWheel(e)}),this.frame.canvas.addEventListener("DOMMouseScroll",function(e){t.body.eventListeners.onMouseWheel(e)}),this.frame.canvas.addEventListener("mousemove",function(e){t.body.eventListeners.onMouseMove(e)}),this.frame.canvas.addEventListener("contextmenu",function(e){t.body.eventListeners.onContext(e)}),this.hammerFrame=new h(this.frame),d.onRelease(this.hammerFrame,function(e){t.body.eventListeners.onRelease(e)})}},{key:"setSize",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.options.width,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.height;t=this._prepareValue(t),e=this._prepareValue(e);var i=!1,o=this.frame.canvas.width,n=this.frame.canvas.height,s=this.pixelRatio;if(this._setPixelRatio(),t!=this.options.width||e!=this.options.height||this.frame.style.width!=t||this.frame.style.height!=e)this._getCameraState(s),this.frame.style.width=t,this.frame.style.height=e,this.frame.canvas.style.width="100%",this.frame.canvas.style.height="100%",this.frame.canvas.width=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),this.frame.canvas.height=Math.round(this.frame.canvas.clientHeight*this.pixelRatio),this.options.width=t,this.options.height=e,this.canvasViewCenter={x:.5*this.frame.clientWidth,y:.5*this.frame.clientHeight},i=!0;else{var r=Math.round(this.frame.canvas.clientWidth*this.pixelRatio),a=Math.round(this.frame.canvas.clientHeight*this.pixelRatio)
+;this.frame.canvas.width===r&&this.frame.canvas.height===a||this._getCameraState(s),this.frame.canvas.width!==r&&(this.frame.canvas.width=r,i=!0),this.frame.canvas.height!==a&&(this.frame.canvas.height=a,i=!0)}return!0===i&&(this.body.emitter.emit("resize",{width:Math.round(this.frame.canvas.width/this.pixelRatio),height:Math.round(this.frame.canvas.height/this.pixelRatio),oldWidth:Math.round(o/this.pixelRatio),oldHeight:Math.round(n/this.pixelRatio)}),this._setCameraState()),this.initialized=!0,i}},{key:"getContext",value:function(){return this.frame.canvas.getContext("2d")}},{key:"_determinePixelRatio",value:function(){var t=this.getContext();if(void 0===t)throw new Error("Could not get canvax context");var e=1;return"undefined"!=typeof window&&(e=window.devicePixelRatio||1),e/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1)}},{key:"_setPixelRatio",value:function(){this.pixelRatio=this._determinePixelRatio()}},{key:"setTransform",value:function(){var t=this.getContext();if(void 0===t)throw new Error("Could not get canvax context");t.setTransform(this.pixelRatio,0,0,this.pixelRatio,0,0)}},{key:"_XconvertDOMtoCanvas",value:function(t){return(t-this.body.view.translation.x)/this.body.view.scale}},{key:"_XconvertCanvasToDOM",value:function(t){return t*this.body.view.scale+this.body.view.translation.x}},{key:"_YconvertDOMtoCanvas",value:function(t){return(t-this.body.view.translation.y)/this.body.view.scale}},{key:"_YconvertCanvasToDOM",value:function(t){return t*this.body.view.scale+this.body.view.translation.y}},{key:"canvasToDOM",value:function(t){return{x:this._XconvertCanvasToDOM(t.x),y:this._YconvertCanvasToDOM(t.y)}}},{key:"DOMtoCanvas",value:function(t){return{x:this._XconvertDOMtoCanvas(t.x),y:this._YconvertDOMtoCanvas(t.y)}}}]),t}();e.default=u},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=i(2),d=i(76).default,l=function(){function t(e,i){var o=this;(0,s.default)(this,t),this.body=e,this.canvas=i,this.animationSpeed=1/this.renderRefreshRate,this.animationEasingFunction="easeInOutQuint",this.easingTime=0,this.sourceScale=0,this.targetScale=0,this.sourceTranslation=0,this.targetTranslation=0,this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0,this.touchTime=0,this.viewFunction=void 0,this.body.emitter.on("fit",this.fit.bind(this)),this.body.emitter.on("animationFinished",function(){o.body.emitter.emit("_stopRendering")}),this.body.emitter.on("unlockNode",this.releaseNode.bind(this))}return(0,a.default)(t,[{key:"setOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.options=t}},{key:"fit",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{nodes:[]},e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=void 0,o=void 0;if(void 0!==t.nodes&&0!==t.nodes.length||(t.nodes=this.body.nodeIndices),!0===e){var n=0;for(var s in this.body.nodes)if(this.body.nodes.hasOwnProperty(s)){var r=this.body.nodes[s];!0===r.predefinedPosition&&(n+=1)}if(n>.5*this.body.nodeIndices.length)return void this.fit(t,!1);i=d.getRange(this.body.nodes,t.nodes);o=12.662/(this.body.nodeIndices.length+7.4147)+.0964822;o*=Math.min(this.canvas.frame.canvas.clientWidth/600,this.canvas.frame.canvas.clientHeight/600)}else{this.body.emitter.emit("_resizeNodes"),i=d.getRange(this.body.nodes,t.nodes);var a=1.1*Math.abs(i.maxX-i.minX),h=1.1*Math.abs(i.maxY-i.minY),l=this.canvas.frame.canvas.clientWidth/a,u=this.canvas.frame.canvas.clientHeight/h;o=l<=u?l:u}o>1?o=1:0===o&&(o=1);var c=d.findCenter(i),p={position:c,scale:o,animation:t.animation};this.moveTo(p)}},{key:"focus",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(void 0!==this.body.nodes[t]){var i={x:this.body.nodes[t].x,y:this.body.nodes[t].y};e.position=i,e.lockedOnNode=t,this.moveTo(e)}else console.log("Node: "+t+" cannot be found.")}},{key:"moveTo",value:function(t){if(void 0===t)return void(t={});void 0===t.offset&&(t.offset={x:0,y:0}),void 0===t.offset.x&&(t.offset.x=0),void 0===t.offset.y&&(t.offset.y=0),void 0===t.scale&&(t.scale=this.body.view.scale),void 0===t.position&&(t.position=this.getViewPosition()),void 0===t.animation&&(t.animation={duration:0}),!1===t.animation&&(t.animation={duration:0}),!0===t.animation&&(t.animation={}),void 0===t.animation.duration&&(t.animation.duration=1e3),void 0===t.animation.easingFunction&&(t.animation.easingFunction="easeInOutQuad"),this.animateView(t)}},{key:"animateView",value:function(t){if(void 0!==t){this.animationEasingFunction=t.animation.easingFunction,this.releaseNode(),!0===t.locked&&(this.lockedOnNodeId=t.lockedOnNode,this.lockedOnNodeOffset=t.offset),0!=this.easingTime&&this._transitionRedraw(!0),this.sourceScale=this.body.view.scale,this.sourceTranslation=this.body.view.translation,this.targetScale=t.scale,this.body.view.scale=this.targetScale;var e=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),i={x:e.x-t.position.x,y:e.y-t.position.y};this.targetTranslation={x:this.sourceTranslation.x+i.x*this.targetScale+t.offset.x,y:this.sourceTranslation.y+i.y*this.targetScale+t.offset.y},0===t.animation.duration?void 0!=this.lockedOnNodeId?(this.viewFunction=this._lockedRedraw.bind(this),this.body.emitter.on("initRedraw",this.viewFunction)):(this.body.view.scale=this.targetScale,this.body.view.translation=this.targetTranslation,this.body.emitter.emit("_requestRedraw")):(this.animationSpeed=1/(60*t.animation.duration*.001)||1/60,this.animationEasingFunction=t.animation.easingFunction,this.viewFunction=this._transitionRedraw.bind(this),this.body.emitter.on("initRedraw",this.viewFunction),this.body.emitter.emit("_startRendering"))}}},{key:"_lockedRedraw",value:function(){var t={x:this.body.nodes[this.lockedOnNodeId].x,y:this.body.nodes[this.lockedOnNodeId].y},e=this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight}),i={x:e.x-t.x,y:e.y-t.y},o=this.body.view.translation,n={x:o.x+i.x*this.body.view.scale+this.lockedOnNodeOffset.x,y:o.y+i.y*this.body.view.scale+this.lockedOnNodeOffset.y};this.body.view.translation=n}},{key:"releaseNode",value:function(){void 0!==this.lockedOnNodeId&&void 0!==this.viewFunction&&(this.body.emitter.off("initRedraw",this.viewFunction),this.lockedOnNodeId=void 0,this.lockedOnNodeOffset=void 0)}},{key:"_transitionRedraw",value:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.easingTime+=this.animationSpeed,this.easingTime=!0===t?1:this.easingTime;var e=h.easingFunctions[this.animationEasingFunction](this.easingTime);this.body.view.scale=this.sourceScale+(this.targetScale-this.sourceScale)*e,this.body.view.translation={x:this.sourceTranslation.x+(this.targetTranslation.x-this.sourceTranslation.x)*e,y:this.sourceTranslation.y+(this.targetTranslation.y-this.sourceTranslation.y)*e},this.easingTime>=1&&(this.body.emitter.off("initRedraw",this.viewFunction),this.easingTime=0,void 0!=this.lockedOnNodeId&&(this.viewFunction=this._lockedRedraw.bind(this),this.body.emitter.on("initRedraw",this.viewFunction)),this.body.emitter.emit("animationFinished"))}},{key:"getScale",value:function(){return this.body.view.scale}},{key:"getViewPosition",value:function(){return this.canvas.DOMtoCanvas({x:.5*this.canvas.frame.canvas.clientWidth,y:.5*this.canvas.frame.canvas.clientHeight})}}]),t}();e.default=l},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=i(2),d=i(233).default,l=i(104).default,u=function(){function t(e,i,o){(0,s.default)(this,t),this.body=e,this.canvas=i,this.selectionHandler=o,this.navigationHandler=new d(e,i),this.body.eventListeners.onTap=this.onTap.bind(this),this.body.eventListeners.onTouch=this.onTouch.bind(this),this.body.eventListeners.onDoubleTap=this.onDoubleTap.bind(this),this.body.eventListeners.onHold=this.onHold.bind(this),this.body.eventListeners.onDragStart=this.onDragStart.bind(this),this.body.eventListeners.onDrag=this.onDrag.bind(this),this.body.eventListeners.onDragEnd=this.onDragEnd.bind(this),this.body.eventListeners.onMouseWheel=this.onMouseWheel.bind(this),this.body.eventListeners.onPinch=this.onPinch.bind(this),this.body.eventListeners.onMouseMove=this.onMouseMove.bind(this),this.body.eventListeners.onRelease=this.onRelease.bind(this),this.body.eventListeners.onContext=this.onContext.bind(this),this.touchTime=0,this.drag={},this.pinch={},this.popup=void 0,this.popupObj=void 0,this.popupTimer=void 0,this.body.functions.getPointer=this.getPointer.bind(this),this.options={},this.defaultOptions={dragNodes:!0,dragView:!0,hover:!1,keyboard:{enabled:!1,speed:{x:10,y:10,zoom:.02},bindToWindow:!0},navigationButtons:!1,tooltipDelay:300,zoomView:!0},h.extend(this.options,this.defaultOptions),this.bindEventListeners()}return(0,a.default)(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.on("destroy",function(){clearTimeout(t.popupTimer),delete t.body.functions.getPointer})}},{key:"setOptions",value:function(t){if(void 0!==t){var e=["hideEdgesOnDrag","hideNodesOnDrag","keyboard","multiselect","selectable","selectConnectedEdges"];h.selectiveNotDeepExtend(e,this.options,t),h.mergeOptions(this.options,t,"keyboard"),t.tooltip&&(h.extend(this.options.tooltip,t.tooltip),t.tooltip.color&&(this.options.tooltip.color=h.parseColor(t.tooltip.color)))}this.navigationHandler.setOptions(this.options)}},{key:"getPointer",value:function(t){return{x:t.x-h.getAbsoluteLeft(this.canvas.frame.canvas),y:t.y-h.getAbsoluteTop(this.canvas.frame.canvas)}}},{key:"onTouch",value:function(t){(new Date).valueOf()-this.touchTime>50&&(this.drag.pointer=this.getPointer(t.center),this.drag.pinched=!1,this.pinch.scale=this.body.view.scale,this.touchTime=(new Date).valueOf())}},{key:"onTap",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect&&(t.changedPointers[0].ctrlKey||t.changedPointers[0].metaKey);this.checkSelectionChanges(e,t,i),this.selectionHandler._generateClickEvent("click",t,e)}},{key:"onDoubleTap",value:function(t){var e=this.getPointer(t.center);this.selectionHandler._generateClickEvent("doubleClick",t,e)}},{key:"onHold",value:function(t){var e=this.getPointer(t.center),i=this.selectionHandler.options.multiselect;this.checkSelectionChanges(e,t,i),this.selectionHandler._generateClickEvent("click",t,e),this.selectionHandler._generateClickEvent("hold",t,e)}},{key:"onRelease",value:function(t){if((new Date).valueOf()-this.touchTime>10){var e=this.getPointer(t.center);this.selectionHandler._generateClickEvent("release",t,e),this.touchTime=(new Date).valueOf()}}},{key:"onContext",value:function(t){var e=this.getPointer({x:t.clientX,y:t.clientY});this.selectionHandler._generateClickEvent("oncontext",t,e)}},{key:"checkSelectionChanges",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=this.selectionHandler.getSelection(),n=!1;n=!0===i?this.selectionHandler.selectAdditionalOnPoint(t):this.selectionHandler.selectOnPoint(t);var s=this.selectionHandler.getSelection(),r=this._determineDifference(o,s),a=this._determineDifference(s,o);r.edges.length>0&&(this.selectionHandler._generateClickEvent("deselectEdge",e,t,o),n=!0),r.nodes.length>0&&(this.selectionHandler._generateClickEvent("deselectNode",e,t,o),n=!0),a.nodes.length>0&&(this.selectionHandler._generateClickEvent("selectNode",e,t),n=!0),a.edges.length>0&&(this.selectionHandler._generateClickEvent("selectEdge",e,t),n=!0),!0===n&&this.selectionHandler._generateClickEvent("select",e,t)}},{key:"_determineDifference",value:function(t,e){var i=function(t,e){for(var i=[],o=0;o<t.length;o++){var n=t[o];-1===e.indexOf(n)&&i.push(n)}return i};return{nodes:i(t.nodes,e.nodes),edges:i(t.edges,e.edges)}}},{key:"onDragStart",value:function(t){void 0===this.drag.pointer&&this.onTouch(t);var e=this.selectionHandler.getNodeAt(this.drag.pointer);if(this.drag.dragging=!0,this.drag.selection=[],this.drag.translation=h.extend({},this.body.view.translation),this.drag.nodeId=void 0,void 0!==e&&!0===this.options.dragNodes){this.drag.nodeId=e.id,!1===e.isSelected()&&(this.selectionHandler.unselectAll(),this.selectionHandler.selectObject(e)),this.selectionHandler._generateClickEvent("dragStart",t,this.drag.pointer);var i=this.selectionHandler.selectionObj.nodes;for(var o in i)if(i.hasOwnProperty(o)){var n=i[o],s={id:n.id,node:n,x:n.x,y:n.y,xFixed:n.options.fixed.x,yFixed:n.options.fixed.y};n.options.fixed.x=!0,n.options.fixed.y=!0,this.drag.selection.push(s)}}else this.selectionHandler._generateClickEvent("dragStart",t,this.drag.pointer,void 0,!0)}},{key:"onDrag",value:function(t){var e=this;if(!0!==this.drag.pinched){this.body.emitter.emit("unlockNode");var i=this.getPointer(t.center),o=this.drag.selection;if(o&&o.length&&!0===this.options.dragNodes){this.selectionHandler._generateClickEvent("dragging",t,i);var n=i.x-this.drag.pointer.x,s=i.y-this.drag.pointer.y;o.forEach(function(t){var i=t.node;!1===t.xFixed&&(i.x=e.canvas._XconvertDOMtoCanvas(e.canvas._XconvertCanvasToDOM(t.x)+n)),!1===t.yFixed&&(i.y=e.canvas._YconvertDOMtoCanvas(e.canvas._YconvertCanvasToDOM(t.y)+s))}),this.body.emitter.emit("startSimulation")}else if(!0===this.options.dragView){if(this.selectionHandler._generateClickEvent("dragging",t,i,void 0,!0),void 0===this.drag.pointer)return void this.onDragStart(t);var r=i.x-this.drag.pointer.x,a=i.y-this.drag.pointer.y;this.body.view.translation={x:this.drag.translation.x+r,y:this.drag.translation.y+a},this.body.emitter.emit("_requestRedraw")}}}},{key:"onDragEnd",value:function(t){this.drag.dragging=!1;var e=this.drag.selection;e&&e.length?(e.forEach(function(t){t.node.options.fixed.x=t.xFixed,t.node.options.fixed.y=t.yFixed}),this.selectionHandler._generateClickEvent("dragEnd",t,this.getPointer(t.center)),this.body.emitter.emit("startSimulation")):(this.selectionHandler._generateClickEvent("dragEnd",t,this.getPointer(t.center),void 0,!0),this.body.emitter.emit("_requestRedraw"))}},{key:"onPinch",value:function(t){var e=this.getPointer(t.center);this.drag.pinched=!0,void 0===this.pinch.scale&&(this.pinch.scale=1);var i=this.pinch.scale*t.scale;this.zoom(i,e)}},{key:"zoom",value:function(t,e){if(!0===this.options.zoomView){var i=this.body.view.scale;t<1e-5&&(t=1e-5),t>10&&(t=10);var o=void 0;void 0!==this.drag&&!0===this.drag.dragging&&(o=this.canvas.DOMtoCanvas(this.drag.pointer));var n=this.body.view.translation,s=t/i,r=(1-s)*e.x+n.x*s,a=(1-s)*e.y+n.y*s;if(this.body.view.scale=t,this.body.view.translation={x:r,y:a},void 0!=o){var h=this.canvas.canvasToDOM(o);this.drag.pointer.x=h.x,this.drag.pointer.y=h.y}this.body.emitter.emit("_requestRedraw"),i<t?this.body.emitter.emit("zoom",{direction:"+",scale:this.body.view.scale,pointer:e}):this.body.emitter.emit("zoom",{direction:"-",scale:this.body.view.scale,pointer:e})}}},{key:"onMouseWheel",value:function(t){if(!0===this.options.zoomView){var e=0;if(t.wheelDelta?e=t.wheelDelta/120:t.detail&&(e=-t.detail/3),0!==e){var i=this.body.view.scale,o=e/10;e<0&&(o/=1-o),i*=1+o;var n=this.getPointer({x:t.clientX,y:t.clientY});this.zoom(i,n)}t.preventDefault()}}},{key:"onMouseMove",value:function(t){var e=this,i=this.getPointer({x:t.clientX,y:t.clientY}),o=!1;void 0!==this.popup&&(!1===this.popup.hidden&&this._checkHidePopup(i),!1===this.popup.hidden&&(o=!0,this.popup.setPosition(i.x+3,i.y-5),this.popup.show())),!1===this.options.keyboard.bindToWindow&&!0===this.options.keyboard.enabled&&this.canvas.frame.focus(),!1===o&&(void 0!==this.popupTimer&&(clearInterval(this.popupTimer),this.popupTimer=void 0),this.drag.dragging||(this.popupTimer=setTimeout(function(){return e._checkShowPopup(i)},this.options.tooltipDelay))),!0===this.options.hover&&this.selectionHandler.hoverObject(t,i)}},{key:"_checkShowPopup",value:function(t){var e=this.canvas._XconvertDOMtoCanvas(t.x),i=this.canvas._YconvertDOMtoCanvas(t.y),o={left:e,top:i,right:e,bottom:i},n=void 0===this.popupObj?void 0:this.popupObj.id,s=!1,r="node";if(void 0===this.popupObj){for(var a=this.body.nodeIndices,h=this.body.nodes,d=void 0,u=[],c=0;c<a.length;c++)d=h[a[c]],!0===d.isOverlappingWith(o)&&void 0!==d.getTitle()&&u.push(a[c]);u.length>0&&(this.popupObj=h[u[u.length-1]],s=!0)}if(void 0===this.popupObj&&!1===s){for(var p=this.body.edgeIndices,f=this.body.edges,m=void 0,v=[],g=0;g<p.length;g++)m=f[p[g]],!0===m.isOverlappingWith(o)&&!0===m.connected&&void 0!==m.getTitle()&&v.push(p[g]);v.length>0&&(this.popupObj=f[v[v.length-1]],r="edge")}void 0!==this.popupObj?this.popupObj.id!==n&&(void 0===this.popup&&(this.popup=new l(this.canvas.frame)),this.popup.popupTargetType=r,this.popup.popupTargetId=this.popupObj.id,this.popup.setPosition(t.x+3,t.y-5),this.popup.setText(this.popupObj.getTitle()),this.popup.show(),this.body.emitter.emit("showPopup",this.popupObj.id)):void 0!==this.popup&&(this.popup.hide(),this.body.emitter.emit("hidePopup"))}},{key:"_checkHidePopup",value:function(t){var e=this.selectionHandler._pointerToPositionObject(t),i=!1;if("node"===this.popup.popupTargetType){if(void 0!==this.body.nodes[this.popup.popupTargetId]&&!0===(i=this.body.nodes[this.popup.popupTargetId].isOverlappingWith(e))){var o=this.selectionHandler.getNodeAt(t);i=void 0!==o&&o.id===this.popup.popupTargetId}}else void 0===this.selectionHandler.getNodeAt(t)&&void 0!==this.body.edges[this.popup.popupTargetId]&&(i=this.body.edges[this.popup.popupTargetId].isOverlappingWith(e));!1===i&&(this.popupObj=void 0,this.popup.hide(),this.body.emitter.emit("hidePopup"))}}]),t}();e.default=u},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=i(10),d=i(37),l=i(35),u=function(){function t(e,i){var o=this;(0,s.default)(this,t),this.body=e,this.canvas=i,this.iconsCreated=!1,this.navigationHammers=[],this.boundFunctions={},this.touchTime=0,this.activated=!1,this.body.emitter.on("activate",function(){o.activated=!0,o.configureKeyboardBindings()}),this.body.emitter.on("deactivate",function(){o.activated=!1,o.configureKeyboardBindings()}),this.body.emitter.on("destroy",function(){void 0!==o.keycharm&&o.keycharm.destroy()}),this.options={}}return(0,a.default)(t,[{key:"setOptions",value:function(t){void 0!==t&&(this.options=t,this.create())}},{key:"create",value:function(){!0===this.options.navigationButtons?!1===this.iconsCreated&&this.loadNavigationElements():!0===this.iconsCreated&&this.cleanNavigation(),this.configureKeyboardBindings()}},{key:"cleanNavigation",value:function(){if(0!=this.navigationHammers.length){for(var t=0;t<this.navigationHammers.length;t++)this.navigationHammers[t].destroy();this.navigationHammers=[]}this.navigationDOM&&this.navigationDOM.wrapper&&this.navigationDOM.wrapper.parentNode&&this.navigationDOM.wrapper.parentNode.removeChild(this.navigationDOM.wrapper),this.iconsCreated=!1}},{key:"loadNavigationElements",value:function(){var t=this;this.cleanNavigation(),this.navigationDOM={};var e=["up","down","left","right","zoomIn","zoomOut","zoomExtends"],i=["_moveUp","_moveDown","_moveLeft","_moveRight","_zoomIn","_zoomOut","_fit"];this.navigationDOM.wrapper=document.createElement("div"),this.navigationDOM.wrapper.className="vis-navigation",this.canvas.frame.appendChild(this.navigationDOM.wrapper);for(var o=0;o<e.length;o++){this.navigationDOM[e[o]]=document.createElement("div"),this.navigationDOM[e[o]].className="vis-button vis-"+e[o],this.navigationDOM.wrapper.appendChild(this.navigationDOM[e[o]]);var n=new h(this.navigationDOM[e[o]]);"_fit"===i[o]?d.onTouch(n,this._fit.bind(this)):d.onTouch(n,this.bindToRedraw.bind(this,i[o])),this.navigationHammers.push(n)}var s=new h(this.canvas.frame);d.onRelease(s,function(){t._stopMovement()}),this.navigationHammers.push(s),this.iconsCreated=!0}},{key:"bindToRedraw",value:function(t){void 0===this.boundFunctions[t]&&(this.boundFunctions[t]=this[t].bind(this),this.body.emitter.on("initRedraw",this.boundFunctions[t]),this.body.emitter.emit("_startRendering"))}},{key:"unbindFromRedraw",value:function(t){void 0!==this.boundFunctions[t]&&(this.body.emitter.off("initRedraw",this.boundFunctions[t]),this.body.emitter.emit("_stopRendering"),delete this.boundFunctions[t])}},{key:"_fit",value:function(){(new Date).valueOf()-this.touchTime>700&&(this.body.emitter.emit("fit",{duration:700}),this.touchTime=(new Date).valueOf())}},{key:"_stopMovement",value:function(){for(var t in this.boundFunctions)this.boundFunctions.hasOwnProperty(t)&&(this.body.emitter.off("initRedraw",this.boundFunctions[t]),this.body.emitter.emit("_stopRendering"));this.boundFunctions={}}},{key:"_moveUp",value:function(){this.body.view.translation.y+=this.options.keyboard.speed.y}},{key:"_moveDown",value:function(){this.body.view.translation.y-=this.options.keyboard.speed.y}},{key:"_moveLeft",value:function(){this.body.view.translation.x+=this.options.keyboard.speed.x}},{key:"_moveRight",value:function(){this.body.view.translation.x-=this.options.keyboard.speed.x}},{key:"_zoomIn",value:function(){var t=this.body.view.scale,e=this.body.view.scale*(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,o=e/t,n=(1-o)*this.canvas.canvasViewCenter.x+i.x*o,s=(1-o)*this.canvas.canvasViewCenter.y+i.y*o;this.body.view.scale=e,this.body.view.translation={x:n,y:s},this.body.emitter.emit("zoom",{direction:"+",scale:this.body.view.scale,pointer:null})}},{key:"_zoomOut",value:function(){var t=this.body.view.scale,e=this.body.view.scale/(1+this.options.keyboard.speed.zoom),i=this.body.view.translation,o=e/t,n=(1-o)*this.canvas.canvasViewCenter.x+i.x*o,s=(1-o)*this.canvas.canvasViewCenter.y+i.y*o;this.body.view.scale=e,this.body.view.translation={x:n,y:s},this.body.emitter.emit("zoom",{direction:"-",scale:this.body.view.scale,pointer:null})}},{key:"configureKeyboardBindings",value:function(){var t=this;void 0!==this.keycharm&&this.keycharm.destroy(),!0===this.options.keyboard.enabled&&(!0===this.options.keyboard.bindToWindow?this.keycharm=l({container:window,preventDefault:!0}):this.keycharm=l({container:this.canvas.frame,preventDefault:!0}),this.keycharm.reset(),!0===this.activated&&(this.keycharm.bind("up",function(){t.bindToRedraw("_moveUp")},"keydown"),this.keycharm.bind("down",function(){t.bindToRedraw("_moveDown")},"keydown"),this.keycharm.bind("left",function(){t.bindToRedraw("_moveLeft")},"keydown"),this.keycharm.bind("right",function(){t.bindToRedraw("_moveRight")},"keydown"),this.keycharm.bind("=",function(){t.bindToRedraw("_zoomIn")},"keydown"),this.keycharm.bind("num+",function(){t.bindToRedraw("_zoomIn")},"keydown"),this.keycharm.bind("num-",function(){t.bindToRedraw("_zoomOut")},"keydown"),this.keycharm.bind("-",function(){t.bindToRedraw("_zoomOut")},"keydown"),this.keycharm.bind("[",function(){t.bindToRedraw("_zoomOut")},"keydown"),this.keycharm.bind("]",function(){t.bindToRedraw("_zoomIn")},"keydown"),this.keycharm.bind("pageup",function(){t.bindToRedraw("_zoomIn")},"keydown"),this.keycharm.bind("pagedown",function(){t.bindToRedraw("_zoomOut")},"keydown"),this.keycharm.bind("up",function(){t.unbindFromRedraw("_moveUp")},"keyup"),this.keycharm.bind("down",function(){t.unbindFromRedraw("_moveDown")},"keyup"),this.keycharm.bind("left",function(){t.unbindFromRedraw("_moveLeft")},"keyup"),this.keycharm.bind("right",function(){t.unbindFromRedraw("_moveRight")},"keyup"),this.keycharm.bind("=",function(){t.unbindFromRedraw("_zoomIn")},"keyup"),this.keycharm.bind("num+",function(){t.unbindFromRedraw("_zoomIn")},"keyup"),this.keycharm.bind("num-",function(){t.unbindFromRedraw("_zoomOut")},"keyup"),this.keycharm.bind("-",function(){t.unbindFromRedraw("_zoomOut")},"keyup"),this.keycharm.bind("[",function(){t.unbindFromRedraw("_zoomOut")},"keyup"),this.keycharm.bind("]",function(){t.unbindFromRedraw("_zoomIn")},"keyup"),this.keycharm.bind("pageup",function(){t.unbindFromRedraw("_zoomIn")},"keyup"),this.keycharm.bind("pagedown",function(){t.unbindFromRedraw("_zoomOut")},"keyup")))}}]),t}();e.default=u},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=i(47).default,d=i(74).default,l=i(2),u=function(){function t(e,i){var o=this;(0,s.default)(this,t),this.body=e,this.canvas=i,this.selectionObj={nodes:[],edges:[]},this.hoverObj={nodes:{},edges:{}},this.options={},this.defaultOptions={multiselect:!1,selectable:!0,selectConnectedEdges:!0,hoverConnectedEdges:!0},l.extend(this.options,this.defaultOptions),this.body.emitter.on("_dataChanged",function(){o.updateSelection()})}return(0,a.default)(t,[{key:"setOptions",value:function(t){if(void 0!==t){var e=["multiselect","hoverConnectedEdges","selectable","selectConnectedEdges"];l.selectiveDeepExtend(e,this.options,t)}}},{key:"selectOnPoint",value:function(t){var e=!1;if(!0===this.options.selectable){var i=this.getNodeAt(t)||this.getEdgeAt(t);this.unselectAll(),void 0!==i&&(e=this.selectObject(i)),this.body.emitter.emit("_requestRedraw")}return e}},{key:"selectAdditionalOnPoint",value:function(t){var e=!1;if(!0===this.options.selectable){var i=this.getNodeAt(t)||this.getEdgeAt(t);void 0!==i&&(e=!0,!0===i.isSelected()?this.deselectObject(i):this.selectObject(i),this.body.emitter.emit("_requestRedraw"))}return e}},{key:"_initBaseEvent",value:function(t,e){var i={};return i.pointer={DOM:{x:e.x,y:e.y},canvas:this.canvas.DOMtoCanvas(e)},i.event=t,i}},{key:"_generateClickEvent",value:function(t,e,i,o){var n=arguments.length>4&&void 0!==arguments[4]&&arguments[4],s=this._initBaseEvent(e,i);if(!0===n)s.nodes=[],s.edges=[];else{var r=this.getSelection();s.nodes=r.nodes,s.edges=r.edges}void 0!==o&&(s.previousSelection=o),"click"==t&&(s.items=this.getClickedItems(i)),this.body.emitter.emit(t,s)}},{key:"selectObject",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.options.selectConnectedEdges;return void 0!==t&&(t instanceof h&&!0===e&&this._selectConnectedEdges(t),t.select(),this._addToSelection(t),!0)}},{key:"deselectObject",value:function(t){!0===t.isSelected()&&(t.selected=!1,this._removeFromSelection(t))}},{key:"_getAllNodesOverlappingWith",value:function(t){for(var e=[],i=this.body.nodes,o=0;o<this.body.nodeIndices.length;o++){var n=this.body.nodeIndices[o];i[n].isOverlappingWith(t)&&e.push(n)}return e}},{key:"_pointerToPositionObject",value:function(t){var e=this.canvas.DOMtoCanvas(t);return{left:e.x-1,top:e.y+1,right:e.x+1,bottom:e.y-1}}},{key:"getNodeAt",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this._pointerToPositionObject(t),o=this._getAllNodesOverlappingWith(i);return o.length>0?!0===e?this.body.nodes[o[o.length-1]]:o[o.length-1]:void 0}},{key:"_getEdgesOverlappingWith",value:function(t,e){for(var i=this.body.edges,o=0;o<this.body.edgeIndices.length;o++){var n=this.body.edgeIndices[o];i[n].isOverlappingWith(t)&&e.push(n)}}},{key:"_getAllEdgesOverlappingWith",value:function(t){var e=[];return this._getEdgesOverlappingWith(t,e),e}},{key:"getEdgeAt",value:function(t){for(var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.canvas.DOMtoCanvas(t),o=10,n=null,s=this.body.edges,r=0;r<this.body.edgeIndices.length;r++){var a=this.body.edgeIndices[r],h=s[a];if(h.connected){var d=h.from.x,l=h.from.y,u=h.to.x,c=h.to.y,p=h.edgeType.getDistanceToEdge(d,l,u,c,i.x,i.y);p<o&&(n=a,o=p)}}return null!==n?!0===e?this.body.edges[n]:n:void 0}},{key:"_addToSelection",value:function(t){t instanceof h?this.selectionObj.nodes[t.id]=t:this.selectionObj.edges[t.id]=t}},{key:"_addToHover",value:function(t){t instanceof h?this.hoverObj.nodes[t.id]=t:this.hoverObj.edges[t.id]=t}},{key:"_removeFromSelection",value:function(t){t instanceof h?(delete this.selectionObj.nodes[t.id],this._unselectConnectedEdges(t)):delete this.selectionObj.edges[t.id]}},{key:"unselectAll",value:function(){for(var t in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(t)&&this.selectionObj.nodes[t].unselect();for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&this.selectionObj.edges[e].unselect();this.selectionObj={nodes:{},edges:{}}}},{key:"_getSelectedNodeCount",value:function(){var t=0;for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&(t+=1);return t}},{key:"_getSelectedNode",value:function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t))return this.selectionObj.nodes[t]}},{key:"_getSelectedEdge",value:function(){for(var t in this.selectionObj.edges)if(this.selectionObj.edges.hasOwnProperty(t))return this.selectionObj.edges[t]}},{key:"_getSelectedEdgeCount",value:function(){var t=0;for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&(t+=1);return t}},{key:"_getSelectedObjectCount",value:function(){var t=0;for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&(t+=1);for(var i in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(i)&&(t+=1);return t}},{key:"_selectionIsEmpty",value:function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t))return!1;for(var e in this.selectionObj.edges)if(this.selectionObj.edges.hasOwnProperty(e))return!1;return!0}},{key:"_clusterInSelection",value:function(){for(var t in this.selectionObj.nodes)if(this.selectionObj.nodes.hasOwnProperty(t)&&this.selectionObj.nodes[t].clusterSize>1)return!0;return!1}},{key:"_selectConnectedEdges",value:function(t){for(var e=0;e<t.edges.length;e++){var i=t.edges[e];i.select(),this._addToSelection(i)}}},{key:"_hoverConnectedEdges",value:function(t){for(var e=0;e<t.edges.length;e++){var i=t.edges[e];i.hover=!0,this._addToHover(i)}}},{key:"_unselectConnectedEdges",value:function(t){for(var e=0;e<t.edges.length;e++){var i=t.edges[e];i.unselect(),this._removeFromSelection(i)}}},{key:"emitBlurEvent",value:function(t,e,i){var o=this._initBaseEvent(t,e);!0===i.hover&&(i.hover=!1,i instanceof h?(o.node=i.id,this.body.emitter.emit("blurNode",o)):(o.edge=i.id,this.body.emitter.emit("blurEdge",o)))}},{key:"emitHoverEvent",value:function(t,e,i){var o=this._initBaseEvent(t,e),n=!1;return!1===i.hover&&(i.hover=!0,this._addToHover(i),n=!0,i instanceof h?(o.node=i.id,this.body.emitter.emit("hoverNode",o)):(o.edge=i.id,this.body.emitter.emit("hoverEdge",o))),n}},{key:"hoverObject",value:function(t,e){var i=this.getNodeAt(e);void 0===i&&(i=this.getEdgeAt(e));var o=!1;for(var n in this.hoverObj.nodes)this.hoverObj.nodes.hasOwnProperty(n)&&(void 0===i||i instanceof h&&i.id!=n||i instanceof d)&&(this.emitBlurEvent(t,e,this.hoverObj.nodes[n]),delete this.hoverObj.nodes[n],o=!0);for(var s in this.hoverObj.edges)this.hoverObj.edges.hasOwnProperty(s)&&(!0===o?(this.hoverObj.edges[s].hover=!1,delete this.hoverObj.edges[s]):(void 0===i||i instanceof d&&i.id!=s||i instanceof h&&!i.hover)&&(this.emitBlurEvent(t,e,this.hoverObj.edges[s]),delete this.hoverObj.edges[s],o=!0));void 0!==i&&(o=o||this.emitHoverEvent(t,e,i),i instanceof h&&!0===this.options.hoverConnectedEdges&&this._hoverConnectedEdges(i)),!0===o&&this.body.emitter.emit("_requestRedraw")}},{key:"getSelection",value:function(){return{nodes:this.getSelectedNodes(),edges:this.getSelectedEdges()}}},{key:"getSelectedNodes",value:function(){var t=[];if(!0===this.options.selectable)for(var e in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(e)&&t.push(this.selectionObj.nodes[e].id);return t}},{key:"getSelectedEdges",value:function(){var t=[];if(!0===this.options.selectable)for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&t.push(this.selectionObj.edges[e].id);return t}},{key:"setSelection",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=void 0,o=void 0
+;if(!t||!t.nodes&&!t.edges)throw"Selection must be an object with nodes and/or edges properties";if((e.unselectAll||void 0===e.unselectAll)&&this.unselectAll(),t.nodes)for(i=0;i<t.nodes.length;i++){o=t.nodes[i];var n=this.body.nodes[o];if(!n)throw new RangeError('Node with id "'+o+'" not found');this.selectObject(n,e.highlightEdges)}if(t.edges)for(i=0;i<t.edges.length;i++){o=t.edges[i];var s=this.body.edges[o];if(!s)throw new RangeError('Edge with id "'+o+'" not found');this.selectObject(s)}this.body.emitter.emit("_requestRedraw")}},{key:"selectNodes",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(!t||void 0===t.length)throw"Selection must be an array with ids";this.setSelection({nodes:t},{highlightEdges:e})}},{key:"selectEdges",value:function(t){if(!t||void 0===t.length)throw"Selection must be an array with ids";this.setSelection({edges:t})}},{key:"updateSelection",value:function(){for(var t in this.selectionObj.nodes)this.selectionObj.nodes.hasOwnProperty(t)&&(this.body.nodes.hasOwnProperty(t)||delete this.selectionObj.nodes[t]);for(var e in this.selectionObj.edges)this.selectionObj.edges.hasOwnProperty(e)&&(this.body.edges.hasOwnProperty(e)||delete this.selectionObj.edges[e])}},{key:"getClickedItems",value:function(t){for(var e=this.canvas.DOMtoCanvas(t),i=[],o=this.body.nodeIndices,n=this.body.nodes,s=o.length-1;s>=0;s--){var r=n[o[s]],a=r.getItemsOnPoint(e);i.push.apply(i,a)}for(var h=this.body.edgeIndices,d=this.body.edges,l=h.length-1;l>=0;l--){var u=d[h[l]],c=u.getItemsOnPoint(e);i.push.apply(i,c)}return i}}]),t}();e.default=u},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(30),s=o(n),r=i(6),a=o(r),h=i(8),d=o(h),l=i(0),u=o(l),c=i(1),p=o(c),f=i(2),m=i(76).default,v=i(236),g=v.HorizontalStrategy,y=v.VerticalStrategy,b=function(){function t(){(0,u.default)(this,t),this.childrenReference={},this.parentReference={},this.trees={},this.distributionOrdering={},this.levels={},this.distributionIndex={},this.isTree=!1,this.treeIndex=-1}return(0,p.default)(t,[{key:"addRelation",value:function(t,e){void 0===this.childrenReference[t]&&(this.childrenReference[t]=[]),this.childrenReference[t].push(e),void 0===this.parentReference[e]&&(this.parentReference[e]=[]),this.parentReference[e].push(t)}},{key:"checkIfTree",value:function(){for(var t in this.parentReference)if(this.parentReference[t].length>1)return void(this.isTree=!1);this.isTree=!0}},{key:"numTrees",value:function(){return this.treeIndex+1}},{key:"setTreeIndex",value:function(t,e){void 0!==e&&void 0===this.trees[t.id]&&(this.trees[t.id]=e,this.treeIndex=Math.max(e,this.treeIndex))}},{key:"ensureLevel",value:function(t){void 0===this.levels[t]&&(this.levels[t]=0)}},{key:"getMaxLevel",value:function(t){var e=this,i={};return function t(o){if(void 0!==i[o])return i[o];var n=e.levels[o];if(e.childrenReference[o]){var s=e.childrenReference[o];if(s.length>0)for(var r=0;r<s.length;r++)n=Math.max(n,t(s[r]))}return i[o]=n,n}(t)}},{key:"levelDownstream",value:function(t,e){void 0===this.levels[e.id]&&(void 0===this.levels[t.id]&&(this.levels[t.id]=0),this.levels[e.id]=this.levels[t.id]+1)}},{key:"setMinLevelToZero",value:function(t){var e=1e9;for(var i in t)t.hasOwnProperty(i)&&void 0!==this.levels[i]&&(e=Math.min(this.levels[i],e));for(var o in t)t.hasOwnProperty(o)&&void 0!==this.levels[o]&&(this.levels[o]-=e)}},{key:"getTreeSize",value:function(t,e){var i=1e9,o=-1e9,n=1e9,s=-1e9;for(var r in this.trees)if(this.trees.hasOwnProperty(r)&&this.trees[r]===e){var a=t[r];i=Math.min(a.x,i),o=Math.max(a.x,o),n=Math.min(a.y,n),s=Math.max(a.y,s)}return{min_x:i,max_x:o,min_y:n,max_y:s}}},{key:"hasSameParent",value:function(t,e){var i=this.parentReference[t.id],o=this.parentReference[e.id];if(void 0===i||void 0===o)return!1;for(var n=0;n<i.length;n++)for(var s=0;s<o.length;s++)if(i[n]==o[s])return!0;return!1}},{key:"inSameSubNetwork",value:function(t,e){return this.trees[t.id]===this.trees[e.id]}},{key:"getLevels",value:function(){return(0,d.default)(this.distributionOrdering)}},{key:"addToOrdering",value:function(t,e){void 0===this.distributionOrdering[e]&&(this.distributionOrdering[e]=[]);var i=!1,o=this.distributionOrdering[e];for(var n in o)if(o[n]===t){i=!0;break}i||(this.distributionOrdering[e].push(t),this.distributionIndex[t.id]=this.distributionOrdering[e].length-1)}}]),t}(),_=function(){function t(e){(0,u.default)(this,t),this.body=e,this.initialRandomSeed=Math.round(1e6*Math.random()),this.randomSeed=this.initialRandomSeed,this.setPhysics=!1,this.options={},this.optionsBackup={physics:{}},this.defaultOptions={randomSeed:void 0,improvedLayout:!0,hierarchical:{enabled:!1,levelSeparation:150,nodeSpacing:100,treeSpacing:200,blockShifting:!0,edgeMinimization:!0,parentCentralization:!0,direction:"UD",sortMethod:"hubsize"}},f.extend(this.options,this.defaultOptions),this.bindEventListeners()}return(0,p.default)(t,[{key:"bindEventListeners",value:function(){var t=this;this.body.emitter.on("_dataChanged",function(){t.setupHierarchicalLayout()}),this.body.emitter.on("_dataLoaded",function(){t.layoutNetwork()}),this.body.emitter.on("_resetHierarchicalLayout",function(){t.setupHierarchicalLayout()}),this.body.emitter.on("_adjustEdgesForHierarchicalLayout",function(){if(!0===t.options.hierarchical.enabled){var e=t.direction.curveType();t.body.emitter.emit("_forceDisableDynamicCurves",e,!1)}})}},{key:"setOptions",value:function(t,e){if(void 0!==t){var i=this.options.hierarchical,o=i.enabled;if(f.selectiveDeepExtend(["randomSeed","improvedLayout"],this.options,t),f.mergeOptions(this.options,t,"hierarchical"),void 0!==t.randomSeed&&(this.initialRandomSeed=t.randomSeed),!0===i.enabled)return!0===o&&this.body.emitter.emit("refresh",!0),"RL"===i.direction||"DU"===i.direction?i.levelSeparation>0&&(i.levelSeparation*=-1):i.levelSeparation<0&&(i.levelSeparation*=-1),this.setDirectionStrategy(),this.body.emitter.emit("_resetHierarchicalLayout"),this.adaptAllOptionsForHierarchicalLayout(e);if(!0===o)return this.body.emitter.emit("refresh"),f.deepExtend(e,this.optionsBackup)}return e}},{key:"adaptAllOptionsForHierarchicalLayout",value:function(t){if(!0===this.options.hierarchical.enabled){var e=this.optionsBackup.physics;void 0===t.physics||!0===t.physics?(t.physics={enabled:void 0===e.enabled||e.enabled,solver:"hierarchicalRepulsion"},e.enabled=void 0===e.enabled||e.enabled,e.solver=e.solver||"barnesHut"):"object"===(0,a.default)(t.physics)?(e.enabled=void 0===t.physics.enabled||t.physics.enabled,e.solver=t.physics.solver||"barnesHut",t.physics.solver="hierarchicalRepulsion"):!1!==t.physics&&(e.solver="barnesHut",t.physics={solver:"hierarchicalRepulsion"});var i=this.direction.curveType();if(void 0===t.edges)this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},t.edges={smooth:!1};else if(void 0===t.edges.smooth)this.optionsBackup.edges={smooth:{enabled:!0,type:"dynamic"}},t.edges.smooth=!1;else if("boolean"==typeof t.edges.smooth)this.optionsBackup.edges={smooth:t.edges.smooth},t.edges.smooth={enabled:t.edges.smooth,type:i};else{var o=t.edges.smooth;void 0!==o.type&&"dynamic"!==o.type&&(i=o.type),this.optionsBackup.edges={smooth:void 0===o.enabled||o.enabled,type:void 0===o.type?"dynamic":o.type,roundness:void 0===o.roundness?.5:o.roundness,forceDirection:void 0!==o.forceDirection&&o.forceDirection},t.edges.smooth={enabled:void 0===o.enabled||o.enabled,type:i,roundness:void 0===o.roundness?.5:o.roundness,forceDirection:void 0!==o.forceDirection&&o.forceDirection}}this.body.emitter.emit("_forceDisableDynamicCurves",i)}return t}},{key:"seededRandom",value:function(){var t=1e4*Math.sin(this.randomSeed++);return t-Math.floor(t)}},{key:"positionInitially",value:function(t){if(!0!==this.options.hierarchical.enabled){this.randomSeed=this.initialRandomSeed;for(var e=t.length+50,i=0;i<t.length;i++){var o=t[i],n=2*Math.PI*this.seededRandom();void 0===o.x&&(o.x=e*Math.cos(n)),void 0===o.y&&(o.y=e*Math.sin(n))}}}},{key:"layoutNetwork",value:function(){if(!0!==this.options.hierarchical.enabled&&!0===this.options.improvedLayout){for(var t=this.body.nodeIndices,e=0,i=0;i<t.length;i++){!0===this.body.nodes[t[i]].predefinedPosition&&(e+=1)}if(e<.5*t.length){var o=0,n={clusterNodeProperties:{shape:"ellipse",label:"",group:"",font:{multi:!1}},clusterEdgeProperties:{label:"",font:{multi:!1},smooth:{enabled:!1}}};if(t.length>150){for(var s=t.length;t.length>150&&o<=10;){o+=1;var r=t.length;o%3==0?this.body.modules.clustering.clusterBridges(n):this.body.modules.clustering.clusterOutliers(n);if(r==t.length&&o%3!=0)return this._declusterAll(),this.body.emitter.emit("_layoutFailed"),void console.info("This network could not be positioned by this version of the improved layout algorithm. Please disable improvedLayout for better performance.")}this.body.modules.kamadaKawai.setOptions({springLength:Math.max(150,2*s)})}o>10&&console.info("The clustering didn't succeed within the amount of interations allowed, progressing with partial result."),this.body.modules.kamadaKawai.solve(t,this.body.edgeIndices,!0),this._shiftToCenter();for(var a=0;a<t.length;a++){var h=this.body.nodes[t[a]];!1===h.predefinedPosition&&(h.x+=70*(.5-this.seededRandom()),h.y+=70*(.5-this.seededRandom()))}this._declusterAll(),this.body.emitter.emit("_repositionBezierNodes")}}}},{key:"_shiftToCenter",value:function(){for(var t=m.getRangeCore(this.body.nodes,this.body.nodeIndices),e=m.findCenter(t),i=0;i<this.body.nodeIndices.length;i++){var o=this.body.nodes[this.body.nodeIndices[i]];o.x-=e.x,o.y-=e.y}}},{key:"_declusterAll",value:function(){for(var t=!0;!0===t;){t=!1;for(var e=0;e<this.body.nodeIndices.length;e++)!0===this.body.nodes[this.body.nodeIndices[e]].isCluster&&(t=!0,this.body.modules.clustering.openCluster(this.body.nodeIndices[e],{},!1));!0===t&&this.body.emitter.emit("_dataChanged")}}},{key:"getSeed",value:function(){return this.initialRandomSeed}},{key:"setupHierarchicalLayout",value:function(){if(!0===this.options.hierarchical.enabled&&this.body.nodeIndices.length>0){var t=void 0,e=void 0,i=!1,o=!1;this.lastNodeOnLevel={},this.hierarchical=new b;for(e in this.body.nodes)this.body.nodes.hasOwnProperty(e)&&(t=this.body.nodes[e],void 0!==t.options.level?(i=!0,this.hierarchical.levels[e]=t.options.level):o=!0);if(!0===o&&!0===i)throw new Error("To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes.");if(!0===o){var n=this.options.hierarchical.sortMethod;"hubsize"===n?this._determineLevelsByHubsize():"directed"===n?this._determineLevelsDirected():"custom"===n&&this._determineLevelsCustomCallback()}for(var s in this.body.nodes)this.body.nodes.hasOwnProperty(s)&&this.hierarchical.ensureLevel(s);var r=this._getDistribution();this._generateMap(),this._placeNodesByHierarchy(r),this._condenseHierarchy(),this._shiftToCenter()}}},{key:"_condenseHierarchy",value:function(){var t=this,e=!1,i={},o=function(e,i){var o=t.hierarchical.trees;for(var n in o)o.hasOwnProperty(n)&&o[n]===e&&t.direction.shift(n,i)},n=function(){for(var e=[],i=0;i<t.hierarchical.numTrees();i++)e.push(t.direction.getTreeSize(i));return e},r=function e(i,o){if(!o[i.id]&&(o[i.id]=!0,t.hierarchical.childrenReference[i.id])){var n=t.hierarchical.childrenReference[i.id];if(n.length>0)for(var s=0;s<n.length;s++)e(t.body.nodes[n[s]],o)}},a=function(e){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e9,o=1e9,n=1e9,r=1e9,a=-1e9;for(var h in e)if(e.hasOwnProperty(h)){var d=t.body.nodes[h],l=t.hierarchical.levels[d.id],u=t.direction.getPosition(d),c=t._getSpaceAroundNode(d,e),p=(0,s.default)(c,2),f=p[0],m=p[1];o=Math.min(f,o),n=Math.min(m,n),l<=i&&(r=Math.min(u,r),a=Math.max(u,a))}return[r,a,o,n]},h=function(e,i){var o=t.hierarchical.getMaxLevel(e.id),n=t.hierarchical.getMaxLevel(i.id);return Math.min(o,n)},d=function(e,i,o){for(var n=t.hierarchical,s=0;s<i.length;s++){var r=i[s],a=n.distributionOrdering[r];if(a.length>1)for(var h=0;h<a.length-1;h++){var d=a[h],l=a[h+1];n.hasSameParent(d,l)&&n.inSameSubNetwork(d,l)&&e(d,l,o)}}},l=function(i,o){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],s=t.direction.getPosition(i),d=t.direction.getPosition(o),l=Math.abs(d-s),u=t.options.hierarchical.nodeSpacing;if(l>u){var c={},p={};r(i,c),r(o,p);var f=h(i,o),m=a(c,f),v=a(p,f),g=m[1],y=v[0],b=v[2];if(Math.abs(g-y)>u){var _=g-y+u;_<-b+u&&(_=-b+u),_<0&&(t._shiftBlock(o.id,_),e=!0,!0===n&&t._centerParent(o))}}},u=function(o,n){for(var h=n.id,d=n.edges,l=t.hierarchical.levels[n.id],u=t.options.hierarchical.levelSeparation*t.options.hierarchical.levelSeparation,c={},p=[],f=0;f<d.length;f++){var m=d[f];if(m.toId!=m.fromId){var v=m.toId==h?m.from:m.to;c[d[f].id]=v,t.hierarchical.levels[v.id]<l&&p.push(m)}}var g=function(e,i){for(var o=0,n=0;n<i.length;n++)if(void 0!==c[i[n].id]){var s=t.direction.getPosition(c[i[n].id])-e;o+=s/Math.sqrt(s*s+u)}return o},y=function(e,i){for(var o=0,n=0;n<i.length;n++)if(void 0!==c[i[n].id]){var s=t.direction.getPosition(c[i[n].id])-e;o-=u*Math.pow(s*s+u,-1.5)}return o},b=function(e,i){for(var o=t.direction.getPosition(n),s={},r=0;r<e;r++){var a=g(o,i),h=y(o,i);if(o-=Math.max(-40,Math.min(40,Math.round(a/h))),void 0!==s[o])break;s[o]=r}return o},_=b(o,p);!function(o){var s=t.direction.getPosition(n);if(void 0===i[n.id]){var h={};r(n,h),i[n.id]=h}var d=a(i[n.id]),l=d[2],u=d[3],c=o-s,p=0;c>0?p=Math.min(c,u-t.options.hierarchical.nodeSpacing):c<0&&(p=-Math.min(-c,l-t.options.hierarchical.nodeSpacing)),0!=p&&(t._shiftBlock(n.id,p),e=!0)}(_),_=b(o,d),function(i){var o=t.direction.getPosition(n),r=t._getSpaceAroundNode(n),a=(0,s.default)(r,2),h=a[0],d=a[1],l=i-o,u=o;l>0?u=Math.min(o+(d-t.options.hierarchical.nodeSpacing),i):l<0&&(u=Math.max(o-(h-t.options.hierarchical.nodeSpacing),i)),u!==o&&(t.direction.setPosition(n,u),e=!0)}(_)};!0===this.options.hierarchical.blockShifting&&(function(i){var o=t.hierarchical.getLevels();o=o.reverse();for(var n=0;n<i&&(e=!1,d(l,o,!0),!0===e);n++);}(5),function(){for(var e in t.body.nodes)t.body.nodes.hasOwnProperty(e)&&t._centerParent(t.body.nodes[e])}()),!0===this.options.hierarchical.edgeMinimization&&function(i){var o=t.hierarchical.getLevels();o=o.reverse();for(var n=0;n<i;n++){e=!1;for(var s=0;s<o.length;s++)for(var r=o[s],a=t.hierarchical.distributionOrdering[r],h=0;h<a.length;h++)u(1e3,a[h]);if(!0!==e)break}}(20),!0===this.options.hierarchical.parentCentralization&&function(){var e=t.hierarchical.getLevels();e=e.reverse();for(var i=0;i<e.length;i++)for(var o=e[i],n=t.hierarchical.distributionOrdering[o],s=0;s<n.length;s++)t._centerParent(n[s])}(),function(){for(var e=n(),i=0,s=0;s<e.length-1;s++){i+=e[s].max-e[s+1].min+t.options.hierarchical.treeSpacing,o(s+1,i)}}()}},{key:"_getSpaceAroundNode",value:function(t,e){var i=!0;void 0===e&&(i=!1);var o=this.hierarchical.levels[t.id];if(void 0!==o){var n=this.hierarchical.distributionIndex[t.id],s=this.direction.getPosition(t),r=this.hierarchical.distributionOrdering[o],a=1e9,h=1e9;if(0!==n){var d=r[n-1];if(!0===i&&void 0===e[d.id]||!1===i){a=s-this.direction.getPosition(d)}}if(n!=r.length-1){var l=r[n+1];if(!0===i&&void 0===e[l.id]||!1===i){var u=this.direction.getPosition(l);h=Math.min(h,u-s)}}return[a,h]}return[0,0]}},{key:"_centerParent",value:function(t){if(this.hierarchical.parentReference[t.id])for(var e=this.hierarchical.parentReference[t.id],i=0;i<e.length;i++){var o=e[i],n=this.body.nodes[o],r=this.hierarchical.childrenReference[o];if(void 0!==r){var a=this._getCenterPosition(r),h=this.direction.getPosition(n),d=this._getSpaceAroundNode(n),l=(0,s.default)(d,2),u=l[0],c=l[1],p=h-a;(p<0&&Math.abs(p)<c-this.options.hierarchical.nodeSpacing||p>0&&Math.abs(p)<u-this.options.hierarchical.nodeSpacing)&&this.direction.setPosition(n,a)}}}},{key:"_placeNodesByHierarchy",value:function(t){this.positionedNodes={};for(var e in t)if(t.hasOwnProperty(e)){var i=(0,d.default)(t[e]);i=this._indexArrayToNodes(i),this.direction.sort(i);for(var o=0,n=0;n<i.length;n++){var s=i[n];if(void 0===this.positionedNodes[s.id]){var r=this.options.hierarchical.nodeSpacing,a=r*o;o>0&&(a=this.direction.getPosition(i[n-1])+r),this.direction.setPosition(s,a,e),this._validatePositionAndContinue(s,e,a),o++}}}}},{key:"_placeBranchNodes",value:function(t,e){var i=this.hierarchical.childrenReference[t];if(void 0!==i){for(var o=[],n=0;n<i.length;n++)o.push(this.body.nodes[i[n]]);this.direction.sort(o);for(var s=0;s<o.length;s++){var r=o[s],a=this.hierarchical.levels[r.id];if(!(a>e&&void 0===this.positionedNodes[r.id]))return;var h=this.options.hierarchical.nodeSpacing,d=void 0;d=0===s?this.direction.getPosition(this.body.nodes[t]):this.direction.getPosition(o[s-1])+h,this.direction.setPosition(r,d,a),this._validatePositionAndContinue(r,a,d)}var l=this._getCenterPosition(o);this.direction.setPosition(this.body.nodes[t],l,e)}}},{key:"_validatePositionAndContinue",value:function(t,e,i){if(this.hierarchical.isTree){if(void 0!==this.lastNodeOnLevel[e]){var o=this.direction.getPosition(this.body.nodes[this.lastNodeOnLevel[e]]);if(i-o<this.options.hierarchical.nodeSpacing){var n=o+this.options.hierarchical.nodeSpacing-i,s=this._findCommonParent(this.lastNodeOnLevel[e],t.id);this._shiftBlock(s.withChild,n)}}this.lastNodeOnLevel[e]=t.id,this.positionedNodes[t.id]=!0,this._placeBranchNodes(t.id,e)}}},{key:"_indexArrayToNodes",value:function(t){for(var e=[],i=0;i<t.length;i++)e.push(this.body.nodes[t[i]]);return e}},{key:"_getDistribution",value:function(){var t={},e=void 0,i=void 0;for(e in this.body.nodes)if(this.body.nodes.hasOwnProperty(e)){i=this.body.nodes[e];var o=void 0===this.hierarchical.levels[e]?0:this.hierarchical.levels[e];this.direction.fix(i,o),void 0===t[o]&&(t[o]={}),t[o][e]=i}return t}},{key:"_getActiveEdges",value:function(t){var e=this,i=[];return f.forEach(t.edges,function(t){-1!==e.body.edgeIndices.indexOf(t.id)&&i.push(t)}),i}},{key:"_getHubSizes",value:function(){var t=this,e={},i=this.body.nodeIndices;f.forEach(i,function(i){var o=t.body.nodes[i],n=t._getActiveEdges(o).length;e[n]=!0});var o=[];return f.forEach(e,function(t){o.push(Number(t))}),o.sort(function(t,e){return e-t}),o}},{key:"_determineLevelsByHubsize",value:function(){for(var t=this,e=function(e,i){t.hierarchical.levelDownstream(e,i)},i=this._getHubSizes(),o=0;o<i.length;++o){if("break"===function(o){var n=i[o];if(0===n)return"break";f.forEach(t.body.nodeIndices,function(i){var o=t.body.nodes[i];n===t._getActiveEdges(o).length&&t._crawlNetwork(e,i)})}(o))break}}},{key:"_determineLevelsCustomCallback",value:function(){var t=this,e=function(e,i,o){var n=t.hierarchical.levels[e.id];void 0===n&&(n=t.hierarchical.levels[e.id]=1e5);var s=(m.cloneOptions(e,"node"),m.cloneOptions(i,"node"),void m.cloneOptions(o,"edge"));t.hierarchical.levels[i.id]=n+s};this._crawlNetwork(e),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:"_determineLevelsDirected",value:function(){var t=this,e=function(e){return f.forEach(t.body.edges,function(t){if(t.toId===e.fromId&&t.fromId===e.toId)return!0}),!1},i=function(i,o,n){var s=t.hierarchical.levels[i.id],r=t.hierarchical.levels[o.id];e(n)&&void 0!==s&&void 0!==r||(void 0===s&&(s=t.hierarchical.levels[i.id]=1e4),n.toId==o.id?t.hierarchical.levels[o.id]=s+1:t.hierarchical.levels[o.id]=s-1)};this._crawlNetwork(i),this.hierarchical.setMinLevelToZero(this.body.nodes)}},{key:"_generateMap",value:function(){var t=this,e=function(e,i){t.hierarchical.levels[i.id]>t.hierarchical.levels[e.id]&&t.hierarchical.addRelation(e.id,i.id)};this._crawlNetwork(e),this.hierarchical.checkIfTree()}},{key:"_crawlNetwork",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){},i=arguments[1],o={},n=function i(n,s){if(void 0===o[n.id]){t.hierarchical.setTreeIndex(n,s),o[n.id]=!0;for(var r=void 0,a=t._getActiveEdges(n),h=0;h<a.length;h++){var d=a[h];!0===d.connected&&(r=d.toId==n.id?d.from:d.to,n.id!=r.id&&(e(n,r,d),i(r,s)))}}};if(void 0===i)for(var s=0,r=0;r<this.body.nodeIndices.length;r++){var a=this.body.nodeIndices[r];if(void 0===o[a]){var h=this.body.nodes[a];n(h,s),s+=1}}else{var d=this.body.nodes[i];if(void 0===d)return void console.error("Node not found:",i);n(d)}}},{key:"_shiftBlock",value:function(t,e){var i=this,o={};!function t(n){if(!o[n]){o[n]=!0,i.direction.shift(n,e);var s=i.hierarchical.childrenReference[n];if(void 0!==s)for(var r=0;r<s.length;r++)t(s[r])}}(t)}},{key:"_findCommonParent",value:function(t,e){var i=this,o={};return function t(e,o){var n=i.hierarchical.parentReference[o];if(void 0!==n)for(var s=0;s<n.length;s++){var r=n[s];e[r]=!0,t(e,r)}}(o,t),function t(e,o){var n=i.hierarchical.parentReference[o];if(void 0!==n)for(var s=0;s<n.length;s++){var r=n[s];if(void 0!==e[r])return{foundParent:r,withChild:o};var a=t(e,r);if(null!==a.foundParent)return a}return{foundParent:null,withChild:o}}(o,e)}},{key:"setDirectionStrategy",value:function(){var t="UD"===this.options.hierarchical.direction||"DU"===this.options.hierarchical.direction;this.direction=t?new y(this):new g(this)}},{key:"_getCenterPosition",value:function(t){for(var e=1e9,i=-1e9,o=0;o<t.length;o++){var n=void 0;if(void 0!==t[o].id)n=t[o];else{var s=t[o];n=this.body.nodes[s]}var r=this.direction.getPosition(n);e=Math.min(e,r),i=Math.max(i,r)}return.5*(e+i)}}]),t}();e.default=_},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.VerticalStrategy=e.HorizontalStrategy=void 0;var n=i(3),s=o(n),r=i(4),a=o(r),h=i(5),d=o(h),l=i(0),u=o(l),c=i(1),p=o(c),f=function(){function t(){(0,u.default)(this,t)}return(0,p.default)(t,[{key:"abstract",value:function(){throw new Error("Can't instantiate abstract class!")}},{key:"fake_use",value:function(){}},{key:"curveType",value:function(){return this.abstract()}},{key:"getPosition",value:function(t){return this.fake_use(t),this.abstract()}},{key:"setPosition",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;this.fake_use(t,e,i),this.abstract()}},{key:"getTreeSize",value:function(t){return this.fake_use(t),this.abstract()}},{key:"sort",value:function(t){this.fake_use(t),this.abstract()}},{key:"fix",value:function(t,e){this.fake_use(t,e),this.abstract()}},{key:"shift",value:function(t,e){this.fake_use(t,e),this.abstract()}}]),t}(),m=function(t){function e(t){(0,u.default)(this,e);var i=(0,a.default)(this,(e.__proto__||(0,s.default)(e)).call(this));return i.layout=t,i}return(0,d.default)(e,t),(0,p.default)(e,[{key:"curveType",value:function(){return"horizontal"}},{key:"getPosition",value:function(t){return t.x}},{key:"setPosition",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.x=e}},{key:"getTreeSize",value:function(t){var e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_x,max:e.max_x}}},{key:"sort",value:function(t){t.sort(function(t,e){return void 0===t.x||void 0===e.x?0:t.x-e.x})}},{key:"fix",value:function(t,e){t.y=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.y=!0}},{key:"shift",value:function(t,e){this.layout.body.nodes[t].x+=e}}]),e}(f),v=function(t){function e(t){(0,u.default)(this,e);var i=(0,a.default)(this,(e.__proto__||(0,s.default)(e)).call(this));return i.layout=t,i}return(0,d.default)(e,t),(0,p.default)(e,[{key:"curveType",value:function(){return"vertical"}},{key:"getPosition",value:function(t){return t.y}},{key:"setPosition",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;void 0!==i&&this.layout.hierarchical.addToOrdering(t,i),t.y=e}},{key:"getTreeSize",value:function(t){var e=this.layout.hierarchical.getTreeSize(this.layout.body.nodes,t);return{min:e.min_y,max:e.max_y}}},{key:"sort",value:function(t){t.sort(function(t,e){return void 0===t.y||void 0===e.y?0:t.y-e.y})}},{key:"fix",value:function(t,e){t.x=this.layout.options.hierarchical.levelSeparation*e,t.options.fixed.x=!0}},{key:"shift",value:function(t,e){this.layout.body.nodes[t].y+=e}}]),e}(f);e.HorizontalStrategy=v,e.VerticalStrategy=m},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(8),s=o(n),r=i(19),a=o(r),h=i(6),d=o(h),l=i(0),u=o(l),c=i(1),p=o(c),f=i(2),m=i(10),v=i(37),g=function(){function t(e,i,o){var n=this;(0,u.default)(this,t),this.body=e,this.canvas=i,this.selectionHandler=o,this.editMode=!1,this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0,this.manipulationHammers=[],this.temporaryUIFunctions={},this.temporaryEventFunctions=[],this.touchTime=0,this.temporaryIds={nodes:[],edges:[]},this.guiEnabled=!1,this.inMode=!1,this.selectedControlNode=void 0,this.options={},this.defaultOptions={enabled:!1,initiallyActive:!1,addNode:!0,addEdge:!0,editNode:void 0,editEdge:!0,deleteNode:!0,deleteEdge:!0,controlNodeStyle:{shape:"dot",size:6,color:{background:"#ff0000",border:"#3c3c3c",highlight:{background:"#07f968",border:"#3c3c3c"}},borderWidth:2,borderWidthSelected:2}},f.extend(this.options,this.defaultOptions),this.body.emitter.on("destroy",function(){n._clean()}),this.body.emitter.on("_dataChanged",this._restore.bind(this)),this.body.emitter.on("_resetData",this._restore.bind(this))}return(0,p.default)(t,[{key:"_restore",value:function(){!1!==this.inMode&&(!0===this.options.initiallyActive?this.enableEditMode():this.disableEditMode())}},{key:"setOptions",value:function(t,e,i){void 0!==e&&(void 0!==e.locale?this.options.locale=e.locale:this.options.locale=i.locale,void 0!==e.locales?this.options.locales=e.locales:this.options.locales=i.locales),void 0!==t&&("boolean"==typeof t?this.options.enabled=t:(this.options.enabled=!0,f.deepExtend(this.options,t)),!0===this.options.initiallyActive&&(this.editMode=!0),this._setup())}},{key:"toggleEditMode",value:function(){!0===this.editMode?this.disableEditMode():this.enableEditMode()}},{key:"enableEditMode",value:function(){this.editMode=!0,this._clean(),!0===this.guiEnabled&&(this.manipulationDiv.style.display="block",this.closeDiv.style.display="block",this.editModeDiv.style.display="none",this.showManipulatorToolbar())}},{key:"disableEditMode",value:function(){this.editMode=!1,this._clean(),!0===this.guiEnabled&&(this.manipulationDiv.style.display="none",this.closeDiv.style.display="none",this.editModeDiv.style.display="block",this._createEditButton())}},{key:"showManipulatorToolbar",value:function(){if(this._clean(),this.manipulationDOM={},!0===this.guiEnabled){this.editMode=!0,this.manipulationDiv.style.display="block",this.closeDiv.style.display="block";var t=this.selectionHandler._getSelectedNodeCount(),e=this.selectionHandler._getSelectedEdgeCount(),i=t+e,o=this.options.locales[this.options.locale],n=!1;!1!==this.options.addNode&&(this._createAddNodeButton(o),n=!0),!1!==this.options.addEdge&&(!0===n?this._createSeperator(1):n=!0,this._createAddEdgeButton(o)),1===t&&"function"==typeof this.options.editNode?(!0===n?this._createSeperator(2):n=!0,this._createEditNodeButton(o)):1===e&&0===t&&!1!==this.options.editEdge&&(!0===n?this._createSeperator(3):n=!0,this._createEditEdgeButton(o)),0!==i&&(t>0&&!1!==this.options.deleteNode?(!0===n&&this._createSeperator(4),this._createDeleteButton(o)):0===t&&!1!==this.options.deleteEdge&&(!0===n&&this._createSeperator(4),this._createDeleteButton(o))),this._bindHammerToDiv(this.closeDiv,this.toggleEditMode.bind(this)),this._temporaryBindEvent("select",this.showManipulatorToolbar.bind(this))}this.body.emitter.emit("_redraw")}},{key:"addNodeMode",value:function(){if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="addNode",!0===this.guiEnabled){var t=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(t),this._createSeperator(),this._createDescription(t.addDescription||this.options.locales.en.addDescription),this._bindHammerToDiv(this.closeDiv,this.toggleEditMode.bind(this))}this._temporaryBindEvent("click",this._performAddNode.bind(this))}},{key:"editNode",value:function(){var t=this;!0!==this.editMode&&this.enableEditMode(),this._clean();var e=this.selectionHandler._getSelectedNode();if(void 0!==e){if(this.inMode="editNode","function"!=typeof this.options.editNode)throw new Error("No function has been configured to handle the editing of nodes.");if(!0!==e.isCluster){var i=f.deepExtend({},e.options,!1);if(i.x=e.x,i.y=e.y,2!==this.options.editNode.length)throw new Error("The function for edit does not support two arguments (data, callback)");this.options.editNode(i,function(e){null!==e&&void 0!==e&&"editNode"===t.inMode&&t.body.data.nodes.getDataSet().update(e),t.showManipulatorToolbar()})}else alert(this.options.locales[this.options.locale].editClusterError||this.options.locales.en.editClusterError)}else this.showManipulatorToolbar()}},{key:"addEdgeMode",value:function(){if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="addEdge",!0===this.guiEnabled){var t=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(t),this._createSeperator(),this._createDescription(t.edgeDescription||this.options.locales.en.edgeDescription),this._bindHammerToDiv(this.closeDiv,this.toggleEditMode.bind(this))}this._temporaryBindUI("onTouch",this._handleConnect.bind(this)),this._temporaryBindUI("onDragEnd",this._finishConnect.bind(this)),this._temporaryBindUI("onDrag",this._dragControlNode.bind(this)),this._temporaryBindUI("onRelease",this._finishConnect.bind(this)),this._temporaryBindUI("onDragStart",this._dragStartEdge.bind(this)),this._temporaryBindUI("onHold",function(){})}},{key:"editEdgeMode",value:function(){if(!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="editEdge","object"===(0,d.default)(this.options.editEdge)&&"function"==typeof this.options.editEdge.editWithoutDrag&&(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdges()[0],void 0!==this.edgeBeingEditedId)){var t=this.body.edges[this.edgeBeingEditedId];return void this._performEditEdge(t.from,t.to)}if(!0===this.guiEnabled){var e=this.options.locales[this.options.locale];this.manipulationDOM={},this._createBackButton(e),this._createSeperator(),this._createDescription(e.editEdgeDescription||this.options.locales.en.editEdgeDescription),this._bindHammerToDiv(this.closeDiv,this.toggleEditMode.bind(this))}if(this.edgeBeingEditedId=this.selectionHandler.getSelectedEdges()[0],void 0!==this.edgeBeingEditedId){var i=this.body.edges[this.edgeBeingEditedId],o=this._getNewTargetNode(i.from.x,i.from.y),n=this._getNewTargetNode(i.to.x,i.to.y);this.temporaryIds.nodes.push(o.id),this.temporaryIds.nodes.push(n.id),this.body.nodes[o.id]=o,this.body.nodeIndices.push(o.id),this.body.nodes[n.id]=n,this.body.nodeIndices.push(n.id),this._temporaryBindUI("onTouch",this._controlNodeTouch.bind(this)),this._temporaryBindUI("onTap",function(){}),this._temporaryBindUI("onHold",function(){}),this._temporaryBindUI("onDragStart",this._controlNodeDragStart.bind(this)),this._temporaryBindUI("onDrag",this._controlNodeDrag.bind(this)),this._temporaryBindUI("onDragEnd",this._controlNodeDragEnd.bind(this)),this._temporaryBindUI("onMouseMove",function(){}),this._temporaryBindEvent("beforeDrawing",function(t){var e=i.edgeType.findBorderPositions(t);!1===o.selected&&(o.x=e.from.x,o.y=e.from.y),!1===n.selected&&(n.x=e.to.x,n.y=e.to.y)}),this.body.emitter.emit("_redraw")}else this.showManipulatorToolbar()}},{key:"deleteSelected",value:function(){var t=this;!0!==this.editMode&&this.enableEditMode(),this._clean(),this.inMode="delete";var e=this.selectionHandler.getSelectedNodes(),i=this.selectionHandler.getSelectedEdges(),o=void 0;if(e.length>0){for(var n=0;n<e.length;n++)if(!0===this.body.nodes[e[n]].isCluster)return void alert(this.options.locales[this.options.locale].deleteClusterError||this.options.locales.en.deleteClusterError);"function"==typeof this.options.deleteNode&&(o=this.options.deleteNode)
+}else i.length>0&&"function"==typeof this.options.deleteEdge&&(o=this.options.deleteEdge);if("function"==typeof o){var s={nodes:e,edges:i};if(2!==o.length)throw new Error("The function for delete does not support two arguments (data, callback)");o(s,function(e){null!==e&&void 0!==e&&"delete"===t.inMode?(t.body.data.edges.getDataSet().remove(e.edges),t.body.data.nodes.getDataSet().remove(e.nodes),t.body.emitter.emit("startSimulation"),t.showManipulatorToolbar()):(t.body.emitter.emit("startSimulation"),t.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().remove(i),this.body.data.nodes.getDataSet().remove(e),this.body.emitter.emit("startSimulation"),this.showManipulatorToolbar()}},{key:"_setup",value:function(){!0===this.options.enabled?(this.guiEnabled=!0,this._createWrappers(),!1===this.editMode?this._createEditButton():this.showManipulatorToolbar()):(this._removeManipulationDOM(),this.guiEnabled=!1)}},{key:"_createWrappers",value:function(){void 0===this.manipulationDiv&&(this.manipulationDiv=document.createElement("div"),this.manipulationDiv.className="vis-manipulation",!0===this.editMode?this.manipulationDiv.style.display="block":this.manipulationDiv.style.display="none",this.canvas.frame.appendChild(this.manipulationDiv)),void 0===this.editModeDiv&&(this.editModeDiv=document.createElement("div"),this.editModeDiv.className="vis-edit-mode",!0===this.editMode?this.editModeDiv.style.display="none":this.editModeDiv.style.display="block",this.canvas.frame.appendChild(this.editModeDiv)),void 0===this.closeDiv&&(this.closeDiv=document.createElement("div"),this.closeDiv.className="vis-close",this.closeDiv.style.display=this.manipulationDiv.style.display,this.canvas.frame.appendChild(this.closeDiv))}},{key:"_getNewTargetNode",value:function(t,e){var i=f.deepExtend({},this.options.controlNodeStyle);i.id="targetNode"+f.randomUUID(),i.hidden=!1,i.physics=!1,i.x=t,i.y=e;var o=this.body.functions.createNode(i);return o.shape.boundingBox={left:t,right:t,top:e,bottom:e},o}},{key:"_createEditButton",value:function(){this._clean(),this.manipulationDOM={},f.recursiveDOMDelete(this.editModeDiv);var t=this.options.locales[this.options.locale],e=this._createButton("editMode","vis-button vis-edit vis-edit-mode",t.edit||this.options.locales.en.edit);this.editModeDiv.appendChild(e),this._bindHammerToDiv(e,this.toggleEditMode.bind(this))}},{key:"_clean",value:function(){this.inMode=!1,!0===this.guiEnabled&&(f.recursiveDOMDelete(this.editModeDiv),f.recursiveDOMDelete(this.manipulationDiv),this._cleanManipulatorHammers()),this._cleanupTemporaryNodesAndEdges(),this._unbindTemporaryUIs(),this._unbindTemporaryEvents(),this.body.emitter.emit("restorePhysics")}},{key:"_cleanManipulatorHammers",value:function(){if(0!=this.manipulationHammers.length){for(var t=0;t<this.manipulationHammers.length;t++)this.manipulationHammers[t].destroy();this.manipulationHammers=[]}}},{key:"_removeManipulationDOM",value:function(){this._clean(),f.recursiveDOMDelete(this.manipulationDiv),f.recursiveDOMDelete(this.editModeDiv),f.recursiveDOMDelete(this.closeDiv),this.manipulationDiv&&this.canvas.frame.removeChild(this.manipulationDiv),this.editModeDiv&&this.canvas.frame.removeChild(this.editModeDiv),this.closeDiv&&this.canvas.frame.removeChild(this.closeDiv),this.manipulationDiv=void 0,this.editModeDiv=void 0,this.closeDiv=void 0}},{key:"_createSeperator",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.manipulationDOM["seperatorLineDiv"+t]=document.createElement("div"),this.manipulationDOM["seperatorLineDiv"+t].className="vis-separator-line",this.manipulationDiv.appendChild(this.manipulationDOM["seperatorLineDiv"+t])}},{key:"_createAddNodeButton",value:function(t){var e=this._createButton("addNode","vis-button vis-add",t.addNode||this.options.locales.en.addNode);this.manipulationDiv.appendChild(e),this._bindHammerToDiv(e,this.addNodeMode.bind(this))}},{key:"_createAddEdgeButton",value:function(t){var e=this._createButton("addEdge","vis-button vis-connect",t.addEdge||this.options.locales.en.addEdge);this.manipulationDiv.appendChild(e),this._bindHammerToDiv(e,this.addEdgeMode.bind(this))}},{key:"_createEditNodeButton",value:function(t){var e=this._createButton("editNode","vis-button vis-edit",t.editNode||this.options.locales.en.editNode);this.manipulationDiv.appendChild(e),this._bindHammerToDiv(e,this.editNode.bind(this))}},{key:"_createEditEdgeButton",value:function(t){var e=this._createButton("editEdge","vis-button vis-edit",t.editEdge||this.options.locales.en.editEdge);this.manipulationDiv.appendChild(e),this._bindHammerToDiv(e,this.editEdgeMode.bind(this))}},{key:"_createDeleteButton",value:function(t){var e;e=this.options.rtl?"vis-button vis-delete-rtl":"vis-button vis-delete";var i=this._createButton("delete",e,t.del||this.options.locales.en.del);this.manipulationDiv.appendChild(i),this._bindHammerToDiv(i,this.deleteSelected.bind(this))}},{key:"_createBackButton",value:function(t){var e=this._createButton("back","vis-button vis-back",t.back||this.options.locales.en.back);this.manipulationDiv.appendChild(e),this._bindHammerToDiv(e,this.showManipulatorToolbar.bind(this))}},{key:"_createButton",value:function(t,e,i){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"vis-label";return this.manipulationDOM[t+"Div"]=document.createElement("div"),this.manipulationDOM[t+"Div"].className=e,this.manipulationDOM[t+"Label"]=document.createElement("div"),this.manipulationDOM[t+"Label"].className=o,this.manipulationDOM[t+"Label"].innerHTML=i,this.manipulationDOM[t+"Div"].appendChild(this.manipulationDOM[t+"Label"]),this.manipulationDOM[t+"Div"]}},{key:"_createDescription",value:function(t){this.manipulationDiv.appendChild(this._createButton("description","vis-button vis-none",t))}},{key:"_temporaryBindEvent",value:function(t,e){this.temporaryEventFunctions.push({event:t,boundFunction:e}),this.body.emitter.on(t,e)}},{key:"_temporaryBindUI",value:function(t,e){if(void 0===this.body.eventListeners[t])throw new Error("This UI function does not exist. Typo? You tried: "+t+" possible are: "+(0,a.default)((0,s.default)(this.body.eventListeners)));this.temporaryUIFunctions[t]=this.body.eventListeners[t],this.body.eventListeners[t]=e}},{key:"_unbindTemporaryUIs",value:function(){for(var t in this.temporaryUIFunctions)this.temporaryUIFunctions.hasOwnProperty(t)&&(this.body.eventListeners[t]=this.temporaryUIFunctions[t],delete this.temporaryUIFunctions[t]);this.temporaryUIFunctions={}}},{key:"_unbindTemporaryEvents",value:function(){for(var t=0;t<this.temporaryEventFunctions.length;t++){var e=this.temporaryEventFunctions[t].event,i=this.temporaryEventFunctions[t].boundFunction;this.body.emitter.off(e,i)}this.temporaryEventFunctions=[]}},{key:"_bindHammerToDiv",value:function(t,e){var i=new m(t,{});v.onTouch(i,e),this.manipulationHammers.push(i)}},{key:"_cleanupTemporaryNodesAndEdges",value:function(){for(var t=0;t<this.temporaryIds.edges.length;t++){this.body.edges[this.temporaryIds.edges[t]].disconnect(),delete this.body.edges[this.temporaryIds.edges[t]];var e=this.body.edgeIndices.indexOf(this.temporaryIds.edges[t]);-1!==e&&this.body.edgeIndices.splice(e,1)}for(var i=0;i<this.temporaryIds.nodes.length;i++){delete this.body.nodes[this.temporaryIds.nodes[i]];var o=this.body.nodeIndices.indexOf(this.temporaryIds.nodes[i]);-1!==o&&this.body.nodeIndices.splice(o,1)}this.temporaryIds={nodes:[],edges:[]}}},{key:"_controlNodeTouch",value:function(t){this.selectionHandler.unselectAll(),this.lastTouch=this.body.functions.getPointer(t.center),this.lastTouch.translation=f.extend({},this.body.view.translation)}},{key:"_controlNodeDragStart",value:function(t){var e=this.lastTouch,i=this.selectionHandler._pointerToPositionObject(e),o=this.body.nodes[this.temporaryIds.nodes[0]],n=this.body.nodes[this.temporaryIds.nodes[1]],s=this.body.edges[this.edgeBeingEditedId];this.selectedControlNode=void 0;var r=o.isOverlappingWith(i),a=n.isOverlappingWith(i);!0===r?(this.selectedControlNode=o,s.edgeType.from=o):!0===a&&(this.selectedControlNode=n,s.edgeType.to=n),void 0!==this.selectedControlNode&&this.selectionHandler.selectObject(this.selectedControlNode),this.body.emitter.emit("_redraw")}},{key:"_controlNodeDrag",value:function(t){this.body.emitter.emit("disablePhysics");var e=this.body.functions.getPointer(t.center),i=this.canvas.DOMtoCanvas(e);if(void 0!==this.selectedControlNode)this.selectedControlNode.x=i.x,this.selectedControlNode.y=i.y;else{var o=e.x-this.lastTouch.x,n=e.y-this.lastTouch.y;this.body.view.translation={x:this.lastTouch.translation.x+o,y:this.lastTouch.translation.y+n}}this.body.emitter.emit("_redraw")}},{key:"_controlNodeDragEnd",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),o=this.body.edges[this.edgeBeingEditedId];if(void 0!==this.selectedControlNode){this.selectionHandler.unselectAll();for(var n=this.selectionHandler._getAllNodesOverlappingWith(i),s=void 0,r=n.length-1;r>=0;r--)if(n[r]!==this.selectedControlNode.id){s=this.body.nodes[n[r]];break}if(void 0!==s&&void 0!==this.selectedControlNode)if(!0===s.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var a=this.body.nodes[this.temporaryIds.nodes[0]];this.selectedControlNode.id===a.id?this._performEditEdge(s.id,o.to.id):this._performEditEdge(o.from.id,s.id)}else o.updateEdgeType(),this.body.emitter.emit("restorePhysics");this.body.emitter.emit("_redraw")}}},{key:"_handleConnect",value:function(t){if((new Date).valueOf()-this.touchTime>100){this.lastTouch=this.body.functions.getPointer(t.center),this.lastTouch.translation=f.extend({},this.body.view.translation);var e=this.lastTouch,i=this.selectionHandler.getNodeAt(e);if(void 0!==i)if(!0===i.isCluster)alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError);else{var o=this._getNewTargetNode(i.x,i.y);this.body.nodes[o.id]=o,this.body.nodeIndices.push(o.id);var n=this.body.functions.createEdge({id:"connectionEdge"+f.randomUUID(),from:i.id,to:o.id,physics:!1,smooth:{enabled:!0,type:"continuous",roundness:.5}});this.body.edges[n.id]=n,this.body.edgeIndices.push(n.id),this.temporaryIds.nodes.push(o.id),this.temporaryIds.edges.push(n.id)}this.touchTime=(new Date).valueOf()}}},{key:"_dragControlNode",value:function(t){var e=this.body.functions.getPointer(t.center);if(void 0!==this.temporaryIds.nodes[0]){var i=this.body.nodes[this.temporaryIds.nodes[0]];i.x=this.canvas._XconvertDOMtoCanvas(e.x),i.y=this.canvas._YconvertDOMtoCanvas(e.y),this.body.emitter.emit("_redraw")}else{var o=e.x-this.lastTouch.x,n=e.y-this.lastTouch.y;this.body.view.translation={x:this.lastTouch.translation.x+o,y:this.lastTouch.translation.y+n}}}},{key:"_finishConnect",value:function(t){var e=this.body.functions.getPointer(t.center),i=this.selectionHandler._pointerToPositionObject(e),o=void 0;void 0!==this.temporaryIds.edges[0]&&(o=this.body.edges[this.temporaryIds.edges[0]].fromId);for(var n=this.selectionHandler._getAllNodesOverlappingWith(i),s=void 0,r=n.length-1;r>=0;r--)if(-1===this.temporaryIds.nodes.indexOf(n[r])){s=this.body.nodes[n[r]];break}this._cleanupTemporaryNodesAndEdges(),void 0!==s&&(!0===s.isCluster?alert(this.options.locales[this.options.locale].createEdgeError||this.options.locales.en.createEdgeError):void 0!==this.body.nodes[o]&&void 0!==this.body.nodes[s.id]&&this._performAddEdge(o,s.id)),this.body.emitter.emit("_redraw")}},{key:"_dragStartEdge",value:function(t){var e=this.lastTouch;this.selectionHandler._generateClickEvent("dragStart",t,e,void 0,!0)}},{key:"_performAddNode",value:function(t){var e=this,i={id:f.randomUUID(),x:t.pointer.canvas.x,y:t.pointer.canvas.y,label:"new"};if("function"==typeof this.options.addNode){if(2!==this.options.addNode.length)throw this.showManipulatorToolbar(),new Error("The function for add does not support two arguments (data,callback)");this.options.addNode(i,function(t){null!==t&&void 0!==t&&"addNode"===e.inMode&&(e.body.data.nodes.getDataSet().add(t),e.showManipulatorToolbar())})}else this.body.data.nodes.getDataSet().add(i),this.showManipulatorToolbar()}},{key:"_performAddEdge",value:function(t,e){var i=this,o={from:t,to:e};if("function"==typeof this.options.addEdge){if(2!==this.options.addEdge.length)throw new Error("The function for connect does not support two arguments (data,callback)");this.options.addEdge(o,function(t){null!==t&&void 0!==t&&"addEdge"===i.inMode&&(i.body.data.edges.getDataSet().add(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().add(o),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}},{key:"_performEditEdge",value:function(t,e){var i=this,o={id:this.edgeBeingEditedId,from:t,to:e,label:this.body.data.edges._data[this.edgeBeingEditedId].label},n=this.options.editEdge;if("object"===(void 0===n?"undefined":(0,d.default)(n))&&(n=n.editWithoutDrag),"function"==typeof n){if(2!==n.length)throw new Error("The function for edit does not support two arguments (data, callback)");n(o,function(t){null===t||void 0===t||"editEdge"!==i.inMode?(i.body.edges[o.id].updateEdgeType(),i.body.emitter.emit("_redraw"),i.showManipulatorToolbar()):(i.body.data.edges.getDataSet().update(t),i.selectionHandler.unselectAll(),i.showManipulatorToolbar())})}else this.body.data.edges.getDataSet().update(o),this.selectionHandler.unselectAll(),this.showManipulatorToolbar()}}]),t}();e.default=g},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(30),s=o(n),r=i(0),a=o(r),h=i(1),d=o(h),l=i(239),u=o(l),c=function(){function t(e,i,o){(0,a.default)(this,t),this.body=e,this.springLength=i,this.springConstant=o,this.distanceSolver=new u.default}return(0,d.default)(t,[{key:"setOptions",value:function(t){t&&(t.springLength&&(this.springLength=t.springLength),t.springConstant&&(this.springConstant=t.springConstant))}},{key:"solve",value:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=this.distanceSolver.getDistances(this.body,t,e);this._createL_matrix(o),this._createK_matrix(o),this._createE_matrix();for(var n=0,r=Math.max(1e3,Math.min(10*this.body.nodeIndices.length,6e3)),a=1e9,h=0,d=0,l=0,u=0,c=0;a>.01&&n<r;){n+=1;var p=this._getHighestEnergyNode(i),f=(0,s.default)(p,4);for(h=f[0],a=f[1],d=f[2],l=f[3],u=a,c=0;u>1&&c<5;){c+=1,this._moveNode(h,d,l);var m=this._getEnergy(h),v=(0,s.default)(m,3);u=v[0],d=v[1],l=v[2]}}}},{key:"_getHighestEnergyNode",value:function(t){for(var e=this.body.nodeIndices,i=this.body.nodes,o=0,n=e[0],r=0,a=0,h=0;h<e.length;h++){var d=e[h];if(!1===i[d].predefinedPosition||!0===i[d].isCluster&&!0===t||!0===i[d].options.fixed.x||!0===i[d].options.fixed.y){var l=this._getEnergy(d),u=(0,s.default)(l,3),c=u[0],p=u[1],f=u[2];o<c&&(o=c,n=d,r=p,a=f)}}return[n,o,r,a]}},{key:"_getEnergy",value:function(t){var e=(0,s.default)(this.E_sums[t],2),i=e[0],o=e[1];return[Math.sqrt(Math.pow(i,2)+Math.pow(o,2)),i,o]}},{key:"_moveNode",value:function(t,e,i){for(var o=this.body.nodeIndices,n=this.body.nodes,s=0,r=0,a=0,h=n[t].x,d=n[t].y,l=this.K_matrix[t],u=this.L_matrix[t],c=0;c<o.length;c++){var p=o[c];if(p!==t){var f=n[p].x,m=n[p].y,v=l[p],g=u[p],y=1/Math.pow(Math.pow(h-f,2)+Math.pow(d-m,2),1.5);s+=v*(1-g*Math.pow(d-m,2)*y),r+=v*(g*(h-f)*(d-m)*y),a+=v*(1-g*Math.pow(h-f,2)*y)}}var b=s,_=r,w=e,x=a,k=i,S=(w/b+k/_)/(_/b-x/_),D=-(_*S+w)/b;n[t].x+=D,n[t].y+=S,this._updateE_matrix(t)}},{key:"_createL_matrix",value:function(t){var e=this.body.nodeIndices,i=this.springLength;this.L_matrix=[];for(var o=0;o<e.length;o++){this.L_matrix[e[o]]={};for(var n=0;n<e.length;n++)this.L_matrix[e[o]][e[n]]=i*t[e[o]][e[n]]}}},{key:"_createK_matrix",value:function(t){var e=this.body.nodeIndices,i=this.springConstant;this.K_matrix=[];for(var o=0;o<e.length;o++){this.K_matrix[e[o]]={};for(var n=0;n<e.length;n++)this.K_matrix[e[o]][e[n]]=i*Math.pow(t[e[o]][e[n]],-2)}}},{key:"_createE_matrix",value:function(){var t=this.body.nodeIndices,e=this.body.nodes;this.E_matrix={},this.E_sums={};for(var i=0;i<t.length;i++)this.E_matrix[t[i]]=[];for(var o=0;o<t.length;o++){for(var n=t[o],s=e[n].x,r=e[n].y,a=0,h=0,d=o;d<t.length;d++){var l=t[d];if(l!==n){var u=e[l].x,c=e[l].y,p=1/Math.sqrt(Math.pow(s-u,2)+Math.pow(r-c,2));this.E_matrix[n][d]=[this.K_matrix[n][l]*(s-u-this.L_matrix[n][l]*(s-u)*p),this.K_matrix[n][l]*(r-c-this.L_matrix[n][l]*(r-c)*p)],this.E_matrix[l][o]=this.E_matrix[n][d],a+=this.E_matrix[n][d][0],h+=this.E_matrix[n][d][1]}}this.E_sums[n]=[a,h]}}},{key:"_updateE_matrix",value:function(t){for(var e=this.body.nodeIndices,i=this.body.nodes,o=this.E_matrix[t],n=this.K_matrix[t],s=this.L_matrix[t],r=i[t].x,a=i[t].y,h=0,d=0,l=0;l<e.length;l++){var u=e[l];if(u!==t){var c=o[l],p=c[0],f=c[1],m=i[u].x,v=i[u].y,g=1/Math.sqrt(Math.pow(r-m,2)+Math.pow(a-v,2)),y=n[u]*(r-m-s[u]*(r-m)*g),b=n[u]*(a-v-s[u]*(a-v)*g);o[l]=[y,b],h+=y,d+=b;var _=this.E_sums[u];_[0]+=y-p,_[1]+=b-f}}this.E_sums[t]=[h,d]}}]),t}();e.default=c},function(t,e,i){function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var n=i(0),s=o(n),r=i(1),a=o(r),h=function(){function t(){(0,s.default)(this,t)}return(0,a.default)(t,[{key:"getDistances",value:function(t,e,i){for(var o={},n=t.edges,s=0;s<e.length;s++){var r=e[s],a={};o[r]=a;for(var h=0;h<e.length;h++)a[e[h]]=s==h?0:1e9}for(var d=0;d<i.length;d++){var l=n[i[d]];!0===l.connected&&void 0!==o[l.fromId]&&void 0!==o[l.toId]&&(o[l.fromId][l.toId]=1,o[l.toId][l.fromId]=1)}for(var u=e.length,c=0;c<u;c++)for(var p=e[c],f=o[p],m=0;m<u-1;m++)for(var v=e[m],g=o[v],y=m+1;y<u;y++){var b=e[y],_=o[b],w=Math.min(g[b],g[p]+f[b]);g[b]=w,_[v]=w}return o}}]),t}();e.default=h}])});
+//# sourceMappingURL=vis.map

Debdiff

[The following lists of changes regard files as different if they have different names, permissions or owners.]

Files in second set of .debs but not in first

-rw-r--r--  root/root   /usr/lib/debug/.build-id/2b/6a7068a5f1c58b6ffd12a0df33a0aeff00cb3a.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/2e/ea5aa1d5163b7a263d5521eec76d0dd64c7e72.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/32/58102ba26e84543d779d3ae83d0aceb2056e7c.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/41/cf3eb3313b6889ab9416df2b1d393882d66f9d.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/4b/d82e2cc0bfa6c01c375b0dc699f51b9e112fce.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/50/41823ffc15952baf0d378dcb350d80f19b323d.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/85/4014cbebd14f47b419b329e4758d8cebf0bb3f.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/88/583133124f48706a08e49dc7faad9ffc536f9d.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/b9/737adcbf02c0d3dbbbda9b19a27dc957de9ac4.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/d0/267ac1e86b31b974b3372aba5759791343105c.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/f1/78e67fb93257570b094027c66b70c12b156367.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/ff/91efcaa0a9a70c7a47cdb109547991f2633ae9.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/ff/9c339fac11312cfd6697c97a655fe099bf2466.debug
-rw-r--r--  root/root   /usr/lib/x86_64-linux-gnu/libhwloc.so.15.6.2
lrwxrwxrwx  root/root   /usr/lib/x86_64-linux-gnu/libhwloc.so -> libhwloc.so.15.6.2
lrwxrwxrwx  root/root   /usr/lib/x86_64-linux-gnu/libhwloc.so.15 -> libhwloc.so.15.6.2

Files in first set of .debs but not in second

-rw-r--r--  root/root   /usr/lib/debug/.build-id/1c/8b51f0cca1fe61764df1e72d9fbcbfa1597a5f.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/2f/d7f18fe79068f229e6fcca380aa375ecbae8e6.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/4e/285826b978e713f7cb136ab587d01cd2c671e3.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/5f/5bba2f8bd5f9bc94e0864c23f9c938b4e0a4df.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/6f/46377c02c3e9560cb02126102a040389caa6e8.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/77/3506b0dd8515141bcf0057080429e5de65f75b.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/78/f704339d1e5c41f978ccdd61ffbfafb1d22a1c.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/8a/c5405a1b2b72ae4e1f0d7214bd256923397388.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/ae/5869cc8fea61e509999c69a98379008e6e9e3c.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/b0/864bbdf38a4bb277d016da37cfab6f77e71ad9.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/c1/65d8afb44462a4643f1ef512a692c35b9f384c.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/e1/e9bfc9f3ce1b5ea2c556717597fae55e9d62fb.debug
-rw-r--r--  root/root   /usr/lib/debug/.build-id/ed/23ac949bb4e531e04b86fb92aa18e383fe7759.debug
-rw-r--r--  root/root   /usr/lib/x86_64-linux-gnu/libhwloc.so.15.6.1
lrwxrwxrwx  root/root   /usr/lib/x86_64-linux-gnu/libhwloc.so -> libhwloc.so.15.6.1
lrwxrwxrwx  root/root   /usr/lib/x86_64-linux-gnu/libhwloc.so.15 -> libhwloc.so.15.6.1

Control files of package hwloc: lines which differ (wdiff format)

  • Depends: libc6 (>= 2.34), libcairo2 (>= 1.2.4), libhwloc15 (>= 2.9.0), 2.9.1), libtinfo6 (>= 6), libx11-6

Control files of package hwloc-dbgsym: lines which differ (wdiff format)

  • Build-Ids: 1c8b51f0cca1fe61764df1e72d9fbcbfa1597a5f 2fd7f18fe79068f229e6fcca380aa375ecbae8e6 4e285826b978e713f7cb136ab587d01cd2c671e3 5f5bba2f8bd5f9bc94e0864c23f9c938b4e0a4df 6f46377c02c3e9560cb02126102a040389caa6e8 773506b0dd8515141bcf0057080429e5de65f75b 78f704339d1e5c41f978ccdd61ffbfafb1d22a1c 8ac5405a1b2b72ae4e1f0d7214bd256923397388 ae5869cc8fea61e509999c69a98379008e6e9e3c b0864bbdf38a4bb277d016da37cfab6f77e71ad9 c165d8afb44462a4643f1ef512a692c35b9f384c ed23ac949bb4e531e04b86fb92aa18e383fe7759 2b6a7068a5f1c58b6ffd12a0df33a0aeff00cb3a 2eea5aa1d5163b7a263d5521eec76d0dd64c7e72 3258102ba26e84543d779d3ae83d0aceb2056e7c 41cf3eb3313b6889ab9416df2b1d393882d66f9d 4bd82e2cc0bfa6c01c375b0dc699f51b9e112fce 5041823ffc15952baf0d378dcb350d80f19b323d 854014cbebd14f47b419b329e4758d8cebf0bb3f 88583133124f48706a08e49dc7faad9ffc536f9d d0267ac1e86b31b974b3372aba5759791343105c f178e67fb93257570b094027c66b70c12b156367 ff91efcaa0a9a70c7a47cdb109547991f2633ae9 ff9c339fac11312cfd6697c97a655fe099bf2466

Control files of package hwloc-nox: lines which differ (wdiff format)

  • Depends: libc6 (>= 2.34), libhwloc15 (>= 2.9.0), 2.9.1), libtinfo6 (>= 6)

Control files of package hwloc-nox-dbgsym: lines which differ (wdiff format)

  • Build-Ids: 1c8b51f0cca1fe61764df1e72d9fbcbfa1597a5f 2fd7f18fe79068f229e6fcca380aa375ecbae8e6 4e285826b978e713f7cb136ab587d01cd2c671e3 5f5bba2f8bd5f9bc94e0864c23f9c938b4e0a4df 6f46377c02c3e9560cb02126102a040389caa6e8 773506b0dd8515141bcf0057080429e5de65f75b 8ac5405a1b2b72ae4e1f0d7214bd256923397388 ae5869cc8fea61e509999c69a98379008e6e9e3c b0864bbdf38a4bb277d016da37cfab6f77e71ad9 c165d8afb44462a4643f1ef512a692c35b9f384c ed23ac949bb4e531e04b86fb92aa18e383fe7759 2b6a7068a5f1c58b6ffd12a0df33a0aeff00cb3a 2eea5aa1d5163b7a263d5521eec76d0dd64c7e72 3258102ba26e84543d779d3ae83d0aceb2056e7c 41cf3eb3313b6889ab9416df2b1d393882d66f9d 4bd82e2cc0bfa6c01c375b0dc699f51b9e112fce 5041823ffc15952baf0d378dcb350d80f19b323d 854014cbebd14f47b419b329e4758d8cebf0bb3f 88583133124f48706a08e49dc7faad9ffc536f9d d0267ac1e86b31b974b3372aba5759791343105c ff91efcaa0a9a70c7a47cdb109547991f2633ae9 ff9c339fac11312cfd6697c97a655fe099bf2466

No differences were encountered between the control files of package libhwloc-common

No differences were encountered between the control files of package libhwloc-dev

No differences were encountered between the control files of package libhwloc-doc

Control files of package libhwloc-plugins: lines which differ (wdiff format)

  • Depends: libc6 (>= 2.34), libpciaccess0, libx11-6, libxml2 (>= 2.7.4), libxnvctrl0, ocl-icd-libopencl1 | libopencl1, libhwloc15 (>= 2.9.0~), 2.9.1~), libhwloc15 (<< 2.9.0A) 2.9.1A)

No differences were encountered between the control files of package libhwloc-plugins-dbgsym

No differences were encountered between the control files of package libhwloc15

Control files of package libhwloc15-dbgsym: lines which differ (wdiff format)

  • Build-Ids: e1e9bfc9f3ce1b5ea2c556717597fae55e9d62fb b9737adcbf02c0d3dbbbda9b19a27dc957de9ac4

More details

Full run details