diff --git a/doc/users/whats_new/path_simplification_updates.rst b/doc/users/whats_new/path_simplification_updates.rst
new file mode 100644
index 00000000000..20acd227e2f
--- /dev/null
+++ b/doc/users/whats_new/path_simplification_updates.rst
@@ -0,0 +1,24 @@
+Path simplification updates
+---------------------------
+
+Line simplification controlled by the ``path.simplify`` and
+``path.simplify_threshold`` parameters has been improved. You should
+notice better rendering performance when plotting large amounts of
+data (as long as the above parameters are set accordingly). Only the
+line segment portion of paths will be simplified -- if you are also
+drawing markers and experiencing problems with rendering speed, you
+should consider using the ``markevery`` option to ``plot``.
+See the :ref:`performance` section in the usage tutorial for more
+information.
+
+The simplification works by iteratively merging line segments
+into a single vector until the next line segment's perpendicular
+distance to the vector (measured in display-coordinate space)
+is greater than the ``path.simplify_threshold`` parameter. Thus, higher
+values of ``path.simplify_threshold`` result in quicker rendering times.
+If you are plotting just to explore data and not for publication quality,
+pixel perfect plots, then a value of ``1.0`` can be safely used. If you
+want to make sure your plot reflects your data *exactly*, then you should
+set ``path.simplify`` to false and/or ``path.simplify_threshold`` to ``0``.
+Matplotlib currently defaults to a conservative value of ``1/9``, smaller
+values are unlikely to cause any visible differences in your plots.
diff --git a/lib/matplotlib/path.py b/lib/matplotlib/path.py
index 00b97e88b7f..4216f3a9e1b 100644
--- a/lib/matplotlib/path.py
+++ b/lib/matplotlib/path.py
@@ -206,12 +206,13 @@ def _fast_from_codes_and_verts(cls, verts, codes, internals=None):
return pth
def _update_values(self):
+ self._simplify_threshold = rcParams['path.simplify_threshold']
self._should_simplify = (
+ self._simplify_threshold > 0 and
rcParams['path.simplify'] and
- (len(self._vertices) >= 128 and
- (self._codes is None or np.all(self._codes <= Path.LINETO)))
+ len(self._vertices) >= 128 and
+ (self._codes is None or np.all(self._codes <= Path.LINETO))
)
- self._simplify_threshold = rcParams['path.simplify_threshold']
self._has_nonfinite = not np.isfinite(self._vertices).all()
@property
diff --git a/lib/matplotlib/tests/baseline_images/test_axes/angle_spectrum_freqs.png b/lib/matplotlib/tests/baseline_images/test_axes/angle_spectrum_freqs.png
index 39ef1f843dd..63289dfe6c5 100644
Binary files a/lib/matplotlib/tests/baseline_images/test_axes/angle_spectrum_freqs.png and b/lib/matplotlib/tests/baseline_images/test_axes/angle_spectrum_freqs.png differ
diff --git a/lib/matplotlib/tests/baseline_images/test_axes/angle_spectrum_noise.png b/lib/matplotlib/tests/baseline_images/test_axes/angle_spectrum_noise.png
index 434bbbf7d67..de7ab50015f 100644
Binary files a/lib/matplotlib/tests/baseline_images/test_axes/angle_spectrum_noise.png and b/lib/matplotlib/tests/baseline_images/test_axes/angle_spectrum_noise.png differ
diff --git a/lib/matplotlib/tests/baseline_images/test_axes/contour_colorbar.svg b/lib/matplotlib/tests/baseline_images/test_axes/contour_colorbar.svg
index 1d39063db83..def44e91786 100644
--- a/lib/matplotlib/tests/baseline_images/test_axes/contour_colorbar.svg
+++ b/lib/matplotlib/tests/baseline_images/test_axes/contour_colorbar.svg
@@ -27,7 +27,7 @@ z
" style="fill:#ffffff;"/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
+
-
-
-
-
-
+
-
-
-
-
-
+
-
-
-
-
-
+
-
-
-
-
-
+
-
-
-
-
-
+
-
-
-
-
-
-
+
-
-
-
-
+
-
-
-
-
+
-
-
-
+
-
-
-
+
-
-
+
-
-
+
-
+" id="m368fc901b1" style="stroke:#000000;stroke-width:0.5;"/>
-
+
+" id="mc63e59a608" style="stroke:#000000;stroke-width:0.5;"/>
-
+
@@ -17747,6 +17742,7 @@ Q 40.828125 74.21875 47.359375 69.109375
Q 53.90625 64.015625 53.90625 55.328125
Q 53.90625 49.265625 50.4375 45.09375
Q 46.96875 40.921875 40.578125 39.3125
+z
" id="DejaVuSans-33"/>
@@ -17758,12 +17754,12 @@ Q 46.96875 40.921875 40.578125 39.3125
-
+
-
+
@@ -17791,6 +17787,7 @@ Q 53.21875 48.921875 51.53125 44.890625
Q 49.859375 40.875 45.40625 35.40625
Q 44.1875 33.984375 37.640625 27.21875
Q 31.109375 20.453125 19.1875 8.296875
+z
" id="DejaVuSans-32"/>
@@ -17802,12 +17799,12 @@ Q 31.109375 20.453125 19.1875 8.296875
-
+
-
+
@@ -17836,12 +17833,12 @@ z
-
+
-
+
@@ -17856,6 +17853,7 @@ Q 39.453125 6.390625 43.28125 13.890625
Q 47.125 21.390625 47.125 36.375
Q 47.125 51.421875 43.28125 58.90625
Q 39.453125 66.40625 31.78125 66.40625
+z
M 31.78125 74.21875
Q 44.046875 74.21875 50.515625 64.515625
Q 56.984375 54.828125 56.984375 36.375
@@ -17865,6 +17863,7 @@ Q 19.53125 -1.421875 13.0625 8.265625
Q 6.59375 17.96875 6.59375 36.375
Q 6.59375 54.828125 13.0625 64.515625
Q 19.53125 74.21875 31.78125 74.21875
+z
" id="DejaVuSans-30"/>
@@ -17875,12 +17874,12 @@ Q 19.53125 74.21875 31.78125 74.21875
-
+
-
+
@@ -17893,12 +17892,12 @@ Q 19.53125 74.21875 31.78125 74.21875
-
+
-
+
@@ -17911,12 +17910,12 @@ Q 19.53125 74.21875 31.78125 74.21875
-
+
-
+
@@ -17929,12 +17928,12 @@ Q 19.53125 74.21875 31.78125 74.21875
-
+
-
+
@@ -17966,12 +17965,12 @@ z
-
+
-
+
@@ -18014,20 +18013,20 @@ z
+" id="m556f96d829" style="stroke:#000000;stroke-width:0.5;"/>
-
+
+" id="m27e32ca04a" style="stroke:#000000;stroke-width:0.5;"/>
-
+
@@ -18041,12 +18040,12 @@ L -4 0
-
+
-
+
@@ -18060,12 +18059,12 @@ L -4 0
-
+
-
+
@@ -18079,12 +18078,12 @@ L -4 0
-
+
-
+
@@ -18097,12 +18096,12 @@ L -4 0
-
+
-
+
@@ -18115,12 +18114,12 @@ L -4 0
-
+
-
+
@@ -18133,12 +18132,12 @@ L -4 0
-
+
-
+
@@ -18151,12 +18150,12 @@ L -4 0
-
+
-
+
@@ -18169,12 +18168,12 @@ L -4 0
-
+
-
+
@@ -18188,7 +18187,7 @@ L -4 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
@@ -18384,7 +18383,7 @@ z
-
+
@@ -18405,6 +18404,7 @@ Q 39.65625 6.390625 43.53125 10.953125
Q 47.40625 15.53125 47.40625 23.390625
Q 47.40625 31.296875 43.53125 35.828125
Q 39.65625 40.375 33.015625 40.375
+z
M 52.59375 71.296875
L 52.59375 62.3125
Q 48.875 64.0625 45.09375 64.984375
@@ -18423,6 +18423,7 @@ Q 6.984375 53.65625 15.1875 63.9375
Q 23.390625 74.21875 37.203125 74.21875
Q 40.921875 74.21875 44.703125 73.484375
Q 48.484375 72.75 52.59375 71.296875
+z
" id="DejaVuSans-36"/>
@@ -18436,7 +18437,7 @@ Q 48.484375 72.75 52.59375 71.296875
-
+
@@ -18452,7 +18453,7 @@ Q 48.484375 72.75 52.59375 71.296875
-
+
@@ -18467,6 +18468,7 @@ Q 38.8125 6.390625 42.859375 10.171875
Q 46.921875 13.96875 46.921875 20.515625
Q 46.921875 27.09375 42.890625 30.859375
Q 38.875 34.625 31.78125 34.625
+z
M 21.921875 38.8125
Q 15.578125 40.375 12.03125 44.71875
Q 8.5 49.078125 8.5 55.328125
@@ -18484,6 +18486,7 @@ Q 19.734375 -1.421875 13.25 4.234375
Q 6.78125 9.90625 6.78125 20.515625
Q 6.78125 27.484375 10.78125 32.3125
Q 14.796875 37.15625 21.921875 38.8125
+z
M 18.3125 54.390625
Q 18.3125 48.734375 21.84375 45.5625
Q 25.390625 42.390625 31.78125 42.390625
@@ -18493,6 +18496,7 @@ Q 45.3125 60.0625 41.71875 63.234375
Q 38.140625 66.40625 31.78125 66.40625
Q 25.390625 66.40625 21.84375 63.234375
Q 18.3125 60.0625 18.3125 54.390625
+z
" id="DejaVuSans-38"/>
@@ -18506,7 +18510,7 @@ Q 18.3125 60.0625 18.3125 54.390625
-
+
@@ -18522,7 +18526,7 @@ Q 18.3125 60.0625 18.3125 54.390625
-
+
@@ -18537,7 +18541,7 @@ Q 18.3125 60.0625 18.3125 54.390625
-
+
@@ -18552,7 +18556,7 @@ Q 18.3125 60.0625 18.3125 54.390625
-
+
@@ -18567,7 +18571,7 @@ Q 18.3125 60.0625 18.3125 54.390625
-
+
@@ -18582,7 +18586,7 @@ Q 18.3125 60.0625 18.3125 54.390625
-
+
@@ -18598,10 +18602,10 @@ Q 18.3125 60.0625 18.3125 54.390625
-
+
-
+
diff --git a/lib/matplotlib/tests/baseline_images/test_axes/csd_freqs.png b/lib/matplotlib/tests/baseline_images/test_axes/csd_freqs.png
index 96f63a8ab43..ef520e234df 100644
Binary files a/lib/matplotlib/tests/baseline_images/test_axes/csd_freqs.png and b/lib/matplotlib/tests/baseline_images/test_axes/csd_freqs.png differ
diff --git a/lib/matplotlib/tests/baseline_images/test_axes/csd_noise.png b/lib/matplotlib/tests/baseline_images/test_axes/csd_noise.png
index d782034b6d5..ab70b3b79b6 100644
Binary files a/lib/matplotlib/tests/baseline_images/test_axes/csd_noise.png and b/lib/matplotlib/tests/baseline_images/test_axes/csd_noise.png differ
diff --git a/lib/matplotlib/tests/baseline_images/test_axes/magnitude_spectrum_freqs_linear.png b/lib/matplotlib/tests/baseline_images/test_axes/magnitude_spectrum_freqs_linear.png
index 9dec3eef433..f3e64f8ad5d 100644
Binary files a/lib/matplotlib/tests/baseline_images/test_axes/magnitude_spectrum_freqs_linear.png and b/lib/matplotlib/tests/baseline_images/test_axes/magnitude_spectrum_freqs_linear.png differ
diff --git a/lib/matplotlib/tests/baseline_images/test_axes/magnitude_spectrum_noise_dB.png b/lib/matplotlib/tests/baseline_images/test_axes/magnitude_spectrum_noise_dB.png
index a8ceb982774..3fe82e790f9 100644
Binary files a/lib/matplotlib/tests/baseline_images/test_axes/magnitude_spectrum_noise_dB.png and b/lib/matplotlib/tests/baseline_images/test_axes/magnitude_spectrum_noise_dB.png differ
diff --git a/lib/matplotlib/tests/baseline_images/test_axes/magnitude_spectrum_noise_linear.png b/lib/matplotlib/tests/baseline_images/test_axes/magnitude_spectrum_noise_linear.png
index 95a64798607..dd1ccf47106 100644
Binary files a/lib/matplotlib/tests/baseline_images/test_axes/magnitude_spectrum_noise_linear.png and b/lib/matplotlib/tests/baseline_images/test_axes/magnitude_spectrum_noise_linear.png differ
diff --git a/lib/matplotlib/tests/baseline_images/test_axes/markevery_polar.pdf b/lib/matplotlib/tests/baseline_images/test_axes/markevery_polar.pdf
index fd0a2fa90bb..a4145935031 100644
Binary files a/lib/matplotlib/tests/baseline_images/test_axes/markevery_polar.pdf and b/lib/matplotlib/tests/baseline_images/test_axes/markevery_polar.pdf differ
diff --git a/lib/matplotlib/tests/baseline_images/test_axes/markevery_polar.png b/lib/matplotlib/tests/baseline_images/test_axes/markevery_polar.png
index 68198655a37..9524d221552 100644
Binary files a/lib/matplotlib/tests/baseline_images/test_axes/markevery_polar.png and b/lib/matplotlib/tests/baseline_images/test_axes/markevery_polar.png differ
diff --git a/lib/matplotlib/tests/baseline_images/test_axes/markevery_polar.svg b/lib/matplotlib/tests/baseline_images/test_axes/markevery_polar.svg
index 443dd4c2dca..02e717e4593 100644
--- a/lib/matplotlib/tests/baseline_images/test_axes/markevery_polar.svg
+++ b/lib/matplotlib/tests/baseline_images/test_axes/markevery_polar.svg
@@ -32,7 +32,7 @@ z
" style="fill:#ffffff;"/>
-
+" id="ma7791c2131" style="stroke:#000000;stroke-width:0.5;"/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -428,72 +428,71 @@ C 127.684647 43.2 118.128928 47.158108 111.084439 54.202597
C 104.03995 61.247087 100.081841 70.802805 100.081841 80.765217
C 100.081841 90.727629 104.03995 100.283348 111.084439 107.327837
C 118.128928 114.372327 127.684647 118.330435 137.647059 118.330435
-L 137.647059 118.330435
z
" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -933,7 +930,7 @@ z
" style="fill:#ffffff;"/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1141,72 +1138,71 @@ C 285.237588 43.2 275.681869 47.158108 268.63738 54.202597
C 261.592891 61.247087 257.634783 70.802805 257.634783 80.765217
C 257.634783 90.727629 261.592891 100.283348 268.63738 107.327837
C 275.681869 114.372327 285.237588 118.330435 295.2 118.330435
-L 295.2 118.330435
z
" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -1646,7 +1640,7 @@ z
" style="fill:#ffffff;"/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1851,72 +1845,71 @@ C 442.790529 43.2 433.23481 47.158108 426.190321 54.202597
C 419.145832 61.247087 415.187724 70.802805 415.187724 80.765217
C 415.187724 90.727629 419.145832 100.283348 426.190321 107.327837
C 433.23481 114.372327 442.790529 118.330435 452.752941 118.330435
-L 452.752941 118.330435
z
" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -2356,7 +2347,7 @@ z
" style="fill:#ffffff;"/>
-
-
-
-
-
+
+
+
+
@@ -2542,72 +2533,71 @@ C 127.684647 133.356522 118.128928 137.31463 111.084439 144.359119
C 104.03995 151.403608 100.081841 160.959327 100.081841 170.921739
C 100.081841 180.884151 104.03995 190.43987 111.084439 197.484359
C 118.128928 204.528848 127.684647 208.486957 137.647059 208.486957
-L 137.647059 208.486957
z
" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -3047,7 +3035,7 @@ z
" style="fill:#ffffff;"/>
-
-
-
-
+
+
+
@@ -3232,72 +3220,71 @@ C 285.237588 133.356522 275.681869 137.31463 268.63738 144.359119
C 261.592891 151.403608 257.634783 160.959327 257.634783 170.921739
C 257.634783 180.884151 261.592891 190.43987 268.63738 197.484359
C 275.681869 204.528848 285.237588 208.486957 295.2 208.486957
-L 295.2 208.486957
z
" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -3737,7 +3722,7 @@ z
" style="fill:#ffffff;"/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -3954,72 +3939,71 @@ C 442.790529 133.356522 433.23481 137.31463 426.190321 144.359119
C 419.145832 151.403608 415.187724 160.959327 415.187724 170.921739
C 415.187724 180.884151 419.145832 190.43987 426.190321 197.484359
C 433.23481 204.528848 442.790529 208.486957 452.752941 208.486957
-L 452.752941 208.486957
z
" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -4459,7 +4441,7 @@ z
" style="fill:#ffffff;"/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -4676,72 +4658,71 @@ C 127.684647 223.513043 118.128928 227.471152 111.084439 234.515641
C 104.03995 241.56013 100.081841 251.115849 100.081841 261.078261
C 100.081841 271.040673 104.03995 280.596392 111.084439 287.640881
C 118.128928 294.68537 127.684647 298.643478 137.647059 298.643478
-L 137.647059 298.643478
z
" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -5181,7 +5160,7 @@ z
" style="fill:#ffffff;"/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -5376,72 +5355,71 @@ C 285.237588 223.513043 275.681869 227.471152 268.63738 234.515641
C 261.592891 241.56013 257.634783 251.115849 257.634783 261.078261
C 257.634783 271.040673 261.592891 280.596392 268.63738 287.640881
C 275.681869 294.68537 285.237588 298.643478 295.2 298.643478
-L 295.2 298.643478
z
" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -5881,7 +5857,7 @@ z
" style="fill:#ffffff;"/>
-
-
-
-
-
+
+
+
+
@@ -6067,72 +6043,71 @@ C 442.790529 223.513043 433.23481 227.471152 426.190321 234.515641
C 419.145832 241.56013 415.187724 251.115849 415.187724 261.078261
C 415.187724 271.040673 419.145832 280.596392 426.190321 287.640881
C 433.23481 294.68537 442.790529 298.643478 452.752941 298.643478
-L 452.752941 298.643478
z
" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -6572,7 +6545,7 @@ z
" style="fill:#ffffff;"/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -6789,72 +6762,71 @@ C 127.684647 313.669565 118.128928 317.627673 111.084439 324.672163
C 104.03995 331.716652 100.081841 341.272371 100.081841 351.234783
C 100.081841 361.197195 104.03995 370.752913 111.084439 377.797403
C 118.128928 384.841892 127.684647 388.8 137.647059 388.8
-L 137.647059 388.8
z
" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -7294,7 +7264,7 @@ z
" style="fill:#ffffff;"/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -7507,72 +7477,71 @@ C 285.237588 313.669565 275.681869 317.627673 268.63738 324.672163
C 261.592891 331.716652 257.634783 341.272371 257.634783 351.234783
C 257.634783 361.197195 261.592891 370.752913 268.63738 377.797403
C 275.681869 384.841892 285.237588 388.8 295.2 388.8
-L 295.2 388.8
z
" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+" style="fill:none;stroke:#ee8d18;stroke-linecap:square;stroke-width:3;"/>
-
@@ -301,10 +301,10 @@ C -2.683901 -1.55874 -3 -0.795609 -3 0
C -3 0.795609 -2.683901 1.55874 -2.12132 2.12132
C -1.55874 2.683901 -0.795609 3 0 3
z
-" id="m0f5ad5e540" style="stroke:#000000;stroke-width:0.500000;"/>
+" id="mbb289507d7" style="stroke:#000000;stroke-width:0.5;"/>
-
-
+
+
@@ -317,16 +317,15 @@ C 249.372904 43.2 205.416598 61.407298 173.011948 93.811948
C 140.607298 126.216598 122.4 170.172904 122.4 216
C 122.4 261.827096 140.607298 305.783402 173.011948 338.188052
C 205.416598 370.592702 249.372904 388.8 295.2 388.8
-L 295.2 388.8
z
" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -340,6 +339,7 @@ Q 39.453125 6.390625 43.28125 13.890625
Q 47.125 21.390625 47.125 36.375
Q 47.125 51.421875 43.28125 58.90625
Q 39.453125 66.40625 31.78125 66.40625
+z
M 31.78125 74.21875
Q 44.046875 74.21875 50.515625 64.515625
Q 56.984375 54.828125 56.984375 36.375
@@ -349,6 +349,7 @@ Q 19.53125 -1.421875 13.0625 8.265625
Q 6.59375 17.96875 6.59375 36.375
Q 6.59375 54.828125 13.0625 64.515625
Q 19.53125 74.21875 31.78125 74.21875
+z
" id="DejaVuSans-30"/>
-
+
-
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -429,18 +432,18 @@ Q 14.890625 38.140625 10.796875 36.28125
z
" id="DejaVuSans-35"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -463,6 +466,7 @@ Q 56.59375 19.140625 48.40625 8.859375
Q 40.234375 -1.421875 26.421875 -1.421875
Q 22.703125 -1.421875 18.890625 -0.6875
Q 15.09375 0.046875 10.984375 1.515625
+z
M 30.609375 32.421875
Q 37.25 32.421875 41.125 36.953125
Q 45.015625 41.5 45.015625 49.421875
@@ -472,20 +476,21 @@ Q 23.96875 66.40625 20.09375 61.84375
Q 16.21875 57.28125 16.21875 49.421875
Q 16.21875 41.5 20.09375 36.953125
Q 23.96875 32.421875 30.609375 32.421875
+z
" id="DejaVuSans-39"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -533,21 +538,22 @@ Q 40.828125 74.21875 47.359375 69.109375
Q 53.90625 64.015625 53.90625 55.328125
Q 53.90625 49.265625 50.4375 45.09375
Q 46.96875 40.921875 40.578125 39.3125
+z
" id="DejaVuSans-33"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -561,6 +567,7 @@ Q 38.8125 6.390625 42.859375 10.171875
Q 46.921875 13.96875 46.921875 20.515625
Q 46.921875 27.09375 42.890625 30.859375
Q 38.875 34.625 31.78125 34.625
+z
M 21.921875 38.8125
Q 15.578125 40.375 12.03125 44.71875
Q 8.5 49.078125 8.5 55.328125
@@ -578,6 +585,7 @@ Q 19.734375 -1.421875 13.25 4.234375
Q 6.78125 9.90625 6.78125 20.515625
Q 6.78125 27.484375 10.78125 32.3125
Q 14.796875 37.15625 21.921875 38.8125
+z
M 18.3125 54.390625
Q 18.3125 48.734375 21.84375 45.5625
Q 25.390625 42.390625 31.78125 42.390625
@@ -587,21 +595,22 @@ Q 45.3125 60.0625 41.71875 63.234375
Q 38.140625 66.40625 31.78125 66.40625
Q 25.390625 66.40625 21.84375 63.234375
Q 18.3125 60.0625 18.3125 54.390625
+z
" id="DejaVuSans-38"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -628,21 +637,22 @@ Q 53.21875 48.921875 51.53125 44.890625
Q 49.859375 40.875 45.40625 35.40625
Q 44.1875 33.984375 37.640625 27.21875
Q 31.109375 20.453125 19.1875 8.296875
+z
" id="DejaVuSans-32"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -657,27 +667,27 @@ L 8.203125 64.59375
z
" id="DejaVuSans-37"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
-
+
+
+
@@ -685,8 +695,7 @@ L 417.388052 338.188052
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -790,17 +799,16 @@ L 10.6875 0
z
" id="DejaVuSans-2e"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -1101,6 +1109,7 @@ Q 39.65625 6.390625 43.53125 10.953125
Q 47.40625 15.53125 47.40625 23.390625
Q 47.40625 31.296875 43.53125 35.828125
Q 39.65625 40.375 33.015625 40.375
+z
M 52.59375 71.296875
L 52.59375 62.3125
Q 48.875 64.0625 45.09375 64.984375
@@ -1119,18 +1128,19 @@ Q 6.984375 53.65625 15.1875 63.9375
Q 23.390625 74.21875 37.203125 74.21875
Q 40.921875 74.21875 44.703125 73.484375
Q 48.484375 72.75 52.59375 71.296875
+z
" id="DejaVuSans-36"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
@@ -1564,6 +1574,7 @@ Q 14.9375 54.109375 19.578125 55.046875
Q 24.21875 56 28.609375 56
Q 40.484375 56 46.34375 49.84375
Q 52.203125 43.703125 52.203125 31.203125
+z
" id="DejaVuSans-61"/>
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
-
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -64,6 +63,7 @@ Q 39.453125 6.390625 43.28125 13.890625
Q 47.125 21.390625 47.125 36.375
Q 47.125 51.421875 43.28125 58.90625
Q 39.453125 66.40625 31.78125 66.40625
+z
M 31.78125 74.21875
Q 44.046875 74.21875 50.515625 64.515625
Q 56.984375 54.828125 56.984375 36.375
@@ -73,6 +73,7 @@ Q 19.53125 -1.421875 13.0625 8.265625
Q 6.59375 17.96875 6.59375 36.375
Q 6.59375 54.828125 13.0625 64.515625
Q 19.53125 74.21875 31.78125 74.21875
+z
" id="DejaVuSans-30"/>
-
+
-
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -153,18 +156,18 @@ Q 14.890625 38.140625 10.796875 36.28125
z
" id="DejaVuSans-35"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -187,6 +190,7 @@ Q 56.59375 19.140625 48.40625 8.859375
Q 40.234375 -1.421875 26.421875 -1.421875
Q 22.703125 -1.421875 18.890625 -0.6875
Q 15.09375 0.046875 10.984375 1.515625
+z
M 30.609375 32.421875
Q 37.25 32.421875 41.125 36.953125
Q 45.015625 41.5 45.015625 49.421875
@@ -196,20 +200,21 @@ Q 23.96875 66.40625 20.09375 61.84375
Q 16.21875 57.28125 16.21875 49.421875
Q 16.21875 41.5 20.09375 36.953125
Q 23.96875 32.421875 30.609375 32.421875
+z
" id="DejaVuSans-39"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -257,21 +262,22 @@ Q 40.828125 74.21875 47.359375 69.109375
Q 53.90625 64.015625 53.90625 55.328125
Q 53.90625 49.265625 50.4375 45.09375
Q 46.96875 40.921875 40.578125 39.3125
+z
" id="DejaVuSans-33"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -285,6 +291,7 @@ Q 38.8125 6.390625 42.859375 10.171875
Q 46.921875 13.96875 46.921875 20.515625
Q 46.921875 27.09375 42.890625 30.859375
Q 38.875 34.625 31.78125 34.625
+z
M 21.921875 38.8125
Q 15.578125 40.375 12.03125 44.71875
Q 8.5 49.078125 8.5 55.328125
@@ -302,6 +309,7 @@ Q 19.734375 -1.421875 13.25 4.234375
Q 6.78125 9.90625 6.78125 20.515625
Q 6.78125 27.484375 10.78125 32.3125
Q 14.796875 37.15625 21.921875 38.8125
+z
M 18.3125 54.390625
Q 18.3125 48.734375 21.84375 45.5625
Q 25.390625 42.390625 31.78125 42.390625
@@ -311,21 +319,22 @@ Q 45.3125 60.0625 41.71875 63.234375
Q 38.140625 66.40625 31.78125 66.40625
Q 25.390625 66.40625 21.84375 63.234375
Q 18.3125 60.0625 18.3125 54.390625
+z
" id="DejaVuSans-38"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -352,21 +361,22 @@ Q 53.21875 48.921875 51.53125 44.890625
Q 49.859375 40.875 45.40625 35.40625
Q 44.1875 33.984375 37.640625 27.21875
Q 31.109375 20.453125 19.1875 8.296875
+z
" id="DejaVuSans-32"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -381,27 +391,27 @@ L 8.203125 64.59375
z
" id="DejaVuSans-37"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
-
+
+
+
@@ -409,8 +419,7 @@ L 417.388052 338.188052
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -514,17 +523,16 @@ L 10.6875 0
z
" id="DejaVuSans-2e"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -825,6 +833,7 @@ Q 39.65625 6.390625 43.53125 10.953125
Q 47.40625 15.53125 47.40625 23.390625
Q 47.40625 31.296875 43.53125 35.828125
Q 39.65625 40.375 33.015625 40.375
+z
M 52.59375 71.296875
L 52.59375 62.3125
Q 48.875 64.0625 45.09375 64.984375
@@ -843,18 +852,19 @@ Q 6.984375 53.65625 15.1875 63.9375
Q 23.390625 74.21875 37.203125 74.21875
Q 40.921875 74.21875 44.703125 73.484375
Q 48.484375 72.75 52.59375 71.296875
+z
" id="DejaVuSans-36"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
@@ -1246,7 +1256,7 @@ L 468 216
-
+
-
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -301,6 +300,7 @@ Q 39.453125 6.390625 43.28125 13.890625
Q 47.125 21.390625 47.125 36.375
Q 47.125 51.421875 43.28125 58.90625
Q 39.453125 66.40625 31.78125 66.40625
+z
M 31.78125 74.21875
Q 44.046875 74.21875 50.515625 64.515625
Q 56.984375 54.828125 56.984375 36.375
@@ -310,6 +310,7 @@ Q 19.53125 -1.421875 13.0625 8.265625
Q 6.59375 17.96875 6.59375 36.375
Q 6.59375 54.828125 13.0625 64.515625
Q 19.53125 74.21875 31.78125 74.21875
+z
" id="DejaVuSans-30"/>
-
+
-
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -390,18 +393,18 @@ Q 14.890625 38.140625 10.796875 36.28125
z
" id="DejaVuSans-35"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -424,6 +427,7 @@ Q 56.59375 19.140625 48.40625 8.859375
Q 40.234375 -1.421875 26.421875 -1.421875
Q 22.703125 -1.421875 18.890625 -0.6875
Q 15.09375 0.046875 10.984375 1.515625
+z
M 30.609375 32.421875
Q 37.25 32.421875 41.125 36.953125
Q 45.015625 41.5 45.015625 49.421875
@@ -433,20 +437,21 @@ Q 23.96875 66.40625 20.09375 61.84375
Q 16.21875 57.28125 16.21875 49.421875
Q 16.21875 41.5 20.09375 36.953125
Q 23.96875 32.421875 30.609375 32.421875
+z
" id="DejaVuSans-39"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -494,21 +499,22 @@ Q 40.828125 74.21875 47.359375 69.109375
Q 53.90625 64.015625 53.90625 55.328125
Q 53.90625 49.265625 50.4375 45.09375
Q 46.96875 40.921875 40.578125 39.3125
+z
" id="DejaVuSans-33"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -522,6 +528,7 @@ Q 38.8125 6.390625 42.859375 10.171875
Q 46.921875 13.96875 46.921875 20.515625
Q 46.921875 27.09375 42.890625 30.859375
Q 38.875 34.625 31.78125 34.625
+z
M 21.921875 38.8125
Q 15.578125 40.375 12.03125 44.71875
Q 8.5 49.078125 8.5 55.328125
@@ -539,6 +546,7 @@ Q 19.734375 -1.421875 13.25 4.234375
Q 6.78125 9.90625 6.78125 20.515625
Q 6.78125 27.484375 10.78125 32.3125
Q 14.796875 37.15625 21.921875 38.8125
+z
M 18.3125 54.390625
Q 18.3125 48.734375 21.84375 45.5625
Q 25.390625 42.390625 31.78125 42.390625
@@ -548,21 +556,22 @@ Q 45.3125 60.0625 41.71875 63.234375
Q 38.140625 66.40625 31.78125 66.40625
Q 25.390625 66.40625 21.84375 63.234375
Q 18.3125 60.0625 18.3125 54.390625
+z
" id="DejaVuSans-38"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -589,21 +598,22 @@ Q 53.21875 48.921875 51.53125 44.890625
Q 49.859375 40.875 45.40625 35.40625
Q 44.1875 33.984375 37.640625 27.21875
Q 31.109375 20.453125 19.1875 8.296875
+z
" id="DejaVuSans-32"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -618,27 +628,27 @@ L 8.203125 64.59375
z
" id="DejaVuSans-37"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
-
+
+
+
@@ -646,7 +656,7 @@ L 410.188052 338.188052
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -713,6 +723,7 @@ Q 39.65625 6.390625 43.53125 10.953125
Q 47.40625 15.53125 47.40625 23.390625
Q 47.40625 31.296875 43.53125 35.828125
Q 39.65625 40.375 33.015625 40.375
+z
M 52.59375 71.296875
L 52.59375 62.3125
Q 48.875 64.0625 45.09375 64.984375
@@ -731,19 +742,19 @@ Q 6.984375 53.65625 15.1875 63.9375
Q 23.390625 74.21875 37.203125 74.21875
Q 40.921875 74.21875 44.703125 73.484375
Q 48.484375 72.75 52.59375 71.296875
+z
" id="DejaVuSans-36"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
@@ -1842,7 +1851,7 @@ L 460.8 216
-
+
-
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -349,6 +347,7 @@ Q 39.453125 6.390625 43.28125 13.890625
Q 47.125 21.390625 47.125 36.375
Q 47.125 51.421875 43.28125 58.90625
Q 39.453125 66.40625 31.78125 66.40625
+z
M 31.78125 74.21875
Q 44.046875 74.21875 50.515625 64.515625
Q 56.984375 54.828125 56.984375 36.375
@@ -358,6 +357,7 @@ Q 19.53125 -1.421875 13.0625 8.265625
Q 6.59375 17.96875 6.59375 36.375
Q 6.59375 54.828125 13.0625 64.515625
Q 19.53125 74.21875 31.78125 74.21875
+z
" id="DejaVuSans-30"/>
-
+
-
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -438,18 +440,18 @@ Q 14.890625 38.140625 10.796875 36.28125
z
" id="DejaVuSans-35"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -472,6 +474,7 @@ Q 56.59375 19.140625 48.40625 8.859375
Q 40.234375 -1.421875 26.421875 -1.421875
Q 22.703125 -1.421875 18.890625 -0.6875
Q 15.09375 0.046875 10.984375 1.515625
+z
M 30.609375 32.421875
Q 37.25 32.421875 41.125 36.953125
Q 45.015625 41.5 45.015625 49.421875
@@ -481,20 +484,21 @@ Q 23.96875 66.40625 20.09375 61.84375
Q 16.21875 57.28125 16.21875 49.421875
Q 16.21875 41.5 20.09375 36.953125
Q 23.96875 32.421875 30.609375 32.421875
+z
" id="DejaVuSans-39"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -542,21 +546,22 @@ Q 40.828125 74.21875 47.359375 69.109375
Q 53.90625 64.015625 53.90625 55.328125
Q 53.90625 49.265625 50.4375 45.09375
Q 46.96875 40.921875 40.578125 39.3125
+z
" id="DejaVuSans-33"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -570,6 +575,7 @@ Q 38.8125 6.390625 42.859375 10.171875
Q 46.921875 13.96875 46.921875 20.515625
Q 46.921875 27.09375 42.890625 30.859375
Q 38.875 34.625 31.78125 34.625
+z
M 21.921875 38.8125
Q 15.578125 40.375 12.03125 44.71875
Q 8.5 49.078125 8.5 55.328125
@@ -587,6 +593,7 @@ Q 19.734375 -1.421875 13.25 4.234375
Q 6.78125 9.90625 6.78125 20.515625
Q 6.78125 27.484375 10.78125 32.3125
Q 14.796875 37.15625 21.921875 38.8125
+z
M 18.3125 54.390625
Q 18.3125 48.734375 21.84375 45.5625
Q 25.390625 42.390625 31.78125 42.390625
@@ -596,21 +603,22 @@ Q 45.3125 60.0625 41.71875 63.234375
Q 38.140625 66.40625 31.78125 66.40625
Q 25.390625 66.40625 21.84375 63.234375
Q 18.3125 60.0625 18.3125 54.390625
+z
" id="DejaVuSans-38"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -637,21 +645,22 @@ Q 53.21875 48.921875 51.53125 44.890625
Q 49.859375 40.875 45.40625 35.40625
Q 44.1875 33.984375 37.640625 27.21875
Q 31.109375 20.453125 19.1875 8.296875
+z
" id="DejaVuSans-32"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -666,27 +675,27 @@ L 8.203125 64.59375
z
" id="DejaVuSans-37"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
-
+
+
+
@@ -694,7 +703,7 @@ L 115.2 216
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -768,17 +777,16 @@ L 10.6875 0
z
" id="DejaVuSans-2e"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
@@ -1576,7 +1583,7 @@ L 165.811948 93.811948
-
+
-
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -71,6 +70,7 @@ Q 39.453125 6.390625 43.28125 13.890625
Q 47.125 21.390625 47.125 36.375
Q 47.125 51.421875 43.28125 58.90625
Q 39.453125 66.40625 31.78125 66.40625
+z
M 31.78125 74.21875
Q 44.046875 74.21875 50.515625 64.515625
Q 56.984375 54.828125 56.984375 36.375
@@ -80,6 +80,7 @@ Q 19.53125 -1.421875 13.0625 8.265625
Q 6.59375 17.96875 6.59375 36.375
Q 6.59375 54.828125 13.0625 64.515625
Q 19.53125 74.21875 31.78125 74.21875
+z
" id="DejaVuSans-30"/>
-
+
-
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -160,18 +163,18 @@ Q 14.890625 38.140625 10.796875 36.28125
z
" id="DejaVuSans-35"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -194,6 +197,7 @@ Q 56.59375 19.140625 48.40625 8.859375
Q 40.234375 -1.421875 26.421875 -1.421875
Q 22.703125 -1.421875 18.890625 -0.6875
Q 15.09375 0.046875 10.984375 1.515625
+z
M 30.609375 32.421875
Q 37.25 32.421875 41.125 36.953125
Q 45.015625 41.5 45.015625 49.421875
@@ -203,20 +207,21 @@ Q 23.96875 66.40625 20.09375 61.84375
Q 16.21875 57.28125 16.21875 49.421875
Q 16.21875 41.5 20.09375 36.953125
Q 23.96875 32.421875 30.609375 32.421875
+z
" id="DejaVuSans-39"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -264,21 +269,22 @@ Q 40.828125 74.21875 47.359375 69.109375
Q 53.90625 64.015625 53.90625 55.328125
Q 53.90625 49.265625 50.4375 45.09375
Q 46.96875 40.921875 40.578125 39.3125
+z
" id="DejaVuSans-33"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -292,6 +298,7 @@ Q 38.8125 6.390625 42.859375 10.171875
Q 46.921875 13.96875 46.921875 20.515625
Q 46.921875 27.09375 42.890625 30.859375
Q 38.875 34.625 31.78125 34.625
+z
M 21.921875 38.8125
Q 15.578125 40.375 12.03125 44.71875
Q 8.5 49.078125 8.5 55.328125
@@ -309,6 +316,7 @@ Q 19.734375 -1.421875 13.25 4.234375
Q 6.78125 9.90625 6.78125 20.515625
Q 6.78125 27.484375 10.78125 32.3125
Q 14.796875 37.15625 21.921875 38.8125
+z
M 18.3125 54.390625
Q 18.3125 48.734375 21.84375 45.5625
Q 25.390625 42.390625 31.78125 42.390625
@@ -318,21 +326,22 @@ Q 45.3125 60.0625 41.71875 63.234375
Q 38.140625 66.40625 31.78125 66.40625
Q 25.390625 66.40625 21.84375 63.234375
Q 18.3125 60.0625 18.3125 54.390625
+z
" id="DejaVuSans-38"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -359,21 +368,22 @@ Q 53.21875 48.921875 51.53125 44.890625
Q 49.859375 40.875 45.40625 35.40625
Q 44.1875 33.984375 37.640625 27.21875
Q 31.109375 20.453125 19.1875 8.296875
+z
" id="DejaVuSans-32"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -388,27 +398,27 @@ L 8.203125 64.59375
z
" id="DejaVuSans-37"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
-
+
+
+
@@ -429,6 +439,7 @@ Q 5.515625 40.1875 11.734375 48.09375
Q 17.96875 56 27.875 56
Q 33.9375 56 38.25 53.625
Q 42.578125 51.265625 45.40625 46.390625
+z
M 14.796875 27.296875
Q 14.796875 17.390625 18.875 11.75
Q 22.953125 6.109375 30.078125 6.109375
@@ -438,6 +449,7 @@ Q 45.40625 37.203125 41.296875 42.84375
Q 37.203125 48.484375 30.078125 48.484375
Q 22.953125 48.484375 18.875 42.84375
Q 14.796875 37.203125 14.796875 27.296875
+z
" id="DejaVuSans-64"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -579,17 +593,16 @@ L 10.6875 0
z
" id="DejaVuSans-2e"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
@@ -1688,7 +1699,7 @@ L 468 216
-
+
-
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -71,6 +70,7 @@ Q 39.453125 6.390625 43.28125 13.890625
Q 47.125 21.390625 47.125 36.375
Q 47.125 51.421875 43.28125 58.90625
Q 39.453125 66.40625 31.78125 66.40625
+z
M 31.78125 74.21875
Q 44.046875 74.21875 50.515625 64.515625
Q 56.984375 54.828125 56.984375 36.375
@@ -80,6 +80,7 @@ Q 19.53125 -1.421875 13.0625 8.265625
Q 6.59375 17.96875 6.59375 36.375
Q 6.59375 54.828125 13.0625 64.515625
Q 19.53125 74.21875 31.78125 74.21875
+z
" id="DejaVuSans-30"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -122,6 +123,7 @@ Q 38.8125 6.390625 42.859375 10.171875
Q 46.921875 13.96875 46.921875 20.515625
Q 46.921875 27.09375 42.890625 30.859375
Q 38.875 34.625 31.78125 34.625
+z
M 21.921875 38.8125
Q 15.578125 40.375 12.03125 44.71875
Q 8.5 49.078125 8.5 55.328125
@@ -139,6 +141,7 @@ Q 19.734375 -1.421875 13.25 4.234375
Q 6.78125 9.90625 6.78125 20.515625
Q 6.78125 27.484375 10.78125 32.3125
Q 14.796875 37.15625 21.921875 38.8125
+z
M 18.3125 54.390625
Q 18.3125 48.734375 21.84375 45.5625
Q 25.390625 42.390625 31.78125 42.390625
@@ -148,6 +151,7 @@ Q 45.3125 60.0625 41.71875 63.234375
Q 38.140625 66.40625 31.78125 66.40625
Q 25.390625 66.40625 21.84375 63.234375
Q 18.3125 60.0625 18.3125 54.390625
+z
" id="DejaVuSans-38"/>
-
+
-
-
-
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -323,30 +332,31 @@ Q 53.21875 48.921875 51.53125 44.890625
Q 49.859375 40.875 45.40625 35.40625
Q 44.1875 33.984375 37.640625 27.21875
Q 31.109375 20.453125 19.1875 8.296875
+z
" id="DejaVuSans-32"/>
-
+
-
-
-
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -369,119 +379,119 @@ L 4.890625 26.703125
z
" id="DejaVuSans-34"/>
-
+
-
-
-
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
-
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
-
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
-
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
-
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
@@ -535,6 +545,7 @@ Q 14.9375 54.109375 19.578125 55.046875
Q 24.21875 56 28.609375 56
Q 40.484375 56 46.34375 49.84375
Q 52.203125 43.703125 52.203125 31.203125
+z
" id="DejaVuSans-61"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
+
+
@@ -1786,18 +1796,19 @@ Q 21.1875 51.21875 25.484375 53.609375
Q 29.78125 56 35.6875 56
Q 41.65625 56 45.828125 52.96875
Q 50 49.953125 52 44.1875
+z
" id="DejaVuSans-6d"/>
-
+
-
+
-
+
-
@@ -46,15 +46,15 @@ C -1.341951 -0.77937 -1.5 -0.397805 -1.5 0
C -1.5 0.397805 -1.341951 0.77937 -1.06066 1.06066
C -0.77937 1.341951 -0.397805 1.5 0 1.5
z
-" id="m5a12c2acaa" style="stroke:#0000ff;stroke-width:0.500000;"/>
+" id="mb30a1ef6da" style="stroke:#0000ff;stroke-width:0.5;"/>
-
-
-
+
+
+
-
@@ -68,11 +68,11 @@ C -1.341951 -0.77937 -1.5 -0.397805 -1.5 0
C -1.5 0.397805 -1.341951 0.77937 -1.06066 1.06066
C -0.77937 1.341951 -0.397805 1.5 0 1.5
z
-" id="m2e8e5cfbdf" style="stroke:#008000;stroke-width:0.500000;"/>
+" id="mab55cbbda0" style="stroke:#008000;stroke-width:0.5;"/>
-
-
-
+
+
+
@@ -85,16 +85,15 @@ C 249.372904 43.2 205.416598 61.407298 173.011948 93.811948
C 140.607298 126.216598 122.4 170.172904 122.4 216
C 122.4 261.827096 140.607298 305.783402 173.011948 338.188052
C 205.416598 370.592702 249.372904 388.8 295.2 388.8
-L 295.2 388.8
z
" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -108,6 +107,7 @@ Q 39.453125 6.390625 43.28125 13.890625
Q 47.125 21.390625 47.125 36.375
Q 47.125 51.421875 43.28125 58.90625
Q 39.453125 66.40625 31.78125 66.40625
+z
M 31.78125 74.21875
Q 44.046875 74.21875 50.515625 64.515625
Q 56.984375 54.828125 56.984375 36.375
@@ -117,6 +117,7 @@ Q 19.53125 -1.421875 13.0625 8.265625
Q 6.59375 17.96875 6.59375 36.375
Q 6.59375 54.828125 13.0625 64.515625
Q 19.53125 74.21875 31.78125 74.21875
+z
" id="DejaVuSans-30"/>
-
+
-
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -197,18 +200,18 @@ Q 14.890625 38.140625 10.796875 36.28125
z
" id="DejaVuSans-35"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -231,6 +234,7 @@ Q 56.59375 19.140625 48.40625 8.859375
Q 40.234375 -1.421875 26.421875 -1.421875
Q 22.703125 -1.421875 18.890625 -0.6875
Q 15.09375 0.046875 10.984375 1.515625
+z
M 30.609375 32.421875
Q 37.25 32.421875 41.125 36.953125
Q 45.015625 41.5 45.015625 49.421875
@@ -240,20 +244,21 @@ Q 23.96875 66.40625 20.09375 61.84375
Q 16.21875 57.28125 16.21875 49.421875
Q 16.21875 41.5 20.09375 36.953125
Q 23.96875 32.421875 30.609375 32.421875
+z
" id="DejaVuSans-39"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -301,21 +306,22 @@ Q 40.828125 74.21875 47.359375 69.109375
Q 53.90625 64.015625 53.90625 55.328125
Q 53.90625 49.265625 50.4375 45.09375
Q 46.96875 40.921875 40.578125 39.3125
+z
" id="DejaVuSans-33"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -329,6 +335,7 @@ Q 38.8125 6.390625 42.859375 10.171875
Q 46.921875 13.96875 46.921875 20.515625
Q 46.921875 27.09375 42.890625 30.859375
Q 38.875 34.625 31.78125 34.625
+z
M 21.921875 38.8125
Q 15.578125 40.375 12.03125 44.71875
Q 8.5 49.078125 8.5 55.328125
@@ -346,6 +353,7 @@ Q 19.734375 -1.421875 13.25 4.234375
Q 6.78125 9.90625 6.78125 20.515625
Q 6.78125 27.484375 10.78125 32.3125
Q 14.796875 37.15625 21.921875 38.8125
+z
M 18.3125 54.390625
Q 18.3125 48.734375 21.84375 45.5625
Q 25.390625 42.390625 31.78125 42.390625
@@ -355,21 +363,22 @@ Q 45.3125 60.0625 41.71875 63.234375
Q 38.140625 66.40625 31.78125 66.40625
Q 25.390625 66.40625 21.84375 63.234375
Q 18.3125 60.0625 18.3125 54.390625
+z
" id="DejaVuSans-38"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -396,21 +405,22 @@ Q 53.21875 48.921875 51.53125 44.890625
Q 49.859375 40.875 45.40625 35.40625
Q 44.1875 33.984375 37.640625 27.21875
Q 31.109375 20.453125 19.1875 8.296875
+z
" id="DejaVuSans-32"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -425,27 +435,27 @@ L 8.203125 64.59375
z
" id="DejaVuSans-37"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
-
+
+
+
@@ -453,7 +463,7 @@ L 417.388052 338.188052
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -527,18 +537,17 @@ L 10.6875 0
z
" id="DejaVuSans-2e"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
-
+
+
+
@@ -1341,7 +1349,7 @@ L 468 216
-
+
-
@@ -46,15 +46,15 @@ C -1.341951 -0.77937 -1.5 -0.397805 -1.5 0
C -1.5 0.397805 -1.341951 0.77937 -1.06066 1.06066
C -0.77937 1.341951 -0.397805 1.5 0 1.5
z
-" id="m558c420b09" style="stroke:#0000ff;stroke-width:0.500000;"/>
+" id="mb30a1ef6da" style="stroke:#0000ff;stroke-width:0.5;"/>
-
-
-
+
+
+
-
@@ -68,15 +68,15 @@ C -1.341951 -0.77937 -1.5 -0.397805 -1.5 0
C -1.5 0.397805 -1.341951 0.77937 -1.06066 1.06066
C -0.77937 1.341951 -0.397805 1.5 0 1.5
z
-" id="me1b68cbbd5" style="stroke:#008000;stroke-width:0.500000;"/>
+" id="mab55cbbda0" style="stroke:#008000;stroke-width:0.5;"/>
-
-
-
+
+
+
-
@@ -90,11 +90,11 @@ C -1.341951 -0.77937 -1.5 -0.397805 -1.5 0
C -1.5 0.397805 -1.341951 0.77937 -1.06066 1.06066
C -0.77937 1.341951 -0.397805 1.5 0 1.5
z
-" id="m35c762fa31" style="stroke:#ff0000;stroke-width:0.500000;"/>
+" id="mf50f53cfdd" style="stroke:#ff0000;stroke-width:0.5;"/>
-
-
-
+
+
+
@@ -107,16 +107,15 @@ C 249.372904 43.2 205.416598 61.407298 173.011948 93.811948
C 140.607298 126.216598 122.4 170.172904 122.4 216
C 122.4 261.827096 140.607298 305.783402 173.011948 338.188052
C 205.416598 370.592702 249.372904 388.8 295.2 388.8
-L 295.2 388.8
z
" style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;"/>
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -130,6 +129,7 @@ Q 39.453125 6.390625 43.28125 13.890625
Q 47.125 21.390625 47.125 36.375
Q 47.125 51.421875 43.28125 58.90625
Q 39.453125 66.40625 31.78125 66.40625
+z
M 31.78125 74.21875
Q 44.046875 74.21875 50.515625 64.515625
Q 56.984375 54.828125 56.984375 36.375
@@ -139,6 +139,7 @@ Q 19.53125 -1.421875 13.0625 8.265625
Q 6.59375 17.96875 6.59375 36.375
Q 6.59375 54.828125 13.0625 64.515625
Q 19.53125 74.21875 31.78125 74.21875
+z
" id="DejaVuSans-30"/>
-
+
-
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -219,18 +222,18 @@ Q 14.890625 38.140625 10.796875 36.28125
z
" id="DejaVuSans-35"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -253,6 +256,7 @@ Q 56.59375 19.140625 48.40625 8.859375
Q 40.234375 -1.421875 26.421875 -1.421875
Q 22.703125 -1.421875 18.890625 -0.6875
Q 15.09375 0.046875 10.984375 1.515625
+z
M 30.609375 32.421875
Q 37.25 32.421875 41.125 36.953125
Q 45.015625 41.5 45.015625 49.421875
@@ -262,20 +266,21 @@ Q 23.96875 66.40625 20.09375 61.84375
Q 16.21875 57.28125 16.21875 49.421875
Q 16.21875 41.5 20.09375 36.953125
Q 23.96875 32.421875 30.609375 32.421875
+z
" id="DejaVuSans-39"/>
-
+
-
-
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -323,21 +328,22 @@ Q 40.828125 74.21875 47.359375 69.109375
Q 53.90625 64.015625 53.90625 55.328125
Q 53.90625 49.265625 50.4375 45.09375
Q 46.96875 40.921875 40.578125 39.3125
+z
" id="DejaVuSans-33"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -351,6 +357,7 @@ Q 38.8125 6.390625 42.859375 10.171875
Q 46.921875 13.96875 46.921875 20.515625
Q 46.921875 27.09375 42.890625 30.859375
Q 38.875 34.625 31.78125 34.625
+z
M 21.921875 38.8125
Q 15.578125 40.375 12.03125 44.71875
Q 8.5 49.078125 8.5 55.328125
@@ -368,6 +375,7 @@ Q 19.734375 -1.421875 13.25 4.234375
Q 6.78125 9.90625 6.78125 20.515625
Q 6.78125 27.484375 10.78125 32.3125
Q 14.796875 37.15625 21.921875 38.8125
+z
M 18.3125 54.390625
Q 18.3125 48.734375 21.84375 45.5625
Q 25.390625 42.390625 31.78125 42.390625
@@ -377,21 +385,22 @@ Q 45.3125 60.0625 41.71875 63.234375
Q 38.140625 66.40625 31.78125 66.40625
Q 25.390625 66.40625 21.84375 63.234375
Q 18.3125 60.0625 18.3125 54.390625
+z
" id="DejaVuSans-38"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -418,21 +427,22 @@ Q 53.21875 48.921875 51.53125 44.890625
Q 49.859375 40.875 45.40625 35.40625
Q 44.1875 33.984375 37.640625 27.21875
Q 31.109375 20.453125 19.1875 8.296875
+z
" id="DejaVuSans-32"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -447,27 +457,27 @@ L 8.203125 64.59375
z
" id="DejaVuSans-37"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
-
+
+
+
@@ -475,7 +485,7 @@ L 417.388052 338.188052
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
@@ -549,18 +559,17 @@ L 10.6875 0
z
" id="DejaVuSans-2e"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
-
+
+
+
-
+" style="fill:none;stroke:#000000;stroke-dasharray:1,3;stroke-dashoffset:0;stroke-width:0.5;"/>
-
+
-
-
-
+
+
+
@@ -1363,7 +1371,7 @@ L 468 216
-
+
-
+" id="m368fc901b1" style="stroke:#000000;stroke-width:0.5;"/>
-
+
+" id="mc63e59a608" style="stroke:#000000;stroke-width:0.5;"/>
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -138,116 +136,116 @@ L 0 4
+" id="m556f96d829" style="stroke:#000000;stroke-width:0.5;"/>
-
+
+" id="m27e32ca04a" style="stroke:#000000;stroke-width:0.5;"/>
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -255,7 +253,7 @@ L -4 0
-
+
diff --git a/lib/matplotlib/tests/baseline_images/test_simplification/fft_peaks.png b/lib/matplotlib/tests/baseline_images/test_simplification/fft_peaks.png
index e99aed330f0..95c8ad1491c 100644
Binary files a/lib/matplotlib/tests/baseline_images/test_simplification/fft_peaks.png and b/lib/matplotlib/tests/baseline_images/test_simplification/fft_peaks.png differ
diff --git a/lib/matplotlib/tests/baseline_images/test_simplification/fft_peaks.svg b/lib/matplotlib/tests/baseline_images/test_simplification/fft_peaks.svg
index dcd19f984ee..61822b4c049 100644
--- a/lib/matplotlib/tests/baseline_images/test_simplification/fft_peaks.svg
+++ b/lib/matplotlib/tests/baseline_images/test_simplification/fft_peaks.svg
@@ -27,24 +27,21 @@ z
" style="fill:#ffffff;"/>
-
@@ -75,104 +72,104 @@ L 518.4 43.2
+" id="m368fc901b1" style="stroke:#000000;stroke-width:0.5;"/>
-
+
+" id="mc63e59a608" style="stroke:#000000;stroke-width:0.5;"/>
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -183,104 +180,104 @@ L 0 4
+" id="m556f96d829" style="stroke:#000000;stroke-width:0.5;"/>
-
+
+" id="m27e32ca04a" style="stroke:#000000;stroke-width:0.5;"/>
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -288,8 +285,8 @@ L -4 0
-
-
+
+
diff --git a/lib/matplotlib/tests/baseline_images/test_tightlayout/tight_layout8.svg b/lib/matplotlib/tests/baseline_images/test_tightlayout/tight_layout8.svg
index bd8f1186a6b..538d4441b2b 100644
--- a/lib/matplotlib/tests/baseline_images/test_tightlayout/tight_layout8.svg
+++ b/lib/matplotlib/tests/baseline_images/test_tightlayout/tight_layout8.svg
@@ -27,7 +27,7 @@ z
" style="fill:#ffffff;"/>
-
@@ -57,20 +57,20 @@ L 565.258125 24.43625
+" id="m368fc901b1" style="stroke:#000000;stroke-width:0.5;"/>
-
+
+" id="mc63e59a608" style="stroke:#000000;stroke-width:0.5;"/>
-
+
@@ -85,6 +85,7 @@ Q 39.453125 6.390625 43.28125 13.890625
Q 47.125 21.390625 47.125 36.375
Q 47.125 51.421875 43.28125 58.90625
Q 39.453125 66.40625 31.78125 66.40625
+z
M 31.78125 74.21875
Q 44.046875 74.21875 50.515625 64.515625
Q 56.984375 54.828125 56.984375 36.375
@@ -94,6 +95,7 @@ Q 19.53125 -1.421875 13.0625 8.265625
Q 6.59375 17.96875 6.59375 36.375
Q 6.59375 54.828125 13.0625 64.515625
Q 19.53125 74.21875 31.78125 74.21875
+z
" id="DejaVuSans-30"/>
-
+
-
+
@@ -148,7 +150,7 @@ Q 14.890625 38.140625 10.796875 36.28125
z
" id="DejaVuSans-35"/>
-
+
@@ -158,12 +160,12 @@ z
-
+
-
+
@@ -249,6 +251,7 @@ Q 14.9375 54.109375 19.578125 55.046875
Q 24.21875 56 28.609375 56
Q 40.484375 56 46.34375 49.84375
Q 52.203125 43.703125 52.203125 31.203125
+z
" id="DejaVuSans-61"/>
+" id="m556f96d829" style="stroke:#000000;stroke-width:0.5;"/>
-
+
+" id="m27e32ca04a" style="stroke:#000000;stroke-width:0.5;"/>
-
+
@@ -343,12 +348,12 @@ L -4 0
-
+
-
+
@@ -363,12 +368,12 @@ L -4 0
-
+
-
+
@@ -396,6 +401,7 @@ Q 53.21875 48.921875 51.53125 44.890625
Q 49.859375 40.875 45.40625 35.40625
Q 44.1875 33.984375 37.640625 27.21875
Q 31.109375 20.453125 19.1875 8.296875
+z
" id="DejaVuSans-32"/>
@@ -492,7 +498,7 @@ z
-
+
diff --git a/lib/matplotlib/tests/test_simplification.py b/lib/matplotlib/tests/test_simplification.py
index f8fed8b6ac5..22c2f8ebaa3 100644
--- a/lib/matplotlib/tests/test_simplification.py
+++ b/lib/matplotlib/tests/test_simplification.py
@@ -4,6 +4,8 @@
import io
import numpy as np
+from numpy.testing import assert_array_almost_equal, assert_array_equal
+
import pytest
from matplotlib.testing.decorators import image_comparison
@@ -49,7 +51,7 @@ def test_diamond():
def test_noise():
np.random.seed(0)
- x = np.random.uniform(size=(5000,)) * 50
+ x = np.random.uniform(size=(50000,)) * 50
fig, ax = plt.subplots()
p1 = ax.plot(x, solid_joinstyle='round', linewidth=2.0)
@@ -57,15 +59,140 @@ def test_noise():
path = p1[0].get_path()
transform = p1[0].get_transform()
path = transform.transform_path(path)
- simplified = list(path.iter_segments(simplify=(800, 600)))
+ simplified = path.cleaned(simplify=True)
+
+ assert simplified.vertices.size == 25512
+
+
+def test_antiparallel_simplification():
+ def _get_simplified(x, y):
+ fig, ax = plt.subplots()
+ p1 = ax.plot(x, y)
+
+ path = p1[0].get_path()
+ transform = p1[0].get_transform()
+ path = transform.transform_path(path)
+ simplified = path.cleaned(simplify=True)
+ simplified = transform.inverted().transform_path(simplified)
+
+ return simplified
+
+ # test ending on a maximum
+ x = [0, 0, 0, 0, 0, 1]
+ y = [.5, 1, -1, 1, 2, .5]
+
+ simplified = _get_simplified(x, y)
+
+ assert_array_almost_equal([[0., 0.5],
+ [0., -1.],
+ [0., 2.],
+ [1., 0.5]],
+ simplified.vertices[:-2, :])
+
+ # test ending on a minimum
+ x = [0, 0, 0, 0, 0, 1]
+ y = [.5, 1, -1, 1, -2, .5]
+
+ simplified = _get_simplified(x, y)
+
+ assert_array_almost_equal([[0., 0.5],
+ [0., 1.],
+ [0., -2.],
+ [1., 0.5]],
+ simplified.vertices[:-2, :])
+
+ # test ending in between
+ x = [0, 0, 0, 0, 0, 1]
+ y = [.5, 1, -1, 1, 0, .5]
+
+ simplified = _get_simplified(x, y)
+
+ assert_array_almost_equal([[0., 0.5],
+ [0., 1.],
+ [0., -1.],
+ [0., 0.],
+ [1., 0.5]],
+ simplified.vertices[:-2, :])
+
+ # test no anti-parallel ending at max
+ x = [0, 0, 0, 0, 0, 1]
+ y = [.5, 1, 2, 1, 3, .5]
+
+ simplified = _get_simplified(x, y)
+
+ assert_array_almost_equal([[0., 0.5],
+ [0., 3.],
+ [1., 0.5]],
+ simplified.vertices[:-2, :])
+
+ # test no anti-parallel ending in middle
+ x = [0, 0, 0, 0, 0, 1]
+ y = [.5, 1, 2, 1, 1, .5]
+
+ simplified = _get_simplified(x, y)
+
+ assert_array_almost_equal([[0., 0.5],
+ [0., 2.],
+ [0., 1.],
+ [1., 0.5]],
+ simplified.vertices[:-2, :])
+
+
+# Only consider angles in 0 <= angle <= pi/2, otherwise
+# using min/max will get the expected results out of order:
+# min/max for simplification code depends on original vector,
+# and if angle is outside above range then simplification
+# min/max will be opposite from actual min/max.
+@pytest.mark.parametrize('angle', [0, np.pi/4, np.pi/3, np.pi/2])
+@pytest.mark.parametrize('offset', [0, .5])
+def test_angled_antiparallel(angle, offset):
+ scale = 5
+ np.random.seed(19680801)
+ # get 15 random offsets
+ # TODO: guarantee offset > 0 results in some offsets < 0
+ vert_offsets = (np.random.rand(15) - offset) * scale
+ # always start at 0 so rotation makes sense
+ vert_offsets[0] = 0
+ # always take the first step the same direction
+ vert_offsets[1] = 1
+ # compute points along a diagonal line
+ x = np.sin(angle) * vert_offsets
+ y = np.cos(angle) * vert_offsets
+
+ # will check these later
+ x_max = x[1:].max()
+ x_min = x[1:].min()
+
+ y_max = y[1:].max()
+ y_min = y[1:].min()
+
+ if offset > 0:
+ p_expected = Path([[0, 0],
+ [x_max, y_max],
+ [x_min, y_min],
+ [x[-1], y[-1]],
+ [0, 0]],
+ codes=[1, 2, 2, 2, 0])
+
+ else:
+ p_expected = Path([[0, 0],
+ [x_max, y_max],
+ [x[-1], y[-1]],
+ [0, 0]],
+ codes=[1, 2, 2, 0])
+
+ p = Path(np.vstack([x, y]).T)
+ p2 = p.cleaned(simplify=True)
- assert len(simplified) == 3884
+ assert_array_almost_equal(p_expected.vertices,
+ p2.vertices)
+ assert_array_equal(p_expected.codes, p2.codes)
def test_sine_plus_noise():
np.random.seed(0)
- x = (np.sin(np.linspace(0, np.pi * 2.0, 1000)) +
- np.random.uniform(size=(1000,)) * 0.01)
+ x = (np.sin(np.linspace(0, np.pi * 2.0, 50000)) +
+ np.random.uniform(size=(50000,)) * 0.01)
fig, ax = plt.subplots()
p1 = ax.plot(x, solid_joinstyle='round', linewidth=2.0)
@@ -73,9 +200,9 @@ def test_sine_plus_noise():
path = p1[0].get_path()
transform = p1[0].get_transform()
path = transform.transform_path(path)
- simplified = list(path.iter_segments(simplify=(800, 600)))
+ simplified = path.cleaned(simplify=True)
- assert len(simplified) == 876
+ assert simplified.vertices.size == 25240
@image_comparison(baseline_images=['simplify_curve'], remove_text=True)
@@ -110,9 +237,9 @@ def test_fft_peaks():
path = p1[0].get_path()
transform = p1[0].get_transform()
path = transform.transform_path(path)
- simplified = list(path.iter_segments(simplify=(800, 600)))
+ simplified = path.cleaned(simplify=True)
- assert len(simplified) == 20
+ assert simplified.vertices.size == 36
def test_start_with_moveto():
diff --git a/src/path_converters.h b/src/path_converters.h
index 3150b18edd5..b098959947a 100644
--- a/src/path_converters.h
+++ b/src/path_converters.h
@@ -559,21 +559,50 @@ class PathSimplifier : protected EmbeddedQueue<9>
PathSimplifier(VertexSource &source, bool do_simplify, double simplify_threshold)
: m_source(&source),
m_simplify(do_simplify),
+ /* we square simplify_threshold so that we can compute
+ norms without doing the square root every step. */
m_simplify_threshold(simplify_threshold * simplify_threshold),
+
m_moveto(true),
m_after_moveto(false),
+ m_clipped(false),
+
+ // the x, y values from last iteration
m_lastx(0.0),
m_lasty(0.0),
- m_clipped(false),
+
+ // the dx, dy comprising the original vector, used in conjunction
+ // with m_currVecStart* to define the original vector.
m_origdx(0.0),
m_origdy(0.0),
+
+ // the squared norm of the original vector
m_origdNorm2(0.0),
- m_dnorm2Max(0.0),
- m_lastMax(false),
+
+ // maximum squared norm of vector in forward (parallel) direction
+ m_dnorm2ForwardMax(0.0),
+ // maximum squared norm of vector in backward (anti-parallel) direction
+ m_dnorm2BackwardMax(0.0),
+
+ // was the last point the furthest from lastWritten in the
+ // forward (parallel) direction?
+ m_lastForwardMax(false),
+ // was the last point the furthest from lastWritten in the
+ // backward (anti-parallel) direction?
+ m_lastBackwardMax(false),
+
+ // added to queue when _push is called
m_nextX(0.0),
m_nextY(0.0),
- m_lastWrittenX(0.0),
- m_lastWrittenY(0.0)
+
+ // added to queue when _push is called if any backwards
+ // (anti-parallel) vectors were observed
+ m_nextBackwardX(0.0),
+ m_nextBackwardY(0.0),
+
+ // start of the current vector that is being simplified
+ m_currVecStartX(0.0),
+ m_currVecStartY(0.0)
{
// empty
}
@@ -595,8 +624,8 @@ class PathSimplifier : protected EmbeddedQueue<9>
return m_source->vertex(x, y);
}
- /* idea: we can skip drawing many lines: lines < 1 pixel in
- length, and we can combine sequential parallel lines into a
+ /* idea: we can skip drawing many lines: we can combine
+ sequential parallel lines into a
single line instead of redrawing lines over the same
points. The loop below works a bit like a state machine,
where what it does depends on what it did in the last
@@ -615,6 +644,14 @@ class PathSimplifier : protected EmbeddedQueue<9>
the queue before proceeding to the main loop below.
-- Michael Droettboom */
+ /* This code was originally written by Allan Haldane and
+ updated by Michael Droettboom. I have modified it to
+ handle anti-parallel vectors. This is done essentially
+ the same way as parallel vectors, but requires a little
+ additional book-keeping to track whether or not we have
+ observed an anti-parallel vector during the current run.
+ -- Kevin Rose */
+
if (queue_pop(&cmd, x, y)) {
return cmd;
}
@@ -644,6 +681,7 @@ class PathSimplifier : protected EmbeddedQueue<9>
m_lasty = *y;
m_moveto = false;
m_origdNorm2 = 0.0;
+ m_dnorm2BackwardMax = 0.0;
m_clipped = true;
if (queue_nonempty()) {
/* If we did a push, empty the queue now. */
@@ -677,11 +715,15 @@ class PathSimplifier : protected EmbeddedQueue<9>
m_origdNorm2 = m_origdx * m_origdx + m_origdy * m_origdy;
// set all the variables to reflect this new orig vector
- m_dnorm2Max = m_origdNorm2;
- m_lastMax = true;
-
- m_nextX = m_lastWrittenX = m_lastx = *x;
- m_nextY = m_lastWrittenY = m_lasty = *y;
+ m_dnorm2ForwardMax = m_origdNorm2;
+ m_dnorm2BackwardMax = 0.0;
+ m_lastForwardMax = true;
+ m_lastBackwardMax = false;
+
+ m_currVecStartX = m_lastx;
+ m_currVecStartY = m_lasty;
+ m_nextX = m_lastx = *x;
+ m_nextY = m_lasty = *y;
continue;
}
@@ -693,12 +735,14 @@ class PathSimplifier : protected EmbeddedQueue<9>
building is not too much. If o is the orig vector (we
are building on), and v is the vector from the last
written point to the current point, then the
- perpendicular vector is p = v - (o.v)o, and we
- normalize o (by dividing the second term by o.o). */
+ perpendicular vector is p = v - (o.v)o/(o.o)
+ (here, a.b indicates the dot product of a and b). */
/* get the v vector */
- double totdx = *x - m_lastWrittenX;
- double totdy = *y - m_lastWrittenY;
+ double totdx = *x - m_currVecStartX;
+ double totdy = *y - m_currVecStartY;
+
+ /* get the dot product o.v */
double totdot = m_origdx * totdx + m_origdy * totdy;
/* get the para vector ( = (o.v)o/(o.o)) */
@@ -708,29 +752,37 @@ class PathSimplifier : protected EmbeddedQueue<9>
/* get the perp vector ( = v - para) */
double perpdx = totdx - paradx;
double perpdy = totdy - parady;
+
+ /* get the squared norm of perp vector ( = p.p) */
double perpdNorm2 = perpdx * perpdx + perpdy * perpdy;
- /* If the perp vector is less than some number of (squared)
- pixels in size, then merge the current vector */
+ /* If the perpendicular vector is less than
+ m_simplify_threshold pixels in size, then merge
+ current x,y with the current vector */
if (perpdNorm2 < m_simplify_threshold) {
/* check if the current vector is parallel or
- anti-parallel to the orig vector. If it is
- parallel, test if it is the longest of the vectors
- we are merging in that direction. */
+ anti-parallel to the orig vector. In either case,
+ test if it is the longest of the vectors
+ we are merging in that direction. If it is, then
+ update the current vector in that direction. */
double paradNorm2 = paradx * paradx + parady * parady;
- m_lastMax = false;
+ m_lastForwardMax = false;
+ m_lastBackwardMax = false;
if (totdot > 0.0) {
- if (paradNorm2 > m_dnorm2Max) {
- m_lastMax = true;
- m_dnorm2Max = paradNorm2;
+ if (paradNorm2 > m_dnorm2ForwardMax) {
+ m_lastForwardMax = true;
+ m_dnorm2ForwardMax = paradNorm2;
m_nextX = *x;
m_nextY = *y;
}
} else {
- _push(&m_lastx, &m_lasty);
- _push(x, y);
- break;
+ if (paradNorm2 > m_dnorm2BackwardMax) {
+ m_lastBackwardMax = true;
+ m_dnorm2BackwardMax = paradNorm2;
+ m_nextBackwardX = *x;
+ m_nextBackwardY = *y;
+ }
}
m_lastx = *x;
@@ -758,6 +810,12 @@ class PathSimplifier : protected EmbeddedQueue<9>
: agg::path_cmd_line_to,
m_nextX,
m_nextY);
+ if (m_dnorm2BackwardMax > 0.0) {
+ queue_push((m_moveto || m_after_moveto) ? agg::path_cmd_move_to
+ : agg::path_cmd_line_to,
+ m_nextBackwardX,
+ m_nextBackwardY);
+ }
m_moveto = false;
}
queue_push((m_moveto || m_after_moveto) ? agg::path_cmd_move_to : agg::path_cmd_line_to,
@@ -789,22 +847,46 @@ class PathSimplifier : protected EmbeddedQueue<9>
double m_origdx;
double m_origdy;
double m_origdNorm2;
- double m_dnorm2Max;
- bool m_lastMax;
+ double m_dnorm2ForwardMax;
+ double m_dnorm2BackwardMax;
+ bool m_lastForwardMax;
+ bool m_lastBackwardMax;
double m_nextX;
double m_nextY;
- double m_lastWrittenX;
- double m_lastWrittenY;
+ double m_nextBackwardX;
+ double m_nextBackwardY;
+ double m_currVecStartX;
+ double m_currVecStartY;
inline void _push(double *x, double *y)
{
- queue_push(agg::path_cmd_line_to, m_nextX, m_nextY);
+ bool needToPushBack = (m_dnorm2BackwardMax > 0.0);
+
+ /* If we observed any backward (anti-parallel) vectors, then
+ we need to push both forward and backward vectors. */
+ if (needToPushBack) {
+ /* If the last vector seen was the maximum in the forward direction,
+ then we need to push the forward after the backward. Otherwise,
+ the last vector seen was the maximum in the backward direction,
+ or somewhere in between, either way we are safe pushing forward
+ before backward. */
+ if (m_lastForwardMax) {
+ queue_push(agg::path_cmd_line_to, m_nextBackwardX, m_nextBackwardY);
+ queue_push(agg::path_cmd_line_to, m_nextX, m_nextY);
+ } else {
+ queue_push(agg::path_cmd_line_to, m_nextX, m_nextY);
+ queue_push(agg::path_cmd_line_to, m_nextBackwardX, m_nextBackwardY);
+ }
+ } else {
+ /* If we did not observe any backwards vectors, just push forward. */
+ queue_push(agg::path_cmd_line_to, m_nextX, m_nextY);
+ }
/* If we clipped some segments between this line and the next line
we are starting, we also need to move to the last point. */
if (m_clipped) {
queue_push(agg::path_cmd_move_to, m_lastx, m_lasty);
- } else if (!m_lastMax) {
+ } else if ((!m_lastForwardMax) && (!m_lastBackwardMax)) {
/* If the last line was not the longest line, then move
back to the end point of the last line in the
sequence. Only do this if not clipped, since in that
@@ -819,12 +901,14 @@ class PathSimplifier : protected EmbeddedQueue<9>
m_origdy = *y - m_lasty;
m_origdNorm2 = m_origdx * m_origdx + m_origdy * m_origdy;
- m_dnorm2Max = m_origdNorm2;
- m_lastMax = true;
- m_lastWrittenX = m_queue[m_queue_write - 1].x;
- m_lastWrittenY = m_queue[m_queue_write - 1].y;
+ m_dnorm2ForwardMax = m_origdNorm2;
+ m_lastForwardMax = true;
+ m_currVecStartX = m_queue[m_queue_write - 1].x;
+ m_currVecStartY = m_queue[m_queue_write - 1].y;
m_lastx = m_nextX = *x;
m_lasty = m_nextY = *y;
+ m_dnorm2BackwardMax = 0.0;
+ m_lastBackwardMax = false;
m_clipped = false;
}
diff --git a/tutorials/01_introductory/usage.py b/tutorials/01_introductory/usage.py
index abaa2ba67be..8fac1fd5663 100644
--- a/tutorials/01_introductory/usage.py
+++ b/tutorials/01_introductory/usage.py
@@ -625,3 +625,95 @@ def my_plotter(ax, data1, data2, param_dict):
# or generating a new set of figures. In that case, use
# :func:`~matplotlib.pyplot.show` to display the figure(s) and
# to block execution until you have manually destroyed them.
+#
+# .. _performance:
+#
+# Performance
+# ===========
+#
+# Whether exploring data in interactive mode or programatically
+# saving lots of plots, rendering performance can be a painful
+# bottleneck in your pipeline. Matplotlib provides a couple
+# ways to greatly reduce rendering time at the cost of a slight
+# change (to a settable tolerance) in your plot's appearance.
+# The methods available to reduce rendering time depend on the
+# type of plot that is being created.
+#
+# Line segment simplification
+# ---------------------------
+#
+# For plots that have line segments (e.g. typical line plots,
+# outlines of polygons, etc.), rendering performance can be
+# controlled by the ``path.simplify`` and
+# ``path.simplify_threshold`` parameters in your
+# ``matplotlibrc`` file (see
+# :ref:`sphx_glr_tutorials_01_introductory_customizing.py` for
+# more information about the ``matplotlibrc`` file).
+# The ``path.simplify`` parameter is a boolean indicating whether
+# or not line segments are simplified at all. The
+# ``path.simplify_threshold`` parameter controls how much line
+# segments are simplified; higher thresholds result in quicker
+# rendering.
+#
+# The following script will first display the data without any
+# simplification, and then display the same data with simplification.
+# Try interacting with both of them::
+#
+# import numpy as np
+# import matplotlib.pyplot as plt
+# import matplotlib as mpl
+#
+# # Setup, and create the data to plot
+# y = np.random.rand(100000)
+# y[50000:] *= 2
+# y[np.logspace(1, np.log10(50000), 400).astype(int)] = -1
+# mpl.rcParams['path.simplify'] = True
+#
+# mpl.rcParams['path.simplify_threshold'] = 0.0
+# plt.plot(y)
+# plt.show()
+#
+# mpl.rcParams['path.simplify_threshold'] = 1.0
+# plt.plot(y)
+# plt.show()
+#
+# Matplotlib currently defaults to a conservative simplification
+# threshold of ``1/9``. If you want to change your default settings
+# to use a different value, you can change your ``matplotlibrc``
+# file. Alternatively, you could create a new style for
+# interactive plotting (with maximal simplification) and another
+# style for publication quality plotting (with minimal
+# simplification) and activate them as necessary. See
+# :ref:`sphx_glr_tutorials_01_introductory_customizing.py` for
+# instructions on how to perform these actions.
+#
+# The simplification works by iteratively merging line segments
+# into a single vector until the next line segment's perpendicular
+# distance to the vector (measured in display-coordinate space)
+# is greater than the ``path.simplify_threshold`` parameter.
+#
+# .. note::
+# Changes related to how line segments are simplified were made
+# in version 2.1. Rendering time will still be improved by these
+# parameters prior to 2.1, but rendering time for some kinds of
+# data will be vastly improved in versions 2.1 and greater.
+#
+# Marker simplification
+# ---------------------
+#
+# Markers can also be simplified, albeit less robustly than
+# line segments. Marker simplification is only available
+# to :class:`~matplotlib.lines.Line2D` objects (through the
+# ``markevery`` property). Wherever
+# :class:`~matplotlib.lines.Line2D` construction parameter
+# are passed through, such as
+# :func:`matplotlib.pyplot.plot` and
+# :meth:`matplotlib.axes.Axes.plot`, the ``markevery``
+# parameter can be used::
+#
+# plt.plot(x, y, markevery=10)
+#
+# The markevery argument allows for naive subsampling, or an
+# attempt at evenly spaced (along the *x* axis) sampling. See the
+# :ref:`sphx_glr_gallery_lines_bars_and_markers_markevery_demo.py`
+# for more information.