--- a/.hgtags Tue Jun 23 16:49:24 2015 -0700
+++ b/.hgtags Tue Jun 23 16:50:06 2015 -0700
@@ -25,3 +25,14 @@
0304fc2bab158658df53a8f4edd5aa300a9497d2 4.0.0
e914884fb7210d6350d94909cb25ebc602359680 4.0.1
4d5d101e878f6d6264a8e036b11afdf922c4ef94 4.1.0
+c13b408c00066af78cda88734909c6f2f3505f76 5.0.0
+51e1e962172c0178394cd36652d90181319f5416 5.0.1
+51e1e962172c0178394cd36652d90181319f5416 5.0.1
+0f30907852831f818bd0d01141b4ab7d8d71b821 5.0.1
+dbd0733e584073d6a7b6dea933767853e9cfe845 5.0.2
+bfe9be352453640233371cc7deb409a09decacf9 5.1.0
+9b8628e0a142e0e094e27430c388e3c12ceba513 5.1.1
+e886bc501796d53e0a19e608c6e5a6071191819e 5.1.2
+c52c15100fb2d85c3525d6d085b3663ec4f90fe6 5.1.3
+891c3ce894fa879532299910735bcc2a968245b1 5.1.4
+1377f6a7f9ecb25e9b8885fce8f6f42e0d6f3f12 5.1.5
--- a/README Tue Jun 23 16:49:24 2015 -0700
+++ b/README Tue Jun 23 16:50:06 2015 -0700
@@ -28,11 +28,12 @@
Contribute
==========
-The simplest way to contribute is to issue a pull request on Bitbucket
-(https://bitbucket.org/marmoute/mutable-history). Alternatively, you
-can use the patchbomb extension to send email to mercurial
-devel. Please make sure to use the evolve-ext flag when doing so. You
-can use a command like this:
+Bugs are to be reported on the mercurial's bug tracker: http://bz.selenic.com/
+Use the the "evolution" component.
+
+Please use the patchbomb extension to send email to mercurial devel. Please
+make sure to use the evolve-ext flag when doing so. You can use a command like
+this:
hg email --to mercurial-devel@selenic.com --flag evolve-ext --rev '<your patches>'
@@ -46,19 +47,73 @@
cd tests
python run-tests.py --with-hg=/path/to/hg
-However, some cutting-edge changes may be found in a mutable repository hosted
-by logilab before they are published.
-
- http://hg.netv6.net/marmoute-wip/evolve/
-
-Be sure to check latest draft changeset before submitting new changesets.
-
Changelog
=========
-4.2.0 --
+5.1.5 -- 2015-06-23
+
+- minor documentation cleanup
+- support -i option for `hg amend` if commit supports it (3.4)
+- fix the `debugrecordpruneparents` utility
+- fix some possible crash during command abort (release non-existant transaction)
+- fix simple4server bug tracker URL
+- compatibility with bookmark API change in future Mercurial 3.5
+- prune no longer move the active bookmark for no reason (issue4559)
+- evolve: stop reporting divergence base as missing when we actually have it
+- significant performance improvement for all revsets.
+
+5.1.4 -- 2015-04-23
+
+- significant documentation update
+- fix issue4616: pulling with bundle2 would crash if common marker when
+ discovered on non-served changesets.
+- fix the debugobsrelsethashtree command
+
+5.1.3 -- 2015-04-20
+
+- discovery: fix misbehaving discovery accros python version
+- pull: properly install the bundle2 par generator
+ (avoid sending all markers for each pull)
+- commit: avoid potential deadlock (acquires wlock before lock)
+- graft: avoid potential deadlock (acquires wlock before lock)
+
+5.1.2 -- 2015-04-01
+
+- evolve: prevent a crash in httpclient_pushobsmarkers() when pushing
+5.1.1 -- 2015-03-05
+
+- debugobsconvert: fix invalid markers during conversion
+- discovery: cache some of the obs hash computation to improve performance (issue4518)
+- revset: fix some crash with (issue4515)
+
+5.1 -- 2015-01-30
+
+- evolve: explicitly disable bookmark on evolve (issue4432)
+- evolve: don't abort Mercurial on version mismatch
+- comptatibility with mercurial 3.3
+
+5.0.2 -- 2014-12-14
+
+- evolve: remove dependency to the rebase extension
+
+5.0.1 -- 2014-11-25
+
+- amend: fix --logfile argument
+- evolve: preserve branch change when evolving
+- evolve: fix potential crash while solving `bumped` changesets.
+- uncommit: abort when rev specifies the current changeset
+- evolve: various message improvement
+- evolve: fix selection of changeset to evolve from the middle of a stack (issue4434)
+- evolve: make next/prev only move bookmarks optionally
+- evolve: tell user which "base of divergent changeset" is not found
+
+
+
+5.0.0 -- 2014-10-22
+
+- drop compat with Mercurial pre 3.2
- uncommit: add a --rev argument
- evolve: add a `working directory now at xxxxxxxxxx` message
- evolve: automatically translate obsolete hashes when evolving
@@ -66,6 +121,11 @@
- prune: work around a massive slowdown from lazy revset
- grab: "fix" the grab alias on window
+- fix an issue where prune performance were quadratic with the number of
+ changesets pruned.
+- pull: use discovery to pull less obsmarkers through bundle2
+
+
4.1.0 -- 2014-08-08
- amend: add -D/--current-date option
@@ -253,7 +313,6 @@
0.3.0 -- 2012-06-27
--
- obsolete: Add "latecomer" error detection (stabilize does not handle resolution yet)
- evolve: Introduce a new `uncommit` command to remove change from a changeset
- rebase: allow the use of --keep again
--- a/debian/changelog Tue Jun 23 16:49:24 2015 -0700
+++ b/debian/changelog Tue Jun 23 16:50:06 2015 -0700
@@ -1,3 +1,33 @@
+mercurial-evolve (5.1.5-1) UNRELEASED; urgency=medium
+
+ * New upstream release.
+
+ -- Pierre-Yves David <pyd@marginatus.alto.octopoid.net> Tue, 23 Jun 2015 15:30:07 -0700
+
+mercurial-evolve (5.1.3-1) unstable; urgency=medium
+
+ * new upstream release
+
+ -- Julien Cristau <julien.cristau@logilab.fr> Mon, 20 Apr 2015 14:44:45 +0200
+
+mercurial-evolve (5.0.2-1) unstable; urgency=medium
+
+ * new upstream release
+
+ -- Pierre-Yves David <pierre-yves.david@ens-lyon.org> Sun, 14 Dec 2014 12:43:28 -0800
+
+mercurial-evolve (5.0.1-1) unstable; urgency=medium
+
+ * New upstream release.
+
+ -- Faheem Mitha <faheem@faheem.info> Wed, 12 Nov 2014 11:24:28 +0530
+
+mercurial-evolve (5.0.0+-1) UNRELEASED; urgency=low
+
+ * new upstream snapshot
+
+ -- Julien Cristau <julien.cristau@logilab.fr> Mon, 17 Nov 2014 15:44:32 +0100
+
mercurial-evolve (4.1.0-1) unstable; urgency=medium
* new upstream release
--- a/debian/control Tue Jun 23 16:49:24 2015 -0700
+++ b/debian/control Tue Jun 23 16:50:06 2015 -0700
@@ -7,13 +7,13 @@
Pierre-Yves David <pierre-yves.david@logilab.fr>,
Standards-Version: 3.9.3
Build-Depends:
- mercurial (>=2.6~),
+ mercurial (>= 3.4~),
python,
debhelper (>= 8),
python-sphinx (>= 1.0.8),
imagemagick,
librsvg2-bin,
- curl,
+ wget,
Python-Version: >= 2.6
Homepage: https://bitbucket.org/marmoute/mutable-history
@@ -22,7 +22,7 @@
Depends:
${python:Depends},
${misc:Depends},
- mercurial (>= 2.6),
+ mercurial (>= 3.3~),
Description: evolve extension for Mercurial
This package provides the experimental "evolve" extension for the Mercurial
DVCS.
--- a/debian/rules Tue Jun 23 16:49:24 2015 -0700
+++ b/debian/rules Tue Jun 23 16:50:06 2015 -0700
@@ -1,15 +1,16 @@
#!/usr/bin/make -f
+#export DH_VERBOSE=1
-clean %:
+%:
dh $@ --with python2 --buildsystem=python_distutils
-build:
- dh build --with python2 --buildsystem=python_distutils
+override_dh_auto_build:
+ dh_auto_build
$(MAKE) -C docs
ifeq (,$(filter nocheck, $(DEB_BUILD_OPTIONS)))
override_dh_auto_test:
- cd tests && python run-tests.py --with-hg=`which hg`
+ cd tests && python run-tests.py --with-hg=`which hg` --blacklist=$(CURDIR)/debian/test-blacklist
endif
override_dh_python2:
@@ -17,12 +18,11 @@
find debian -name __init__.py -delete
dh_python2
-clean: clean-docs
+override_dh_auto_clean: clean-docs
+ dh_auto_clean
rm -f tests/*.err
clean-docs:
rm -rf html
rm -f docs/static/logo-evolve.ico
rm -f docs/tutorials/tutorial.rst
-
-.PHONY: build clean clean-docs
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/debian/test-blacklist Tue Jun 23 16:50:06 2015 -0700
@@ -0,0 +1,3 @@
+test-drop.t
+test-simple4server.t
+tests/test-simple4server-bundle2.t
--- a/docs/concepts.rst Tue Jun 23 16:49:24 2015 -0700
+++ b/docs/concepts.rst Tue Jun 23 16:50:06 2015 -0700
@@ -24,7 +24,7 @@
isn't quite right yet, and the diagrams are missing for
malformatted.)
-This document follows standard set theory notation:
+This document follows standard set theory notation::
x ∈ A: x is a member of A
@@ -133,7 +133,7 @@
public phase; only mutable changesets are divergent).
The collective term for unstable, bumped, and divergent changeset is
-*troubled*:
+*troubled*::
troubled = unstable ∪ bumped ∪ divergent
@@ -155,7 +155,7 @@
changesets; these are bugs and will be fixed in due course.)
All hidden changesets are obsolete, and all obsolete changesets are
-part of your repository. Mathematically speaking:
+part of your repository. Mathematically speaking::
repo ⊇ obsolete ⊇ hidden
@@ -177,7 +177,7 @@
Why is this changeset visible?
------------------------------
-Any changeset which is not hidden is *visible*. That is,
+Any changeset which is not hidden is *visible*. That is, ::
visible = repo ∖ hidden
@@ -185,7 +185,7 @@
changesets that are in *repo* but not in *hidden*.)
After amending or pruning a changeset, you might expect it to be
-hidden. It doesn't always work out that way. The precise rules are:
+hidden. It doesn't always work out that way. The precise rules are::
hideable = obsolete
blockers = bookmarks ∪ parents(workingcopy) ∪ localtags
@@ -193,7 +193,7 @@
This will probably be clearer with a worked example. First, here's a
repository with some obsolete changesets, some troubled changesets,
-one bookmark, a working copy, and some hidden changesets:
+one bookmark, a working copy, and some hidden changesets::
x-x
/
@@ -202,7 +202,7 @@
x-x-o
Here's the computation required to determine which changesets are
-hidden:
+hidden::
repo = { 0, 1, 2, 3, 4, 5, 6, 7, 8 }
--- a/docs/evolve-collaboration.rst Tue Jun 23 16:49:24 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,135 +0,0 @@
-.. Copyright 2011 Pierre-Yves David <pierre-yves.david@ens-lyon.org>
-.. Logilab SA <contact@logilab.fr>
-
-------------------------------------------------
-Collaboration Using Evolve: A user story
-------------------------------------------------
-
-
-After having written some code for ticket #42, Alice starts a patch
-(this will be kind of like a 'work-in-progress' checkpoint
-initially)::
-
- $ hg ci -m '[entities] remove magic'
-
-Instant patch! Note how the default phase of this changeset is (still)
-in "draft" state.
-
-This is easily checkable::
-
- $ hg phase tip
- 827: draft
-
-See? Until the day it becomes a "public" changeset, this can be
-altered to no end. How? It happens with an explicit::
-
- $ hg phase --public
-
-In practice, pushing to a "publishing" repository can also turn draft
-changesets into public ones. Older Mercurial releases are automatically
-"publishing" since they do not have the notion of non-public changesets
-(or mutable history).
-
-During the transition from older Mercurial servers to new ones, this will
-happen often, so be careful.
-
-Now let's come back to our patch. Next hour sees good progress and Alice
-wants to complete the patch with the recent stuff (all that's shown by
-an "hg diff") to share with a co-worker, Bob::
-
- $ hg amend -m '[entities] fix frobulator (closes #42)'
-
-Note that we also fix the commit message. (For recovering MQ users: this
-is just like "hg qrefresh -m").
-
-Before leaving, let's push to the central shared repository. That will
-give Bob the signal that something is ripe for review / further amendments::
-
- $ hg push # was done with a modern mercurial, draft phase is preserved
-
-The next day, Bob, who arrives very early, can immediately work out
-some glitches in the patch.
-
-He then starts two others, for ticket #43 and #44 and finally commits them.
-Then, as original worker arrives, he pushes his stuff.
-
-Alice, now equipped with enough properly sugared coffee to survive the
-next two hours::
-
- $ hg pull
-
-Then::
-
- $ hg up "tip ~ 2"
-
-brings her to yesterday's patch. Indeed the patch serial number has
-increased (827 still exists but has been obsoleted).
-
-She understands that her original patch has been altered. But how did it
-evolve?
-
-The enhanced hgview shows the two patches. By default only the most
-recent version of a patch is shown.
-
-Now, when Alice installed the mutable-history extensions, she got an alias
-that allows her to see the diff between two amendments, defined like this::
-
- odiff=diff --rev 'limit(obsparents(.),1)' --rev .
-
-She can see exactly how Bob amended her work.
-
-* odiff
-
-
-Amend ... Stabilize
---------------------
-
-Almost perfect! Alice just needs to fix a half dozen grammar oddities in
-the new docstrings and it will be publishable.
-
-Then, another round of:
-
- $ hg amend
-
-and a quick look at hgview ... shows something strange (at first).
-
-Ticket #42 yesterday's version is still showing up, with two descendant lineages:
-
-* the next version, containing grammar fixes,
-
-* the two stacked changesets for tickets #43 .. 44 committed by Bob.
-
-Indeed, since this changeset still has non-obsolete descendant
-changesets it cannot be hidden. This branch (old version of #42 and
-the two descendants by C.W.) is said to be _unstable_.
-
-Why would one want such a state? Why not auto-stabilize each time "hg
-amend" is typed out?
-
-Alice for one, wouldn't want to merge each time she amends something that
-might conflict with the descendant changesets. Remember she is
-currently updating the very middle of an history!
-
-Being now done with grammar and typo fixes, Alice decides it is time to
-stabilize again the tree. She does::
-
- $ hg evolve
-
-two times, one for each unstable descendant. The last time, hgview
-shows her a straight line again. Wow! that feels a bit like a
-well-planned surgical operation. At the end, the patient tree has
-been properly trimmed and any conflict properly handled.
-
-Of course nothing fancy really happened: each "stablilize" can be
-understood in terms of a rebase of the next unstable descendant to the
-newest version of its parent (including the possible manual conflict
-resolution intermission ...).
-
-Except that rebase is a destructive (it removes information from the
-repository), unrecoverable operation, and the "evolve + obsolete"
-combo, using changeset copy and obsolescence marker, provides evolution
-semantics by only adding new information to the repository (but more
-on that later).
-
-She pushes again.
-
--- a/docs/evolve-faq.rst Tue Jun 23 16:49:24 2015 -0700
+++ b/docs/evolve-faq.rst Tue Jun 23 16:50:06 2015 -0700
@@ -1,19 +1,19 @@
.. Copyright 2011 Pierre-Yves David <pierre-yves.david@ens-lyon.org>
.. Logilab SA <contact@logilab.fr>
----------------------------------------------------------------------
+-------------
Evolve How To
----------------------------------------------------------------------
+-------------
Add a changeset: ``commit``
-------------------------------------------------------------
+---------------------------
Just use commit as usual. New changesets will be in the `draft` phase.
Rewrite a changeset: ``commit --amend``
-------------------------------------------------------------
+---------------------------------------
It writes a new changeset combining working-directory parent changes and parent.
It will work on any `draft` or `secret` changeset. It will not work on `public`
@@ -36,7 +36,7 @@
Move a changeset: ``grab``
-------------------------------------------------------------
+--------------------------
You can use ``hg grab <rev>`` to move a rev at your current location, making the
old version obsolete.
@@ -45,7 +45,7 @@
Delete a changeset: ``prune``
-------------------------------------------------------------
+-----------------------------
A new ``prune`` command allows removing a changeset.
@@ -53,7 +53,7 @@
Moving within the history: ``gdown`` and ``gup``
-------------------------------------------------------------
+------------------------------------------------
While working on mutable part of the history you often need to move between
mutable commits.
@@ -67,7 +67,7 @@
feeling back.
Collapse changesets: ``fold``
-------------------------------------------------------------
+-----------------------------
You can use ``hg fold`` to collapse multiple changesets in a single one.
@@ -78,7 +78,7 @@
``hg fold -r <revset>`` fold everything changeset matching the revset together.
Getting changes out of a commit
-------------------------------------------------------------
+-------------------------------
The ``hg uncommit`` command lets you rewrite the parent commit without
selected changed files. Target files content is not altered and
@@ -94,7 +94,7 @@
M celestine
Split a changeset
------------------------
+-----------------
To split on file boundaries, just use ``uncommit`` command.
@@ -120,7 +120,7 @@
Update my current work in progress after a pull
-----------------------------------------------
+-----------------------------------------------
Whenever you are working on some changesets, it is more likely that a pull
will, eventually, import new changesets in your tree.
@@ -133,7 +133,7 @@
Move multiple changesets: ``rebase``
-------------------------------------------------------------
+------------------------------------
You can still use rebase to move a whole segment of the changeset graph together.
@@ -141,7 +141,7 @@
divergent versions of the changesets.
Resolve history troubles: ``evolve``
-------------------------------------------------------------
+------------------------------------
When you rewrite (amend) a changeset with children without rewriting
those children you create *unstable* changesets and *suspended
@@ -155,7 +155,7 @@
Fix my history afterward: ``prune -n``
-------------------------------------------------------------
+--------------------------------------
Sometimes you need to create an obsolete marker by hand. This may happen when
upstream has applied some of your patches for example.
@@ -164,7 +164,7 @@
marker.
View diff from the last amend
-------------------------------------------------------------
+-----------------------------
An ``odiff`` alias have been added by ``enable.sh``
@@ -173,7 +173,7 @@
odiff = diff --rev 'limit(precursors(.),1)' --rev .
View obsolete markers
-------------------------------------------------------------
+---------------------
hgview_ is the only viewer that currently supports this feature. You
need version 1.6.2
@@ -193,10 +193,10 @@
Important Note
-=====================================================================
+==============
View change to your file
-------------------------------------------------------------
+------------------------
Extinct changesets are hidden using the *hidden* feature of mercurial.
--- a/docs/evolve-good-practice.rst Tue Jun 23 16:49:24 2015 -0700
+++ b/docs/evolve-good-practice.rst Tue Jun 23 16:50:06 2015 -0700
@@ -6,7 +6,7 @@
-----------------------------------------
Avoid unstability
---------------------------------
+-----------------
The less unstability you have the less you need to resolve.
@@ -14,7 +14,7 @@
not ready neither.
Branch as much as possible
---------------------------------
+--------------------------
This is not MQ; you are not constrained to linear history.
@@ -22,7 +22,7 @@
and conflict.
Rewrite your changes only
-------------------------------------------------
+-------------------------
There is no descent conflict detection and handling right now.
Rewriting other people's changesets guarantees that you will get
@@ -40,7 +40,7 @@
Do not get too confident
----------------------------
+------------------------
This is an experimental extension and a complex concept. This is beautiful,
powerful and robust on paper, but the tool and your mind may not be prepared for
--- a/docs/figures/edit-is-rewrite-step1.svg Tue Jun 23 16:49:24 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,509 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="773.15637"
- height="740.48505"
- id="svg3404"
- version="1.1"
- inkscape:version="0.48.3.1 r9886"
- sodipodi:docname="edit-is-rewrite-step1.svg">
- <defs
- id="defs3406">
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM"
- style="overflow:visible">
- <path
- id="path6393"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotL"
- orient="auto"
- refY="0"
- refX="0"
- id="DotL"
- style="overflow:visible">
- <path
- id="path6390"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.8,0,0,0.8,5.92,0.8)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Mstart"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Mstart"
- style="overflow:visible">
- <path
- id="path6334"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,4,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Mstart"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Mstart"
- style="overflow:visible">
- <path
- id="path6352"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
- transform="scale(0.6,0.6)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend"
- style="overflow:visible">
- <path
- id="path6331"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.8,0,0,-0.8,-10,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 526.18109 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="744.09448 : 526.18109 : 1"
- inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
- id="perspective3411" />
- <inkscape:perspective
- id="perspective5699"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <inkscape:perspective
- id="perspective5753"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <inkscape:perspective
- id="perspective5784"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="0.57"
- inkscape:cx="215.04832"
- inkscape:cy="422.53048"
- inkscape:document-units="px"
- showgrid="false"
- inkscape:snap-global="true"
- inkscape:window-width="1280"
- inkscape:window-height="776"
- inkscape:window-x="0"
- inkscape:window-y="24"
- inkscape:window-maximized="1"
- inkscape:current-layer="g6029"
- fit-margin-top="5"
- fit-margin-right="5"
- fit-margin-bottom="5"
- fit-margin-left="5">
- <inkscape:grid
- type="xygrid"
- id="grid6315"
- empspacing="5"
- visible="true"
- enabled="true"
- snapvisiblegridlinesonly="true"
- originx="5.0135572px"
- originy="4.9994442px" />
- </sodipodi:namedview>
- <metadata
- id="metadata3409">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:groupmode="layer"
- id="layer4"
- inkscape:label="babar"
- transform="translate(12.275017,-145.05915)">
- <flowRoot
- xml:space="preserve"
- id="flowRoot5626"
- style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"><flowRegion
- id="flowRegion5628"><rect
- id="rect5630"
- width="120.20815"
- height="52.527931"
- x="153.54318"
- y="706.89001"
- style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" /></flowRegion><flowPara
- id="flowPara5636" /></flowRoot> <flowRoot
- xml:space="preserve"
- id="flowRoot5653"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"><flowRegion
- id="flowRegion5655"><rect
- id="rect5657"
- width="145"
- height="49.285713"
- x="565.71429"
- y="683.07648" /></flowRegion><flowPara
- id="flowPara5659" /></flowRoot> <g
- id="g10759"
- transform="translate(582.45614,-14.035088)">
- <g
- transform="translate(-422.06809,-8.1395349)"
- id="g6029">
- <rect
- style="fill:#ffffff;stroke:#000000;stroke-width:4.09652519;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="rect3414"
- width="291.61774"
- height="107.33205"
- x="68.11969"
- y="793.33905" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Bitstream Vera Sans"
- x="75.714279"
- y="835.2193"
- id="text5643"><tspan
- sodipodi:role="line"
- id="tspan5645"
- x="75.714279"
- y="835.2193"
- style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">";<tspan
- style="fill:#008000;stroke:#008000"
- id="tspan5889">Alice</tspan>;Babar"</tspan><tspan
- sodipodi:role="line"
- x="75.714279"
- y="885.2193"
- id="tspan5649"
- style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">⟶ <tspan
- id="tspan6297"
- style="fill:#c8ab37;stroke:#c8ab37">19b08111</tspan></tspan></text>
- </g>
- <g
- transform="translate(-602.95683,-59.767404)"
- id="g6023">
- <rect
- style="fill:#ffffff;stroke:#000000;stroke-width:6.09169483;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="rect3414-7"
- width="657.06445"
- height="105.33688"
- x="66.285065"
- y="639.61066" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Bitstream Vera Sans"
- x="72.882072"
- y="680.49335"
- id="text5643-6"><tspan
- sodipodi:role="line"
- id="tspan5645-5"
- x="72.882072"
- y="680.49335"
- style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">"<tspan
- id="tspan6203"
- style="fill:#c8c4b7;stroke:#c8c4b7;stroke-opacity:1">19b08111</tspan>;<tspan
- style="fill:#008000;stroke:#008000"
- id="tspan5885">Alice</tspan>;Babar<tspan
- id="tspan6287"
- style="fill:#ff0000;stroke:#ff0000">,Celeste</tspan>"</tspan><tspan
- sodipodi:role="line"
- x="72.882072"
- y="730.49335"
- id="tspan5649-6"
- style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">⟶ <tspan
- id="tspan6035"
- style="stroke:#009400;stroke-opacity:1"><tspan
- id="tspan6039"
- style="stroke:#00b500;stroke-opacity:1"><tspan
- id="tspan6043"
- style="stroke:#00ae00;stroke-opacity:1"><tspan
- id="tspan6045"
- style="stroke:#00ad00;stroke-opacity:1"><tspan
- id="tspan6047"
- style="stroke:#00ac00;stroke-opacity:1"><tspan
- id="tspan6051"
- style="stroke:#00aa00;stroke-opacity:1"><tspan
- id="tspan6053"
- style="stroke:#00a800;stroke-opacity:1"><tspan
- id="tspan6055"
- style="stroke:#00a600;stroke-opacity:1"><tspan
- id="tspan6057"
- style="stroke:#00a400;stroke-opacity:1"><tspan
- id="tspan6059"
- style="stroke:#00a100;stroke-opacity:1"><tspan
- id="tspan6061"
- style="stroke:#009f00;stroke-opacity:1"><tspan
- id="tspan6063"
- style="stroke:#009d00;stroke-opacity:1"><tspan
- id="tspan6065"
- style="stroke:#009900;stroke-opacity:1"><tspan
- id="tspan6067"
- style="stroke:#009800;stroke-opacity:1"><tspan
- id="tspan6069"
- style="stroke:#009700;stroke-opacity:1"><tspan
- id="tspan6071"
- style="stroke:#009800;stroke-opacity:1"><tspan
- id="tspan6073"
- style="stroke:#009900;stroke-opacity:1"><tspan
- id="tspan6077"
- style="stroke:#009c00;stroke-opacity:1"><tspan
- id="tspan6079"
- style="stroke:#009d00;stroke-opacity:1"><tspan
- id="tspan6081"
- style="stroke:#009e00;stroke-opacity:1"><tspan
- id="tspan6083"
- style="stroke:#009f00;stroke-opacity:1"><tspan
- id="tspan6085"
- style="stroke:#00a100;stroke-opacity:1"><tspan
- id="tspan6087"
- style="stroke:#00a200;stroke-opacity:1"><tspan
- id="tspan6089"
- style="stroke:#00a500;stroke-opacity:1"><tspan
- id="tspan6091"
- style="stroke:#00a600;stroke-opacity:1"><tspan
- id="tspan6093"
- style="stroke:#00a500;stroke-opacity:1"><tspan
- id="tspan6095"
- style="stroke:#00a200;stroke-opacity:1"><tspan
- id="tspan6097"
- style="stroke:#00a100;stroke-opacity:1"><tspan
- id="tspan6099"
- style="stroke:#009f00;stroke-opacity:1"><tspan
- id="tspan6101"
- style="stroke:#009c00;stroke-opacity:1"><tspan
- id="tspan6103"
- style="stroke:#009700;stroke-opacity:1"><tspan
- id="tspan6105"
- style="stroke:#009200;stroke-opacity:1"><tspan
- id="tspan6107"
- style="stroke:#008b00;stroke-opacity:1"><tspan
- id="tspan6109"
- style="stroke:#008500;stroke-opacity:1"><tspan
- id="tspan6111"
- style="stroke:#007c00;stroke-opacity:1"><tspan
- id="tspan6113"
- style="stroke:#007500;stroke-opacity:1"><tspan
- id="tspan6115"
- style="stroke:#006b00;stroke-opacity:1"><tspan
- id="tspan6117"
- style="stroke:#006100;stroke-opacity:1"><tspan
- id="tspan6119"
- style="stroke:#005800;stroke-opacity:1"><tspan
- id="tspan6121"
- style="stroke:#004d00;stroke-opacity:1"><tspan
- id="tspan6123"
- style="stroke:#004500;stroke-opacity:1"><tspan
- id="tspan6125"
- style="stroke:#003b00;stroke-opacity:1"><tspan
- id="tspan6127"
- style="stroke:#003300;stroke-opacity:1"><tspan
- id="tspan6129"
- style="stroke:#002900;stroke-opacity:1"><tspan
- id="tspan6131"
- style="stroke:#002200;stroke-opacity:1"><tspan
- id="tspan6133"
- style="stroke:#001900;stroke-opacity:1"><tspan
- id="tspan6135"
- style="stroke:#001300;stroke-opacity:1"><tspan
- id="tspan6137"
- style="stroke:#000b00;stroke-opacity:1"><tspan
- id="tspan6139"
- style="stroke:#000700;stroke-opacity:1"><tspan
- id="tspan6141"
- style="stroke:#000000;stroke-opacity:1"><tspan
- id="tspan6145"
- style="stroke:#d00000;stroke-opacity:1"><tspan
- id="tspan6147"
- style="stroke:#d10000;stroke-opacity:1"><tspan
- id="tspan6149"
- style="stroke:#d30000;stroke-opacity:1"><tspan
- id="tspan6151"
- style="stroke:#d80000;stroke-opacity:1"><tspan
- id="tspan6153"
- style="stroke:#db0000;stroke-opacity:1"><tspan
- id="tspan6155"
- style="stroke:#e10000;stroke-opacity:1"><tspan
- id="tspan6157"
- style="stroke:#e40000;stroke-opacity:1"><tspan
- id="tspan6159"
- style="stroke:#eb0000;stroke-opacity:1"><tspan
- id="tspan6161"
- style="stroke:#ef0000;stroke-opacity:1"><tspan
- id="tspan6163"
- style="stroke:#f50000;stroke-opacity:1"><tspan
- id="tspan6165"
- style="stroke:#f90000;stroke-opacity:1"><tspan
- id="tspan6167"
- style="stroke:#fd0000;stroke-opacity:1"><tspan
- id="tspan6169"
- style="stroke:#ff0000;stroke-opacity:1"><tspan
- id="tspan6185"
- style="fill:#010000;fill-opacity:1"><tspan
- id="tspan6187"
- style="fill:#4c0000;fill-opacity:1"><tspan
- id="tspan6189"
- style="fill:#810000;fill-opacity:1"><tspan
- id="tspan6191"
- style="fill:#c70000;fill-opacity:1"><tspan
- id="tspan6193"
- style="fill:#ee0000;fill-opacity:1"><tspan
- id="tspan6195"
- style="fill:#ff0000;fill-opacity:1"><tspan
- id="tspan6279"
- style="fill:#c8ab37"><tspan
- id="tspan6281"
- style="stroke:#c8ab37">925d8319 </tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></text>
- </g>
- <g
- transform="translate(-582.55815,-32.55814)"
- id="g6009">
- <rect
- style="fill:#ffffff;stroke:#000000;stroke-width:5.109797;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="rect3414-7-0"
- width="458.04636"
- height="106.31878"
- x="145.39543"
- y="199.2028" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Bitstream Vera Sans"
- x="152.48338"
- y="240.57646"
- id="text5643-6-0"><tspan
- sodipodi:role="line"
- x="152.48338"
- y="240.57646"
- id="tspan5649-6-7"
- style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">"<tspan
- id="tspan6305"
- style="fill:#c8c4b7;stroke:#c8c4b7">6fcdd7fe</tspan>;<tspan
- style="fill:#008000;stroke:#008000"
- id="tspan5877">Bob</tspan>;Babar"</tspan><tspan
- sodipodi:role="line"
- x="152.48338"
- y="290.57648"
- style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="tspan5823"><tspan
- id="tspan6309"
- style="fill:#c8ab37;stroke:#c8ab37">⟶ebc2b5a1 </tspan></tspan><tspan
- sodipodi:role="line"
- x="152.48338"
- y="340.57648"
- style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="tspan5825" /></text>
- </g>
- <g
- transform="translate(-574.4186,-84.34382)"
- id="g6016">
- <rect
- style="fill:#ffffff;stroke:#000000;stroke-width:6.52355862;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="rect3414-7-0-7"
- width="756.63257"
- height="104.90502"
- x="-12.03722"
- y="458.04919" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Bitstream Vera Sans"
- x="-5.6561542"
- y="498.71597"
- id="text5643-6-0-7"><tspan
- sodipodi:role="line"
- x="-5.6561542"
- y="498.71597"
- id="tspan5649-6-7-5"
- style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">"<tspan
- id="tspan6289"
- style="fill:#c8c4b7;stroke:#c8c4b7">925d8319</tspan>;<tspan
- style="fill:#008000;stroke:#008000"
- id="tspan5881">Alice</tspan>;Babar,Celeste<tspan
- id="tspan6303"
- style="fill:#ff0000;stroke:#ff0000">,flore</tspan>"</tspan><tspan
- sodipodi:role="line"
- x="-5.6561542"
- y="548.71594"
- style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="tspan5809">⟶ <tspan
- id="tspan6299"
- style="fill:#c8ab37;stroke:#c8ab37">6fcdd7fe </tspan></tspan><tspan
- sodipodi:role="line"
- x="-5.6561542"
- y="598.71594"
- style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="tspan5811" /></text>
- </g>
- <path
- inkscape:connection-start="#g6016"
- inkscape:connection-end="#g6009"
- inkscape:connector-type="polyline"
- id="path6317"
- d="m -208.13954,373.70537 0,-100.74193"
- style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#DotM);marker-end:none"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connection-end="#g6023"
- inkscape:connection-start="#g6029"
- inkscape:connector-type="polyline"
- id="path6321"
- d="m -208.13953,785.19952 -1e-5,-100.01938"
- style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:2.79999995;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#DotM);marker-end:none"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connection-end="#g6023"
- inkscape:connection-start="#g6016"
- inkscape:connector-type="polyline"
- id="path6323"
- d="m -208.13954,478.6104 0,101.23285"
- style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-mid:none;marker-end:url(#DotM)"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- </g>
- </g>
-</svg>
--- a/docs/figures/edit-is-rewrite-step2.svg Tue Jun 23 16:49:24 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,832 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="1597.0645"
- height="768.49182"
- id="svg3404"
- version="1.1"
- inkscape:version="0.48.3.1 r9886"
- sodipodi:docname="edit-is-rewrite-step2.svg">
- <defs
- id="defs3406">
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM"
- style="overflow:visible">
- <path
- id="path6393"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotL"
- orient="auto"
- refY="0"
- refX="0"
- id="DotL"
- style="overflow:visible">
- <path
- id="path6390"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.8,0,0,0.8,5.92,0.8)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Mstart"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Mstart"
- style="overflow:visible">
- <path
- id="path6334"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,4,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="Arrow2Mstart"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Mstart"
- style="overflow:visible">
- <path
- id="path6352"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
- transform="scale(0.6,0.6)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend"
- style="overflow:visible">
- <path
- id="path6331"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.8,0,0,-0.8,-10,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 526.18109 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="744.09448 : 526.18109 : 1"
- inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
- id="perspective3411" />
- <inkscape:perspective
- id="perspective5699"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <inkscape:perspective
- id="perspective5753"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <inkscape:perspective
- id="perspective5784"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <inkscape:perspective
- id="perspective11514"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-8"
- style="overflow:visible">
- <path
- id="path6393-2"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker11520"
- style="overflow:visible">
- <path
- id="path11522"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="0.57"
- inkscape:cx="1091.46"
- inkscape:cy="493.26469"
- inkscape:document-units="px"
- showgrid="false"
- inkscape:snap-global="true"
- inkscape:window-width="1280"
- inkscape:window-height="776"
- inkscape:window-x="0"
- inkscape:window-y="24"
- inkscape:window-maximized="1"
- inkscape:current-layer="layer4"
- fit-margin-top="5"
- fit-margin-right="5"
- fit-margin-bottom="5"
- fit-margin-left="5">
- <inkscape:grid
- type="xygrid"
- id="grid6315"
- empspacing="5"
- visible="true"
- enabled="true"
- snapvisiblegridlinesonly="true"
- originx="424.40857px"
- originy="4.9994042px" />
- </sodipodi:namedview>
- <metadata
- id="metadata3409">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:groupmode="layer"
- id="layer4"
- inkscape:label="babar"
- transform="translate(888.68669,-124.06992)">
- <flowRoot
- xml:space="preserve"
- id="flowRoot5626"
- style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"><flowRegion
- id="flowRegion5628"><rect
- id="rect5630"
- width="120.20815"
- height="52.527931"
- x="153.54318"
- y="706.89001"
- style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" /></flowRegion><flowPara
- id="flowPara5636" /></flowRoot> <flowRoot
- xml:space="preserve"
- id="flowRoot5653"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"><flowRegion
- id="flowRegion5655"><rect
- id="rect5657"
- width="145"
- height="49.285713"
- x="565.71429"
- y="683.07648" /></flowRegion><flowPara
- id="flowPara5659" /></flowRoot> <g
- id="g6029"
- transform="translate(-296.62861,-15.157079)">
- <rect
- y="793.33905"
- x="68.11969"
- height="107.33205"
- width="291.61774"
- id="rect3414"
- style="fill:#ffffff;stroke:#000000;stroke-width:4.09652519000000037;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <text
- id="text5643"
- y="835.2193"
- x="75.714279"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- y="835.2193"
- x="75.714279"
- id="tspan5645"
- sodipodi:role="line">";<tspan
- style="fill:#008000;stroke:#008000"
- id="tspan12068">Alice</tspan>;Babar"</tspan><tspan
- style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="tspan5649"
- y="885.2193"
- x="75.714279"
- sodipodi:role="line">⟶ <tspan
- style="fill:#c8ab37;stroke:#c8ab37"
- id="tspan6297">19b08111</tspan></tspan></text>
- </g>
- <g
- id="g6023"
- transform="translate(-897.69367,-93.100738)"
- style="opacity:0.5">
- <rect
- y="639.61066"
- x="66.285065"
- height="105.33688"
- width="657.06445"
- id="rect3414-7"
- style="fill:#ffffff;stroke:#000000;stroke-width:5;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:20, 10;stroke-dashoffset:0" />
- <text
- id="text5643-6"
- y="680.49335"
- x="72.882072"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- y="680.49335"
- x="72.882072"
- id="tspan5645-5"
- sodipodi:role="line">"<tspan
- style="fill:#c8c4b7;stroke:#c8c4b7;stroke-opacity:1"
- id="tspan6203">19b08111</tspan>;<tspan
- style="fill:#008000;stroke:#008000"
- id="tspan12072">Alice</tspan>;Babar<tspan
- style="fill:#ff0000;stroke:#ff0000"
- id="tspan6287">,Celeste</tspan>"</tspan><tspan
- style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="tspan5649-6"
- y="730.49335"
- x="72.882072"
- sodipodi:role="line">⟶ <tspan
- style="stroke:#009400;stroke-opacity:1"
- id="tspan6035"><tspan
- style="stroke:#00b500;stroke-opacity:1"
- id="tspan6039"><tspan
- style="stroke:#00ae00;stroke-opacity:1"
- id="tspan6043"><tspan
- style="stroke:#00ad00;stroke-opacity:1"
- id="tspan6045"><tspan
- style="stroke:#00ac00;stroke-opacity:1"
- id="tspan6047"><tspan
- style="stroke:#00aa00;stroke-opacity:1"
- id="tspan6051"><tspan
- style="stroke:#00a800;stroke-opacity:1"
- id="tspan6053"><tspan
- style="stroke:#00a600;stroke-opacity:1"
- id="tspan6055"><tspan
- style="stroke:#00a400;stroke-opacity:1"
- id="tspan6057"><tspan
- style="stroke:#00a100;stroke-opacity:1"
- id="tspan6059"><tspan
- style="stroke:#009f00;stroke-opacity:1"
- id="tspan6061"><tspan
- style="stroke:#009d00;stroke-opacity:1"
- id="tspan6063"><tspan
- style="stroke:#009900;stroke-opacity:1"
- id="tspan6065"><tspan
- style="stroke:#009800;stroke-opacity:1"
- id="tspan6067"><tspan
- style="stroke:#009700;stroke-opacity:1"
- id="tspan6069"><tspan
- style="stroke:#009800;stroke-opacity:1"
- id="tspan6071"><tspan
- style="stroke:#009900;stroke-opacity:1"
- id="tspan6073"><tspan
- style="stroke:#009c00;stroke-opacity:1"
- id="tspan6077"><tspan
- style="stroke:#009d00;stroke-opacity:1"
- id="tspan6079"><tspan
- style="stroke:#009e00;stroke-opacity:1"
- id="tspan6081"><tspan
- style="stroke:#009f00;stroke-opacity:1"
- id="tspan6083"><tspan
- style="stroke:#00a100;stroke-opacity:1"
- id="tspan6085"><tspan
- style="stroke:#00a200;stroke-opacity:1"
- id="tspan6087"><tspan
- style="stroke:#00a500;stroke-opacity:1"
- id="tspan6089"><tspan
- style="stroke:#00a600;stroke-opacity:1"
- id="tspan6091"><tspan
- style="stroke:#00a500;stroke-opacity:1"
- id="tspan6093"><tspan
- style="stroke:#00a200;stroke-opacity:1"
- id="tspan6095"><tspan
- style="stroke:#00a100;stroke-opacity:1"
- id="tspan6097"><tspan
- style="stroke:#009f00;stroke-opacity:1"
- id="tspan6099"><tspan
- style="stroke:#009c00;stroke-opacity:1"
- id="tspan6101"><tspan
- style="stroke:#009700;stroke-opacity:1"
- id="tspan6103"><tspan
- style="stroke:#009200;stroke-opacity:1"
- id="tspan6105"><tspan
- style="stroke:#008b00;stroke-opacity:1"
- id="tspan6107"><tspan
- style="stroke:#008500;stroke-opacity:1"
- id="tspan6109"><tspan
- style="stroke:#007c00;stroke-opacity:1"
- id="tspan6111"><tspan
- style="stroke:#007500;stroke-opacity:1"
- id="tspan6113"><tspan
- style="stroke:#006b00;stroke-opacity:1"
- id="tspan6115"><tspan
- style="stroke:#006100;stroke-opacity:1"
- id="tspan6117"><tspan
- style="stroke:#005800;stroke-opacity:1"
- id="tspan6119"><tspan
- style="stroke:#004d00;stroke-opacity:1"
- id="tspan6121"><tspan
- style="stroke:#004500;stroke-opacity:1"
- id="tspan6123"><tspan
- style="stroke:#003b00;stroke-opacity:1"
- id="tspan6125"><tspan
- style="stroke:#003300;stroke-opacity:1"
- id="tspan6127"><tspan
- style="stroke:#002900;stroke-opacity:1"
- id="tspan6129"><tspan
- style="stroke:#002200;stroke-opacity:1"
- id="tspan6131"><tspan
- style="stroke:#001900;stroke-opacity:1"
- id="tspan6133"><tspan
- style="stroke:#001300;stroke-opacity:1"
- id="tspan6135"><tspan
- style="stroke:#000b00;stroke-opacity:1"
- id="tspan6137"><tspan
- style="stroke:#000700;stroke-opacity:1"
- id="tspan6139"><tspan
- style="stroke:#000000;stroke-opacity:1"
- id="tspan6141"><tspan
- style="stroke:#d00000;stroke-opacity:1"
- id="tspan6145"><tspan
- style="stroke:#d10000;stroke-opacity:1"
- id="tspan6147"><tspan
- style="stroke:#d30000;stroke-opacity:1"
- id="tspan6149"><tspan
- style="stroke:#d80000;stroke-opacity:1"
- id="tspan6151"><tspan
- style="stroke:#db0000;stroke-opacity:1"
- id="tspan6153"><tspan
- style="stroke:#e10000;stroke-opacity:1"
- id="tspan6155"><tspan
- style="stroke:#e40000;stroke-opacity:1"
- id="tspan6157"><tspan
- style="stroke:#eb0000;stroke-opacity:1"
- id="tspan6159"><tspan
- style="stroke:#ef0000;stroke-opacity:1"
- id="tspan6161"><tspan
- style="stroke:#f50000;stroke-opacity:1"
- id="tspan6163"><tspan
- style="stroke:#f90000;stroke-opacity:1"
- id="tspan6165"><tspan
- style="stroke:#fd0000;stroke-opacity:1"
- id="tspan6167"><tspan
- style="stroke:#ff0000;stroke-opacity:1"
- id="tspan6169"><tspan
- style="fill:#010000;fill-opacity:1"
- id="tspan6185"><tspan
- style="fill:#4c0000;fill-opacity:1"
- id="tspan6187"><tspan
- style="fill:#810000;fill-opacity:1"
- id="tspan6189"><tspan
- style="fill:#c70000;fill-opacity:1"
- id="tspan6191"><tspan
- style="fill:#ee0000;fill-opacity:1"
- id="tspan6193"><tspan
- style="fill:#ff0000;fill-opacity:1"
- id="tspan6195"><tspan
- style="fill:#c8ab37"
- id="tspan6279"><tspan
- style="stroke:#c8ab37"
- id="tspan6281">925d8319 </tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></text>
- </g>
- <g
- id="g6009"
- transform="translate(-877.29499,-65.891474)"
- style="opacity:0.5">
- <rect
- y="199.2028"
- x="145.39543"
- height="106.31878"
- width="458.04636"
- id="rect3414-7-0"
- style="fill:#ffffff;stroke:#000000;stroke-width:5;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:20, 10;stroke-dashoffset:0" />
- <text
- id="text5643-6-0"
- y="240.57646"
- x="152.48338"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="tspan5649-6-7"
- y="240.57646"
- x="152.48338"
- sodipodi:role="line">"<tspan
- style="fill:#c8c4b7;stroke:#c8c4b7"
- id="tspan6305">6fcdd7fe</tspan>;<tspan
- style="fill:#008000;stroke:#008000"
- id="tspan12080">Bob</tspan>;Babar"</tspan><tspan
- id="tspan5823"
- style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- y="290.57648"
- x="152.48338"
- sodipodi:role="line"><tspan
- style="fill:#c8ab37;stroke:#c8ab37"
- id="tspan6309">⟶ebc2b5a1 </tspan></tspan><tspan
- id="tspan5825"
- style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- y="340.57648"
- x="152.48338"
- sodipodi:role="line" /></text>
- </g>
- <g
- id="g6016"
- transform="translate(-869.15544,-117.67716)"
- style="opacity:0.5">
- <rect
- y="458.04919"
- x="-12.03722"
- height="104.90502"
- width="756.63257"
- id="rect3414-7-0-7"
- style="fill:#ffffff;stroke:#000000;stroke-width:5;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:20, 10;stroke-dashoffset:0" />
- <text
- id="text5643-6-0-7"
- y="498.71597"
- x="-5.6561542"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="tspan5649-6-7-5"
- y="498.71597"
- x="-5.6561542"
- sodipodi:role="line">"<tspan
- style="fill:#c8c4b7;stroke:#c8c4b7"
- id="tspan6289">925d8319</tspan>;<tspan
- style="fill:#008000;stroke:#008000"
- id="tspan12076">Alice</tspan>;Babar,Celeste<tspan
- style="fill:#ff0000;stroke:#ff0000"
- id="tspan6303">,flore<tspan
- style="fill:#000000;stroke:#000000"
- id="tspan6313">"</tspan></tspan></tspan><tspan
- id="tspan5809"
- style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- y="548.71594"
- x="-5.6561542"
- sodipodi:role="line">⟶ <tspan
- style="fill:#c8ab37;stroke:#c8ab37"
- id="tspan6299">6fcdd7fe </tspan></tspan><tspan
- id="tspan5811"
- style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- y="598.71594"
- x="-5.6561542"
- sodipodi:role="line" /></text>
- </g>
- <path
- style="opacity:0.5;fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#DotM);marker-end:none"
- d="m -502.87638,340.37203 0,-100.74192"
- id="path6317"
- inkscape:connector-type="polyline"
- inkscape:connection-end="#g6009"
- inkscape:connection-start="#g6016"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <path
- style="opacity:0.5;fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:2.79999995000000013;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#DotM);marker-end:none"
- d="M -179.61512,778.18197 -407.76284,651.8468"
- id="path6321"
- inkscape:connector-type="polyline"
- inkscape:connection-start="#g6029"
- inkscape:connection-end="#g6023"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <path
- style="opacity:0.5;fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-mid:none;marker-end:url(#DotM)"
- d="m -502.87638,445.27706 0,101.23286"
- id="path6323"
- inkscape:connector-type="polyline"
- inkscape:connection-end="#g6023"
- inkscape:connection-start="#g6016"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <g
- id="g6023-5"
- transform="translate(-72.254198,-94.854246)">
- <rect
- y="639.61066"
- x="66.285065"
- height="105.33688"
- width="657.06445"
- id="rect3414-7-5"
- style="fill:#ffffff;stroke:#000000;stroke-width:5;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <text
- id="text5643-6-3"
- y="680.49335"
- x="72.882072"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- y="680.49335"
- x="72.882072"
- id="tspan5645-5-0"
- sodipodi:role="line">"<tspan
- style="fill:#c8c4b7;stroke:#c8c4b7;stroke-opacity:1"
- id="tspan6203-2">19b08111</tspan>;<tspan
- style="fill:#ff0000;stroke:#ff0000"
- id="tspan12040">Bob</tspan>;Babar,Celeste"</tspan><tspan
- style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="tspan5649-6-70"
- y="730.49335"
- x="72.882072"
- sodipodi:role="line">⟶ <tspan
- style="stroke:#009400;stroke-opacity:1"
- id="tspan6035-4"><tspan
- style="stroke:#00b500;stroke-opacity:1"
- id="tspan6039-3"><tspan
- style="stroke:#00ae00;stroke-opacity:1"
- id="tspan6043-2"><tspan
- style="stroke:#00ad00;stroke-opacity:1"
- id="tspan6045-5"><tspan
- style="stroke:#00ac00;stroke-opacity:1"
- id="tspan6047-2"><tspan
- style="stroke:#00aa00;stroke-opacity:1"
- id="tspan6051-8"><tspan
- style="stroke:#00a800;stroke-opacity:1"
- id="tspan6053-9"><tspan
- style="stroke:#00a600;stroke-opacity:1"
- id="tspan6055-1"><tspan
- style="stroke:#00a400;stroke-opacity:1"
- id="tspan6057-7"><tspan
- style="stroke:#00a100;stroke-opacity:1"
- id="tspan6059-2"><tspan
- style="stroke:#009f00;stroke-opacity:1"
- id="tspan6061-8"><tspan
- style="stroke:#009d00;stroke-opacity:1"
- id="tspan6063-7"><tspan
- style="stroke:#009900;stroke-opacity:1"
- id="tspan6065-4"><tspan
- style="stroke:#009800;stroke-opacity:1"
- id="tspan6067-1"><tspan
- style="stroke:#009700;stroke-opacity:1"
- id="tspan6069-4"><tspan
- style="stroke:#009800;stroke-opacity:1"
- id="tspan6071-7"><tspan
- style="stroke:#009900;stroke-opacity:1"
- id="tspan6073-8"><tspan
- style="stroke:#009c00;stroke-opacity:1"
- id="tspan6077-6"><tspan
- style="stroke:#009d00;stroke-opacity:1"
- id="tspan6079-8"><tspan
- style="stroke:#009e00;stroke-opacity:1"
- id="tspan6081-8"><tspan
- style="stroke:#009f00;stroke-opacity:1"
- id="tspan6083-3"><tspan
- style="stroke:#00a100;stroke-opacity:1"
- id="tspan6085-6"><tspan
- style="stroke:#00a200;stroke-opacity:1"
- id="tspan6087-0"><tspan
- style="stroke:#00a500;stroke-opacity:1"
- id="tspan6089-0"><tspan
- style="stroke:#00a600;stroke-opacity:1"
- id="tspan6091-3"><tspan
- style="stroke:#00a500;stroke-opacity:1"
- id="tspan6093-6"><tspan
- style="stroke:#00a200;stroke-opacity:1"
- id="tspan6095-1"><tspan
- style="stroke:#00a100;stroke-opacity:1"
- id="tspan6097-5"><tspan
- style="stroke:#009f00;stroke-opacity:1"
- id="tspan6099-8"><tspan
- style="stroke:#009c00;stroke-opacity:1"
- id="tspan6101-8"><tspan
- style="stroke:#009700;stroke-opacity:1"
- id="tspan6103-6"><tspan
- style="stroke:#009200;stroke-opacity:1"
- id="tspan6105-2"><tspan
- style="stroke:#008b00;stroke-opacity:1"
- id="tspan6107-1"><tspan
- style="stroke:#008500;stroke-opacity:1"
- id="tspan6109-0"><tspan
- style="stroke:#007c00;stroke-opacity:1"
- id="tspan6111-9"><tspan
- style="stroke:#007500;stroke-opacity:1"
- id="tspan6113-5"><tspan
- style="stroke:#006b00;stroke-opacity:1"
- id="tspan6115-0"><tspan
- style="stroke:#006100;stroke-opacity:1"
- id="tspan6117-9"><tspan
- style="stroke:#005800;stroke-opacity:1"
- id="tspan6119-7"><tspan
- style="stroke:#004d00;stroke-opacity:1"
- id="tspan6121-7"><tspan
- style="stroke:#004500;stroke-opacity:1"
- id="tspan6123-3"><tspan
- style="stroke:#003b00;stroke-opacity:1"
- id="tspan6125-5"><tspan
- style="stroke:#003300;stroke-opacity:1"
- id="tspan6127-6"><tspan
- style="stroke:#002900;stroke-opacity:1"
- id="tspan6129-8"><tspan
- style="stroke:#002200;stroke-opacity:1"
- id="tspan6131-6"><tspan
- style="stroke:#001900;stroke-opacity:1"
- id="tspan6133-2"><tspan
- style="stroke:#001300;stroke-opacity:1"
- id="tspan6135-7"><tspan
- style="stroke:#000b00;stroke-opacity:1"
- id="tspan6137-6"><tspan
- style="stroke:#000700;stroke-opacity:1"
- id="tspan6139-8"><tspan
- style="stroke:#000000;stroke-opacity:1"
- id="tspan6141-5"><tspan
- style="stroke:#d00000;stroke-opacity:1"
- id="tspan6145-5"><tspan
- style="stroke:#d10000;stroke-opacity:1"
- id="tspan6147-1"><tspan
- style="stroke:#d30000;stroke-opacity:1"
- id="tspan6149-3"><tspan
- style="stroke:#d80000;stroke-opacity:1"
- id="tspan6151-7"><tspan
- style="stroke:#db0000;stroke-opacity:1"
- id="tspan6153-2"><tspan
- style="stroke:#e10000;stroke-opacity:1"
- id="tspan6155-6"><tspan
- style="stroke:#e40000;stroke-opacity:1"
- id="tspan6157-3"><tspan
- style="stroke:#eb0000;stroke-opacity:1"
- id="tspan6159-5"><tspan
- style="stroke:#ef0000;stroke-opacity:1"
- id="tspan6161-3"><tspan
- style="stroke:#f50000;stroke-opacity:1"
- id="tspan6163-3"><tspan
- style="stroke:#f90000;stroke-opacity:1"
- id="tspan6165-5"><tspan
- style="stroke:#fd0000;stroke-opacity:1"
- id="tspan6167-1"><tspan
- style="stroke:#ff0000;stroke-opacity:1"
- id="tspan6169-8"><tspan
- style="fill:#010000;fill-opacity:1"
- id="tspan6185-8"><tspan
- style="fill:#4c0000;fill-opacity:1"
- id="tspan6187-3"><tspan
- style="fill:#810000;fill-opacity:1"
- id="tspan6189-7"><tspan
- style="fill:#c70000;fill-opacity:1"
- id="tspan6191-5"><tspan
- style="fill:#ee0000;fill-opacity:1"
- id="tspan6193-3"><tspan
- style="fill:#ff0000;fill-opacity:1"
- id="tspan6195-6"><tspan
- style="fill:#c8ab37"
- id="tspan6279-2"><tspan
- style="stroke:#c8ab37"
- id="tspan6281-0">1a25964c </tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></tspan></text>
- </g>
- <g
- id="g6009-2"
- transform="matrix(1.0149773,0,0,1,-61.013248,-67.644986)">
- <rect
- y="199.28004"
- x="136.82903"
- height="106.1643"
- width="487.27863"
- id="rect3414-7-0-9"
- style="fill:#ffffff;stroke:#000000;stroke-width:5.15333318999999968;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <text
- id="text5643-6-0-8"
- y="240.57646"
- x="152.48338"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="tspan5649-6-7-0"
- y="240.57646"
- x="152.48338"
- sodipodi:role="line">"<tspan
- style="fill:#ff0000;stroke:#ff0000"
- id="tspan6305-8">6d9e1549</tspan>;<tspan
- style="fill:#008000;stroke:#008000"
- id="tspan12088">Bob</tspan>;Babar"</tspan><tspan
- id="tspan5823-0"
- style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- y="290.57648"
- x="152.48338"
- sodipodi:role="line"><tspan
- style="fill:#c8ab37;stroke:#c8ab37"
- id="tspan6309-7"><tspan
- style="fill:#000000;stroke:#000000"
- id="tspan12060">⟶<tspan
- style="fill:#c8ab37"
- id="tspan12064"><tspan
- style="stroke:#c8ab37"
- id="tspan12066">dda72e36 </tspan></tspan></tspan></tspan></tspan><tspan
- id="tspan5825-4"
- style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- y="340.57648"
- x="152.48338"
- sodipodi:role="line" /></text>
- </g>
- <g
- id="g6016-0"
- transform="translate(-43.715968,-119.43067)">
- <rect
- y="458.04919"
- x="-12.03722"
- height="104.90502"
- width="756.63257"
- id="rect3414-7-0-7-4"
- style="fill:#ffffff;stroke:#000000;stroke-width:5;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <text
- id="text5643-6-0-7-1"
- y="498.71597"
- x="-5.6561542"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="tspan5649-6-7-5-4"
- y="498.71597"
- x="-5.6561542"
- sodipodi:role="line">"<tspan
- style="fill:#c8c4b7;stroke:#c8c4b7"
- id="tspan12056">1a25964c</tspan>;<tspan
- style="fill:#008000;stroke:#008000"
- id="tspan12084">Alice</tspan>;Babar,Celeste,<tspan
- style="fill:#ff0000;stroke:#ff0000"
- id="tspan12050">F</tspan>lore"</tspan><tspan
- id="tspan5809-3"
- style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- y="548.71594"
- x="-5.6561542"
- sodipodi:role="line">⟶ <tspan
- style="fill:#c8ab37;stroke:#c8ab37"
- id="tspan6299-4">6d9e1549 </tspan></tspan><tspan
- id="tspan5811-3"
- style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- y="598.71594"
- x="-5.6561542"
- sodipodi:role="line" /></text>
- </g>
- <path
- style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#DotM);marker-end:none"
- d="m 323.22154,338.61852 1.26559,-100.81916"
- id="path6317-8"
- inkscape:connector-type="polyline"
- inkscape:connection-end="#g6009-2"
- inkscape:connection-start="#g6016-0"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <path
- style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-mid:none;marker-end:url(#DotM)"
- d="m 322.5631,443.52355 -1e-5,101.23286"
- id="path6323-8"
- inkscape:connector-type="polyline"
- inkscape:connection-start="#g6016-0"
- inkscape:connection-end="#g6023-5"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <path
- style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#marker11520)"
- d="M 231.51159,650.09329 10.076033,778.18197"
- id="path11833"
- inkscape:connector-type="polyline"
- inkscape:connection-start="#g6023-5"
- inkscape:connection-end="#g6029"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- </g>
-</svg>
--- a/docs/figures/error-conflicting.svg Tue Jun 23 16:49:24 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="342 1890 349 427" width="349pt" height="427pt"><metadata xmlns:dc="http://purl.org/dc/elements/1.1/"><dc:date>2012-03-18 23:47Z</dc:date><!-- Produced by OmniGraffle Professional 5.3.6 --></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="3.488"/><feOffset in="blur" result="offset" dx="0" dy="4"/><feFlood flood-color="black" flood-opacity=".75" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="26" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.31641" slope="0" x-height="522.94922" cap-height="717.2852" ascent="770.0196" descent="-229.98048" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledDiamond_Marker" viewBox="-1 -3 6 6" markerWidth="6" markerHeight="6" color="blue"><g><path d="M 3.7333333 0 L 1.8666667 -1.4 L 0 0 L 1.8666667 1.4 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="17" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><g><title>Layer 1</title><g><use xl:href="#id465_Graphic" filter="url(#Shadow)"/><use xl:href="#id466_Graphic" filter="url(#Shadow)"/><use xl:href="#id472_Graphic" filter="url(#Shadow)"/><use xl:href="#id471_Graphic" filter="url(#Shadow)"/><use xl:href="#id475_Graphic" filter="url(#Shadow)"/><use xl:href="#id718_Graphic" filter="url(#Shadow)"/><use xl:href="#id722_Graphic" filter="url(#Shadow)"/></g><g id="id465_Graphic"><rect x="362.1148" y="1906.3591" width="308.04614" height="386.30615" fill="white" fill-opacity=".5"/><rect x="362.1148" y="1906.3591" width="308.04614" height="386.30615" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id466_Graphic"><path d="M 460.24097 2058.0142 C 471.311 2069.0842 471.311 2087.032 460.24097 2098.102 C 449.171 2109.1721 431.22305 2109.1721 420.15308 2098.102 C 409.08304 2087.032 409.08304 2069.0842 420.15308 2058.0142 C 431.22305 2046.9441 449.171 2046.9441 460.24097 2058.0142" fill="yellow"/><path d="M 460.24097 2058.0142 C 471.311 2069.0842 471.311 2087.032 460.24097 2098.102 C 449.171 2109.1721 431.22305 2109.1721 420.15308 2098.102 C 409.08304 2087.032 409.08304 2069.0842 420.15308 2058.0142 C 431.22305 2046.9441 449.171 2046.9441 460.24097 2058.0142" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><text transform="translate(422.51984 2062.5581)" fill="maroon"><tspan font-family="Helvetica" font-size="26" font-weight="500" fill="maroon" x="6.1180782" y="25" textLength="23.118164">A’</tspan></text></g><line x1="508.74466" y1="2219.2893" x2="453.23264" y2="2104.9158" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id472_Graphic"><path d="M 525.1753 2222.4712 C 530.71033 2228.0061 530.71033 2236.9802 525.1753 2242.5151 C 519.64032 2248.0503 510.66632 2248.0503 505.13132 2242.5151 C 499.5963 2236.9802 499.5963 2228.0061 505.13132 2222.4712 C 510.66632 2216.936 519.64032 2216.936 525.1753 2222.4712" fill="black"/><path d="M 525.1753 2222.4712 C 530.71033 2228.0061 530.71033 2236.9802 525.1753 2242.5151 C 519.64032 2248.0503 510.66632 2248.0503 505.13132 2242.5151 C 499.5963 2236.9802 499.5963 2228.0061 505.13132 2222.4712 C 510.66632 2216.936 519.64032 2216.936 525.1753 2222.4712" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id471_Graphic"><path d="M 525.1753 2268.4714 C 530.71033 2274.0063 530.71033 2282.9805 525.1753 2288.5154 C 519.64032 2294.0505 510.66632 2294.0505 505.13132 2288.5154 C 499.5963 2282.9805 499.5963 2274.0063 505.13132 2268.4714 C 510.66632 2262.9363 519.64032 2262.9363 525.1753 2268.4714" fill="black"/><path d="M 525.1753 2268.4714 C 530.71033 2274.0063 530.71033 2282.9805 525.1753 2288.5154 C 519.64032 2294.0505 510.66632 2294.0505 505.13132 2288.5154 C 499.5963 2282.9805 499.5963 2274.0063 505.13132 2268.4714 C 510.66632 2262.9363 519.64032 2262.9363 525.1753 2268.4714" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="515.15332" y1="2247.1665" x2="515.15332" y2="2263.8201" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="515.15332" y1="2217.8198" x2="515.15332" y2="2168.1504" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id475_Graphic"><path d="M 535.19727 2119.26 C 546.26727 2130.3301 546.26727 2148.2778 535.19727 2159.3479 C 524.12732 2170.418 506.17935 2170.418 495.10938 2159.3479 C 484.03934 2148.2778 484.03934 2130.3301 495.10938 2119.26 C 506.17935 2108.19 524.12732 2108.19 535.19727 2119.26" fill="yellow" fill-opacity=".5"/><path d="M 535.19727 2119.26 C 546.26727 2130.3301 546.26727 2148.2778 535.19727 2159.3479 C 524.12732 2170.418 506.17935 2170.418 495.10938 2159.3479 C 484.03934 2148.2778 484.03934 2130.3301 495.10938 2119.26 C 506.17935 2108.19 524.12732 2108.19 535.19727 2119.26" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,5"/><text transform="translate(497.47614 2123.804)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="463.31088" y1="2096.9441" x2="482.01135" y2="2112.2239" marker-end="url(#FilledDiamond_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" stroke-dasharray="1,4"/><g id="id718_Graphic"><path d="M 618.86163 2058.0142 C 629.93164 2069.0842 629.93164 2087.032 618.86163 2098.102 C 607.7917 2109.1721 589.8437 2109.1721 578.77374 2098.102 C 567.70374 2087.032 567.70374 2069.0842 578.77374 2058.0142 C 589.8437 2046.9441 607.7917 2046.9441 618.86163 2058.0142" fill="#ff6"/><path d="M 618.86163 2058.0142 C 629.93164 2069.0842 629.93164 2087.032 618.86163 2098.102 C 607.7917 2109.1721 589.8437 2109.1721 578.77374 2098.102 C 567.70374 2087.032 567.70374 2069.0842 578.77374 2058.0142 C 589.8437 2046.9441 607.7917 2046.9441 618.86163 2058.0142" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><text transform="translate(581.14056 2062.5581)" fill="maroon"><tspan font-family="Helvetica" font-size="26" font-weight="500" fill="maroon" x="3.2298946" y="25" textLength="28.894531">A’’</tspan></text></g><line x1="522.14453" y1="2219.5881" x2="584.5973" y2="2104.3074" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><line x1="574.73132" y1="2095.6902" x2="549.68903" y2="2114.0222" marker-end="url(#FilledDiamond_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" stroke-dasharray="1,4"/><line x1="470.04346" y1="2078.1025" x2="568.97186" y2="2078.2505" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="7"/><g id="id722_Graphic"><path d="M 419.06274 2052.1411 C 459.63675 2034.4656 555.9978 2028.5737 616.85608 2041.7183 C 677.71497 2054.8606 641.8429 2119.8875 608.87634 2121.7026 C 575.90967 2123.5149 553.70416 2096.4143 553.70416 2096.4148 L 498.5315 2097.185 C 498.5315 2097.185 500.21146 2125.1155 452.02893 2119.2227 C 403.84808 2113.3301 378.49112 2069.8181 419.06274 2052.1411 Z" fill="red" fill-opacity=".15000001"/><path d="M 419.06274 2052.1411 C 459.63675 2034.4656 555.9978 2028.5737 616.85608 2041.7183 C 677.71497 2054.8606 641.8429 2119.8875 608.87634 2121.7026 C 575.90967 2123.5149 553.70416 2096.4143 553.70416 2096.4148 L 498.5315 2097.185 C 498.5315 2097.185 500.21146 2125.1155 452.02893 2119.2227 C 403.84808 2113.3301 378.49112 2069.8181 419.06274 2052.1411 Z" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" stroke-dasharray="4,9,1,5"/></g><text transform="translate(481.40805 1999.724)" fill="red"><tspan font-family="Helvetica" font-size="17" font-weight="bold" fill="red" x=".11987305" y="16" textLength="43.429688">Confl</tspan><tspan font-family="Helvetica" font-size="17" font-weight="bold" fill="red" x="43.54956" y="16" textLength="45.330566">icting</tspan></text></g></g></svg>
--- a/docs/figures/error-extinct.svg Tue Jun 23 16:49:24 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="286 1306 644 435" width="644pt" height="435pt"><metadata xmlns:dc="http://purl.org/dc/elements/1.1/"><dc:date>2012-03-18 23:47Z</dc:date><!-- Produced by OmniGraffle Professional 5.3.6 --></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="3.488"/><feOffset in="blur" result="offset" dx="0" dy="4"/><feFlood flood-color="black" flood-opacity=".75" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="26" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.31641" slope="0" x-height="522.94922" cap-height="717.2852" ascent="770.0196" descent="-229.98048" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledDiamond_Marker" viewBox="-1 -2 4 4" markerWidth="4" markerHeight="4" color="blue"><g><path d="M 1.6 0 L .8 -.60000002 L 0 0 L .8 .60000002 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="17" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><g><title>Layer 1</title><g><use xl:href="#id581_Graphic" filter="url(#Shadow)"/><use xl:href="#id423_Graphic" filter="url(#Shadow)"/><use xl:href="#id422_Graphic" filter="url(#Shadow)"/><use xl:href="#id415_Graphic" filter="url(#Shadow)"/><use xl:href="#id567_Graphic" filter="url(#Shadow)"/><use xl:href="#id588_Graphic" filter="url(#Shadow)"/><use xl:href="#id565_Graphic" filter="url(#Shadow)"/><use xl:href="#id592_Graphic" filter="url(#Shadow)"/><use xl:href="#id595_Graphic" filter="url(#Shadow)"/><use xl:href="#id597_Graphic" filter="url(#Shadow)"/><use xl:href="#id599_Graphic" filter="url(#Shadow)"/><use xl:href="#id604_Graphic" filter="url(#Shadow)"/></g><g id="id581_Graphic"><rect x="538.9198" y="1322.60815" width="371" height="394" fill="white" fill-opacity=".5"/><rect x="538.9198" y="1322.60815" width="371" height="394" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id423_Graphic"><rect x="306.04608" y="1379.2305" width="160" height="280.84644" fill="white" fill-opacity=".5"/><rect x="306.04608" y="1379.2305" width="160" height="280.84644" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id422_Graphic"><circle cx="384.04633" cy="1522.2869" r="28.346533" fill="red"/><circle cx="384.04633" cy="1522.2869" r="28.346533" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(366.36917 1506.7869)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="371.27045" y1="1496.4152" x2="353.8865" y2="1461.212" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><path d="M 394.06836 1589.8818 C 399.60336 1595.4169 399.60336 1604.3907 394.06836 1609.9258 C 388.53336 1615.4608 379.55936 1615.4608 374.02435 1609.9258 C 368.48935 1604.3907 368.48935 1595.4169 374.02435 1589.8818 C 379.55936 1584.3468 388.53336 1584.3468 394.06836 1589.8818" fill="black"/><path d="M 394.06836 1589.8818 C 399.60336 1595.4169 399.60336 1604.3907 394.06836 1609.9258 C 388.53336 1615.4608 379.55936 1615.4608 374.02435 1609.9258 C 368.48935 1604.3907 368.48935 1595.4169 374.02435 1589.8818 C 379.55936 1584.3468 388.53336 1584.3468 394.06836 1589.8818" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 394.06836 1635.8817 C 399.60336 1641.4167 399.60336 1650.3906 394.06836 1655.9257 C 388.53336 1661.4607 379.55936 1661.4607 374.02435 1655.9257 C 368.48935 1650.3906 368.48935 1641.4167 374.02435 1635.8817 C 379.55936 1630.3467 388.53336 1630.3467 394.06836 1635.8817" fill="black"/><path d="M 394.06836 1635.8817 C 399.60336 1641.4167 399.60336 1650.3906 394.06836 1655.9257 C 388.53336 1661.4607 379.55936 1661.4607 374.02435 1655.9257 C 368.48935 1650.3906 368.48935 1641.4167 374.02435 1635.8817 C 379.55936 1630.3467 388.53336 1630.3467 394.06836 1635.8817" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="384.05234" y1="1614.577" x2="384.05911" y2="1631.2305" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id415_Graphic"><circle cx="341.11066" cy="1435.3403" r="28.346533" fill="yellow"/><circle cx="341.11066" cy="1435.3403" r="28.346533" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(323.43347 1419.8403)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">B</tspan></text></g><line x1="384.04633" y1="1551.1333" x2="384.04636" y2="1585.2306" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id567_Graphic"><path d="M 649.09058 1405.5331 C 665.0907 1366.53296 703.09058 1353.5331 727.09058 1382.5331 C 751.0899 1411.5319 743.091 1543.5331 730.0907 1547.5327 C 717.09076 1551.5322 681.09106 1566.5331 662.09082 1553.533 C 643.0905 1540.5328 633.091 1444.5325 649.09058 1405.5331 Z" fill="blue" fill-opacity=".15000001"/><path d="M 649.09058 1405.5331 C 665.0907 1366.53296 703.09058 1353.5331 727.09058 1382.5331 C 751.0899 1411.5319 743.091 1543.5331 730.0907 1547.5327 C 717.09076 1551.5322 681.09106 1566.5331 662.09082 1553.533 C 643.0905 1540.5328 633.091 1444.5325 649.09058 1405.5331 Z" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" stroke-dasharray="4,9,1,5"/></g><line x1="670.96875" y1="1499.7141" x2="608.7143" y2="1440.1655" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><path d="M 763.18304 1609.1852 C 768.7181 1614.7202 768.7181 1623.6941 763.18304 1629.2291 C 757.64807 1634.7642 748.67407 1634.7642 743.1391 1629.2291 C 737.60406 1623.6941 737.60406 1614.7202 743.1391 1609.1852 C 748.67407 1603.6501 757.64807 1603.6501 763.18304 1609.1852" fill="black"/><path d="M 763.18304 1609.1852 C 768.7181 1614.7202 768.7181 1623.6941 763.18304 1629.2291 C 757.64807 1634.7642 748.67407 1634.7642 743.1391 1629.2291 C 737.60406 1623.6941 737.60406 1614.7202 743.1391 1609.1852 C 748.67407 1603.6501 757.64807 1603.6501 763.18304 1609.1852" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 763.18304 1655.1852 C 768.7181 1660.7202 768.7181 1669.6941 763.18304 1675.2291 C 757.64807 1680.7642 748.67407 1680.7642 743.1391 1675.2291 C 737.60406 1669.6941 737.60406 1660.7202 743.1391 1655.1852 C 748.67407 1649.6501 757.64807 1649.6501 763.18304 1655.1852" fill="black"/><path d="M 763.18304 1655.1852 C 768.7181 1660.7202 768.7181 1669.6941 763.18304 1675.2291 C 757.64807 1680.7642 748.67407 1680.7642 743.1391 1675.2291 C 737.60406 1669.6941 737.60406 1660.7202 743.1391 1655.1852 C 748.67407 1649.6501 757.64807 1649.6501 763.18304 1655.1852" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="753.16107" y1="1633.8804" x2="753.16107" y2="1650.5339" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id588_Graphic"><circle cx="587.5074" cy="1419.88025" r="28.346518" fill="yellow"/><path d="M 607.55133 1399.8363 C 618.62134 1410.90625 618.62134 1428.85425 607.55133 1439.9242 C 596.4814 1450.9943 578.5334 1450.9943 567.46344 1439.9242 C 556.39343 1428.85425 556.39343 1410.90625 567.46344 1399.8363 C 578.5334 1388.7662 596.4814 1388.7662 607.55133 1399.8363" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke-dasharray="16,9"/><text transform="translate(569.83026 1404.38025)" fill="red"><tspan font-family="Helvetica" font-size="26" font-weight="500" fill="red" x="9.006262" y="25" textLength="17.341797">B</tspan></text></g><g id="id565_Graphic"><circle cx="691.8144" cy="1519.6537" r="28.346518" fill="red" fill-opacity=".5"/><path d="M 711.85834 1499.6097 C 722.92834 1510.6797 722.92834 1528.6277 711.85834 1539.6976 C 700.7884 1550.7677 682.8404 1550.7677 671.77045 1539.6976 C 660.70044 1528.6277 660.70044 1510.6797 671.77045 1499.6097 C 682.8404 1488.5397 700.7884 1488.5397 711.85834 1499.6097" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,5"/><text transform="translate(674.13727 1504.1537)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="706.95093" y1="1544.2173" x2="745.4616" y2="1606.7125" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><line x1="784.66077" y1="1519.52405" x2="730.5608" y2="1519.5996" marker-end="url(#FilledDiamond_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" stroke-dasharray="1,3"/><g id="id592_Graphic"><circle cx="813.5072" cy="1519.4838" r="28.346518" fill="red"/><circle cx="813.5072" cy="1519.4838" r="28.346518" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(795.8301 1503.9838)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="6.5243282" y="25" textLength="22.305664">A'</tspan></text></g><line x1="798.56934" y1="1544.1689" x2="760.75946" y2="1606.6506" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id595_Graphic"><circle cx="426.39252" cy="1435.3403" r="28.346533" fill="#ff8000"/><circle cx="426.39252" cy="1435.3403" r="28.346533" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(408.71533 1419.8403)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="8.2889767" y="25" textLength="18.776367">C</tspan></text></g><line x1="396.6806" y1="1496.3458" x2="413.75824" y2="1461.2814" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id597_Graphic"><circle cx="817.5072" cy="1419.88025" r="28.346518" fill="#ff8000"/><circle cx="817.5072" cy="1419.88025" r="28.346518" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(799.8301 1404.38025)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="5.807043" y="25" textLength="23.740234">C'</tspan></text></g><line x1="816.34967" y1="1448.7037" x2="814.66473" y2="1490.6603" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id599_Graphic"><circle cx="691.8144" cy="1419.88025" r="28.346518" fill="#ff8000" fill-opacity=".5"/><path d="M 711.85834 1399.8363 C 722.92834 1410.90625 722.92834 1428.85425 711.85834 1439.9242 C 700.7884 1450.9943 682.8404 1450.9943 671.77045 1439.9242 C 660.70044 1428.85425 660.70044 1410.90625 671.77045 1399.8363 C 682.8404 1388.7662 700.7884 1388.7662 711.85834 1399.8363" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,5"/><text transform="translate(674.13727 1404.38025)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="8.2889767" y="25" textLength="18.776367">C</tspan></text></g><line x1="691.8196" y1="1448.7267" x2="691.82715" y2="1490.80725" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><line x1="788.66077" y1="1419.88025" x2="730.56085" y2="1419.88025" marker-end="url(#FilledDiamond_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" stroke-dasharray="1,3"/><text transform="translate(557.16095 1491.30725)" fill="blue"><tspan font-family="Helvetica" font-size="17" font-weight="bold" fill="blue" x=".13012695" y="16" textLength="72.739746">Obsolete</tspan></text><g id="id604_Graphic"><path d="M 548.05884 1393.9442 C 562.8297 1376.26746 597.9101 1370.3754 620.06622 1383.5195 C 642.22168 1396.6632 634.83734 1456.4924 622.8358 1458.3053 C 610.83466 1460.118 577.60083 1466.9171 560.06024 1461.0248 C 542.51978 1455.1326 533.28845 1411.6206 548.05884 1393.9442 Z" fill="#ff8000" fill-opacity=".15000001"/><path d="M 548.05884 1393.9442 C 562.8297 1376.26746 597.9101 1370.3754 620.06622 1383.5195 C 642.22168 1396.6632 634.83734 1456.4924 622.8358 1458.3053 C 610.83466 1460.118 577.60083 1466.9171 560.06024 1461.0248 C 542.51978 1455.1326 533.28845 1411.6206 548.05884 1393.9442 Z" stroke="#ff8000" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" stroke-dasharray="4,9,1,5"/></g><text transform="translate(551.5074 1339.08044)" fill="#ff8000"><tspan font-family="Helvetica" font-size="17" font-weight="bold" fill="#ff8000" x=".103271484" y="16" textLength="71.793457">Unstable</tspan></text><line x1="631.31445" y1="1469.267" x2="752.31433" y2="1469.267" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" stroke-dasharray="4,3,1,3"/><text transform="translate(712.3343 1373.30725)" fill="maroon"><tspan font-family="Helvetica" font-size="17" font-weight="bold" fill="maroon" x=".103271484" y="16" textLength="54.793457">extinct</tspan></text><text transform="translate(580.1609 1539.234)" fill="#008040"><tspan font-family="Helvetica" font-size="17" font-weight="bold" fill="#008040" x=".13012695" y="16" textLength="89.739746">suspended</tspan></text></g></g></svg>
--- a/docs/figures/error-obsolete.svg Tue Jun 23 16:49:24 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="125 130 278 413" width="278pt" height="413pt"><metadata xmlns:dc="http://purl.org/dc/elements/1.1/"><dc:date>2012-03-18 23:47Z</dc:date><!-- Produced by OmniGraffle Professional 5.3.6 --></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="3.488"/><feOffset in="blur" result="offset" dx="0" dy="4"/><feFlood flood-color="black" flood-opacity=".75" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="26" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.31641" slope="0" x-height="522.94922" cap-height="717.2852" ascent="770.0196" descent="-229.98048" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledDiamond_Marker" viewBox="-1 -2 4 4" markerWidth="4" markerHeight="4" color="blue"><g><path d="M 1.6 0 L .8 -.60000002 L 0 0 L .8 .60000002 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="17" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><g><title>Layer 1</title><g><use xl:href="#id411_Graphic" filter="url(#Shadow)"/><use xl:href="#id410_Graphic" filter="url(#Shadow)"/><use xl:href="#id408_Graphic" filter="url(#Shadow)"/><use xl:href="#id407_Graphic" filter="url(#Shadow)"/><use xl:href="#id395_Graphic" filter="url(#Shadow)"/><use xl:href="#id394_Graphic" filter="url(#Shadow)"/><use xl:href="#id391_Graphic" filter="url(#Shadow)"/><use xl:href="#id390_Graphic" filter="url(#Shadow)"/><use xl:href="#id724_Graphic" filter="url(#Shadow)"/></g><g id="id411_Graphic"><rect x="145" y="146" width="238" height="373" fill="white" fill-opacity=".5"/><rect x="145" y="146" width="238" height="373" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id410_Graphic"><circle cx="290.34644" cy="351.50146" r="28.34651" fill="red"/><circle cx="290.34644" cy="351.50146" r="28.34651" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(272.66928 336.0015)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="216.72533" y1="434.68497" x2="271.22772" y2="373.10342" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id408_Graphic"><circle cx="207.00024" cy="445.67322" r="14.173263" fill="black"/><circle cx="207.00024" cy="445.67322" r="14.173263" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id407_Graphic"><circle cx="206.30316" cy="488.67325" r="14.173263" fill="black"/><circle cx="206.30316" cy="488.67325" r="14.173263" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="206.7624" y1="460.34457" x2="206.541" y2="474.0019" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id395_Graphic"><circle cx="206.30315" cy="266.11322" r="24.803194" fill="#ff8000" fill-opacity=".5"/><path d="M 223.8416 248.57477 C 233.52788 258.26099 233.52788 273.96545 223.8416 283.65167 C 214.15538 293.33795 198.45091 293.33795 188.76469 283.65167 C 179.07841 273.96545 179.07841 258.26099 188.76469 248.57477 C 198.45091 238.88849 214.15538 238.88849 223.8416 248.57477" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,5"/><text transform="translate(191.46063 250.61322)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="5.4543362" y="25" textLength="18.776367">C</tspan></text></g><g id="id394_Graphic"><circle cx="206.30315" cy="351.50146" r="24.803194" fill="yellow" fill-opacity=".5"/><path d="M 223.8416 333.96301 C 233.52788 343.64923 233.52788 359.3537 223.8416 369.03992 C 214.15538 378.7262 198.45091 378.7262 188.76469 369.03992 C 179.07841 359.3537 179.07841 343.64923 188.76469 333.96301 C 198.45091 324.27673 214.15538 324.27673 223.8416 333.96301" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,5"/><text transform="translate(191.46063 336.00146)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="6.1716213" y="25" textLength="17.341797">B</tspan></text></g><line x1="206.89162" y1="431.00034" x2="206.49045" y2="376.80396" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="206.30315" y1="326.1983" x2="206.30315" y2="291.41638" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id391_Graphic"><circle cx="290.34644" cy="269.6565" r="28.346504" fill="yellow"/><circle cx="290.34644" cy="269.6565" r="28.346504" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(272.66928 254.15652)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="6.1180782" y="25" textLength="23.118164">B’</tspan></text></g><g id="id390_Graphic"><circle cx="290.34644" cy="187.80643" r="28.3465" fill="#ff8000"/><circle cx="290.34644" cy="187.80643" r="28.3465" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(272.66928 172.30643)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="5.400793" y="25" textLength="24.552734">C’</tspan></text></g><line x1="290.34644" y1="322.655" x2="290.34644" y2="298.50296" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><line x1="290.3464" y1="240.81003" x2="290.3464" y2="216.65289" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><line x1="269.24112" y1="207.47118" x2="232.0592" y2="242.11519" marker-end="url(#FilledDiamond_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" stroke-dasharray="1,3"/><line x1="269.68039" y1="289.78198" x2="231.52318" y2="326.9411" marker-end="url(#FilledDiamond_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" stroke-dasharray="1,3"/><text transform="translate(154.02574 177.80643)" fill="blue"><tspan font-family="Helvetica" font-size="17" font-weight="bold" fill="blue" x=".13012695" y="16" textLength="72.739746">Obsolete</tspan></text><g id="id724_Graphic"><path d="M 167.93994 250.66768 C 182.56549 215.87003 217.30066 204.27097 239.23875 230.14594 C 261.17621 256.02005 253.8645 373.79715 241.98106 377.36597 C 230.09801 380.93442 197.19122 394.31873 179.82327 382.71951 C 162.45541 371.1203 153.31494 285.46457 167.93994 250.66768 Z" fill="blue" fill-opacity=".15000001"/><path d="M 167.93994 250.66768 C 182.56549 215.87003 217.30066 204.27097 239.23875 230.14594 C 261.17621 256.02005 253.8645 373.79715 241.98106 377.36597 C 230.09801 380.93442 197.19122 394.31873 179.82327 382.71951 C 162.45541 371.1203 153.31494 285.46457 167.93994 250.66768 Z" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" stroke-dasharray="4,9,1,5"/></g></g></g></svg>
--- a/docs/figures/error-unstable.svg Tue Jun 23 16:49:24 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="305 746 658 435" width="658pt" height="435pt"><metadata xmlns:dc="http://purl.org/dc/elements/1.1/"><dc:date>2012-03-18 23:47Z</dc:date><!-- Produced by OmniGraffle Professional 5.3.6 --></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="3.488"/><feOffset in="blur" result="offset" dx="0" dy="4"/><feFlood flood-color="black" flood-opacity=".75" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="26" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.31641" slope="0" x-height="522.94922" cap-height="717.2852" ascent="770.0196" descent="-229.98048" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledDiamond_Marker" viewBox="-1 -2 4 4" markerWidth="4" markerHeight="4" color="blue"><g><path d="M 1.6 0 L .8 -.60000002 L 0 0 L .8 .60000002 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="17" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="532.22656" cap-height="719.72656" ascent="770.01953" descent="-229.98047" font-weight="bold"><font-face-src><font-face-name name="Helvetica-Bold"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><g><title>Layer 1</title><g><use xl:href="#id672_Graphic" filter="url(#Shadow)"/><use xl:href="#id673_Graphic" filter="url(#Shadow)"/><use xl:href="#id674_Graphic" filter="url(#Shadow)"/><use xl:href="#id680_Graphic" filter="url(#Shadow)"/><use xl:href="#id689_Graphic" filter="url(#Shadow)"/><use xl:href="#id692_Graphic" filter="url(#Shadow)"/><use xl:href="#id702_Graphic" filter="url(#Shadow)"/><use xl:href="#id714_Graphic" filter="url(#Shadow)"/><use xl:href="#id688_Graphic" filter="url(#Shadow)"/></g><g id="id672_Graphic"><rect x="571.2267" y="762.23743" width="371" height="394" fill="white" fill-opacity=".5"/><rect x="571.2267" y="762.23743" width="371" height="394" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id673_Graphic"><rect x="325.28735" y="817.17517" width="160" height="280.84595" fill="white" fill-opacity=".5"/><rect x="325.28735" y="817.17517" width="160" height="280.84595" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id674_Graphic"><circle cx="403.28784" cy="960.2316" r="28.346495" fill="red"/><circle cx="403.28784" cy="960.2316" r="28.346495" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(385.61066 944.73157)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="390.51233" y1="934.3598" x2="373.12732" y2="899.1533" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><path d="M 413.30957 1027.8263 C 418.84457 1033.3613 418.84457 1042.3352 413.30957 1047.87024 C 407.77457 1053.4053 398.80057 1053.4053 393.26556 1047.87024 C 387.73056 1042.3352 387.73056 1033.3613 393.26556 1027.8263 C 398.80057 1022.29126 407.77457 1022.29126 413.30957 1027.8263" fill="black"/><path d="M 413.30957 1027.8263 C 418.84457 1033.3613 418.84457 1042.3352 413.30957 1047.87024 C 407.77457 1053.4053 398.80057 1053.4053 393.26556 1047.87024 C 387.73056 1042.3352 387.73056 1033.3613 393.26556 1027.8263 C 398.80057 1022.29126 407.77457 1022.29126 413.30957 1027.8263" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 413.30957 1073.8263 C 418.84457 1079.3613 418.84457 1088.3352 413.30957 1093.87024 C 407.77457 1099.4053 398.80057 1099.4053 393.26556 1093.87024 C 387.73056 1088.3352 387.73056 1079.3613 393.26556 1073.8263 C 398.80057 1068.29126 407.77457 1068.29126 413.30957 1073.8263" fill="black"/><path d="M 413.30957 1073.8263 C 418.84457 1079.3613 418.84457 1088.3352 413.30957 1093.87024 C 407.77457 1099.4053 398.80057 1099.4053 393.26556 1093.87024 C 387.73056 1088.3352 387.73056 1079.3613 393.26556 1073.8263 C 398.80057 1068.29126 407.77457 1068.29126 413.30957 1073.8263" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="403.1737" y1="1052.5211" x2="403.04446" y2="1069.1771" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id680_Graphic"><circle cx="360.3518" cy="873.2816" r="28.346495" fill="yellow"/><circle cx="360.3518" cy="873.2816" r="28.346495" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(342.67462 857.7816)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">B</tspan></text></g><line x1="403.28772" y1="989.078" x2="403.2876" y2="1023.17505" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><line x1="718.2204" y1="930.3955" x2="718.53784" y2="874.86414" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><path d="M 789.4242 1048.76624 C 794.95923 1054.3013 794.95923 1063.27515 789.4242 1068.8102 C 783.8892 1074.3452 774.9152 1074.3452 769.38025 1068.8102 C 763.8452 1063.27515 763.8452 1054.3013 769.38025 1048.76624 C 774.9152 1043.2312 783.8892 1043.2312 789.4242 1048.76624" fill="black"/><path d="M 789.4242 1048.76624 C 794.95923 1054.3013 794.95923 1063.27515 789.4242 1068.8102 C 783.8892 1074.3452 774.9152 1074.3452 769.38025 1068.8102 C 763.8452 1063.27515 763.8452 1054.3013 769.38025 1048.76624 C 774.9152 1043.2312 783.8892 1043.2312 789.4242 1048.76624" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><path d="M 789.4242 1094.7661 C 794.95923 1100.30115 794.95923 1109.275 789.4242 1114.81006 C 783.8892 1120.3451 774.9152 1120.3451 769.38025 1114.81006 C 763.8452 1109.275 763.8452 1100.30115 769.38025 1094.7661 C 774.9152 1089.2311 783.8892 1089.2311 789.4242 1094.7661" fill="black"/><path d="M 789.4242 1094.7661 C 794.95923 1100.30115 794.95923 1109.275 789.4242 1114.81006 C 783.8892 1120.3451 774.9152 1120.3451 769.38025 1114.81006 C 763.8452 1109.275 763.8452 1100.30115 769.38025 1094.7661 C 774.9152 1089.2311 783.8892 1089.2311 789.4242 1094.7661" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="779.4223" y1="1073.4614" x2="779.44507" y2="1090.1149" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id689_Graphic"><circle cx="718.0555" cy="959.24146" r="28.34648" fill="red" fill-opacity=".5"/><path d="M 738.09943 939.19757 C 749.16943 950.2675 749.16943 968.2155 738.09943 979.28546 C 727.0295 990.35547 709.0815 990.35547 698.01154 979.28546 C 686.94153 968.2155 686.94153 950.2675 698.01154 939.19757 C 709.0815 928.12756 727.0295 928.12756 738.09943 939.19757" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,5"/><text transform="translate(700.37836 943.7415)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="733.1928" y1="983.8047" x2="771.7024" y2="1046.2938" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><line x1="800.166" y1="959.2338" x2="756.80194" y2="959.2374" marker-end="url(#FilledDiamond_Marker)" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" stroke-dasharray="1,3"/><g id="id692_Graphic"><circle cx="829.01245" cy="959.23145" r="28.34648" fill="red"/><circle cx="829.01245" cy="959.23145" r="28.34648" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(811.33533 943.73145)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="6.5243282" y="25" textLength="22.305664">A'</tspan></text></g><line x1="816.1477" y1="985.059" x2="785.96265" y2="1045.65894" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><text transform="translate(687.9198 889.0216)" fill="blue"><tspan font-family="Helvetica" font-size="17" font-weight="bold" fill="blue" x=".13012695" y="16" textLength="72.739746">Obsolete</tspan></text><g id="id702_Graphic"><path d="M 678.60693 819.58557 C 693.37787 801.90887 728.45825 796.0167 750.6144 809.16083 C 772.7699 822.3045 765.3855 882.13373 753.38397 883.94666 C 741.3828 885.75934 708.149 892.5584 690.6084 886.66614 C 673.06793 880.7739 663.8366 837.26196 678.60693 819.58557 Z" fill="#ff8000" fill-opacity=".15000001"/><path d="M 678.60693 819.58557 C 693.37787 801.90887 728.45825 796.0167 750.6144 809.16083 C 772.7699 822.3045 765.3855 882.13373 753.38397 883.94666 C 741.3828 885.75934 708.149 892.5584 690.6084 886.66614 C 673.06793 880.7739 663.8366 837.26196 678.60693 819.58557 Z" stroke="#ff8000" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" stroke-dasharray="4,9,1,5"/></g><text transform="translate(674.40198 774.87)" fill="#ff8000"><tspan font-family="Helvetica" font-size="17" font-weight="bold" fill="#ff8000" x=".103271484" y="16" textLength="71.793457">Unstable</tspan></text><g id="id714_Graphic"><path d="M 679.4558 933.30554 C 694.08136 915.6288 728.81653 909.73657 750.75464 922.88074 C 772.6921 936.0244 765.38037 995.85364 753.49695 997.66656 C 741.6139 999.47925 708.7071 1006.2783 691.33917 1000.3861 C 673.9713 994.49384 664.8308 950.9819 679.4558 933.30554 Z" fill="blue" fill-opacity=".15000001"/><path d="M 679.4558 933.30554 C 694.08136 915.6288 728.81653 909.73657 750.75464 922.88074 C 772.6921 936.0244 765.38037 995.85364 753.49695 997.66656 C 741.6139 999.47925 708.7071 1006.2783 691.33917 1000.3861 C 673.9713 994.49384 664.8308 950.9819 679.4558 933.30554 Z" stroke="blue" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" stroke-dasharray="4,9,1,5"/></g><g id="id688_Graphic"><circle cx="718.0555" cy="845.52167" r="28.34648" fill="yellow"/><path d="M 738.09943 825.47766 C 749.16943 836.5476 749.16943 854.4956 738.09943 865.56555 C 727.0295 876.63556 709.0815 876.63556 698.01154 865.56555 C 686.94153 854.4956 686.94153 836.5476 698.01154 825.47766 C 709.0815 814.40765 727.0295 814.40765 738.09943 825.47766" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke-dasharray="16,9"/><text transform="translate(700.37836 830.0216)" fill="red"><tspan font-family="Helvetica" font-size="26" font-weight="500" fill="red" x="9.006262" y="25" textLength="17.341797">B</tspan></text></g></g></g></svg>
--- a/docs/figures/example-1-update.svg Tue Jun 23 16:49:24 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="47 621 426 249" width="426pt" height="249pt"><metadata xmlns:dc="http://purl.org/dc/elements/1.1/"><dc:date>2012-03-21 08:32Z</dc:date><!-- Produced by OmniGraffle Professional 5.3.6 --></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="3.488"/><feOffset in="blur" result="offset" dx="0" dy="4"/><feFlood flood-color="black" flood-opacity=".75" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="26" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.31641" slope="0" x-height="522.94922" cap-height="717.2852" ascent="770.0196" descent="-229.98048" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledDiamond_Marker" viewBox="-1 -3 6 6" markerWidth="6" markerHeight="6" color="red"><g><path d="M 3.7333333 0 L 1.8666667 -1.4 L 0 0 L 1.8666667 1.4 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><g><title>Layer 1</title><g><use xl:href="#id464_Graphic" filter="url(#Shadow)"/><use xl:href="#id463_Graphic" filter="url(#Shadow)"/><use xl:href="#id465_Graphic" filter="url(#Shadow)"/><use xl:href="#id466_Graphic" filter="url(#Shadow)"/><use xl:href="#id472_Graphic" filter="url(#Shadow)"/><use xl:href="#id471_Graphic" filter="url(#Shadow)"/><use xl:href="#id475_Graphic" filter="url(#Shadow)"/></g><g id="id464_Graphic"><rect x="67" y="637.9972" width="141" height="207.84595" fill="white" fill-opacity=".5"/><rect x="67" y="637.9972" width="141" height="207.84595" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id463_Graphic"><circle cx="128.71246" cy="718.34644" r="28.346489" fill="red"/><circle cx="128.71246" cy="718.34644" r="28.346489" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(111.035286 702.84644)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="128.93794" y1="770.9975" x2="128.83687" y2="747.19263" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><circle cx="129.000244" cy="785.6706" r="14.173275" fill="black"/><circle cx="129.000244" cy="785.6706" r="14.173275" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><circle cx="129.000244" cy="831.6706" r="14.173275" fill="black"/><circle cx="129.000244" cy="831.6706" r="14.173275" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="128.96199" y1="800.3438" x2="128.91855" y2="816.99756" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id465_Graphic"><rect x="277" y="637.99725" width="176" height="207.84595" fill="white" fill-opacity=".5"/><rect x="277" y="637.99725" width="176" height="207.84595" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id466_Graphic"><circle cx="407.34644" cy="703.95215" r="28.346495" fill="red"/><circle cx="407.34644" cy="703.95215" r="28.346495" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(389.66928 688.45215)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="6.1180782" y="25" textLength="23.118164">A’</tspan></text></g><line x1="378.9428" y1="772.1349" x2="396.34451" y2="730.6261" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id472_Graphic"><circle cx="373.26825" cy="785.67053" r="14.173267" fill="black"/><circle cx="373.26825" cy="785.67053" r="14.173267" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id471_Graphic"><circle cx="373.26825" cy="831.67053" r="14.173267" fill="black"/><circle cx="373.26825" cy="831.67053" r="14.173267" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="373.26837" y1="800.34375" x2="373.26852" y2="816.9973" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="365.1879" y1="773.41925" x2="335.23688" y2="728.00824" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id475_Graphic"><circle cx="319.30762" cy="703.95215" r="28.346495" fill="red" fill-opacity=".5"/><path d="M 339.35156 683.9082 C 350.4216 694.97815 350.4216 712.92615 339.35156 723.9961 C 328.28159 735.0661 310.33365 735.0661 299.26367 723.9961 C 288.19363 712.92615 288.19363 694.97815 299.26367 683.9082 C 310.33365 672.8382 328.28159 672.8382 339.35156 683.9082" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,5"/><text transform="translate(301.63046 688.45215)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="378.49997" y1="703.95215" x2="362.1041" y2="703.95215" marker-end="url(#FilledDiamond_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" stroke-dasharray="1,4"/></g></g></svg>
--- a/docs/figures/example-2-split.svg Tue Jun 23 16:49:24 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="27 1004 488 344" width="488pt" height="344pt"><metadata xmlns:dc="http://purl.org/dc/elements/1.1/"><dc:date>2012-03-21 08:32Z</dc:date><!-- Produced by OmniGraffle Professional 5.3.6 --></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="3.488"/><feOffset in="blur" result="offset" dx="0" dy="4"/><feFlood flood-color="black" flood-opacity=".75" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="26" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.31641" slope="0" x-height="522.94922" cap-height="717.2852" ascent="770.0196" descent="-229.98048" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><font-face font-family="Helvetica" font-size="15" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.316406" slope="0" x-height="522.94922" cap-height="717.28516" ascent="770.01953" descent="-229.98045" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledDiamond_Marker" viewBox="-1 -3 6 6" markerWidth="6" markerHeight="6" color="red"><g><path d="M 3.7333333 0 L 1.8666667 -1.4 L 0 0 L 1.8666667 1.4 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><g><title>Layer 1</title><g><use xl:href="#id478_Graphic" filter="url(#Shadow)"/><use xl:href="#id479_Graphic" filter="url(#Shadow)"/><use xl:href="#id481_Graphic" filter="url(#Shadow)"/><use xl:href="#id482_Graphic" filter="url(#Shadow)"/><use xl:href="#id485_Graphic" filter="url(#Shadow)"/><use xl:href="#id488_Graphic" filter="url(#Shadow)"/><use xl:href="#id489_Graphic" filter="url(#Shadow)"/><use xl:href="#id491_Graphic" filter="url(#Shadow)"/><use xl:href="#id492_Graphic" filter="url(#Shadow)"/><use xl:href="#id495_Graphic" filter="url(#Shadow)"/></g><g id="id478_Graphic"><rect x="47" y="1087.16406" width="143" height="202.84595" fill="white" fill-opacity=".5"/><rect x="47" y="1087.16406" width="143" height="202.84595" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id479_Graphic"><circle cx="118.50046" cy="1155.5105" r="28.346527" fill="#ff8000"/><circle cx="118.50046" cy="1155.5105" r="28.346527" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(100.823296 1140.0105)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="118.50029" y1="1215.66406" x2="118.50038" y2="1184.3569" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id481_Graphic"><path d="M 128.52223 1220.3153 C 134.05725 1225.85034 134.05725 1234.8242 128.52223 1240.35925 C 122.98724 1245.8943 114.013245 1245.8943 108.478256 1240.35925 C 102.94323 1234.8242 102.94323 1225.85034 108.478256 1220.3153 C 114.013245 1214.7803 122.98724 1214.7803 128.52223 1220.3153" fill="black"/><path d="M 128.52223 1220.3153 C 134.05725 1225.85034 134.05725 1234.8242 128.52223 1240.35925 C 122.98724 1245.8943 114.013245 1245.8943 108.478256 1240.35925 C 102.94323 1234.8242 102.94323 1225.85034 108.478256 1220.3153 C 114.013245 1214.7803 122.98724 1214.7803 128.52223 1220.3153" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id482_Graphic"><path d="M 128.52223 1265.8153 C 134.05725 1271.35034 134.05725 1280.3242 128.52223 1285.85925 C 122.98724 1291.3943 114.013245 1291.3943 108.478256 1285.85925 C 102.94323 1280.3242 102.94323 1271.35034 108.478256 1265.8153 C 114.013245 1260.2803 122.98724 1260.2803 128.52223 1265.8153" fill="black"/><path d="M 128.52223 1265.8153 C 134.05725 1271.35034 134.05725 1280.3242 128.52223 1285.85925 C 122.98724 1291.3943 114.013245 1291.3943 108.478256 1285.85925 C 102.94323 1280.3242 102.94323 1271.35034 108.478256 1265.8153 C 114.013245 1260.2803 122.98724 1260.2803 128.52223 1265.8153" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="118.500244" y1="1245.0105" x2="118.500244" y2="1261.1641" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id485_Graphic"><rect x="277" y="1020" width="218" height="303.08691" fill="white" fill-opacity=".5"/><rect x="277" y="1020" width="218" height="303.08691" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="384.58325" y1="1251.5149" x2="356.10718" y2="1212.0704" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id488_Graphic"><path d="M 403.19525 1253.3916 C 408.73026 1258.9266 408.73026 1267.9005 403.19525 1273.43555 C 397.66025 1278.9706 388.68625 1278.9706 383.15125 1273.43555 C 377.61624 1267.9005 377.61624 1258.9266 383.15125 1253.3916 C 388.68625 1247.8566 397.66025 1247.8566 403.19525 1253.3916" fill="black"/><path d="M 403.19525 1253.3916 C 408.73026 1258.9266 408.73026 1267.9005 403.19525 1273.43555 C 397.66025 1278.9706 388.68625 1278.9706 383.15125 1273.43555 C 377.61624 1267.9005 377.61624 1258.9266 383.15125 1253.3916 C 388.68625 1247.8566 397.66025 1247.8566 403.19525 1253.3916" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id489_Graphic"><path d="M 403.19525 1298.8916 C 408.73026 1304.4266 408.73026 1313.4005 403.19525 1318.93555 C 397.66025 1324.4706 388.68625 1324.4706 383.15125 1318.93555 C 377.61624 1313.4005 377.61624 1304.4266 383.15125 1298.8916 C 388.68625 1293.3566 397.66025 1293.3566 403.19525 1298.8916" fill="black"/><path d="M 403.19525 1298.8916 C 408.73026 1304.4266 408.73026 1313.4005 403.19525 1318.93555 C 397.66025 1324.4706 388.68625 1324.4706 383.15125 1318.93555 C 377.61624 1313.4005 377.61624 1304.4266 383.15125 1298.8916 C 388.68625 1293.3566 397.66025 1293.3566 403.19525 1298.8916" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="393.17325" y1="1278.0868" x2="393.17325" y2="1294.24036" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id491_Graphic"><circle cx="437.34644" cy="1188.5874" r="28.346533" fill="red"/><circle cx="437.34644" cy="1188.5874" r="28.346533" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(419.66928 1171.0874)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="4.8351192" y="25" textLength="17.341797">A</tspan><tspan font-family="Helvetica" font-size="15" font-weight="500" x="22.176916" y="32" textLength="8.342285">1</tspan></text></g><g id="id492_Graphic"><circle cx="437.34644" cy="1105.34644" r="28.346533" fill="yellow"/><circle cx="437.34644" cy="1105.34644" r="28.346533" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(419.66928 1087.84644)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="4.8351192" y="25" textLength="17.341797">A</tspan><tspan font-family="Helvetica" font-size="15" font-weight="500" x="22.176916" y="32" textLength="8.342285">2</tspan></text></g><line x1="400.63443" y1="1250.7749" x2="422.67834" y2="1213.4341" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><line x1="437.3464" y1="1159.741" x2="437.3464" y2="1134.1929" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id495_Graphic"><circle cx="339.34644" cy="1188.5874" r="28.346533" fill="#ff8000"/><path d="M 359.39038 1168.54346 C 370.46042 1179.6134 370.46042 1197.5614 359.39038 1208.63135 C 348.3204 1219.7014 330.37247 1219.7014 319.30249 1208.63135 C 308.23245 1197.5614 308.23245 1179.6134 319.30249 1168.54346 C 330.37247 1157.4734 348.3204 1157.4734 359.39038 1168.54346" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,5"/><text transform="translate(321.66928 1173.0874)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="393.50046" y1="1152" x2="374.81244" y2="1164.626" marker-end="url(#FilledDiamond_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" stroke-dasharray="1,4"/><line x1="417.8144" y1="1126.5746" x2="393.50046" y2="1153" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" stroke-dasharray="1,4"/><line x1="416.74606" y1="1168.3948" x2="399" y2="1151" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" stroke-dasharray="1,4"/></g></g></svg>
--- a/docs/figures/explain-troubles-concurrent-10-solution.svg Tue Jun 23 16:49:24 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,929 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="1290.3188"
- height="561.80957"
- id="svg12094"
- version="1.1"
- inkscape:version="0.48.3.1 r9886"
- sodipodi:docname="explain-troubles-concurrent-10-solution.svg">
- <defs
- id="defs12096">
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="EmptyDiamondMend"
- style="overflow:visible">
- <path
- id="path4197"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMstart"
- orient="auto"
- refY="0"
- refX="0"
- id="EmptyDiamondMstart"
- style="overflow:visible">
- <path
- id="path4188"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,2.6,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM"
- style="overflow:visible">
- <path
- id="path6393"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotS"
- orient="auto"
- refY="0"
- refX="0"
- id="DotS"
- style="overflow:visible">
- <path
- id="path6396"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.2,0,0,0.2,1.48,0.2)"
- inkscape:connector-curvature="0" />
- </marker>
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 526.18109 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="744.09448 : 526.18109 : 1"
- inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
- id="perspective12102" />
- <pattern
- patternUnits="userSpaceOnUse"
- width="165"
- height="162.14285"
- patternTransform="matrix(0.60606061,0,0,0.61674011,-218.21429,419.14788)"
- id="pattern12110">
- <rect
- ry="78.664986"
- y="2.4064403"
- x="2.4064403"
- height="157.32997"
- width="160.18712"
- id="rect12108"
- style="opacity:0.75;fill:#008000;fill-opacity:0;fill-rule:nonzero;stroke:#008000;stroke-width:4.81288052;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
- </pattern>
- <inkscape:perspective
- id="perspective12641"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <inkscape:perspective
- id="perspective12674"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <inkscape:perspective
- id="perspective12705"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <inkscape:perspective
- id="perspective12705-5"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <inkscape:perspective
- id="perspective12811"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <inkscape:perspective
- id="perspective12838"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <inkscape:perspective
- id="perspective12869"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <inkscape:perspective
- id="perspective12869-3"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <inkscape:perspective
- id="perspective8199"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <inkscape:perspective
- id="perspective8230"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-1"
- style="overflow:visible">
- <path
- inkscape:connector-curvature="0"
- id="path6393-0"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker3407"
- style="overflow:visible">
- <path
- inkscape:connector-curvature="0"
- id="path3409"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker3411"
- style="overflow:visible">
- <path
- inkscape:connector-curvature="0"
- id="path3413"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker3415"
- style="overflow:visible">
- <path
- inkscape:connector-curvature="0"
- id="path3417"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="EmptyDiamondMend-9"
- style="overflow:visible">
- <path
- inkscape:connector-curvature="0"
- id="path4197-6"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="marker3421"
- style="overflow:visible">
- <path
- inkscape:connector-curvature="0"
- id="path3423"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-15"
- style="overflow:visible">
- <path
- inkscape:connector-curvature="0"
- id="path6393-08"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker3824"
- style="overflow:visible">
- <path
- inkscape:connector-curvature="0"
- id="path3826"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker3828"
- style="overflow:visible">
- <path
- inkscape:connector-curvature="0"
- id="path3830"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker3832"
- style="overflow:visible">
- <path
- inkscape:connector-curvature="0"
- id="path3834"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="EmptyDiamondMend-7"
- style="overflow:visible">
- <path
- inkscape:connector-curvature="0"
- id="path4197-67"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="marker3838"
- style="overflow:visible">
- <path
- inkscape:connector-curvature="0"
- id="path3840"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)" />
- </marker>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="0.7"
- inkscape:cx="746.41279"
- inkscape:cy="248.41683"
- inkscape:document-units="px"
- inkscape:current-layer="g3367-2"
- showgrid="false"
- inkscape:window-width="1215"
- inkscape:window-height="776"
- inkscape:window-x="65"
- inkscape:window-y="24"
- inkscape:window-maximized="1"
- fit-margin-left="5"
- fit-margin-top="5"
- fit-margin-right="5"
- fit-margin-bottom="5" />
- <metadata
- id="metadata12099">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(1002.1836,-116.82843)">
- <flowRoot
- transform="translate(-214.28571,111.42857)"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- id="flowRoot12902"
- xml:space="preserve"><flowRegion
- id="flowRegion12904"><rect
- y="320.93362"
- x="-924.28571"
- height="435.71429"
- width="301.42856"
- id="rect12906" /></flowRegion><flowPara
- id="flowPara12908" /></flowRoot> <g
- id="g3367">
- <g
- style="opacity:0.5"
- id="g8425">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-750.72428,151.88146)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-822.54358"
- y="362.2431"
- id="text12629-9-3-1"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0"
- x="-822.54358"
- y="362.2431">B</tspan></text>
- </g>
- <g
- id="g10287">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-9"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-750.72428,288.54815)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-821.49023"
- y="498.90979"
- id="text12629-9-3-1-8"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-7"
- x="-821.49023"
- y="498.90979">A</tspan></text>
- </g>
- <g
- transform="translate(-10.776028,0)"
- id="g12957">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-6"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-810.71423"
- y="635.57648"
- id="text12629-9-3-1-83"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-5"
- x="-810.71423"
- y="635.57648">Z</tspan></text>
- </g>
- <path
- inkscape:connector-type="polyline"
- id="path12950"
- d="m -808.27602,393.39505 0,42.40522"
- style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connection-end="#g12957"
- inkscape:connector-type="polyline"
- id="path12962"
- d="m -808.27602,532.73368 0,39.73323"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <g
- style="fill:#0000ff;stroke:#0000ff"
- id="g8286">
- <path
- sodipodi:type="arc"
- style="fill:#0000ff;fill-opacity:0;fill-rule:evenodd;stroke:#0000ff;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-5"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-612.86713,62.419408)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#0000ff;fill-opacity:1;stroke:#0000ff;font-family:Bitstream Vera Sans"
- x="-684.68646"
- y="272.78107"
- id="text12629-9-3-1-4"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-76"
- x="-684.68646"
- y="272.78107">B'</tspan></text>
- </g>
- <g
- style="fill:#008000;stroke:#008000"
- id="g8294">
- <path
- sodipodi:type="arc"
- style="fill:#008000;fill-opacity:0;fill-rule:evenodd;stroke:#008000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-5-2"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-888.58143,62.419408)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#008000;fill-opacity:1;stroke:#008000;font-family:Bitstream Vera Sans"
- x="-960.40076"
- y="272.78107"
- id="text12629-9-3-1-4-8"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-76-6"
- x="-960.40076"
- y="272.78107">B''</tspan></text>
- </g>
- <path
- inkscape:connection-end="#g10287"
- inkscape:connection-start="#g8286"
- inkscape:connector-type="polyline"
- transform="translate(-997.6235,206.6479)"
- id="path8303"
- d="M 301.69976,93.326264 214.85234,235.78314"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM);display:inline"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connection-end="#g10287"
- inkscape:connection-start="#g8294"
- inkscape:connector-type="polyline"
- transform="translate(-997.6235,206.6479)"
- id="path8305"
- d="M 76.995186,93.326264 163.84261,235.78314"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM);display:inline"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connection-end="#g8425"
- inkscape:connection-start="#g8286"
- inkscape:connector-type="polyline"
- transform="translate(-997.6235,206.6479)"
- id="path8430"
- d="M 286.10442,78.162204 230.44767,114.28051"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-start:none;marker-end:url(#EmptyDiamondMend)"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connection-end="#g8425"
- inkscape:connection-start="#g8294"
- inkscape:connector-type="polyline"
- transform="translate(-997.6235,206.6479)"
- id="path8432"
- d="M 92.590525,78.162204 148.24727,114.28051"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-end:url(#EmptyDiamondMend)"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- </g>
- <g
- id="g3367-2"
- transform="translate(902.50523,0.6852693)">
- <g
- style="opacity:0.5"
- id="g8425-2">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-64"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-750.72428,151.88146)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-822.54358"
- y="362.2431"
- id="text12629-9-3-1-6"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-1"
- x="-822.54358"
- y="362.2431">B</tspan></text>
- </g>
- <g
- id="g10287-0">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-9-6"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-750.72428,288.54815)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-821.49023"
- y="498.90979"
- id="text12629-9-3-1-8-5"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-7-9"
- x="-821.49023"
- y="498.90979">A</tspan></text>
- </g>
- <g
- transform="translate(-10.776028,0)"
- id="g12957-1">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-6-6"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-810.71423"
- y="635.57648"
- id="text12629-9-3-1-83-8"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-5-0"
- x="-810.71423"
- y="635.57648">Z</tspan></text>
- </g>
- <path
- inkscape:connector-type="polyline"
- id="path12950-6"
- d="m -808.27602,393.39505 0,42.40522"
- style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connection-end="#g12957-1"
- inkscape:connector-type="polyline"
- id="path12962-4"
- d="m -808.27602,532.73368 0,39.73323"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <g
- style="opacity:0.5;fill:#0000ff;stroke:#0000ff"
- id="g8286-9">
- <path
- sodipodi:type="arc"
- style="fill:#0000ff;fill-opacity:0;fill-rule:evenodd;stroke:#0000ff;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-5-9"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-612.86713,62.419408)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#0000ff;fill-opacity:1;stroke:#0000ff;font-family:Bitstream Vera Sans"
- x="-684.68646"
- y="272.78107"
- id="text12629-9-3-1-4-0"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-76-0"
- x="-684.68646"
- y="272.78107">B'</tspan></text>
- </g>
- <g
- style="opacity:0.5;fill:#008000;stroke:#008000"
- id="g8294-9">
- <path
- sodipodi:type="arc"
- style="fill:#008000;fill-opacity:0;fill-rule:evenodd;stroke:#008000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-5-2-8"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-888.58143,62.419408)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#008000;fill-opacity:1;stroke:#008000;font-family:Bitstream Vera Sans"
- x="-960.40076"
- y="272.78107"
- id="text12629-9-3-1-4-8-2"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-76-6-0"
- x="-960.40076"
- y="272.78107">B''</tspan></text>
- </g>
- <path
- inkscape:connection-end="#g10287-0"
- inkscape:connection-start="#g8286-9"
- inkscape:connector-type="polyline"
- transform="translate(-997.6235,206.6479)"
- id="path8303-7"
- d="M 301.69976,93.326264 214.85234,235.78314"
- style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM);display:inline"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connection-end="#g10287-0"
- inkscape:connection-start="#g8294-9"
- inkscape:connector-type="polyline"
- transform="translate(-997.6235,206.6479)"
- id="path8305-3"
- d="M 76.995186,93.326264 163.84261,235.78314"
- style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM);display:inline"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connection-end="#g8425-2"
- inkscape:connection-start="#g8286-9"
- inkscape:connector-type="polyline"
- transform="translate(-997.6235,206.6479)"
- id="path8430-0"
- d="M 286.10442,78.162204 230.44767,114.28051"
- style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-start:none;marker-end:url(#EmptyDiamondMend)"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connection-end="#g8425-2"
- inkscape:connection-start="#g8294-9"
- inkscape:connector-type="polyline"
- transform="translate(-997.6235,206.6479)"
- id="path8432-1"
- d="M 92.590525,78.162204 148.24727,114.28051"
- style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-end:url(#EmptyDiamondMend)"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <path
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-end:url(#marker3838)"
- d="m 1045.7143,-14.223969 -54.28573,30"
- id="path5991"
- inkscape:connector-curvature="0"
- transform="translate(-1900.1287,205.96263)" />
- <path
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-end:url(#marker3838)"
- d="M 1141.4286,-4.2239685 1185.7143,24.34746"
- id="path5993"
- inkscape:connector-curvature="0"
- transform="translate(-1900.1287,205.96263)" />
- <path
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#marker3832)"
- d="m 1068.5714,11.490317 -62.8571,88.571433 70,132.85714"
- id="path5995"
- inkscape:connector-curvature="0"
- transform="translate(-1900.1287,205.96263)" />
- </g>
- <g
- id="g5033">
- <path
- transform="matrix(0.33294398,0,0,0.48990327,-283.50522,302.96994)"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- sodipodi:ry="100"
- sodipodi:rx="147.14285"
- sodipodi:cy="399.50504"
- sodipodi:cx="-172.85715"
- id="path12627-8-4-1-3"
- style="opacity:0.5;fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc" />
- <text
- id="text12629-9-3-1-0"
- y="513.3316"
- x="-355.32452"
- style="font-size:40px;font-style:normal;font-weight:normal;opacity:0.5;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="513.3316"
- x="-355.32452"
- id="tspan12631-6-9-0-8"
- sodipodi:role="line">B</tspan></text>
- </g>
- <g
- id="g5028">
- <path
- transform="matrix(0.33294398,0,0,0.48990327,-146.5298,215.57827)"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- sodipodi:ry="100"
- sodipodi:rx="147.14285"
- sodipodi:cy="399.50504"
- sodipodi:cx="-172.85715"
- id="path12627-8-4-1-5-1"
- style="fill:#0000ff;fill-opacity:0;fill-rule:evenodd;stroke:#0000ff;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc" />
- <text
- id="text12629-9-3-1-4-9"
- y="425.93994"
- x="-218.34914"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#0000ff;fill-opacity:1;stroke:#0000ff;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="425.93994"
- x="-218.34914"
- id="tspan12631-6-9-0-76-8"
- sodipodi:role="line">B'</tspan></text>
- </g>
- <g
- id="g5023">
- <path
- transform="matrix(0.33294398,0,0,0.48990327,-422.14656,215.91205)"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- sodipodi:ry="100"
- sodipodi:rx="147.14285"
- sodipodi:cy="399.50504"
- sodipodi:cx="-172.85715"
- id="path12627-8-4-1-5-2-4"
- style="fill:#008000;fill-opacity:0;fill-rule:evenodd;stroke:#008000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc" />
- <text
- id="text12629-9-3-1-4-8-3"
- y="426.27371"
- x="-493.96588"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#008000;fill-opacity:1;stroke:#008000;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="426.27371"
- x="-493.96588"
- id="tspan12631-6-9-0-76-6-4"
- sodipodi:role="line">B''</tspan></text>
- </g>
- <g
- id="g5018">
- <path
- transform="matrix(0.33294398,0,0,0.48990327,-285.48057,130.5673)"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- sodipodi:ry="100"
- sodipodi:rx="147.14285"
- sodipodi:cy="399.50504"
- sodipodi:cx="-172.85715"
- id="path12627-8-4-1-5-1-4"
- style="fill:#0000ff;fill-opacity:0;fill-rule:evenodd;stroke:#007d7d;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc" />
- <text
- id="text12629-9-3-1-4-9-5"
- y="340.92896"
- x="-357.2999"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#0000ff;fill-opacity:1;stroke:#007d7d;stroke-opacity:1;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="340.92896"
- x="-357.2999"
- id="tspan12631-6-9-0-76-8-9"
- sodipodi:role="line"
- style="fill:#007d7d;fill-opacity:1">B*</tspan></text>
- </g>
- <path
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-end:url(#marker3838)"
- d="m 696.38676,145.20902 55.35962,33.86937"
- id="path5038"
- inkscape:connector-type="polyline"
- inkscape:connector-curvature="3"
- inkscape:connection-start="#g5018"
- inkscape:connection-start-point="d4"
- inkscape:connection-end="#g5028"
- inkscape:connection-end-point="d4"
- transform="translate(-997.6235,206.6479)" />
- <path
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-end:url(#marker3838)"
- d="m 613.03214,145.59088 -53.54791,33.43943"
- id="path5040"
- inkscape:connector-type="polyline"
- inkscape:connector-curvature="3"
- inkscape:connection-start="#g5018"
- inkscape:connection-start-point="d4"
- inkscape:connection-end="#g5023"
- inkscape:connection-end-point="d4"
- transform="translate(-997.6235,206.6479)" />
- <path
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-end:url(#marker3838)"
- d="m 559.41952,231.03876 55.65269,34.94632"
- id="path5042"
- inkscape:connector-type="polyline"
- inkscape:connector-curvature="3"
- inkscape:connection-start="#g5023"
- inkscape:connection-start-point="d4"
- inkscape:connection-end="#g5033"
- inkscape:connection-end-point="d4"
- transform="translate(-997.6235,206.6479)" />
- <path
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-end:url(#marker3838)"
- d="M 752.23638,231.00256 697.87211,265.6875"
- id="path5044"
- inkscape:connector-type="polyline"
- inkscape:connector-curvature="3"
- inkscape:connection-start="#g5028"
- inkscape:connection-start-point="d4"
- inkscape:connection-end="#g5033"
- inkscape:connection-end-point="d4"
- transform="translate(-997.6235,206.6479)" />
- <g
- transform="translate(441.1231,-152.43362)"
- id="g5018-9">
- <path
- transform="matrix(0.33294398,0,0,0.48990327,-285.48057,130.5673)"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- sodipodi:ry="100"
- sodipodi:rx="147.14285"
- sodipodi:cy="399.50504"
- sodipodi:cx="-172.85715"
- id="path12627-8-4-1-5-1-4-7"
- style="fill:#0000ff;fill-opacity:0;fill-rule:evenodd;stroke:#007d7d;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc" />
- <text
- id="text12629-9-3-1-4-9-5-1"
- y="340.92896"
- x="-357.2999"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#0000ff;fill-opacity:1;stroke:#007d7d;stroke-opacity:1;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="340.92896"
- x="-357.2999"
- id="tspan12631-6-9-0-76-8-9-4"
- sodipodi:role="line"
- style="fill:#007d7d;fill-opacity:1">B*</tspan></text>
- </g>
- </g>
-</svg>
--- a/docs/figures/explain-troubles-concurrent-10-sumup.svg Tue Jun 23 16:49:24 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1451 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="1424.2434"
- height="1058.7501"
- id="svg12964"
- version="1.1"
- inkscape:version="0.48.3.1 r9886"
- sodipodi:docname="explain-troubles-concurrent-10-sumup.svg">
- <defs
- id="defs12966">
- <marker
- inkscape:stockid="Arrow1Mend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Mend"
- style="overflow:visible">
- <path
- id="path4078"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.4,0,0,-0.4,-4,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend"
- style="overflow:visible">
- <path
- id="path4072"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.8,0,0,-0.8,-10,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Lstart"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lstart"
- style="overflow:visible">
- <path
- id="path4069"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.8,0,0,0.8,10,0)" />
- </marker>
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 526.18109 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="744.09448 : 526.18109 : 1"
- inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
- id="perspective12972" />
- <inkscape:perspective
- id="perspective13312"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM"
- style="overflow:visible">
- <path
- id="path6393"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13318"
- style="overflow:visible">
- <path
- id="path13320"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <inkscape:perspective
- id="perspective13418"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-1"
- style="overflow:visible">
- <path
- id="path6393-1"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13424"
- style="overflow:visible">
- <path
- id="path13426"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13428"
- style="overflow:visible">
- <path
- id="path13430"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13432"
- style="overflow:visible">
- <path
- id="path13434"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="EmptyDiamondMend"
- style="overflow:visible">
- <path
- id="path6456"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13438"
- style="overflow:visible">
- <path
- id="path13440"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)" />
- </marker>
- <inkscape:perspective
- id="perspective13583"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-0"
- style="overflow:visible">
- <path
- id="path6393-5"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13589"
- style="overflow:visible">
- <path
- id="path13591"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13593"
- style="overflow:visible">
- <path
- id="path13595"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <inkscape:perspective
- id="perspective13743"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-2"
- style="overflow:visible">
- <path
- id="path6393-2"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13749"
- style="overflow:visible">
- <path
- id="path13751"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13753"
- style="overflow:visible">
- <path
- id="path13755"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13757"
- style="overflow:visible">
- <path
- id="path13759"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="EmptyDiamondMend-3"
- style="overflow:visible">
- <path
- id="path6456-4"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13763"
- style="overflow:visible">
- <path
- id="path13765"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)" />
- </marker>
- <inkscape:perspective
- id="perspective15593"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend-2"
- style="overflow:visible">
- <path
- id="path4072-8"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.8,0,0,-0.8,-10,0)" />
- </marker>
- <inkscape:perspective
- id="perspective15593-5"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend-6"
- style="overflow:visible">
- <path
- id="path4072-7"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.8,0,0,-0.8,-10,0)" />
- </marker>
- <inkscape:perspective
- id="perspective15593-1"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend-29"
- style="overflow:visible">
- <path
- id="path4072-70"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.8,0,0,-0.8,-10,0)" />
- </marker>
- <inkscape:perspective
- id="perspective18500"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-4"
- style="overflow:visible">
- <path
- id="path6393-20"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <inkscape:perspective
- id="perspective18588"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-47"
- style="overflow:visible">
- <path
- id="path6393-22"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker18594"
- style="overflow:visible">
- <path
- id="path18596"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="EmptyDiamondMend-31"
- style="overflow:visible">
- <path
- id="path4197"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)" />
- </marker>
- <inkscape:perspective
- id="perspective18791"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <inkscape:perspective
- id="perspective18959"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-6"
- style="overflow:visible">
- <path
- id="path6393-21"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker18965"
- style="overflow:visible">
- <path
- id="path18967"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-1-4"
- style="overflow:visible">
- <path
- id="path6393-3"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="EmptyDiamondMend-2"
- style="overflow:visible">
- <path
- id="path4197-2"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)" />
- </marker>
- <inkscape:perspective
- id="perspective19288"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-44"
- style="overflow:visible">
- <path
- id="path6393-9"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker19294"
- style="overflow:visible">
- <path
- id="path19296"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <inkscape:perspective
- id="perspective20729"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-8"
- style="overflow:visible">
- <path
- id="path6393-7"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker20735"
- style="overflow:visible">
- <path
- id="path20737"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <inkscape:perspective
- id="perspective20952"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-42"
- style="overflow:visible">
- <path
- id="path6393-0"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker20958"
- style="overflow:visible">
- <path
- id="path20960"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker20962"
- style="overflow:visible">
- <path
- id="path20964"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="EmptyDiamondMend-8"
- style="overflow:visible">
- <path
- id="path4197-7"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)" />
- </marker>
- <inkscape:perspective
- id="perspective21100"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-22"
- style="overflow:visible">
- <path
- id="path6393-8"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker21106"
- style="overflow:visible">
- <path
- id="path21108"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker21110"
- style="overflow:visible">
- <path
- id="path21112"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="EmptyDiamondMend-313"
- style="overflow:visible">
- <path
- id="path4197-6"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)" />
- </marker>
- <inkscape:perspective
- id="perspective21316"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-3"
- style="overflow:visible">
- <path
- id="path6393-80"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker21322"
- style="overflow:visible">
- <path
- id="path21324"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker21326"
- style="overflow:visible">
- <path
- id="path21328"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker21330"
- style="overflow:visible">
- <path
- id="path21332"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="EmptyDiamondMend-6"
- style="overflow:visible">
- <path
- id="path4197-66"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="marker21336"
- style="overflow:visible">
- <path
- id="path21338"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)" />
- </marker>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="0.58"
- inkscape:cx="455.19061"
- inkscape:cy="725.32431"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- inkscape:window-width="1280"
- inkscape:window-height="776"
- inkscape:window-x="0"
- inkscape:window-y="24"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata12969">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(312.26788,374.46262)">
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="290.07355"
- y="683.72107"
- id="text13894"><tspan
- sodipodi:role="line"
- id="tspan13896"
- x="290.07355"
- y="683.72107">Local</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="176.47943"
- y="147.90836"
- id="text13898"><tspan
- sodipodi:role="line"
- id="tspan13900"
- x="176.47943"
- y="147.90836">Distant</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="731.52625"
- y="360.52893"
- id="text13902"><tspan
- sodipodi:role="line"
- id="tspan13904"
- x="731.52625"
- y="360.52893">final = <tspan
- style="fill:#ff0000;stroke:#ff0000"
- id="tspan14035">divergent</tspan></tspan></text>
- <path
- style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow1Mend)"
- d="M -149.51243,71.715908 116.10904,-98.285798"
- id="path14093" />
- <path
- style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow1Mend)"
- d="M -136.88118,173.93586 140.19146,310.32109"
- id="path14093-1" />
- <path
- style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow1Mend)"
- d="m 358.73418,-10.742763 276.5932,40.995518"
- id="path14093-4"
- inkscape:transform-center-x="38.2665"
- inkscape:transform-center-y="-14.191534" />
- <path
- style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow1Mend)"
- d="M 385.49434,405.82501 666.42726,306.55019"
- id="path14093-42" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-316.03741"
- y="327.08148"
- id="text13894-3"><tspan
- sodipodi:role="line"
- id="tspan13896-8"
- x="-316.03741"
- y="327.08148">initial</tspan></text>
- <g
- transform="translate(536.95625,-391.35879)"
- id="g20705">
- <g
- transform="translate(0,5.2380981)"
- id="g12933-0">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-98"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,146.64336)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-811.76758"
- y="357.005"
- id="text12629-9-3-1-2"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-3"
- x="-811.76758"
- y="357.005">B</tspan></text>
- </g>
- <g
- id="g12945">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-9"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,288.54815)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-810.71423"
- y="498.90979"
- id="text12629-9-3-1-8"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-7"
- x="-810.71423"
- y="498.90979">A</tspan></text>
- </g>
- <g
- id="g12957">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-6"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-810.71423"
- y="635.57648"
- id="text12629-9-3-1-83"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-5"
- x="-810.71423"
- y="635.57648">Z</tspan></text>
- </g>
- <path
- inkscape:connection-end="#g12945"
- inkscape:connection-start="#g12933-0"
- inkscape:connector-type="polyline"
- id="path12950-93"
- d="m -797.5,393.91867 0,41.35798"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connection-end="#g12957"
- inkscape:connection-start="#g12945"
- inkscape:connector-type="polyline"
- id="path12962"
- d="m -797.5,533.2573 0,38.68599"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- </g>
- <g
- transform="translate(1065.0106,-10.420874)"
- id="g20918">
- <g
- style="opacity:0.5"
- id="g8425">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-91"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-750.72428,151.88146)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-822.54358"
- y="362.2431"
- id="text12629-9-3-1-3"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-8"
- x="-822.54358"
- y="362.2431">B</tspan></text>
- </g>
- <g
- id="g10287">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-9-9"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-750.72428,288.54815)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-821.49023"
- y="498.90979"
- id="text12629-9-3-1-8-1"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-7-6"
- x="-821.49023"
- y="498.90979">A</tspan></text>
- </g>
- <g
- transform="translate(-10.776028,0)"
- id="g12957-7">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-6-9"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-810.71423"
- y="635.57648"
- id="text12629-9-3-1-83-4"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-5-9"
- x="-810.71423"
- y="635.57648">Z</tspan></text>
- </g>
- <flowRoot
- xml:space="preserve"
- id="flowRoot12902"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- transform="translate(-214.28571,111.42857)"><flowRegion
- id="flowRegion12904"><rect
- id="rect12906"
- width="301.42856"
- height="435.71429"
- x="-924.28571"
- y="320.93362" /></flowRegion><flowPara
- id="flowPara12908" /></flowRoot> <path
- inkscape:connector-type="polyline"
- id="path12950-6"
- d="m -808.27602,393.39505 0,42.40522"
- style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connection-end="#g12957-7"
- inkscape:connector-type="polyline"
- id="path12962-1"
- d="m -808.27602,532.73368 0,39.73323"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <g
- style="fill:#0000ff;stroke:#0000ff"
- id="g8286">
- <path
- sodipodi:type="arc"
- style="fill:#0000ff;fill-opacity:0;fill-rule:evenodd;stroke:#0000ff;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-5"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-612.86713,62.419408)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#0000ff;fill-opacity:1;stroke:#0000ff;font-family:Bitstream Vera Sans"
- x="-684.68646"
- y="272.78107"
- id="text12629-9-3-1-4"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-76-6"
- x="-684.68646"
- y="272.78107">B'</tspan></text>
- </g>
- <path
- inkscape:connection-end="#g10287"
- inkscape:connection-start="#g8286"
- inkscape:connector-type="polyline"
- transform="translate(-997.6235,206.6479)"
- id="path8303"
- d="M 301.69976,93.326264 214.85234,235.78314"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM);display:inline"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connection-end="#g8425"
- inkscape:connection-start="#g8286"
- inkscape:connector-type="polyline"
- transform="translate(-997.6235,206.6479)"
- id="path8430"
- d="M 286.10442,78.162204 230.44767,114.28051"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-start:none;marker-end:url(#EmptyDiamondMend)"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- </g>
- <g
- transform="translate(1068.385,-581.11052)"
- id="g21066">
- <g
- style="opacity:0.5"
- id="g8425-4">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-50"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-750.72428,151.88146)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-822.54358"
- y="362.2431"
- id="text12629-9-3-1-5"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-9"
- x="-822.54358"
- y="362.2431">B</tspan></text>
- </g>
- <g
- id="g10287-2">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-9-5"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-750.72428,288.54815)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-821.49023"
- y="498.90979"
- id="text12629-9-3-1-8-7"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-7-9"
- x="-821.49023"
- y="498.90979">A</tspan></text>
- </g>
- <g
- transform="translate(-10.776028,0)"
- id="g12957-71">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-6-47"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-810.71423"
- y="635.57648"
- id="text12629-9-3-1-83-0"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-5-66"
- x="-810.71423"
- y="635.57648">Z</tspan></text>
- </g>
- <flowRoot
- xml:space="preserve"
- id="flowRoot12902-9"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- transform="translate(-214.28571,111.42857)"><flowRegion
- id="flowRegion12904-70"><rect
- id="rect12906-8"
- width="301.42856"
- height="435.71429"
- x="-924.28571"
- y="320.93362" /></flowRegion><flowPara
- id="flowPara12908-61" /></flowRoot> <path
- inkscape:connector-type="polyline"
- id="path12950-7"
- d="m -808.27602,393.39505 0,42.40522"
- style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connection-end="#g12957-71"
- inkscape:connector-type="polyline"
- id="path12962-3"
- d="m -808.27602,532.73368 0,39.73323"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <g
- style="fill:#008000;stroke:#008000"
- id="g8294">
- <path
- sodipodi:type="arc"
- style="fill:#008000;fill-opacity:0;fill-rule:evenodd;stroke:#008000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-5-2"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-888.58143,62.419408)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#008000;fill-opacity:1;stroke:#008000;font-family:Bitstream Vera Sans"
- x="-960.40076"
- y="272.78107"
- id="text12629-9-3-1-4-8"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-76-6-5"
- x="-960.40076"
- y="272.78107">B''</tspan></text>
- </g>
- <path
- inkscape:connection-end="#g10287-2"
- inkscape:connection-start="#g8294"
- inkscape:connector-type="polyline"
- transform="translate(-997.6235,206.6479)"
- id="path8305"
- d="M 76.995186,93.326264 163.84261,235.78314"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM);display:inline"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connection-end="#g8425-4"
- inkscape:connection-start="#g8294"
- inkscape:connector-type="polyline"
- transform="translate(-997.6235,206.6479)"
- id="path8432"
- d="M 92.590525,78.162204 148.24727,114.28051"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-end:url(#EmptyDiamondMend)"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- </g>
- <g
- transform="translate(1682.2151,-370.76569)"
- id="g21276">
- <g
- style="opacity:0.5"
- id="g8425-1">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-750.72428,151.88146)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-822.54358"
- y="362.2431"
- id="text12629-9-3-1"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0"
- x="-822.54358"
- y="362.2431">B</tspan></text>
- </g>
- <g
- id="g10287-7">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-9-2"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-750.72428,288.54815)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-821.49023"
- y="498.90979"
- id="text12629-9-3-1-8-2"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-7-1"
- x="-821.49023"
- y="498.90979">A</tspan></text>
- </g>
- <g
- transform="translate(-10.776028,0)"
- id="g12957-9">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-6-0"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-810.71423"
- y="635.57648"
- id="text12629-9-3-1-83-3"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-5-6"
- x="-810.71423"
- y="635.57648">Z</tspan></text>
- </g>
- <flowRoot
- xml:space="preserve"
- id="flowRoot12902-3"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- transform="translate(-214.28571,111.42857)"><flowRegion
- id="flowRegion12904-7"><rect
- id="rect12906-6"
- width="301.42856"
- height="435.71429"
- x="-924.28571"
- y="320.93362" /></flowRegion><flowPara
- id="flowPara12908-5" /></flowRoot> <path
- inkscape:connector-type="polyline"
- id="path12950"
- d="m -808.27602,393.39505 0,42.40522"
- style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connection-end="#g12957-9"
- inkscape:connector-type="polyline"
- id="path12962-5"
- d="m -808.27602,532.73368 0,39.73323"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <g
- style="fill:#ff0000;stroke:#ff0000"
- id="g8286-2">
- <path
- sodipodi:type="arc"
- style="fill:#ff0000;fill-opacity:0;fill-rule:evenodd;stroke:#ff0000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-5-4"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-612.86713,62.419408)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#ff0000;fill-opacity:1;stroke:#ff0000;font-family:Bitstream Vera Sans"
- x="-684.68646"
- y="272.78107"
- id="text12629-9-3-1-4-5"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-76"
- x="-684.68646"
- y="272.78107">B'</tspan></text>
- </g>
- <g
- style="fill:#ff0000;stroke:#ff0000"
- id="g8294-2">
- <path
- sodipodi:type="arc"
- style="fill:#ff0000;fill-opacity:0;fill-rule:evenodd;stroke:#ff0000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-5-2-2"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-888.58143,62.419408)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#ff0000;fill-opacity:1;stroke:#ff0000;font-family:Bitstream Vera Sans"
- x="-960.40076"
- y="272.78107"
- id="text12629-9-3-1-4-8-3"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-76-6-59"
- x="-960.40076"
- y="272.78107">B''</tspan></text>
- </g>
- <path
- inkscape:connection-end="#g10287-7"
- inkscape:connection-start="#g8286-2"
- inkscape:connector-type="polyline"
- transform="translate(-997.6235,206.6479)"
- id="path8303-8"
- d="M 301.69976,93.326264 214.85234,235.78314"
- style="fill:#ff0000;stroke:#ff0000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM);display:inline"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connection-end="#g10287-7"
- inkscape:connection-start="#g8294-2"
- inkscape:connector-type="polyline"
- transform="translate(-997.6235,206.6479)"
- id="path8305-0"
- d="M 76.995186,93.326264 163.84261,235.78314"
- style="fill:#ff0000;stroke:#ff0000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM);display:inline"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connection-end="#g8425-1"
- inkscape:connection-start="#g8286-2"
- inkscape:connector-type="polyline"
- transform="translate(-997.6235,206.6479)"
- id="path8430-0"
- d="M 286.10442,78.162204 230.44767,114.28051"
- style="fill:#ff0000;stroke:#ff0000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-start:none;marker-end:url(#EmptyDiamondMend)"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connection-end="#g8425-1"
- inkscape:connection-start="#g8294-2"
- inkscape:connector-type="polyline"
- transform="translate(-997.6235,206.6479)"
- id="path8432-1"
- d="M 92.590525,78.162204 148.24727,114.28051"
- style="fill:#ff0000;stroke:#ff0000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-end:url(#EmptyDiamondMend)"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- </g>
- </g>
-</svg>
--- a/docs/figures/explain-troubles-latecomer-10-sumup.svg Tue Jun 23 16:49:24 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1039 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="1311.8625"
- height="879.2406"
- id="svg12964"
- version="1.1"
- inkscape:version="0.47 r22583"
- sodipodi:docname="explain-troubles-latecomer-10-sumup.svg">
- <defs
- id="defs12966">
- <marker
- inkscape:stockid="Arrow1Mend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Mend"
- style="overflow:visible">
- <path
- id="path4078"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.4,0,0,-0.4,-4,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend"
- style="overflow:visible">
- <path
- id="path4072"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.8,0,0,-0.8,-10,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Lstart"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lstart"
- style="overflow:visible">
- <path
- id="path4069"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.8,0,0,0.8,10,0)" />
- </marker>
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 526.18109 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="744.09448 : 526.18109 : 1"
- inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
- id="perspective12972" />
- <inkscape:perspective
- id="perspective13312"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM"
- style="overflow:visible">
- <path
- id="path6393"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13318"
- style="overflow:visible">
- <path
- id="path13320"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <inkscape:perspective
- id="perspective13418"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-1"
- style="overflow:visible">
- <path
- id="path6393-1"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13424"
- style="overflow:visible">
- <path
- id="path13426"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13428"
- style="overflow:visible">
- <path
- id="path13430"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13432"
- style="overflow:visible">
- <path
- id="path13434"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="EmptyDiamondMend"
- style="overflow:visible">
- <path
- id="path6456"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13438"
- style="overflow:visible">
- <path
- id="path13440"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)" />
- </marker>
- <inkscape:perspective
- id="perspective13583"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-0"
- style="overflow:visible">
- <path
- id="path6393-5"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13589"
- style="overflow:visible">
- <path
- id="path13591"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13593"
- style="overflow:visible">
- <path
- id="path13595"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <inkscape:perspective
- id="perspective13743"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-2"
- style="overflow:visible">
- <path
- id="path6393-2"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13749"
- style="overflow:visible">
- <path
- id="path13751"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13753"
- style="overflow:visible">
- <path
- id="path13755"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13757"
- style="overflow:visible">
- <path
- id="path13759"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="EmptyDiamondMend-3"
- style="overflow:visible">
- <path
- id="path6456-4"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13763"
- style="overflow:visible">
- <path
- id="path13765"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)" />
- </marker>
- <inkscape:perspective
- id="perspective15593"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend-2"
- style="overflow:visible">
- <path
- id="path4072-8"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.8,0,0,-0.8,-10,0)" />
- </marker>
- <inkscape:perspective
- id="perspective15593-5"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend-6"
- style="overflow:visible">
- <path
- id="path4072-7"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.8,0,0,-0.8,-10,0)" />
- </marker>
- <inkscape:perspective
- id="perspective15593-1"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend-29"
- style="overflow:visible">
- <path
- id="path4072-70"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.8,0,0,-0.8,-10,0)" />
- </marker>
- <inkscape:perspective
- id="perspective18500"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-4"
- style="overflow:visible">
- <path
- id="path6393-20"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <inkscape:perspective
- id="perspective18588"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-47"
- style="overflow:visible">
- <path
- id="path6393-22"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker18594"
- style="overflow:visible">
- <path
- id="path18596"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="EmptyDiamondMend-31"
- style="overflow:visible">
- <path
- id="path4197"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)" />
- </marker>
- <inkscape:perspective
- id="perspective18791"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <inkscape:perspective
- id="perspective18959"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-6"
- style="overflow:visible">
- <path
- id="path6393-21"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker18965"
- style="overflow:visible">
- <path
- id="path18967"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-1-4"
- style="overflow:visible">
- <path
- id="path6393-3"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="EmptyDiamondMend-2"
- style="overflow:visible">
- <path
- id="path4197-2"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)" />
- </marker>
- <inkscape:perspective
- id="perspective19288"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-44"
- style="overflow:visible">
- <path
- id="path6393-9"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker19294"
- style="overflow:visible">
- <path
- id="path19296"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="0.58"
- inkscape:cx="455.19061"
- inkscape:cy="630.49672"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- inkscape:window-width="1918"
- inkscape:window-height="1165"
- inkscape:window-x="0"
- inkscape:window-y="0"
- inkscape:window-maximized="0" />
- <metadata
- id="metadata12969">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(312.26788,289.78072)">
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="279.72873"
- y="588.89349"
- id="text13894"><tspan
- sodipodi:role="line"
- id="tspan13896"
- x="279.72873"
- y="588.89349">Local</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="176.47943"
- y="147.90836"
- id="text13898"><tspan
- sodipodi:role="line"
- id="tspan13900"
- x="176.47943"
- y="147.90836">Distant</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="731.52625"
- y="360.52893"
- id="text13902"><tspan
- sodipodi:role="line"
- id="tspan13904"
- x="731.52625"
- y="360.52893">final = <tspan
- style="fill:#ff0000;stroke:#ff0000"
- id="tspan14035">tardif</tspan></tspan></text>
- <path
- style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow1Mend)"
- d="M -149.51243,71.715908 116.10904,-98.285798"
- id="path14093" />
- <path
- style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow1Mend)"
- d="M -136.88118,173.93586 140.19146,310.32109"
- id="path14093-1" />
- <path
- style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow1Mend)"
- d="m 358.73418,-10.742763 276.5932,40.995518"
- id="path14093-4"
- inkscape:transform-center-x="38.2665"
- inkscape:transform-center-y="-14.191534" />
- <path
- style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow1Mend)"
- d="M 385.49434,405.82501 666.42726,306.55019"
- id="path14093-42" />
- <g
- transform="translate(536.84443,-411.12056)"
- id="g18477">
- <g
- id="g12945">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-9"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,288.54815)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-810.71423"
- y="498.90979"
- id="text12629-9-3-1-8"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-7"
- x="-810.71423"
- y="498.90979">A</tspan></text>
- </g>
- <g
- id="g12957">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-6"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-810.71423"
- y="635.57648"
- id="text12629-9-3-1-83"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-5"
- x="-810.71423"
- y="635.57648">Z</tspan></text>
- </g>
- <flowRoot
- xml:space="preserve"
- id="flowRoot12902"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- transform="translate(-214.28571,111.42857)"><flowRegion
- id="flowRegion12904"><rect
- id="rect12906"
- width="301.42856"
- height="435.71429"
- x="-924.28571"
- y="320.93362" /></flowRegion><flowPara
- id="flowPara12908" /></flowRoot> <path
- inkscape:connection-end="#g12957"
- inkscape:connection-start="#g12945"
- inkscape:connector-type="polyline"
- id="path12962"
- d="m -797.5,533.2573 0,38.68599"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
- </g>
- <g
- transform="translate(1048.9196,-141.60299)"
- id="g18559">
- <g
- style="opacity:0.5"
- id="g12945-6">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-9-5"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,288.54815)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-810.71423"
- y="498.90979"
- id="text12629-9-3-1-8-5"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-7-9"
- x="-810.71423"
- y="498.90979">A</tspan></text>
- </g>
- <g
- id="g12957-33">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-6-80"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-810.71423"
- y="635.57648"
- id="text12629-9-3-1-83-1"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-5-0"
- x="-810.71423"
- y="635.57648">Z</tspan></text>
- </g>
- <flowRoot
- xml:space="preserve"
- id="flowRoot12902-9"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- transform="translate(-214.28571,111.42857)"><flowRegion
- id="flowRegion12904-8"><rect
- id="rect12906-6"
- width="301.42856"
- height="435.71429"
- x="-924.28571"
- y="320.93362" /></flowRegion><flowPara
- id="flowPara12908-3" /></flowRoot> <path
- inkscape:connection-end="#g12957-33"
- inkscape:connection-start="#g12945-6"
- inkscape:connector-type="polyline"
- id="path12962-09"
- d="m -797.5,533.2573 0,38.68599"
- style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
- <g
- id="g3273">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-9-4"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-598.58143,208.13369)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-669.34741"
- y="418.49533"
- id="text12629-9-3-1-8-2"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-7-7-4"
- x="-669.34741"
- y="418.49533">A'</tspan></text>
- </g>
- <path
- inkscape:connection-end="#g12957-33"
- inkscape:connection-start="#g3273"
- inkscape:connector-type="polyline"
- transform="translate(-848.99032,352.36219)"
- id="path3278"
- d="M 166.11979,92.547868 78.227679,227.51388"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
- <path
- inkscape:connection-end="#g12945-6"
- inkscape:connection-start="#g3273"
- inkscape:connector-type="polyline"
- transform="translate(-848.99032,352.36219)"
- id="path3280"
- d="M 150.2668,75.717222 94.08067,107.67788"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-mid:none;marker-end:url(#EmptyDiamondMend)" />
- </g>
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-316.03741"
- y="327.08148"
- id="text13894-3"><tspan
- sodipodi:role="line"
- id="tspan13896-8"
- x="-316.03741"
- y="327.08148">initial</tspan></text>
- <g
- transform="translate(1607.395,-370.37344)"
- id="g18925">
- <g
- transform="translate(0,5.2380981)"
- id="g12933">
- <path
- sodipodi:type="arc"
- style="fill:#d4aa00;fill-opacity:0;fill-rule:evenodd;stroke:#d4aa00;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,146.64336)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#d4aa00;fill-opacity:1;stroke:#d4aa00;font-family:Bitstream Vera Sans"
- x="-841.76758"
- y="358.43356"
- id="text12629-9-3-1"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0"
- x="-841.76758"
- y="358.43356">v4.2</tspan></text>
- </g>
- <g
- id="g12945-7">
- <path
- sodipodi:type="arc"
- style="fill:#d4aa00;fill-opacity:0;fill-rule:evenodd;stroke:#d4aa00;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-9-2"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,288.54815)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-810.71423"
- y="498.90979"
- id="text12629-9-3-1-8-25"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-7-1"
- x="-810.71423"
- y="498.90979">A</tspan></text>
- </g>
- <g
- id="g12957-38">
- <path
- sodipodi:type="arc"
- style="fill:#d4aa00;fill-opacity:0;fill-rule:evenodd;stroke:#d4aa00;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-6-4"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-810.71423"
- y="635.57648"
- id="text12629-9-3-1-83-8"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-5-6"
- x="-810.71423"
- y="635.57648">Z</tspan></text>
- </g>
- <flowRoot
- xml:space="preserve"
- id="flowRoot12902-3"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- transform="translate(-214.28571,111.42857)"><flowRegion
- id="flowRegion12904-7"><rect
- id="rect12906-4"
- width="301.42856"
- height="435.71429"
- x="-924.28571"
- y="320.93362" /></flowRegion><flowPara
- id="flowPara12908-6" /></flowRoot> <path
- inkscape:connection-start="#g12933"
- inkscape:connection-end="#g12945-7"
- inkscape:connector-type="polyline"
- id="path12950"
- d="m -797.5,393.91867 0,41.35798"
- style="fill:#d4aa00;stroke:#d4aa00;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
- <path
- inkscape:connection-end="#g12957-38"
- inkscape:connection-start="#g12945-7"
- inkscape:connector-type="polyline"
- id="path12962-2"
- d="m -797.5,533.2573 0,38.68599"
- style="fill:#d4aa00;stroke:#d4aa00;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
- <g
- id="g7062">
- <path
- sodipodi:type="arc"
- style="fill:#ff0000;fill-opacity:0;fill-rule:evenodd;stroke:#ff0000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-9-4-1"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-601.73896,221.4909)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#ff0000;fill-opacity:1;stroke:#ff0000;font-family:Bitstream Vera Sans"
- x="-672.50494"
- y="431.85254"
- id="text12629-9-3-1-8-2-2"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-7-7"
- x="-672.50494"
- y="431.85254">A'</tspan></text>
- </g>
- <path
- inkscape:connection-end="#g12957-38"
- inkscape:connection-start="#g7062"
- inkscape:connector-type="polyline"
- transform="translate(-848.99032,296.10995)"
- id="path7067"
- d="M 162.19312,161.64503 78.99682,284.27841"
- style="fill:#ff0000;stroke:#ff0000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM-1)" />
- <path
- inkscape:connection-end="#g12945-7"
- inkscape:connection-start="#g7062"
- inkscape:connector-type="polyline"
- transform="translate(-848.99032,296.10995)"
- id="path7069"
- d="M 145.61323,142.48988 95.576703,166.76692"
- style="fill:#ff0000;stroke:#ff0000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-end:url(#EmptyDiamondMend)" />
- </g>
- <g
- transform="translate(1040.2927,-585.89067)"
- id="g19264">
- <g
- id="g12933-2"
- transform="translate(0,5.2380981)">
- <path
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,146.64336)"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- sodipodi:ry="100"
- sodipodi:rx="147.14285"
- sodipodi:cy="399.50504"
- sodipodi:cx="-172.85715"
- id="path12627-8-4-1-3"
- style="fill:#d4aa00;fill-opacity:0;fill-rule:evenodd;stroke:#d4aa00;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc" />
- <text
- id="text12629-9-3-1-80"
- y="358.43356"
- x="-841.76758"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#d4aa00;fill-opacity:1;stroke:#d4aa00;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="358.43356"
- x="-841.76758"
- id="tspan12631-6-9-0-76"
- sodipodi:role="line">v4.2</tspan></text>
- </g>
- <g
- id="g12945-76">
- <path
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,288.54815)"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- sodipodi:ry="100"
- sodipodi:rx="147.14285"
- sodipodi:cy="399.50504"
- sodipodi:cx="-172.85715"
- id="path12627-8-4-1-9-29"
- style="fill:#d4aa00;fill-opacity:0;fill-rule:evenodd;stroke:#d4aa00;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc" />
- <text
- id="text12629-9-3-1-8-9"
- y="498.90979"
- x="-810.71423"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="498.90979"
- x="-810.71423"
- id="tspan12631-6-9-0-7-0"
- sodipodi:role="line">A</tspan></text>
- </g>
- <g
- id="g12957-39">
- <path
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- sodipodi:ry="100"
- sodipodi:rx="147.14285"
- sodipodi:cy="399.50504"
- sodipodi:cx="-172.85715"
- id="path12627-8-4-1-6-81"
- style="fill:#d4aa00;fill-opacity:0;fill-rule:evenodd;stroke:#d4aa00;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc" />
- <text
- id="text12629-9-3-1-83-7"
- y="635.57648"
- x="-810.71423"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="635.57648"
- x="-810.71423"
- id="tspan12631-6-9-0-5-08"
- sodipodi:role="line">Z</tspan></text>
- </g>
- <path
- style="fill:#d4aa00;stroke:#d4aa00;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- d="m -797.5,393.91867 0,41.35798"
- id="path12950-9"
- inkscape:connector-type="polyline"
- inkscape:connection-end="#g12945-76"
- inkscape:connection-start="#g12933-2" />
- <path
- style="fill:#d4aa00;stroke:#d4aa00;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- d="m -797.5,533.2573 0,38.68599"
- id="path12962-0"
- inkscape:connector-type="polyline"
- inkscape:connection-start="#g12945-76"
- inkscape:connection-end="#g12957-39" />
- </g>
- </g>
-</svg>
--- a/docs/figures/explain-troubles-latecomer-15-solution.svg Tue Jun 23 16:49:24 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,994 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="557.31696"
- height="487.83316"
- id="svg12964"
- version="1.1"
- inkscape:version="0.48.3.1 r9886"
- sodipodi:docname="explain-troubles-latecomer-15-solution.svg">
- <defs
- id="defs12966">
- <marker
- inkscape:stockid="Arrow1Mend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Mend"
- style="overflow:visible">
- <path
- id="path4078"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.4,0,0,-0.4,-4,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend"
- style="overflow:visible">
- <path
- id="path4072"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.8,0,0,-0.8,-10,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Lstart"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lstart"
- style="overflow:visible">
- <path
- id="path4069"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.8,0,0,0.8,10,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 526.18109 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="744.09448 : 526.18109 : 1"
- inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
- id="perspective12972" />
- <inkscape:perspective
- id="perspective13312"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM"
- style="overflow:visible">
- <path
- id="path6393"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13318"
- style="overflow:visible">
- <path
- id="path13320"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <inkscape:perspective
- id="perspective13418"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-1"
- style="overflow:visible">
- <path
- id="path6393-1"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13424"
- style="overflow:visible">
- <path
- id="path13426"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13428"
- style="overflow:visible">
- <path
- id="path13430"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13432"
- style="overflow:visible">
- <path
- id="path13434"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="EmptyDiamondMend"
- style="overflow:visible">
- <path
- id="path6456"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13438"
- style="overflow:visible">
- <path
- id="path13440"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <inkscape:perspective
- id="perspective13583"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-0"
- style="overflow:visible">
- <path
- id="path6393-5"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13589"
- style="overflow:visible">
- <path
- id="path13591"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13593"
- style="overflow:visible">
- <path
- id="path13595"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <inkscape:perspective
- id="perspective13743"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-2"
- style="overflow:visible">
- <path
- id="path6393-2"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13749"
- style="overflow:visible">
- <path
- id="path13751"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13753"
- style="overflow:visible">
- <path
- id="path13755"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13757"
- style="overflow:visible">
- <path
- id="path13759"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="EmptyDiamondMend-3"
- style="overflow:visible">
- <path
- id="path6456-4"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13763"
- style="overflow:visible">
- <path
- id="path13765"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <inkscape:perspective
- id="perspective15593"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend-2"
- style="overflow:visible">
- <path
- id="path4072-8"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.8,0,0,-0.8,-10,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <inkscape:perspective
- id="perspective15593-5"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend-6"
- style="overflow:visible">
- <path
- id="path4072-7"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.8,0,0,-0.8,-10,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <inkscape:perspective
- id="perspective15593-1"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend-29"
- style="overflow:visible">
- <path
- id="path4072-70"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.8,0,0,-0.8,-10,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <inkscape:perspective
- id="perspective18500"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-4"
- style="overflow:visible">
- <path
- id="path6393-20"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <inkscape:perspective
- id="perspective18588"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-47"
- style="overflow:visible">
- <path
- id="path6393-22"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker18594"
- style="overflow:visible">
- <path
- id="path18596"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="EmptyDiamondMend-31"
- style="overflow:visible">
- <path
- id="path4197"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <inkscape:perspective
- id="perspective18791"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <inkscape:perspective
- id="perspective18959"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-6"
- style="overflow:visible">
- <path
- id="path6393-21"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker18965"
- style="overflow:visible">
- <path
- id="path18967"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-1-4"
- style="overflow:visible">
- <path
- id="path6393-3"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="EmptyDiamondMend-2"
- style="overflow:visible">
- <path
- id="path4197-2"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <inkscape:perspective
- id="perspective19288"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-44"
- style="overflow:visible">
- <path
- id="path6393-9"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker19294"
- style="overflow:visible">
- <path
- id="path19296"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-7"
- style="overflow:visible">
- <path
- inkscape:connector-curvature="0"
- id="path6393-6"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker6176"
- style="overflow:visible">
- <path
- inkscape:connector-curvature="0"
- id="path6178"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-1-7"
- style="overflow:visible">
- <path
- inkscape:connector-curvature="0"
- id="path6393-1-6"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="EmptyDiamondMend-8"
- style="overflow:visible">
- <path
- inkscape:connector-curvature="0"
- id="path6456-0"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)" />
- </marker>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="0.58"
- inkscape:cx="588.77184"
- inkscape:cy="64.133389"
- inkscape:document-units="px"
- inkscape:current-layer="g7062-0"
- showgrid="false"
- inkscape:window-width="1215"
- inkscape:window-height="776"
- inkscape:window-x="65"
- inkscape:window-y="24"
- inkscape:window-maximized="1"
- fit-margin-top="5"
- fit-margin-right="5"
- fit-margin-left="5"
- fit-margin-bottom="5" />
- <metadata
- id="metadata12969">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(170.29334,188.87454)">
- <g
- id="g6078">
- <g
- id="g18925"
- transform="translate(683.25707,-378.99413)">
- <g
- id="g12933"
- transform="translate(0,5.2380981)">
- <path
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,146.64336)"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- sodipodi:ry="100"
- sodipodi:rx="147.14285"
- sodipodi:cy="399.50504"
- sodipodi:cx="-172.85715"
- id="path12627-8-4-1"
- style="fill:#d4aa00;fill-opacity:0;fill-rule:evenodd;stroke:#d4aa00;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc" />
- <text
- id="text12629-9-3-1"
- y="358.43356"
- x="-841.76758"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#d4aa00;fill-opacity:1;stroke:#d4aa00;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="358.43356"
- x="-841.76758"
- id="tspan12631-6-9-0"
- sodipodi:role="line">v4.2</tspan></text>
- </g>
- <g
- id="g12945-7">
- <path
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,288.54815)"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- sodipodi:ry="100"
- sodipodi:rx="147.14285"
- sodipodi:cy="399.50504"
- sodipodi:cx="-172.85715"
- id="path12627-8-4-1-9-2"
- style="fill:#d4aa00;fill-opacity:0;fill-rule:evenodd;stroke:#d4aa00;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc" />
- <text
- id="text12629-9-3-1-8-25"
- y="498.90979"
- x="-810.71423"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="498.90979"
- x="-810.71423"
- id="tspan12631-6-9-0-7-1"
- sodipodi:role="line">A</tspan></text>
- </g>
- <g
- id="g12957-38">
- <path
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- sodipodi:ry="100"
- sodipodi:rx="147.14285"
- sodipodi:cy="399.50504"
- sodipodi:cx="-172.85715"
- id="path12627-8-4-1-6-4"
- style="fill:#d4aa00;fill-opacity:0;fill-rule:evenodd;stroke:#d4aa00;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc" />
- <text
- id="text12629-9-3-1-83-8"
- y="635.57648"
- x="-810.71423"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="635.57648"
- x="-810.71423"
- id="tspan12631-6-9-0-5-6"
- sodipodi:role="line">Z</tspan></text>
- </g>
- <flowRoot
- transform="translate(-214.28571,111.42857)"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- id="flowRoot12902-3"
- xml:space="preserve"><flowRegion
- id="flowRegion12904-7"><rect
- y="320.93362"
- x="-924.28571"
- height="435.71429"
- width="301.42856"
- id="rect12906-4" /></flowRegion><flowPara
- id="flowPara12908-6" /></flowRoot> <path
- inkscape:connector-curvature="0"
- inkscape:connection-end-point="d4"
- inkscape:connection-start-point="d4"
- style="fill:#d4aa00;stroke:#d4aa00;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- d="m -797.5,393.91867 0,41.35798"
- id="path12950"
- inkscape:connector-type="polyline"
- inkscape:connection-end="#g12945-7"
- inkscape:connection-start="#g12933" />
- <path
- inkscape:connector-curvature="0"
- inkscape:connection-end-point="d4"
- inkscape:connection-start-point="d4"
- style="fill:#d4aa00;stroke:#d4aa00;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- d="m -797.5,533.2573 0,38.68599"
- id="path12962-2"
- inkscape:connector-type="polyline"
- inkscape:connection-start="#g12945-7"
- inkscape:connection-end="#g12957-38" />
- <g
- id="g7062">
- <path
- transform="matrix(0.33294398,0,0,0.48990327,-601.73896,221.4909)"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- sodipodi:ry="100"
- sodipodi:rx="147.14285"
- sodipodi:cy="399.50504"
- sodipodi:cx="-172.85715"
- id="path12627-8-4-1-9-4-1"
- style="fill:#ff0000;fill-opacity:0;fill-rule:evenodd;stroke:#ff0000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc" />
- <text
- id="text12629-9-3-1-8-2-2"
- y="431.85254"
- x="-672.50494"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#ff0000;fill-opacity:1;stroke:#ff0000;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="431.85254"
- x="-672.50494"
- id="tspan12631-6-9-0-7-7"
- sodipodi:role="line">A'</tspan></text>
- </g>
- <path
- inkscape:connector-curvature="0"
- inkscape:connection-end-point="d4"
- inkscape:connection-start-point="d4"
- style="fill:#ff0000;stroke:#ff0000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM-1)"
- d="M 162.19312,161.64503 78.99682,284.27841"
- id="path7067"
- transform="translate(-848.99032,296.10995)"
- inkscape:connector-type="polyline"
- inkscape:connection-start="#g7062"
- inkscape:connection-end="#g12957-38" />
- <path
- inkscape:connector-curvature="0"
- inkscape:connection-end-point="d4"
- inkscape:connection-start-point="d4"
- style="fill:#ff0000;stroke:#ff0000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-end:url(#EmptyDiamondMend)"
- d="M 145.61323,142.48988 95.576703,166.76692"
- id="path7069"
- transform="translate(-848.99032,296.10995)"
- inkscape:connector-type="polyline"
- inkscape:connection-start="#g7062"
- inkscape:connection-end="#g12945-7" />
- </g>
- </g>
- <g
- transform="translate(990.2654,-377.97948)"
- id="g18925-6">
- <g
- transform="translate(0,5.2380981)"
- id="g12933-0">
- <path
- sodipodi:type="arc"
- style="fill:#d4aa00;fill-opacity:0;fill-rule:evenodd;stroke:#d4aa00;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-8"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,146.64336)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#d4aa00;fill-opacity:1;stroke:#d4aa00;font-family:Bitstream Vera Sans"
- x="-841.76758"
- y="358.43356"
- id="text12629-9-3-1-9"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-4"
- x="-841.76758"
- y="358.43356">v4.2</tspan></text>
- </g>
- <g
- id="g12945-7-0">
- <path
- sodipodi:type="arc"
- style="fill:#d4aa00;fill-opacity:0;fill-rule:evenodd;stroke:#d4aa00;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-9-2-6"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,288.54815)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-810.71423"
- y="498.90979"
- id="text12629-9-3-1-8-25-0"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-7-1-0"
- x="-810.71423"
- y="498.90979">A</tspan></text>
- </g>
- <g
- id="g12957-38-9">
- <path
- sodipodi:type="arc"
- style="fill:#d4aa00;fill-opacity:0;fill-rule:evenodd;stroke:#d4aa00;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-6-4-2"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-810.71423"
- y="635.57648"
- id="text12629-9-3-1-83-8-7"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-5-6-6"
- x="-810.71423"
- y="635.57648">Z</tspan></text>
- </g>
- <flowRoot
- xml:space="preserve"
- id="flowRoot12902-3-4"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- transform="translate(-214.28571,111.42857)"><flowRegion
- id="flowRegion12904-7-4"><rect
- id="rect12906-4-2"
- width="301.42856"
- height="435.71429"
- x="-924.28571"
- y="320.93362" /></flowRegion><flowPara
- id="flowPara12908-6-9" /></flowRoot> <path
- inkscape:connection-start="#g12933-0"
- inkscape:connection-end="#g12945-7-0"
- inkscape:connector-type="polyline"
- id="path12950-5"
- d="m -797.5,393.91867 0,41.35798"
- style="fill:#d4aa00;stroke:#d4aa00;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connection-end="#g12957-38-9"
- inkscape:connection-start="#g12945-7-0"
- inkscape:connector-type="polyline"
- id="path12962-2-2"
- d="m -797.5,533.2573 0,38.68599"
- style="fill:#d4aa00;stroke:#d4aa00;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <g
- id="g7062-0">
- <path
- sodipodi:type="arc"
- style="opacity:0.5;fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-9-4-1-8"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-601.73896,221.4909)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;opacity:0.5;fill:#000000;fill-opacity:1;stroke:#000000;font-family:Bitstream Vera Sans"
- x="-672.50494"
- y="431.85254"
- id="text12629-9-3-1-8-2-2-6"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-7-7-2"
- x="-672.50494"
- y="431.85254">A'</tspan></text>
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-9-4-1-8-3"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-602.70567,72.41019)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:#000000;font-family:Bitstream Vera Sans"
- x="-671.47168"
- y="282.77182"
- id="text12629-9-3-1-8-2-2-6-2"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-7-7-2-8"
- x="-671.47168"
- y="282.77182">Aᵟ</tspan></text>
- <path
- style="fill:#000000;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-end:url(#EmptyDiamondMend-8)"
- d="m 643.10345,205.10267 0,51.72414"
- id="path6304"
- inkscape:connector-curvature="0"
- transform="translate(-1302.5333,110.19876)" />
- <path
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM-1-7)"
- d="m -697.8407,298.53986 -80.747,140.6978"
- id="path6306"
- inkscape:connector-curvature="0" />
- </g>
- <path
- inkscape:connector-type="polyline"
- id="path7067-4"
- d="m -695.12005,452.57296 -84.97116,125.65959"
- style="opacity:0.5;fill:#000000;stroke:#000000;stroke-width:3.06777191;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM-1)"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connector-type="polyline"
- id="path7069-5"
- d="m -705.04154,428.01168 -51.05239,29.6913"
- style="opacity:0.5;fill:#000000;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-end:url(#EmptyDiamondMend)"
- inkscape:connector-curvature="0" />
- </g>
- </g>
-</svg>
--- a/docs/figures/explain-troubles-unstable-10-sumup.svg Tue Jun 23 16:49:24 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1101 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="1414.5707"
- height="1196.5396"
- id="svg12964"
- version="1.1"
- inkscape:version="0.47 r22583"
- sodipodi:docname="explain-troubles-unstable-10-sumup.svg">
- <defs
- id="defs12966">
- <marker
- inkscape:stockid="Arrow1Mend"
- orient="auto"
- refY="0.0"
- refX="0.0"
- id="Arrow1Mend"
- style="overflow:visible;">
- <path
- id="path4078"
- d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
- transform="scale(0.4) rotate(180) translate(10,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0.0"
- refX="0.0"
- id="Arrow1Lend"
- style="overflow:visible;">
- <path
- id="path4072"
- d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
- transform="scale(0.8) rotate(180) translate(12.5,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Lstart"
- orient="auto"
- refY="0.0"
- refX="0.0"
- id="Arrow1Lstart"
- style="overflow:visible">
- <path
- id="path4069"
- d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
- transform="scale(0.8) translate(12.5,0)" />
- </marker>
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 526.18109 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="744.09448 : 526.18109 : 1"
- inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
- id="perspective12972" />
- <inkscape:perspective
- id="perspective13312"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM"
- style="overflow:visible">
- <path
- id="path6393"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13318"
- style="overflow:visible">
- <path
- id="path13320"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <inkscape:perspective
- id="perspective13418"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-1"
- style="overflow:visible">
- <path
- id="path6393-1"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13424"
- style="overflow:visible">
- <path
- id="path13426"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13428"
- style="overflow:visible">
- <path
- id="path13430"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13432"
- style="overflow:visible">
- <path
- id="path13434"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="EmptyDiamondMend"
- style="overflow:visible">
- <path
- id="path6456"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13438"
- style="overflow:visible">
- <path
- id="path13440"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)" />
- </marker>
- <inkscape:perspective
- id="perspective13583"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-0"
- style="overflow:visible">
- <path
- id="path6393-5"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13589"
- style="overflow:visible">
- <path
- id="path13591"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13593"
- style="overflow:visible">
- <path
- id="path13595"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <inkscape:perspective
- id="perspective13743"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-2"
- style="overflow:visible">
- <path
- id="path6393-2"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13749"
- style="overflow:visible">
- <path
- id="path13751"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13753"
- style="overflow:visible">
- <path
- id="path13755"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13757"
- style="overflow:visible">
- <path
- id="path13759"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="EmptyDiamondMend-3"
- style="overflow:visible">
- <path
- id="path6456-4"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13763"
- style="overflow:visible">
- <path
- id="path13765"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)" />
- </marker>
- <inkscape:perspective
- id="perspective15593"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend-2"
- style="overflow:visible">
- <path
- id="path4072-8"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.8,0,0,-0.8,-10,0)" />
- </marker>
- <inkscape:perspective
- id="perspective15593-5"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend-6"
- style="overflow:visible">
- <path
- id="path4072-7"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.8,0,0,-0.8,-10,0)" />
- </marker>
- <inkscape:perspective
- id="perspective15593-1"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend-29"
- style="overflow:visible">
- <path
- id="path4072-70"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.8,0,0,-0.8,-10,0)" />
- </marker>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="0.58"
- inkscape:cx="460.47484"
- inkscape:cy="579.06827"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- inkscape:window-width="1918"
- inkscape:window-height="1165"
- inkscape:window-x="0"
- inkscape:window-y="0"
- inkscape:window-maximized="0" />
- <metadata
- id="metadata12969">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(317.55211,451.61155)">
- <g
- id="g16677">
- <g
- transform="translate(63.770124,322.85714)"
- id="g13934">
- <g
- transform="translate(994.04378,-358.66548)"
- id="g13382">
- <g
- style="opacity:0.5"
- transform="translate(0,5.2380981)"
- id="g12933-9">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-8"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,146.64336)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-811.76758"
- y="357.005"
- id="text12629-9-3-1-4"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-9"
- x="-811.76758"
- y="357.005">B</tspan></text>
- </g>
- <g
- style="opacity:0.5"
- id="g12945-3">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-9-9"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,288.54815)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-810.71423"
- y="498.90979"
- id="text12629-9-3-1-8-9"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-7-0"
- x="-810.71423"
- y="498.90979">A</tspan></text>
- </g>
- <g
- id="g12957-8">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-6-3"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-810.71423"
- y="635.57648"
- id="text12629-9-3-1-83-0"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-5-1"
- x="-810.71423"
- y="635.57648">Z</tspan></text>
- </g>
- <path
- inkscape:connection-end="#g12945-3"
- inkscape:connection-start="#g12933-9"
- inkscape:connector-type="polyline"
- id="path12950-7"
- d="m -797.5,393.91867 0,41.35798"
- style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
- <path
- inkscape:connection-end="#g12957-8"
- inkscape:connection-start="#g12945-3"
- inkscape:connector-type="polyline"
- id="path12962-0"
- d="m -797.5,533.2573 0,38.68599"
- style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
- <g
- id="g14080">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-67"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-580.01,81.22892)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-651.82935"
- y="291.59058"
- id="text12629-9-3-1-2"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-77"
- x="-651.82935"
- y="291.59058">B'</tspan></text>
- </g>
- <g
- id="g14034">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-9-2"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-580.01,217.89561)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-650.776"
- y="428.25726"
- id="text12629-9-3-1-8-0"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-7-7"
- x="-650.776"
- y="428.25726">A'</tspan></text>
- </g>
- <path
- inkscape:connection-end="#g12957-8"
- inkscape:connection-start="#g14034"
- inkscape:connector-type="polyline"
- transform="translate(-848.99032,225.45742)"
- id="path14087"
- d="M 181.50292,226.948 81.415976,356.68521"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
- <path
- inkscape:connection-end="#g14034"
- inkscape:connection-start="#g14080"
- inkscape:connector-type="polyline"
- transform="translate(-848.99032,225.45742)"
- id="path14089"
- d="m 211.42857,100.48065 0,38.68604"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
- <path
- inkscape:connection-end="#g12945-3"
- inkscape:connection-start="#g14034"
- inkscape:connector-type="polyline"
- transform="translate(-848.99032,225.45742)"
- id="path14463"
- d="M 166.6047,207.95791 96.314201,239.00866"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-start:none;marker-mid:none;marker-end:url(#EmptyDiamondMend)" />
- <path
- inkscape:connection-start="#g14080"
- inkscape:connection-end="#g12933-9"
- transform="translate(-848.99032,225.45742)"
- inkscape:connector-type="polyline"
- id="path14465"
- d="M 166.6047,71.29122 97.24687,101.92996"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-start:none;marker-mid:none;marker-end:url(#EmptyDiamondMend)" />
- </g>
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="224.57932"
- y="372.93292"
- id="text13894"><tspan
- sodipodi:role="line"
- id="tspan13896"
- x="224.57932"
- y="372.93292">Local</tspan></text>
- </g>
- <g
- transform="translate(53.152706,-930.19704)"
- id="g13910">
- <g
- transform="translate(999.11715,331.93758)"
- id="g13554">
- <g
- transform="translate(2.11198,-3.2921448)"
- id="g12933-2">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-1"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,146.64336)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-811.76758"
- y="357.005"
- id="text12629-9-3-1-0"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-1"
- x="-811.76758"
- y="357.005">B</tspan></text>
- </g>
- <g
- transform="translate(2.11198,-4.265152)"
- id="g12945-7">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-9-0"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,288.54815)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-810.71423"
- y="498.90979"
- id="text12629-9-3-1-8-8"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-7-07"
- x="-810.71423"
- y="498.90979">A</tspan></text>
- </g>
- <g
- transform="translate(2.11198,0)"
- id="g12957-6">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-6-7"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-810.71423"
- y="635.57648"
- id="text12629-9-3-1-83-3"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-5-9"
- x="-810.71423"
- y="635.57648">Z</tspan></text>
- </g>
- <path
- inkscape:connector-curvature="0"
- inkscape:connection-end-point="d4"
- inkscape:connection-start-point="d4"
- inkscape:connection-end="#g12945-7"
- inkscape:connection-start="#g12933-2"
- inkscape:connector-type="polyline"
- id="path12950-8"
- d="m -795.38802,389.71981 0,43.48719"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
- <path
- inkscape:connector-curvature="0"
- inkscape:connection-end-point="d4"
- inkscape:connection-start-point="d4"
- inkscape:connection-end="#g12957-6"
- inkscape:connection-start="#g12945-7"
- inkscape:connector-type="polyline"
- id="path12962-3"
- d="m -795.38802,531.14792 0,40.81523"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
- <g
- transform="translate(-2.11198,0)"
- id="g13397">
- <path
- sodipodi:type="arc"
- style="fill:#0000ff;fill-opacity:0;fill-rule:evenodd;stroke:#0000ff;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-0"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-735.72429,2.41941)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-807.54364"
- y="212.78105"
- id="text12629-9-3-1-7"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-6"
- x="-807.54364"
- y="212.78105">C</tspan></text>
- </g>
- <path
- inkscape:connector-curvature="0"
- inkscape:connection-end-point="d4"
- inkscape:connection-start-point="d4"
- inkscape:connection-end="#g12933-2"
- inkscape:connection-start="#g13397"
- inkscape:connector-type="polyline"
- transform="translate(-848.99032,296.10995)"
- id="path13402"
- d="m 53.602303,-49.001257 0,44.6701979"
- style="fill:#0000ff;stroke:#0000ff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#DotM)" />
- </g>
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="130.22327"
- y="1072.933"
- id="text13898"><tspan
- sodipodi:role="line"
- id="tspan13900"
- x="130.22327"
- y="1072.933">Distant</tspan></text>
- </g>
- </g>
- <g
- id="g14037"
- transform="translate(-12.610837,-438.21686)">
- <g
- id="g13702"
- transform="translate(1669.5314,38.478002)">
- <g
- id="g12933-3"
- transform="translate(0.68341,5.2381)"
- style="opacity:0.5">
- <path
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,146.64336)"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- sodipodi:ry="100"
- sodipodi:rx="147.14285"
- sodipodi:cy="399.50504"
- sodipodi:cx="-172.85715"
- id="path12627-8-4-1-5"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc" />
- <text
- id="text12629-9-3-1-28"
- y="357.005"
- x="-811.76758"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="357.005"
- x="-811.76758"
- id="tspan12631-6-9-0-73"
- sodipodi:role="line">B</tspan></text>
- </g>
- <g
- id="g12945-5"
- style="opacity:0.5"
- transform="translate(0.68341,0)">
- <path
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,288.54815)"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- sodipodi:ry="100"
- sodipodi:rx="147.14285"
- sodipodi:cy="399.50504"
- sodipodi:cx="-172.85715"
- id="path12627-8-4-1-9-8"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc" />
- <text
- id="text12629-9-3-1-8-87"
- y="498.90979"
- x="-810.71423"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="498.90979"
- x="-810.71423"
- id="tspan12631-6-9-0-7-3"
- sodipodi:role="line">A</tspan></text>
- </g>
- <g
- id="g12957-3"
- transform="translate(0.68341,0)">
- <path
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- sodipodi:ry="100"
- sodipodi:rx="147.14285"
- sodipodi:cy="399.50504"
- sodipodi:cx="-172.85715"
- id="path12627-8-4-1-6-8"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc" />
- <text
- id="text12629-9-3-1-83-5"
- y="635.57648"
- x="-810.71423"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="635.57648"
- x="-810.71423"
- id="tspan12631-6-9-0-5-4"
- sodipodi:role="line">Z</tspan></text>
- </g>
- <path
- style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- d="m -796.81659,393.91659 0,41.36213"
- id="path12950-85"
- inkscape:connector-type="polyline"
- inkscape:connection-start="#g12933-3"
- inkscape:connection-end="#g12945-5"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <path
- style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- d="m -796.81659,533.25522 0,38.69014"
- id="path12962-4"
- inkscape:connector-type="polyline"
- inkscape:connection-start="#g12945-5"
- inkscape:connection-end="#g12957-3"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <g
- id="g14080-8">
- <path
- transform="matrix(0.33294398,0,0,0.48990327,-580.01,81.22892)"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- sodipodi:ry="100"
- sodipodi:rx="147.14285"
- sodipodi:cy="399.50504"
- sodipodi:cx="-172.85715"
- id="path12627-8-4-1-67-4"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc" />
- <text
- id="text12629-9-3-1-2-2"
- y="291.59058"
- x="-651.82935"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="291.59058"
- x="-651.82935"
- id="tspan12631-6-9-0-77-5"
- sodipodi:role="line">B'</tspan></text>
- </g>
- <g
- id="g14034-8">
- <path
- transform="matrix(0.33294398,0,0,0.48990327,-580.01,217.89561)"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- sodipodi:ry="100"
- sodipodi:rx="147.14285"
- sodipodi:cy="399.50504"
- sodipodi:cx="-172.85715"
- id="path12627-8-4-1-9-2-4"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc" />
- <text
- id="text12629-9-3-1-8-0-4"
- y="428.25726"
- x="-650.776"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="428.25726"
- x="-650.776"
- id="tspan12631-6-9-0-7-7-3"
- sodipodi:role="line">A'</tspan></text>
- </g>
- <path
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- d="M 181.58323,227.00991 81.848934,356.84479"
- id="path14087-4"
- transform="translate(-848.99032,225.45742)"
- inkscape:connector-type="polyline"
- inkscape:connection-start="#g14034-8"
- inkscape:connection-end="#g12957-3"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <path
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- d="m 211.42857,100.48065 0,38.68604"
- id="path14089-8"
- transform="translate(-848.99032,225.45742)"
- inkscape:connector-type="polyline"
- inkscape:connection-start="#g14080-8"
- inkscape:connection-end="#g14034-8"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <path
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-start:none;marker-mid:none;marker-end:url(#EmptyDiamondMend)"
- d="M 166.63618,208.02892 96.585,239.10674"
- id="path14463-7"
- transform="translate(-848.99032,225.45742)"
- inkscape:connector-type="polyline"
- inkscape:connection-start="#g14034-8"
- inkscape:connection-end="#g12945-5"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <path
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-start:none;marker-mid:none;marker-end:url(#EmptyDiamondMend)"
- d="M 166.63618,71.362225 97.512165,102.02871"
- id="path14465-9"
- inkscape:connector-type="polyline"
- transform="translate(-848.99032,225.45742)"
- inkscape:connection-end="#g12933-3"
- inkscape:connection-start="#g14080-8"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <g
- id="g5583"
- transform="translate(-0.68341,0)">
- <path
- transform="matrix(0.33294398,0,0,0.48990327,-738.58143,1.22892)"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- sodipodi:ry="100"
- sodipodi:rx="147.14285"
- sodipodi:cy="399.50504"
- sodipodi:cx="-172.85715"
- id="path4918"
- style="fill:#ff0000;fill-opacity:0;fill-rule:evenodd;stroke:#ff0000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc" />
- <text
- id="text4920"
- y="211.59058"
- x="-810.40076"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#ff0000;fill-opacity:1;stroke:#ff0000;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="211.59058"
- x="-810.40076"
- id="tspan4922"
- sodipodi:role="line">C</tspan></text>
- </g>
- <path
- style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 52.173733,20.478573 0,50.004102"
- id="path5588"
- inkscape:connector-type="polyline"
- inkscape:connector-curvature="3"
- inkscape:connection-start="#g5583"
- inkscape:connection-start-point="d4"
- inkscape:connection-end="#g12933-3"
- inkscape:connection-end-point="d4"
- transform="translate(-848.99032,225.45742)" />
- </g>
- <text
- id="text13902"
- y="781.50439"
- x="801.03363"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="781.50439"
- x="801.03363"
- id="tspan13904"
- sodipodi:role="line">final = <tspan
- id="tspan14035"
- style="fill:#ff0000;stroke:#ff0000">instable</tspan></tspan></text>
- </g>
- <g
- id="g14074"
- transform="translate(12.068966,-361.47806)">
- <g
- id="g13288"
- transform="translate(531.43821,-33.336839)">
- <g
- id="g12933"
- transform="translate(0,5.2380981)">
- <path
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,146.64336)"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- sodipodi:ry="100"
- sodipodi:rx="147.14285"
- sodipodi:cy="399.50504"
- sodipodi:cx="-172.85715"
- id="path12627-8-4-1"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc" />
- <text
- id="text12629-9-3-1"
- y="357.005"
- x="-811.76758"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="357.005"
- x="-811.76758"
- id="tspan12631-6-9-0"
- sodipodi:role="line">B</tspan></text>
- </g>
- <g
- id="g12945">
- <path
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,288.54815)"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- sodipodi:ry="100"
- sodipodi:rx="147.14285"
- sodipodi:cy="399.50504"
- sodipodi:cx="-172.85715"
- id="path12627-8-4-1-9"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc" />
- <text
- id="text12629-9-3-1-8"
- y="498.90979"
- x="-810.71423"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="498.90979"
- x="-810.71423"
- id="tspan12631-6-9-0-7"
- sodipodi:role="line">A</tspan></text>
- </g>
- <g
- id="g12957">
- <path
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- sodipodi:ry="100"
- sodipodi:rx="147.14285"
- sodipodi:cy="399.50504"
- sodipodi:cx="-172.85715"
- id="path12627-8-4-1-6"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc" />
- <text
- id="text12629-9-3-1-83"
- y="635.57648"
- x="-810.71423"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="635.57648"
- x="-810.71423"
- id="tspan12631-6-9-0-5"
- sodipodi:role="line">Z</tspan></text>
- </g>
- <path
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- d="m -797.5,393.91867 0,41.35798"
- id="path12950"
- inkscape:connector-type="polyline"
- inkscape:connection-start="#g12933"
- inkscape:connection-end="#g12945" />
- <path
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- d="m -797.5,533.2573 0,38.68599"
- id="path12962"
- inkscape:connector-type="polyline"
- inkscape:connection-start="#g12945"
- inkscape:connection-end="#g12957" />
- </g>
- <text
- id="text13906"
- y="704.36151"
- x="-321.08133"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="704.36151"
- x="-321.08133"
- id="tspan13908"
- sodipodi:role="line">initial</tspan></text>
- </g>
- <path
- style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow1Mend)"
- d="M -148.90439,71.107869 115.52431,-150.21739"
- id="path14093" />
- <path
- style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow1Mend)"
- d="M -116.60064,185.59571 141.08898,310.8959"
- id="path14093-1" />
- <path
- style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow1Mend)"
- d="m 377.16638,-147.48298 351.94233,55.511595"
- id="path14093-4"
- inkscape:transform-center-x="48.58484"
- inkscape:transform-center-y="-19.640393" />
- <path
- style="fill:none;stroke:#000000;stroke-width:8.96527767;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#Arrow1Mend)"
- d="M 516.3549,303.21782 766.85794,121.81435"
- id="path14093-42" />
- </g>
-</svg>
--- a/docs/figures/explain-troubles-unstable-15-solution.svg Tue Jun 23 16:49:24 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1006 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="637.31207"
- height="614.44788"
- id="svg12964"
- version="1.1"
- inkscape:version="0.48.3.1 r9886"
- sodipodi:docname="explain-troubles-unstable-15-solution.svg">
- <defs
- id="defs12966">
- <marker
- inkscape:stockid="Arrow1Mend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Mend"
- style="overflow:visible">
- <path
- id="path4078"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.4,0,0,-0.4,-4,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend"
- style="overflow:visible">
- <path
- id="path4072"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.8,0,0,-0.8,-10,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Lstart"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lstart"
- style="overflow:visible">
- <path
- id="path4069"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.8,0,0,0.8,10,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 526.18109 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="744.09448 : 526.18109 : 1"
- inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
- id="perspective12972" />
- <inkscape:perspective
- id="perspective13312"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM"
- style="overflow:visible">
- <path
- id="path6393"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13318"
- style="overflow:visible">
- <path
- id="path13320"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <inkscape:perspective
- id="perspective13418"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-1"
- style="overflow:visible">
- <path
- id="path6393-1"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13424"
- style="overflow:visible">
- <path
- id="path13426"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13428"
- style="overflow:visible">
- <path
- id="path13430"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13432"
- style="overflow:visible">
- <path
- id="path13434"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="EmptyDiamondMend"
- style="overflow:visible">
- <path
- id="path6456"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13438"
- style="overflow:visible">
- <path
- id="path13440"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <inkscape:perspective
- id="perspective13583"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-0"
- style="overflow:visible">
- <path
- id="path6393-5"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13589"
- style="overflow:visible">
- <path
- id="path13591"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13593"
- style="overflow:visible">
- <path
- id="path13595"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <inkscape:perspective
- id="perspective13743"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-2"
- style="overflow:visible">
- <path
- id="path6393-2"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13749"
- style="overflow:visible">
- <path
- id="path13751"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13753"
- style="overflow:visible">
- <path
- id="path13755"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13757"
- style="overflow:visible">
- <path
- id="path13759"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="EmptyDiamondMend-3"
- style="overflow:visible">
- <path
- id="path6456-4"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13763"
- style="overflow:visible">
- <path
- id="path13765"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <inkscape:perspective
- id="perspective15593"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend-2"
- style="overflow:visible">
- <path
- id="path4072-8"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.8,0,0,-0.8,-10,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <inkscape:perspective
- id="perspective15593-5"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend-6"
- style="overflow:visible">
- <path
- id="path4072-7"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.8,0,0,-0.8,-10,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <inkscape:perspective
- id="perspective15593-1"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend-29"
- style="overflow:visible">
- <path
- id="path4072-70"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.8,0,0,-0.8,-10,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-6"
- style="overflow:visible">
- <path
- inkscape:connector-curvature="0"
- id="path6393-3"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker8630"
- style="overflow:visible">
- <path
- inkscape:connector-curvature="0"
- id="path8632"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker8634"
- style="overflow:visible">
- <path
- inkscape:connector-curvature="0"
- id="path8636"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker8638"
- style="overflow:visible">
- <path
- inkscape:connector-curvature="0"
- id="path8640"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="EmptyDiamondMend-2"
- style="overflow:visible">
- <path
- inkscape:connector-curvature="0"
- id="path6456-7"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="marker8644"
- style="overflow:visible">
- <path
- inkscape:connector-curvature="0"
- id="path8646"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)" />
- </marker>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="0.58"
- inkscape:cx="446.08569"
- inkscape:cy="388.21623"
- inkscape:document-units="px"
- inkscape:current-layer="g13702-1"
- showgrid="false"
- inkscape:window-width="1215"
- inkscape:window-height="776"
- inkscape:window-x="65"
- inkscape:window-y="24"
- inkscape:window-maximized="1"
- fit-margin-top="5"
- fit-margin-right="5"
- fit-margin-bottom="5"
- fit-margin-left="5" />
- <metadata
- id="metadata12969">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-804.0536,336.234)">
- <g
- transform="translate(1656.9206,-399.73886)"
- id="g13702">
- <g
- style="opacity:0.5"
- transform="translate(0.68341,5.2381)"
- id="g12933-3">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-5"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,146.64336)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-811.76758"
- y="357.005"
- id="text12629-9-3-1-28"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-73"
- x="-811.76758"
- y="357.005">B</tspan></text>
- </g>
- <g
- transform="translate(0.68341,0)"
- style="opacity:0.5"
- id="g12945-5">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-9-8"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,288.54815)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-810.71423"
- y="498.90979"
- id="text12629-9-3-1-8-87"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-7-3"
- x="-810.71423"
- y="498.90979">A</tspan></text>
- </g>
- <g
- transform="translate(0.68341,0)"
- id="g12957-3">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-6-8"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-810.71423"
- y="635.57648"
- id="text12629-9-3-1-83-5"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-5-4"
- x="-810.71423"
- y="635.57648">Z</tspan></text>
- </g>
- <path
- inkscape:connector-curvature="0"
- inkscape:connection-end-point="d4"
- inkscape:connection-start-point="d4"
- inkscape:connection-end="#g12945-5"
- inkscape:connection-start="#g12933-3"
- inkscape:connector-type="polyline"
- id="path12950-85"
- d="m -796.81659,393.9166 0,41.36212"
- style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
- <path
- inkscape:connector-curvature="0"
- inkscape:connection-end-point="d4"
- inkscape:connection-start-point="d4"
- inkscape:connection-end="#g12957-3"
- inkscape:connection-start="#g12945-5"
- inkscape:connector-type="polyline"
- id="path12962-4"
- d="m -796.81659,533.25522 0,38.69014"
- style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
- <g
- id="g14080-8">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-67-4"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-580.01,81.22892)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-651.82935"
- y="291.59058"
- id="text12629-9-3-1-2-2"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-77-5"
- x="-651.82935"
- y="291.59058">B'</tspan></text>
- </g>
- <g
- id="g14034-8">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-9-2-4"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-580.01,217.89561)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-650.776"
- y="428.25726"
- id="text12629-9-3-1-8-0-4"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-7-7-3"
- x="-650.776"
- y="428.25726">A'</tspan></text>
- </g>
- <path
- inkscape:connector-curvature="0"
- inkscape:connection-end-point="d4"
- inkscape:connection-start-point="d4"
- inkscape:connection-end="#g12957-3"
- inkscape:connection-start="#g14034-8"
- inkscape:connector-type="polyline"
- transform="translate(-848.99032,225.45742)"
- id="path14087-4"
- d="M 181.58323,227.00991 81.848934,356.84479"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
- <path
- inkscape:connector-curvature="0"
- inkscape:connection-end-point="d4"
- inkscape:connection-start-point="d4"
- inkscape:connection-end="#g14034-8"
- inkscape:connection-start="#g14080-8"
- inkscape:connector-type="polyline"
- transform="translate(-848.99032,225.45742)"
- id="path14089-8"
- d="m 211.42857,100.48065 0,38.68604"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
- <path
- inkscape:connector-curvature="0"
- inkscape:connection-end-point="d4"
- inkscape:connection-start-point="d4"
- inkscape:connection-end="#g12945-5"
- inkscape:connection-start="#g14034-8"
- inkscape:connector-type="polyline"
- transform="translate(-848.99032,225.45742)"
- id="path14463-7"
- d="M 166.63618,208.02892 96.585,239.10674"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-start:none;marker-mid:none;marker-end:url(#EmptyDiamondMend)" />
- <path
- inkscape:connector-curvature="0"
- inkscape:connection-end-point="d4"
- inkscape:connection-start-point="d4"
- inkscape:connection-start="#g14080-8"
- inkscape:connection-end="#g12933-3"
- transform="translate(-848.99032,225.45742)"
- inkscape:connector-type="polyline"
- id="path14465-9"
- d="M 166.63618,71.362225 97.512166,102.02872"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-start:none;marker-mid:none;marker-end:url(#EmptyDiamondMend)" />
- <g
- transform="translate(-0.68341,0)"
- id="g5583">
- <path
- sodipodi:type="arc"
- style="fill:#ff0000;fill-opacity:0;fill-rule:evenodd;stroke:#ff0000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path4918"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-738.58143,1.22892)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#ff0000;fill-opacity:1;stroke:#ff0000;font-family:Bitstream Vera Sans"
- x="-810.40076"
- y="211.59058"
- id="text4920"><tspan
- sodipodi:role="line"
- id="tspan4922"
- x="-810.40076"
- y="211.59058">C</tspan></text>
- </g>
- <path
- transform="translate(-848.99032,225.45742)"
- inkscape:connection-end-point="d4"
- inkscape:connection-end="#g12933-3"
- inkscape:connection-start-point="d4"
- inkscape:connection-start="#g5583"
- inkscape:connector-curvature="3"
- inkscape:connector-type="polyline"
- id="path5588"
- d="m 52.173733,20.478573 0,50.004103"
- style="opacity:0.98000004;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#marker8638)" />
- </g>
- <g
- transform="translate(2022.8785,-401.87475)"
- id="g13702-1">
- <g
- style="opacity:0.5"
- transform="translate(0.68341,5.2381)"
- id="g12933-3-2">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-5-9"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,146.64336)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-811.76758"
- y="357.005"
- id="text12629-9-3-1-28-1"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-73-6"
- x="-811.76758"
- y="357.005">B</tspan></text>
- </g>
- <g
- transform="translate(0.68341,0)"
- style="opacity:0.5"
- id="g12945-5-4">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-9-8-0"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,288.54815)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-810.71423"
- y="498.90979"
- id="text12629-9-3-1-8-87-7"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-7-3-6"
- x="-810.71423"
- y="498.90979">A</tspan></text>
- </g>
- <g
- transform="translate(0.68341,0)"
- id="g12957-3-9">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-6-8-4"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-810.71423"
- y="635.57648"
- id="text12629-9-3-1-83-5-9"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-5-4-8"
- x="-810.71423"
- y="635.57648">Z</tspan></text>
- </g>
- <path
- inkscape:connector-curvature="0"
- inkscape:connection-end-point="d4"
- inkscape:connection-start-point="d4"
- inkscape:connection-end="#g12945-5-4"
- inkscape:connection-start="#g12933-3-2"
- inkscape:connector-type="polyline"
- id="path12950-85-4"
- d="m -796.81659,393.9166 0,41.36212"
- style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
- <path
- inkscape:connector-curvature="0"
- inkscape:connection-end-point="d4"
- inkscape:connection-start-point="d4"
- inkscape:connection-end="#g12957-3-9"
- inkscape:connection-start="#g12945-5-4"
- inkscape:connector-type="polyline"
- id="path12962-4-3"
- d="m -796.81659,533.25522 0,38.69014"
- style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
- <g
- id="g14080-8-5">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-67-4-3"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-580.01,81.22892)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-651.82935"
- y="291.59058"
- id="text12629-9-3-1-2-2-5"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-77-5-6"
- x="-651.82935"
- y="291.59058">B'</tspan></text>
- </g>
- <g
- id="g14034-8-4">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-9-2-4-3"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-580.01,217.89561)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-650.776"
- y="428.25726"
- id="text12629-9-3-1-8-0-4-6"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-7-7-3-3"
- x="-650.776"
- y="428.25726">A'</tspan></text>
- </g>
- <path
- inkscape:connector-curvature="0"
- inkscape:connection-end-point="d4"
- inkscape:connection-start-point="d4"
- inkscape:connection-end="#g12957-3-9"
- inkscape:connection-start="#g14034-8-4"
- inkscape:connector-type="polyline"
- transform="translate(-848.99032,225.45742)"
- id="path14087-4-0"
- d="M 181.58323,227.00991 81.848934,356.84479"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
- <path
- inkscape:connector-curvature="0"
- inkscape:connection-end-point="d4"
- inkscape:connection-start-point="d4"
- inkscape:connection-end="#g14034-8-4"
- inkscape:connection-start="#g14080-8-5"
- inkscape:connector-type="polyline"
- transform="translate(-848.99032,225.45742)"
- id="path14089-8-4"
- d="m 211.42857,100.48065 0,38.68604"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)" />
- <path
- inkscape:connector-curvature="0"
- inkscape:connection-end-point="d4"
- inkscape:connection-start-point="d4"
- inkscape:connection-end="#g12945-5-4"
- inkscape:connection-start="#g14034-8-4"
- inkscape:connector-type="polyline"
- transform="translate(-848.99032,225.45742)"
- id="path14463-7-3"
- d="M 166.63618,208.02892 96.585,239.10674"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-start:none;marker-mid:none;marker-end:url(#EmptyDiamondMend)" />
- <path
- inkscape:connector-curvature="0"
- inkscape:connection-end-point="d4"
- inkscape:connection-start-point="d4"
- inkscape:connection-start="#g14080-8-5"
- inkscape:connection-end="#g12933-3-2"
- transform="translate(-848.99032,225.45742)"
- inkscape:connector-type="polyline"
- id="path14465-9-9"
- d="M 166.63618,71.362225 97.512166,102.02872"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-start:none;marker-mid:none;marker-end:url(#EmptyDiamondMend)" />
- <g
- transform="translate(-0.68341,0)"
- id="g5583-2"
- style="opacity:0.5;fill:#000000;stroke:#000000">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path4918-6"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-738.58143,1.22892)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:#000000;font-family:Bitstream Vera Sans"
- x="-810.40076"
- y="211.59058"
- id="text4920-1"><tspan
- sodipodi:role="line"
- id="tspan4922-9"
- x="-810.40076"
- y="211.59058">C</tspan></text>
- </g>
- <path
- transform="translate(-848.99032,225.45742)"
- inkscape:connection-end-point="d4"
- inkscape:connection-end="#g12933-3-2"
- inkscape:connection-start-point="d4"
- inkscape:connection-start="#g5583-2"
- inkscape:connector-curvature="3"
- inkscape:connector-type="polyline"
- id="path5588-9"
- d="m 52.173733,20.478573 0,50.004103"
- style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#marker8638)" />
- <g
- transform="translate(-4.5930013,-154.28292)"
- id="g14080-8-5-0"
- style="fill:#0000ff;stroke:#0000ff">
- <path
- sodipodi:type="arc"
- style="fill:#0000ff;fill-opacity:0;fill-rule:evenodd;stroke:#0000ff;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-67-4-3-2"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-580.01,81.22892)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#0000ff;fill-opacity:1;stroke:#0000ff;font-family:Bitstream Vera Sans"
- x="-651.82935"
- y="291.59058"
- id="text12629-9-3-1-2-2-5-5"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-77-5-6-1"
- x="-651.82935"
- y="291.59058">C'</tspan></text>
- </g>
- </g>
- <path
- style="fill:#0000ff;stroke:#0000ff;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#marker8638)"
- d="m 1380.7238,-230.93407 0,58.53617"
- id="path9998"
- inkscape:connector-curvature="0" />
- <path
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3, 3;stroke-dashoffset:0;marker-end:url(#marker8644)"
- d="m 1653.4483,189.643 -63.7931,37.93103"
- id="path10000"
- inkscape:connector-curvature="0"
- transform="translate(-317.55211,-451.61155)" />
- </g>
-</svg>
--- a/docs/figures/git.svg Tue Jun 23 16:49:24 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,863 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="910.36212"
- height="598.43103"
- id="svg12964"
- version="1.1"
- inkscape:version="0.48.3.1 r9886"
- sodipodi:docname="git.svg">
- <defs
- id="defs12966">
- <marker
- inkscape:stockid="Arrow1Mend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Mend"
- style="overflow:visible">
- <path
- id="path4078"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.4,0,0,-0.4,-4,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend"
- style="overflow:visible">
- <path
- id="path4072"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.8,0,0,-0.8,-10,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Lstart"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lstart"
- style="overflow:visible">
- <path
- id="path4069"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.8,0,0,0.8,10,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 526.18109 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="744.09448 : 526.18109 : 1"
- inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
- id="perspective12972" />
- <inkscape:perspective
- id="perspective13312"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM"
- style="overflow:visible">
- <path
- id="path6393"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13318"
- style="overflow:visible">
- <path
- id="path13320"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <inkscape:perspective
- id="perspective13418"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-1"
- style="overflow:visible">
- <path
- id="path6393-1"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13424"
- style="overflow:visible">
- <path
- id="path13426"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13428"
- style="overflow:visible">
- <path
- id="path13430"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13432"
- style="overflow:visible">
- <path
- id="path13434"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="EmptyDiamondMend"
- style="overflow:visible">
- <path
- id="path6456"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13438"
- style="overflow:visible">
- <path
- id="path13440"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <inkscape:perspective
- id="perspective13583"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-0"
- style="overflow:visible">
- <path
- id="path6393-5"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13589"
- style="overflow:visible">
- <path
- id="path13591"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13593"
- style="overflow:visible">
- <path
- id="path13595"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <inkscape:perspective
- id="perspective13743"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="DotM-2"
- style="overflow:visible">
- <path
- id="path6393-2"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13749"
- style="overflow:visible">
- <path
- id="path13751"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13753"
- style="overflow:visible">
- <path
- id="path13755"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="DotM"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13757"
- style="overflow:visible">
- <path
- id="path13759"
- d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
- transform="matrix(0.4,0,0,0.4,2.96,0.4)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="EmptyDiamondMend-3"
- style="overflow:visible">
- <path
- id="path6456-4"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <marker
- inkscape:stockid="EmptyDiamondMend"
- orient="auto"
- refY="0"
- refX="0"
- id="marker13763"
- style="overflow:visible">
- <path
- id="path13765"
- d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 0,-7.0710768 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.4,0,0,0.4,-2.6,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <inkscape:perspective
- id="perspective15593"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend-2"
- style="overflow:visible">
- <path
- id="path4072-8"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.8,0,0,-0.8,-10,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <inkscape:perspective
- id="perspective15593-5"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend-6"
- style="overflow:visible">
- <path
- id="path4072-7"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.8,0,0,-0.8,-10,0)"
- inkscape:connector-curvature="0" />
- </marker>
- <inkscape:perspective
- id="perspective15593-1"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend-29"
- style="overflow:visible">
- <path
- id="path4072-70"
- d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.8,0,0,-0.8,-10,0)"
- inkscape:connector-curvature="0" />
- </marker>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="0.7"
- inkscape:cx="267.70686"
- inkscape:cy="266.91354"
- inkscape:document-units="px"
- inkscape:current-layer="g13382"
- showgrid="false"
- inkscape:window-width="1280"
- inkscape:window-height="776"
- inkscape:window-x="0"
- inkscape:window-y="24"
- inkscape:window-maximized="1"
- fit-margin-top="5"
- fit-margin-bottom="5"
- fit-margin-right="5"
- fit-margin-left="5" />
- <metadata
- id="metadata12969">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-120.93016,350.21716)">
- <g
- id="g16677"
- transform="translate(-83.33333,-403.33333)">
- <g
- transform="translate(63.770124,322.85714)"
- id="g13934">
- <g
- transform="translate(994.04378,-358.66548)"
- id="g13382">
- <g
- style="opacity:0.5"
- transform="translate(0,5.2380981)"
- id="g12933-9">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-8"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,146.64336)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-811.76758"
- y="357.005"
- id="text12629-9-3-1-4"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-9"
- x="-811.76758"
- y="357.005">B</tspan></text>
- </g>
- <g
- style="opacity:0.5"
- id="g12945-3">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-9-9"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,288.54815)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-810.71423"
- y="498.90979"
- id="text12629-9-3-1-8-9"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-7-0"
- x="-810.71423"
- y="498.90979">A</tspan></text>
- </g>
- <g
- id="g12957-8">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-6-3"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-810.71423"
- y="635.57648"
- id="text12629-9-3-1-83-0"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-5-1"
- x="-810.71423"
- y="635.57648">Z</tspan></text>
- </g>
- <path
- inkscape:connector-type="polyline"
- id="path12950-7"
- d="m -797.5,393.91867 0,41.35798"
- style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- inkscape:connector-curvature="0"
- inkscape:connection-end-point="d4"
- inkscape:connection-end="#g12945-3"
- inkscape:connection-start-point="d4"
- inkscape:connection-start="#g12933-9" />
- <path
- inkscape:connector-type="polyline"
- id="path12962-0"
- d="m -797.5,533.2573 0,38.68599"
- style="opacity:0.5;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- inkscape:connector-curvature="0"
- inkscape:connection-end-point="d4"
- inkscape:connection-end="#g12957-8"
- inkscape:connection-start-point="d4"
- inkscape:connection-start="#g12945-3" />
- <g
- id="g14080">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-67"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-580.01,81.22892)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-651.82935"
- y="291.59058"
- id="text12629-9-3-1-2"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-77"
- x="-651.82935"
- y="291.59058">B'</tspan></text>
- </g>
- <g
- id="g14034">
- <path
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- id="path12627-8-4-1-9-2"
- sodipodi:cx="-172.85715"
- sodipodi:cy="399.50504"
- sodipodi:rx="147.14285"
- sodipodi:ry="100"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- transform="matrix(0.33294398,0,0,0.48990327,-580.01,217.89561)" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="-650.776"
- y="428.25726"
- id="text12629-9-3-1-8-0"><tspan
- sodipodi:role="line"
- id="tspan12631-6-9-0-7-7"
- x="-650.776"
- y="428.25726">A'</tspan></text>
- </g>
- <path
- inkscape:connector-type="polyline"
- transform="translate(-848.99032,225.45742)"
- id="path14087"
- d="M 181.50292,226.948 81.415976,356.68521"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- inkscape:connector-curvature="0"
- inkscape:connection-start-point="d4"
- inkscape:connection-start="#g14034"
- inkscape:connection-end-point="d4"
- inkscape:connection-end="#g12957-8" />
- <path
- inkscape:connector-type="polyline"
- transform="translate(-848.99032,225.45742)"
- id="path14089"
- d="m 211.42857,100.48065 0,38.68604"
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- inkscape:connector-curvature="0"
- inkscape:connection-end-point="d4"
- inkscape:connection-end="#g14034"
- inkscape:connection-start-point="d4"
- inkscape:connection-start="#g14080" />
- </g>
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- x="224.57932"
- y="372.93292"
- id="text13894"><tspan
- sodipodi:role="line"
- id="tspan13896"
- x="224.57932"
- y="372.93292" /></text>
- </g>
- </g>
- <g
- id="g14037"
- transform="translate(-209.2775,-468.21686)">
- <g
- id="g13702"
- transform="translate(1669.5314,38.478002)">
- <g
- id="g12933-3"
- transform="translate(0.68341,5.2381)">
- <path
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,146.64336)"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- sodipodi:ry="100"
- sodipodi:rx="147.14285"
- sodipodi:cy="399.50504"
- sodipodi:cx="-172.85715"
- id="path12627-8-4-1-5"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc" />
- <text
- id="text12629-9-3-1-28"
- y="357.005"
- x="-811.76758"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="357.005"
- x="-811.76758"
- id="tspan12631-6-9-0-73"
- sodipodi:role="line">B</tspan></text>
- </g>
- <g
- id="g12945-5"
- transform="translate(0.68341,0)">
- <path
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,288.54815)"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- sodipodi:ry="100"
- sodipodi:rx="147.14285"
- sodipodi:cy="399.50504"
- sodipodi:cx="-172.85715"
- id="path12627-8-4-1-9-8"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc" />
- <text
- id="text12629-9-3-1-8-87"
- y="498.90979"
- x="-810.71423"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="498.90979"
- x="-810.71423"
- id="tspan12631-6-9-0-7-3"
- sodipodi:role="line">A</tspan></text>
- </g>
- <g
- id="g12957-3"
- transform="translate(0.68341,0)">
- <path
- transform="matrix(0.33294398,0,0,0.48990327,-739.94825,425.21479)"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- sodipodi:ry="100"
- sodipodi:rx="147.14285"
- sodipodi:cy="399.50504"
- sodipodi:cx="-172.85715"
- id="path12627-8-4-1-6-8"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc" />
- <text
- id="text12629-9-3-1-83-5"
- y="635.57648"
- x="-810.71423"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="635.57648"
- x="-810.71423"
- id="tspan12631-6-9-0-5-4"
- sodipodi:role="line">Z</tspan></text>
- </g>
- <path
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- d="m -796.81659,393.9166 0,41.36212"
- id="path12950-85"
- inkscape:connector-type="polyline"
- inkscape:connection-start="#g12933-3"
- inkscape:connection-end="#g12945-5"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <path
- style="fill:#000000;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- d="m -796.81659,533.25522 0,38.69014"
- id="path12962-4"
- inkscape:connector-type="polyline"
- inkscape:connection-start="#g12945-5"
- inkscape:connection-end="#g12957-3"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0" />
- <g
- id="g14080-8">
- <path
- transform="matrix(0.33294398,0,0,0.48990327,-580.01,81.22892)"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- sodipodi:ry="100"
- sodipodi:rx="147.14285"
- sodipodi:cy="399.50504"
- sodipodi:cx="-172.85715"
- id="path12627-8-4-1-67-4"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc" />
- <text
- id="text12629-9-3-1-2-2"
- y="291.59058"
- x="-651.82935"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="291.59058"
- x="-651.82935"
- id="tspan12631-6-9-0-77-5"
- sodipodi:role="line">B'</tspan></text>
- </g>
- <g
- id="g14034-8">
- <path
- transform="matrix(0.33294398,0,0,0.48990327,-580.01,217.89561)"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- sodipodi:ry="100"
- sodipodi:rx="147.14285"
- sodipodi:cy="399.50504"
- sodipodi:cx="-172.85715"
- id="path12627-8-4-1-9-2-4"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc" />
- <text
- id="text12629-9-3-1-8-0-4"
- y="428.25726"
- x="-650.776"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="428.25726"
- x="-650.776"
- id="tspan12631-6-9-0-7-7-3"
- sodipodi:role="line">A'</tspan></text>
- </g>
- <path
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- d="M 181.58323,227.00991 81.848934,356.84479"
- id="path14087-4"
- inkscape:connector-type="polyline"
- inkscape:connection-start="#g14034-8"
- inkscape:connection-end="#g12957-3"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0"
- transform="translate(-848.99032,225.45742)" />
- <path
- style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#DotM)"
- d="m 211.42857,100.48065 0,38.68604"
- id="path14089-8"
- inkscape:connector-type="polyline"
- inkscape:connection-start="#g14080-8"
- inkscape:connection-end="#g14034-8"
- inkscape:connection-start-point="d4"
- inkscape:connection-end-point="d4"
- inkscape:connector-curvature="0"
- transform="translate(-848.99032,225.45742)" />
- <g
- id="g5583"
- transform="translate(-0.68341,0)"
- style="fill:#000000;stroke:#000000">
- <path
- transform="matrix(0.33294398,0,0,0.48990327,-738.58143,1.22892)"
- d="m -25.714294,399.50504 c 0,55.22847 -65.8781,100 -147.142856,100 -81.26475,0 -147.14285,-44.77153 -147.14285,-100 0,-55.22848 65.8781,-100 147.14285,-100 81.264756,0 147.142856,44.77152 147.142856,100 z"
- sodipodi:ry="100"
- sodipodi:rx="147.14285"
- sodipodi:cy="399.50504"
- sodipodi:cx="-172.85715"
- id="path4918"
- style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#000000;stroke-width:12.38024521;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
- sodipodi:type="arc" />
- <text
- id="text4920"
- y="211.59058"
- x="-810.40076"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:#000000;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="211.59058"
- x="-810.40076"
- id="tspan4922"
- sodipodi:role="line">C</tspan></text>
- </g>
- <path
- style="fill:#000000;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 52.173733,20.478573 0,50.004103"
- id="path5588"
- inkscape:connector-type="polyline"
- inkscape:connector-curvature="3"
- inkscape:connection-start="#g5583"
- inkscape:connection-start-point="d4"
- inkscape:connection-end="#g12933-3"
- inkscape:connection-end-point="d4"
- transform="translate(-848.99032,225.45742)" />
- </g>
- </g>
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
- x="199.11453"
- y="-241.73866"
- id="text17638"
- sodipodi:linespacing="125%"><tspan
- sodipodi:role="line"
- id="tspan17640"
- x="199.11453"
- y="-241.73866"
- style="fill:#0000ff;stroke:#0000ff">feature-babar</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
- x="531.01886"
- y="-314.82654"
- id="text17638-9"
- sodipodi:linespacing="125%"><tspan
- sodipodi:role="line"
- id="tspan17640-9"
- x="531.01886"
- y="-314.82654"
- style="fill:#0000ff;stroke:#0000ff"><tspan
- style="fill:#008000;stroke:#008000"
- id="tspan17684">other/</tspan>feature-babar</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
- x="751.01886"
- y="-222.82655"
- id="text17638-9-2"
- sodipodi:linespacing="125%"><tspan
- sodipodi:role="line"
- id="tspan17640-9-8"
- x="751.01886"
- y="-222.82655"
- style="fill:#0000ff;stroke:#0000ff">feature-babar</tspan></text>
- </g>
-</svg>
--- a/docs/figures/simple-3-merge.svg Tue Jun 23 16:49:24 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="27 1677 497 345" width="497pt" height="345pt"><metadata xmlns:dc="http://purl.org/dc/elements/1.1/"><dc:date>2012-03-21 08:32Z</dc:date><!-- Produced by OmniGraffle Professional 5.3.6 --></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="3.488"/><feOffset in="blur" result="offset" dx="0" dy="4"/><feFlood flood-color="black" flood-opacity=".75" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="26" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.31641" slope="0" x-height="522.94922" cap-height="717.2852" ascent="770.0196" descent="-229.98048" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledDiamond_Marker" viewBox="-1 -3 6 6" markerWidth="6" markerHeight="6" color="red"><g><path d="M 3.7333333 0 L 1.8666667 -1.4 L 0 0 L 1.8666667 1.4 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><g><title>Layer 1</title><g><use xl:href="#id500_Graphic" filter="url(#Shadow)"/><use xl:href="#id501_Graphic" filter="url(#Shadow)"/><use xl:href="#id503_Graphic" filter="url(#Shadow)"/><use xl:href="#id504_Graphic" filter="url(#Shadow)"/><use xl:href="#id507_Graphic" filter="url(#Shadow)"/><use xl:href="#id509_Graphic" filter="url(#Shadow)"/><use xl:href="#id510_Graphic" filter="url(#Shadow)"/><use xl:href="#id516_Graphic" filter="url(#Shadow)"/><use xl:href="#id284_Graphic" filter="url(#Shadow)"/><use xl:href="#id520_Graphic" filter="url(#Shadow)"/><use xl:href="#id523_Graphic" filter="url(#Shadow)"/></g><g id="id500_Graphic"><rect x="47" y="1726.5562" width="143" height="260.96387" fill="white" fill-opacity=".5"/><rect x="47" y="1726.5562" width="143" height="260.96387" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id501_Graphic"><circle cx="118.50044" cy="1853.0206" r="28.346527" fill="red"/><circle cx="118.50044" cy="1853.0206" r="28.346527" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(100.82328 1837.5206)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="118.50028" y1="1913.1742" x2="118.500366" y2="1881.8672" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id503_Graphic"><path d="M 128.52223 1917.8254 C 134.05725 1923.3605 134.05725 1932.3344 128.52223 1937.8694 C 122.98724 1943.4044 114.013245 1943.4044 108.478256 1937.8694 C 102.94323 1932.3344 102.94323 1923.3605 108.478256 1917.8254 C 114.013245 1912.2904 122.98724 1912.2904 128.52223 1917.8254" fill="black"/><path d="M 128.52223 1917.8254 C 134.05725 1923.3605 134.05725 1932.3344 128.52223 1937.8694 C 122.98724 1943.4044 114.013245 1943.4044 108.478256 1937.8694 C 102.94323 1932.3344 102.94323 1923.3605 108.478256 1917.8254 C 114.013245 1912.2904 122.98724 1912.2904 128.52223 1917.8254" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id504_Graphic"><path d="M 128.52223 1963.3254 C 134.05725 1968.8605 134.05725 1977.8344 128.52223 1983.3694 C 122.98724 1988.9044 114.013245 1988.9044 108.478256 1983.3694 C 102.94323 1977.8344 102.94323 1968.8605 108.478256 1963.3254 C 114.013245 1957.7904 122.98724 1957.7904 128.52223 1963.3254" fill="black"/><path d="M 128.52223 1963.3254 C 134.05725 1968.8605 134.05725 1977.8344 128.52223 1983.3694 C 122.98724 1988.9044 114.013245 1988.9044 108.478256 1983.3694 C 102.94323 1977.8344 102.94323 1968.8605 108.478256 1963.3254 C 114.013245 1957.7904 122.98724 1957.7904 128.52223 1963.3254" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="118.500244" y1="1942.5206" x2="118.500244" y2="1958.6742" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id507_Graphic"><rect x="285.5" y="1693.958" width="218" height="303.08691" fill="white" fill-opacity=".5"/><rect x="285.5" y="1693.958" width="218" height="303.08691" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="393.10345" y1="1925.458" x2="364.69406" y2="1885.965" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id509_Graphic"><path d="M 411.69525 1927.3492 C 417.23026 1932.8843 417.23026 1941.8582 411.69525 1947.3932 C 406.16025 1952.9282 397.18625 1952.9282 391.65125 1947.3932 C 386.11624 1941.8582 386.11624 1932.8843 391.65125 1927.3492 C 397.18625 1921.8142 406.16025 1921.8142 411.69525 1927.3492" fill="black"/><path d="M 411.69525 1927.3492 C 417.23026 1932.8843 417.23026 1941.8582 411.69525 1947.3932 C 406.16025 1952.9282 397.18625 1952.9282 391.65125 1947.3932 C 386.11624 1941.8582 386.11624 1932.8843 391.65125 1927.3492 C 397.18625 1921.8142 406.16025 1921.8142 411.69525 1927.3492" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id510_Graphic"><path d="M 411.69525 1972.8492 C 417.23026 1978.3843 417.23026 1987.3582 411.69525 1992.8932 C 406.16025 1998.4282 397.18625 1998.4282 391.65125 1992.8932 C 386.11624 1987.3582 386.11624 1978.3843 391.65125 1972.8492 C 397.18625 1967.3142 406.16025 1967.3142 411.69525 1972.8492" fill="black"/><path d="M 411.69525 1972.8492 C 417.23026 1978.3843 417.23026 1987.3582 411.69525 1992.8932 C 406.16025 1998.4282 397.18625 1998.4282 391.65125 1992.8932 C 386.11624 1987.3582 386.11624 1978.3843 391.65125 1972.8492 C 397.18625 1967.3142 406.16025 1967.3142 411.69525 1972.8492" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="401.67789" y1="1952.0444" x2="401.68301" y2="1968.198" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id516_Graphic"><circle cx="347.84644" cy="1862.5444" r="28.346533" fill="red" fill-opacity=".5"/><path d="M 367.89038 1842.5005 C 378.96042 1853.5704 378.96042 1871.5184 367.89038 1882.5884 C 356.8204 1893.6584 338.87247 1893.6584 327.8025 1882.5884 C 316.73245 1871.5184 316.73245 1853.5704 327.8025 1842.5005 C 338.87247 1831.4304 356.8204 1831.4304 367.89038 1842.5005" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,5"/><text transform="translate(330.16928 1847.0444)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="427.0911" y1="1818.7612" x2="385.31204" y2="1841.8445" marker-end="url(#FilledDiamond_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" stroke-dasharray="1,4"/><line x1="118.50028" y1="1824.1741" x2="118.50015" y2="1800.5271" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id284_Graphic"><circle cx="118.5" cy="1771.6807" r="28.346527" fill="yellow"/><circle cx="118.5" cy="1771.6807" r="28.346527" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(100.82284 1756.1807)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">B</tspan></text></g><g id="id520_Graphic"><circle cx="347.84644" cy="1754.9026" r="28.346533" fill="yellow" fill-opacity=".5"/><path d="M 367.89038 1734.8586 C 378.96042 1745.9286 378.96042 1763.8766 367.89038 1774.9465 C 356.8204 1786.0166 338.87247 1786.0166 327.8025 1774.9465 C 316.73245 1763.8766 316.73245 1745.9286 327.8025 1734.8586 C 338.87247 1723.7886 356.8204 1723.7886 367.89038 1734.8586" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,5"/><text transform="translate(330.16928 1739.4026)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">B</tspan></text></g><line x1="347.84897" y1="1833.698" x2="347.85342" y2="1783.749" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><line x1="406.91367" y1="1923.662" x2="442.04407" y2="1831.7589" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id523_Graphic"><circle cx="452.34644" cy="1804.8074" r="28.346533" fill="#ff8000"/><circle cx="452.34644" cy="1804.8074" r="28.346533" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(434.66928 1789.3074)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="8.2889767" y="25" textLength="18.776367">C</tspan></text></g><line x1="426.309" y1="1792.373" x2="386.4721" y2="1773.3486" marker-end="url(#FilledDiamond_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" stroke-dasharray="1,4"/></g></g></svg>
--- a/docs/figures/simple-4-reorder.svg Tue Jun 23 16:49:24 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="27 2166 497 345" width="497pt" height="345pt"><metadata xmlns:dc="http://purl.org/dc/elements/1.1/"><dc:date>2012-03-21 08:32Z</dc:date><!-- Produced by OmniGraffle Professional 5.3.6 --></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="3.488"/><feOffset in="blur" result="offset" dx="0" dy="4"/><feFlood flood-color="black" flood-opacity=".75" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledDiamond_Marker" viewBox="-1 -3 6 6" markerWidth="6" markerHeight="6" color="red"><g><path d="M 3.7333333 0 L 1.8666667 -1.4 L 0 0 L 1.8666667 1.4 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><font-face font-family="Helvetica" font-size="26" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.31641" slope="0" x-height="522.94922" cap-height="717.2852" ascent="770.0196" descent="-229.98048" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><g><title>Layer 1</title><g><use xl:href="#id532_Graphic" filter="url(#Shadow)"/><use xl:href="#id525_Graphic" filter="url(#Shadow)"/><use xl:href="#id526_Graphic" filter="url(#Shadow)"/><use xl:href="#id528_Graphic" filter="url(#Shadow)"/><use xl:href="#id529_Graphic" filter="url(#Shadow)"/><use xl:href="#id534_Graphic" filter="url(#Shadow)"/><use xl:href="#id535_Graphic" filter="url(#Shadow)"/><use xl:href="#id537_Graphic" filter="url(#Shadow)"/><use xl:href="#id540_Graphic" filter="url(#Shadow)"/><use xl:href="#id541_Graphic" filter="url(#Shadow)"/><use xl:href="#id546_Graphic" filter="url(#Shadow)"/><use xl:href="#id549_Graphic" filter="url(#Shadow)"/></g><g id="id532_Graphic"><rect x="285.5" y="2182.9602" width="218" height="303.08691" fill="white" fill-opacity=".5"/><rect x="285.5" y="2182.9602" width="218" height="303.08691" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="427.7653" y1="2330.3635" x2="376.8968" y2="2275.3335" marker-end="url(#FilledDiamond_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" stroke-dasharray="1,4"/><g id="id525_Graphic"><rect x="47" y="2215.56" width="143" height="260.96387" fill="white" fill-opacity=".5"/><rect x="47" y="2215.56" width="143" height="260.96387" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id526_Graphic"><path d="M 138.5444 2321.9729 C 149.61443 2333.043 149.61443 2350.9907 138.5444 2362.0608 C 127.47443 2373.1309 109.526474 2373.1309 98.456505 2362.0608 C 87.386475 2350.9907 87.386475 2333.043 98.456505 2321.9729 C 109.526474 2310.9028 127.47443 2310.9028 138.5444 2321.9729" fill="red"/><path d="M 138.5444 2321.9729 C 149.61443 2333.043 149.61443 2350.9907 138.5444 2362.0608 C 127.47443 2373.1309 109.526474 2373.1309 98.456505 2362.0608 C 87.386475 2350.9907 87.386475 2333.043 98.456505 2321.9729 C 109.526474 2310.9028 127.47443 2310.9028 138.5444 2321.9729" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(100.82329 2326.5168)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="118.50029" y1="2402.1704" x2="118.500374" y2="2370.8633" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id528_Graphic"><path d="M 128.52225 2406.8218 C 134.05727 2412.3567 134.05727 2421.3308 128.52225 2426.8657 C 122.98724 2432.4009 114.01326 2432.4009 108.478264 2426.8657 C 102.94324 2421.3308 102.94324 2412.3567 108.478264 2406.8218 C 114.01326 2401.2866 122.98724 2401.2866 128.52225 2406.8218" fill="black"/><path d="M 128.52225 2406.8218 C 134.05727 2412.3567 134.05727 2421.3308 128.52225 2426.8657 C 122.98724 2432.4009 114.01326 2432.4009 108.478264 2426.8657 C 102.94324 2421.3308 102.94324 2412.3567 108.478264 2406.8218 C 114.01326 2401.2866 122.98724 2401.2866 128.52225 2406.8218" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id529_Graphic"><path d="M 128.52225 2452.3218 C 134.05727 2457.8567 134.05727 2466.8308 128.52225 2472.3657 C 122.98724 2477.9009 114.01326 2477.9009 108.478264 2472.3657 C 102.94324 2466.8308 102.94324 2457.8567 108.478264 2452.3218 C 114.01326 2446.7866 122.98724 2446.7866 128.52225 2452.3218" fill="black"/><path d="M 128.52225 2452.3218 C 134.05727 2457.8567 134.05727 2466.8308 128.52225 2472.3657 C 122.98724 2477.9009 114.01326 2477.9009 108.478264 2472.3657 C 102.94324 2466.8308 102.94324 2457.8567 108.478264 2452.3218 C 114.01326 2446.7866 122.98724 2446.7866 128.52225 2452.3218" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="118.50025" y1="2431.5171" x2="118.50025" y2="2447.6704" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="393.10349" y1="2414.4607" x2="364.69394" y2="2374.9673" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id534_Graphic"><path d="M 411.69525 2416.352 C 417.23026 2421.887 417.23026 2430.8611 411.69525 2436.396 C 406.16025 2441.9312 397.18625 2441.9312 391.65125 2436.396 C 386.11624 2430.8611 386.11624 2421.887 391.65125 2416.352 C 397.18625 2410.8169 406.16025 2410.8169 411.69525 2416.352" fill="black"/><path d="M 411.69525 2416.352 C 417.23026 2421.887 417.23026 2430.8611 411.69525 2436.396 C 406.16025 2441.9312 397.18625 2441.9312 391.65125 2436.396 C 386.11624 2430.8611 386.11624 2421.887 391.65125 2416.352 C 397.18625 2410.8169 406.16025 2410.8169 411.69525 2416.352" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id535_Graphic"><path d="M 411.69525 2461.852 C 417.23026 2467.387 417.23026 2476.3611 411.69525 2481.896 C 406.16025 2487.4312 397.18625 2487.4312 391.65125 2481.896 C 386.11624 2476.3611 386.11624 2467.387 391.65125 2461.852 C 397.18625 2456.3169 406.16025 2456.3169 411.69525 2461.852" fill="black"/><path d="M 411.69525 2461.852 C 417.23026 2467.387 417.23026 2476.3611 411.69525 2481.896 C 406.16025 2487.4312 397.18625 2487.4312 391.65125 2481.896 C 386.11624 2476.3611 386.11624 2467.387 391.65125 2461.852 C 397.18625 2456.3169 406.16025 2456.3169 411.69525 2461.852" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="401.67325" y1="2441.0474" x2="401.67325" y2="2457.2007" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id537_Graphic"><path d="M 367.89038 2331.5027 C 378.96042 2342.5728 378.96042 2360.5205 367.89038 2371.5906 C 356.8204 2382.6606 338.87247 2382.6606 327.8025 2371.5906 C 316.73245 2360.5205 316.73245 2342.5728 327.8025 2331.5027 C 338.87247 2320.4326 356.8204 2320.4326 367.89038 2331.5027" fill="red" fill-opacity=".5"/><path d="M 367.89038 2331.5027 C 378.96042 2342.5728 378.96042 2360.5205 367.89038 2371.5906 C 356.8204 2382.6606 338.87247 2382.6606 327.8025 2371.5906 C 316.73245 2360.5205 316.73245 2342.5728 327.8025 2331.5027 C 338.87247 2320.4326 356.8204 2320.4326 367.89038 2331.5027" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,5"/><text transform="translate(330.16928 2336.0466)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="118.500275" y1="2313.1704" x2="118.50013" y2="2289.523" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id540_Graphic"><path d="M 138.5439 2240.6326 C 149.61392 2251.7026 149.61392 2269.6504 138.5439 2280.7205 C 127.47393 2291.7905 109.52598 2291.7905 98.45601 2280.7205 C 87.38598 2269.6504 87.38598 2251.7026 98.45601 2240.6326 C 109.52598 2229.5625 127.47393 2229.5625 138.5439 2240.6326" fill="yellow"/><path d="M 138.5439 2240.6326 C 149.61392 2251.7026 149.61392 2269.6504 138.5439 2280.7205 C 127.47393 2291.7905 109.52598 2291.7905 98.45601 2280.7205 C 87.38598 2269.6504 87.38598 2251.7026 98.45601 2240.6326 C 109.52598 2229.5625 127.47393 2229.5625 138.5439 2240.6326" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(100.82279 2245.1765)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">B</tspan></text></g><g id="id541_Graphic"><path d="M 367.89038 2223.8625 C 378.96042 2234.9326 378.96042 2252.8804 367.89038 2263.9504 C 356.8204 2275.0205 338.87247 2275.0205 327.8025 2263.9504 C 316.73245 2252.8804 316.73245 2234.9326 327.8025 2223.8625 C 338.87247 2212.7925 356.8204 2212.7925 367.89038 2223.8625" fill="yellow" fill-opacity=".5"/><path d="M 367.89038 2223.8625 C 378.96042 2234.9326 378.96042 2252.8804 367.89038 2263.9504 C 356.8204 2275.0205 338.87247 2275.0205 327.8025 2263.9504 C 316.73245 2252.8804 316.73245 2234.9326 327.8025 2223.8625 C 338.87247 2212.7925 356.8204 2212.7925 367.89038 2223.8625" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,5"/><text transform="translate(330.16928 2228.4065)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">B</tspan></text></g><line x1="347.84644" y1="2322.7002" x2="347.84644" y2="2272.7529" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id546_Graphic"><path d="M 467.39038 2218.6619 C 478.46042 2229.732 478.46042 2247.6797 467.39038 2258.7498 C 456.3204 2269.8198 438.37247 2269.8198 427.3025 2258.7498 C 416.23245 2247.6797 416.23245 2229.732 427.3025 2218.6619 C 438.37247 2207.5918 456.3204 2207.5918 467.39038 2218.6619" fill="red"/><path d="M 467.39038 2218.6619 C 478.46042 2229.732 478.46042 2247.6797 467.39038 2258.7498 C 456.3204 2269.8198 438.37247 2269.8198 427.3025 2258.7498 C 416.23245 2247.6797 416.23245 2229.732 427.3025 2218.6619 C 438.37247 2207.5918 456.3204 2207.5918 467.39038 2218.6619" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(429.66928 2223.2058)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="6.5243282" y="25" textLength="22.305664">A'</tspan></text></g><line x1="409.35617" y1="2413.8691" x2="432.46094" y2="2376.2634" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><line x1="447.3466" y1="2267.5522" x2="447.34692" y2="2322.7002" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id549_Graphic"><path d="M 467.39038 2331.5027 C 478.46042 2342.5728 478.46042 2360.5205 467.39038 2371.5906 C 456.3204 2382.6606 438.37247 2382.6606 427.3025 2371.5906 C 416.23245 2360.5205 416.23245 2342.5728 427.3025 2331.5027 C 438.37247 2320.4326 456.3204 2320.4326 467.39038 2331.5027" fill="yellow"/><path d="M 467.39038 2331.5027 C 478.46042 2342.5728 478.46042 2360.5205 467.39038 2371.5906 C 456.3204 2382.6606 438.37247 2382.6606 427.3025 2371.5906 C 416.23245 2360.5205 416.23245 2342.5728 427.3025 2331.5027 C 438.37247 2320.4326 456.3204 2320.4326 467.39038 2331.5027" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(429.66928 2336.0466)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="6.5243282" y="25" textLength="22.305664">B'</tspan></text></g><line x1="428.2673" y1="2260.343" x2="376.15155" y2="2319.4465" marker-end="url(#FilledDiamond_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" stroke-dasharray="1,4"/></g></g></svg>
--- a/docs/figures/simple-5-delete.svg Tue Jun 23 16:49:24 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="66 2640 420 262" width="35pc" height="262pt"><metadata xmlns:dc="http://purl.org/dc/elements/1.1/"><dc:date>2012-03-21 08:32Z</dc:date><!-- Produced by OmniGraffle Professional 5.3.6 --></metadata><defs><filter id="Shadow" filterUnits="userSpaceOnUse"><feGaussianBlur in="SourceAlpha" result="blur" stdDeviation="3.488"/><feOffset in="blur" result="offset" dx="0" dy="4"/><feFlood flood-color="black" flood-opacity=".75" result="flood"/><feComposite in="flood" in2="offset" operator="in"/></filter><font-face font-family="Helvetica" font-size="26" units-per-em="1000" underline-position="-75.683594" underline-thickness="49.31641" slope="0" x-height="522.94922" cap-height="717.2852" ascent="770.0196" descent="-229.98048" font-weight="500"><font-face-src><font-face-name name="Helvetica"/></font-face-src></font-face><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="FilledDiamond_Marker" viewBox="-1 -3 6 6" markerWidth="6" markerHeight="6" color="red"><g><path d="M 3.7333333 0 L 1.8666667 -1.4 L 0 0 L 1.8666667 1.4 Z" fill="currentColor" stroke="currentColor" stroke-width="1"/></g></marker><marker orient="auto" overflow="visible" markerUnits="strokeWidth" id="Ball_Marker" viewBox="-4 -3 5 6" markerWidth="5" markerHeight="6" color="red"><g><circle cx="-1.3999994" cy="0" r="1.3999988" fill="none" stroke="currentColor" stroke-width="1"/></g></marker></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><g><title>Layer 1</title><g><use xl:href="#id575_Graphic" filter="url(#Shadow)"/><use xl:href="#id554_Graphic" filter="url(#Shadow)"/><use xl:href="#id555_Graphic" filter="url(#Shadow)"/><use xl:href="#id557_Graphic" filter="url(#Shadow)"/><use xl:href="#id558_Graphic" filter="url(#Shadow)"/><use xl:href="#id562_Graphic" filter="url(#Shadow)"/><use xl:href="#id563_Graphic" filter="url(#Shadow)"/><use xl:href="#id565_Graphic" filter="url(#Shadow)"/></g><g id="id575_Graphic"><rect x="322.92328" y="2656" width="143" height="221.08398" fill="white" fill-opacity=".5"/><rect x="322.92328" y="2656" width="143" height="221.08398" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id554_Graphic"><rect x="86" y="2670.28" width="143" height="192.52393" fill="white" fill-opacity=".5"/><rect x="86" y="2670.28" width="143" height="192.52393" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id555_Graphic"><path d="M 177.54439 2708.2524 C 188.61441 2719.3225 188.61441 2737.2703 177.54439 2748.3403 C 166.47443 2759.4104 148.52646 2759.4104 137.4565 2748.3403 C 126.38647 2737.2703 126.38647 2719.3225 137.4565 2708.2524 C 148.52646 2697.1824 166.47443 2697.1824 177.54439 2708.2524" fill="red"/><path d="M 177.54439 2708.2524 C 188.61441 2719.3225 188.61441 2737.2703 177.54439 2748.3403 C 166.47443 2759.4104 148.52646 2759.4104 137.4565 2748.3403 C 126.38647 2737.2703 126.38647 2719.3225 137.4565 2708.2524 C 148.52646 2697.1824 166.47443 2697.1824 177.54439 2708.2524" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><text transform="translate(139.82329 2712.7964)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="157.50027" y1="2788.45" x2="157.50037" y2="2757.1428" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id557_Graphic"><path d="M 167.52223 2793.1013 C 173.05725 2798.6362 173.05725 2807.6104 167.52223 2813.1453 C 161.98724 2818.6804 153.013245 2818.6804 147.47826 2813.1453 C 141.94324 2807.6104 141.94324 2798.6362 147.47826 2793.1013 C 153.013245 2787.5662 161.98724 2787.5662 167.52223 2793.1013" fill="black"/><path d="M 167.52223 2793.1013 C 173.05725 2798.6362 173.05725 2807.6104 167.52223 2813.1453 C 161.98724 2818.6804 153.013245 2818.6804 147.47826 2813.1453 C 141.94324 2807.6104 141.94324 2798.6362 147.47826 2793.1013 C 153.013245 2787.5662 161.98724 2787.5662 167.52223 2793.1013" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id558_Graphic"><path d="M 167.52223 2838.6013 C 173.05725 2844.1362 173.05725 2853.1104 167.52223 2858.6453 C 161.98724 2864.1804 153.013245 2864.1804 147.47826 2858.6453 C 141.94324 2853.1104 141.94324 2844.1362 147.47826 2838.6013 C 153.013245 2833.0662 161.98724 2833.0662 167.52223 2838.6013" fill="black"/><path d="M 167.52223 2838.6013 C 173.05725 2844.1362 173.05725 2853.1104 167.52223 2858.6453 C 161.98724 2864.1804 153.013245 2864.1804 147.47826 2858.6453 C 141.94324 2853.1104 141.94324 2844.1362 147.47826 2838.6013 C 153.013245 2833.0662 161.98724 2833.0662 167.52223 2838.6013" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="157.50024" y1="2817.7966" x2="157.50024" y2="2833.95" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><line x1="394.42325" y1="2798.7" x2="394.42328" y2="2764.2998" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="3"/><g id="id562_Graphic"><path d="M 404.44525 2803.3513 C 409.98026 2808.8862 409.98026 2817.8604 404.44525 2823.3953 C 398.91025 2828.9304 389.93625 2828.9304 384.40125 2823.3953 C 378.86624 2817.8604 378.86624 2808.8862 384.40125 2803.3513 C 389.93625 2797.8162 398.91025 2797.8162 404.44525 2803.3513" fill="black"/><path d="M 404.44525 2803.3513 C 409.98026 2808.8862 409.98026 2817.8604 404.44525 2823.3953 C 398.91025 2828.9304 389.93625 2828.9304 384.40125 2823.3953 C 378.86624 2817.8604 378.86624 2808.8862 384.40125 2803.3513 C 389.93625 2797.8162 398.91025 2797.8162 404.44525 2803.3513" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><g id="id563_Graphic"><path d="M 404.44525 2848.8513 C 409.98026 2854.3862 409.98026 2863.3604 404.44525 2868.8953 C 398.91025 2874.4304 389.93625 2874.4304 384.40125 2868.8953 C 378.86624 2863.3604 378.86624 2854.3862 384.40125 2848.8513 C 389.93625 2843.3162 398.91025 2843.3162 404.44525 2848.8513" fill="black"/><path d="M 404.44525 2848.8513 C 409.98026 2854.3862 409.98026 2863.3604 404.44525 2868.8953 C 398.91025 2874.4304 389.93625 2874.4304 384.40125 2868.8953 C 378.86624 2863.3604 378.86624 2854.3862 384.40125 2848.8513 C 389.93625 2843.3162 398.91025 2843.3162 404.44525 2848.8513" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/></g><line x1="394.42325" y1="2828.0466" x2="394.42325" y2="2844.2" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1"/><g id="id565_Graphic"><path d="M 414.46722 2715.4094 C 425.53726 2726.4795 425.53726 2744.4272 414.46722 2755.4973 C 403.39725 2766.5674 385.4493 2766.5674 374.37933 2755.4973 C 363.3093 2744.4272 363.3093 2726.4795 374.37933 2715.4094 C 385.4493 2704.3394 403.39725 2704.3394 414.46722 2715.4094" fill="red" fill-opacity=".5"/><path d="M 414.46722 2715.4094 C 425.53726 2726.4795 425.53726 2744.4272 414.46722 2755.4973 C 403.39725 2766.5674 385.4493 2766.5674 374.37933 2755.4973 C 363.3093 2744.4272 363.3093 2726.4795 374.37933 2715.4094 C 385.4493 2704.3394 403.39725 2704.3394 414.46722 2715.4094" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="1" stroke-dasharray="8,5"/><text transform="translate(376.7461 2719.9534)" fill="black"><tspan font-family="Helvetica" font-size="26" font-weight="500" x="9.006262" y="25" textLength="17.341797">A</tspan></text></g><line x1="442.8926" y1="2681.3723" x2="422.98685" y2="2703.5828" marker-end="url(#FilledDiamond_Marker)" marker-start="url(#Ball_Marker)" stroke="red" stroke-linecap="round" stroke-linejoin="round" stroke-width="3" stroke-dasharray="1,4"/></g></g></svg>
--- a/docs/from-mq.rst Tue Jun 23 16:49:24 2015 -0700
+++ b/docs/from-mq.rst Tue Jun 23 16:50:06 2015 -0700
@@ -1,12 +1,12 @@
.. Copyright 2011 Pierre-Yves David <pierre-yves.david@ens-lyon.org>
.. Logilab SA <contact@logilab.fr>
--------------------------------------------
+-----------------------------------
From MQ To Evolve, The Refugee Book
--------------------------------------------
+-----------------------------------
Cheat sheet
--------------
+-----------
============================== ============================================
mq command new equivalent
@@ -28,10 +28,10 @@
Replacement details
----------------------
+-------------------
hg qseries
-```````````
+``````````
All your work in progress is now in real changesets all the time.
@@ -45,7 +45,7 @@
wip = log -r 'not public()' --template='{rev}:{node|short} {desc|firstline}\n'
hg qnew
-````````
+```````
With evolve you handle standard changesets without an additional overlay.
@@ -66,7 +66,7 @@
new-commit=secret
hg qref
-````````
+```````
A new command from evolution will allow you to rewrite the changeset you are
currently on. Just call:
@@ -90,7 +90,7 @@
.. note: refresh is an alias for amend
hg qref --exclude
-`````````````````````
+`````````````````
To remove changes from your current commit use::
@@ -98,7 +98,7 @@
hg qpop
-`````````
+```````
The following command emulates the behavior of hg qpop:
@@ -136,14 +136,14 @@
hg qrm
-```````
+``````
evolution introduce a new command to mark a changeset as "not wanted anymore".::
$ hg prune <revset>
hg qfold
-`````````
+````````
::
@@ -151,14 +151,14 @@
$ hg fold first::last
hg qdiff
-`````````
+````````
``pdiff`` is an alias for `hg diff -r .^` It works like qdiff, but outside MQ.
hg qfinish and hg qimport
-````````````````````````````
+`````````````````````````
These are not necessary anymore. If you want to control the
mutability of changesets, see the phase feature.
@@ -166,7 +166,7 @@
hg qcommit
-```````````````
+``````````
If you really need to send patches through versioned mq patches, you should
look at the qsync extension.
--- a/docs/index.rst Tue Jun 23 16:49:24 2015 -0700
+++ b/docs/index.rst Tue Jun 23 16:50:06 2015 -0700
@@ -4,6 +4,14 @@
Changeset Evolution with Mercurial
==================================
+.. toctree::
+ :maxdepth: 2
+
+ user-guide
+ sharing
+ concepts
+ from-mq
+
`evolve`_ is an experimental Mercurial extension for safe mutable history.
.. _`evolve`: http://mercurial.selenic.com/wiki/EvolveExtension
@@ -81,17 +89,51 @@
``evolve`` is experimental!
---------------------------
-TODO
+The long-term plan for ``evolve`` is to add it to core Mercurial.
+However, it is not yet stable enough for that. In particular:
+
+ * The UI is unstable: ``evolve``'s command names and command options
+ are not completely nailed down yet. They are subject to occasional
+ backwards-incompatible changes. If you write scripts that use
+ evolve commands, a future release could break your scripts.
- * unstable UI
- * some corner cases not covered yet
+ * There are still some corner cases that aren't handled yet. If you
+ think you have found such a case, please check if it's already
+ described in the Mercurial bug tracker (http://bz.selenic.com).
+ Bugs in ``evolve`` are files under component "evolution": use
+ `this query`_ to view open bugs in ``evolve``.
+
+.. _`this query`: http://bz.selenic.com/buglist.cgi?component=evolution&bug_status=UNCONFIRMED&bug_status=CONFIRMED&bug_status=NEED_EXAMPLE
Installation and setup
----------------------
-TODO
+To use ``evolve``, you must:
+
+ #. Clone the ``evolve`` repository::
+
+ cd ~/src
+ hg clone https://bitbucket.org/marmoute/mutable-history
+
+ #. Configure the extension, either locally ::
+
+ hg config --local
+
+ or for all your repositories ::
+
+ hg config --edit
+
+ Then add ::
+
+ evolve=~/src/mutable-history/hgext/evolve.py
+
+ in the ``[extensions]`` section (adding the section if necessary). Use
+ the directory that you actually cloned to, of course.
+
Next steps:
+-----------
+
* For a practical guide to using ``evolve`` in a single repository,
see the `user guide`_.
* For more advanced tricks, see `sharing mutable history`_.
@@ -100,6 +142,6 @@
* If you're coming from MQ, see the `MQ migration guide`_ (incomplete).
.. _`user guide`: user-guide.html
+.. _`sharing mutable history`: sharing.html
.. _`concepts`: concepts.html
-.. _`sharing mutable history`: sharing.html
.. _`MQ migration guide`: from-mq.html
--- a/docs/instability.rst Tue Jun 23 16:49:24 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,222 +0,0 @@
-.. Copyright 2011 Pierre-Yves David <pierre-yves.david@ens-lyon.org>
-.. Logilab SA <contact@logilab.fr>
-
------------------------------------
-The instability Principle
------------------------------------
-
-
-
-An intrinsic contradiction
------------------------------------
-
-XXX starts by talking about getting ride of changeset.
-
-DVCSes bring two new major concepts to the version control scene:
-
- * History is organized as a robust DAG,
- * History can be rewritten.
-
-However, the two concepts are in contradiction:
-
-To achieve a robust history, three key elements are gathered in *changesets*:
-
- * Full snapshot of the versioned content,
- * Reference to the previous full snapshot used to build the new one,
- * A description of the change which leads from the old content to the new content.
-
-All three elements are used to compute a *unique* hash that identifies the changeset
-(with various other metadata). This identification is a key part of DVCS design.
-
-This is a very useful property because changing B's parent means
-changing B's content too. This requires the creation of **another**
-changeset, which is semantically good.
-
-.. figure:: ./figures/edit-is-rewrite-step2.svg
-
-
-To avoid duplication, the older changeset is usually discarded from accessible
-history. I'm calling them *obsolete* changesets.
-
-
-But rewriting a changeset with children does not change the
-children's parents! And because children of the rewritten changeset
-still **depend** on the older "dead" version of the changeset, we
-cannot get rid of this dead version.
-
-::
-
- Schema base, A and A' and B.
-
-I'm calling these children **unstable** because they are based on a
-dead changeset and prevent people from getting rid of it.
-
-This instability is an **unavoidable consequence** of the strict dependency of
-changesets. Rewriting history always needs to take it into account and
-provide a way to rewrite the descendants of the new changeset to avoid
-coexistence of the old and new versions of a rewritten changeset.
-
-
-Everybody is working around the issue
-------------------------------------------------
-
-I'm not claiming that rewriting history is impossible. People have been successfully
-doing it for years. However they all need to work around *instability*. Several
-workaround strategies exist.
-
-
-Rewriting all at once
-``````````````````````````
-
-The simplest way to avoid instability is to ensure rewriting
-operations always end in a stable situation. This is achieved by
-rewriting all affected changesets at the same time.
-
-Rewriting all descendants at the same time when rewriting a changeset.
-
-::
-
- Schema!
-
-Several Mercurial commands apply it: rebase, collapse, histedit.
-Mercurial also refuses to amend changesets with descendants. The git
-branch design enforces this approach in git too.
-
-
-However, DVCS are **distributed**. This means that you do not control what
-happens outside your repository. Once a changeset has been exchanged *outside*,
-there is no way to be sure it does not have descendants somewhere else.
-Therefore **if you rewrite changeset that exists elsewhere, you can't eradicate
-the risk of instability.**
-
-Do not rewrite exchanged changesets
-```````````````````````````````````
-
-To work around the issue above, Mercurial introduced phases, which
-prevent you from rewriting shared changesets and ensure others can't
-pull certain changesets from you. But this is a very frustrating
-limitation that prevents you to efficiently sharing, reviewing and
-collaborating on mutable changesets.
-
-In the Git world, they use another approach to prevent instability. By
-convention only a single developer works on a changeset contained in
-a named branch. But once again this is a huge blocker for
-collaborating. Moreover clueless people **will** mess up social
-convention soon or later.
-
-
-Lose the DAG robustness
-````````````````````````````
-
-The other approach in Mercurial is to keep the mutable part of the
-history outside the DVCS constraint. This is the MQ approach of
-sticking a quilt queue over Mercurial.
-
-This allow much more flexible workflow but two major feature are lost in the
-process:
-
-:graceful merge: MQ uses plain patch to store changeset contents, which has
- problems in changing context. Applying your queue
- becomes very painful when context changes.
-
-:easy branching: A quilt queue is by definition a linear queue, increasing risk
- of conflict.
-
-It is possible to collaborate over versioned MQ! But you are going to
-have a lot of trouble.
-
-Ignore conflicts
-```````````````````````````````````
-
-Another ignored issue is a conflicting rewrite of the same changeset.
-If a changeset is rewritten two times we have two newer versions,
-and duplicated history is complicated to merge.
-
-Mercurial work around by
-
-The "One set of mutable changset == One developer" mantra is also a way to work
-around conflicting rewriting of changeset. If two different people are able to
-
-The git branch model allows overwriting changeset version by another
-one, but it does not care about divergent version. It is the equivalent
-of "common ftp" source management for changesets.
-
-Facing The Danger Once And For All
-------------------------------------------------
-
-Above we saw that the more effort you put to avoid instability, the more options
-you deny. And even the most restrictive workflow can't guarantee that instability
-will never show up!
-
-Obsolete marker can handle the job
-```````````````````````````````````
-
-It is time to provide a full-featured solution to deal with
-instability and to stop working around the issue! This is why I
-am developing a new feature for Mercurial called "Obsolete markers".
-Obsolete markers have two key properties:
-
-
-* Any "old" changeset we want to get rid of is **explicitly** marked
- as "obsolete" by history rewriting operations.
-
- By explicitly marking the obsolete part of the history, we will be able to
- easily detect instability situation.
-
-* Relations between old and new version of changesets are tracked by obsolete
- markers.
-
- By storing a meta-history of changeset evolution we are able to easily resolve
- instability and edit conflicts [#]_ .
-
-.. [#] Edit conflicts is another major obstable to collaboration. See the
- section dedicated to obsolete marker for details.
-
-Improved robustness == improved simplicity
-````````````````````````````````````````````````
-
-This proposal should **first** be seen as a safety measure.
-
-It allows detecting instability as soon as possible.
-
-::
-
- $ hg pull
- added 3 changeset
- +2 unstable changeset
- (do you want "hg evolve" ?)
- working directory parent is obsolete!
- $ hg push
- outgoing unstable changesets
- (use "hg evolve" or force the push)
-
-And it should not not encourage people to create instability.
-
-::
-
- $ hg up 42
- $ hg commit --amend
- changeset have descendant.
- $ hg commit --amend -f
- +5 unstable changeset
-
- $ hg rebase -D --rev 40::44
- rebasing already obsolete changeset 42:AAA will conflict with newer version 48:BBB
-
-While allowing powerful feature
-````````````````````````````````````````````````
-
-
-* Help to automatically solve instability.
-
-* "prune" changeset remotely.
-
-* track resulting changeset when submitting patch//pull request.
-
-* Focus on what you do:
-
- I do not like the "all at once" model of history rewriting. I'm comfortable
- with instability and obsolete marker offer all the tool to safely create and
- handle instability locally.
-
-
--- a/docs/obs-concept.rst Tue Jun 23 16:49:24 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,390 +0,0 @@
-.. Copyright 2011 Pierre-Yves David <pierre-yves.david@ens-lyon.org>
-.. Logilab SA <contact@logilab.fr>
-
------------------------------------------------------------
-Why Do We Need a New Concept
------------------------------------------------------------
-
-Current DVCSes are great tools for forging a series of flawless
-changesets on your own. But they perform poorly when it comes to
-**sharing** some work in progress and **collaborating** on such work
-in progress.
-
-When people forge a new version of a changeset they actually create a
-new changeset and get rid of the original changeset. Difficulties to
-collaborate mostly came from the way old content is *removed* from
-a repository.
-
-Mercurial Approach: Strip
------------------------------------------------------
-
-With the current version of mercurial, every changeset that exists in
-your repository is *visible* and *meaningful*. To delete old
-(rewritten) changesets, mercurial removes them from the repository
-storage with an operation called *strip*. After the *stripping*, the
-repository looks as if the changeset never existed.
-
-This approach is simple and effective except for one big
-drawback: you can remove changesets from **your repository only**. If
-a stripped changeset exists in another repository it touches, it will
-show up again. This is because a shared changeset becomes
-part of a shared global history. Stripping a changeset from all
-repositories is at best impractical and in most case impossible.
-
-As consequence, **you can not rewrite something once you exchange it with
-others**. The old version will still exist along side the new one [#]_.
-
-Moreover stripping changesets creates backup bundles. This allows
-restoration of the deleted changesets, but the process is painful.
-
-Finally, as the repository format is not optimized for deletion. stripping a
-changeset may be slow in some situations.
-
-To sum up, the strip approach is very simple but does not handle
-interaction with the outer world, which is very unfortunate for a
-*Distributed* VCS.
-
-.. [#] various work around exists but they require their own workflows
- which are distinct from the very elegant basic workflow of
- Mercurial.
-
-Git Approach: Overwrite Reference
------------------------------------------------------
-
-The Git approach to repository structure is a bit more complex: there
-can be any amount of unrelated changesets in a repository, and **only
-changesets referenced by a git branch** are *visible* and
-*meaningful*.
-
-
-.. figure:: ./figures/git.*
-
-
-This simplifies the process of getting rid of old changesets. You can
-just leave them in place and move the reference on the new one. You
-can then propagate this change by moving the git-branch on remote host
-with the newer version of the marker overwriting the older one.
-
-This approach goes a bit further but still has a major drawback:
-
-Because you **overwrite** the git-branch, you have no conflict
-resolution. The last to act wins. This makes collaboration on multiple
-changesets difficult because you can't merge concurrent updates on a
-changeset.
-
-Every overwrite is a forced operation where the operator says, "yes I
-want this to replace that". In highly distributed environments, a user
-may end up with conflicting references and no proper way to choose.
-
-Because of this way to visualize a repository, git-branches are a core
-part of git, which makes the user interface more complicated and
-constrains moving through history.
-
-Finally, even if all older changesets still exist in the repository,
-accesing them is still painful.
-
-
------------------------------------------------------
-The Obsolete Marker Concept
------------------------------------------------------
-
-
-As none of the concepts was powerful enough to fulfill the need of
-safely rewriting history, including easy sharing and collaboration on
-mutable history, we needed another one.
-
-Basic concept
------------------------------------------------------
-
-
-Every history rewriting operation stores the information that old rewritten
-changeset is replaced by newer version in a given set of changesets.
-
-All basic history rewriting operation can create an appropriate obsolete marker.
-
-
-.. figure:: ./figures/example-1-update.*
-
- *Updating* a changeset
-
- Create one obsolete marker: ``([A'] obsolete A)``
-
-
-
-.. figure:: ./figures/example-2-split.*
-
- *Splitting* a changeset in multiple one
-
- Create one obsolete marker ``([B1, B2] obsolete B)]``
-
-
-.. figure:: ./figures/simple-3-merge.*
-
- *Merging* multiple changeset in a single one
-
- Create two obsolete markers ``([C] obsolete A), ([C] obsolete B)``
-
-.. figure:: ./figures/simple-4-reorder.*
-
- *Moving* changeset around
-
- Reordering those two changesets need two obsolete markers:
- ``([A'] obsolete A), ([B'] obsolete B)``
-
-
-
-.. figure:: ./figures/simple-5-delete.*
-
- *Removing* a changeset:
-
- One obselete marker ``([] obsolete B)``
-
-
-To conclude, a single obsolete marker express a relation from **0..n** new
-changesets to **1** old changeset.
-
-Basic Usage
------------------------------------------------------
-
-Obsolete markers create a perpendicular history: **a versioned
-changeset graph**. This means that offers the same features we have
-for versioned files but applied to changeset:
-
-First: we can display a **coherent view** of the history graph in which only a
-single version of your changesets is displayed by the UI.
-
-Second, because obsolete changeset content is still **available**. You can
-you can
-
- * **browse** the content of your obsolete commits,
-
- * **compare** newer and older versions of a changeset,
-
- * **restore** content of previously obsolete changesets.
-
-Finally, the obsolete marker can be **exchanged between
-repositories**. You are able to share the result on your history
-rewriting operations with other prople and **collaborate on the
-mutable part of the history**.
-
-Conflicting history rewriting operation can be detected and
-**resolved** as easily as conflicting changes on a file.
-
-
-Detecting and solving tricky situations
------------------------------------------------------
-
-History rewriting can lead to complex situations. The obsolete marker
-introduces a simple representation for this complex reality. But
-people using complex workflows will one day or another have to face
-the intrinsic complexity of some real-world situation.
-
-This section describes possible situations, defines precise sets of
-changesets involved in such situations and explains how the error
-cases can be resolved automatically using the available information.
-
-
-Obsolete changesets
-````````````````````
-
-Old changesets left behind by obsolete operation are called **obsolete**.
-
-With the current version of mercurial, this *obsolete* part is stripped from the
-repository before the end of every rewriting operation.
-
-.. figure:: ./figures/error-obsolete.*
-
- Rebasing `B` and `C` on `A` (as `B'`, `C'`)
-
- This rebase operation added two obsolete markers from new
- changesets to old changesets. These two old changesets are now
- part of the *obsolete* part of the history.
-
-In most cases, the obsolete set will be fully hidden to both the UI and
-discovery, hence users do not have to care about them unless they want to
-audit history rewriting operations.
-
-Unstable changesets
-```````````````````
-
-While exploring the possibilities of the obsolete marker a bit
-further, you may end up with *obsolete* changesets which have
-*non-obsolete* children. There is two common ways to achieve this:
-
-* Pull a changeset based of an old version of a changeset [#]_.
-
-* Use a partial rewriting operation. For example amend on a changeset with
- children.
-
-*Non-obsolete* changeset based on *obsolete* one are called **unstable**
-
-.. figure:: ./figures/error-unstable.*
-
- Amend `A` into `A'` leaving `B` behind.
-
- In this situation we cannot consider `B` as *obsolete*. But we
- have all the necessary data to detect `B` as an *unstable* branch
- of the history because its parent `A` is *obsolete*. In addition,
- we have enough data to automatically resolve this instability: we
- know that the new version of `B` parent (`A`) is `A'`. We can
- deduce that we should rebase `B` on `A'` to get a stable history
- again.
-
-Proper warnings should be issued when part of the history becomes
-unstable. The UI will be able to use the obsolete marker to
-automatically suggest a resolution to the user of even carry them out
-for them.
-
-
-XXX details on automatic resolution for
-
-* movement
-
-* handling deletion
-
-* handling split on multiple head
-
-
-.. [#] For this to happen one needs to explicitly enable exchange of draft
- changesets. See phase help for details.
-
-The two parts of the obsolete set
-``````````````````````````````````````
-
-The previous section shows that there could be two kinds of *obsolete*
-changesets:
-
-* an *obsolete* changeset with no or *obsolete* only descendants is called **extinct**.
-
-* an *obsolete* changeset with *unstable* descendants is called **suspended**.
-
-
-.. figure:: ./figures/error-extinct.*
-
- Amend `A` and `C` leaving `B` behind.
-
- In this example we have two *obsolete* changesets: `C` with no *unstable*
- children is *extinct*. `A` with *unstable* descendant (`B`) is *suspended*.
- `B` is *unstable* as before.
-
-
-Because nothing outside the obsolete set default on *extinct*
-changesets, they can be safely hidden in the UI and even garbage
-collected. *Suspended* changesets have to stay visible and available
-until their unstable descendant are rewritten into stable version.
-
-
-Conflicting rewrites
-````````````````````
-
-If people start to concurrently edit the same part of the history they will
-likely meet conflicting situations when a changeset has been rewritten in two
-different ways.
-
-
-.. figure:: ./figures/error-conflicting.*
-
- Conflicting rewrite of `A` into `A'` and `A''`
-
-This kind of conflict is easy to detect with an obsolete marker
-because an obsolete changeset can have more than one new version. It
-may be seen as the multiple heads case. Mercurial warns you about this
-on pull. It is resolved the same way by a merge of A' and A'' that
-will keep the same parent than `A'` and `A''` with two obsolete
-markers pointing to both `A` and `A'`
-
-.. figure:: ./figures/explain-troubles-concurrent-10-solution.*
-
-Allowing multiple new changesets to obsolete a single one allows to
-distinguish a split changeset from a history rewriting conflict.
-
-Reliable history
-``````````````````````
-
-Obsolete markers help to smooth rewriting operation process. However
-they do not change the fact that **you should only rewrite the mutable
-part of the history**. The phase concept enforces this rule by
-explicitly defining a public immutable set of changesets. Rewriting
-operations refuse to work on public changesets, but there are still
-some corner cases where previously rewritten changesets are made
-public.
-
-Special rules apply for obsolete markers pointing to public changesets:
-
-* Public changesets are excluded from the obsolete set (public
- changesets are never hidden or candidate to garbage collection)
-
-* *newer* version of a public changeset are called **bumped** and
- highlighted as an error case.
-
-.. figure:: ./figures/explain-troubles-concurrent-10-sumup.*
-
-Solving such an error is easy. Because we know what changeset a
-*bumped* tries to rewrite, we can easily compute a smaller
-changeset containing only the change from the old *public* to the new
-*bumped*.
-
-.. figure:: ./figures/explain-troubles-concurrent-15-solution.*
-
-
-Conclusion
-----------------
-
-The obsolete marker is a powerful concept that allows mercurial to safely handle
-history rewriting operations. It is a new type of relation between Mercurial
-changesets which tracks the result of history rewriting operations.
-
-This concept is simple to define and provides a very solid base for:
-
-
-- Very fast history rewriting operations,
-
-- auditable and reversible history rewriting process,
-
-- clean final history,
-
-- sharing and collaborating on the mutable part of the history,
-
-- gracefully handling history rewriting conflicts,
-
-- various history rewriting UI's collaborating with an underlying common API.
-
-.. list-table:: Comparison on solution [#]_
- :header-rows: 1
-
- * - Solution
- - Remove changeset locally
- - Works on any point of your history
- - Propagation
- - Collaboration
- - Speed
- - Access to older version
-
- * - Strip
- - `+`
- - `+`
- - \
- - \
- - \
- - `- -`
-
- * - Reference
- - `+`
- - \
- - `+`
- - \
- - `+`
- - `-`
-
- * - Obsolete
- - `+`
- - `+`
- - `++`
- - `++`
- - `+`
- - `+`
-
-
-
-.. [#] To preserve good tradition in comparison table, an overwhelming advantage
- goes to the defended solution.
--- a/docs/obs-implementation.rst Tue Jun 23 16:49:24 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,106 +0,0 @@
-.. Copyright 2011 Pierre-Yves David <pierre-yves.david@ens-lyon.org>
-.. Logilab SA <contact@logilab.fr>
-
------------------------------------------------------
-Implementation of Obsolete Marker
------------------------------------------------------
-.. warning:: This document is still in heavy work in progress
-
-Main questions about Obsolete Marker Implementation
------------------------------------------------------
-
-
-
-
-How shall we exchange Marker over the Wire ?
-`````````````````````````````````````````````````````````
-
-We can have a lot of markers. We do not want to exchange data for the one we
-already know. Listkey() is not very appropriate there as you get everything.
-
-Moreover, we might want to only hear about Marker that impact changeset we are
-pulling.
-
-pushkey is not batchable yet (could be fixed)
-
-A dedicated discovery and exchange protocol seems mandatory here.
-
-
-Various technical details
------------------------------------------------------
-
-Some stuff that worse to note. some may deserve their own section later.
-
-storing old changeset
-``````````````````````
-
-The new general delta format allows a very efficient storage of two very similar
-changesets. Storing obsolete children using general delta takes no more place
-than storing the obsolete diff. Reverted file will even we reused. The whole
-operation will take much less space the strip backup.
-
-
-Abstraction from history rewriting UI
-```````````````````````````````````````````
-
-How Mercurial handles obsolete marker is independent from what decides
-to create them and what actual operation solves the error case. Any of
-the existing history rewriting UI (rebase, mq, histedit) can lay
-obsolete markers and resolve situation created by others. To go
-further, a hook system of obsolete marker creation would allow each
-mechanism to collaborate with other though a standard and central
-mechanism.
-
-
-Obsolete marker storage
-```````````````````````````
-
-The Obsolete marker will most likely be stored outside standard
-history. They are multiple reasons for this:
-
-First, obsolete markers are really perpendicular to standard history
-there is no strong reason to include it here other than convenience.
-
-Second, storing obsolete marker inside standard history means:
-
-* A changeset must be created every time an obsolete relation is added. Very
- inconvenient for delete operation.
-
-* Obsolete marker must be forged at the creation of the new changeset. This
- is very inconvenient for split operation. And in general it becomes
- complicated to fix history afterward in particular when working with older
- clients.
-
-Storing obsolete marker outside history have several pros:
-
-* It eases Exchange of obsolete markers without unnecessary obsolete
- changeset contents.
-
-* It allows tuning the actual storage and protocol exchange while maintaining
- compatibility with older clients through the wire (as we do the repository
- format).
-
-* It eases the exchange of obsolete related information during
- discovery to exchange obsolete changeset relevant to conflict
- resolution. Exchanging such information deserves a dedicated
- protocol.
-
-Persistent
-```````````````````````
-
-*Extinct* changeset and obsolete marker will most likely be garbage collected as
-some point. However, archive server may decide to keep them forever in order to
-keep a fully auditable history in its finest conception.
-
-
-Current status
------------------------------------------------------
-
-Obsolete marker are partialy in core.
-
-2.3:
-
-- storage over obsolete marker
-- exchange suing pushkey
-- extinct changeset are properly hidden
-- extinct changeset are excluded from exchange
--- a/docs/obs-terms.rst Tue Jun 23 16:49:24 2015 -0700
+++ b/docs/obs-terms.rst Tue Jun 23 16:50:06 2015 -0700
@@ -1,12 +1,12 @@
.. Copyright 2011 Pierre-Yves David <pierre-yves.david@ens-lyon.org>
.. Logilab SA <contact@logilab.fr>
------------------------------------------------------------
+-----------------------------------
Terminology of the obsolete concept
------------------------------------------------------------
+-----------------------------------
Obsolete markers
----------------------------------
+----------------
The mutable concept is based on **obsolete markers**. Creating an obsolete
marker registers a relation between an old obsoleted changeset and its newer
@@ -54,7 +54,7 @@
better distinction between *direct successors* and **any successors**.
Possible changesets "type"
----------------------------------
+--------------------------
The following table describes names and behaviors of changesets affected by
obsolete markers. The left column describes generic categories and the right
@@ -182,7 +182,7 @@
Command and operation name
----------------------------------
+--------------------------
Existing terms
@@ -196,7 +196,7 @@
Uncommit
-`````````````
+````````
Remove files from a commit (and leave them as dirty in the working directory)
@@ -204,14 +204,14 @@
`rollback` usage.
Fold
-``````````
+````
Collapse multiple changesets into a unique one.
The *evolve* extension will have a `fold` command.
Prune
-``````````
+`````
Make a changeset obsolete without successors.
@@ -223,7 +223,7 @@
- obsolete: too vague, too long and too generic.
evolve
-```````````````
+``````
Automatically resolve *troublesome* changesets
(*unstable*, *bumped* and *divergent*)
--- a/docs/qsync.rst Tue Jun 23 16:49:24 2015 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-.. Copyright 2011 Pierre-Yves David <pierre-yves.david@ens-lyon.org>
-.. Logilab SA <contact@logilab.fr>
-
----------------------------------------------------------------------
-Qsync: Mercurial to MQ exporter
----------------------------------------------------------------------
-
-
-People may have tools or co-workers that expect to receive mutable history using
-a versioned MQ repository.
-
-For this purpose you can use the ``qsync`` extension.
-
-
-To enable the evolve extension use::
-
- $ hg clone http://hg-dev.octopoid.net/hgwebdir.cgi/mutable-history/
- $ mutable-history/iqsync-enable.sh >> ~/.hgrc
- $ hg help qsync
--- a/docs/sharing.rst Tue Jun 23 16:49:24 2015 -0700
+++ b/docs/sharing.rst Tue Jun 23 16:50:06 2015 -0700
@@ -4,13 +4,17 @@
Evolve: Shared Mutable History
------------------------------
+.. contents::
+
Once you have mastered the art of mutable history in a single
-repository, you might want to move up to the next level: *shared*
-mutable history. ``evolve`` lets you push and pull draft changesets
-between repositories along with their obsolescence markers. This opens
-up a number of interesting possibilities.
+repository (see the `user guide`_), you can move up to the next level:
+*shared* mutable history. ``evolve`` lets you push and pull draft
+changesets between repositories along with their obsolescence markers.
+This opens up a number of interesting possibilities.
-The most common scenario is a single developer working across two
+.. _`user guide`: user-guide.html
+
+The simplest scenario is a single developer working across two
computers. Say you're working on code that must be tested on a remote
test server, probably in a rack somewhere, only accessible by SSH, and
running an “enterprise-grade” (out-of-date) OS. But you probably
@@ -33,19 +37,22 @@
accidental ``rsync`` in the wrong direction could destroy hours of
work.
-Using Mercurial with ``evolve`` to share mutable history solves all of
-these problems. As with single-repository ``evolve``, you can commit
+Using Mercurial with ``evolve`` to share mutable history solves these
+problems. As with single-repository ``evolve``, you can commit
whenever the code is demonstrably better, even if all the tests aren't
passing yet—just ``hg amend`` when they are. And you can transfer
those half-baked changesets between repositories to try things out on
your test server before anything is carved in stone.
-A less common scenario is multiple developers sharing mutable history.
-(This is in fact how Mercurial itself is developed.) We'll cover this
-scenario later. But first, single-user sharing.
+A less common scenario is multiple developers sharing mutable history,
+typically for code review. We'll cover this scenario later. But first,
+single-user sharing.
+
+Sharing with a single developer
+-------------------------------
Publishing and non-publishing repositories
-------------------------------------------
+==========================================
The key to shared mutable history is to keep your changesets in
*draft* phase as you pass them around. Recall that by default, ``hg
@@ -55,20 +62,25 @@
(Short version: set ``phases.publish`` to ``false``. Long version
follows.)
-Setting things up
------------------
+Setting up
+==========
-We'll work an example with three local repositories, although in the
-real world they'd most likely be on three different computers. First,
-the public repository is where tested, polished changesets live, and
-it is where you push/pull changesets to/from the rest of your team. ::
+We'll work through an example with three local repositories, although
+in the real world they'd most likely be on three different computers.
+First, the ``public`` repository is where tested, polished changesets
+live, and it is where you synchronize with the rest of your team. ::
$ hg init public
-We'll need two clones where work gets done::
+We'll need two clones where work gets done, ``test-repo`` and
+``dev-repo``::
- $ hg clone -q public test-repo
- $ hg clone -q test-repo dev-repo
+ $ hg clone public test-repo
+ updating to branch default
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg clone test-repo dev-repo
+ updating to branch default
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
``dev-repo`` is your local machine, with GUI merge tools and IDEs and
everything configured just the way you like it. ``test-repo`` is the
@@ -76,27 +88,30 @@
we'll develop in ``dev-repo``, push to ``test-repo``, test and polish
there, and push to ``public``.
-The key to making this whole thing work is to make ``test-repo``
-non-publishing::
+The key to shared mutable history is to make the target repository, in
+this case ``test-repo``, non-publishing. And, of course, we have to
+enable ``evolve`` in both ``test-repo`` and ``dev-repo``.
- $ cat >> test-repo/.hg/hgrc <<EOF
+First, edit the configuration for ``test-repo``::
+
+ $ hg -R test-repo config --edit --local
+
+and add ::
+
[phases]
publish = false
- EOF
-We also have to configure ``evolve`` in both ``test-repo`` and
-``dev-repo``, so that we can amend and evolve in both of them. ::
-
- $ cat >> test-repo/.hg/hgrc <<EOF
[extensions]
- rebase =
evolve = /path/to/mutable-history/hgext/evolve.py
- EOF
- $ cat >> dev-repo/.hg/hgrc <<EOF
+
+Then edit the configuration for ``dev-repo``::
+
+ $ hg -R dev-repo config --edit --local
+
+and add ::
+
[extensions]
- rebase =
evolve = /path/to/mutable-history/hgext/evolve.py
- EOF
Keep in mind that in real life, these repositories would probably be
on separate computers, so you'd have to login to each one to configure
@@ -108,15 +123,20 @@
$ echo 'my new project' > file1
$ hg add file1
$ hg commit -m 'create new project'
- $ hg push -q
+ $ hg push
+ [...]
+ added 1 changesets with 1 changes to 1 files
and pull that into the development repository::
$ cd ../dev-repo
$ hg pull -u
+ [...]
+ added 1 changesets with 1 changes to 1 files
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-Amending a shared changeset
----------------------------
+Example 1: Amend a shared changeset
+===================================
Everything you learned in the `user guide`_ applies to work done in
``dev-repo``. You can commit, amend, uncommit, evolve, and so forth
@@ -170,18 +190,21 @@
we saw in the user guide)—but ``dev-repo`` knows nothing of these
recent developments.
- [figure SG02: rev 0:0dc9 public, rev 1:f649, 2:2a03 obsolete, rev 3:60ff draft -- but dev-repo same as in SG01]
+ [figure SG02: test-repo has rev 0:0dc9 public, rev 1:f649, 2:2a03 obsolete, rev 3:60ff draft; dev-repo same as in SG01]
Let's resynchronize::
$ cd ../dev-repo
$ hg pull -u
+ [...]
+ added 1 changesets with 1 changes to 1 files (+1 heads)
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
As seen in figure 3, this transfers the new changeset *and* the
obsolescence marker for revision 1. However, it does *not* transfer
-the temporary amend commit, because it is obsolete. Push and pull
+the temporary amend commit, because it is hidden. Push and pull
transfer obsolesence markers between repositories, but they do not
-normally transfer obsolete changesets.
+transfer hidden changesets.
[figure SG03: dev-repo grows new rev 2:60ff, marks 1:f649 obsolete]
@@ -189,8 +212,8 @@
numbers in ``test-repo`` and ``dev-repo`` are no longer consistent. We
*must* use changeset IDs.
-Amend again, locally
---------------------
+Example 2: Amend again, locally
+===============================
This process can repeat. Perhaps you figure out a more elegant fix to
the bug, and want to mutate history so nobody ever knows you had a
@@ -211,9 +234,10 @@
Let's hop over to ``test-repo`` to test the more elegant fix::
$ cd ../test-repo
- $ hg update -q
+ $ hg update
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-This time, all the tests pass, so no further amendment is required.
+This time, all the tests pass, so no further amending is required.
This bug fix is finished, so we push it to the public repository::
$ hg push
@@ -221,33 +245,263 @@
added 1 changesets with 1 changes to 1 files
Note that only one changeset—the final version, after two
-amendments—was actually pushed. Again, Mercurial normally doesn't
-transfer obsolete changesets on push and pull. (Specifically, it
-doesn't transfer *hidden* changesets: roughly speaking, obsolete
-changesets with no non-obsolete descendants. If you're curious, see
-the `concept guide`_ for the precise definition of hidden.)
+amendments—was actually pushed. Again, Mercurial doesn't transfer
+hidden changesets on push and pull.
.. _`concept guide`: concepts.html
So the picture in ``public`` is much simpler than in either
-``dev-repo`` or ``test-repo``. None of our missteps or amendments are
-visible publicly, just the final, beautifully polished changeset:
+``dev-repo`` or ``test-repo``. Neither our missteps nor our amendments
+are publicly visible, just the final, beautifully polished changeset:
[figure SG05: public repo with rev 0:0dc9, 1:de61, both public]
There is one important step left to do. Because we pushed from
``test-repo`` to ``public``, the pushed changeset is in *public* phase
-in those two repositories. But ``dev-repo`` knows nothing of this:
-that changeset is still *draft* there. If we're not careful, we might
+in those two repositories. But ``dev-repo`` has been out-of-the-loop;
+changeset de61 is still *draft* there. If we're not careful, we might
mutate history in ``dev-repo``, obsoleting a changeset that is already
-public. Let's avoid that situation for now by pulling from
-``test-repo`` down to ``dev-repo``::
+public. Let's avoid that situation for now by pushing up to
+``dev-repo``::
+
+ $ hg push ../dev-repo
+ pushing to ../dev-repo
+ searching for changes
+ no changes found
+
+Even though no *changesets* were pushed, Mercurial still pushed
+obsolescence markers and phase changes to ``dev-repo``.
+
+A final note: since this fix is now *public*, it is immutable. It's no
+longer possible to amend it::
+
+ $ hg amend -m 'fix bug 37'
+ abort: cannot amend public changesets
+
+This is, after all, the whole point of Mercurial's phases: to prevent
+rewriting history that has already been published.
+
+Sharing with multiple developers: code review
+---------------------------------------------
+
+Now that you know how to share your own mutable history across
+multiple computers, you might be wondering if it makes sense to share
+mutable history with others. It does, but you have to be careful, stay
+alert, and *communicate* with your peers.
+
+Code review is a good use case for sharing mutable history across
+multiple developers: Alice commits a draft changeset, submits it for
+review, and amends her changeset until her reviewer is satisfied.
+Meanwhile, Bob is also committing draft changesets for review,
+amending until his reviewer is satisfied. Once a particular changeset
+passes review, the respective author (Alice or Bob) pushes it to the
+public (publishing) repository.
+
+Incidentally, the reviewers here can be anyone: maybe Bob and Alice
+review each other's work; maybe the same third party reviews both; or
+maybe they pick different experts to review their work on different
+parts of a large codebase. Similarly, it doesn't matter if reviews are
+conducted in person, by email, or by carrier pigeon. Code review is
+outside of the scope of Mercurial, so all we're looking at here
+is the mechanics of committing, amending, pushing, and pulling.
+
+Setting up
+==========
+
+To demonstrate, let's start with the ``public`` repository as we left
+it in the last example, with two immutable changesets (figure 5
+above). We'll clone a ``review`` repository from it, and then Alice
+and Bob will both clone from ``review``. ::
+
+ $ hg clone public review
+ updating to branch default
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg clone review alice
+ updating to branch default
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg clone review bob
+ updating to branch default
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+We need to configure Alice's and Bob's working repositories to enable
+``evolve``. First, edit Alice's configuration with ::
+
+ $ hg -R alice config --edit --local
+
+and add ::
+
+ [extensions]
+ evolve = /path/to/mutable-history/hgext/evolve.py
+
+Then edit Bob's repository configuration::
+
+ $ hg -R bob config --edit --local
+
+and add the same text.
+
+Example 3: Alice commits and amends a draft fix
+===============================================
+
+We'll follow Alice working on a bug fix. We're going to use bookmarks to
+make it easier to understand multiple branch heads in the ``review``
+repository, so Alice starts off by creating a bookmark and committing
+her first attempt at a fix::
+
+ $ hg bookmark bug15
+ $ echo 'fix' > file2
+ $ hg commit -A -u alice -m 'fix bug 15 (v1)'
+ adding file2
+
+Note the unorthodox "(v1)" in the commit message. We're just using
+that to make this tutorial easier to follow; it's not something we'd
+recommend in real life.
+
+Of course Alice wouldn't commit unless her fix worked to her
+satisfaction, so it must be time to solicit a code review. She does
+this by pushing to the ``review`` repository::
+
+ $ hg push -B bug15
+ [...]
+ added 1 changesets with 1 changes to 1 files
+ exporting bookmark bug15
+
+(The use of ``-B`` is important to ensure that we only push the
+bookmarked head, and that the bookmark itself is pushed. See this
+`guide to bookmarks`_, especially the `Sharing Bookmarks`_ section, if
+you're not familiar with bookmarks.)
+
+.. _`guide to bookmarks`: http://mercurial.aragost.com/kick-start/en/bookmarks/
+.. _`Sharing Bookmarks`: http://mercurial.aragost.com/kick-start/en/bookmarks/#sharing-bookmarks
+
+Some time passes, and Alice receives her code review. As a result,
+Alice revises her fix and submits it for a second review::
- $ cd ../dev-repo
- $ hg pull -u
+ $ echo 'Fix.' > file2
+ $ hg amend -m 'fix bug 15 (v2)'
+ $ hg push
+ [...]
+ added 1 changesets with 1 changes to 1 files (+1 heads)
+ updating bookmark bug15
+
+Figure 6 shows the state of the ``review`` repository at this point.
+
+ [figure SG06: rev 2:fn1e is Alice's obsolete v1, rev 3:cbdf is her v2; both children of rev 1:de61]
+
+After a busy morning of bug fixing, Alice stops for lunch. Let's see
+what Bob has been up to.
+
+Example 4: Bob implements and publishes a new feature
+=====================================================
+
+Meanwhile, Bob has been working on a new feature. Like Alice, he'll
+use a bookmark to track his work, and he'll push that bookmark to the
+``review`` repository, so that reviewers know which changesets to
+review. ::
+
+ $ cd ../bob
+ $ echo 'stuff' > file1
+ $ hg bookmark featureX
+ $ hg commit -u bob -m 'implement feature X (v1)' # rev 4:1636
+ $ hg push -B featureX
+ [...]
+ added 1 changesets with 1 changes to 1 files (+1 heads)
+ exporting bookmark featureX
+
+When Bob receives his code review, he improves his implementation a
+bit, amends, and submits the resulting changeset for review::
+
+ $ echo 'do stuff' > file1
+ $ hg amend -m 'implement feature X (v2)' # rev 5:0eb7
+ $ hg push
+ [...]
+ added 1 changesets with 1 changes to 1 files (+1 heads)
+ updating bookmark featureX
+
+Unfortunately, that still doesn't pass muster. Bob's reviewer insists
+on proper capitalization and punctuation. ::
+
+ $ echo 'Do stuff.' > file1
+ $ hg amend -m 'implement feature X (v3)' # rev 6:540b
+
+On the bright side, the second review said, "Go ahead and publish once
+you fix that." So Bob immediately publishes his third attempt::
+
+ $ hg push ../public
+ [...]
+ added 1 changesets with 1 changes to 1 files
+
+It's not enough just to update ``public``, though! Other people also
+use the ``review`` repository, and right now it doesn't have Bob's
+latest amendment ("v3", revision 6:540b), nor does it know that the
+precursor of that changeset ("v2", revision 5:0eb7) is obsolete. Thus,
+Bob pushes to ``review`` as well::
-Getting into trouble
---------------------
+ $ hg push ../review
+ [...]
+ added 1 changesets with 1 changes to 1 files (+1 heads)
+ updating bookmark featureX
+
+Figure 7 shows the result of Bob's work in both ``review`` and
+``public``.
+
+ [figure SG07: review includes Alice's draft work on bug 15, as well as Bob's v1, v2, and v3 changes for feature X: v1 and v2 obsolete, v3 public. public contains only the final, public implementation of feature X]
+
+Incidentally, it's important that Bob push to ``public`` *before*
+``review``. If he pushed to ``review`` first, then revision 6:540b
+would still be in *draft* phase in ``review``, but it would be
+*public* in both Bob's local repository and the ``public`` repository.
+That could lead to confusion at some point, which is easily avoided by
+pushing first to ``public``.
+
+Example 5: Alice integrates and publishes
+=========================================
+
+Finally, Alice gets back from lunch and sees that the carrier pigeon
+with her second review has arrived (or maybe it's in her email inbox).
+Alice's reviewer approved her amended changeset, so she pushes it to
+``public``::
+
+ $ hg push ../public
+ [...]
+ remote has heads on branch 'default' that are not known locally: 540ba8f317e6
+ abort: push creates new remote head cbdfbd5a5db2!
+ (pull and merge or see "hg help push" for details about pushing new heads)
+
+Oops! Bob has won the race to push first to ``public``. So Alice needs
+to integrate with Bob: let's pull his changeset(s) and see what the
+branch heads are. ::
+
+ $ hg pull ../public
+ [...]
+ added 1 changesets with 1 changes to 1 files (+1 heads)
+ (run 'hg heads' to see heads, 'hg merge' to merge)
+ $ hg log -G -q -r 'head()' --template '{rev}:{node|short} ({author})\n'
+ o 5:540ba8f317e6 (bob)
+ |
+ | @ 4:cbdfbd5a5db2 (alice)
+ |/
+
+We'll assume Alice and Bob are perfectly comfortable with rebasing
+changesets. (After all, they're already using mutable history in the
+form of ``amend``.) So Alice rebases her changeset on top of Bob's and
+publishes the result::
+
+ $ hg rebase -d 5
+ $ hg push ../public
+ [...]
+ added 1 changesets with 1 changes to 1 files
+ $ hg push ../review
+ [...]
+ added 1 changesets with 0 changes to 0 files
+ updating bookmark bug15
+
+The result, in both ``review`` and ``public`` repositories, is shown
+in figure 8.
+
+ [figure SG08: review shows v1 and v2 of Alice's fix, then v1, v2, v3 of Bob's feature, finally Alice's fix rebased onto Bob's. public just shows the final public version of each changeset]
+
+Getting into trouble with shared mutable history
+------------------------------------------------
Mercurial with ``evolve`` is a powerful tool, and using powerful tools
can have consequences. (You can cut yourself badly with a sharp knife,
@@ -258,31 +512,121 @@
the most common type of troubled changeset. (Recall that a
non-obsolete changeset with obsolete ancestors is unstable.)
-Two other types of trouble can crop up: *bumped* and *divergent*
+Two other types of trouble can happen: *divergent* and *bumped*
changesets. Both are more likely with shared mutable history,
especially mutable history shared by multiple developers.
-To demonstrate, let's start with the ``public`` repository as we left
-it in the last example, with two immutable changesets (figure 5
-above). Two developers, Alice and Bob, start working from this point::
+Setting up
+==========
- $ hg clone -q public alice
- $ hg clone -q public bob
+For these examples, we're going to use a slightly different workflow:
+as before, Alice and Bob share a ``public`` repository. But this time
+there is no ``review`` repository. Instead, Alice and Bob put on their
+cowboy hats, throw good practice to the wind, and pull directly from
+each other's working repositories.
+
+So we throw away everything except ``public`` and reclone::
-We need to configure Alice's and Bob's working repositories similar to
-``test-repo``, i.e. make them non-publishing and enable ``evolve``::
+ $ rm -rf review alice bob
+ $ hg clone public alice
+ updating to branch default
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg clone public bob
+ updating to branch default
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
- $ cat >> alice/.hg/hgrc <<EOF
- [phases]
- publish = false
+Once again we have to configure their repositories: enable ``evolve``
+and (since Alice and Bob will be pulling directly from each other)
+make their repositories non-publishing. Edit Alice's configuration::
+
+ $ hg -R alice config --edit --local
+
+and add ::
+
[extensions]
rebase =
evolve = /path/to/mutable-history/hgext/evolve.py
- EOF
- $ cp alice/.hg/hgrc bob/.hg/hgrc
+
+ [phases]
+ publish = false
+
+Then edit Bob's repository configuration::
+
+ $ hg -R bob config --edit --local
+
+and add the same text.
+
+Example 6: Divergent changesets
+===============================
+
+When an obsolete changeset has two successors, those successors are
+*divergent*. One way to get into such a situation is by failing to
+communicate with your teammates. Let's see how that might happen.
+
+First, we'll have Bob commit a bug fix that could still be improved::
+
+ $ cd bob
+ $ echo 'pretty good fix' >> file1
+ $ hg commit -u bob -m 'fix bug 24 (v1)' # rev 4:2fe6
+
+Since Alice and Bob are now in cowboy mode, Alice pulls Bob's draft
+changeset and amends it herself. ::
+
+ $ cd ../alice
+ $ hg pull -u ../bob
+ [...]
+ added 1 changesets with 1 changes to 1 files
+ $ echo 'better fix (alice)' >> file1
+ $ hg amend -u alice -m 'fix bug 24 (v2 by alice)'
+
+But Bob has no idea that Alice just did this. (See how important good
+communication is?) So he implements a better fix of his own::
+
+ $ cd ../bob
+ $ echo 'better fix (bob)' >> file1
+ $ hg amend -u bob -m 'fix bug 24 (v2 by bob)' # rev 6:a360
+
+At this point, the divergence exists, but only in theory: Bob's
+original changeset, 4:2fe6, is obsolete and has two successors. But
+those successors are in different repositories, so the trouble is not
+visible to anyone yet. It will be as soon as Bob pulls from Alice's
+repository (or vice-versa). ::
+
+ $ hg pull ../alice
+ [...]
+ added 1 changesets with 1 changes to 2 files (+1 heads)
+ (run 'hg heads' to see heads, 'hg merge' to merge)
+ 2 new divergent changesets
+
+Figure 9 shows the situation in Bob's repository.
+
+ [figure SG09: Bob's repo with 2 heads for the 2 divergent changesets, 6:a360 and 7:e3f9; wc is at 6:a360; both are successors of obsolete 4:2fe6, hence divergence]
+
+Now we need to get out of trouble. As usual, the answer is to evolve
+history. ::
+
+ $ HGMERGE=internal:other hg evolve
+ merge:[6] fix bug 24 (v2 by bob)
+ with: [7] fix bug 24 (v2 by alice)
+ base: [4] fix bug 24 (v1)
+ 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+
+Figure 10 shows how Bob's repository looks now.
+
+ [figure SG10: only one visible head, 9:5ad6, successor to hidden 6:a360 and 7:e3f9]
+
+We carefully dodged a merge conflict by specifying a merge tool
+(``internal:other``) that will take Alice's changes over Bob's. (You
+might wonder why Bob wouldn't prefer his own changes by using
+``internal:local``. He's avoiding a `bug`_ in ``evolve`` that occurs
+when evolving divergent changesets using ``internal:local``.)
+
+.. _`bug`: https://bitbucket.org/marmoute/mutable-history/issue/48/
+
+** STOP HERE: WORK IN PROGRESS **
Bumped changesets: only one gets on the plane
----------------------------------------------
+=============================================
If two people show up at the airport with tickets for the same seat on
the same plane, only one of them gets on the plane. The would-be
@@ -301,15 +645,19 @@
$ cd alice
$ echo 'fix' > file2
- $ hg commit -q -A -m 'fix bug 15'
+ $ hg commit -A -m 'fix bug 15'
+ adding file2
Now Bob has a bad idea: he decides to pull whatever Alice is working
on and tweak her bug fix to his taste::
$ cd ../bob
- $ hg pull -q -u ../alice
+ $ hg pull -u ../alice
+ [...]
+ added 1 changesets with 1 changes to 1 files
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ echo 'Fix.' > file2
- $ hg amend -q -A -m 'fix bug 15 (amended)'
+ $ hg amend -A -m 'fix bug 15 (amended)'
(Note the lack of communication between Alice and Bob. Failing to
communicate with your colleagues is a good way to get into trouble.
@@ -322,7 +670,9 @@
publish. ::
$ cd ../alice
- $ hg push -q
+ $ hg push
+ [...]
+ added 1 changesets with 1 changes to 1 files
This introduces a contradiction: in Bob's repository, changeset 2:e011
(his copy of Alice's fix) is obsolete, since Bob amended it. But in
@@ -359,82 +709,6 @@
[figure SG08: 5:227d is new, formerly bumped changeset 4:fe88 now hidden]
-Divergent changesets
---------------------
-
-In addition to *unstable* and *bumped*, there is a third kind of
-troubled changeset: *divergent*. When an obsolete changeset has two
-successors, those successors are divergent.
-
-To illustrate, let's start Alice and Bob at the same
-point—specifically, the point where Alice's repository currently
-stands. Bob's repository is a bit of a mess, so we'll throw it away
-and start him off with a copy of Alice's repository::
-
- $ cd ..
- $ rm -rf bob
- $ cp -rp alice bob
-
-Now we'll have Bob commit a bug fix that could still be improved::
-
- $ cd bob
- $ echo 'pretty good fix' >> file1
- $ hg commit -u bob -m 'fix bug 24 (v1)'
-
-This time, Alice meddles with her colleague's work (still a bad
-idea)::
-
- $ cd ../alice
- $ hg pull -q -u ../bob
- $ echo 'better (alice)' >> file1
- $ hg amend -u alice -m 'fix bug 24 (v2 by alice)'
-
-Here's where things change from the "bumped" scenario above: this
-time, the original author (Bob) decides to amend his changeset too. ::
-
- $ cd ../bob
- $ echo 'better (bob)' >> file1
- $ hg amend -u bob -m 'fix bug 24 (v2 by bob)'
-
-At this point, the divergence exists, but only in theory: Bob's
-original changeset, 3:fe81, is obsolete and has two successors. But
-those successors are in different repositories, so the trouble is not
-visible to anyone yet. It will be as soon as one of our players pulls
-from the other's repository. Let's make Bob the victim again::
-
- $ hg pull -q -u ../alice
- not updating: not a linear update
- (merge or update --check to force update)
- 2 new divergent changesets
-
-The “not a linear update” is our first hint that something is wrong,
-but of course “2 new divergent changesets” is the real problem. Figure
-9 shows both problems.
-
- [figure SG09: bob's repo with 2 heads for the 2 divergent changesets, 5:fc16 and 6:694f; wc is at 5:fc16, hence update refused; both are successors of obsolete 3:fe81, hence divergence]
-
-Now we need to get out of trouble. Unfortunately, a `bug`_ in
-``evolve`` means that the usual answer (run ``hg evolve --all``) does
-not work. Bob has to figure out the solution on his own: in this case,
-merge. To avoid distractions, we'll set ``HGMERGE`` to make Mercurial
-resolve any conflicts in favour of Bob. ::
-
- $ HGMERGE=internal:local hg merge
- $ hg commit -m merge
-
-.. _`bug`: https://bitbucket.org/marmoute/mutable-history/issue/48/
-
-This is approximately what ``hg evolve`` would do in this
-circumstance, if not for that bug. One annoying difference is that
-Mercurial thinks the two divergent changesets are still divergent,
-which you can see with a simple revset query::
-
- $ hg log -q -r 'divergent()'
- 5:fc16901f4d7a
- 6:694fd0f6b503
-
-(That annoyance should go away when the bug is fixed.)
-
Conclusion
----------
--- a/docs/user-guide.rst Tue Jun 23 16:49:24 2015 -0700
+++ b/docs/user-guide.rst Tue Jun 23 16:50:06 2015 -0700
@@ -205,7 +205,7 @@
Changeset obsolescence under the hood
-------------------------------------
-So far, everything has gone just fine. We haven't run into merge
+So far, everything has gone just fine: we haven't run into merge
conflicts or other trouble. Before we start exploring advanced usage
that can run into trouble, let's step back and see what happens when
Mercurial marks changesets obsolete. That will make it much easier to
@@ -217,8 +217,8 @@
*successors*. The obsolete changesets are the *precursors* of their
successors. This applies equally to built-in commands (``commit
--amend``), commands added by ``evolve`` (``amend``, ``prune``,
-``uncommit``, ``fold``), and even commands provided by other
-extensions (``rebase``, ``histedit``).
+``uncommit``, ``fold``), and commands provided by other extensions
+(``rebase``, ``histedit``).
Another way of looking at it is that obsolescence is second-order
version control, i.e. the history of your history. We'll cover this in
@@ -248,10 +248,38 @@
history modification work is not yet done. We'll see examples of that
later, when we cover advanced usage.
-Seeing hidden changesets
-========================
+
+Understanding revision numbers and hidden changesets
+====================================================
+
+As the name implies, hidden changesets are normally not visible. If
+you run ``hg log`` on the repository from Figure 2, Mercurial will
+show revisions 0 and 3, but not 1 and 2. That's something you don't
+see with plain vanilla Mercurial—normally, revision *N* is always
+followed by revision *N* + 1.
+
+This is just the visible manifestation of hidden changesets. If
+revision 0 is followed by revision 3, that means there are two hidden
+changesets, 1 and 2, in between.
+
+To see those hidden changesets, use the ``--hidden`` option::
-TODO
+ $ hg --hidden log --graph --template '{rev}:{node|short} {desc|firstline}\n'
+ @ 3:934359450037 implement feature Y
+ |
+ | x 2:6c5f78d5d467 temporary amend commit for fe0ecd3bd2a4
+ | |
+ | x 1:fe0ecd3bd2a4 implement feature Y
+ |/
+ o 0:08c4b6f4efc8 init
+
+Note that changeset IDs are still the permanent, immutable identifier
+for changesets. Revision numbers are, as ever, a handy shorthand that
+work in your local repository, but cannot be used across repositories.
+They also have the useful property of showing when there are hidden
+changesets lurking under the covers, which is why this document uses
+revision numbers.
+
Under the hood: Prune an unwanted changeset
===========================================
@@ -306,28 +334,14 @@
Obsolete is not hidden
======================
-TODO
-
-
-Understanding revision numbers
-==============================
+So far, every obsolete changeset we have seen is also hidden. However,
+these are *not* the same thing—that's why they have different names.
+It's entirely possible to have obsolete changesets that are not
+hidden. We'll see examples of that soon, when we create *unstable*
+changesets.
-If you're trying these examples on your own, especially using ``hg
-log`` without ``--hidden``, you have probably noticed some funny
-business going on with revision numbers: there are now gaps in the
-sequence. That's something you don't see with plain vanilla Mercurial;
-normally, revision N is always followed by revision N+1.
-
-This is just the visible manifestation of hidden changesets. If
-revision 95 is followed by revision 98, that means there are two
-hidden changesets, 96 and 97, in between.
-
-Note that changeset IDs are still the permanent, immutable identifier
-for changesets. Revision numbers are, as ever, a handy shorthand that
-work in your local repository, but cannot be used across repositories.
-They also have the useful property of showing when there are hidden
-changesets lurking under the covers, which is why this document uses
-revision numbers.
+Note that all hidden changesets are obsolete: hidden is a subset of
+obsolete.
Life with ``evolve`` (advanced usage)
@@ -353,7 +367,7 @@
===================================
Sometimes you don't notice your mistakes until after you have
-committed some new changesets on top of them. ::
+committed new changesets on top of them. ::
$ hg commit -m 'fix bug 17' # rev 11 (mistake here)
$ hg commit -m 'cleanup' # rev 12
@@ -363,12 +377,12 @@
fixes your mistake. That works, of course, but it makes you look bad:
you made a mistake, and the record of that mistake is recorded in
history for all eternity. (If the mistake was in the commit message,
-too bad.)
+too bad: you cannot fix it.)
More subtly, there now exist changesets that are *worse* than what
came before—the code no longer builds, the tests don't pass, or
-similar. Anyone reviewing these patches will waste time noticing the
-error in the earlier patch, and then the correction later on.
+similar. Anyone reviewing these patches will waste time on the error
+in the earlier patch, and then the correction later on.
You can avoid all this by amending the bad changeset and *evolving*
subsequent history. Here's how it works, assuming you have just
@@ -558,4 +572,30 @@
Example 11: Recover an obsolete changeset
=========================================
-TODO
+Sometimes you might obsolete a changeset, and then change your mind. You'll
+probably start looking for an “unobsolete” command to restore a changeset
+to normal state. For complicated implementation reasons, that command
+doesn't exist. (If you have already pushed an obsolescence marker to
+another repo, then Mercurial would need a way to revoke that remote
+obsolesence marker. That's a hard problem.)
+
+Instead, ``evolve`` provides a ``touch`` command to resurrect an
+obsolete changeset. An unexpected quirk: you almost certainly need to
+use ``--hidden``, since obsolete changesets tend to be hidden, and you
+can't reference a hidden changeset otherwise. Typical usage thus looks
+like ::
+
+ $ hg --hidden touch REV
+
+This creates a new, normal changeset which is the same as ``REV``—except
+with a different changeset ID. The new changeset will have the same parent
+as ``REV``, and will be a successor of ``REV``.
+
+The current implementation of ``hg touch`` is not ideal, and is likely to
+change in the future. Consider the history in Figure 12, where revision 27
+is obsolete and the child of 26, also obsolete. If we ``hg touch 27``, that
+creates a new revision which is a non-obsolete child of 26—i.e., it is
+unstable. It's also *divergent*, another type of trouble that we'll learn
+about in the `next section`_.
+
+.. _`next section`: sharing.html
--- a/hgext/drophack.py Tue Jun 23 16:49:24 2015 -0700
+++ b/hgext/drophack.py Tue Jun 23 16:50:06 2015 -0700
@@ -119,7 +119,7 @@
newrevs = repo.revs('max(::. - %ld)', revs)
if newrevs:
assert len(newrevs) == 1
- newrev = newrevs[0]
+ newrev = newrevs.first()
else:
newrev = -1
commands.update(ui, repo, newrev)
@@ -150,7 +150,7 @@
stripmarker(ui, repo, markers)
# strip the changeset
with timed(ui, 'strip nodes'):
- repair.strip(ui, repo, allnodes, backup="all", topic='drophack')
+ repair.strip(ui, repo, list(allnodes), backup="all", topic='drophack')
finally:
lockmod.release(lock, wlock)
--- a/hgext/evolve.py Tue Jun 23 16:49:24 2015 -0700
+++ b/hgext/evolve.py Tue Jun 23 16:50:06 2015 -0700
@@ -19,15 +19,17 @@
- improves some aspect of the early implementation in Mercurial core
'''
-testedwith = '3.0.1 3.1'
+__version__ = '5.1.5'
+testedwith = '3.3.3 3.4.1'
buglink = 'http://bz.selenic.com/'
import sys, os
import random
from StringIO import StringIO
import struct
-import urllib
import re
+import socket
+import errno
sha1re = re.compile(r'\b[0-9a-f]{6,40}\b')
import mercurial
@@ -44,7 +46,6 @@
gboptslist = gboptsmap = None
-from mercurial import base85
from mercurial import bookmarks
from mercurial import cmdutil
from mercurial import commands
@@ -60,7 +61,6 @@
from mercurial import node
from mercurial import phases
from mercurial import patch
-from mercurial import pushkey
from mercurial import revset
from mercurial import scmutil
from mercurial import templatekw
@@ -70,7 +70,6 @@
from mercurial import wireproto
from mercurial import localrepo
from mercurial.hgweb import hgweb_mod
-from mercurial import bundle2
cmdtable = {}
command = cmdutil.command(cmdtable)
@@ -84,10 +83,14 @@
def memfilectx(repo, *args, **kwargs):
return oldmemfilectx(*args, **kwargs)
else:
- raise util.Abort('Your Mercurial is too old for this version of Evolve\n'
- 'requires version 3.0.1 or above')
-
-
+ raise ImportError('evolve needs version %s or above' % min(testedwith.split()))
+
+aliases, entry = cmdutil.findcmd('commit', commands.table)
+hasinteractivemode = any(['interactive' in e for e in entry[1]])
+if hasinteractivemode:
+ interactiveopt = [['i', 'interactive', None, _('use interactive mode')]]
+else:
+ interactiveopt = []
# This extension contains the following code
#
# - Extension Helper code
@@ -97,19 +100,6 @@
#####################################################################
-### Compatibility with core ###
-#####################################################################
-
-
-def retractboundary(repo, tr, targetphase, nodes):
- """Older mercurial version does not move phase within a transaction"""
- try:
- return phases.retractboundary(repo, tr, targetphase, nodes)
- except TypeError:
- return phases.retractboundary(repo, targetphase, nodes)
-
-
-#####################################################################
### Extension helper ###
#####################################################################
@@ -254,7 +244,7 @@
def templatekw(self, keywordname):
- """Decorated function is a revset keyword
+ """Decorated function is a template keyword
The name of the keyword must be given as the decorator argument.
The symbol is added during `extsetup`.
@@ -362,120 +352,6 @@
if not opts.get('user') and opts.get('current_user'):
opts['user'] = ui.username()
-
-createmarkers = obsolete.createmarkers
-if not util.safehasattr(obsolete.obsstore, 'relevantmarkers'):
-
- @eh.wrapfunction(mercurial.obsolete, 'createmarkers')
- def _createmarkers(orig, repo, relations, *args, **kwargs):
- """register parent information at prune time"""
- # every time this test is run, a kitten is slain.
- # Change it as soon as possible
- if '[,{metadata}]' in orig.__doc__:
- relations = list(relations)
- for idx, rel in enumerate(relations):
- prec = rel[0]
- sucs = rel[1]
- if not sucs:
- meta = {}
- if 2 < len(rel):
- meta.update(rel[2])
- for i, p in enumerate(prec.parents(), 1):
- meta['p%i' % i] = p.hex()
- relations[idx] = (prec, sucs, meta)
- return orig(repo, relations, *args, **kwargs)
-
- def createmarkers(*args, **kwargs):
- return obsolete.createmarkers(*args, **kwargs)
-
- class pruneobsstore(obsolete.obsstore):
-
- def __init__(self, *args, **kwargs):
- self.prunedchildren = {}
- return super(pruneobsstore, self).__init__(*args, **kwargs)
-
- def _load(self, markers):
- markers = self._prunedetectingmarkers(markers)
- return super(pruneobsstore, self)._load(markers)
-
-
- def _prunedetectingmarkers(self, markers):
- for m in markers:
- if not m[1]: # no successors
- meta = obsolete.decodemeta(m[3])
- if 'p1' in meta:
- p1 = node.bin(meta['p1'])
- self.prunedchildren.setdefault(p1, set()).add(m)
- if 'p2' in meta:
- p2 = node.bin(meta['p2'])
- self.prunedchildren.setdefault(p2, set()).add(m)
- yield m
-
- obsolete.obsstore = pruneobsstore
-
- @eh.addattr(obsolete.obsstore, 'relevantmarkers')
- def relevantmarkers(self, nodes):
- """return a set of all obsolescence marker relevant to a set of node.
-
- "relevant" to a set of node mean:
-
- - marker that use this changeset as successors
- - prune marker of direct children on this changeset.
- - recursive application of the two rules on precursors of these markers
-
- It a set so you cannot rely on order"""
- seennodes = set(nodes)
- seenmarkers = set()
- pendingnodes = set(nodes)
- precursorsmarkers = self.precursors
- prunedchildren = self.prunedchildren
- while pendingnodes:
- direct = set()
- for current in pendingnodes:
- direct.update(precursorsmarkers.get(current, ()))
- direct.update(prunedchildren.get(current, ()))
- direct -= seenmarkers
- pendingnodes = set([m[0] for m in direct])
- seenmarkers |= direct
- pendingnodes -= seennodes
- seennodes |= pendingnodes
- return seenmarkers
-
-@command('debugobsoleterelevant',
- [],
- 'REVSET')
-def debugobsoleterelevant(ui, repo, *revsets):
- """print allobsolescence marker relevant to a set of revision"""
- nodes = [ctx.node() for ctx in repo.set('%lr', revsets)]
- markers = repo.obsstore.relevantmarkers(nodes)
- for rawmarker in sorted(markers):
- marker = obsolete.marker(repo, rawmarker)
- cmdutil.showmarker(ui, marker)
-
-
-#####################################################################
-### Critical fix ###
-#####################################################################
-
-@eh.wrapfunction(mercurial.obsolete, '_readmarkers')
-def safereadmarkers(orig, data):
- """safe maker wrapper to remove nullid succesors
-
- Nullid successors was created by older version of evolve.
- """
- nb = 0
- for marker in orig(data):
- if nullid in marker[1]:
- marker = (marker[0],
- tuple(s for s in marker[1] if s != nullid),
- marker[2],
- marker[3])
- nb += 1
- yield marker
- if nb:
- e = sys.stderr
- print >> e, 'repo contains %i invalid obsolescence markers' % nb
-
getrevs = obsolete.getrevs
#####################################################################
@@ -522,9 +398,13 @@
Changesets with troubles.
"""
revset.getargs(x, 0, 0, 'troubled takes no arguments')
- return repo.revs('%ld and (unstable() + bumped() + divergent())',
- subset)
-
+ troubled = set()
+ troubled.update(getrevs(repo, 'unstable'))
+ troubled.update(getrevs(repo, 'bumped'))
+ troubled.update(getrevs(repo, 'divergent'))
+ troubled = revset.baseset(troubled)
+ troubled.sort() # set is non-ordered, enforce order
+ return subset & troubled
### Obsolescence graph
@@ -535,16 +415,19 @@
cs = set()
nm = repo.changelog.nodemap
markerbysubj = repo.obsstore.precursors
+ node = repo.changelog.node
for r in s:
- for p in markerbysubj.get(repo[r].node(), ()):
+ for p in markerbysubj.get(node(r), ()):
pr = nm.get(p[0])
if pr is not None:
cs.add(pr)
+ cs -= repo.changelog.filteredrevs # nodemap has no filtering
return cs
def _allprecursors(repo, s): # XXX we need a better naming
"""transitive precursors of a subset"""
- toproceed = [repo[r].node() for r in s]
+ node = repo.changelog.node
+ toproceed = [node(r) for r in s]
seen = set()
allsubjects = repo.obsstore.precursors
while toproceed:
@@ -560,19 +443,22 @@
pr = nm.get(p)
if pr is not None:
cs.add(pr)
+ cs -= repo.changelog.filteredrevs # nodemap has no filtering
return cs
def _successors(repo, s):
"""Successors of a changeset"""
cs = set()
+ node = repo.changelog.node
nm = repo.changelog.nodemap
markerbyobj = repo.obsstore.successors
for r in s:
- for p in markerbyobj.get(repo[r].node(), ()):
+ for p in markerbyobj.get(node(r), ()):
for sub in p[1]:
sr = nm.get(sub)
if sr is not None:
cs.add(sr)
+ cs -= repo.changelog.filteredrevs # nodemap has no filtering
return cs
def _allsuccessors(repo, s, haltonflags=0): # XXX we need a better naming
@@ -580,7 +466,8 @@
haltonflags allows to provide flags which prevent the evaluation of a
marker. """
- toproceed = [repo[r].node() for r in s]
+ node = repo.changelog.node
+ toproceed = [node(r) for r in s]
seen = set()
allobjects = repo.obsstore.successors
while toproceed:
@@ -600,6 +487,7 @@
sr = nm.get(s)
if sr is not None:
cs.add(sr)
+ cs -= repo.changelog.filteredrevs # nodemap has no filtering
return cs
@@ -619,9 +507,10 @@
"""``suspended()``
Obsolete changesets with non-obsolete descendants.
"""
- args = revset.getargs(x, 0, 0, 'suspended takes no arguments')
- suspended = getrevs(repo, 'suspended')
- return [r for r in subset if r in suspended]
+ revset.getargs(x, 0, 0, 'suspended takes no arguments')
+ suspended = revset.baseset(getrevs(repo, 'suspended'))
+ suspended.sort()
+ return subset & suspended
@eh.revset('precursors')
@@ -629,9 +518,10 @@
"""``precursors(set)``
Immediate precursors of changesets in set.
"""
- s = revset.getset(repo, range(len(repo)), x)
- cs = _precursors(repo, s)
- return [r for r in subset if r in cs]
+ s = revset.getset(repo, revset.fullreposet(repo), x)
+ s = revset.baseset(_precursors(repo, s))
+ s.sort()
+ return subset & s
@eh.revset('allprecursors')
@@ -639,9 +529,10 @@
"""``allprecursors(set)``
Transitive precursors of changesets in set.
"""
- s = revset.getset(repo, range(len(repo)), x)
- cs = _allprecursors(repo, s)
- return [r for r in subset if r in cs]
+ s = revset.getset(repo, revset.fullreposet(repo), x)
+ s = revset.baseset(_allprecursors(repo, s))
+ s.sort()
+ return subset & s
@eh.revset('successors')
@@ -649,18 +540,20 @@
"""``successors(set)``
Immediate successors of changesets in set.
"""
- s = revset.getset(repo, range(len(repo)), x)
- cs = _successors(repo, s)
- return [r for r in subset if r in cs]
+ s = revset.getset(repo, revset.fullreposet(repo), x)
+ s = revset.baseset(_successors(repo, s))
+ s.sort()
+ return subset & s
@eh.revset('allsuccessors')
def revsetallsuccessors(repo, subset, x):
"""``allsuccessors(set)``
Transitive successors of changesets in set.
"""
- s = revset.getset(repo, range(len(repo)), x)
- cs = _allsuccessors(repo, s)
- return [r for r in subset if r in cs]
+ s = revset.getset(repo, revset.fullreposet(repo), x)
+ s = revset.baseset(_allsuccessors(repo, s))
+ s.sort()
+ return subset & s
### template keywords
# XXX it does not handle troubles well :-/
@@ -670,7 +563,6 @@
""":obsolete: String. The obsolescence level of the node, could be
``stable``, ``unstable``, ``suspended`` or ``extinct``.
"""
- rev = ctx.rev()
if ctx.obsolete():
if ctx.extinct():
return 'extinct'
@@ -738,28 +630,20 @@
ui.warn(_('%i new divergent changesets\n') % newdivergents)
return ret
-@eh.reposetup
-def _repostabilizesetup(ui, repo):
+@eh.wrapfunction(mercurial.exchange, 'push')
+def push(orig, repo, *args, **opts):
"""Add a hint for "hg evolve" when troubles make push fails
"""
- if not repo.local():
- return
-
- class evolvingrepo(repo.__class__):
- def push(self, remote, *args, **opts):
- """wrapper around pull that pull obsolete relation"""
- try:
- result = super(evolvingrepo, self).push(remote, *args, **opts)
- except util.Abort, ex:
- hint = _("use 'hg evolve' to get a stable history "
- "or --force to ignore warnings")
- if (len(ex.args) >= 1
- and ex.args[0].startswith('push includes ')
- and ex.hint is None):
- ex.hint = hint
- raise
- return result
- repo.__class__ = evolvingrepo
+ try:
+ return orig(repo, *args, **opts)
+ except util.Abort, ex:
+ hint = _("use 'hg evolve' to get a stable history "
+ "or --force to ignore warnings")
+ if (len(ex.args) >= 1
+ and ex.args[0].startswith('push includes ')
+ and ex.hint is None):
+ ex.hint = hint
+ raise
def summaryhook(ui, repo):
def write(fmt, count):
@@ -859,7 +743,7 @@
isexec='x' in flags,
copied=copied.get(path))
return mctx
- raise IOError()
+ return None
message = cmdutil.logmessage(repo.ui, commitopts)
if not message:
@@ -892,7 +776,7 @@
class MergeFailure(util.Abort):
pass
-def relocate(repo, orig, dest):
+def relocate(repo, orig, dest, keepbranch=False):
"""rewrite <rev> on dest"""
if orig.rev() == dest.rev():
raise util.Abort(_('tried to relocate a node on top of itself'),
@@ -901,12 +785,10 @@
"manually with nothing to rebase - working "
"directory parent is also destination"))
- rebase = extensions.find('rebase')
- # dummy state to trick rebase node
if not orig.p2().rev() == node.nullrev:
raise util.Abort(
'no support for evolving merge changesets yet',
- hint="Redo the merge and use `hg prune` to obsolete the old one")
+ hint="Redo the merge and use `hg prune <old> --succ <new>` to obsolete the old one")
destbookmarks = repo.nodebookmarks(dest.node())
nodesrc = orig.node()
destphase = repo[nodesrc].phase()
@@ -934,32 +816,54 @@
commitmsg = commitmsg.replace(sha1, newsha1[:len(sha1)])
else:
repo.ui.note(_('The stale commit message reference to %s could '
- 'not be updated') % sha1)
+ 'not be updated\n') % sha1)
tr = repo.transaction('relocate')
try:
try:
- r = rebase.rebasenode(repo, orig.node(), dest.node(),
- {node.nullrev: node.nullrev}, False)
- if r[-1]: #some conflict
+ if repo['.'].rev() != dest.rev():
+ merge.update(repo, dest, False, True, False)
+ if bmactive(repo):
+ repo.ui.status(_("(leaving bookmark %s)\n") % bmactive(repo))
+ bmdeactivate(repo)
+ if keepbranch:
+ repo.dirstate.setbranch(orig.branch())
+ r = merge.graft(repo, orig, orig.p1(), ['local', 'graft'])
+ if r[-1]: #some conflict
raise util.Abort(
'unresolved merge conflicts (see hg help resolve)')
- cmdutil.duplicatecopies(repo, orig.node(), dest.node())
- nodenew = rebase.concludenode(repo, orig.node(), dest.node(),
- node.nullid, commitmsg)
+ if commitmsg is None:
+ commitmsg = orig.description()
+ extra = {'rebase_source': orig.hex()}
+
+ backup = repo.ui.backupconfig('phases', 'new-commit')
+ try:
+ targetphase = max(orig.phase(), phases.draft)
+ repo.ui.setconfig('phases', 'new-commit', targetphase, 'rebase')
+ # Commit might fail if unresolved files exist
+ nodenew = repo.commit(text=commitmsg, user=orig.user(),
+ date=orig.date(), extra=extra)
+ finally:
+ repo.ui.restoreconfig(backup)
except util.Abort, exc:
+ repo.dirstate.beginparentchange()
+ repo.setparents(repo['.'].node(), nullid)
+ repo.dirstate.write()
+ # fix up dirstate for copies and renames
+ copies.duplicatecopies(repo, dest.rev(), orig.p1().rev())
+ repo.dirstate.endparentchange()
class LocalMergeFailure(MergeFailure, exc.__class__):
pass
exc.__class__ = LocalMergeFailure
raise
oldbookmarks = repo.nodebookmarks(nodesrc)
if nodenew is not None:
- retractboundary(repo, tr, destphase, [nodenew])
- createmarkers(repo, [(repo[nodesrc], (repo[nodenew],))])
+ phases.retractboundary(repo, tr, destphase, [nodenew])
+ obsolete.createmarkers(repo, [(repo[nodesrc], (repo[nodenew],))])
for book in oldbookmarks:
repo._bookmarks[book] = nodenew
else:
- createmarkers(repo, [(repo[nodesrc], ())])
+ obsolete.createmarkers(repo, [(repo[nodesrc], ())])
# Behave like rebase, move bookmarks to dest
for book in oldbookmarks:
repo._bookmarks[book] = dest.node()
@@ -976,12 +880,8 @@
"""Return a callable update(newid) updating the current bookmark
and bookmarks bound to oldid to newid.
"""
- bm = bookmarks.readcurrent(repo)
def updatebookmarks(newid):
dirty = False
- if bm:
- repo._bookmarks[bm] = newid
- dirty = True
oldbookmarks = repo.nodebookmarks(oldid)
if oldbookmarks:
for b in oldbookmarks:
@@ -991,6 +891,24 @@
repo._bookmarks.write()
return updatebookmarks
+### bookmarks api compatibility layer ###
+def bmdeactivate(repo):
+ try:
+ return bookmarks.deactivate(repo)
+ except AttributeError:
+ return bookmarks.unsetcurrent(repo)
+def bmactivate(repo, book):
+ try:
+ return bookmarks.activate(repo, book)
+ except AttributeError:
+ return bookmarks.setcurrent(repo, book)
+
+def bmactive(repo):
+ try:
+ return repo._activebookmark
+ except AttributeError:
+ return repo._bookmarkcurrent
+
### new command
#############################
metadataopts = [
@@ -1004,7 +922,7 @@
def _installimportobsolete(ui):
entry = cmdutil.findcmd('import', commands.table)[1]
entry[1].append(('', 'obsolete', False,
- _('mark the old node as obsoleted by'
+ _('mark the old node as obsoleted by '
'the created commit')))
@eh.wrapfunction(mercurial.cmdutil, 'tryimportone')
@@ -1093,11 +1011,10 @@
rev = nm.get(mark[0])
if rev is not None:
ctx = unfi[rev]
- meta = obsolete.decodemeta(mark[3])
- for i, p in enumerate(ctx.parents(), 1):
- meta['p%i' % i] = p.hex()
+ parents = tuple(p.node() for p in ctx.parents())
before = len(store._all)
- store.create(tr, mark[0], mark[1], mark[2], metadata=meta)
+ store.create(tr, mark[0], mark[1], mark[2], marks[3],
+ parents=parents)
if len(store._all) - before:
ui.write('created new markers for %i\n' % rev)
ui.progress(pgop, idx, total=pgtotal)
@@ -1116,7 +1033,6 @@
sucscount = [0, 0 , 0, 0]
known = 0
parentsdata = 0
- metatotallenght = 0
metakeys = {}
# node -> cluster mapping
# a cluster is a (set(nodes), set(markers)) tuple
@@ -1128,11 +1044,11 @@
known += 1
nbsucs = len(mark[1])
sucscount[min(nbsucs, 3)] += 1
- metatotallenght += len(mark[3])
- meta = obsolete.decodemeta(mark[3])
- for key in meta:
+ meta = mark[3]
+ for key, value in meta:
metakeys.setdefault(key, 0)
metakeys[key] += 1
+ meta = dict(meta)
parents = [meta.get('p1'), meta.get('p2')]
parents = [node.bin(p) for p in parents if p is not None]
if parents:
@@ -1193,8 +1109,6 @@
ui.write(' 2 successors: %9i\n' % sucscount[2])
ui.write(' more than 2 successors: %9i\n' % sucscount[3])
# meta data info
- ui.write('average meta length: %9i\n'
- % (metatotallenght/len(store._all)))
ui.write(' available keys:\n')
for key in sorted(metakeys):
ui.write(' %15s: %9i\n' % (key, metakeys[key]))
@@ -1241,7 +1155,7 @@
] + mergetoolopts,
_('[OPTIONS]...'))
def evolve(ui, repo, **opts):
- """Solve trouble in your repository
+ """solve trouble in your repository
- rebase unstable changesets to make them stable again,
- create proper diffs from bumped changesets,
@@ -1314,7 +1228,6 @@
displayer.show(ctx)
if dryrunopt:
- print 'hg update %s' % ctx.rev()
return 0
else:
res = hg.update(repo, ctx.rev())
@@ -1376,8 +1289,6 @@
elif 'bumped' in troubles:
return _solvebumped(ui, repo, tro, dryrunopt, confirmopt, progresscb)
elif 'divergent' in troubles:
- repo = repo.unfiltered()
- tro = repo[tro.rev()]
return _solvedivergent(ui, repo, tro, dryrunopt, confirmopt,
progresscb)
else:
@@ -1426,9 +1337,12 @@
# Look for an unstable which can be stabilized as a child of
# node. The unstable must be a child of one of node predecessors.
+ directdesc = set([pctx.rev()])
for ctx in selfanddescendants(repo, pctx):
for child in ctx.children():
- if child.unstable():
+ if ctx.rev() in directdesc and not child.obsolete():
+ directdesc.add(child.rev())
+ elif child.unstable():
return child
return None
@@ -1437,15 +1351,14 @@
"""Stabilize a unstable changeset"""
obs = orig.parents()[0]
if not obs.obsolete():
- print obs.rev(), orig.parents()
- print orig.rev()
- obs = orig.parents()[1]
+ obs = orig.parents()[1] # second parent is obsolete ?
assert obs.obsolete()
newer = obsolete.successorssets(repo, obs.node())
# search of a parent which is not killed
while not newer or newer == [()]:
ui.debug("stabilize target %s is plain dead,"
- " trying to stabilize on its parent")
+ " trying to stabilize on its parent\n" %
+ obs)
obs = obs.parents()[0]
newer = obsolete.successorssets(repo, obs.node())
if len(newer) > 1:
@@ -1463,7 +1376,7 @@
displayer.show(orig)
repo.ui.write(_('atop:'))
displayer.show(target)
- if confirm and ui.prompt('perform evolve? [Ny]') != 'y':
+ if confirm and ui.prompt('perform evolve? [Ny]', 'n') != 'y':
raise util.Abort(_('evolve aborted by user'))
if progresscb: progresscb()
todo = 'hg rebase -r %s -d %s\n' % (orig, target)
@@ -1472,13 +1385,15 @@
else:
repo.ui.note(todo)
if progresscb: progresscb()
+ keepbranch = orig.p1().branch() != orig.branch()
try:
- relocate(repo, orig, target)
+ relocate(repo, orig, target, keepbranch)
except MergeFailure:
repo.opener.write('graftstate', orig.hex() + '\n')
repo.ui.write_err(_('evolve failed!\n'))
repo.ui.write_err(
- _('fix conflict and run "hg evolve --continue"\n'))
+ _('fix conflict and run "hg evolve --continue"'
+ ' or use "hg update -C" to abort\n'))
raise
def _solvebumped(ui, repo, bumped, dryrun=False, confirm=False,
@@ -1500,7 +1415,7 @@
displayer.show(bumped)
repo.ui.write(_('atop:'))
displayer.show(prec)
- if confirm and ui.prompt('perform evolve? [Ny]') != 'y':
+ if confirm and ui.prompt('perform evolve? [Ny]', 'n') != 'y':
raise util.Abort(_('evolve aborted by user'))
if dryrun:
todo = 'hg rebase --rev %s --dest %s;\n' % (bumped, prec.p1())
@@ -1524,7 +1439,7 @@
tmpid = relocate(repo, bumped, prec.p1())
if tmpid is not None:
tmpctx = repo[tmpid]
- createmarkers(repo, [(bumped, (tmpctx,))])
+ obsolete.createmarkers(repo, [(bumped, (tmpctx,))])
except MergeFailure:
repo.opener.write('graftstate', bumped.hex() + '\n')
repo.ui.write_err(_('evolution failed!\n'))
@@ -1536,8 +1451,11 @@
files = set()
copied = copies.pathcopies(prec, bumped)
precmanifest = prec.manifest()
- for key, val in bumped.manifest().iteritems():
- if precmanifest.pop(key, None) != val:
+ for key, val in list(bumped.manifest().iteritems()):
+ precvalue = precmanifest.get(key, None)
+ if precvalue is not None:
+ del precmanifest[key]
+ if precvalue != val:
files.add(key)
files.update(precmanifest) # add missing files
# commit it
@@ -1551,7 +1469,7 @@
isexec='x' in flags,
copied=copied.get(path))
return mctx
- raise IOError()
+ return None
text = 'bumped update to %s:\n\n' % prec
text += bumped.description()
@@ -1566,11 +1484,11 @@
newid = repo.commitctx(new)
if newid is None:
- createmarkers(repo, [(tmpctx, ())])
+ obsolete.createmarkers(repo, [(tmpctx, ())])
newid = prec.node()
else:
- retractboundary(repo, tr, bumped.phase(), [newid])
- createmarkers(repo, [(tmpctx, (repo[newid],))],
+ phases.retractboundary(repo, tr, bumped.phase(), [newid])
+ obsolete.createmarkers(repo, [(tmpctx, (repo[newid],))],
flag=obsolete.bumpedfix)
bmupdate(newid)
tr.close()
@@ -1578,7 +1496,9 @@
finally:
tr.release()
# reroute the working copy parent to the new changeset
+ repo.dirstate.beginparentchange()
repo.dirstate.setparents(newid, node.nullid)
+ repo.dirstate.endparentchange()
def _solvedivergent(ui, repo, divergent, dryrun=False, confirm=False,
progresscb=None):
@@ -1608,13 +1528,13 @@
"| `hg prune` to kill older version.")
if other.p1() not in divergent.parents():
raise util.Abort("parents are not common (not handled yet)",
- hint="| %(d)s, %(o)s are not based on the same changeset."
- "| With the current state of its implementation, "
+ hint="| %(d)s, %(o)s are not based on the same changeset.\n"
+ "| With the current state of its implementation, \n"
"| evolve does not work in that case.\n"
- "| rebase one of them next to the other and run "
+ "| rebase one of them next to the other and run \n"
"| this command again.\n"
- "| - either: hg rebase -dest 'p1(%(d)s)' -r %(o)s"
- "| - or: hg rebase -dest 'p1(%(d)s)' -r %(o)s"
+ "| - either: hg rebase --dest 'p1(%(d)s)' -r %(o)s\n"
+ "| - or: hg rebase --dest 'p1(%(o)s)' -r %(d)s"
% {'d': divergent, 'o': other})
displayer = cmdutil.show_changeset(ui, repo, {'template': shorttemplate})
@@ -1625,7 +1545,7 @@
displayer.show(other)
ui.write(_('base: '))
displayer.show(base)
- if confirm and ui.prompt('perform evolve? [Ny]') != 'y':
+ if confirm and ui.prompt('perform evolve? [Ny]', 'n') != 'y':
raise util.Abort(_('evolve aborted by user'))
if dryrun:
ui.write('hg update -c %s &&\n' % divergent)
@@ -1666,7 +1586,9 @@
if progresscb: progresscb()
tr = repo.transaction('stabilize-divergent')
try:
+ repo.dirstate.beginparentchange()
repo.dirstate.setparents(divergent.node(), node.nullid)
+ repo.dirstate.endparentchange()
oldlen = len(repo)
amend(ui, repo, message='', logfile='')
if oldlen == len(repo):
@@ -1674,8 +1596,8 @@
# no changes
else:
new = repo['.']
- createmarkers(repo, [(other, (new,))])
- retractboundary(repo, tr, other.phase(), [new.node()])
+ obsolete.createmarkers(repo, [(other, (new,))])
+ phases.retractboundary(repo, tr, other.phase(), [new.node()])
tr.close()
finally:
tr.release()
@@ -1687,13 +1609,14 @@
XXX this woobly function won't survive XXX
"""
- for base in ctx._repo.set('reverse(precursors(%d))', ctx):
+ repo = ctx._repo.unfiltered()
+ for base in repo.set('reverse(allprecursors(%d))', ctx):
newer = obsolete.successorssets(ctx._repo, base.node())
# drop filter and solution including the original ctx
newer = [n for n in newer if n and ctx.node() not in n]
if newer:
return base, tuple(ctx._repo[o] for o in newer[0])
- raise util.Abort('base of divergent changeset not found',
+ raise util.Abort("base of divergent changeset %s not found" % ctx,
hint='this case is not yet handled')
@@ -1701,9 +1624,10 @@
shorttemplate = '[{rev}] {desc|firstline}\n'
@command('^previous',
- [],
- '')
-def cmdprevious(ui, repo):
+ [('B', 'move-bookmark', False,
+ _('Move active bookmark after update'))],
+ '[-B]')
+def cmdprevious(ui, repo, **opts):
"""update to parent and display summary lines"""
wkctx = repo[None]
wparents = wkctx.parents()
@@ -1714,12 +1638,15 @@
displayer = cmdutil.show_changeset(ui, repo, {'template': shorttemplate})
if len(parents) == 1:
p = parents[0]
- bm = bookmarks.readcurrent(repo)
- shouldmove = bm is not None and bookmarks.iscurrent(repo, bm)
+ bm = bmactive(repo)
+ shouldmove = opts.get('move_bookmark') and bm is not None
ret = hg.update(repo, p.rev())
- if not ret and shouldmove:
- repo._bookmarks[bm] = p.node()
- repo._bookmarks.write()
+ if not ret:
+ if shouldmove:
+ repo._bookmarks[bm] = p.node()
+ repo._bookmarks.write()
+ else:
+ bmdeactivate(repo)
displayer.show(p)
return 0
else:
@@ -1729,9 +1656,10 @@
return 1
@command('^next',
- [],
- '')
-def cmdnext(ui, repo):
+ [('B', 'move-bookmark', False,
+ _('Move active bookmark after update'))],
+ '[-B]')
+def cmdnext(ui, repo, **opts):
"""update to child and display summary lines"""
wkctx = repo[None]
wparents = wkctx.parents()
@@ -1745,12 +1673,15 @@
return 1
if len(children) == 1:
c = children[0]
- bm = bookmarks.readcurrent(repo)
- shouldmove = bm is not None and bookmarks.iscurrent(repo, bm)
+ bm = bmactive(repo)
+ shouldmove = opts.get('move_bookmark') and bm is not None
ret = hg.update(repo, c.rev())
- if not ret and shouldmove:
- repo._bookmarks[bm] = c.node()
- repo._bookmarks.write()
+ if not ret:
+ if shouldmove:
+ repo._bookmarks[bm] = c.node()
+ repo._bookmarks.write()
+ else:
+ bmdeactivate(repo)
displayer.show(c)
return 0
else:
@@ -1782,8 +1713,10 @@
"ancestors(bookmark() and not bookmark(%s)) - "
"obsolete()",
mark, mark, mark)
+ revs = set(revs)
revs.update(set(rsrevs))
- return marks,revs
+ revs = sorted(revs)
+ return marks, revs
def _deletebookmark(ui, marks, mark):
del marks[mark]
@@ -1831,7 +1764,7 @@
a future release (with the functionality absorbed automatically).
"""
- revs = set(scmutil.revrange(repo, list(revs) + opts.get('rev')))
+ revs = scmutil.revrange(repo, list(revs) + opts.get('rev'))
succs = opts['new'] + opts['succ']
bookmark = opts.get('bookmark')
metadata = _getmetadata(**opts)
@@ -1849,11 +1782,11 @@
wlock = lock = None
try:
wlock = repo.wlock()
- sortedrevs = lambda specs: sorted(set(scmutil.revrange(repo, specs)))
lock = repo.lock()
# defines pruned changesets
precs = []
- for p in sortedrevs(revs):
+ revs.sort()
+ for p in revs:
cp = repo[p]
if not cp.mutable():
# note: createmarkers() would have raised something anyway
@@ -1864,7 +1797,9 @@
raise util.Abort('nothing to prune')
# defines successors changesets
- sucs = tuple(repo[n] for n in sortedrevs(succs))
+ sucs = scmutil.revrange(repo, succs)
+ sucs.sort()
+ sucs = tuple(repo[n] for n in sucs)
if not biject and len(sucs) > 1 and len(precs) > 1:
msg = "Can't use multiple successors for multiple precursors"
raise util.Abort(msg)
@@ -1879,7 +1814,7 @@
relations = [(p, (s,)) for p, s in zip(precs, sucs)]
# create markers
- createmarkers(repo, relations, metadata=metadata)
+ obsolete.createmarkers(repo, relations, metadata=metadata)
# informs that changeset have been pruned
ui.status(_('%i changesets pruned\n') % len(precs))
@@ -1897,8 +1832,20 @@
newnode = newnode.parents()[0]
if newnode.node() != wdp.node():
+ bookactive = bmactive(repo)
+ # Active bookmark that we don't want to delete (with -B option)
+ # we deactivate and move it before the update and reactivate it
+ # after
+ movebookmark = bookactive and not bookmark
+ if movebookmark:
+ bmdeactivate(repo)
+ repo._bookmarks[bookactive] = newnode.node()
+ repo._bookmarks.write()
commands.update(ui, repo, newnode.rev())
ui.status(_('working directory now at %s\n') % newnode)
+ if movebookmark:
+ bmactivate(repo, bookactive)
+
# update bookmarks
if bookmark:
_deletebookmark(ui, marks, bookmark)
@@ -1926,7 +1873,7 @@
('', 'close-branch', None,
_('mark a branch as closed, hiding it from the branch list')),
('s', 'secret', None, _('use the secret phase for committing')),
- ] + walkopts + commitopts + commitopts2 + commitopts3,
+ ] + walkopts + commitopts + commitopts2 + commitopts3 + interactiveopt,
_('[OPTION]... [FILE]...'))
def amend(ui, repo, *pats, **opts):
"""combine a changeset with updates and replace it with a new one
@@ -1948,8 +1895,9 @@
"""
opts = opts.copy()
edit = opts.pop('edit', False)
+ log = opts.get('logfile')
opts['amend'] = True
- if not (edit or opts['message']):
+ if not (edit or opts['message'] or log):
opts['message'] = repo['.'].description()
_resolveoptions(ui, opts)
_alias, commitcmd = cmdutil.findcmd('commit', commands.table)
@@ -1992,7 +1940,7 @@
if path in redirect:
return filectxfn(repo, memctx, path, contentctx=target, redirect=())
if path not in contentctx:
- raise IOError()
+ return None
fctx = contentctx[path]
flags = fctx.flags()
mctx = memfilectx(repo, fctx.path(), fctx.data(),
@@ -2101,6 +2049,9 @@
rev = None
if opts.get('rev'):
rev = scmutil.revsingle(repo, opts.get('rev'))
+ ctx = repo[None]
+ if ctx.p1() == rev or ctx.p2() == rev:
+ raise util.Abort(_("cannot uncommit to parent changeset"))
# Recommit the filtered changeset
tr = repo.transaction('uncommit')
@@ -2113,10 +2064,12 @@
raise util.Abort(_('nothing to uncommit'),
hint=_("use --all to uncommit all files"))
# Move local changes on filtered changeset
- createmarkers(repo, [(old, (repo[newid],))])
- retractboundary(repo, tr, oldphase, [newid])
+ obsolete.createmarkers(repo, [(old, (repo[newid],))])
+ phases.retractboundary(repo, tr, oldphase, [newid])
+ repo.dirstate.beginparentchange()
repo.dirstate.setparents(newid, node.nullid)
_uncommitdirstate(repo, old, match)
+ repo.dirstate.endparentchange()
updatebookmarks(newid)
if not repo[newid].files():
ui.warn(_("new changeset is empty\n"))
@@ -2128,8 +2081,9 @@
@eh.wrapcommand('commit')
def commitwrapper(orig, ui, repo, *arg, **kwargs):
if kwargs.get('amend', False):
- lock = None
+ wlock = lock = None
else:
+ wlock = repo.wlock()
lock = repo.lock()
try:
obsoleted = kwargs.get('obsolete', [])
@@ -2144,15 +2098,14 @@
oldbookmarks.extend(repo.nodebookmarks(old.node()))
markers.append((old, (new,)))
if markers:
- createmarkers(repo, markers)
+ obsolete.createmarkers(repo, markers)
for book in oldbookmarks:
repo._bookmarks[book] = new.node()
if oldbookmarks:
repo._bookmarks.write()
return result
finally:
- if lock is not None:
- lock.release()
+ lockmod.release(lock, wlock)
@command('^touch',
[('r', 'rev', [], 'revision to update'),
@@ -2161,7 +2114,7 @@
# allow to choose the seed ?
_('[-r] revs'))
def touch(ui, repo, *revs, **opts):
- """Create successors that are identical to their predecessors except for the changeset ID
+ """create successors that are identical to their predecessors except for the changeset ID
This is used to "resurrect" changesets
"""
@@ -2176,38 +2129,37 @@
return 1
if not duplicate and repo.revs('public() and %ld', revs):
raise util.Abort("can't touch public revision")
- wlock = lock = None
+ wlock = lock = tr = None
try:
wlock = repo.wlock()
lock = repo.lock()
tr = repo.transaction('touch')
revs.sort() # ensure parent are run first
newmapping = {}
- try:
- for r in revs:
- ctx = repo[r]
- extra = ctx.extra().copy()
- extra['__touch-noise__'] = random.randint(0, 0xffffffff)
- # search for touched parent
- p1 = ctx.p1().node()
- p2 = ctx.p2().node()
- p1 = newmapping.get(p1, p1)
- p2 = newmapping.get(p2, p2)
- new, unusedvariable = rewrite(repo, ctx, [], ctx,
- [p1, p2],
- commitopts={'extra': extra})
- # store touched version to help potential children
- newmapping[ctx.node()] = new
- if not duplicate:
- createmarkers(repo, [(ctx, (repo[new],))])
- retractboundary(repo, tr, ctx.phase(), [new])
- if ctx in repo[None].parents():
- repo.dirstate.setparents(new, node.nullid)
- tr.close()
- finally:
- tr.release()
+ for r in revs:
+ ctx = repo[r]
+ extra = ctx.extra().copy()
+ extra['__touch-noise__'] = random.randint(0, 0xffffffff)
+ # search for touched parent
+ p1 = ctx.p1().node()
+ p2 = ctx.p2().node()
+ p1 = newmapping.get(p1, p1)
+ p2 = newmapping.get(p2, p2)
+ new, unusedvariable = rewrite(repo, ctx, [], ctx,
+ [p1, p2],
+ commitopts={'extra': extra})
+ # store touched version to help potential children
+ newmapping[ctx.node()] = new
+ if not duplicate:
+ obsolete.createmarkers(repo, [(ctx, (repo[new],))])
+ phases.retractboundary(repo, tr, ctx.phase(), [new])
+ if ctx in repo[None].parents():
+ repo.dirstate.beginparentchange()
+ repo.dirstate.setparents(new, node.nullid)
+ repo.dirstate.endparentchange()
+ tr.close()
finally:
- lockmod.release(lock, wlock)
+ lockmod.release(tr, lock, wlock)
@command('^fold|squash',
[('r', 'rev', [], _("revision to fold")),
@@ -2273,14 +2225,14 @@
if len(roots) > 1:
raise util.Abort(_("cannot fold non-linear revisions "
"(multiple roots given)"))
- root = repo[roots[0]]
+ root = repo[roots.first()]
if root.phase() <= phases.public:
raise util.Abort(_("cannot fold public revisions"))
heads = repo.revs('heads(%ld)', revs)
if len(heads) > 1:
raise util.Abort(_("cannot fold non-linear revisions "
"(multiple heads given)"))
- head = repo[heads[0]]
+ head = repo[heads.first()]
wlock = lock = None
try:
wlock = repo.wlock()
@@ -2303,8 +2255,8 @@
newid, unusedvariable = rewrite(repo, root, allctx, head,
[root.p1().node(), root.p2().node()],
commitopts=commitopts)
- retractboundary(repo, tr, targetphase, [newid])
- createmarkers(repo, [(ctx, (repo[newid],))
+ phases.retractboundary(repo, tr, targetphase, [newid])
+ obsolete.createmarkers(repo, [(ctx, (repo[newid],))
for ctx in allctx])
tr.close()
finally:
@@ -2324,8 +2276,10 @@
kwargs['rev'] = []
obsoleted = kwargs.setdefault('obsolete', [])
- lock = repo.lock()
+ wlock = lock = None
try:
+ wlock = repo.wlock()
+ lock = repo.lock()
if kwargs.get('old_obsolete'):
if kwargs.get('continue'):
obsoleted.extend(repo.opener.read('graftstate').splitlines())
@@ -2340,15 +2294,10 @@
return commitwrapper(orig, ui, repo,*revs, **kwargs)
finally:
- lock.release()
+ lockmod.release(lock, wlock)
@eh.extsetup
def oldevolveextsetup(ui):
- try:
- rebase = extensions.find('rebase')
- except KeyError:
- raise error.Abort(_('evolution extension requires rebase extension.'))
-
for cmd in ['kill', 'uncommit', 'touch', 'fold']:
entry = extensions.wrapcommand(cmdtable, cmd,
warnobserrors)
@@ -2380,37 +2329,176 @@
topic = 'OBSEXC'
ui.progress(topic, *args, **kwargs)
-
+if getattr(exchange, '_pushdiscoveryobsmarkers', None) is not None:
+ @eh.wrapfunction(exchange, '_pushdiscoveryobsmarkers')
+ def _pushdiscoveryobsmarkers(orig, pushop):
+ if (obsolete._enabled
+ and pushop.repo.obsstore
+ and 'obsolete' in pushop.remote.listkeys('namespaces')):
+ repo = pushop.repo
+ obsexcmsg(repo.ui, "computing relevant nodes\n")
+ revs = list(repo.revs('::%ln', pushop.futureheads))
+ unfi = repo.unfiltered()
+ cl = unfi.changelog
+ if not pushop.remote.capable('_evoext_obshash_0'):
+ # do not trust core yet
+ # return orig(pushop)
+ nodes = [cl.node(r) for r in revs]
+ if nodes:
+ obsexcmsg(repo.ui, "computing markers relevant to %i nodes\n"
+ % len(nodes))
+ pushop.outobsmarkers = repo.obsstore.relevantmarkers(nodes)
+ else:
+ obsexcmsg(repo.ui, "markers already in sync\n")
+ pushop.outobsmarkers = []
+ pushop.outobsmarkers = repo.obsstore.relevantmarkers(nodes)
+ return
+
+ common = []
+ obsexcmsg(repo.ui, "looking for common markers in %i nodes\n"
+ % len(revs))
+ commonrevs = list(unfi.revs('::%ln', pushop.outgoing.commonheads))
+ common = findcommonobsmarkers(pushop.ui, unfi, pushop.remote, commonrevs)
+
+ revs = list(unfi.revs('%ld - (::%ln)', revs, common))
+ nodes = [cl.node(r) for r in revs]
+ if nodes:
+ obsexcmsg(repo.ui, "computing markers relevant to %i nodes\n"
+ % len(nodes))
+ pushop.outobsmarkers = repo.obsstore.relevantmarkers(nodes)
+ else:
+ obsexcmsg(repo.ui, "markers already in sync\n")
+ pushop.outobsmarkers = []
+
+@eh.wrapfunction(wireproto, 'capabilities')
+def discocapabilities(orig, repo, proto):
+ """wrapper to advertise new capability"""
+ caps = orig(repo, proto)
+ if obsolete._enabled:
+ caps += ' _evoext_obshash_0'
+ return caps
+
+@eh.extsetup
+def _installobsmarkersdiscovery(ui):
+ hgweb_mod.perms['evoext_obshash'] = 'pull'
+ hgweb_mod.perms['evoext_obshash1'] = 'pull'
+ # wrap command content
+ oldcap, args = wireproto.commands['capabilities']
+ def newcap(repo, proto):
+ return discocapabilities(oldcap, repo, proto)
+ wireproto.commands['capabilities'] = (newcap, args)
+ wireproto.commands['evoext_obshash'] = (srv_obshash, 'nodes')
+ wireproto.commands['evoext_obshash1'] = (srv_obshash1, 'nodes')
+ if getattr(exchange, '_pushdiscoveryobsmarkers', None) is None:
+ ui.warn('evolve: your mercurial version is too old\n'
+ 'evolve: (running in degraded mode, push will includes all markers)\n')
+ else:
+ olddisco = exchange.pushdiscoverymapping['obsmarker']
+ def newdisco(pushop):
+ _pushdiscoveryobsmarkers(olddisco, pushop)
+ exchange.pushdiscoverymapping['obsmarker'] = newdisco
+
+### Set discovery START
+
+from mercurial import dagutil
+from mercurial import setdiscovery
+
+def _obshash(repo, nodes, version=0):
+ if version == 0:
+ hashs = _obsrelsethashtreefm0(repo)
+ elif version ==1:
+ hashs = _obsrelsethashtreefm1(repo)
+ else:
+ assert False
+ nm = repo.changelog.nodemap
+ revs = [nm.get(n) for n in nodes]
+ return [r is None and nullid or hashs[r][1] for r in revs]
+
+def srv_obshash(repo, proto, nodes):
+ return wireproto.encodelist(_obshash(repo, wireproto.decodelist(nodes)))
+
+def srv_obshash1(repo, proto, nodes):
+ return wireproto.encodelist(_obshash(repo, wireproto.decodelist(nodes), version=1))
+
+@eh.addattr(localrepo.localpeer, 'evoext_obshash')
+def local_obshash(peer, nodes):
+ return _obshash(peer._repo, nodes)
+
+@eh.addattr(localrepo.localpeer, 'evoext_obshash1')
+def local_obshash1(peer, nodes):
+ return _obshash(peer._repo, nodes, version=1)
+
+@eh.addattr(wireproto.wirepeer, 'evoext_obshash')
+def peer_obshash(self, nodes):
+ d = self._call("evoext_obshash", nodes=wireproto.encodelist(nodes))
+ try:
+ return wireproto.decodelist(d)
+ except ValueError:
+ self._abort(error.ResponseError(_("unexpected response:"), d))
+
+@eh.addattr(wireproto.wirepeer, 'evoext_obshash1')
+def peer_obshash1(self, nodes):
+ d = self._call("evoext_obshash1", nodes=wireproto.encodelist(nodes))
+ try:
+ return wireproto.decodelist(d)
+ except ValueError:
+ self._abort(error.ResponseError(_("unexpected response:"), d))
+
+def findcommonobsmarkers(ui, local, remote, probeset,
+ initialsamplesize=100,
+ fullsamplesize=200):
+ # from discovery
+ roundtrips = 0
+ cl = local.changelog
+ dag = dagutil.revlogdag(cl)
+ missing = set()
+ common = set()
+ undecided = set(probeset)
+ _takefullsample = setdiscovery._takefullsample
+ if remote.capable('_evoext_obshash_1'):
+ getremotehash = remote.evoext_obshash1
+ localhash = _obsrelsethashtreefm1(local)
+ else:
+ getremotehash = remote.evoext_obshash
+ localhash = _obsrelsethashtreefm0(local)
+
+ while undecided:
+
+ ui.note(_("sampling from both directions\n"))
+ if len(undecided) < fullsamplesize:
+ sample = set(undecided)
+ else:
+ sample = _takefullsample(dag, undecided, size=fullsamplesize)
+
+ roundtrips += 1
+ ui.debug("query %i; still undecided: %i, sample size is: %i\n"
+ % (roundtrips, len(undecided), len(sample)))
+ # indices between sample and externalized version must match
+ sample = list(sample)
+ remotehash = getremotehash(dag.externalizeall(sample))
+
+ yesno = [localhash[ix][1] == remotehash[si]
+ for si, ix in enumerate(sample)]
+
+ commoninsample = set(n for i, n in enumerate(sample) if yesno[i])
+ common.update(dag.ancestorset(commoninsample, common))
+
+ missinginsample = [n for i, n in enumerate(sample) if not yesno[i]]
+ missing.update(dag.descendantset(missinginsample, missing))
+
+ undecided.difference_update(missing)
+ undecided.difference_update(common)
+
+
+ result = dag.headsetofconnecteds(common)
+ ui.debug("%d total queries\n" % roundtrips)
+
+ if not result:
+ return set([nullid])
+ return dag.externalizeall(result)
_pushkeyescape = getattr(obsolete, '_pushkeyescape', None)
-if _pushkeyescape is None:
- _maxpayload = 5300
- def _pushkeyescape(markers):
- """encode markers into a dict suitable for pushkey exchange
-
- - binary data are base86 encoded
- - splited in chunk less than 5300 bytes"""
- parts = []
- currentlen = _maxpayload * 2 # ensure we create a new part
- for marker in markers:
- nextdata = obsolete._encodeonemarker(marker)
- if (len(nextdata) + currentlen > _maxpayload):
- currentpart = []
- currentlen = 0
- parts.append(currentpart)
- currentpart.append(nextdata)
- currentlen += len(nextdata)
- keys = {}
- for idx, part in enumerate(reversed(parts)):
- data = ''.join([_pack('>B', 0)] + part)
- keys['dump%i' % idx] = base85.b85encode(data)
- return keys
-
-def _encodemarkersstream(fp, markers):
- fp.write(_pack('>B', 0))
- for mark in markers:
- fp.write(obsolete._encodeonemarker(mark))
class pushobsmarkerStringIO(StringIO):
"""hacky string io for progress"""
@@ -2419,7 +2507,7 @@
def length(self):
return len(self.getvalue())
- def read(self, size):
+ def read(self, size=None):
obsexcprg(self.ui, self.tell(), unit="bytes", total=self.length)
return StringIO.read(self, size)
@@ -2429,137 +2517,6 @@
yield d
d = self.read(4096)
-bundle2partsgenerators = getattr(exchange, 'bundle2partsgenerators', None)
-
-
-if bundle2partsgenerators is not None:
-
- def _pushb2phases(pushop, bundler):
- """adds phases update to the main bundle2 push"""
- outgoing = pushop.outgoing
- unfi = pushop.repo.unfiltered()
- remotephases = pushop.remote.listkeys('phases')
- publishing = remotephases.get('publishing', False)
- ana = phases.analyzeremotephases(pushop.repo,
- outgoing.commonheads,
- remotephases)
- pheads, droots = ana
- revset = 'heads((%ln::%ln))'
- if not publishing:
- revset += ' and public()'
- # Get the list of all revs draft on remote by public here.
- # XXX Beware that revset break if droots is not strictly
- # XXX root we may want to ensure it is but it is costly
- fallback = list(unfi.set(revset, droots, outgoing.commonheads))
- if not outgoing.missing:
- future = fallback
- else:
- # adds changeset we are going to push as draft
- #
- # should not be necessary for pushblishing server, but because of
- # an issue fixed in xxxxx we have to do it anyway.
- fdroots = list(unfi.set('roots(%ln + %ln::)', outgoing.missing, droots))
- fdroots = [f.node() for f in fdroots]
- future = list(unfi.set(revset, fdroots, outgoing.missingheads))
-
- b2caps = bundle2.bundle2caps(pushop.remote)
- if 'b2x:pushkey' not in b2caps:
- return
- pushop.stepsdone.add('phases')
- part2node = []
- enc = pushkey.encode
- for newremotehead in future:
- part = bundler.newpart('b2x:pushkey')
- part.addparam('namespace', enc('phases'))
- part.addparam('key', enc(newremotehead.hex()))
- part.addparam('old', enc(str(phases.draft)))
- part.addparam('new', enc(str(phases.public)))
- part2node.append((part.id, newremotehead))
- def handlereply(op):
- for partid, pnode in part2node:
- partrep = op.records.getreplies(partid)
- results = partrep['pushkey']
- assert len(results) <= 1
- msg = None
- if not results:
- msg = _('server ignored update of %s to public!\n') % pnode
- elif not int(results[0]['return']):
- msg = _('updating %s to public failed!\n') % pnode
- if msg is not None:
- pushop.ui.warn(msg)
- return handlereply
-
- def _pushb2obsmarker(pushop, bundler):
- """adds obsmarker to the main bundle2 push"""
- repo = pushop.repo
- remote = pushop.remote
- if ('obsmarkers' not in pushop.stepsdone
- and (obsolete._enabled and repo.obsstore and
- 'obsolete' in remote.listkeys('namespaces'))
- and remote.capable('_evoext_b2x_obsmarkers_0')):
- #
- pushop.stepsdone.add('obsmarkers')
- markers = _obsmarkersdiscovery(pushop)
- if not markers:
- obsexcmsg(repo.ui, "no marker to push\n")
- obsexcmsg(repo.ui, "DONE\n")
- return
- obsdata = pushobsmarkerStringIO()
- _encodemarkersstream(obsdata, markers)
- obsdata.seek(0)
- obsdata.ui = repo.ui
- obsexcmsg(repo.ui, "pushing %i obsolescence markers (%i bytes)\n"
- % (len(markers), len(obsdata.getvalue())),
- True)
- bundler.newpart('EVOLVE:B2X:OBSMARKERV1', data=obsdata)
- def callback(op):
- obsexcprg(repo.ui, None)
- obsexcmsg(repo.ui, "DONE\n")
- return callback
- bundle2partsgenerators.append(_pushb2phases)
- bundle2partsgenerators.append(_pushb2obsmarker)
-
-
-def _obsmarkersdiscovery(pushop):
- """return the list of marker that needs to be pushed to the server
-
- When used before (or at the same time) the changegroup have been pushed, it
- returns the value as if the planned changegroup was succesful. Othewise it
- use te actual common heads to decide whats needs to be pushed.
- """
- repo = pushop.repo
- remote = pushop.remote
- unfi = repo.unfiltered()
- cl = unfi.changelog
- commonheads = pushop.commonheads
- if commonheads is None:
- if pushop.revs is None:
- commonheads = pushop.outgoing.commonheads
- sch = set(commonheads)
- commonheads.extend(h for h in pushop.outgoing.missingheads
- if h not in sch)
- else:
- commonheads = pushop.outgoing.missingheads
- if (obsolete._enabled and repo.obsstore and
- 'obsolete' in remote.listkeys('namespaces')):
- obsexcmsg(repo.ui, "computing relevant nodes\n")
- revs = unfi.revs('::%ln', commonheads)
- common = []
- if remote.capable('_evoext_obshash_0'):
- obsexcmsg(repo.ui, "looking for common markers in %i nodes\n"
- % len(revs))
- common = findcommonobsmarkers(pushop.ui, unfi, remote, revs)
- revs = list(unfi.revs('%ld - (::%ln)', revs, common))
- nodes = [cl.node(r) for r in revs]
- if nodes:
- obsexcmsg(repo.ui, "computing markers relevant to %i nodes\n"
- % len(nodes))
- markers = repo.obsstore.relevantmarkers(nodes)
- else:
- obsexcmsg(repo.ui, "markers already in sync\n")
- markers = []
- return markers
-
@eh.wrapfunction(exchange, '_pushobsolete')
def _pushobsolete(orig, pushop):
"""utility function to push obsolete markers to a remote"""
@@ -2568,42 +2525,24 @@
if 'obsmarkers' in stepsdone:
return
stepsdone.add('obsmarkers')
+ if util.safehasattr(pushop, 'cgresult'):
+ cgresult = pushop.cgresult
+ else:
+ cgresult = pushop.ret
+ if cgresult == 0:
+ return
pushop.ui.debug('try to push obsolete markers to remote\n')
repo = pushop.repo
remote = pushop.remote
- unfi = repo.unfiltered()
- cl = unfi.changelog
- if (obsolete._enabled and repo.obsstore and
+ if (obsolete._enabled and repo.obsstore and
'obsolete' in remote.listkeys('namespaces')):
- markers = _obsmarkersdiscovery(pushop)
+ markers = pushop.outobsmarkers
if not markers:
obsexcmsg(repo.ui, "no marker to push\n")
- elif remote.capable('_evoext_b2x_obsmarkers_0'):
- obsdata = pushobsmarkerStringIO()
- _encodemarkersstream(obsdata, markers)
- obsdata.seek(0)
- obsdata.ui = repo.ui
- obsexcmsg(repo.ui, "pushing %i obsolescence markers (%i bytes)\n"
- % (len(markers), len(obsdata.getvalue())),
- True)
- bundler = bundle2.bundle20(pushop.ui, {})
- capsblob = bundle2.encodecaps(pushop.repo.bundle2caps)
- bundler.addpart(bundle2.bundlepart('b2x:replycaps', data=capsblob))
- cgpart = bundle2.bundlepart('EVOLVE:B2X:OBSMARKERV1', data=obsdata)
- bundler.addpart(cgpart)
- stream = util.chunkbuffer(bundler.getchunks())
- try:
- reply = pushop.remote.unbundle(stream, ['force'], 'push')
- except bundle2.UnknownPartError, exc:
- raise util.Abort('missing support for %s' % exc)
- try:
- op = bundle2.processbundle(pushop.repo, reply)
- except bundle2.UnknownPartError, exc:
- raise util.Abort('missing support for %s' % exc)
- obsexcprg(repo.ui, None)
elif remote.capable('_evoext_pushobsmarkers_0'):
obsdata = pushobsmarkerStringIO()
- _encodemarkersstream(obsdata, markers)
+ for chunk in obsolete.encodemarkers(markers, True):
+ obsdata.write(chunk)
obsdata.seek(0)
obsdata.ui = repo.ui
obsexcmsg(repo.ui, "pushing %i obsolescence markers (%i bytes)\n"
@@ -2649,12 +2588,41 @@
(Cannot simply use _callpush as http is doing some special handling)"""
self.requirecap('_evoext_pushobsmarkers_0',
_('push obsolete markers faster'))
- ret, output = self._call('evoext_pushobsmarkers_0', data=obsfile)
- for l in output.splitlines(True):
- if l.strip():
- self.ui.status(_('remote: '), l)
- return ret
-
+ try:
+ r = self._call('evoext_pushobsmarkers_0', data=obsfile)
+ vals = r.split('\n', 1)
+ if len(vals) < 2:
+ raise error.ResponseError(_("unexpected response:"), r)
+
+ for l in vals[1].splitlines(True):
+ if l.strip():
+ self.ui.status(_('remote: '), l)
+ return vals[0]
+ except socket.error, err:
+ if err.args[0] in (errno.ECONNRESET, errno.EPIPE):
+ raise util.Abort(_('push failed: %s') % err.args[1])
+ raise util.Abort(err.args[1])
+
+@eh.wrapfunction(localrepo.localrepository, '_restrictcapabilities')
+def local_pushobsmarker_capabilities(orig, repo, caps):
+ caps = orig(repo, caps)
+ caps.add('_evoext_pushobsmarkers_0')
+ return caps
+
+@eh.addattr(localrepo.localpeer, 'evoext_pushobsmarkers_0')
+def local_pushobsmarkers(peer, obsfile):
+ data = obsfile.read()
+ tr = lock = None
+ try:
+ lock = peer._repo.lock()
+ tr = peer._repo.transaction('pushkey: obsolete markers')
+ new = peer._repo.obsstore.mergemarkers(tr, data)
+ if new is not None:
+ obsexcmsg(peer._repo.ui, "%i obsolescence markers added\n" % new, True)
+ tr.close()
+ finally:
+ lockmod.release(tr, lock)
+ peer._repo.hook('evolve_pushobsmarkers')
def srv_pushobsmarkers(repo, proto):
"""wireprotocol command"""
@@ -2663,56 +2631,28 @@
proto.getfile(fp)
data = fp.getvalue()
fp.close()
- lock = repo.lock()
+ tr = lock = None
try:
+ lock = repo.lock()
tr = repo.transaction('pushkey: obsolete markers')
- try:
- repo.obsstore.mergemarkers(tr, data)
- tr.close()
- finally:
- tr.release()
+ new = repo.obsstore.mergemarkers(tr, data)
+ if new is not None:
+ obsexcmsg(repo.ui, "%i obsolescence markers added\n" % new, True)
+ tr.close()
finally:
- lock.release()
+ lockmod.release(tr, lock)
repo.hook('evolve_pushobsmarkers')
return wireproto.pushres(0)
-@bundle2.parthandler('evolve:b2x:obsmarkerv1')
-def handleobsmarkerv1(op, inpart):
- """add a stream of obsmarker to the repo"""
- tr = op.gettransaction()
- advparams = dict(inpart.advisoryparams)
- length = advparams.get('totalbytes')
- if length is None:
- obsdata = inpart.read()
- else:
- length = int(length)
- data = StringIO()
- current = 0
- obsexcprg(op.repo.ui, current, unit="bytes", total=length)
- while current < length:
- readsize = min(length-current, 4096)
- data.write(inpart.read(readsize))
- current += readsize
- obsexcprg(op.repo.ui, current, unit="bytes", total=length)
- obsexcprg(op.repo.ui, None)
- obsdata = data.getvalue()
- totalsize = len(obsdata)
- old = len(op.repo.obsstore._all)
- op.repo.obsstore.mergemarkers(tr, obsdata)
- new = len(op.repo.obsstore._all) - old
- op.records.add('evo_obsmarkers', {'new': new, 'bytes': totalsize})
- tr.hookargs['evolve_new_obsmarkers'] = str(new)
-
-def _buildpullobsmerkersboundaries(pullop):
+def _buildpullobsmarkersboundaries(pullop):
"""small funtion returning the argument for pull markers call
may to contains 'heads' and 'common'. skip the key for None.
Its a separed functio to play around with strategy for that."""
repo = pullop.repo
- cl = pullop.repo.changelog
remote = pullop.remote
unfi = repo.unfiltered()
- revs = unfi.revs('::%ln', pullop.pulledsubset)
+ revs = unfi.revs('::(%ln - null)', pullop.common)
common = [nullid]
if remote.capable('_evoext_obshash_0'):
obsexcmsg(repo.ui, "looking for common markers in %i nodes\n"
@@ -2722,46 +2662,59 @@
@eh.uisetup
def addgetbundleargs(self):
- if gboptsmap is not None:
- gboptsmap['evo_obsmarker'] = 'plain'
- gboptsmap['evo_obscommon'] = 'plain'
- gboptsmap['evo_obsheads'] = 'plain'
- else:
- gboptslist.append('evo_obsheads')
- gboptslist.append('evo_obscommon')
- gboptslist.append('evo_obsmarker')
-
-
-
-@eh.wrapfunction(exchange, '_getbundleextrapart')
-def _getbundleextrapart(orig, bundler, repo, source, **kwargs):
- if int(kwargs.pop('evo_obsmarker', False)):
- common = kwargs.pop('evo_obscommon')
- common = wireproto.decodelist(common)
- heads = kwargs.pop('evo_obsheads')
- heads = wireproto.decodelist(heads)
- obsdata = _getobsmarkersstream(repo, common=common, heads=heads)
- if len(obsdata.getvalue()) > 5:
- advparams = [('totalbytes', str(len(obsdata.getvalue())))]
- obspart = bundle2.bundlepart('EVOLVE:B2X:OBSMARKERV1',
- advisoryparams=advparams,
- data=obsdata)
- bundler.addpart(obspart)
- orig(bundler, repo, source)
+ gboptsmap['evo_obscommon'] = 'nodes'
+
+@eh.wrapfunction(exchange, '_pullbundle2extraprepare')
+def _addobscommontob2pull(orig, pullop, kwargs):
+ ret = orig(pullop, kwargs)
+ if 'obsmarkers' in kwargs and pullop.remote.capable('_evoext_getbundle_obscommon'):
+ boundaries = _buildpullobsmarkersboundaries(pullop)
+ common = boundaries['common']
+ if common != [nullid]:
+ kwargs['evo_obscommon'] = common
+ return ret
+
+if getattr(exchange, '_getbundleobsmarkerpart', None) is not None:
+ @eh.wrapfunction(exchange, '_getbundleobsmarkerpart')
+ def _getbundleobsmarkerpart(orig, bundler, repo, source, **kwargs):
+ if 'evo_obscommon' not in kwargs:
+ return orig(bundler, repo, source, **kwargs)
+
+ heads = kwargs.get('heads')
+ if kwargs.get('obsmarkers', False):
+ if heads is None:
+ heads = repo.heads()
+ obscommon = kwargs.get('evo_obscommon', ())
+ assert obscommon
+ obsset = repo.unfiltered().set('::%ln - ::%ln', heads, obscommon)
+ subset = [c.node() for c in obsset]
+ markers = repo.obsstore.relevantmarkers(subset)
+ exchange.buildobsmarkerspart(bundler, markers)
+
+ @eh.uisetup
+ def installgetbundlepartgen(ui):
+ origfunc = exchange.getbundle2partsmapping['obsmarkers']
+ def newfunc(*args, **kwargs):
+ return _getbundleobsmarkerpart(origfunc, *args, **kwargs)
+ exchange.getbundle2partsmapping['obsmarkers'] = newfunc
+
@eh.wrapfunction(exchange, '_pullobsolete')
def _pullobsolete(orig, pullop):
if not obsolete._enabled:
return None
- b2xpull = pullop.remote.capable('_evoext_b2x_obsmarkers_0')
+ if 'obsmarkers' not in getattr(pullop, 'todosteps', ['obsmarkers']):
+ return None
+ if 'obsmarkers' in getattr(pullop, 'stepsdone', []):
+ return None
wirepull = pullop.remote.capable('_evoext_pullobsmarkers_0')
- if not (b2xpull or wirepull):
+ if not wirepull:
return orig(pullop)
if 'obsolete' not in pullop.remote.listkeys('namespaces'):
return None # remote opted out of obsolescence marker exchange
tr = None
ui = pullop.repo.ui
- boundaries = _buildpullobsmerkersboundaries(pullop)
+ boundaries = _buildpullobsmarkersboundaries(pullop)
if not set(boundaries['heads']) - set(boundaries['common']):
obsexcmsg(ui, "nothing to pull\n")
return None
@@ -2769,33 +2722,7 @@
obsexcmsg(ui, "pull obsolescence markers\n", True)
new = 0
- if b2xpull:
- kwargs = {'bundlecaps': set(['HG2X'])}
- capsblob = bundle2.encodecaps(pullop.repo.bundle2caps)
- kwargs['bundlecaps'].add('bundle2=' + urllib.quote(capsblob))
- kwargs['heads'] = [nullid]
- kwargs['common'] = [nullid]
- kwargs['evo_obsmarker'] = '1'
- kwargs['evo_obscommon'] = wireproto.encodelist(boundaries['common'])
- kwargs['evo_obsheads'] = wireproto.encodelist(boundaries['heads'])
- bundle = pullop.remote.getbundle('pull', **kwargs)
- try:
- op = bundle2.processbundle(pullop.repo, bundle, pullop.gettransaction)
- except bundle2.UnknownPartError, exc:
- raise util.Abort('missing support for %s' % exc)
- bytes = new = 0
- for entry in op.records['evo_obsmarkers']:
- bytes += entry.get('bytes', 0)
- new += entry.get('new', 0)
- if 5 < bytes:
- obsexcmsg(ui, "merging obsolescence markers (%i bytes)\n"
- % bytes)
- obsexcmsg(ui, "%i obsolescence markers added\n" % new, True)
- tr = op.gettransaction()
- else:
- obsexcmsg(ui, "no unknown remote markers\n")
- obsexcmsg(ui, "DONE\n")
- elif wirepull:
+ if wirepull:
obsdata = pullop.remote.evoext_pullobsmarkers_0(**boundaries)
obsdata = obsdata.read()
if len(obsdata) > 5:
@@ -2830,7 +2757,8 @@
nodes = [c.node() for c in repo.set(revset, *args)]
markers = repo.obsstore.relevantmarkers(nodes)
obsdata = StringIO()
- _encodemarkersstream(obsdata, markers)
+ for chunk in obsolete.encodemarkers(markers, True):
+ obsdata.write(chunk)
obsdata.seek(0)
return obsdata
@@ -2879,9 +2807,16 @@
finaldata.seek(0)
return wireproto.streamres(proto.groupchunks(finaldata))
-def _obsrelsethashtree(repo):
+def _obsrelsethashtreefm0(repo):
+ return _obsrelsethashtree(repo, obsolete._fm0encodeonemarker)
+
+def _obsrelsethashtreefm1(repo):
+ return _obsrelsethashtree(repo, obsolete._fm1encodeonemarker)
+
+def _obsrelsethashtree(repo, encodeonemarker):
cache = []
unfi = repo.unfiltered()
+ markercache = {}
for i in unfi:
ctx = unfi[i]
entry = 0
@@ -2898,7 +2833,11 @@
sha.update(p)
tmarkers = repo.obsstore.relevantmarkers([ctx.node()])
if tmarkers:
- bmarkers = [obsolete._encodeonemarker(m) for m in tmarkers]
+ bmarkers = []
+ for m in tmarkers:
+ if not m in markercache:
+ markercache[m] = encodeonemarker(m)
+ bmarkers.append(markercache[m])
bmarkers.sort()
for m in bmarkers:
entry += 1
@@ -2910,87 +2849,72 @@
return cache
@command('debugobsrelsethashtree',
- [] , _(''))
-def debugobsrelsethashtree(ui, repo):
+ [('', 'v0', None, 'hash on marker format "0"'),
+ ('', 'v1', None, 'hash on marker format "1" (default)')
+ ,] , _(''))
+def debugobsrelsethashtree(ui, repo, v0=False, v1=False):
"""display Obsolete markers, Relevant Set, Hash Tree
changeset-node obsrelsethashtree-node
It computed form the "orsht" of its parent and markers
relevant to the changeset itself."""
- for chg, obs in _obsrelsethashtree(repo):
+ if v0 and v1:
+ raise util.Abort('cannot only specify one format')
+ elif v0:
+ treefunc = _obsrelsethashtreefm0
+ else:
+ treefunc = _obsrelsethashtreefm1
+
+ for chg, obs in treefunc(repo):
ui.status('%s %s\n' % (node.hex(chg), node.hex(obs)))
-
-### Set discovery START
-
-import random
-from mercurial import dagutil
-from mercurial import setdiscovery
-
-def _obshash(repo, nodes):
- hashs = _obsrelsethashtree(repo)
- nm = repo.changelog.nodemap
- return [hashs[nm.get(n)][1] for n in nodes]
-
-def srv_obshash(repo, proto, nodes):
- return wireproto.encodelist(_obshash(repo, wireproto.decodelist(nodes)))
-
-@eh.addattr(localrepo.localpeer, 'evoext_obshash')
-def local_obshash(peer, nodes):
- return _obshash(peer._repo, nodes)
-
-@eh.addattr(wireproto.wirepeer, 'evoext_obshash')
-def peer_obshash(self, nodes):
- d = self._call("evoext_obshash", nodes=wireproto.encodelist(nodes))
- try:
- return wireproto.decodelist(d)
- except ValueError:
- self._abort(error.ResponseError(_("unexpected response:"), d))
-
-def findcommonobsmarkers(ui, local, remote, probeset,
- initialsamplesize=100,
- fullsamplesize=200):
- # from discovery
- roundtrips = 0
- cl = local.changelog
- dag = dagutil.revlogdag(cl)
- localhash = _obsrelsethashtree(local)
- missing = set()
- common = set()
- undecided = set(probeset)
- _takefullsample = setdiscovery._takefullsample
-
- while undecided:
-
- ui.note(_("sampling from both directions\n"))
- sample = _takefullsample(dag, undecided, size=fullsamplesize)
-
- roundtrips += 1
- ui.debug("query %i; still undecided: %i, sample size is: %i\n"
- % (roundtrips, len(undecided), len(sample)))
- # indices between sample and externalized version must match
- sample = list(sample)
- remotehash = remote.evoext_obshash(dag.externalizeall(sample))
-
- yesno = [localhash[ix][1] == remotehash[si]
- for si, ix in enumerate(sample)]
-
- commoninsample = set(n for i, n in enumerate(sample) if yesno[i])
- common.update(dag.ancestorset(commoninsample, common))
-
- missinginsample = [n for i, n in enumerate(sample) if not yesno[i]]
- missing.update(dag.descendantset(missinginsample, missing))
-
- undecided.difference_update(missing)
- undecided.difference_update(common)
-
-
- result = dag.headsetofconnecteds(common)
- ui.debug("%d total queries\n" % roundtrips)
-
- if not result:
- return set([nullid])
- return dag.externalizeall(result)
+_bestformat = max(obsolete.formats.keys())
+
+
+if getattr(obsolete, '_checkinvalidmarkers', None) is not None:
+ @eh.wrapfunction(obsolete, '_checkinvalidmarkers')
+ def _checkinvalidmarkers(orig, markers):
+ """search for marker with invalid data and raise error if needed
+
+ Exist as a separated function to allow the evolve extension for a more
+ subtle handling.
+ """
+ if 'debugobsconvert' in sys.argv:
+ return
+ for mark in markers:
+ if node.nullid in mark[1]:
+ raise util.Abort(_('bad obsolescence marker detected: '
+ 'invalid successors nullid'),
+ hint=_('You should run `hg debugobsconvert`'))
+
+@command(
+ 'debugobsconvert',
+ [('', 'new-format', _bestformat, _('Destination format for markers.'))],
+ '')
+def debugobsconvert(ui, repo, new_format):
+ if new_format == repo.obsstore._version:
+ msg = _('New format is the same as the old format, not upgrading!')
+ raise util.Abort(msg)
+ f = repo.sopener('obsstore', 'wb', atomictemp=True)
+ origmarkers = repo.obsstore._all
+ known = set()
+ markers = []
+ for m in origmarkers:
+ # filter out invalid markers
+ if nullid in m[1]:
+ m = list(m)
+ m[1] = tuple(s for s in m[1] if s != nullid)
+ m = tuple(m)
+ if m in known:
+ continue
+ known.add(m)
+ markers.append(m)
+ ui.write(_('Old store is version %d, will rewrite in version %d\n') % (
+ repo.obsstore._version, new_format))
+ map(f.write, obsolete.encodemarkers(markers, True, new_format))
+ f.close()
+ ui.write(_('Done!\n'))
+
@eh.wrapfunction(wireproto, 'capabilities')
def capabilities(orig, repo, proto):
@@ -3000,17 +2924,16 @@
caps += ' _evoext_pushobsmarkers_0'
caps += ' _evoext_pullobsmarkers_0'
caps += ' _evoext_obshash_0'
- caps += ' _evoext_b2x_obsmarkers_0'
+ caps += ' _evoext_obshash_1'
+ caps += ' _evoext_getbundle_obscommon'
return caps
@eh.extsetup
def _installwireprotocol(ui):
localrepo.moderncaps.add('_evoext_pullobsmarkers_0')
- localrepo.moderncaps.add('_evoext_b2x_obsmarkers_0')
hgweb_mod.perms['evoext_pushobsmarkers_0'] = 'push'
hgweb_mod.perms['evoext_pullobsmarkers_0'] = 'pull'
- hgweb_mod.perms['evoext_obshash'] = 'pull'
wireproto.commands['evoext_pushobsmarkers_0'] = (srv_pushobsmarkers, '')
wireproto.commands['evoext_pullobsmarkers_0'] = (srv_pullobsmarkers, '*')
# wrap command content
@@ -3018,4 +2941,3 @@
def newcap(repo, proto):
return capabilities(oldcap, repo, proto)
wireproto.commands['capabilities'] = (newcap, args)
- wireproto.commands['evoext_obshash'] = (srv_obshash, 'nodes')
--- a/hgext/simple4server.py Tue Jun 23 16:49:24 2015 -0700
+++ b/hgext/simple4server.py Tue Jun 23 16:50:06 2015 -0700
@@ -8,8 +8,8 @@
For client side usages it is recommended to use the evolve extension for
improved user interface.'''
-testedwith = '3.0.1'
-buglink = 'https://bitbucket.org/marmoute/mutable-history/issues'
+testedwith = '3.3.3 3.4-rc'
+buglink = 'http://bz.selenic.com/'
import mercurial.obsolete
mercurial.obsolete._enabled = True
@@ -25,6 +25,7 @@
from mercurial import bundle2
from mercurial import localrepo
from mercurial import exchange
+from mercurial import node
_pack = struct.pack
gboptslist = gboptsmap = None
@@ -75,15 +76,6 @@
repo.hook('evolve_pushobsmarkers')
return wireproto.pushres(0)
-# from mercurial.obsolete: 19e9478c1a22
-def _encodemarkersstream(fp, markers):
- """write a binary version of a set of markers
-
- Includes the initial version number"""
- fp.write(_pack('>B', 0))
- for mark in markers:
- fp.write(obsolete._encodeonemarker(mark))
-
# from evolve extension: 1a23c7c52a43
def _getobsmarkersstream(repo, heads=None, common=None):
"""Get a binary stream for all markers relevant to `::<heads> - ::<common>`
@@ -104,7 +96,8 @@
nodes = [c.node() for c in repo.set(revset, *args)]
markers = repo.obsstore.relevantmarkers(nodes)
obsdata = StringIO()
- _encodemarkersstream(obsdata, markers)
+ for chunk in obsolete.encodemarkers(markers, True):
+ obsdata.write(chunk)
obsdata.seek(0)
return obsdata
@@ -185,13 +178,19 @@
return wireproto.streamres(proto.groupchunks(finaldata))
-# from evolve extension: 1a23c7c52a43
-def _obsrelsethashtree(repo):
- """Build an obshash for every node in a repo
+# from evolve extension: 3249814dabd1
+def _obsrelsethashtreefm0(repo):
+ return _obsrelsethashtree(repo, obsolete._fm0encodeonemarker)
- return a [(node), (obshash)] list. in revision order."""
+# from evolve extension: 3249814dabd1
+def _obsrelsethashtreefm1(repo):
+ return _obsrelsethashtree(repo, obsolete._fm1encodeonemarker)
+
+# from evolve extension: 3249814dabd1
+def _obsrelsethashtree(repo, encodeonemarker):
cache = []
unfi = repo.unfiltered()
+ markercache = {}
for i in unfi:
ctx = unfi[i]
entry = 0
@@ -208,7 +207,11 @@
sha.update(p)
tmarkers = repo.obsstore.relevantmarkers([ctx.node()])
if tmarkers:
- bmarkers = [obsolete._encodeonemarker(m) for m in tmarkers]
+ bmarkers = []
+ for m in tmarkers:
+ if not m in markercache:
+ markercache[m] = encodeonemarker(m)
+ bmarkers.append(markercache[m])
bmarkers.sort()
for m in bmarkers:
entry += 1
@@ -219,23 +222,27 @@
cache.append((ctx.node(), node.nullid))
return cache
-# from evolve extension: 1a23c7c52a43
-def _obshash(repo, nodes):
- """hash of binary version of relevant markers + obsparent
-
- (special case so that all empty are hashed as nullid)"""
- hashs = _obsrelsethashtree(repo)
+# from evolve extension: 3249814dabd1
+def _obshash(repo, nodes, version=0):
+ if version == 0:
+ hashs = _obsrelsethashtreefm0(repo)
+ elif version ==1:
+ hashs = _obsrelsethashtreefm1(repo)
+ else:
+ assert False
nm = repo.changelog.nodemap
- return [hashs[nm.get(n)][1] for n in nodes]
+ revs = [nm.get(n) for n in nodes]
+ return [r is None and node.nullid or hashs[r][1] for r in revs]
-# from evolve extension: 1a23c7c52a43
+# from evolve extension: 3249814dabd1
def srv_obshash(repo, proto, nodes):
- """give the obshash of a a set of node
-
- Used for markes discovery"""
return wireproto.encodelist(_obshash(repo, wireproto.decodelist(nodes)))
-# from evolve extension: 1a23c7c52a43
+# from evolve extension: 3249814dabd1
+def srv_obshash1(repo, proto, nodes):
+ return wireproto.encodelist(_obshash(repo, wireproto.decodelist(nodes), version=1))
+
+# from evolve extension: 3249814dabd1
def capabilities(orig, repo, proto):
"""wrapper to advertise new capability"""
caps = orig(repo, proto)
@@ -244,22 +251,32 @@
caps += ' _evoext_pushobsmarkers_0'
caps += ' _evoext_pullobsmarkers_0'
caps += ' _evoext_obshash_0'
- caps += ' _evoext_b2x_obsmarkers_0'
+ caps += ' _evoext_obshash_1'
+ caps += ' _evoext_getbundle_obscommon'
return caps
+def _getbundleobsmarkerpart(orig, bundler, repo, source, **kwargs):
+ if 'evo_obscommon' not in kwargs:
+ return orig(bundler, repo, source, **kwargs)
+
+ heads = kwargs.get('heads')
+ if 'evo_obscommon' not in kwargs:
+ return orig(bundler, repo, source, **kwargs)
+
+ if kwargs.get('obsmarkers', False):
+ if heads is None:
+ heads = repo.heads()
+ obscommon = kwargs.get('evo_obscommon', ())
+ obsset = repo.set('::%ln - ::%ln', heads, obscommon)
+ subset = [c.node() for c in obsset]
+ markers = repo.obsstore.relevantmarkers(subset)
+ exchange.buildobsmarkerspart(bundler, markers)
# from evolve extension: 10867a8e27c6
# heavily modified
def extsetup(ui):
localrepo.moderncaps.add('_evoext_b2x_obsmarkers_0')
- if gboptsmap is not None:
- gboptsmap['evo_obsmarker'] = 'plain'
- gboptsmap['evo_obscommon'] = 'plain'
- gboptsmap['evo_obsheads'] = 'plain'
- else:
- gboptslist.append('evo_obsheads')
- gboptslist.append('evo_obscommon')
- gboptslist.append('evo_obsmarker')
+ gboptsmap['evo_obscommon'] = 'nodes'
if not util.safehasattr(obsolete.obsstore, 'relevantmarkers'):
obsolete.obsstore = pruneobsstore
obsolete.obsstore.relevantmarkers = relevantmarkers
@@ -269,7 +286,10 @@
wireproto.commands['evoext_pushobsmarkers_0'] = (srv_pushobsmarkers, '')
wireproto.commands['evoext_pullobsmarkers_0'] = (srv_pullobsmarkers, '*')
# wrap module content
- extensions.wrapfunction(exchange, '_getbundleextrapart', _getbundleextrapart)
+ origfunc = exchange.getbundle2partsmapping['obsmarkers']
+ def newfunc(*args, **kwargs):
+ return _getbundleobsmarkerpart(origfunc, *args, **kwargs)
+ exchange.getbundle2partsmapping['obsmarkers'] = newfunc
extensions.wrapfunction(wireproto, 'capabilities', capabilities)
# wrap command content
oldcap, args = wireproto.commands['capabilities']
@@ -277,51 +297,8 @@
return capabilities(oldcap, repo, proto)
wireproto.commands['capabilities'] = (newcap, args)
wireproto.commands['evoext_obshash'] = (srv_obshash, 'nodes')
+ wireproto.commands['evoext_obshash1'] = (srv_obshash1, 'nodes')
# specific simple4server content
extensions.wrapfunction(pushkey, '_nslist', _nslist)
pushkey._namespaces['namespaces'] = (lambda *x: False, pushkey._nslist)
-
-#from evolve extension
-@bundle2.parthandler('evolve:b2x:obsmarkerv1')
-def handleobsmarkerv1(op, inpart):
- """add a stream of obsmarker to the repo"""
- tr = op.gettransaction()
- advparams = dict(inpart.advisoryparams)
- length = advparams.get('totalbytes')
- if length is None:
- obsdata = inpart.read()
- else:
- length = int(length)
- data = StringIO()
- current = 0
- op.ui.progress('OBSEXC', current, unit="bytes", total=length)
- while current < length:
- readsize = min(length-current, 4096)
- data.write(inpart.read(readsize))
- current += readsize
- op.ui.progress('OBSEXC', current, unit="bytes", total=length)
- op.ui.progress('OBSEXC', None)
- obsdata = data.getvalue()
- totalsize = len(obsdata)
- old = len(op.repo.obsstore._all)
- op.repo.obsstore.mergemarkers(tr, obsdata)
- new = len(op.repo.obsstore._all) - old
- op.records.add('evo_obsmarkers', {'new': new, 'bytes': totalsize})
- tr.hookargs['evolve_new_obsmarkers'] = str(new)
-
-#from evolve extension
-def _getbundleextrapart(orig, bundler, repo, source, **kwargs):
- if int(kwargs.pop('evo_obsmarker', False)):
- common = kwargs.pop('evo_obscommon')
- common = wireproto.decodelist(common)
- heads = kwargs.pop('evo_obsheads')
- heads = wireproto.decodelist(heads)
- obsdata = _getobsmarkersstream(repo, common=common, heads=heads)
- if len(obsdata.getvalue()) > 5:
- advparams = [('totalbytes', str(len(obsdata.getvalue())))]
- obspart = bundle2.bundlepart('EVOLVE:B2X:OBSMARKERV1',
- advisoryparams=advparams,
- data=obsdata)
- bundler.addpart(obspart)
- orig(bundler, repo, source)
--- a/setup.py Tue Jun 23 16:49:24 2015 -0700
+++ b/setup.py Tue Jun 23 16:50:06 2015 -0700
@@ -2,10 +2,21 @@
# Credit to Augie Fackler <durin42@gmail.com>
from distutils.core import setup
+from os.path import dirname, join
+
+def get_version(relpath):
+ '''Read version info from a file without importing it'''
+ for line in open(join(dirname(__file__), relpath), 'rb'):
+ # Decode to a fail-safe string for PY3
+ # (gives unicode object in PY2)
+ line = line.decode('utf8')
+ if '__version__' in line:
+ if "'" in line:
+ return line.split("'")[1]
setup(
name='hg-evolve',
- version='4.0.0',
+ version=get_version('hgext/evolve.py'),
author='Pierre-Yves David',
maintainer='Pierre-Yves David',
maintainer_email='pierre-yves.david@ens-lyon.org',
--- a/tests/_exc-util.sh Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/_exc-util.sh Tue Jun 23 16:50:06 2015 -0700
@@ -12,14 +12,15 @@
publish=False
[experimental]
-verbose-obsolescence-exchange=true
+verbose-obsolescence-exchange=false
+bundle2-exp=true
+bundle2-output-capture=True
[alias]
debugobsolete=debugobsolete -d '0 0'
[extensions]
hgext.strip=
-hgext.rebase=
EOF
echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
--- a/tests/test-amend.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-amend.t Tue Jun 23 16:50:06 2015 -0700
@@ -1,6 +1,5 @@
$ cat >> $HGRCPATH <<EOF
> [extensions]
- > hgext.rebase=
> hgext.graphlog=
> EOF
$ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
@@ -97,3 +96,65 @@
$ HGUSER=newbie hg amend -U
$ hg parents --template '{rev} {author}\n'
7 newbie
+
+Check that --logfile works
+ $ echo "logfile message" > logfile.txt
+ $ hg amend -l logfile.txt
+ $ hg log -r . -T "{desc}\n"
+ logfile message
+
+# Make sure we don't get reparented to -1 with no username (issue4211)
+ $ HGUSER=
+ $ hg amend -e --config ui.username= -m "empty user"
+ abort: no username supplied
+ (use "hg config --edit" to set your username)
+ [255]
+ $ hg sum
+ parent: 8:* tip (glob)
+ logfile message
+ branch: foo
+ commit: 1 unknown (clean)
+ update: (current)
+
+Check the help
+ $ hg amend -h
+ hg amend [OPTION]... [FILE]...
+
+ aliases: refresh
+
+ combine a changeset with updates and replace it with a new one
+
+ Commits a new changeset incorporating both the changes to the given files
+ and all the changes from the current parent changeset into the repository.
+
+ See "hg commit" for details about committing changes.
+
+ If you don't specify -m, the parent's message will be reused.
+
+ Behind the scenes, Mercurial first commits the update as a regular child
+ of the current parent. Then it creates a new commit on the parent's
+ parents with the updated contents. Then it changes the working copy parent
+ to this new combined changeset. Finally, the old changeset and its update
+ are hidden from "hg log" (unless you use --hidden with log).
+
+ Returns 0 on success, 1 if nothing changed.
+
+ options ([+] can be repeated):
+
+ -A --addremove mark new/missing files as added/removed before
+ committing
+ -e --edit invoke editor on commit messages
+ --close-branch mark a branch as closed, hiding it from the branch
+ list
+ -s --secret use the secret phase for committing
+ -I --include PATTERN [+] include names matching the given patterns
+ -X --exclude PATTERN [+] exclude names matching the given patterns
+ -m --message TEXT use text as commit message
+ -l --logfile FILE read commit message from file
+ -d --date DATE record the specified date as commit date
+ -u --user USER record the specified user as committer
+ -D --current-date record the current date as commit date
+ -U --current-user record the current user as committer
+ -i --interactive use interactive mode
+
+ (some details hidden, use --verbose to show complete help)
--- a/tests/test-corrupt.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-corrupt.t Tue Jun 23 16:50:06 2015 -0700
@@ -13,7 +13,6 @@
> git = 1
> unified = 0
> [extensions]
- > hgext.rebase=
> hgext.graphlog=
> EOF
$ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
@@ -111,7 +110,8 @@
adding manifests
adding file changes
added 1 changesets with 2 changes to 2 files
- pushing 2 obsolescence markers (147 bytes)
+ pushing 2 obsolescence markers (* bytes) (glob)
+ 2 obsolescence markers added
$ hg -R ../other verify
checking changesets
checking manifests
--- a/tests/test-drop.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-drop.t Tue Jun 23 16:50:06 2015 -0700
@@ -1,7 +1,6 @@
$ cat >> $HGRCPATH <<EOF
> [extensions]
- > hgext.rebase=
> hgext.graphlog=
> EOF
$ echo "drophack=$(echo $(dirname $TESTDIR))/hgext/drophack.py" >> $HGRCPATH
@@ -63,7 +62,7 @@
0 obsmarkers found
search nodes: wall * comb * user * sys * (glob)
1 nodes found
- saved backup bundle to $TESTTMP/repo/.hg/strip-backup/d4e7845543ff-drophack.hg (glob)
+ saved backup bundle to $TESTTMP/repo/.hg/strip-backup/d4e7845543ff-8ad8efe0-drophack.hg (glob)
strip nodes: wall * comb * user * sys * (glob)
$ summary
============ graph ==============
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-evolve-bumped.t Tue Jun 23 16:50:06 2015 -0700
@@ -0,0 +1,82 @@
+ $ hg init public
+ $ cd public
+ $ echo a > a
+ $ hg commit -A -m init
+ adding a
+ $ cd ..
+
+ $ evolvepath=$(echo $(dirname $TESTDIR))/hgext/evolve.py
+ $ hg clone -U public private
+ $ cd private
+ $ cat >> .hg/hgrc <<EOF
+ > [extensions]
+ > evolve = $evolvepath
+ > [phases]
+ > publish = false
+ > EOF
+ $ cd ..
+
+ $ cp -a private alice
+ $ cp -a private bob
+
+ $ cd alice
+ $ hg update
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ echo a >> a
+ $ hg commit -u alice -m 'modify a'
+ $ hg push ../private
+ pushing to ../private
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
+ $ hg log -r 'draft()'
+ changeset: 1:4d1169d82e47
+ tag: tip
+ user: alice
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: modify a
+
+
+ $ cd ../bob
+ $ hg pull ../private
+ pulling from ../private
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
+ pull obsolescence markers
+ (run 'hg update' to get a working copy)
+ $ hg log -r 'draft()'
+ changeset: 1:4d1169d82e47
+ tag: tip
+ user: alice
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: modify a
+
+ $ hg push ../public
+ pushing to ../public
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
+ $ hg log -r 'draft()'
+
+ $ cd ../alice
+ $ hg amend -m 'tweak a'
+ $ hg pull ../public
+ pulling from ../public
+ searching for changes
+ no changes found
+ pull obsolescence markers
+ 1 new bumped changesets
+
+ $ hg evolve -a
+ recreate:[2] tweak a
+ atop:[1] modify a
+ computing new diff
+ committed as 4d1169d82e47
+ working directory is now at 4d1169d82e47
--- a/tests/test-evolve.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-evolve.t Tue Jun 23 16:50:06 2015 -0700
@@ -13,7 +13,6 @@
> git = 1
> unified = 0
> [extensions]
- > hgext.rebase=
> hgext.graphlog=
> EOF
$ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
@@ -103,6 +102,17 @@
working directory now at 7c3bad9141dc
$ hg st
A g
+
+Smoketest debugobsrelsethashtree:
+
+ $ hg debugobsrelsethashtree
+ 1f0dee641bb7258c56bd60e93edfa2405381c41e 0000000000000000000000000000000000000000
+ 7c3bad9141dcb46ff89abf5f61856facd56e476c * (glob)
+ 4538525df7e2b9f09423636c61ef63a4cb872a2d * (glob)
+ 47d2a3944de8b013de3be9578e8e344ea2e6c097 * (glob)
+ fbb94e3a0ecf6d20c2cc31152ef162ce45af982f * (glob)
+ e44648563c73f75950076031c6fdf06629de95f1 * (glob)
+
$ cd ..
##########################
@@ -447,7 +457,7 @@
abort: empty revision set
[255]
$ hg --config extensions.hgext.mq= strip --hidden 'extinct()'
- saved backup bundle to $TESTTMP/alpha/.hg/strip-backup/e87767087a57-backup.hg (glob)
+ saved backup bundle to $TESTTMP/alpha/.hg/strip-backup/e87767087a57-d7bd82e9-backup.hg (glob)
$ hg verify
checking changesets
checking manifests
@@ -497,9 +507,9 @@
o 0:8685c6d34325@default(draft) add 0
$ hg graft -r3 -O
- grafting revision 3
+ grafting 3:0e84df4912da "add 3"
$ hg graft -r1 -o 2
- grafting revision 1
+ grafting 1:73d38bb17fd7 "add 1"
$ glog --hidden
@ 6:acb28cd497b7@default(draft) add 1
|
@@ -527,7 +537,7 @@
created new head
$ hg up -qC 6
$ hg graft -O 7
- grafting revision 7
+ grafting 7:a5bfd90a2f29 "conflict" (tip)
merging 1
warning: conflicts during merge.
merging 1 incomplete! (edit conflicts, then use 'hg resolve --mark')
@@ -540,7 +550,7 @@
$ hg resolve -m 1
(no more unresolved files)
$ hg graft --continue -O
- grafting revision 7
+ grafting 7:a5bfd90a2f29 "conflict" (tip)
$ glog --hidden
@ 8:920e58bb443b@default(draft) conflict
|
@@ -636,7 +646,8 @@
3 changesets folded
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg fold 6 # want to run hg fold 6
- abort: unknown revision '6'!
+ abort: hidden revision '6'!
+ (use --hidden to access hidden revisions)
[255]
$ hg log -r 11 --template '{desc}\n'
add 3
@@ -697,9 +708,7 @@
1 successors: 10
2 successors: 0
more than 2 successors: 0
- average meta length: 27
available keys:
- date: 10
user: 10
disconnected clusters: 1
any known node: 1
@@ -771,3 +780,110 @@
7 - 5c9c8d9c2e4e another feature (child of ba0ec09b1bab) (public)
6 - ba0ec09b1bab a nifty feature (public)
0 - e55e0562ee93 base (public)
+
+ $ cd ..
+
+Test branch preservation:
+===========================
+
+ $ hg init evolving-branch
+ $ cd evolving-branch
+ $ touch a
+ $ hg add a
+ $ hg ci -m 'a0'
+ $ echo 1 > a
+ $ hg ci -m 'a1'
+ $ echo 2 > a
+ $ hg ci -m 'a2'
+ $ echo 3 > a
+ $ hg ci -m 'a3'
+
+ $ hg log -G --template '{rev} [{branch}] {desc|firstline}\n'
+ @ 3 [default] a3
+ |
+ o 2 [default] a2
+ |
+ o 1 [default] a1
+ |
+ o 0 [default] a0
+
+
+branch change propagated
+
+ $ hg up 'desc(a2)'
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg branch mybranch
+ marked working directory as branch mybranch
+ (branches are permanent and global, did you want a bookmark?)
+ $ hg amend
+ 1 new unstable changesets
+
+ $ hg evolve
+ move:[3] a3
+ atop:[5] a2
+ working directory is now at 7c5649f73d11
+
+ $ hg log -G --template '{rev} [{branch}] {desc|firstline}\n'
+ @ 6 [mybranch] a3
+ |
+ o 5 [mybranch] a2
+ |
+ o 1 [default] a1
+ |
+ o 0 [default] a0
+
+
+branch change preserved
+
+ $ hg up 'desc(a1)'
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg amend -m 'a1_'
+ 2 new unstable changesets
+ $ hg evolve
+ move:[5] a2
+ atop:[7] a1_
+ working directory is now at 5406c5cfee42
+ $ hg evolve
+ move:[6] a3
+ atop:[8] a2
+ working directory is now at c7661e655801
+ $ hg log -G --template '{rev} [{branch}] {desc|firstline}\n'
+ @ 9 [mybranch] a3
+ |
+ o 8 [mybranch] a2
+ |
+ o 7 [default] a1_
+ |
+ o 0 [default] a0
+
+
+Evolve from the middle of a stack pick the right changesets.
+
+ $ hg up 7
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg ci --amend -m 'a1__'
+ 2 new unstable changesets
+
+ $ hg up 8
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg evolve
+ nothing to evolve here
+ (2 troubled changesets, do you want --any ?)
+ [2]
+
+
+Evolve disables active bookmarks.
+
+ $ hg up 10
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg bookmark testbookmark
+ $ ls .hg/bookmarks*
+ .hg/bookmarks
+ .hg/bookmarks.* (glob)
+ $ hg evolve
+ move:[8] a2
+ atop:[10] a1__
+ (leaving bookmark testbookmark)
+ working directory is now at f37ed7a60f43
+ $ ls .hg/bookmarks*
+ .hg/bookmarks
--- a/tests/test-exchange-A1.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-exchange-A1.t Tue Jun 23 16:50:06 2015 -0700
@@ -68,14 +68,11 @@
## pushing "A" from main to pushdest
pushing to pushdest
searching for changes
- adding changesets
- adding manifests
- adding file changes
- added 1 changesets with 1 changes to 1 files
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 2 nodes
- OBSEXC: pushing 1 obsolescence markers (65 bytes)
- OBSEXC: DONE
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 1 changesets with 1 changes to 1 files
+ remote: 1 new obsolescence markers
## post push state
# obstore: main
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -89,10 +86,7 @@
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
- OBSEXC: pull obsolescence markers
- OBSEXC: merging obsolescence markers (65 bytes)
- OBSEXC: 1 obsolescence markers added
- OBSEXC: DONE
+ 1 new obsolescence markers
(run 'hg update' to get a working copy)
## post pull state
# obstore: main
@@ -118,14 +112,11 @@
## pushing from main to pushdest
pushing to pushdest
searching for changes
- adding changesets
- adding manifests
- adding file changes
- added 1 changesets with 1 changes to 1 files
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 2 nodes
- OBSEXC: pushing 1 obsolescence markers (65 bytes)
- OBSEXC: DONE
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 1 changesets with 1 changes to 1 files
+ remote: 1 new obsolescence markers
## post push state
# obstore: main
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -139,10 +130,7 @@
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
- OBSEXC: pull obsolescence markers
- OBSEXC: merging obsolescence markers (65 bytes)
- OBSEXC: 1 obsolescence markers added
- OBSEXC: DONE
+ 1 new obsolescence markers
(run 'hg update' to get a working copy)
## post pull state
# obstore: main
@@ -227,14 +215,11 @@
## pushing "B" from main to pushdest
pushing to pushdest
searching for changes
- adding changesets
- adding manifests
- adding file changes
- added 2 changesets with 2 changes to 2 files
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 3 nodes
- OBSEXC: pushing 1 obsolescence markers (65 bytes)
- OBSEXC: DONE
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 2 changesets with 2 changes to 2 files
+ remote: 1 new obsolescence markers
## post push state
# obstore: main
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -248,10 +233,7 @@
adding manifests
adding file changes
added 2 changesets with 2 changes to 2 files
- OBSEXC: pull obsolescence markers
- OBSEXC: merging obsolescence markers (65 bytes)
- OBSEXC: 1 obsolescence markers added
- OBSEXC: DONE
+ 1 new obsolescence markers
(run 'hg update' to get a working copy)
## post pull state
# obstore: main
@@ -274,14 +256,11 @@
## pushing from main to pushdest
pushing to pushdest
searching for changes
- adding changesets
- adding manifests
- adding file changes
- added 2 changesets with 2 changes to 2 files
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 3 nodes
- OBSEXC: pushing 1 obsolescence markers (65 bytes)
- OBSEXC: DONE
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 2 changesets with 2 changes to 2 files
+ remote: 1 new obsolescence markers
## post push state
# obstore: main
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -295,10 +274,7 @@
adding manifests
adding file changes
added 2 changesets with 2 changes to 2 files
- OBSEXC: pull obsolescence markers
- OBSEXC: merging obsolescence markers (65 bytes)
- OBSEXC: 1 obsolescence markers added
- OBSEXC: DONE
+ 1 new obsolescence markers
(run 'hg update' to get a working copy)
## post pull state
# obstore: main
--- a/tests/test-exchange-A2.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-exchange-A2.t Tue Jun 23 16:50:06 2015 -0700
@@ -76,14 +76,11 @@
## pushing "A" from main to pushdest
pushing to pushdest
searching for changes
- adding changesets
- adding manifests
- adding file changes
- added 1 changesets with 1 changes to 1 files
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 2 nodes
- OBSEXC: pushing 1 obsolescence markers (65 bytes)
- OBSEXC: DONE
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 1 changesets with 1 changes to 1 files
+ remote: 1 new obsolescence markers
## post push state
# obstore: main
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -98,10 +95,7 @@
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
- OBSEXC: pull obsolescence markers
- OBSEXC: merging obsolescence markers (65 bytes)
- OBSEXC: 1 obsolescence markers added
- OBSEXC: DONE
+ 1 new obsolescence markers
(run 'hg update' to get a working copy)
## post pull state
# obstore: main
--- a/tests/test-exchange-A3.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-exchange-A3.t Tue Jun 23 16:50:06 2015 -0700
@@ -88,14 +88,11 @@
## pushing "A1" from main to pushdest
pushing to pushdest
searching for changes
- adding changesets
- adding manifests
- adding file changes
- added 1 changesets with 1 changes to 1 files
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 2 nodes
- OBSEXC: pushing 1 obsolescence markers (65 bytes)
- OBSEXC: DONE
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 1 changesets with 1 changes to 1 files
+ remote: 1 new obsolescence markers
## post push state
# obstore: main
28b51eb45704506b5c603decd6bf7ac5e0f6a52f e5ea8f9c73143125d36658e90ef70c6d2027a5b7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -110,10 +107,7 @@
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
- OBSEXC: pull obsolescence markers
- OBSEXC: merging obsolescence markers (65 bytes)
- OBSEXC: 1 obsolescence markers added
- OBSEXC: DONE
+ 1 new obsolescence markers
(run 'hg update' to get a working copy)
## post pull state
# obstore: main
@@ -192,14 +186,11 @@
## pushing "A1" from main to pushdest
pushing to pushdest
searching for changes
- adding changesets
- adding manifests
- adding file changes
- added 1 changesets with 1 changes to 1 files (+1 heads)
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 2 nodes
- OBSEXC: pushing 1 obsolescence markers (65 bytes)
- OBSEXC: DONE
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 1 changesets with 1 changes to 1 files (+1 heads)
+ remote: 1 new obsolescence markers
## post push state
# obstore: main
28b51eb45704506b5c603decd6bf7ac5e0f6a52f e5ea8f9c73143125d36658e90ef70c6d2027a5b7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -214,10 +205,7 @@
adding manifests
adding file changes
added 1 changesets with 1 changes to 2 files (+1 heads)
- OBSEXC: pull obsolescence markers
- OBSEXC: merging obsolescence markers (65 bytes)
- OBSEXC: 1 obsolescence markers added
- OBSEXC: DONE
+ 1 new obsolescence markers
(run 'hg heads' to see heads, 'hg merge' to merge)
1 new unstable changesets
## post pull state
--- a/tests/test-exchange-A4.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-exchange-A4.t Tue Jun 23 16:50:06 2015 -0700
@@ -81,14 +81,11 @@
## pushing "B" from main to pushdest
pushing to pushdest
searching for changes
- adding changesets
- adding manifests
- adding file changes
- added 2 changesets with 2 changes to 2 files
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 3 nodes
- OBSEXC: pushing 1 obsolescence markers (65 bytes)
- OBSEXC: DONE
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 2 changesets with 2 changes to 2 files
+ remote: 1 new obsolescence markers
## post push state
# obstore: main
28b51eb45704506b5c603decd6bf7ac5e0f6a52f e5ea8f9c73143125d36658e90ef70c6d2027a5b7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -103,10 +100,7 @@
adding manifests
adding file changes
added 2 changesets with 2 changes to 2 files
- OBSEXC: pull obsolescence markers
- OBSEXC: merging obsolescence markers (65 bytes)
- OBSEXC: 1 obsolescence markers added
- OBSEXC: DONE
+ 1 new obsolescence markers
(run 'hg update' to get a working copy)
## post pull state
# obstore: main
--- a/tests/test-exchange-A5.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-exchange-A5.t Tue Jun 23 16:50:06 2015 -0700
@@ -88,14 +88,11 @@
## pushing "B1" from main to pushdest
pushing to pushdest
searching for changes
- adding changesets
- adding manifests
- adding file changes
- added 1 changesets with 1 changes to 1 files
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 2 nodes
- OBSEXC: pushing 1 obsolescence markers (65 bytes)
- OBSEXC: DONE
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 1 changesets with 1 changes to 1 files
+ remote: 1 new obsolescence markers
## post push state
# obstore: main
28b51eb45704506b5c603decd6bf7ac5e0f6a52f 8c0a98c8372212c6efde4bfdcef006f27ff759d3 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -111,10 +108,7 @@
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
- OBSEXC: pull obsolescence markers
- OBSEXC: merging obsolescence markers (65 bytes)
- OBSEXC: 1 obsolescence markers added
- OBSEXC: DONE
+ 1 new obsolescence markers
(run 'hg update' to get a working copy)
## post pull state
# obstore: main
--- a/tests/test-exchange-A6.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-exchange-A6.t Tue Jun 23 16:50:06 2015 -0700
@@ -80,10 +80,7 @@
pushing to pushdest
searching for changes
no changes found
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 2 nodes
- OBSEXC: pushing 1 obsolescence markers (65 bytes)
- OBSEXC: DONE
+ remote: 1 new obsolescence markers
## post push state
# obstore: main
28b51eb45704506b5c603decd6bf7ac5e0f6a52f e5ea8f9c73143125d36658e90ef70c6d2027a5b7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -93,10 +90,7 @@
## pulling "e5ea8f9c7314" from main into pulldest
pulling from main
no changes found
- OBSEXC: pull obsolescence markers
- OBSEXC: merging obsolescence markers (65 bytes)
- OBSEXC: 1 obsolescence markers added
- OBSEXC: DONE
+ 1 new obsolescence markers
## post pull state
# obstore: main
28b51eb45704506b5c603decd6bf7ac5e0f6a52f e5ea8f9c73143125d36658e90ef70c6d2027a5b7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -119,10 +113,7 @@
pushing to pushdest
searching for changes
no changes found
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 3 nodes
- OBSEXC: pushing 1 obsolescence markers (65 bytes)
- OBSEXC: DONE
+ remote: 1 new obsolescence markers
## post push state
# obstore: main
28b51eb45704506b5c603decd6bf7ac5e0f6a52f e5ea8f9c73143125d36658e90ef70c6d2027a5b7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -133,10 +124,7 @@
pulling from main
searching for changes
no changes found
- OBSEXC: pull obsolescence markers
- OBSEXC: merging obsolescence markers (65 bytes)
- OBSEXC: 1 obsolescence markers added
- OBSEXC: DONE
+ 1 new obsolescence markers
## post pull state
# obstore: main
28b51eb45704506b5c603decd6bf7ac5e0f6a52f e5ea8f9c73143125d36658e90ef70c6d2027a5b7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
--- a/tests/test-exchange-A7.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-exchange-A7.t Tue Jun 23 16:50:06 2015 -0700
@@ -60,10 +60,6 @@
pushing to pushdest
searching for changes
no changes found
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 1 nodes
- OBSEXC: no marker to push
- OBSEXC: DONE
## post push state
# obstore: main
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -72,9 +68,6 @@
## pulling "a9bdc8b26820" from main into pulldest
pulling from main
no changes found
- OBSEXC: pull obsolescence markers
- OBSEXC: no unknown remote markers
- OBSEXC: DONE
## post pull state
# obstore: main
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
--- a/tests/test-exchange-B1.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-exchange-B1.t Tue Jun 23 16:50:06 2015 -0700
@@ -67,14 +67,11 @@
## pushing "A" from main to pushdest
pushing to pushdest
searching for changes
- adding changesets
- adding manifests
- adding file changes
- added 1 changesets with 1 changes to 1 files
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 2 nodes
- OBSEXC: pushing 1 obsolescence markers (89 bytes)
- OBSEXC: DONE
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 1 changesets with 1 changes to 1 files
+ remote: 1 new obsolescence markers
## post push state
# obstore: main
f6fbb35d8ac958bbe70035e4c789c18471cdc0af 0 {f5bc6836db60e308a17ba08bf050154ba9c4fad7} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -88,10 +85,7 @@
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
- OBSEXC: pull obsolescence markers
- OBSEXC: merging obsolescence markers (89 bytes)
- OBSEXC: 1 obsolescence markers added
- OBSEXC: DONE
+ 1 new obsolescence markers
(run 'hg update' to get a working copy)
## post pull state
# obstore: main
@@ -114,14 +108,11 @@
## pushing from main to pushdest
pushing to pushdest
searching for changes
- adding changesets
- adding manifests
- adding file changes
- added 1 changesets with 1 changes to 1 files
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 2 nodes
- OBSEXC: pushing 1 obsolescence markers (89 bytes)
- OBSEXC: DONE
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 1 changesets with 1 changes to 1 files
+ remote: 1 new obsolescence markers
## post push state
# obstore: main
f6fbb35d8ac958bbe70035e4c789c18471cdc0af 0 {f5bc6836db60e308a17ba08bf050154ba9c4fad7} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -135,10 +126,7 @@
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
- OBSEXC: pull obsolescence markers
- OBSEXC: merging obsolescence markers (89 bytes)
- OBSEXC: 1 obsolescence markers added
- OBSEXC: DONE
+ 1 new obsolescence markers
(run 'hg update' to get a working copy)
## post pull state
# obstore: main
--- a/tests/test-exchange-B2.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-exchange-B2.t Tue Jun 23 16:50:06 2015 -0700
@@ -63,10 +63,7 @@
pushing to pushdest
searching for changes
no changes found
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 1 nodes
- OBSEXC: pushing 1 obsolescence markers (89 bytes)
- OBSEXC: DONE
+ remote: 1 new obsolescence markers
## post push state
# obstore: main
f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -76,10 +73,7 @@
## pulling "a9bdc8b26820" from main into pulldest
pulling from main
no changes found
- OBSEXC: pull obsolescence markers
- OBSEXC: merging obsolescence markers (89 bytes)
- OBSEXC: 1 obsolescence markers added
- OBSEXC: DONE
+ 1 new obsolescence markers
## post pull state
# obstore: main
f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -102,10 +96,7 @@
pushing to pushdest
searching for changes
no changes found
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 1 nodes
- OBSEXC: pushing 1 obsolescence markers (89 bytes)
- OBSEXC: DONE
+ remote: 1 new obsolescence markers
## post push state
# obstore: main
f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -116,10 +107,7 @@
pulling from main
searching for changes
no changes found
- OBSEXC: pull obsolescence markers
- OBSEXC: merging obsolescence markers (89 bytes)
- OBSEXC: 1 obsolescence markers added
- OBSEXC: DONE
+ 1 new obsolescence markers
## post pull state
# obstore: main
f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
--- a/tests/test-exchange-B3.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-exchange-B3.t Tue Jun 23 16:50:06 2015 -0700
@@ -75,14 +75,10 @@
## pushing "A" from main to pushdest
pushing to pushdest
searching for changes
- adding changesets
- adding manifests
- adding file changes
- added 1 changesets with 1 changes to 1 files
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 2 nodes
- OBSEXC: no marker to push
- OBSEXC: DONE
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 1 changesets with 1 changes to 1 files
## post push state
# obstore: main
e56289ab6378dc752fd7965f8bf66b58bda740bd 0 {35b1839966785d5703a01607229eea932db42f87} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -95,9 +91,6 @@
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
- OBSEXC: pull obsolescence markers
- OBSEXC: no unknown remote markers
- OBSEXC: DONE
(run 'hg update' to get a working copy)
## post pull state
# obstore: main
--- a/tests/test-exchange-B4.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-exchange-B4.t Tue Jun 23 16:50:06 2015 -0700
@@ -41,17 +41,17 @@
$ hg push ../pushdest
pushing to ../pushdest
searching for changes
- adding changesets
- adding manifests
- adding file changes
- added 2 changesets with 2 changes to 2 files
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 2 changesets with 2 changes to 2 files
$ hg push ../pulldest
pushing to ../pulldest
searching for changes
- adding changesets
- adding manifests
- adding file changes
- added 2 changesets with 2 changes to 2 files
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 2 changesets with 2 changes to 2 files
$ hg update -q 0
$ mkcommit C
created new head
@@ -89,10 +89,7 @@
pushing to pushdest
searching for changes
no changes found
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 1 nodes
- OBSEXC: pushing 1 obsolescence markers (89 bytes)
- OBSEXC: DONE
+ remote: 1 new obsolescence markers
## post push state
# obstore: main
7f7f229b13a629a5b20581c6cb723f4e2ca54bed 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -102,10 +99,7 @@
## pulling "a9bdc8b26820" from main into pulldest
pulling from main
no changes found
- OBSEXC: pull obsolescence markers
- OBSEXC: merging obsolescence markers (89 bytes)
- OBSEXC: 1 obsolescence markers added
- OBSEXC: DONE
+ 1 new obsolescence markers
## post pull state
# obstore: main
7f7f229b13a629a5b20581c6cb723f4e2ca54bed 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -128,10 +122,7 @@
pushing to pushdest
searching for changes
no changes found
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 3 nodes
- OBSEXC: pushing 1 obsolescence markers (89 bytes)
- OBSEXC: DONE
+ remote: 1 new obsolescence markers
## post push state
# obstore: main
7f7f229b13a629a5b20581c6cb723f4e2ca54bed 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -142,10 +133,7 @@
pulling from main
searching for changes
no changes found
- OBSEXC: pull obsolescence markers
- OBSEXC: merging obsolescence markers (89 bytes)
- OBSEXC: 1 obsolescence markers added
- OBSEXC: DONE
+ 1 new obsolescence markers
## post pull state
# obstore: main
7f7f229b13a629a5b20581c6cb723f4e2ca54bed 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
--- a/tests/test-exchange-B5.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-exchange-B5.t Tue Jun 23 16:50:06 2015 -0700
@@ -87,14 +87,11 @@
## pushing "B" from main to pushdest
pushing to pushdest
searching for changes
- adding changesets
- adding manifests
- adding file changes
- added 2 changesets with 2 changes to 2 files
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 3 nodes
- OBSEXC: pushing 2 obsolescence markers (153 bytes)
- OBSEXC: DONE
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 2 changesets with 2 changes to 2 files
+ remote: 2 new obsolescence markers
## post push state
# obstore: main
28b51eb45704506b5c603decd6bf7ac5e0f6a52f e5ea8f9c73143125d36658e90ef70c6d2027a5b7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -110,10 +107,7 @@
adding manifests
adding file changes
added 2 changesets with 2 changes to 2 files
- OBSEXC: pull obsolescence markers
- OBSEXC: merging obsolescence markers (153 bytes)
- OBSEXC: 2 obsolescence markers added
- OBSEXC: DONE
+ 2 new obsolescence markers
(run 'hg update' to get a working copy)
1 new unstable changesets
## post pull state
@@ -142,14 +136,11 @@
## pushing "B" from main to pushdest
pushing to pushdest
searching for changes
- adding changesets
- adding manifests
- adding file changes
- added 2 changesets with 2 changes to 2 files
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 3 nodes
- OBSEXC: pushing 2 obsolescence markers (153 bytes)
- OBSEXC: DONE
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 2 changesets with 2 changes to 2 files
+ remote: 2 new obsolescence markers
## post push state
# obstore: main
28b51eb45704506b5c603decd6bf7ac5e0f6a52f e5ea8f9c73143125d36658e90ef70c6d2027a5b7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -165,10 +156,7 @@
adding manifests
adding file changes
added 2 changesets with 2 changes to 2 files
- OBSEXC: pull obsolescence markers
- OBSEXC: merging obsolescence markers (153 bytes)
- OBSEXC: 2 obsolescence markers added
- OBSEXC: DONE
+ 2 new obsolescence markers
(run 'hg update' to get a working copy)
1 new unstable changesets
## post pull state
--- a/tests/test-exchange-B6.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-exchange-B6.t Tue Jun 23 16:50:06 2015 -0700
@@ -75,10 +75,7 @@
pushing to pushdest
searching for changes
no changes found
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 1 nodes
- OBSEXC: pushing 2 obsolescence markers (153 bytes)
- OBSEXC: DONE
+ remote: 2 new obsolescence markers
## post push state
# obstore: main
962ecf6b1afc94e15c7e48fdfb76ef8abd11372b f6298a8ac3a4b78bbeae5f1d3dc5bc3c3812f0f3 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -90,10 +87,7 @@
## pulling "a9bdc8b26820" from main into pulldest
pulling from main
no changes found
- OBSEXC: pull obsolescence markers
- OBSEXC: merging obsolescence markers (153 bytes)
- OBSEXC: 2 obsolescence markers added
- OBSEXC: DONE
+ 2 new obsolescence markers
## post pull state
# obstore: main
962ecf6b1afc94e15c7e48fdfb76ef8abd11372b f6298a8ac3a4b78bbeae5f1d3dc5bc3c3812f0f3 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
--- a/tests/test-exchange-B7.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-exchange-B7.t Tue Jun 23 16:50:06 2015 -0700
@@ -67,10 +67,6 @@
pushing to pushdest
searching for changes
no changes found
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 1 nodes
- OBSEXC: no marker to push
- OBSEXC: DONE
## post push state
# obstore: main
f6fbb35d8ac958bbe70035e4c789c18471cdc0af 0 {f5bc6836db60e308a17ba08bf050154ba9c4fad7} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -79,9 +75,6 @@
## pulling "a9bdc8b26820" from main into pulldest
pulling from main
no changes found
- OBSEXC: pull obsolescence markers
- OBSEXC: no unknown remote markers
- OBSEXC: DONE
## post pull state
# obstore: main
f6fbb35d8ac958bbe70035e4c789c18471cdc0af 0 {f5bc6836db60e308a17ba08bf050154ba9c4fad7} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
--- a/tests/test-exchange-C1.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-exchange-C1.t Tue Jun 23 16:50:06 2015 -0700
@@ -70,10 +70,7 @@
pushing to pushdest
searching for changes
no changes found
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 1 nodes
- OBSEXC: pushing 2 obsolescence markers (177 bytes)
- OBSEXC: DONE
+ remote: 2 new obsolescence markers
## post push state
# obstore: main
f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -85,10 +82,7 @@
## pulling "a9bdc8b26820" from main into pulldest
pulling from main
no changes found
- OBSEXC: pull obsolescence markers
- OBSEXC: merging obsolescence markers (177 bytes)
- OBSEXC: 2 obsolescence markers added
- OBSEXC: DONE
+ 2 new obsolescence markers
## post pull state
# obstore: main
f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -115,10 +109,7 @@
pushing to pushdest
searching for changes
no changes found
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 1 nodes
- OBSEXC: pushing 2 obsolescence markers (177 bytes)
- OBSEXC: DONE
+ remote: 2 new obsolescence markers
## post push state
# obstore: main
f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -131,10 +122,7 @@
pulling from main
searching for changes
no changes found
- OBSEXC: pull obsolescence markers
- OBSEXC: merging obsolescence markers (177 bytes)
- OBSEXC: 2 obsolescence markers added
- OBSEXC: DONE
+ 2 new obsolescence markers
## post pull state
# obstore: main
f5bc6836db60e308a17ba08bf050154ba9c4fad7 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
--- a/tests/test-exchange-C2.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-exchange-C2.t Tue Jun 23 16:50:06 2015 -0700
@@ -76,14 +76,11 @@
## pushing "A1" from main to pushdest
pushing to pushdest
searching for changes
- adding changesets
- adding manifests
- adding file changes
- added 1 changesets with 1 changes to 1 files
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 2 nodes
- OBSEXC: pushing 2 obsolescence markers (153 bytes)
- OBSEXC: DONE
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 1 changesets with 1 changes to 1 files
+ remote: 2 new obsolescence markers
## post push state
# obstore: main
06055a7959d4128e6e3bccfd01482e83a2db8a3a 0 {28b51eb45704506b5c603decd6bf7ac5e0f6a52f} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -99,10 +96,7 @@
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
- OBSEXC: pull obsolescence markers
- OBSEXC: merging obsolescence markers (153 bytes)
- OBSEXC: 2 obsolescence markers added
- OBSEXC: DONE
+ 2 new obsolescence markers
(run 'hg update' to get a working copy)
## post pull state
# obstore: main
@@ -129,14 +123,11 @@
## pushing from main to pushdest
pushing to pushdest
searching for changes
- adding changesets
- adding manifests
- adding file changes
- added 1 changesets with 1 changes to 1 files
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 2 nodes
- OBSEXC: pushing 2 obsolescence markers (153 bytes)
- OBSEXC: DONE
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 1 changesets with 1 changes to 1 files
+ remote: 2 new obsolescence markers
## post push state
# obstore: main
06055a7959d4128e6e3bccfd01482e83a2db8a3a 0 {28b51eb45704506b5c603decd6bf7ac5e0f6a52f} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -152,10 +143,7 @@
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
- OBSEXC: pull obsolescence markers
- OBSEXC: merging obsolescence markers (153 bytes)
- OBSEXC: 2 obsolescence markers added
- OBSEXC: DONE
+ 2 new obsolescence markers
(run 'hg update' to get a working copy)
## post pull state
# obstore: main
--- a/tests/test-exchange-C3.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-exchange-C3.t Tue Jun 23 16:50:06 2015 -0700
@@ -83,10 +83,7 @@
pushing to pushdest
searching for changes
no changes found
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 1 nodes
- OBSEXC: pushing 3 obsolescence markers (241 bytes)
- OBSEXC: DONE
+ remote: 3 new obsolescence markers
## post push state
# obstore: main
06055a7959d4128e6e3bccfd01482e83a2db8a3a 0 {28b51eb45704506b5c603decd6bf7ac5e0f6a52f} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -100,10 +97,7 @@
## pulling "a9bdc8b26820" from main into pulldest
pulling from main
no changes found
- OBSEXC: pull obsolescence markers
- OBSEXC: merging obsolescence markers (241 bytes)
- OBSEXC: 3 obsolescence markers added
- OBSEXC: DONE
+ 3 new obsolescence markers
## post pull state
# obstore: main
06055a7959d4128e6e3bccfd01482e83a2db8a3a 0 {28b51eb45704506b5c603decd6bf7ac5e0f6a52f} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -134,10 +128,7 @@
pushing to pushdest
searching for changes
no changes found
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 1 nodes
- OBSEXC: pushing 3 obsolescence markers (241 bytes)
- OBSEXC: DONE
+ remote: 3 new obsolescence markers
## post push state
# obstore: main
06055a7959d4128e6e3bccfd01482e83a2db8a3a 0 {28b51eb45704506b5c603decd6bf7ac5e0f6a52f} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -152,10 +143,7 @@
pulling from main
searching for changes
no changes found
- OBSEXC: pull obsolescence markers
- OBSEXC: merging obsolescence markers (241 bytes)
- OBSEXC: 3 obsolescence markers added
- OBSEXC: DONE
+ 3 new obsolescence markers
## post pull state
# obstore: main
06055a7959d4128e6e3bccfd01482e83a2db8a3a 0 {28b51eb45704506b5c603decd6bf7ac5e0f6a52f} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
--- a/tests/test-exchange-C4.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-exchange-C4.t Tue Jun 23 16:50:06 2015 -0700
@@ -90,10 +90,7 @@
pushing to pushdest
searching for changes
no changes found
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 1 nodes
- OBSEXC: pushing 2 obsolescence markers (153 bytes)
- OBSEXC: DONE
+ remote: 2 new obsolescence markers
## post push state
# obstore: main
7f7f229b13a629a5b20581c6cb723f4e2ca54bed 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -106,10 +103,7 @@
## pulling "a9bdc8b26820" from main into pulldest
pulling from main
no changes found
- OBSEXC: pull obsolescence markers
- OBSEXC: merging obsolescence markers (153 bytes)
- OBSEXC: 2 obsolescence markers added
- OBSEXC: DONE
+ 2 new obsolescence markers
## post pull state
# obstore: main
7f7f229b13a629a5b20581c6cb723f4e2ca54bed 0 {a9bdc8b26820b1b87d585b82eb0ceb4a2ecdbc04} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
--- a/tests/test-exchange-D1.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-exchange-D1.t Tue Jun 23 16:50:06 2015 -0700
@@ -70,14 +70,11 @@
## pushing "A1" from main to pushdest
pushing to pushdest
searching for changes
- adding changesets
- adding manifests
- adding file changes
- added 1 changesets with 1 changes to 1 files
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 2 nodes
- OBSEXC: pushing 2 obsolescence markers (153 bytes)
- OBSEXC: DONE
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 1 changesets with 1 changes to 1 files
+ remote: 2 new obsolescence markers
## post push state
# obstore: main
06055a7959d4128e6e3bccfd01482e83a2db8a3a 0 {28b51eb45704506b5c603decd6bf7ac5e0f6a52f} (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -93,10 +90,7 @@
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
- OBSEXC: pull obsolescence markers
- OBSEXC: merging obsolescence markers (153 bytes)
- OBSEXC: 2 obsolescence markers added
- OBSEXC: DONE
+ 2 new obsolescence markers
(run 'hg update' to get a working copy)
## post pull state
# obstore: main
--- a/tests/test-exchange-D2.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-exchange-D2.t Tue Jun 23 16:50:06 2015 -0700
@@ -67,10 +67,7 @@
pushing to pushdest
searching for changes
no changes found
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 1 nodes
- OBSEXC: pushing 2 obsolescence markers (153 bytes)
- OBSEXC: DONE
+ remote: 2 new obsolescence markers
## post push state
# obstore: main
28b51eb45704506b5c603decd6bf7ac5e0f6a52f e5ea8f9c73143125d36658e90ef70c6d2027a5b7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -83,10 +80,7 @@
pulling from main
searching for changes
no changes found
- OBSEXC: pull obsolescence markers
- OBSEXC: merging obsolescence markers (153 bytes)
- OBSEXC: 2 obsolescence markers added
- OBSEXC: DONE
+ 2 new obsolescence markers
## post pull state
# obstore: main
28b51eb45704506b5c603decd6bf7ac5e0f6a52f e5ea8f9c73143125d36658e90ef70c6d2027a5b7 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
--- a/tests/test-exchange-D3.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-exchange-D3.t Tue Jun 23 16:50:06 2015 -0700
@@ -72,10 +72,6 @@
pushing to pushdest
searching for changes
no changes found
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 1 nodes
- OBSEXC: no marker to push
- OBSEXC: DONE
## post push state
# obstore: main
28b51eb45704506b5c603decd6bf7ac5e0f6a52f 6aa67a7b4baa6fb41b06aed38d5b1201436546e2 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -85,9 +81,6 @@
## pulling "a9bdc8b26820" from main into pulldest
pulling from main
no changes found
- OBSEXC: pull obsolescence markers
- OBSEXC: no unknown remote markers
- OBSEXC: DONE
## post pull state
# obstore: main
28b51eb45704506b5c603decd6bf7ac5e0f6a52f 6aa67a7b4baa6fb41b06aed38d5b1201436546e2 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
--- a/tests/test-exchange-D4.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-exchange-D4.t Tue Jun 23 16:50:06 2015 -0700
@@ -85,14 +85,11 @@
## pushing "A1" from main to pushdest
pushing to pushdest
searching for changes
- adding changesets
- adding manifests
- adding file changes
- added 1 changesets with 1 changes to 1 files
- OBSEXC: computing relevant nodes
- OBSEXC: computing markers relevant to 2 nodes
- OBSEXC: pushing 2 obsolescence markers (129 bytes)
- OBSEXC: DONE
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 1 changesets with 1 changes to 1 files
+ remote: 2 new obsolescence markers
## post push state
# obstore: main
28b51eb45704506b5c603decd6bf7ac5e0f6a52f aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
@@ -110,10 +107,7 @@
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
- OBSEXC: pull obsolescence markers
- OBSEXC: merging obsolescence markers (129 bytes)
- OBSEXC: 2 obsolescence markers added
- OBSEXC: DONE
+ 2 new obsolescence markers
(run 'hg update' to get a working copy)
## post pull state
# obstore: main
--- a/tests/test-import.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-import.t Tue Jun 23 16:50:06 2015 -0700
@@ -9,7 +9,6 @@
$ hg init auto-obsolete
$ cd auto-obsolete
$ echo '[extensions]' >> $HGRCPATH
- $ echo 'rebase=' >> $HGRCPATH
$ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
$ echo A > a
$ hg commit -Am A
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-obsconvert.t Tue Jun 23 16:50:06 2015 -0700
@@ -0,0 +1,78 @@
+ $ cat >> $HGRCPATH <<EOF
+ > [extensions]
+ > EOF
+ $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
+ $ hg init alpha
+ $ cd alpha
+ $ echo foo > foo
+ $ hg addremove
+ adding foo
+ $ hg ci -m 'foo'
+ $ for x in 1 2 3 4 ; do
+ > echo foo $x > foo
+ > hg amend
+ > done
+
+Test conversion between obsolete marker formats
+ $ hg debugobsolete
+ e63c23eaa88ae77967edcf4ea194d31167c478b0 b81ac6b9d2a55f9a7a6b90a006b1aab0568d6d34 0 (*) {'user': 'test'} (glob)
+ a5b276878fa564da042b4b9efef3713ceea20350 0 {e63c23eaa88ae77967edcf4ea194d31167c478b0} (*) {'user': 'test'} (glob)
+ b81ac6b9d2a55f9a7a6b90a006b1aab0568d6d34 384fc811182687231962e486f23ea8c5bab7a2d3 0 (*) {'user': 'test'} (glob)
+ 2291082406feb57d0f83b9b0a6777b6074f3fde6 0 {b81ac6b9d2a55f9a7a6b90a006b1aab0568d6d34} (*) {'user': 'test'} (glob)
+ 384fc811182687231962e486f23ea8c5bab7a2d3 949d379b3c3bf051906bc3528c049cb536e2ec86 0 (*) {'user': 'test'} (glob)
+ 1616bdbe82d3fd1fb7c4e068aee277835672ffdc 0 {384fc811182687231962e486f23ea8c5bab7a2d3} (*) {'user': 'test'} (glob)
+ 949d379b3c3bf051906bc3528c049cb536e2ec86 f2e4c45b2a4a58ccf7ef6825b8fa5685873cd2f7 0 (*) {'user': 'test'} (glob)
+ 8668d55aac650158bb510be6d47d21e3db9e5c75 0 {949d379b3c3bf051906bc3528c049cb536e2ec86} (*) {'user': 'test'} (glob)
+ $ hg debugobsconvert --new-format 0
+ Old store is version 1, will rewrite in version 0
+ Done!
+ $ hg debugobsolete
+ e63c23eaa88ae77967edcf4ea194d31167c478b0 b81ac6b9d2a55f9a7a6b90a006b1aab0568d6d34 0 (*) {'user': 'test'} (glob)
+ a5b276878fa564da042b4b9efef3713ceea20350 0 {e63c23eaa88ae77967edcf4ea194d31167c478b0} (*) {'user': 'test'} (glob)
+ b81ac6b9d2a55f9a7a6b90a006b1aab0568d6d34 384fc811182687231962e486f23ea8c5bab7a2d3 0 (*) {'user': 'test'} (glob)
+ 2291082406feb57d0f83b9b0a6777b6074f3fde6 0 {b81ac6b9d2a55f9a7a6b90a006b1aab0568d6d34} (*) {'user': 'test'} (glob)
+ 384fc811182687231962e486f23ea8c5bab7a2d3 949d379b3c3bf051906bc3528c049cb536e2ec86 0 (*) {'user': 'test'} (glob)
+ 1616bdbe82d3fd1fb7c4e068aee277835672ffdc 0 {384fc811182687231962e486f23ea8c5bab7a2d3} (*) {'user': 'test'} (glob)
+ 949d379b3c3bf051906bc3528c049cb536e2ec86 f2e4c45b2a4a58ccf7ef6825b8fa5685873cd2f7 0 (*) {'user': 'test'} (glob)
+ 8668d55aac650158bb510be6d47d21e3db9e5c75 0 {949d379b3c3bf051906bc3528c049cb536e2ec86} (*) {'user': 'test'} (glob)
+ $ hg debugobsconvert --new-format 0
+ abort: New format is the same as the old format, not upgrading!
+ [255]
+ $ hg debugobsolete
+ e63c23eaa88ae77967edcf4ea194d31167c478b0 b81ac6b9d2a55f9a7a6b90a006b1aab0568d6d34 0 (*) {'user': 'test'} (glob)
+ a5b276878fa564da042b4b9efef3713ceea20350 0 {e63c23eaa88ae77967edcf4ea194d31167c478b0} (*) {'user': 'test'} (glob)
+ b81ac6b9d2a55f9a7a6b90a006b1aab0568d6d34 384fc811182687231962e486f23ea8c5bab7a2d3 0 (*) {'user': 'test'} (glob)
+ 2291082406feb57d0f83b9b0a6777b6074f3fde6 0 {b81ac6b9d2a55f9a7a6b90a006b1aab0568d6d34} (*) {'user': 'test'} (glob)
+ 384fc811182687231962e486f23ea8c5bab7a2d3 949d379b3c3bf051906bc3528c049cb536e2ec86 0 (*) {'user': 'test'} (glob)
+ 1616bdbe82d3fd1fb7c4e068aee277835672ffdc 0 {384fc811182687231962e486f23ea8c5bab7a2d3} (*) {'user': 'test'} (glob)
+ 949d379b3c3bf051906bc3528c049cb536e2ec86 f2e4c45b2a4a58ccf7ef6825b8fa5685873cd2f7 0 (*) {'user': 'test'} (glob)
+ 8668d55aac650158bb510be6d47d21e3db9e5c75 0 {949d379b3c3bf051906bc3528c049cb536e2ec86} (*) {'user': 'test'} (glob)
+ $ hg debugobsconvert --new-format 1
+ Old store is version 0, will rewrite in version 1
+ Done!
+ $ hg debugobsolete
+ e63c23eaa88ae77967edcf4ea194d31167c478b0 b81ac6b9d2a55f9a7a6b90a006b1aab0568d6d34 0 (*) {'user': 'test'} (glob)
+ a5b276878fa564da042b4b9efef3713ceea20350 0 {e63c23eaa88ae77967edcf4ea194d31167c478b0} (*) {'user': 'test'} (glob)
+ b81ac6b9d2a55f9a7a6b90a006b1aab0568d6d34 384fc811182687231962e486f23ea8c5bab7a2d3 0 (*) {'user': 'test'} (glob)
+ 2291082406feb57d0f83b9b0a6777b6074f3fde6 0 {b81ac6b9d2a55f9a7a6b90a006b1aab0568d6d34} (*) {'user': 'test'} (glob)
+ 384fc811182687231962e486f23ea8c5bab7a2d3 949d379b3c3bf051906bc3528c049cb536e2ec86 0 (*) {'user': 'test'} (glob)
+ 1616bdbe82d3fd1fb7c4e068aee277835672ffdc 0 {384fc811182687231962e486f23ea8c5bab7a2d3} (*) {'user': 'test'} (glob)
+ 949d379b3c3bf051906bc3528c049cb536e2ec86 f2e4c45b2a4a58ccf7ef6825b8fa5685873cd2f7 0 (*) {'user': 'test'} (glob)
+ 8668d55aac650158bb510be6d47d21e3db9e5c75 0 {949d379b3c3bf051906bc3528c049cb536e2ec86} (*) {'user': 'test'} (glob)
+
+Test that the default is some reasonably modern format (first downgrade)
+ $ hg debugobsconvert --new-format 0
+ Old store is version 1, will rewrite in version 0
+ Done!
+ $ hg debugobsconvert
+ Old store is version 0, will rewrite in version 1
+ Done!
+ $ hg debugobsolete
+ e63c23eaa88ae77967edcf4ea194d31167c478b0 b81ac6b9d2a55f9a7a6b90a006b1aab0568d6d34 0 (*) {'user': 'test'} (glob)
+ a5b276878fa564da042b4b9efef3713ceea20350 0 {e63c23eaa88ae77967edcf4ea194d31167c478b0} (*) {'user': 'test'} (glob)
+ b81ac6b9d2a55f9a7a6b90a006b1aab0568d6d34 384fc811182687231962e486f23ea8c5bab7a2d3 0 (*) {'user': 'test'} (glob)
+ 2291082406feb57d0f83b9b0a6777b6074f3fde6 0 {b81ac6b9d2a55f9a7a6b90a006b1aab0568d6d34} (*) {'user': 'test'} (glob)
+ 384fc811182687231962e486f23ea8c5bab7a2d3 949d379b3c3bf051906bc3528c049cb536e2ec86 0 (*) {'user': 'test'} (glob)
+ 1616bdbe82d3fd1fb7c4e068aee277835672ffdc 0 {384fc811182687231962e486f23ea8c5bab7a2d3} (*) {'user': 'test'} (glob)
+ 949d379b3c3bf051906bc3528c049cb536e2ec86 f2e4c45b2a4a58ccf7ef6825b8fa5685873cd2f7 0 (*) {'user': 'test'} (glob)
+ 8668d55aac650158bb510be6d47d21e3db9e5c75 0 {949d379b3c3bf051906bc3528c049cb536e2ec86} (*) {'user': 'test'} (glob)
--- a/tests/test-obsolete-push.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-obsolete-push.t Tue Jun 23 16:50:06 2015 -0700
@@ -2,7 +2,6 @@
> [defaults]
> amend=-d "0 0"
> [extensions]
- > hgext.rebase=
> hgext.graphlog=
> EOF
$ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
--- a/tests/test-obsolete.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-obsolete.t Tue Jun 23 16:50:06 2015 -0700
@@ -183,7 +183,8 @@
adding manifests
adding file changes
added 5 changesets with 5 changes to 5 files (+1 heads)
- pushing 2 obsolescence markers (129 bytes)
+ pushing 2 obsolescence markers (* bytes) (glob)
+ 2 obsolescence markers added
$ hg -R ../other-new verify
checking changesets
checking manifests
@@ -237,7 +238,8 @@
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
- pushing 3 obsolescence markers (193 bytes)
+ pushing 3 obsolescence markers (* bytes) (glob)
+ 1 obsolescence markers added
$ qlog -R ../other-new
5
- 95de7fc6918d
@@ -259,7 +261,8 @@
pushing to ../other-new
searching for changes
no changes found
- pushing 3 obsolescence markers (193 bytes)
+ pushing 3 obsolescence markers (* bytes) (glob)
+ 0 obsolescence markers added
[1]
$ hg up --hidden -q .^ # 3
@@ -510,6 +513,8 @@
#excluded 'whole rebase set is extinct and ignored.' message not in core
$ hg rebase -b '3' -d 4 --traceback
+ rebasing 3:0d3f46688ccc "add obsol_c"
+ rebasing 8:159dfc9fa5d3 "add obsol_d''" (tip)
2 new divergent changesets
$ hg --hidden log -q -r 'successors(3)'
4:725c380fe99b
@@ -538,7 +543,8 @@
adding manifests
adding file changes
added 2 changesets with 1 changes to [12] files (re)
- pushing 7 obsolescence markers (467 bytes)
+ pushing 7 obsolescence markers (* bytes) (glob)
+ 3 obsolescence markers added
$ hg up -q 10
$ mkcommit "obsol_d'''"
created new head
@@ -550,7 +556,8 @@
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
- pushing 8 obsolescence markers (531 bytes)
+ pushing 8 obsolescence markers (* bytes) (glob)
+ 1 obsolescence markers added
$ cd ..
check bumped detection
@@ -814,18 +821,18 @@
Simple rewrite
- $ hg --hidden debugobsoleterelevant 3
+ $ hg --hidden debugobsolete --rev 3
4538525df7e2b9f09423636c61ef63a4cb872a2d 0d3f46688ccc6e756c7e96cf64c391c411309597 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
simple rewrite with a prune attached to it
- $ hg debugobsoleterelevant 15
+ $ hg debugobsolete --rev 15
0b1b6dd009c037985363e2290a0b579819f659db 705ab2a6b72e2cd86edb799ebe15f2695f86143e 0 (*) {'user': 'test'} (glob)
33d458d86621f3186c40bfccd77652f4a122743e 0 {0b1b6dd009c037985363e2290a0b579819f659db} (*) {'user': 'test'} (glob)
Transitive rewrite
- $ hg --hidden debugobsoleterelevant 8
+ $ hg --hidden debugobsolete --rev 8
909a0fb57e5d909f353d89e394ffd7e0890fec88 159dfc9fa5d334d7e03a0aecfc7f7ab4c3431fea 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
95de7fc6918dea4c9c8d5382f50649794b474c4a 909a0fb57e5d909f353d89e394ffd7e0890fec88 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
a7a6f2b5d8a54b81bc7aa2fba2934ad6d700a79e 95de7fc6918dea4c9c8d5382f50649794b474c4a 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'}
--- a/tests/test-prev-next.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-prev-next.t Tue Jun 23 16:50:06 2015 -0700
@@ -1,11 +1,10 @@
$ cat >> $HGRCPATH <<EOF
> [extensions]
- > hgext.rebase=
> hgext.graphlog=
> EOF
$ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
-hg prev should move active bookmark
+hg prev -B should move active bookmark
$ hg init
$ touch a
$ hg add a
@@ -16,31 +15,53 @@
$ hg bookmark mark
$ hg bookmarks
* mark 1:6e742c9127b3
- $ hg prev
+ $ hg prev -B
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
[0] added a
$ hg bookmarks
* mark 0:a154386e50d1
+hg next -B should move active bookmark
+ $ hg next -B
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ [1] added b
+ $ hg bookmarks
+ * mark 1:6e742c9127b3
+
+hg prev should unset active bookmark
+ $ hg prev
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ [0] added a
+ $ hg bookmarks
+ mark 1:6e742c9127b3
+
hg next should move active bookmark
+ $ hg bookmark mark2
+ $ hg bookmarks
+ mark 1:6e742c9127b3
+ * mark2 0:a154386e50d1
$ hg next
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
[1] added b
$ hg bookmarks
- * mark 1:6e742c9127b3
+ mark 1:6e742c9127b3
+ mark2 0:a154386e50d1
+
+ $ hg bookmark -d mark2
+ $ hg bookmark mark
hg next/prev should not interfere with inactive bookmarks
$ touch c
$ hg add c
$ hg commit -m 'added c'
$ hg bookmark -r2 no-move
- $ hg prev
+ $ hg prev -B
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
[1] added b
$ hg bookmarks
* mark 1:6e742c9127b3
no-move 2:4e26ef31f919
- $ hg next
+ $ hg next -B
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
[2] added c
$ hg bookmarks
@@ -49,13 +70,13 @@
$ hg up 1
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
(leaving bookmark mark)
- $ hg next
+ $ hg next -B
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
[2] added c
$ hg bookmarks
mark 2:4e26ef31f919
no-move 2:4e26ef31f919
- $ hg prev
+ $ hg prev -B
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
[1] added b
$ hg bookmarks
--- a/tests/test-prune.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-prune.t Tue Jun 23 16:50:06 2015 -0700
@@ -2,7 +2,6 @@
> [ui]
> logtemplate={rev}:{node|short}[{bookmarks}] ({obsolete}/{phase}) {desc|firstline}\n
> [extensions]
- > hgext.rebase=
> EOF
$ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
@@ -41,8 +40,9 @@
$ hg prune --user blah --date '1979-12-15' .
1 changesets pruned
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
- (leaving bookmark BABAR)
working directory now at 47d2a3944de8
+ $ hg bookmark
+ * BABAR 3:47d2a3944de8
$ hg debugobsolete
9d206ffc875e1bc304590549be293be36821e66c 0 {47d2a3944de8b013de3be9578e8e344ea2e6c097} (Sat Dec 15 00:00:00 1979 +0000) {'user': 'blah'}
@@ -51,6 +51,7 @@
$ hg prune 1
1 changesets pruned
2 new unstable changesets
+ $ hg book -i BABAR
$ hg debugobsolete
9d206ffc875e1bc304590549be293be36821e66c 0 {47d2a3944de8b013de3be9578e8e344ea2e6c097} (Sat Dec 15 00:00:00 1979 +0000) {'user': 'blah'}
7c3bad9141dcb46ff89abf5f61856facd56e476c 0 {1f0dee641bb7258c56bd60e93edfa2405381c41e} (*) {'user': 'test'} (glob)
@@ -250,7 +251,8 @@
working directory now at d62d843c9a01
bookmark 'todelete' deleted
$ hg id -ir dcbb326fdec2
- abort: unknown revision 'dcbb326fdec2'!
+ abort: hidden revision 'dcbb326fdec2'!
+ (use --hidden to access hidden revisions)
[255]
$ hg id -ir d62d843c9a01
d62d843c9a01
@@ -262,7 +264,8 @@
bookmark 'delete' deleted
$ hg tag --remove --local c
$ hg id -ir 6:2702dd0c91e7
- abort: unknown revision '2702dd0c91e7'!
+ abort: hidden revision '6'!
+ (use --hidden to access hidden revisions)
[255]
$ hg debugobsstorestat
@@ -273,9 +276,7 @@
1 successors: 0
2 successors: 0
more than 2 successors: 0
- average meta length: (27|71) (re)
available keys:
- date: 4
user: 4
disconnected clusters: 4
any known node: 4
@@ -289,3 +290,45 @@
longer length: 1
median length: 1
mean length: 1
+
+ $ mkcommit rg
+ created new head
+ $ hg bookmark rg
+ $ hg up 10
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ (leaving bookmark rg)
+ $ hg bookmark r10
+ $ hg log -G
+ o 11:cd0038e05e1b[rg] (stable/draft) add rg
+ |
+ | @ 10:ff43616e5d0f[B r10] (stable/draft) r10
+ |/
+ o 8:d62d843c9a01[] (stable/draft) r8
+ |
+ o 7:e7d9710d9fc6[] (stable/draft) r7
+ |
+ o 3:2b6d669947cd[] (stable/draft) r3
+ |\
+ | o 2:fa942426a6fd[] (stable/draft) r2
+ | |
+ o | 1:66f7d451a68b[] (stable/draft) r1
+ |/
+ o 0:1ea73414a91b[] (stable/draft) r0
+
+ $ hg prune 11
+ 1 changesets pruned
+ $ hg log -G
+ @ 10:ff43616e5d0f[B r10] (stable/draft) r10
+ |
+ o 8:d62d843c9a01[rg] (stable/draft) r8
+ |
+ o 7:e7d9710d9fc6[] (stable/draft) r7
+ |
+ o 3:2b6d669947cd[] (stable/draft) r3
+ |\
+ | o 2:fa942426a6fd[] (stable/draft) r2
+ | |
+ o | 1:66f7d451a68b[] (stable/draft) r1
+ |/
+ o 0:1ea73414a91b[] (stable/draft) r0
+
--- a/tests/test-sharing.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-sharing.t Tue Jun 23 16:50:06 2015 -0700
@@ -11,8 +11,12 @@
> EOF
$ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
$ hg init public
- $ hg clone -q public test-repo
- $ hg clone -q test-repo dev-repo
+ $ hg clone public test-repo
+ updating to branch default
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg clone test-repo dev-repo
+ updating to branch default
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cat >> test-repo/.hg/hgrc <<EOF
> [phases]
> publish = false
@@ -24,12 +28,26 @@
$ echo 'my new project' > file1
$ hg add file1
$ hg commit -m'create new project'
- $ hg push -q
+ $ hg push
+ pushing to $TESTTMP/public
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
and pull that into the development repository::
$ cd ../dev-repo
- $ hg pull -q -u
+ $ hg pull -u
+ pulling from $TESTTMP/test-repo
+ requesting all changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
+ pull obsolescence markers
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
Let's commit a preliminary change and push it to ``test-repo`` for
testing. ::
@@ -63,7 +81,16 @@
Pull into dev-repo: obsolescence markers are transferred, but not
the new obsolete changeset.
$ cd ../dev-repo
- $ hg pull -q -u
+ $ hg pull -u
+ pulling from $TESTTMP/test-repo
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files (+1 heads)
+ pull obsolescence markers
+ 2 obsolescence markers added
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
Figure SG03
$ hg shortlog --hidden -G
@@ -92,7 +119,8 @@
Figure SG04 (test-repo)
$ cd ../test-repo
- $ hg update -q
+ $ hg update
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg shortlog --hidden -G
@ 4:de6151c48e1c draft fix bug 37
|
@@ -112,7 +140,13 @@
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
- pushing 4 obsolescence markers (341 bytes)
+ pushing 4 obsolescence markers (* bytes) (glob)
+ 4 obsolescence markers added
+
+Now that the fix is public, we cannot amend it any more.
+ $ hg amend -m 'fix bug 37'
+ abort: cannot amend public changesets
+ [255]
Figure SG05
$ hg -R ../public shortlog -G
@@ -120,193 +154,391 @@
|
o 0:0dc9c9f6ab91 public create new project
-Oops, still have draft changesets in dev-repo.
- $ cd ../dev-repo
- $ hg shortlog -r 'draft()'
+Oops, still have draft changesets in dev-repo: push the phase change there.
+ $ hg -R ../dev-repo shortlog -r 'draft()'
4:de6151c48e1c draft fix bug 37
- $ hg pull -q -u
- $ hg shortlog -r 'draft()'
+ $ hg push ../dev-repo
+ pushing to ../dev-repo
+ searching for changes
+ no changes found
+ pushing 4 obsolescence markers (* bytes) (glob)
+ 0 obsolescence markers added
+ [1]
+ $ hg -R ../dev-repo shortlog -r 'draft()'
-Sharing by Alice and Bob to demonstrate bumped and divergent changesets.
-First, setup repos for them.
+Sharing with multiple developers: code review
$ cd ..
- $ hg clone -q public alice
- $ hg clone -q public bob
+ $ hg clone public review
+ updating to branch default
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg clone review alice
+ updating to branch default
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg clone review bob
+ updating to branch default
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ cat >> review/.hg/hgrc <<EOF
+ > [phases]
+ > publish = false
+ > EOF
+
+Alice commits a draft bug fix, pushes to review repo.
+ $ cd alice
+ $ hg bookmark bug15
+ $ echo 'fix' > file2
+ $ hg commit -A -u alice -m 'fix bug 15 (v1)'
+ adding file2
+ $ hg push -B bug15
+ pushing to $TESTTMP/review
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
+ pushing 4 obsolescence markers (* bytes) (glob)
+ 0 obsolescence markers added
+ exporting bookmark bug15
+ $ hg -R ../review bookmarks
+ bug15 2:f91e97234c2b
+
+Alice receives code review, amends her fix, and goes out to lunch to
+await second review.
+ $ echo 'Fix.' > file2
+ $ hg amend -m 'fix bug 15 (v2)'
+ $ hg push
+ pushing to $TESTTMP/review
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files (+1 heads)
+ pushing 6 obsolescence markers (* bytes) (glob)
+ 2 obsolescence markers added
+ updating bookmark bug15
+ $ hg -R ../review bookmarks
+ bug15 3:cbdfbd5a5db2
+
+Figure SG06: review repository after Alice pushes her amended changeset.
+ $ hg --hidden -R ../review shortlog -G -r 1::
+ o 3:cbdfbd5a5db2 draft fix bug 15 (v2)
+ |
+ | x 2:f91e97234c2b draft fix bug 15 (v1)
+ |/
+ @ 1:de6151c48e1c public fix bug 37
+ |
+
+Bob commits a draft changeset, pushes to review repo.
+ $ cd ../bob
+ $ echo 'stuff' > file1
+ $ hg bookmark featureX
+ $ hg commit -u bob -m 'implement feature X (v1)'
+ $ hg push -B featureX
+ pushing to $TESTTMP/review
+ searching for changes
+ remote has heads on branch 'default' that are not known locally: cbdfbd5a5db2
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files (+1 heads)
+ pushing 4 obsolescence markers (* bytes) (glob)
+ 0 obsolescence markers added
+ exporting bookmark featureX
+ $ hg -R ../review bookmarks
+ bug15 3:cbdfbd5a5db2
+ featureX 4:193657d1e852
+
+Bob receives first review, amends and pushes.
+ $ echo 'do stuff' > file1
+ $ hg amend -m 'implement feature X (v2)'
+ $ hg push
+ pushing to $TESTTMP/review
+ searching for changes
+ remote has heads on branch 'default' that are not known locally: cbdfbd5a5db2
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files (+1 heads)
+ pushing 6 obsolescence markers (* bytes) (glob)
+ 2 obsolescence markers added
+ updating bookmark featureX
+
+Bob receives second review, amends, and pushes to public:
+this time, he's sure he got it right!
+ $ echo 'Do stuff.' > file1
+ $ hg amend -m 'implement feature X (v3)'
+ $ hg push ../public
+ pushing to ../public
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
+ pushing 8 obsolescence markers (* bytes) (glob)
+ 4 obsolescence markers added
+ $ hg -R ../public bookmarks
+ no bookmarks set
+ $ hg push ../review
+ pushing to ../review
+ searching for changes
+ remote has heads on branch 'default' that are not known locally: cbdfbd5a5db2
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files (+1 heads)
+ pushing 8 obsolescence markers (* bytes) (glob)
+ 2 obsolescence markers added
+ updating bookmark featureX
+ $ hg -R ../review bookmarks
+ bug15 3:cbdfbd5a5db2
+ featureX 6:540ba8f317e6
+
+Figure SG07: review and public repos after Bob implements feature X.
+ $ hg --hidden -R ../review shortlog -G -r 1::
+ o 6:540ba8f317e6 public implement feature X (v3)
+ |
+ | x 5:0eb74a7b6698 draft implement feature X (v2)
+ |/
+ | x 4:193657d1e852 draft implement feature X (v1)
+ |/
+ | o 3:cbdfbd5a5db2 draft fix bug 15 (v2)
+ |/
+ | x 2:f91e97234c2b draft fix bug 15 (v1)
+ |/
+ @ 1:de6151c48e1c public fix bug 37
+ |
+ $ hg --hidden -R ../public shortlog -G -r 1::
+ o 2:540ba8f317e6 public implement feature X (v3)
+ |
+ o 1:de6151c48e1c public fix bug 37
+ |
+
+How do things look in the review repo?
+ $ cd ../review
+ $ hg --hidden shortlog -G -r 1::
+ o 6:540ba8f317e6 public implement feature X (v3)
+ |
+ | x 5:0eb74a7b6698 draft implement feature X (v2)
+ |/
+ | x 4:193657d1e852 draft implement feature X (v1)
+ |/
+ | o 3:cbdfbd5a5db2 draft fix bug 15 (v2)
+ |/
+ | x 2:f91e97234c2b draft fix bug 15 (v1)
+ |/
+ @ 1:de6151c48e1c public fix bug 37
+ |
+
+Meantime, Alice is back from lunch. While she was away, Bob approved
+her change, so now she can publish it.
+ $ cd ../alice
+ $ hg --hidden shortlog -G -r 1::
+ @ 4:cbdfbd5a5db2 draft fix bug 15 (v2)
+ |
+ | x 3:55dd95168a35 draft temporary amend commit for f91e97234c2b
+ | |
+ | x 2:f91e97234c2b draft fix bug 15 (v1)
+ |/
+ o 1:de6151c48e1c public fix bug 37
+ |
+ $ hg outgoing -q ../public
+ 4:cbdfbd5a5db2
+ $ hg push ../public
+ pushing to ../public
+ searching for changes
+ remote has heads on branch 'default' that are not known locally: 540ba8f317e6
+ abort: push creates new remote head cbdfbd5a5db2 with bookmark 'bug15'!
+ (pull and merge or see "hg help push" for details about pushing new heads)
+ [255]
+ $ hg pull ../public
+ pulling from ../public
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files (+1 heads)
+ pull obsolescence markers
+ 4 obsolescence markers added
+ (run 'hg heads' to see heads, 'hg merge' to merge)
+ $ hg log -G -q -r 'head()'
+ o 5:540ba8f317e6
+ |
+ | @ 4:cbdfbd5a5db2
+ |/
+ $ hg --hidden shortlog -G -r 1::
+ o 5:540ba8f317e6 public implement feature X (v3)
+ |
+ | @ 4:cbdfbd5a5db2 draft fix bug 15 (v2)
+ |/
+ | x 3:55dd95168a35 draft temporary amend commit for f91e97234c2b
+ | |
+ | x 2:f91e97234c2b draft fix bug 15 (v1)
+ |/
+ o 1:de6151c48e1c public fix bug 37
+ |
+
+Alice rebases her draft changeset on top of Bob's public changeset and
+publishes the result.
+ $ hg rebase -d 5
+ rebasing 4:cbdfbd5a5db2 "fix bug 15 (v2)" (bug15)
+ $ hg push ../public
+ pushing to ../public
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
+ pushing 11 obsolescence markers (* bytes) (glob)
+ 3 obsolescence markers added
+ $ hg push ../review
+ pushing to ../review
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 0 changes to 1 files
+ pushing 11 obsolescence markers (* bytes) (glob)
+ 1 obsolescence markers added
+ updating bookmark bug15
+
+Figure SG08: review and public changesets after Alice pushes.
+ $ hg --hidden -R ../review shortlog -G -r 1::
+ o 7:a06ec1bf97bd public fix bug 15 (v2)
+ |
+ o 6:540ba8f317e6 public implement feature X (v3)
+ |
+ | x 5:0eb74a7b6698 draft implement feature X (v2)
+ |/
+ | x 4:193657d1e852 draft implement feature X (v1)
+ |/
+ | x 3:cbdfbd5a5db2 draft fix bug 15 (v2)
+ |/
+ | x 2:f91e97234c2b draft fix bug 15 (v1)
+ |/
+ @ 1:de6151c48e1c public fix bug 37
+ |
+ $ hg --hidden -R ../public shortlog -G -r 1::
+ o 3:a06ec1bf97bd public fix bug 15 (v2)
+ |
+ o 2:540ba8f317e6 public implement feature X (v3)
+ |
+ o 1:de6151c48e1c public fix bug 37
+ |
+ $ cd ..
+
+Setup for "cowboy mode" shared mutable history (to illustrate divergent
+and bumped changesets).
+ $ rm -rf review alice bob
+ $ hg clone public alice
+ updating to branch default
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg clone public bob
+ updating to branch default
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cat >> alice/.hg/hgrc <<EOF
> [phases]
> publish = false
> EOF
$ cp alice/.hg/hgrc bob/.hg/hgrc
-Alice commits a bug fix.
- $ cd alice
- $ echo 'fix' > file2
- $ hg commit -q -A -u alice -m 'fix bug 15'
-
-Bob pulls and amends Alice's fix.
- $ cd ../bob
- $ hg pull -q -u ../alice
- $ echo 'Fix.' > file2
- $ hg amend -q -A -u bob -m 'fix bug 15 (amended)'
-
-Figure SG06: Bob's repository after amending Alice's fix.
-(Nothing new here; we could have seen this in the user guide.
- $ hg --hidden shortlog -G
- @ 4:fe884dfac355 draft fix bug 15 (amended)
- |
- | x 3:0376cac226f8 draft temporary amend commit for e011baf925da
- | |
- | x 2:e011baf925da draft fix bug 15
- |/
- o 1:de6151c48e1c public fix bug 37
- |
- o 0:0dc9c9f6ab91 public create new project
-
-
-But in the meantime, Alice decides the fix is just fine and publishes it.
- $ cd ../alice
- $ hg push -q
-
-Which means that Bob now has an formerly obsolete changeset that is
-also public (2:6e83). As soon as he pulls its phase change, he's got
-trouble: the successors of that formerly obsolete changeset are
-bumped.
+Now we'll have Bob commit a bug fix that could still be improved::
- $ cd ../bob
- $ hg --hidden shortlog -r 'obsolete()'
- 2:e011baf925da draft fix bug 15
- 3:0376cac226f8 draft temporary amend commit for e011baf925da
- $ hg pull -q -u
- 1 new bumped changesets
- $ hg --hidden shortlog -r 'obsolete()'
- 3:0376cac226f8 draft temporary amend commit for e011baf925da
- $ hg shortlog -r 'bumped()'
- 4:fe884dfac355 draft fix bug 15 (amended)
-
-Figure SG07: Bob's repo with one bumped changeset (rev 4:c02d)
- $ hg --hidden shortlog -G
- @ 4:fe884dfac355 draft fix bug 15 (amended)
- |
- | x 3:0376cac226f8 draft temporary amend commit for e011baf925da
- | |
- | o 2:e011baf925da public fix bug 15
- |/
- o 1:de6151c48e1c public fix bug 37
- |
- o 0:0dc9c9f6ab91 public create new project
-
-
-Bob gets out of trouble by evolving the repository.
- $ hg evolve --all
- recreate:[4] fix bug 15 (amended)
- atop:[2] fix bug 15
- computing new diff
- committed as 227d860d9ad0
- working directory is now at 227d860d9ad0
-
-Figure SG08
- $ hg --hidden shortlog -G
- @ 5:227d860d9ad0 draft bumped update to e011baf925da:
- |
- | x 4:fe884dfac355 draft fix bug 15 (amended)
- | |
- +---x 3:0376cac226f8 draft temporary amend commit for e011baf925da
- | |
- o | 2:e011baf925da public fix bug 15
- |/
- o 1:de6151c48e1c public fix bug 37
- |
- o 0:0dc9c9f6ab91 public create new project
-
-
-Throw away Bob's messy repo and start over.
- $ cd ..
- $ rm -rf bob
- $ cp -rp alice bob
-
-Bob commits a pretty good fix that both he and Alice will amend,
-leading to divergence.
$ cd bob
$ echo 'pretty good fix' >> file1
$ hg commit -u bob -m 'fix bug 24 (v1)'
+ $ hg shortlog -r .
+ 4:2fe6c4bd32d0 draft fix bug 24 (v1)
-Alice pulls Bob's fix and improves it.
+Since Alice and Bob are now in cowboy mode, Alice pulls Bob's draft
+changeset and amends it herself. ::
+
$ cd ../alice
- $ hg pull -q -u ../bob
- $ echo 'better (alice)' >> file1
+ $ hg pull -u ../bob
+ pulling from ../bob
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
+ pull obsolescence markers
+ 0 obsolescence markers added
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ echo 'better fix (alice)' >> file1
$ hg amend -u alice -m 'fix bug 24 (v2 by alice)'
-Likewise, Bob amends his own fix. Now we have an obsolete changeset
-with two successors, although the successors are in different repos.
- $ cd ../bob
- $ echo 'better (bob)' >> file1
- $ hg amend -u bob -m 'fix bug 24 (v2 by bob)'
+Bob implements a better fix of his own::
-Bob pulls from Alice's repo and discovers the trouble: divergent changesets!
- $ hg pull -q -u ../alice
- not updating: not a linear update
- (merge or update --check to force update)
- 2 new divergent changesets
- $ hg shortlog -r 'divergent()'
- 5:fc16901f4d7a draft fix bug 24 (v2 by bob)
- 6:694fd0f6b503 draft fix bug 24 (v2 by alice)
+ $ cd ../bob
+ $ echo 'better fix (bob)' >> file1
+ $ hg amend -u bob -m 'fix bug 24 (v2 by bob)'
+ $ hg --hidden shortlog -G -r 3::
+ @ 6:a360947f6faf draft fix bug 24 (v2 by bob)
+ |
+ | x 5:3466c7f5a149 draft temporary amend commit for 2fe6c4bd32d0
+ | |
+ | x 4:2fe6c4bd32d0 draft fix bug 24 (v1)
+ |/
+ o 3:a06ec1bf97bd public fix bug 15 (v2)
+ |
-Figure SG09
- $ hg --hidden shortlog -G
- o 6:694fd0f6b503 draft fix bug 24 (v2 by alice)
+Bob discovers the divergence.
+ $ hg pull ../alice
+ pulling from ../alice
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files (+1 heads)
+ pull obsolescence markers
+ 2 obsolescence markers added
+ (run 'hg heads' to see heads, 'hg merge' to merge)
+ 2 new divergent changesets
+
+Figure SG09: multiple heads! divergence! oh my!
+ $ hg --hidden shortlog -G -r 3::
+ o 7:e3f99ce9d9cd draft fix bug 24 (v2 by alice)
|
- | @ 5:fc16901f4d7a draft fix bug 24 (v2 by bob)
+ | @ 6:a360947f6faf draft fix bug 24 (v2 by bob)
|/
- | x 4:162612d3335b draft temporary amend commit for fe81d904ed08
+ | x 5:3466c7f5a149 draft temporary amend commit for 2fe6c4bd32d0
| |
- | x 3:fe81d904ed08 draft fix bug 24 (v1)
+ | x 4:2fe6c4bd32d0 draft fix bug 24 (v1)
|/
- o 2:e011baf925da public fix bug 15
+ o 3:a06ec1bf97bd public fix bug 15 (v2)
|
- o 1:de6151c48e1c public fix bug 37
- |
- o 0:0dc9c9f6ab91 public create new project
-
-Merge the trouble away.
- $ hg merge --tool internal:local
+ $ hg --hidden shortlog -r 'successors(2fe6)'
+ 6:a360947f6faf draft fix bug 24 (v2 by bob)
+ 7:e3f99ce9d9cd draft fix bug 24 (v2 by alice)
+
+Use evolve to fix the divergence.
+ $ HGMERGE=internal:other hg evolve
+ merge:[6] fix bug 24 (v2 by bob)
+ with: [7] fix bug 24 (v2 by alice)
+ base: [4] fix bug 24 (v1)
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
- (branch merge, don't forget to commit)
- $ hg commit -m merge
- $ hg shortlog -G
- @ 7:b1d30ba26e44 draft merge
- |\
- | o 6:694fd0f6b503 draft fix bug 24 (v2 by alice)
- | |
- o | 5:fc16901f4d7a draft fix bug 24 (v2 by bob)
- |/
- o 2:e011baf925da public fix bug 15
- |
- o 1:de6151c48e1c public fix bug 37
- |
- o 0:0dc9c9f6ab91 public create new project
-
+ working directory is now at 5ad6037c046c
$ hg log -q -r 'divergent()'
- 5:fc16901f4d7a
- 6:694fd0f6b503
-# XXX hg evolve does not solve this trouble! bug in evolve?
-#Evolve the trouble away.
-# $ hg evolve --all --tool=internal:local
-# merge:[5] fix bug 24 (v2 by bob)
-# with: [6] fix bug 24 (v2 by alice)
-# base: [3] fix bug 24 (v1)
-# 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
-# $ hg status
-# $ hg shortlog -G
-# o 6:694fd0f6b503 draft fix bug 24 (v2 by alice)
-# |
-# | @ 5:fc16901f4d7a draft fix bug 24 (v2 by bob)
-# |/
-# o 2:e011baf925da public fix bug 15
-# |
-# o 1:de6151c48e1c public fix bug 37
-# |
-# o 0:0dc9c9f6ab91 public create new project
-#
-# $ hg --hidden shortlog -G
+Figure SG10: Bob's repository after fixing divergence.
+ $ hg --hidden shortlog -G -r 3::
+ @ 9:5ad6037c046c draft fix bug 24 (v2 by bob)
+ |
+ | x 8:bcfc9a755ac3 draft temporary amend commit for a360947f6faf
+ | |
+ +---x 7:e3f99ce9d9cd draft fix bug 24 (v2 by alice)
+ | |
+ | x 6:a360947f6faf draft fix bug 24 (v2 by bob)
+ |/
+ | x 5:3466c7f5a149 draft temporary amend commit for 2fe6c4bd32d0
+ | |
+ | x 4:2fe6c4bd32d0 draft fix bug 24 (v1)
+ |/
+ o 3:a06ec1bf97bd public fix bug 15 (v2)
+ |
+ $ hg --hidden shortlog -r 'precursors(9)'
+ 6:a360947f6faf draft fix bug 24 (v2 by bob)
+ 7:e3f99ce9d9cd draft fix bug 24 (v2 by alice)
+ $ cat file1
+ Do stuff.
+ pretty good fix
+ better fix (alice)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-simple4server-bundle2.t Tue Jun 23 16:50:06 2015 -0700
@@ -0,0 +1,169 @@
+
+ $ cat >> $HGRCPATH <<EOF
+ > [defaults]
+ > amend=-d "0 0"
+ > [web]
+ > push_ssl = false
+ > allow_push = *
+ > [phases]
+ > publish = False
+ > [experimental]
+ > bundle2-exp=True
+ > EOF
+
+ $ mkcommit() {
+ > echo "$1" > "$1"
+ > hg add "$1"
+ > hg ci -m "add $1"
+ > }
+
+setup repo
+
+ $ hg init server
+ $ echo "[extensions]" >> ./server/.hg/hgrc
+ $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/simple4server.py" >> ./server/.hg/hgrc
+ $ hg serve -R server -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
+ $ cat hg.pid >> $DAEMON_PIDS
+
+ $ hg clone http://localhost:$HGPORT/ client
+ no changes found
+ updating to branch default
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ cat ./errors.log
+ $ echo "[extensions]" >> ./client/.hg/hgrc
+ $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> ./client/.hg/hgrc
+ $ cp -r client other
+
+Smoke testing
+===============
+
+ $ cd client
+ $ mkcommit 0
+ $ mkcommit a
+ $ hg push
+ pushing to http://localhost:$HGPORT/
+ searching for changes
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 2 changesets with 2 changes to 2 files
+ $ hg pull
+ pulling from http://localhost:$HGPORT/
+ searching for changes
+ no changes found
+ $ cat ../errors.log
+ $ hg pull -R ../other
+ pulling from http://localhost:$HGPORT/
+ requesting all changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 2 changesets with 2 changes to 2 files
+ (run 'hg update' to get a working copy)
+ $ cat ../errors.log
+ $ hg push -R ../other
+ pushing to http://localhost:$HGPORT/
+ searching for changes
+ no changes found
+ [1]
+ $ cat ../errors.log
+
+Capacity testing
+===================
+
+ $ wget -q -O - http://localhost:$HGPORT/?cmd=hello
+ capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Alistkeys%0Aobsmarkers%3DV0%2CV1%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_obshash_1 _evoext_getbundle_obscommon
+ $ wget -q -O - http://localhost:$HGPORT/?cmd=capabilities
+ lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Alistkeys%0Aobsmarkers%3DV0%2CV1%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_obshash_1 _evoext_getbundle_obscommon (no-eol)
+
+ $ wget -q -O - "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces" | sort
+ bookmarks
+ namespaces
+ obsolete
+ phases
+
+Push
+=============
+
+ $ echo 'A' > a
+ $ hg amend
+ $ hg push
+ pushing to http://localhost:$HGPORT/
+ searching for changes
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 1 changesets with 1 changes to 1 files (+1 heads)
+ remote: 2 new obsolescence markers
+ $ cat ../errors.log
+ $ hg push
+ pushing to http://localhost:$HGPORT/
+ searching for changes
+ no changes found
+ [1]
+ $ cat ../errors.log
+
+Pull
+=============
+
+ $ hg -R ../other pull
+ pulling from http://localhost:$HGPORT/
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to [12] files \(\+1 heads\) (re)
+ 2 new obsolescence markers
+ (run 'hg heads' to see heads, 'hg merge' to merge)
+ $ cat ../errors.log
+ $ hg -R ../other pull
+ pulling from http://localhost:$HGPORT/
+ searching for changes
+ no changes found
+ $ cat ../errors.log
+
+ $ cd ..
+
+Test disabling obsolete advertisement
+===========================================
+(used by bitbucket to select which repo use evolve)
+
+ $ wget -q -O - "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces" | sort
+ bookmarks
+ namespaces
+ obsolete
+ phases
+ $ wget -q -O - http://localhost:$HGPORT/?cmd=hello
+ capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Alistkeys%0Aobsmarkers%3DV0%2CV1%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_obshash_1 _evoext_getbundle_obscommon
+ $ wget -q -O - http://localhost:$HGPORT/?cmd=capabilities
+ lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Alistkeys%0Aobsmarkers%3DV0%2CV1%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_obshash_1 _evoext_getbundle_obscommon (no-eol)
+
+ $ echo '[__temporary__]' >> server/.hg/hgrc
+ $ echo 'advertiseobsolete=False' >> server/.hg/hgrc
+ $ $TESTDIR/killdaemons.py
+ $ hg serve -R server -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
+ $ cat hg.pid >> $DAEMON_PIDS
+
+ $ wget -q -O - "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces" | sort
+ bookmarks
+ namespaces
+ phases
+ $ wget -q -O - http://localhost:$HGPORT/?cmd=hello
+ capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Alistkeys%0Aobsmarkers%3DV0%2CV1%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024
+ $ wget -q -O - http://localhost:$HGPORT/?cmd=capabilities
+ lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Alistkeys%0Aobsmarkers%3DV0%2CV1%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 (no-eol)
+
+ $ echo 'advertiseobsolete=True' >> server/.hg/hgrc
+ $ $TESTDIR/killdaemons.py
+ $ hg serve -R server -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
+ $ cat hg.pid >> $DAEMON_PIDS
+
+ $ wget -q -O - "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces" | sort
+ bookmarks
+ namespaces
+ obsolete
+ phases
+ $ wget -q -O - http://localhost:$HGPORT/?cmd=hello
+ capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Alistkeys%0Aobsmarkers%3DV0%2CV1%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_obshash_1 _evoext_getbundle_obscommon
+ $ wget -q -O - http://localhost:$HGPORT/?cmd=capabilities
+ lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Alistkeys%0Aobsmarkers%3DV0%2CV1%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_obshash_1 _evoext_getbundle_obscommon (no-eol)
--- a/tests/test-simple4server.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-simple4server.t Tue Jun 23 16:50:06 2015 -0700
@@ -8,7 +8,6 @@
> [phases]
> publish = False
> [extensions]
- > hgext.rebase=
> EOF
$ mkcommit() {
@@ -29,6 +28,7 @@
no changes found
updating to branch default
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ cat ./errors.log
$ echo "[extensions]" >> ./client/.hg/hgrc
$ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> ./client/.hg/hgrc
$ cp -r client other
@@ -50,6 +50,7 @@
pulling from http://localhost:$HGPORT/
searching for changes
no changes found
+ $ cat ../errors.log
$ hg pull -R ../other
pulling from http://localhost:$HGPORT/
requesting all changes
@@ -59,21 +60,23 @@
added 2 changesets with 2 changes to 2 files
pull obsolescence markers
(run 'hg update' to get a working copy)
+ $ cat ../errors.log
$ hg push -R ../other
pushing to http://localhost:$HGPORT/
searching for changes
no changes found
[1]
+ $ cat ../errors.log
Capacity testing
===================
- $ curl --silent http://localhost:$HGPORT/?cmd=hello
- capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_b2x_obsmarkers_0
- $ curl --silent http://localhost:$HGPORT/?cmd=capabilities
- lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_b2x_obsmarkers_0 (no-eol)
+ $ wget -q -O - http://localhost:$HGPORT/?cmd=hello
+ capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Alistkeys%0Aobsmarkers%3DV0%2CV1%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_obshash_1 _evoext_getbundle_obscommon
+ $ wget -q -O - http://localhost:$HGPORT/?cmd=capabilities
+ lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Alistkeys%0Aobsmarkers%3DV0%2CV1%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_obshash_1 _evoext_getbundle_obscommon (no-eol)
- $ curl --silent "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces" | sort
+ $ wget -q -O - "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces" | sort
bookmarks
namespaces
obsolete
@@ -91,12 +94,14 @@
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files (+1 heads)
- pushing 2 obsolescence markers (171 bytes)
+ pushing 2 obsolescence markers (* bytes) (glob)
+ $ cat ../errors.log
$ hg push
pushing to http://localhost:$HGPORT/
searching for changes
no changes found
[1]
+ $ cat ../errors.log
Pull
=============
@@ -111,10 +116,12 @@
pull obsolescence markers
2 obsolescence markers added
(run 'hg heads' to see heads)
+ $ cat ../errors.log
$ hg -R ../other pull
pulling from http://localhost:$HGPORT/
searching for changes
no changes found
+ $ cat ../errors.log
$ cd ..
@@ -122,15 +129,15 @@
===========================================
(used by bitbucket to select which repo use evolve)
- $ curl --silent "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces" | sort
+ $ wget -q -O - "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces" | sort
bookmarks
namespaces
obsolete
phases
- $ curl --silent http://localhost:$HGPORT/?cmd=hello
- capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_b2x_obsmarkers_0
- $ curl --silent http://localhost:$HGPORT/?cmd=capabilities
- lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_b2x_obsmarkers_0 (no-eol)
+ $ wget -q -O - http://localhost:$HGPORT/?cmd=hello
+ capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Alistkeys%0Aobsmarkers%3DV0%2CV1%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_obshash_1 _evoext_getbundle_obscommon
+ $ wget -q -O - http://localhost:$HGPORT/?cmd=capabilities
+ lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Alistkeys%0Aobsmarkers%3DV0%2CV1%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_obshash_1 _evoext_getbundle_obscommon (no-eol)
$ echo '[__temporary__]' >> server/.hg/hgrc
$ echo 'advertiseobsolete=False' >> server/.hg/hgrc
@@ -138,26 +145,26 @@
$ hg serve -R server -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
$ cat hg.pid >> $DAEMON_PIDS
- $ curl --silent "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces" | sort
+ $ wget -q -O - "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces" | sort
bookmarks
namespaces
phases
- $ curl --silent http://localhost:$HGPORT/?cmd=hello
- capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024
- $ curl --silent http://localhost:$HGPORT/?cmd=capabilities
- lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 (no-eol)
+ $ wget -q -O - http://localhost:$HGPORT/?cmd=hello
+ capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Alistkeys%0Aobsmarkers%3DV0%2CV1%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024
+ $ wget -q -O - http://localhost:$HGPORT/?cmd=capabilities
+ lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Alistkeys%0Aobsmarkers%3DV0%2CV1%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 (no-eol)
$ echo 'advertiseobsolete=True' >> server/.hg/hgrc
$ $TESTDIR/killdaemons.py
$ hg serve -R server -n test -p $HGPORT -d --pid-file=hg.pid -A access.log -E errors.log
$ cat hg.pid >> $DAEMON_PIDS
- $ curl --silent "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces" | sort
+ $ wget -q -O - "http://localhost:$HGPORT/?cmd=listkeys&namespace=namespaces" | sort
bookmarks
namespaces
obsolete
phases
- $ curl --silent http://localhost:$HGPORT/?cmd=hello
- capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_b2x_obsmarkers_0
- $ curl --silent http://localhost:$HGPORT/?cmd=capabilities
- lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_b2x_obsmarkers_0 (no-eol)
+ $ wget -q -O - http://localhost:$HGPORT/?cmd=hello
+ capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Alistkeys%0Aobsmarkers%3DV0%2CV1%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_obshash_1 _evoext_getbundle_obscommon
+ $ wget -q -O - http://localhost:$HGPORT/?cmd=capabilities
+ lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch stream bundle2=HG20%0Achangegroup%3D01%2C02%0Adigests%3Dmd5%2Csha1%2Csha512%0Alistkeys%0Aobsmarkers%3DV0%2CV1%0Apushkey%0Aremote-changegroup%3Dhttp%2Chttps unbundle=HG10GZ,HG10BZ,HG10UN httpheader=1024 _evoext_pushobsmarkers_0 _evoext_pullobsmarkers_0 _evoext_obshash_0 _evoext_obshash_1 _evoext_getbundle_obscommon (no-eol)
--- a/tests/test-stabilize-conflict.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-stabilize-conflict.t Tue Jun 23 16:50:06 2015 -0700
@@ -8,6 +8,7 @@
> [ui]
> interactive=false
> merge=internal:merge
+ > promptecho = True
> [defaults]
> amend=-d "0 0"
> [merge-tools]
@@ -15,7 +16,6 @@
> touch.gui=true
> touch.args=babar
> [extensions]
- > hgext.rebase=
> EOF
$ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
@@ -130,7 +130,7 @@
warning: conflicts during merge.
merging babar incomplete! (edit conflicts, then use 'hg resolve --mark')
evolve failed!
- fix conflict and run "hg evolve --continue"
+ fix conflict and run "hg evolve --continue" or use "hg update -C" to abort
abort: unresolved merge conflicts (see hg help resolve)
[255]
$ hg resolve -l
@@ -143,7 +143,7 @@
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: babar count up to ten
|
- | @ changeset: 5:71c18f70c34f
+ | o changeset: 5:71c18f70c34f
| | user: test
| | date: Thu Jan 01 00:00:00 1970 +0000
| | summary: babar count up to fifteen
@@ -167,7 +167,7 @@
$ hg resolve --all -m
(no more unresolved files)
$ hg evolve --continue
- grafting revision 5
+ grafting 5:71c18f70c34f "babar count up to fifteen"
$ hg resolve -l
$ hg log -G
@ changeset: 8:1836b91c6c1d
@@ -217,9 +217,10 @@
atop:[10] babar count up to ten
merging babar
output file babar appears unchanged
- was merge successful (yn)? merging babar failed!
+ was merge successful (yn)? n
+ merging babar failed!
evolve failed!
- fix conflict and run "hg evolve --continue"
+ fix conflict and run "hg evolve --continue" or use "hg update -C" to abort
abort: unresolved merge conflicts (see hg help resolve)
[255]
$ hg resolve -l
@@ -232,7 +233,7 @@
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: babar count up to ten
|
- | @ changeset: 8:1836b91c6c1d
+ | o changeset: 8:1836b91c6c1d
| | user: test
| | date: Thu Jan 01 00:00:00 1970 +0000
| | summary: babar count up to fifteen
--- a/tests/test-stabilize-order.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-stabilize-order.t Tue Jun 23 16:50:06 2015 -0700
@@ -2,7 +2,6 @@
> [defaults]
> amend=-d "0 0"
> [extensions]
- > hgext.rebase=
> hgext.graphlog=
> EOF
$ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
@@ -70,7 +69,10 @@
hg rebase -r 22619daeed78 -d 005fe5914f78
resolving manifests
getting b
+ committing files:
b
+ committing manifest
+ committing changelog
working directory is now at bede829dd2d3
$ glog
@ 8:bede829dd2d3@default(draft) addb
@@ -99,7 +101,10 @@
getting b
resolving manifests
getting c
+ committing files:
c
+ committing manifest
+ committing changelog
working directory is now at 65095d7d0dd5
$ hg debugobsolete > successors.new
$ diff -u successors.old successors.new
@@ -160,7 +165,10 @@
getting b
resolving manifests
getting c
+ committing files:
c
+ committing manifest
+ committing changelog
working directory is now at e99ecf51c867
$ glog
@ 12:e99ecf51c867@default(draft) addc
--- a/tests/test-stabilize-result.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-stabilize-result.t Tue Jun 23 16:50:06 2015 -0700
@@ -32,6 +32,12 @@
$ hg evolve -v --confirm
move:[2] changea
atop:[4] changea
+ perform evolve? [Ny] n
+ abort: evolve aborted by user
+ [255]
+ $ echo y | hg evolve -v --confirm --config ui.interactive=True
+ move:[2] changea
+ atop:[4] changea
perform evolve? [Ny] y
hg rebase -r cce2c55b8965 -d fb9d051ec0a4
resolving manifests
@@ -79,7 +85,7 @@
warning: conflicts during merge.
merging a incomplete! (edit conflicts, then use 'hg resolve --mark')
evolve failed!
- fix conflict and run "hg evolve --continue"
+ fix conflict and run "hg evolve --continue" or use "hg update -C" to abort
abort: unresolved merge conflicts (see hg help resolve)
[255]
$ hg revert -r 'unstable()' a
@@ -92,13 +98,13 @@
+a
+newer a
$ hg evolve --continue
- grafting revision 5
- abort: unresolved merge conflicts (see hg help resolve)
+ grafting 5:3655f0f50885 "newer a"
+ abort: unresolved merge conflicts (see "hg help resolve")
[255]
$ hg resolve -m a
(no more unresolved files)
$ hg evolve --continue
- grafting revision 5
+ grafting 5:3655f0f50885 "newer a"
Stabilize latecomer with different parent
=========================================
@@ -126,6 +132,7 @@
Get a successors of 8 on it
$ hg grab 8
+ rebasing 8:1cf0aacfd363 "newer a"
? files updated, 0 files merged, 0 files removed, 0 files unresolved (glob)
Add real change to the successors
@@ -161,6 +168,12 @@
$ hg evolve --any --confirm
recreate:[12] newer a
atop:[8] newer a
+ perform evolve? [Ny] n
+ abort: evolve aborted by user
+ [255]
+ $ echo y | hg evolve --any --confirm --config ui.interactive=True
+ recreate:[12] newer a
+ atop:[8] newer a
perform evolve? [Ny] y
rebasing to destination parent: 66719795a494
computing new diff
@@ -235,7 +248,14 @@
Stabilize it
- $ hg evolve -qn --traceback --confirm
+ $ hg evolve -qn --confirm
+ merge:[19] More addition
+ with: [17] More addition
+ base: [15] More addition
+ perform evolve? [Ny] n
+ abort: evolve aborted by user
+ [255]
+ $ echo y | hg evolve -qn --confirm --config ui.interactive=True
merge:[19] More addition
with: [17] More addition
base: [15] More addition
@@ -255,9 +275,15 @@
merging a
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
amending changeset eacc9c8240fe
+ committing files:
a
+ committing manifest
+ committing changelog
copying changeset 283ccd10e2b8 to 7bc2f5967f5e
+ committing files:
a
+ committing manifest
+ committing changelog
committed changeset 21:f344982e63c4
working directory is now at f344982e63c4
$ hg st
@@ -312,18 +338,20 @@
$ echo 'gotta break' >> a
$ hg amend
2 new divergent changesets
+# reamend so that the case is not the first precursor.
+ $ hg amend -m "More addition (2)"
$ hg phase 'divergent()'
21: draft
- 23: draft
+ 24: draft
$ hg evolve -qn
- hg update -c 36e188246d67 &&
+ hg update -c 0b336205a5d0 &&
hg merge f344982e63c4 &&
- hg commit -m "auto merge resolving conflict between 36e188246d67 and f344982e63c4"&&
+ hg commit -m "auto merge resolving conflict between 0b336205a5d0 and f344982e63c4"&&
hg up -C 3932c176bbaa &&
hg revert --all --rev tip &&
- hg commit -m "`hg log -r 36e188246d67 --template={desc}`";
+ hg commit -m "`hg log -r 0b336205a5d0 --template={desc}`";
$ hg evolve
- merge:[23] More addition
+ merge:[24] More addition (2)
with: [21] More addition
base: [15] More addition
merging a
--- a/tests/test-touch.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-touch.t Tue Jun 23 16:50:06 2015 -0700
@@ -86,3 +86,26 @@
o 4:[0-9a-f]{12} a (re)
+check move data kept after rebase on touch:
+
+ $ touch gna1
+ $ hg commit -Am gna1
+ adding gna1
+ $ hg mv gna1 gna2
+ $ hg commit -m move
+ $ hg st -C --change=tip
+ A gna2
+ gna1
+ R gna1
+ $ hg up .^
+ 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+
+ $ hg touch
+ 1 new unstable changesets
+
+ $ hg rebase -s 11 -d 12
+ rebasing 11:* "move" (glob)
+ $ hg st -C --change=tip
+ A gna2
+ gna1
+ R gna1
--- a/tests/test-tutorial.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-tutorial.t Tue Jun 23 16:50:06 2015 -0700
@@ -243,7 +243,9 @@
$ hg diff
$ hg rebase --dest 9ca060c80d74 --source 4d5dc8187023
+ rebasing 1:4d5dc8187023 "adding condiment"
merging shopping
+ rebasing 4:9d0363b81950 "adding fruit"
merging shopping
@@ -348,6 +350,7 @@
$ hg up 'p1(10b8aeaa8cc8)' # going on "bathroom stuff" parent
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg grab fac207dec9f5 # moving "SPAM SPAM" to the working directory parent
+ rebasing 10:fac207dec9f5 "SPAM SPAM" (tip)
merging shopping
? files updated, 0 files merged, 0 files removed, 0 files unresolved (glob)
$ hg log -G
@@ -403,11 +406,13 @@
adding manifests
adding file changes
added 3 changesets with 3 changes to 1 files
- pushing 6 obsolescence markers (487 bytes)
+ pushing 6 obsolescence markers (* bytes) (glob)
+ 6 obsolescence markers added
for simplicity sake we get the bathroom change in line again
$ hg grab 10b8aeaa8cc8
+ rebasing 9:10b8aeaa8cc8 "bathroom stuff"
merging shopping
? files updated, 0 files merged, 0 files removed, 0 files unresolved (glob)
$ hg phase --draft .
@@ -511,6 +516,7 @@
$ cd ../remote
$ hg -R ../local/ showconfig phases
+ [1]
the localrepo does not have any specific configuration for `phases.publish`. It
is ``true`` by default.
@@ -732,7 +738,8 @@
adding manifests
adding file changes
added 2 changesets with 2 changes to 1 files (+1 heads)
- pushing 10 obsolescence markers (803 bytes)
+ pushing 10 obsolescence markers (* bytes) (glob)
+ 3 obsolescence markers added
remote get a warning that current working directory is based on an obsolete changeset
--- a/tests/test-uncommit.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-uncommit.t Tue Jun 23 16:50:06 2015 -0700
@@ -1,6 +1,5 @@
$ cat >> $HGRCPATH <<EOF
> [extensions]
- > hgext.rebase=
> hgext.graphlog=
> EOF
$ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
@@ -347,6 +346,9 @@
$ hg cat b --rev 0
b: no such file in rev 07f494440405
[1]
+ $ hg uncommit --rev . b
+ abort: cannot uncommit to parent changeset
+ [255]
$ hg uncommit --rev 0 b
$ hg cat b --rev .
b: no such file in rev 5b27f6b17da2
--- a/tests/test-userguide.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-userguide.t Tue Jun 23 16:50:06 2015 -0700
@@ -18,7 +18,7 @@
example 2: unsafe amend with plain vanilla Mercurial: the original
commit is stripped
$ hg commit --amend -u alice -d '1 0' -m 'implement feature Y'
- saved backup bundle to $TESTTMP/t/.hg/strip-backup/6e725fd2be6f-amend-backup.hg (glob)
+ saved backup bundle to $TESTTMP/t/.hg/strip-backup/6e725fd2be6f-42cc74d4-amend-backup.hg (glob)
$ hg log -r 23fe4ac6d3f1
abort: unknown revision '23fe4ac6d3f1'!
[255]
@@ -38,7 +38,8 @@
$ echo 'tweak feature Y' >> file1.c
$ hg commit --amend -u alice -d '2 0' -m 'implement feature Y'
$ hg shortlog -q -r fe0ecd3bd2a4
- abort: unknown revision 'fe0ecd3bd2a4'!
+ abort: hidden revision 'fe0ecd3bd2a4'!
+ (use --hidden to access hidden revisions)
[255]
$ hg --hidden shortlog -G
@ 3:934359450037 draft implement feature Y
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-wireproto-bundle1.t Tue Jun 23 16:50:06 2015 -0700
@@ -0,0 +1,100 @@
+
+ $ cat >> $HGRCPATH <<EOF
+ > [defaults]
+ > amend=-d "0 0"
+ > [ui]
+ > ssh=python "$TESTDIR/dummyssh"
+ > [phases]
+ > publish = False
+ > [extensions]
+ > EOF
+ $ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
+
+ $ mkcommit() {
+ > echo "$1" > "$1"
+ > hg add "$1"
+ > hg ci -m "add $1"
+ > }
+
+setup repo
+
+ $ hg init server
+
+ $ hg clone ssh://user@dummy/server client
+ no changes found
+ updating to branch default
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ cp -r client other
+
+Smoke testing
+===============
+
+ $ cd client
+ $ mkcommit 0
+ $ mkcommit a
+ $ hg push
+ pushing to ssh://user@dummy/server
+ searching for changes
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 2 changesets with 2 changes to 2 files
+ $ hg pull
+ pulling from ssh://user@dummy/server
+ searching for changes
+ no changes found
+ $ hg pull -R ../other
+ pulling from ssh://user@dummy/server
+ requesting all changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 2 changesets with 2 changes to 2 files
+ pull obsolescence markers
+ (run 'hg update' to get a working copy)
+ $ hg push -R ../other
+ pushing to ssh://user@dummy/server
+ searching for changes
+ no changes found
+ [1]
+
+Push
+=============
+
+ $ echo 'A' > a
+ $ hg amend
+ $ hg push
+ pushing to ssh://user@dummy/server
+ searching for changes
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 1 changesets with 1 changes to 1 files (+1 heads)
+ pushing 2 obsolescence markers (* bytes) (glob)
+ remote: 2 obsolescence markers added
+ $ hg push
+ pushing to ssh://user@dummy/server
+ searching for changes
+ no changes found
+ [1]
+
+Pull
+=============
+
+ $ hg -R ../other pull
+ pulling from ssh://user@dummy/server
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to [12] files \(\+1 heads\) (re)
+ pull obsolescence markers
+ 2 obsolescence markers added
+ (run 'hg heads' to see heads)
+ $ hg -R ../other pull
+ pulling from ssh://user@dummy/server
+ searching for changes
+ no changes found
+
+ $ cd ..
+
--- a/tests/test-wireproto.t Tue Jun 23 16:49:24 2015 -0700
+++ b/tests/test-wireproto.t Tue Jun 23 16:50:06 2015 -0700
@@ -2,12 +2,14 @@
$ cat >> $HGRCPATH <<EOF
> [defaults]
> amend=-d "0 0"
+ > [experimental]
+ > obsmarkers-exchange-debug=true
+ > bundle2-exp=true
> [ui]
> ssh=python "$TESTDIR/dummyssh"
> [phases]
> publish = False
> [extensions]
- > hgext.rebase=
> EOF
$ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
@@ -51,7 +53,6 @@
adding manifests
adding file changes
added 2 changesets with 2 changes to 2 files
- pull obsolescence markers
(run 'hg update' to get a working copy)
$ hg push -R ../other
pushing to ssh://user@dummy/server
@@ -71,7 +72,8 @@
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files (+1 heads)
- pushing 2 obsolescence markers (171 bytes)
+ remote: obsmarker-exchange: 139 bytes received
+ remote: 2 new obsolescence markers
$ hg push
pushing to ssh://user@dummy/server
searching for changes
@@ -88,13 +90,63 @@
adding manifests
adding file changes
added 1 changesets with 1 changes to [12] files \(\+1 heads\) (re)
- pull obsolescence markers
- 2 obsolescence markers added
- (run 'hg heads' to see heads)
+ obsmarker-exchange: 139 bytes received
+ 2 new obsolescence markers
+ (run 'hg heads' to see heads, 'hg merge' to merge)
$ hg -R ../other pull
pulling from ssh://user@dummy/server
searching for changes
no changes found
+Test some markers discovery
+===========================
+
+ $ echo c > C
+ $ hg add C
+ $ hg commit -m C
+ $ echo c >> C
+ $ hg amend
+ $ hg push
+ pushing to ssh://user@dummy/server
+ searching for changes
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 1 changesets with 1 changes to 1 files
+ remote: obsmarker-exchange: 139 bytes received
+ remote: 2 new obsolescence markers
+ $ hg -R ../other pull
+ pulling from ssh://user@dummy/server
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
+ obsmarker-exchange: 139 bytes received
+ 2 new obsolescence markers
+ (run 'hg update' to get a working copy)
+
+some common hidden
+
+ $ hg touch .
+ $ hg push
+ pushing to ssh://user@dummy/server
+ searching for changes
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 1 changesets with 0 changes to 1 files (+1 heads)
+ remote: obsmarker-exchange: 208 bytes received
+ remote: 1 new obsolescence markers
+ $ hg -R ../other pull
+ pulling from ssh://user@dummy/server
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 0 changes to 3 files (+1 heads)
+ obsmarker-exchange: 208 bytes received
+ 1 new obsolescence markers
+ (run 'hg heads' to see heads, 'hg merge' to merge)
+
$ cd ..
-