guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

branch master updated: website: Add draft post about the further-reduced


From: Jan Nieuwenhuizen
Subject: branch master updated: website: Add draft post about the further-reduced binary bootstrap.
Date: Fri, 12 Jun 2020 07:03:16 -0400

This is an automated email from the git hooks/post-receive script.

janneke pushed a commit to branch master
in repository guix-artwork.

The following commit(s) were added to refs/heads/master by this push:
     new ce65d93  website: Add draft post about the further-reduced binary 
bootstrap.
ce65d93 is described below

commit ce65d93a0949e1944e2d0a080c79c5f5a589eacf
Author: Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
AuthorDate: Wed Jun 10 13:35:12 2020 +0200

    website: Add draft post about the further-reduced binary bootstrap.
    
    * website/drafts/further-reduced-binary-bootstrap.md: New file.
---
 website/drafts/further-reduced-binary-bootstrap.md | 202 ++++++
 .../static/blog/img/gcc-core-mesboot0-graph.svg    | 679 +++++++++++++++++++++
 2 files changed, 881 insertions(+)

diff --git a/website/drafts/further-reduced-binary-bootstrap.md 
b/website/drafts/further-reduced-binary-bootstrap.md
new file mode 100644
index 0000000..c45db5e
--- /dev/null
+++ b/website/drafts/further-reduced-binary-bootstrap.md
@@ -0,0 +1,202 @@
+title: Guix Further Reduces Bootstrap Seed to 25%
+date: 2020-06-15 00:00
+author: Jan Nieuwenhuizen
+tags: Bootstrapping, Reproducible builds
+---
+We are delighted to announce that the second reduction by 50% of the
+Guix _bootstrap binaries_ has now been officially released!
+
+The initial set of binaries from which packages are built now weighs
+in at approximately 60 MB, a quarter of what it used to be.
+
+In [a previous blog
+post](https://guix.gnu.org/blog/2019/guix-reduces-bootstrap-seed-by-50/)
+we elaborate on why this reduction and bootstrappability in general is
+so important.  Last summer at the [Breaking Bitcoin
+conference](https://breaking-bitcoin.com), Carl Dong gave a [fun and
+remarkably gentle
+introduction](http://diyhpl.us/wiki/transcripts/breaking-bitcoin/2019/bitcoin-build-system)
+and at [FOSDEM2020](https://fosdem.org/2020) I also gave [a short talk
+](https://fosdem.org/2020/schedule/event/gnumes/) about this.
+
+#### Further Reduced Binary Seed bootstrap
+
+Last year, the first reduction removed the gcc, glibc and binutils
+binary seeds; the new _Further Reduced Binary Seed_ bootstrap removes
+the static-binaries tarball (a.k.a. `%bootstrap-coreutils&co`)
+containing GNU Awk, Bash, Bzip2, the GNU Core Utilities, Grep, Gzip,
+GNU Make, Patch, sed, Tar, and XZ; and replaces them by [Gash and Gash
+Utils](https://savannah.nongnu.org/projects/gash).
+
+After three new [GNU Mes](https://gnu.org/s/mes) releases with
+numerous Mes C Library updates and fixes, a major update of Gash and
+the first official Gash Utils release, and the [delicate balancing of
+17 new bootstrap source packages and
+versions](https://bugs.gnu.org/38390), the bottom of the package graph
+now looks like this (woohoo!):
+
+```
+                        gcc-mesboot (4.9.4)
+                                ^
+                                |
+                              (...)
+                                ^
+                                |
+         binutils-mesboot (2.14), glibc-mesboot (2.2.5),
+                    gcc-core-mesboot (2.95.3)
+                                ^
+                                |
+      bash-mesboot (2.05), bzip2-mesboot, gawk-mesboot (3.0.0)
+        diffutils-mesboot, patch-mesboot, sed-mesboot (1.18)
+                                ^
+                                |
+                       gnu-make-mesboot (3.82)
+                                ^
+                                |
+                          gzip-mesboot
+                                ^
+                                |
+                            tcc-boot
+                                ^
+                                |
+                            mes-boot
+                                ^
+                                |
+                    gash-boot, gash-utils-boot
+                                ^
+                                |
+                                *
+           bootstrap-mescc-tools, bootstrap-mes (~12MB)
+                      bootstrap-guile (~48MB)
+```
+[full graph](../../../static/blog/img/gcc-core-mesboot0-graph.svg)
+
+We are excited that the [Nlnet Foundation](https://nlnet.nl) has
+[sponsored this work](https://nlnet.nl/project/GNUMes)!
+
+However, we aren't done yet; far from it.
+
+### Lost Paths
+
+Readers who are familiar with the GNU toolchain may have noticed
+the version numbers of the ``*-mesboot`` source packages in this
+great new bootstrap: they are ancient!  That's a problem.
+
+Typically, newer versions of the tool chain fix all kinds of bugs,
+make the software easier to build and add support for new CPU
+architectures, which is great.  However---more often than not---
+simultaneously new features are introduced or dependencies are added
+that are not necessary for bootstrapping, but may increase the
+bootstrap hurdle.  Sometimes, newer tools are more strict or old
+configure scripts do not recognise newer tool versions.
+
+A trivial example is GNU sed.  In the current bootstrap we are using
+version 1.18, which was released in 1993.  Until recently the latest
+version of sed we could hope to bootstrap was sed-4.2.2 (2012).  Newer
+releases ship as `xz`-compressed tarballs only, and `xz` is
+notoriously difficult to bootstrap (it needs a fairly recent GCC and
+try building that without sed).
+
+Luckily, the sed maintainers (Jim Meyering) were happy to correct this
+mistake and starting from release
+[sed-4.8](http://ftp.gnu.org/pub/gnu/sed/sed-4.8.tar.gz) (2020) also
+`gzip`-compressed tarballs will be shipped.  Similar for the GNU Core
+Utils: releases made between 2011 and 2019 will probably be useless
+for bootstrapping.  Confronted with this information, also the
+coreutils maintainers (Pádraig Brady) were happy to release
+[coreutils-8.32](http://ftp.gnu.org/pub/gnu/coreutils/coreutils-8.32.tar.gz)
+also in `gzip' compression from now on.
+
+Even these simple cases show that solving bootstrap problems can only
+be done together: For GNU it really is a project-wide responsibility
+that needs to be addressed.
+
+Most bootstrap problems or loops are not so easy to solve and
+sometimes there are no obvious answers, for example:
+
+* In 2013, the year that [Reproducible
+  Builds](https://reproducible-builds.org) started to gain some
+  traction, the GNU Compiler Collection [released
+  gcc-4.8.0](http://gcc.gnu.org/gcc-4.8/changes.html),
+  making C++ a build requirement, and
+
+* Even more recently (2018), the GNU C Library [glibc-2.28 adds Python
+  as a build
+  
requirement](https://sourceware.org/git/?p=glibc.git;a=commit;h=c6982f7efc1c70fe2d6160a87ee44d871ac85ab0),
+
+and while these examples make for a delightful puzzle from a
+bootstrappability perspective, we would love to see the maintainers of
+GNU softwares to start taking more responsibility for the bootstrap
+story of their packages.
+
+#### Towards a Full Source Bootstrap
+
+Our next target will be a third reduction by ~50%; the Full-Source
+bootstrap will replace the MesCC-Tools and GNU Mes binaries by
+[Stage0](https://savannah.nongnu.org/projects/stage0) and
+[M2-Planet](https://github.com/oriansj/m2-planet).
+
+The Stage0 project by Jeremiah Orians starts everything from ~512
+bytes; virtually nothing.  Have a look at this incredible project if
+you haven’t already done so.
+
+We are grateful and excited that the [Nlnet
+Foundation](https://nlnet.nl) has [again decided to sponsor this
+work](https://nlnet.nl/project/https://nlnet.nl/project/GNUMes-fullsource/).
+
+@Danny: Could you say some words on bringing the reduced binary seed
+bootstrap to ARM/AARCH64?
+
+[Trusted ARM bootstrap](https://nlnet.nl/project/GNUMes-arm/)
+
+@Timothy: could you add some words on Gash / Gash Utils0.3: enabling
+the removal of ancient tools like sed-1.18 or so?
+
+#### About Bootstrappable Builds and GNU Mes
+
+Software is bootstrappable when it does not depend on a binary seed
+that cannot be built from source.  Software that is not
+bootstrappable---even if it is free software---is a serious security
+risk
+[for](https://www.ece.cmu.edu/~ganger/712.fall02/papers/p761-thompson.pdf)
+[a](https://manishearth.github.io/blog/2016/12/02/reflections-on-rusting-trust/)
+[variety](https://www.quora.com/What-is-a-coders-worst-nightmare/answer/Mick-Stute)
+[of](http://blog.regehr.org/archives/1241)
+[reasons](https://www.alchemistowl.org/pocorgtfo/pocorgtfo08.pdf).
+The [Bootstrappable Builds](https://bootstrappable.org/) project aims
+to reduce the number and size of binary seeds to a bare minimum.
+
+[GNU Mes](https://www.gnu.org/software/mes/) is closely related to the
+Bootstrappable Builds project.  Mes aims to create an entirely
+source-based bootstrapping path for the Guix System and other
+interested GNU/Linux distributions.  The goal is to start from a
+minimal, easily inspectable binary (which should be readable as
+source) and bootstrap into something close to R6RS Scheme.
+
+Currently, Mes consists of a mutual self-hosting scheme interpreter
+and C compiler.  It also implements a C library.  Mes, the scheme
+interpreter, is written in about 5,000 lines of code of simple C.
+MesCC, the C compiler, is written in scheme.  Together, Mes and MesCC
+can compile [a lightly patched
+TinyCC](http://gitlab.com/janneke/tinycc) that is self-hosting.  Using
+this TinyCC and the Mes C library, it is possible to bootstrap the
+entire Guix System for i686-linux and x86_64-linux.
+
+#### About GNU Guix
+
+[GNU Guix](https://www.gnu.org/software/guix) is a transactional package
+manager and an advanced distribution of the GNU system that [respects
+user
+freedom](https://www.gnu.org/distros/free-system-distribution-guidelines.html).
+Guix can be used on top of any system running the kernel Linux, or it
+can be used as a standalone operating system distribution for i686,
+x86_64, ARMv7, and AArch64 machines.
+
+In addition to standard package management features, Guix supports
+transactional upgrades and roll-backs, unprivileged package management,
+per-user profiles, and garbage collection.  When used as a standalone
+GNU/Linux distribution, Guix offers a declarative, stateless approach to
+operating system configuration management.  Guix is highly customizable
+and hackable through [Guile](https://www.gnu.org/software/guile)
+programming interfaces and extensions to the
+[Scheme](http://schemers.org) language.
diff --git a/website/static/blog/img/gcc-core-mesboot0-graph.svg 
b/website/static/blog/img/gcc-core-mesboot0-graph.svg
new file mode 100644
index 0000000..5d97db7
--- /dev/null
+++ b/website/static/blog/img/gcc-core-mesboot0-graph.svg
@@ -0,0 +1,679 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";>
+<!-- Generated by graphviz version 2.42.3 (20191010.1750)
+ -->
+<!-- Title: Guix package Pages: 1 -->
+<svg width="2176pt" height="764pt"
+ viewBox="0.00 0.00 2176.00 764.00" xmlns="http://www.w3.org/2000/svg"; 
xmlns:xlink="http://www.w3.org/1999/xlink";>
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 760)">
+<title>Guix package</title>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-760 2172,-760 
2172,4 -4,4"/>
+<!-- 139781154519456 -->
+<g id="node1" class="node">
+<title>139781154519456</title>
+<polygon fill="none" stroke="black" points="1335.5,-756 1126.5,-756 
1126.5,-720 1335.5,-720 1335.5,-756"/>
+<text text-anchor="middle" x="1231" y="-734.3" 
font-family="Helvetica,sans-Serif" 
font-size="14.00">gcc&#45;core&#45;mesboot0@2.95.3</text>
+</g>
+<!-- 139781154519632 -->
+<g id="node2" class="node">
+<title>139781154519632</title>
+<polygon fill="none" stroke="black" points="1325,-684 1137,-684 1137,-648 
1325,-648 1325,-684"/>
+<text text-anchor="middle" x="1231" y="-662.3" 
font-family="Helvetica,sans-Serif" 
font-size="14.00">binutils&#45;mesboot0@2.14</text>
+</g>
+<!-- 139781154519456&#45;&gt;139781154519632 -->
+<g id="edge1" class="edge">
+<title>139781154519456&#45;&gt;139781154519632</title>
+<path fill="none" stroke="darkgoldenrod" d="M1231,-719.7C1231,-711.98 
1231,-702.71 1231,-694.11"/>
+<polygon fill="darkgoldenrod" stroke="darkgoldenrod" points="1234.5,-694.1 
1231,-684.1 1227.5,-694.1 1234.5,-694.1"/>
+</g>
+<!-- 139781154520688 -->
+<g id="node3" class="node">
+<title>139781154520688</title>
+<polygon fill="none" stroke="black" points="809.5,-540 630.5,-540 630.5,-504 
809.5,-504 809.5,-540"/>
+<text text-anchor="middle" x="720" y="-518.3" 
font-family="Helvetica,sans-Serif" 
font-size="14.00">bash&#45;mesboot0@2.05b</text>
+</g>
+<!-- 139781154519456&#45;&gt;139781154520688 -->
+<g id="edge2" class="edge">
+<title>139781154519456&#45;&gt;139781154520688</title>
+<path fill="none" stroke="darkgoldenrod" d="M1164.63,-719.98C1130.79,-710.61 
1089.23,-698.05 1053,-684 943.94,-641.72 821.49,-578.1 759.92,-544.91"/>
+<polygon fill="darkgoldenrod" stroke="darkgoldenrod" points="761.39,-541.72 
750.93,-540.05 758.06,-547.88 761.39,-541.72"/>
+</g>
+<!-- 139781034971312 -->
+<g id="node4" class="node">
+<title>139781034971312</title>
+<polygon fill="none" stroke="black" points="1656,-540 1486,-540 1486,-504 
1656,-504 1656,-540"/>
+<text text-anchor="middle" x="1571" y="-518.3" 
font-family="Helvetica,sans-Serif" 
font-size="14.00">bzip2&#45;mesboot@1.0.8</text>
+</g>
+<!-- 139781154519456&#45;&gt;139781034971312 -->
+<g id="edge3" class="edge">
+<title>139781154519456&#45;&gt;139781034971312</title>
+<path fill="none" stroke="darkgoldenrod" d="M1305.27,-720C1331.08,-711.82 
1359.24,-700.18 1382,-684 1432.01,-648.45 1420.55,-614.9 1468,-576 
1483.16,-563.57 1501.7,-552.93 1518.85,-544.51"/>
+<polygon fill="darkgoldenrod" stroke="darkgoldenrod" points="1520.68,-547.51 
1528.21,-540.06 1517.68,-541.19 1520.68,-547.51"/>
+</g>
+<!-- 139781154520160 -->
+<g id="node5" class="node">
+<title>139781154520160</title>
+<polygon fill="none" stroke="black" points="998,-540 828,-540 828,-504 
998,-504 998,-540"/>
+<text text-anchor="middle" x="913" y="-518.3" 
font-family="Helvetica,sans-Serif" 
font-size="14.00">diffutils&#45;mesboot@2.7</text>
+</g>
+<!-- 139781154519456&#45;&gt;139781154520160 -->
+<g id="edge4" class="edge">
+<title>139781154519456&#45;&gt;139781154520160</title>
+<path fill="none" stroke="darkgoldenrod" d="M1181.58,-719.92C1157.91,-710.78 
1129.64,-698.43 1106,-684 1039.7,-643.52 972.27,-581.47 937.35,-547.44"/>
+<polygon fill="darkgoldenrod" stroke="darkgoldenrod" points="939.59,-544.73 
930,-540.22 934.68,-549.72 939.59,-544.73"/>
+</g>
+<!-- 139781034971664 -->
+<g id="node6" class="node">
+<title>139781034971664</title>
+<polygon fill="none" stroke="black" points="427.5,-468 266.5,-468 266.5,-432 
427.5,-432 427.5,-468"/>
+<text text-anchor="middle" x="347" y="-446.3" 
font-family="Helvetica,sans-Serif" 
font-size="14.00">gzip&#45;mesboot@1.2.4</text>
+</g>
+<!-- 139781154519456&#45;&gt;139781034971664 -->
+<g id="edge5" class="edge">
+<title>139781154519456&#45;&gt;139781034971664</title>
+<path fill="none" stroke="darkgoldenrod" d="M1129.93,-719.95C985.46,-693.35 
713.56,-634.96 498,-540 455.42,-521.24 409.83,-493.14 380.03,-473.55"/>
+<polygon fill="darkgoldenrod" stroke="darkgoldenrod" points="381.95,-470.62 
371.68,-468.01 378.08,-476.46 381.95,-470.62"/>
+</g>
+<!-- 139781154519984 -->
+<g id="node7" class="node">
+<title>139781154519984</title>
+<polygon fill="none" stroke="black" points="1187.5,-540 1016.5,-540 
1016.5,-504 1187.5,-504 1187.5,-540"/>
+<text text-anchor="middle" x="1102" y="-518.3" 
font-family="Helvetica,sans-Serif" 
font-size="14.00">patch&#45;mesboot@2.5.9</text>
+</g>
+<!-- 139781154519456&#45;&gt;139781154519984 -->
+<g id="edge6" class="edge">
+<title>139781154519456&#45;&gt;139781154519984</title>
+<path fill="none" stroke="darkgoldenrod" d="M1175.76,-719.95C1157.93,-711.81 
1139.75,-700.19 1128,-684 1099.26,-644.4 1097.47,-584.91 1099.35,-550.42"/>
+<polygon fill="darkgoldenrod" stroke="darkgoldenrod" points="1102.86,-550.37 
1100.05,-540.15 1095.87,-549.89 1102.86,-550.37"/>
+</g>
+<!-- 139781154519808 -->
+<g id="node8" class="node">
+<title>139781154519808</title>
+<polygon fill="none" stroke="black" points="1835.5,-540 1674.5,-540 
1674.5,-504 1835.5,-504 1835.5,-540"/>
+<text text-anchor="middle" x="1755" y="-518.3" 
font-family="Helvetica,sans-Serif" 
font-size="14.00">sed&#45;mesboot0@1.18</text>
+</g>
+<!-- 139781154519456&#45;&gt;139781154519808 -->
+<g id="edge7" class="edge">
+<title>139781154519456&#45;&gt;139781154519808</title>
+<path fill="none" stroke="darkgoldenrod" d="M1328.18,-719.91C1356.74,-711.97 
1386.99,-700.5 1412,-684 1437.96,-666.87 1474.38,-592.09 1501,-576 
1508.23,-571.63 1594.32,-554.16 1664.3,-540.46"/>
+<polygon fill="darkgoldenrod" stroke="darkgoldenrod" points="1665.35,-543.82 
1674.5,-538.46 1664.01,-536.95 1665.35,-543.82"/>
+</g>
+<!-- 139781154520512 -->
+<g id="node9" class="node">
+<title>139781154520512</title>
+<polygon fill="none" stroke="black" points="1642,-612 1510,-612 1510,-576 
1642,-576 1642,-612"/>
+<text text-anchor="middle" x="1576" y="-590.3" 
font-family="Helvetica,sans-Serif" font-size="14.00">tcc&#45;boot@0.9.27</text>
+</g>
+<!-- 139781154519456&#45;&gt;139781154520512 -->
+<g id="edge8" class="edge">
+<title>139781154519456&#45;&gt;139781154520512</title>
+<path fill="none" stroke="darkgoldenrod" d="M1335.77,-731.46C1386.82,-725.04 
1447.49,-711.65 1496,-684 1522.89,-668.68 1545.57,-641.05 1559.84,-620.63"/>
+<polygon fill="darkgoldenrod" stroke="darkgoldenrod" points="1562.9,-622.35 
1565.61,-612.1 1557.11,-618.43 1562.9,-622.35"/>
+</g>
+<!-- 139781034971488 -->
+<g id="node10" class="node">
+<title>139781034971488</title>
+<polygon fill="none" stroke="black" points="1494,-468 1320,-468 1320,-432 
1494,-432 1494,-468"/>
+<text text-anchor="middle" x="1407" y="-446.3" 
font-family="Helvetica,sans-Serif" 
font-size="14.00">make&#45;mesboot0@3.80</text>
+</g>
+<!-- 139781154519456&#45;&gt;139781034971488 -->
+<g id="edge9" class="edge">
+<title>139781154519456&#45;&gt;139781034971488</title>
+<path fill="none" stroke="darkgoldenrod" d="M1282.84,-719.94C1301.2,-711.64 
1320.6,-699.93 1334,-684 1385.53,-622.77 1400.76,-525.13 1405.2,-478.08"/>
+<polygon fill="darkgoldenrod" stroke="darkgoldenrod" points="1408.7,-478.31 
1406.06,-468.05 1401.72,-477.72 1408.7,-478.31"/>
+</g>
+<!-- 139781034972896 -->
+<g id="node11" class="node">
+<title>139781034972896</title>
+<polygon fill="none" stroke="black" points="1506.5,-180 1369.5,-180 
1369.5,-144 1506.5,-144 1506.5,-180"/>
+<text text-anchor="middle" x="1438" y="-158.3" 
font-family="Helvetica,sans-Serif" font-size="14.00">gash&#45;boot@0.2.0</text>
+</g>
+<!-- 139781154519456&#45;&gt;139781034972896 -->
+<g id="edge10" class="edge">
+<title>139781154519456&#45;&gt;139781034972896</title>
+<path fill="none" stroke="darkgoldenrod" d="M1335.54,-732.56C1498.64,-725.01 
1806.05,-708.1 1913,-684 2000.28,-664.33 2047.77,-683.92 2101,-612 
2169.32,-519.7 2130.09,-435.99 2044,-360 1890.58,-224.56 1642.45,-181.99 
1516.6,-168.8"/>
+<polygon fill="darkgoldenrod" stroke="darkgoldenrod" points="1516.95,-165.32 
1506.65,-167.79 1516.24,-172.28 1516.95,-165.32"/>
+</g>
+<!-- 139781034972368 -->
+<g id="node12" class="node">
+<title>139781034972368</title>
+<polygon fill="none" stroke="black" points="1531.5,-252 1360.5,-252 
1360.5,-216 1531.5,-216 1531.5,-252"/>
+<text text-anchor="middle" x="1446" y="-230.3" 
font-family="Helvetica,sans-Serif" 
font-size="14.00">gash&#45;utils&#45;boot@0.1.0</text>
+</g>
+<!-- 139781154519456&#45;&gt;139781034972368 -->
+<g id="edge11" class="edge">
+<title>139781154519456&#45;&gt;139781034972368</title>
+<path fill="none" stroke="darkgoldenrod" d="M1335.71,-730.52C1565.17,-714.92 
2092,-670.84 2092,-595 2092,-595 2092,-595 2092,-521 2092,-283.37 
1722.01,-241.61 1542.05,-235.36"/>
+<polygon fill="darkgoldenrod" stroke="darkgoldenrod" points="1541.89,-231.85 
1531.78,-235.03 1541.67,-238.85 1541.89,-231.85"/>
+</g>
+<!-- 139781034973072 -->
+<g id="node13" class="node">
+<title>139781034973072</title>
+<polygon fill="none" stroke="black" points="923.5,-108 838.5,-108 838.5,-72 
923.5,-72 923.5,-108"/>
+<text text-anchor="middle" x="881" y="-86.3" 
font-family="Helvetica,sans-Serif" font-size="14.00">bootar@1</text>
+</g>
+<!-- 139781154519456&#45;&gt;139781034973072 -->
+<g id="edge12" class="edge">
+<title>139781154519456&#45;&gt;139781034973072</title>
+<path fill="none" stroke="darkgoldenrod" d="M1126.42,-734.57C848.74,-726.75 
114,-696.47 114,-595 114,-595 114,-595 114,-305 114,-220.29 143.47,-187.75 
216,-144 267.93,-112.67 680.12,-97.13 828.23,-92.51"/>
+<polygon fill="darkgoldenrod" stroke="darkgoldenrod" points="828.54,-96 
838.43,-92.2 828.33,-89.01 828.54,-96"/>
+</g>
+<!-- 139781131267872 -->
+<g id="node14" class="node">
+<title>139781131267872</title>
+<ellipse fill="none" stroke="black" cx="952" cy="-18" rx="103.18" ry="18"/>
+<text text-anchor="middle" x="952" y="-14.3" 
font-family="Helvetica,sans-Serif" 
font-size="14.00">guile&#45;bootstrap@2.0</text>
+</g>
+<!-- 139781154519456&#45;&gt;139781131267872 -->
+<g id="edge13" class="edge">
+<title>139781154519456&#45;&gt;139781131267872</title>
+<path fill="none" stroke="darkgoldenrod" d="M1126.44,-736.29C901.59,-733.99 
378.53,-724.35 206,-684 108.89,-661.29 0,-694.73 0,-595 0,-595 0,-595 0,-161 
0,-117.26 5.75,-96.48 42,-72 106.49,-28.44 609.12,-20.53 838.52,-19.2"/>
+<polygon fill="darkgoldenrod" stroke="darkgoldenrod" points="838.59,-22.7 
848.57,-19.15 838.55,-15.7 838.59,-22.7"/>
+</g>
+<!-- 139781154519632&#45;&gt;139781154520688 -->
+<g id="edge14" class="edge">
+<title>139781154519632&#45;&gt;139781154520688</title>
+<path fill="none" stroke="#8b7765" d="M1149.28,-647.9C1117.31,-639.48 
1080.96,-627.7 1050,-612 1026.53,-600.1 1027.03,-586.71 1003,-576 
994.39,-572.16 897.73,-554.46 819.73,-540.55"/>
+<polygon fill="#8b7765" stroke="#8b7765" points="820.29,-537.1 809.84,-538.79 
819.07,-543.99 820.29,-537.1"/>
+</g>
+<!-- 139781154519632&#45;&gt;139781034971312 -->
+<g id="edge15" class="edge">
+<title>139781154519632&#45;&gt;139781034971312</title>
+<path fill="none" stroke="#8b7765" d="M1257.73,-647.85C1288.96,-628.38 
1342.65,-596.66 1392,-576 1423.43,-562.84 1459.23,-551.56 1490.51,-542.82"/>
+<polygon fill="#8b7765" stroke="#8b7765" points="1491.78,-546.1 1500.5,-540.07 
1489.93,-539.35 1491.78,-546.1"/>
+</g>
+<!-- 139781154519632&#45;&gt;139781154520160 -->
+<g id="edge16" class="edge">
+<title>139781154519632&#45;&gt;139781154520160</title>
+<path fill="none" stroke="#8b7765" d="M1198.38,-647.88C1162.45,-629.28 
1102.76,-599.12 1050,-576 1023.92,-564.57 994.52,-553.02 969.66,-543.64"/>
+<polygon fill="#8b7765" stroke="#8b7765" points="970.61,-540.26 960.02,-540.02 
968.15,-546.81 970.61,-540.26"/>
+</g>
+<!-- 139781154519632&#45;&gt;139781034971664 -->
+<g id="edge17" class="edge">
+<title>139781154519632&#45;&gt;139781034971664</title>
+<path fill="none" stroke="#8b7765" d="M1136.98,-649.11C1016.52,-627.98 
801.69,-587.7 621,-540 544.81,-519.89 458.63,-490.82 403.61,-471.44"/>
+<polygon fill="#8b7765" stroke="#8b7765" points="404.64,-468.1 394.04,-468.06 
402.3,-474.69 404.64,-468.1"/>
+</g>
+<!-- 139781154519632&#45;&gt;139781154519984 -->
+<g id="edge18" class="edge">
+<title>139781154519632&#45;&gt;139781154519984</title>
+<path fill="none" stroke="#8b7765" d="M1215.44,-647.87C1192.78,-622.92 
1150.56,-576.45 1124.5,-547.77"/>
+<polygon fill="#8b7765" stroke="#8b7765" points="1126.93,-545.24 
1117.62,-540.19 1121.75,-549.94 1126.93,-545.24"/>
+</g>
+<!-- 139781154519632&#45;&gt;139781154519808 -->
+<g id="edge19" class="edge">
+<title>139781154519632&#45;&gt;139781154519808</title>
+<path fill="none" stroke="#8b7765" d="M1275.17,-647.93C1338.29,-623.6 
1448.83,-581.3 1468,-576 1550.77,-553.09 1575.75,-556.01 1664.13,-540.13"/>
+<polygon fill="#8b7765" stroke="#8b7765" points="1664.84,-543.56 
1674.05,-538.31 1663.58,-536.67 1664.84,-543.56"/>
+</g>
+<!-- 139781154519632&#45;&gt;139781154520512 -->
+<g id="edge20" class="edge">
+<title>139781154519632&#45;&gt;139781154520512</title>
+<path fill="none" stroke="#8b7765" d="M1314.96,-647.97C1371.38,-636.52 
1445.14,-621.55 1499.86,-610.45"/>
+<polygon fill="#8b7765" stroke="#8b7765" points="1500.75,-613.84 
1509.85,-608.42 1499.35,-606.98 1500.75,-613.84"/>
+</g>
+<!-- 139781154519632&#45;&gt;139781034971488 -->
+<g id="edge21" class="edge">
+<title>139781154519632&#45;&gt;139781034971488</title>
+<path fill="none" stroke="#8b7765" d="M1238.13,-647.85C1251.96,-616.23 
1285.07,-547.93 1330,-504 1341.41,-492.85 1355.41,-482.44 1368.33,-473.86"/>
+<polygon fill="#8b7765" stroke="#8b7765" points="1370.56,-476.59 
1377.06,-468.22 1366.76,-470.71 1370.56,-476.59"/>
+</g>
+<!-- 139781154519632&#45;&gt;139781034972896 -->
+<g id="edge22" class="edge">
+<title>139781154519632&#45;&gt;139781034972896</title>
+<path fill="none" stroke="#8b7765" d="M1246.18,-647.75C1266.12,-625.3 
1300.32,-587.58 1315,-576 1390.66,-516.32 1439.74,-540.69 1503,-468 
1580.78,-378.62 1658.62,-312.6 1590,-216 1580.65,-202.84 1548.77,-190.76 
1516.61,-181.47"/>
+<polygon fill="#8b7765" stroke="#8b7765" points="1517.22,-178 1506.65,-178.68 
1515.33,-184.74 1517.22,-178"/>
+</g>
+<!-- 139781154519632&#45;&gt;139781034972368 -->
+<g id="edge23" class="edge">
+<title>139781154519632&#45;&gt;139781034972368</title>
+<path fill="none" stroke="#8b7765" d="M1227.96,-647.57C1223.58,-620.86 
1216,-568.12 1216,-523 1216,-523 1216,-523 1216,-377 1216,-310.05 
1287.44,-273.62 1350.69,-254.48"/>
+<polygon fill="#8b7765" stroke="#8b7765" points="1351.73,-257.82 
1360.36,-251.67 1349.78,-251.1 1351.73,-257.82"/>
+</g>
+<!-- 139781154519632&#45;&gt;139781034973072 -->
+<g id="edge24" class="edge">
+<title>139781154519632&#45;&gt;139781034973072</title>
+<path fill="none" stroke="#8b7765" d="M1136.91,-660.94C910.4,-649.01 
344.88,-605.77 228,-468 134.39,-357.66 141.65,-227.26 260,-144 305.97,-111.66 
686.48,-96.9 828.14,-92.49"/>
+<polygon fill="#8b7765" stroke="#8b7765" points="828.42,-95.98 838.31,-92.18 
828.21,-88.99 828.42,-95.98"/>
+</g>
+<!-- 139781154519632&#45;&gt;139781131267872 -->
+<g id="edge25" class="edge">
+<title>139781154519632&#45;&gt;139781131267872</title>
+<path fill="none" stroke="#8b7765" d="M1325.13,-663.34C1562.74,-656.62 
2168,-622.66 2168,-451 2168,-451 2168,-451 2168,-161 2168,-94.24 2109.91,-94.34 
2047,-72 1956.35,-39.8 1325.94,-25.41 1064.85,-20.77"/>
+<polygon fill="#8b7765" stroke="#8b7765" points="1064.64,-17.27 1054.58,-20.59 
1064.52,-24.27 1064.64,-17.27"/>
+</g>
+<!-- 139781154520688&#45;&gt;139781034971488 -->
+<g id="edge26" class="edge">
+<title>139781154520688&#45;&gt;139781034971488</title>
+<path fill="none" stroke="magenta" d="M809.53,-505.3C812.72,-504.84 
815.89,-504.41 819,-504 991.08,-481.51 1192.75,-465.58 1309.59,-457.38"/>
+<polygon fill="magenta" stroke="magenta" points="1309.86,-460.87 
1319.59,-456.68 1309.37,-453.89 1309.86,-460.87"/>
+</g>
+<!-- 139781154520688&#45;&gt;139781034972896 -->
+<g id="edge28" class="edge">
+<title>139781154520688&#45;&gt;139781034972896</title>
+<path fill="none" stroke="magenta" d="M630.25,-510.02C553.72,-495.04 
456,-460.06 456,-379 456,-379 456,-379 456,-305 456,-163.43 819.61,-207.09 
1224,-180 1268.74,-177 1318.69,-173.07 1359.07,-169.74"/>
+<polygon fill="magenta" stroke="magenta" points="1359.45,-173.22 
1369.12,-168.91 1358.87,-166.24 1359.45,-173.22"/>
+</g>
+<!-- 139781154520688&#45;&gt;139781034972368 -->
+<g id="edge29" class="edge">
+<title>139781154520688&#45;&gt;139781034972368</title>
+<path fill="none" stroke="magenta" d="M728.15,-503.87C745.05,-470.38 
787.28,-396.3 846,-360 914.28,-317.79 948.75,-354.53 1023,-324 1050.02,-312.89 
1050.67,-298.33 1078,-288 1090.69,-283.21 1245.35,-261.86 1350.08,-247.76"/>
+<polygon fill="magenta" stroke="magenta" points="1350.61,-251.22 
1360.06,-246.42 1349.68,-244.29 1350.61,-251.22"/>
+</g>
+<!-- 139781154520688&#45;&gt;139781034973072 -->
+<g id="edge30" class="edge">
+<title>139781154520688&#45;&gt;139781034973072</title>
+<path fill="none" stroke="magenta" d="M630.28,-521.91C512,-521.27 
312.38,-513.23 257,-468 224.78,-441.68 228,-420.6 228,-379 228,-379 228,-379 
228,-305 228,-226.06 238.44,-189.42 303,-144 345.42,-114.15 693.46,-98.03 
828.1,-92.87"/>
+<polygon fill="magenta" stroke="magenta" points="828.32,-96.36 838.18,-92.49 
828.05,-89.37 828.32,-96.36"/>
+</g>
+<!-- 139781154520688&#45;&gt;139781131267872 -->
+<g id="edge31" class="edge">
+<title>139781154520688&#45;&gt;139781131267872</title>
+<path fill="none" stroke="magenta" d="M630.49,-520.87C445.46,-518.17 
38,-498.66 38,-379 38,-379 38,-379 38,-161 38,-117.45 43.05,-96.59 79,-72 
140.22,-30.13 616.46,-21.3 838.6,-19.47"/>
+<polygon fill="magenta" stroke="magenta" points="838.69,-22.96 848.66,-19.39 
838.63,-15.96 838.69,-22.96"/>
+</g>
+<!-- 139781034971840 -->
+<g id="node15" class="node">
+<title>139781034971840</title>
+<polygon fill="none" stroke="black" points="1111.5,-396 854.5,-396 854.5,-360 
1111.5,-360 1111.5,-396"/>
+<text text-anchor="middle" x="983" y="-374.3" 
font-family="Helvetica,sans-Serif" 
font-size="14.00">tcc&#45;boot0@0.9.26&#45;1103&#45;g6e62e0e</text>
+</g>
+<!-- 139781154520688&#45;&gt;139781034971840 -->
+<g id="edge27" class="edge">
+<title>139781154520688&#45;&gt;139781034971840</title>
+<path fill="none" stroke="magenta" d="M762.62,-503.9C785.87,-494.15 
814.93,-481.25 840,-468 878.77,-447.5 921.2,-420.47 949.69,-401.6"/>
+<polygon fill="magenta" stroke="magenta" points="951.68,-404.48 958.06,-396.02 
947.8,-398.65 951.68,-404.48"/>
+</g>
+<!-- 139781034971312&#45;&gt;139781034971488 -->
+<g id="edge57" class="edge">
+<title>139781034971312&#45;&gt;139781034971488</title>
+<path fill="none" stroke="#00cdcd" d="M1530.88,-503.88C1508.36,-494.26 
1480.08,-482.19 1456.23,-472.01"/>
+<polygon fill="#00cdcd" stroke="#00cdcd" points="1457.56,-468.77 
1446.99,-468.07 1454.81,-475.21 1457.56,-468.77"/>
+</g>
+<!-- 139781034971312&#45;&gt;139781034972896 -->
+<g id="edge59" class="edge">
+<title>139781034971312&#45;&gt;139781034972896</title>
+<path fill="none" stroke="#00cdcd" d="M1584.58,-503.77C1622.24,-453.78 
1720.69,-306.54 1650,-216 1633.41,-194.75 1569.93,-180.77 1516.71,-172.52"/>
+<polygon fill="#00cdcd" stroke="#00cdcd" points="1516.98,-169.02 1506.57,-171 
1515.94,-175.95 1516.98,-169.02"/>
+</g>
+<!-- 139781034971312&#45;&gt;139781034972368 -->
+<g id="edge60" class="edge">
+<title>139781034971312&#45;&gt;139781034972368</title>
+<path fill="none" stroke="#00cdcd" d="M1564.3,-503.85C1557.22,-485.87 
1545.62,-456.82 1535,-432 1508.64,-370.4 1475.76,-298.9 1458.27,-261.27"/>
+<polygon fill="#00cdcd" stroke="#00cdcd" points="1461.36,-259.62 
1453.97,-252.03 1455.02,-262.57 1461.36,-259.62"/>
+</g>
+<!-- 139781034971312&#45;&gt;139781034973072 -->
+<g id="edge61" class="edge">
+<title>139781034971312&#45;&gt;139781034973072</title>
+<path fill="none" stroke="#00cdcd" d="M1597.68,-503.85C1610.25,-494.58 
1624.53,-482.13 1634,-468 1689.39,-385.32 1684.12,-351.12 1693,-252 
1694.43,-236.06 1700.33,-230.22 1693,-216 1667.75,-166.99 1643.84,-162.74 
1592,-144 1471.05,-100.28 1077.99,-92.62 934.26,-91.28"/>
+<polygon fill="#00cdcd" stroke="#00cdcd" points="933.98,-87.78 923.95,-91.19 
933.92,-94.78 933.98,-87.78"/>
+</g>
+<!-- 139781034971312&#45;&gt;139781131267872 -->
+<g id="edge62" class="edge">
+<title>139781034971312&#45;&gt;139781131267872</title>
+<path fill="none" stroke="#00cdcd" d="M1614.07,-503.86C1725.75,-458.07 
2016,-329.94 2016,-235 2016,-235 2016,-235 2016,-161 2016,-65.67 1336.24,-32.01 
1063.38,-22.34"/>
+<polygon fill="#00cdcd" stroke="#00cdcd" points="1063.17,-18.83 1053.06,-21.98 
1062.93,-25.83 1063.17,-18.83"/>
+</g>
+<!-- 139781034971312&#45;&gt;139781034971840 -->
+<g id="edge58" class="edge">
+<title>139781034971312&#45;&gt;139781034971840</title>
+<path fill="none" stroke="#00cdcd" d="M1563.27,-503.81C1552.85,-482.89 
1532.19,-448.33 1503,-432 1439.8,-396.65 1253.31,-384.78 1121.81,-380.85"/>
+<polygon fill="#00cdcd" stroke="#00cdcd" points="1121.74,-377.35 
1111.65,-380.56 1121.54,-384.34 1121.74,-377.35"/>
+</g>
+<!-- 139781154520160&#45;&gt;139781034971488 -->
+<g id="edge63" class="edge">
+<title>139781154520160&#45;&gt;139781034971488</title>
+<path fill="none" stroke="red" d="M998.16,-505.57C1001.48,-505.03 
1004.77,-504.5 1008,-504 1110.63,-488.01 1228.6,-472.72 1309.49,-462.71"/>
+<polygon fill="red" stroke="red" points="1310.17,-466.15 1319.66,-461.45 
1309.31,-459.2 1310.17,-466.15"/>
+</g>
+<!-- 139781154520160&#45;&gt;139781034972896 -->
+<g id="edge65" class="edge">
+<title>139781154520160&#45;&gt;139781034972896</title>
+<path fill="none" stroke="red" d="M868.24,-503.88C756.1,-458.68 479.7,-331.67 
589,-216 613.27,-190.32 1188.75,-182.4 1224,-180 1268.73,-176.96 
1318.68,-173.02 1359.07,-169.7"/>
+<polygon fill="red" stroke="red" points="1359.44,-173.18 1369.12,-168.87 
1358.87,-166.2 1359.44,-173.18"/>
+</g>
+<!-- 139781154520160&#45;&gt;139781034972368 -->
+<g id="edge66" class="edge">
+<title>139781154520160&#45;&gt;139781034972368</title>
+<path fill="none" stroke="red" d="M956.25,-503.96C1002.18,-484 1074.45,-447.06 
1121,-396 1156.89,-356.63 1130.81,-320.53 1173,-288 1180.24,-282.42 
1274.46,-264.89 1350.21,-251.51"/>
+<polygon fill="red" stroke="red" points="1351.05,-254.91 1360.3,-249.73 
1349.84,-248.02 1351.05,-254.91"/>
+</g>
+<!-- 139781154520160&#45;&gt;139781034973072 -->
+<g id="edge67" class="edge">
+<title>139781154520160&#45;&gt;139781034973072</title>
+<path fill="none" stroke="red" d="M830.16,-503.89C794.84,-495.23 
753.63,-483.27 718,-468 604.36,-419.31 540.71,-431.7 480,-324 440.71,-254.31 
427.27,-204.16 480,-144 502.63,-118.19 724.63,-100.89 828.24,-94.15"/>
+<polygon fill="red" stroke="red" points="828.73,-97.63 838.49,-93.5 
828.28,-90.64 828.73,-97.63"/>
+</g>
+<!-- 139781154520160&#45;&gt;139781131267872 -->
+<g id="edge68" class="edge">
+<title>139781154520160&#45;&gt;139781131267872</title>
+<path fill="none" stroke="red" d="M827.87,-505.29C824.54,-504.82 
821.24,-504.39 818,-504 693.98,-488.97 367.39,-526.48 257,-468 141.13,-406.61 
76,-366.13 76,-235 76,-235 76,-235 76,-161 76,-118.33 77.39,-96.96 112,-72 
169.53,-30.51 623.02,-21.47 838.73,-19.52"/>
+<polygon fill="red" stroke="red" points="838.85,-23.02 848.82,-19.43 
838.79,-16.02 838.85,-23.02"/>
+</g>
+<!-- 139781154520160&#45;&gt;139781034971840 -->
+<g id="edge64" class="edge">
+<title>139781154520160&#45;&gt;139781034971840</title>
+<path fill="none" stroke="red" d="M921.44,-503.87C933.53,-479.35 
955.87,-434.03 970.06,-405.26"/>
+<polygon fill="red" stroke="red" points="973.24,-406.71 974.53,-396.19 
966.97,-403.61 973.24,-406.71"/>
+</g>
+<!-- 139781034971664&#45;&gt;139781034972896 -->
+<g id="edge70" class="edge">
+<title>139781034971664&#45;&gt;139781034972896</title>
+<path fill="none" stroke="red" d="M348.04,-431.75C351.77,-387.15 
368.49,-267.91 442,-216 513.05,-165.83 1137.19,-185.44 1224,-180 
1268.75,-177.19 1318.7,-173.27 1359.08,-169.9"/>
+<polygon fill="red" stroke="red" points="1359.46,-173.38 1369.13,-169.06 
1358.87,-166.4 1359.46,-173.38"/>
+</g>
+<!-- 139781034971664&#45;&gt;139781034972368 -->
+<g id="edge71" class="edge">
+<title>139781034971664&#45;&gt;139781034972368</title>
+<path fill="none" stroke="red" d="M427.7,-433.81C584.15,-404.21 917.87,-340.28 
969,-324 1006.54,-312.05 1012.09,-298.72 1050,-288 1064.33,-283.95 
1237.8,-261.46 1350.34,-247.11"/>
+<polygon fill="red" stroke="red" points="1350.88,-250.57 1360.36,-245.83 
1350,-243.63 1350.88,-250.57"/>
+</g>
+<!-- 139781034971664&#45;&gt;139781034973072 -->
+<g id="edge72" class="edge">
+<title>139781034971664&#45;&gt;139781034973072</title>
+<path fill="none" stroke="red" d="M338.47,-431.72C314.44,-380.32 
252.71,-226.85 328,-144 361.27,-107.38 696.49,-95.42 828.23,-92.11"/>
+<polygon fill="red" stroke="red" points="828.57,-95.6 838.48,-91.86 
828.4,-88.6 828.57,-95.6"/>
+</g>
+<!-- 139781034971664&#45;&gt;139781131267872 -->
+<g id="edge73" class="edge">
+<title>139781034971664&#45;&gt;139781131267872</title>
+<path fill="none" stroke="red" d="M323.91,-431.92C249.66,-375.09 28.11,-189.27 
138,-72 161.65,-46.76 623.42,-29.17 840.73,-22.26"/>
+<polygon fill="red" stroke="red" points="841,-25.75 850.89,-21.94 
840.78,-18.76 841,-25.75"/>
+</g>
+<!-- 139781034971664&#45;&gt;139781034971840 -->
+<g id="edge69" class="edge">
+<title>139781034971664&#45;&gt;139781034971840</title>
+<path fill="none" stroke="red" d="M427.55,-440.13C532.26,-428.61 716.77,-408.3 
844.24,-394.27"/>
+<polygon fill="red" stroke="red" points="844.91,-397.72 854.46,-393.15 
844.14,-390.76 844.91,-397.72"/>
+</g>
+<!-- 139781154519984&#45;&gt;139781034971488 -->
+<g id="edge74" class="edge">
+<title>139781154519984&#45;&gt;139781034971488</title>
+<path fill="none" stroke="blue" d="M1176.22,-503.97C1220.49,-493.8 
1276.84,-480.87 1322.78,-470.33"/>
+<polygon fill="blue" stroke="blue" points="1323.75,-473.7 1332.71,-468.05 
1322.18,-466.88 1323.75,-473.7"/>
+</g>
+<!-- 139781154519984&#45;&gt;139781034972896 -->
+<g id="edge76" class="edge">
+<title>139781154519984&#45;&gt;139781034972896</title>
+<path fill="none" stroke="blue" d="M1139.48,-503.91C1237.29,-458.47 
1495.85,-332.62 1541,-252 1548.82,-238.04 1549.33,-229.66 1541,-216 
1532.8,-202.55 1519.97,-192.37 1506.11,-184.72"/>
+<polygon fill="blue" stroke="blue" points="1507.4,-181.44 1496.9,-180.04 
1504.23,-187.69 1507.4,-181.44"/>
+</g>
+<!-- 139781154519984&#45;&gt;139781034972368 -->
+<g id="edge77" class="edge">
+<title>139781154519984&#45;&gt;139781034972368</title>
+<path fill="none" stroke="blue" d="M1123.42,-503.87C1134.03,-494.34 
1146.21,-481.66 1154,-468 1195.01,-396.08 1142.1,-345.16 1202,-288 
1207.65,-282.61 1284.25,-266.49 1350.14,-253.44"/>
+<polygon fill="blue" stroke="blue" points="1351.06,-256.82 1360.19,-251.45 
1349.7,-249.95 1351.06,-256.82"/>
+</g>
+<!-- 139781154519984&#45;&gt;139781034973072 -->
+<g id="edge78" class="edge">
+<title>139781154519984&#45;&gt;139781034973072</title>
+<path fill="none" stroke="blue" d="M1038.46,-503.89C944.5,-476.52 
765.75,-416.39 637,-324 602.22,-299.04 588.22,-292.02 573,-252 555.71,-206.51 
555.5,-177.29 591,-144 624.61,-112.49 754.37,-99.08 828.42,-93.91"/>
+<polygon fill="blue" stroke="blue" points="828.74,-97.39 838.49,-93.23 
828.27,-90.41 828.74,-97.39"/>
+</g>
+<!-- 139781154519984&#45;&gt;139781131267872 -->
+<g id="edge79" class="edge">
+<title>139781154519984&#45;&gt;139781131267872</title>
+<path fill="none" stroke="blue" d="M1016.17,-505.31C944.15,-491.94 
850.33,-473.97 833,-468 632.32,-398.83 530.78,-377.11 452,-180 417.8,-94.43 
540.3,-96.98 629,-72 703.64,-50.98 790.47,-37.31 855.3,-29.13"/>
+<polygon fill="blue" stroke="blue" points="856.02,-32.57 865.51,-27.86 
855.16,-25.62 856.02,-32.57"/>
+</g>
+<!-- 139781154519984&#45;&gt;139781034971840 -->
+<g id="edge75" class="edge">
+<title>139781154519984&#45;&gt;139781034971840</title>
+<path fill="none" stroke="blue" d="M1087.65,-503.87C1066.83,-479.03 
1028.12,-432.85 1004.07,-404.14"/>
+<polygon fill="blue" stroke="blue" points="1006.51,-401.61 997.41,-396.19 
1001.15,-406.1 1006.51,-401.61"/>
+</g>
+<!-- 139781154519808&#45;&gt;139781034971488 -->
+<g id="edge80" class="edge">
+<title>139781154519808&#45;&gt;139781034971488</title>
+<path fill="none" stroke="red" d="M1674.29,-504.76C1622.68,-494.38 
1555.54,-480.88 1501.46,-470"/>
+<polygon fill="red" stroke="red" points="1502.01,-466.54 1491.52,-468 
1500.63,-473.4 1502.01,-466.54"/>
+</g>
+<!-- 139781154519808&#45;&gt;139781034972896 -->
+<g id="edge82" class="edge">
+<title>139781154519808&#45;&gt;139781034972896</title>
+<path fill="none" stroke="red" d="M1756.01,-503.84C1758.05,-452.1 
1756.66,-296.31 1673,-216 1650.75,-194.64 1576.16,-180.3 1516.9,-171.99"/>
+<polygon fill="red" stroke="red" points="1517.17,-168.49 1506.79,-170.6 
1516.22,-175.42 1517.17,-168.49"/>
+</g>
+<!-- 139781154519808&#45;&gt;139781034972368 -->
+<g id="edge83" class="edge">
+<title>139781154519808&#45;&gt;139781034972368</title>
+<path fill="none" stroke="red" d="M1736.6,-503.97C1684.12,-455.4 
1533.62,-316.1 1472.39,-259.42"/>
+<polygon fill="red" stroke="red" points="1474.41,-256.53 1464.7,-252.31 
1469.66,-261.67 1474.41,-256.53"/>
+</g>
+<!-- 139781154519808&#45;&gt;139781034973072 -->
+<g id="edge84" class="edge">
+<title>139781154519808&#45;&gt;139781034973072</title>
+<path fill="none" stroke="red" d="M1760.82,-503.56C1763.93,-493.33 
1767.43,-480.08 1769,-468 1771.06,-452.13 1771.19,-447.85 1769,-432 
1749.83,-293.61 1768.63,-205.14 1643,-144 1579.63,-113.16 1096.06,-96.99 
933.85,-92.39"/>
+<polygon fill="red" stroke="red" points="933.73,-88.89 923.64,-92.11 
933.54,-95.89 933.73,-88.89"/>
+</g>
+<!-- 139781154519808&#45;&gt;139781131267872 -->
+<g id="edge85" class="edge">
+<title>139781154519808&#45;&gt;139781131267872</title>
+<path fill="none" stroke="red" d="M1807.66,-503.94C1902.44,-469.54 
2092,-382.33 2092,-235 2092,-235 2092,-235 2092,-161 2092,-48.48 1965.07,-95.34 
1855,-72 1707.16,-40.65 1271.18,-26.48 1063.91,-21.38"/>
+<polygon fill="red" stroke="red" points="1063.99,-17.88 1053.91,-21.14 
1063.82,-24.88 1063.99,-17.88"/>
+</g>
+<!-- 139781154519808&#45;&gt;139781034971840 -->
+<g id="edge81" class="edge">
+<title>139781154519808&#45;&gt;139781034971840</title>
+<path fill="none" stroke="red" d="M1721.72,-503.98C1679.48,-483.23 
1603.83,-448.85 1535,-432 1396.91,-398.2 1234.46,-385.76 1121.7,-381.28"/>
+<polygon fill="red" stroke="red" points="1121.76,-377.78 1111.63,-380.9 
1121.49,-384.78 1121.76,-377.78"/>
+</g>
+<!-- 139781154520512&#45;&gt;139781034971312 -->
+<g id="edge86" class="edge">
+<title>139781154520512&#45;&gt;139781034971312</title>
+<path fill="none" stroke="darkviolet" d="M1574.76,-575.7C1574.21,-567.98 
1573.55,-558.71 1572.94,-550.11"/>
+<polygon fill="darkviolet" stroke="darkviolet" points="1576.43,-549.83 
1572.22,-540.1 1569.44,-550.33 1576.43,-549.83"/>
+</g>
+<!-- 139781154520512&#45;&gt;139781034971488 -->
+<g id="edge87" class="edge">
+<title>139781154520512&#45;&gt;139781034971488</title>
+<path fill="none" stroke="darkviolet" d="M1535.11,-575.82C1516.28,-566.78 
1494.33,-554.53 1477,-540 1455.29,-521.79 1435.83,-495.86 1422.97,-476.69"/>
+<polygon fill="darkviolet" stroke="darkviolet" points="1425.78,-474.59 
1417.38,-468.14 1419.93,-478.43 1425.78,-474.59"/>
+</g>
+<!-- 139781154520512&#45;&gt;139781034972896 -->
+<g id="edge89" class="edge">
+<title>139781154520512&#45;&gt;139781034972896</title>
+<path fill="none" stroke="darkviolet" d="M1642.07,-592.86C1702.89,-590.04 
1793.75,-578.83 1862,-540 1907.72,-513.99 1940,-503.6 1940,-451 1940,-451 
1940,-451 1940,-377 1940,-312.96 1760.09,-240.69 1701,-216 1641.85,-191.28 
1570.29,-177.82 1516.75,-170.66"/>
+<polygon fill="darkviolet" stroke="darkviolet" points="1517,-167.16 
1506.63,-169.35 1516.1,-174.11 1517,-167.16"/>
+</g>
+<!-- 139781154520512&#45;&gt;139781034972368 -->
+<g id="edge90" class="edge">
+<title>139781154520512&#45;&gt;139781034972368</title>
+<path fill="none" stroke="darkviolet" d="M1642.1,-589.34C1713.29,-583.86 
1819.8,-570.65 1845,-540 1855.16,-527.64 1852.39,-518.19 1845,-504 
1774.72,-369.12 1602.6,-290.03 1509.04,-255.6"/>
+<polygon fill="darkviolet" stroke="darkviolet" points="1510.01,-252.23 
1499.41,-252.11 1507.62,-258.81 1510.01,-252.23"/>
+</g>
+<!-- 139781154520512&#45;&gt;139781034973072 -->
+<g id="edge91" class="edge">
+<title>139781154520512&#45;&gt;139781034973072</title>
+<path fill="none" stroke="darkviolet" d="M1642.01,-588.49C1724.96,-581.79 
1861.6,-566.98 1904,-540 1974.05,-495.42 1982.58,-437.95 1954,-360 
1939.56,-320.62 1924.1,-316.14 1893,-288 1809.37,-212.31 1790.55,-181.04 
1684,-144 1544.84,-95.62 1089.96,-90.98 934.02,-90.85"/>
+<polygon fill="darkviolet" stroke="darkviolet" points="933.75,-87.35 
923.75,-90.85 933.75,-94.35 933.75,-87.35"/>
+</g>
+<!-- 139781154520512&#45;&gt;139781131267872 -->
+<g id="edge92" class="edge">
+<title>139781154520512&#45;&gt;139781131267872</title>
+<path fill="none" stroke="darkviolet" d="M1642.17,-589.54C1732.77,-583.75 
1889.72,-569.7 1938,-540 2074.43,-456.07 2130,-395.18 2130,-235 2130,-235 
2130,-235 2130,-161 2130,-135.62 2219.96,-142.24 1979,-72 1810.64,-22.92 
1295.87,-17.96 1065.52,-18.3"/>
+<polygon fill="darkviolet" stroke="darkviolet" points="1065.43,-14.8 
1055.43,-18.32 1065.44,-21.8 1065.43,-14.8"/>
+</g>
+<!-- 139781154520512&#45;&gt;139781034971840 -->
+<g id="edge88" class="edge">
+<title>139781154520512&#45;&gt;139781034971840</title>
+<path fill="none" stroke="darkviolet" d="M1528.47,-575.85C1420.34,-536.83 
1156.3,-441.54 1039.81,-399.5"/>
+<polygon fill="darkviolet" stroke="darkviolet" points="1040.93,-396.19 
1030.34,-396.08 1038.56,-402.77 1040.93,-396.19"/>
+</g>
+<!-- 139781034971488&#45;&gt;139781034972896 -->
+<g id="edge33" class="edge">
+<title>139781034971488&#45;&gt;139781034972896</title>
+<path fill="none" stroke="dimgrey" d="M1429.33,-431.93C1467.7,-401.02 
1544.82,-331.56 1574,-252 1579.51,-236.98 1583.03,-229.21 1574,-216 
1560.55,-196.32 1538.62,-183.95 1516.26,-176.17"/>
+<polygon fill="dimgrey" stroke="dimgrey" points="1517.27,-172.82 
1506.68,-173.11 1515.14,-179.49 1517.27,-172.82"/>
+</g>
+<!-- 139781034971488&#45;&gt;139781034972368 -->
+<g id="edge34" class="edge">
+<title>139781034971488&#45;&gt;139781034972368</title>
+<path fill="none" stroke="dimgrey" d="M1410.13,-431.85C1416.89,-394.75 
1432.91,-306.81 1441.06,-262.1"/>
+<polygon fill="dimgrey" stroke="dimgrey" points="1444.51,-262.7 
1442.86,-252.23 1437.62,-261.44 1444.51,-262.7"/>
+</g>
+<!-- 139781034971488&#45;&gt;139781034973072 -->
+<g id="edge35" class="edge">
+<title>139781034971488&#45;&gt;139781034973072</title>
+<path fill="none" stroke="dimgrey" d="M1458.29,-432C1552.35,-397.94 
1737.15,-315.99 1673,-216 1631.55,-151.39 1590.25,-163.48 1516,-144 
1406.48,-115.26 1066.08,-98.59 934.07,-93.07"/>
+<polygon fill="dimgrey" stroke="dimgrey" points="933.95,-89.56 923.81,-92.64 
933.66,-96.56 933.95,-89.56"/>
+</g>
+<!-- 139781034971488&#45;&gt;139781131267872 -->
+<g id="edge36" class="edge">
+<title>139781034971488&#45;&gt;139781131267872</title>
+<path fill="none" stroke="dimgrey" d="M1486.47,-431.94C1651.26,-393.15 
2004.72,-290.23 1878,-144 1824.87,-82.69 1289.43,-40.88 1057.83,-25.52"/>
+<polygon fill="dimgrey" stroke="dimgrey" points="1057.91,-22.02 1047.7,-24.85 
1057.45,-29 1057.91,-22.02"/>
+</g>
+<!-- 139781034971488&#45;&gt;139781034971840 -->
+<g id="edge32" class="edge">
+<title>139781034971488&#45;&gt;139781034971840</title>
+<path fill="none" stroke="dimgrey" d="M1319.96,-434.33C1315.24,-433.54 
1310.56,-432.76 1306,-432 1236.84,-420.5 1159.31,-407.78 1097.55,-397.68"/>
+<polygon fill="dimgrey" stroke="dimgrey" points="1097.82,-394.18 
1087.39,-396.02 1096.69,-401.08 1097.82,-394.18"/>
+</g>
+<!-- 139781034972896&#45;&gt;139781034973072 -->
+<g id="edge51" class="edge">
+<title>139781034972896&#45;&gt;139781034973072</title>
+<path fill="none" stroke="darkviolet" d="M1369.42,-152.38C1256.83,-138.23 
1035.2,-110.38 933.84,-97.64"/>
+<polygon fill="darkviolet" stroke="darkviolet" points="934.19,-94.16 
923.83,-96.38 933.32,-101.1 934.19,-94.16"/>
+</g>
+<!-- 139781034972896&#45;&gt;139781131267872 -->
+<g id="edge52" class="edge">
+<title>139781034972896&#45;&gt;139781131267872</title>
+<path fill="none" stroke="darkviolet" d="M1424.49,-143.95C1406.97,-123.16 
1374.3,-88.73 1338,-72 1289.27,-49.54 1152.71,-34.57 1055.89,-26.42"/>
+<polygon fill="darkviolet" stroke="darkviolet" points="1056.02,-22.92 
1045.76,-25.58 1055.44,-29.9 1056.02,-22.92"/>
+</g>
+<!-- 139781034972368&#45;&gt;139781034972896 -->
+<g id="edge55" class="edge">
+<title>139781034972368&#45;&gt;139781034972896</title>
+<path fill="none" stroke="darkseagreen" d="M1444.02,-215.7C1443.14,-207.98 
1442.08,-198.71 1441.1,-190.11"/>
+<polygon fill="darkseagreen" stroke="darkseagreen" points="1444.57,-189.64 
1439.95,-180.1 1437.61,-190.44 1444.57,-189.64"/>
+</g>
+<!-- 139781034972368&#45;&gt;139781034973072 -->
+<g id="edge54" class="edge">
+<title>139781034972368&#45;&gt;139781034973072</title>
+<path fill="none" stroke="darkseagreen" d="M1401.48,-215.97C1374.87,-205.71 
1340.43,-192.29 1310,-180 1271.58,-164.48 1263.88,-155.25 1224,-144 
1123.47,-115.65 1001.81,-101.39 933.73,-95.14"/>
+<polygon fill="darkseagreen" stroke="darkseagreen" points="933.96,-91.65 
923.68,-94.24 933.33,-98.62 933.96,-91.65"/>
+</g>
+<!-- 139781034972368&#45;&gt;139781131267872 -->
+<g id="edge56" class="edge">
+<title>139781034972368&#45;&gt;139781131267872</title>
+<path fill="none" stroke="darkseagreen" d="M1417.08,-215.89C1384.6,-197.03 
1329.99,-166.4 1281,-144 1187.05,-101.04 1073.7,-60.3 1007.54,-37.59"/>
+<polygon fill="darkseagreen" stroke="darkseagreen" points="1008.33,-34.16 
997.74,-34.24 1006.07,-40.79 1008.33,-34.16"/>
+</g>
+<!-- 139781034973072&#45;&gt;139781131267872 -->
+<g id="edge53" class="edge">
+<title>139781034973072&#45;&gt;139781131267872</title>
+<path fill="none" stroke="darkviolet" d="M898.55,-71.7C907.23,-63.14 
917.86,-52.66 927.35,-43.3"/>
+<polygon fill="darkviolet" stroke="darkviolet" points="929.99,-45.62 
934.65,-36.1 925.07,-40.63 929.99,-45.62"/>
+</g>
+<!-- 139781034971840&#45;&gt;139781034972896 -->
+<g id="edge39" class="edge">
+<title>139781034971840&#45;&gt;139781034972896</title>
+<path fill="none" stroke="magenta" d="M995.25,-359.66C1010.94,-338.91 
1040.19,-304.87 1074,-288 1168.94,-240.63 1213.56,-296.23 1310,-252 
1332.35,-241.75 1332.14,-230.49 1352,-216 1366.92,-205.11 1384.12,-194.21 
1399.2,-185.15"/>
+<polygon fill="magenta" stroke="magenta" points="1400.99,-188.16 
1407.8,-180.04 1397.42,-182.14 1400.99,-188.16"/>
+</g>
+<!-- 139781034971840&#45;&gt;139781034972368 -->
+<g id="edge40" class="edge">
+<title>139781034971840&#45;&gt;139781034972368</title>
+<path fill="none" stroke="magenta" d="M1016.18,-359.91C1034.72,-350.01 
1058.05,-336.97 1078,-324 1100.36,-309.47 1101.47,-298.45 1126,-288 
1217.15,-249.16 1248.27,-268.3 1346,-252 1347.47,-251.76 1348.94,-251.51 
1350.43,-251.26"/>
+<polygon fill="magenta" stroke="magenta" points="1351.08,-254.7 
1360.36,-249.59 1349.92,-247.8 1351.08,-254.7"/>
+</g>
+<!-- 139781034971840&#45;&gt;139781034973072 -->
+<g id="edge41" class="edge">
+<title>139781034971840&#45;&gt;139781034973072</title>
+<path fill="none" stroke="magenta" d="M885.14,-359.96C779.9,-339.35 
623.04,-301.21 589,-252 524.76,-159.14 727.93,-114.32 828.3,-98.24"/>
+<polygon fill="magenta" stroke="magenta" points="828.93,-101.69 838.27,-96.69 
827.85,-94.77 828.93,-101.69"/>
+</g>
+<!-- 139781034971840&#45;&gt;139781131267872 -->
+<g id="edge42" class="edge">
+<title>139781034971840&#45;&gt;139781131267872</title>
+<path fill="none" stroke="magenta" d="M854.16,-366.41C771.86,-357.92 
673.9,-344.07 637,-324 599.39,-303.55 588.22,-292.02 573,-252 555.71,-206.51 
558.14,-179.9 591,-144 657.67,-71.16 768.89,-40.77 850.3,-28.08"/>
+<polygon fill="magenta" stroke="magenta" points="851.2,-31.49 860.57,-26.55 
850.17,-24.56 851.2,-31.49"/>
+</g>
+<!-- 139781034972016 -->
+<g id="node16" class="node">
+<title>139781034972016</title>
+<polygon fill="none" stroke="black" points="960,-324 832,-324 832,-288 
960,-288 960,-324"/>
+<text text-anchor="middle" x="896" y="-302.3" 
font-family="Helvetica,sans-Serif" font-size="14.00">mes&#45;boot@0.22</text>
+</g>
+<!-- 139781034971840&#45;&gt;139781034972016 -->
+<g id="edge37" class="edge">
+<title>139781034971840&#45;&gt;139781034972016</title>
+<path fill="none" stroke="magenta" d="M961.49,-359.7C950.54,-350.88 
937.05,-340.03 925.18,-330.47"/>
+<polygon fill="magenta" stroke="magenta" points="927.24,-327.65 917.26,-324.1 
922.86,-333.1 927.24,-327.65"/>
+</g>
+<!-- 139781131266816 -->
+<g id="node17" class="node">
+<title>139781131266816</title>
+<ellipse fill="none" stroke="black" cx="742" cy="-234" rx="143.77" ry="18"/>
+<text text-anchor="middle" x="742" y="-230.3" 
font-family="Helvetica,sans-Serif" 
font-size="14.00">bootstrap&#45;mescc&#45;tools@0.5.2</text>
+</g>
+<!-- 139781034971840&#45;&gt;139781131266816 -->
+<g id="edge38" class="edge">
+<title>139781034971840&#45;&gt;139781131266816</title>
+<path fill="none" stroke="magenta" d="M905.32,-359.95C877.92,-351.75 
847.78,-340.1 823,-324 797.21,-307.24 774.29,-280.33 759.48,-260.48"/>
+<polygon fill="magenta" stroke="magenta" points="762.16,-258.22 753.45,-252.19 
756.5,-262.33 762.16,-258.22"/>
+</g>
+<!-- 139781034972016&#45;&gt;139781034972896 -->
+<g id="edge45" class="edge">
+<title>139781034972016&#45;&gt;139781034972896</title>
+<path fill="none" stroke="#00cdcd" d="M960.18,-290.5C964.85,-289.61 
969.49,-288.76 974,-288 1106.86,-265.63 1151.33,-305.46 1275,-252 
1297.88,-242.11 1296.84,-229.16 1318,-216 1337.87,-203.64 1361.13,-192.66 
1381.85,-183.95"/>
+<polygon fill="#00cdcd" stroke="#00cdcd" points="1383.25,-187.15 
1391.17,-180.11 1380.59,-180.68 1383.25,-187.15"/>
+</g>
+<!-- 139781034972016&#45;&gt;139781034972368 -->
+<g id="edge46" class="edge">
+<title>139781034972016&#45;&gt;139781034972368</title>
+<path fill="none" stroke="#00cdcd" d="M960.08,-295.32C976.96,-292.85 
995.16,-290.26 1012,-288 1143.35,-270.39 1176.46,-268.1 1308,-252 
1321.59,-250.34 1335.94,-248.57 1350.04,-246.84"/>
+<polygon fill="#00cdcd" stroke="#00cdcd" points="1350.74,-250.28 
1360.24,-245.59 1349.89,-243.33 1350.74,-250.28"/>
+</g>
+<!-- 139781034972016&#45;&gt;139781034973072 -->
+<g id="edge47" class="edge">
+<title>139781034972016&#45;&gt;139781034973072</title>
+<path fill="none" stroke="#00cdcd" d="M896.32,-287.92C896.53,-269.99 
896.54,-240.99 895,-216 892.93,-182.24 888.24,-143.58 884.86,-118.3"/>
+<polygon fill="#00cdcd" stroke="#00cdcd" points="888.32,-117.78 883.5,-108.34 
881.38,-118.72 888.32,-117.78"/>
+</g>
+<!-- 139781034972016&#45;&gt;139781131267872 -->
+<g id="edge48" class="edge">
+<title>139781034972016&#45;&gt;139781131267872</title>
+<path fill="none" stroke="#00cdcd" d="M900.47,-287.87C903.1,-277.52 
906.41,-264.04 909,-252 924.92,-177.85 940.21,-89.65 947.52,-46.1"/>
+<polygon fill="#00cdcd" stroke="#00cdcd" points="951.01,-46.46 949.21,-36.02 
944.11,-45.31 951.01,-46.46"/>
+</g>
+<!-- 139781034972016&#45;&gt;139781131266816 -->
+<g id="edge44" class="edge">
+<title>139781034972016&#45;&gt;139781131266816</title>
+<path fill="none" stroke="#00cdcd" d="M858.33,-287.88C836.98,-278.17 
810.12,-265.96 787.59,-255.72"/>
+<polygon fill="#00cdcd" stroke="#00cdcd" points="788.78,-252.42 778.22,-251.47 
785.88,-258.79 788.78,-252.42"/>
+</g>
+<!-- 139781034972192 -->
+<g id="node18" class="node">
+<title>139781034972192</title>
+<ellipse fill="none" stroke="black" cx="1123" cy="-234" rx="142.97" ry="18"/>
+<text text-anchor="middle" x="1123" y="-230.3" 
font-family="Helvetica,sans-Serif" 
font-size="14.00">bootstrap&#45;mes&#45;rewired@0.19</text>
+</g>
+<!-- 139781034972016&#45;&gt;139781034972192 -->
+<g id="edge43" class="edge">
+<title>139781034972016&#45;&gt;139781034972192</title>
+<path fill="none" stroke="#00cdcd" d="M951.24,-287.97C984.57,-277.69 
1027.08,-264.58 1061.48,-253.97"/>
+<polygon fill="#00cdcd" stroke="#00cdcd" points="1062.89,-257.2 
1071.41,-250.91 1060.82,-250.51 1062.89,-257.2"/>
+</g>
+<!-- 139781034972192&#45;&gt;139781034972896 -->
+<g id="edge50" class="edge">
+<title>139781034972192&#45;&gt;139781034972896</title>
+<path fill="none" stroke="darkseagreen" d="M1190.19,-218.07C1239.76,-207.05 
1307.35,-192.03 1359.42,-180.46"/>
+<polygon fill="darkseagreen" stroke="darkseagreen" points="1360.28,-183.86 
1369.28,-178.27 1358.76,-177.02 1360.28,-183.86"/>
+</g>
+<!-- 139781131266640 -->
+<g id="node19" class="node">
+<title>139781131266640</title>
+<ellipse fill="none" stroke="black" cx="1123" cy="-162" rx="91.78" ry="18"/>
+<text text-anchor="middle" x="1123" y="-158.3" 
font-family="Helvetica,sans-Serif" font-size="14.00">bootstrap&#45;mes@0</text>
+</g>
+<!-- 139781034972192&#45;&gt;139781131266640 -->
+<g id="edge49" class="edge">
+<title>139781034972192&#45;&gt;139781131266640</title>
+<path fill="none" stroke="darkseagreen" d="M1123,-215.7C1123,-207.98 
1123,-198.71 1123,-190.11"/>
+<polygon fill="darkseagreen" stroke="darkseagreen" points="1126.5,-190.1 
1123,-180.1 1119.5,-190.1 1126.5,-190.1"/>
+</g>
+</g>
+</svg>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]