Collection of mostly command line tools / PHP scripts. Somewhat out of date.

⌈⌋ branch:  scripts + snippets


Check-in [7ffeab6f32]

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:merge animgif branch back into main
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 7ffeab6f32e736035858ef99be0121feb160320d
User & Date: mario 2022-09-29 23:03:08
Context
2022-09-29
23:11
release as 0.9 check-in: 219dab047e user: mario tags: trunk
23:03
merge animgif branch back into main check-in: 7ffeab6f32 user: mario tags: trunk
23:01
add options help: support Leaf check-in: de5333bf1f user: mario tags: animgif
2022-09-28
00:19
Change back to xpath to find only top-level layers, add [merge] option, and up_until is now handled in effect() check-in: 38e41b0ec5 user: mario tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to inkscape/Makefile.

1
2
3
4
5
6
7
8

9
10
11
12
13
SHELL   := /bin/bash 

zip:
	zip export_gif.zip export_gif.py export_gif.inx saveas_gif.inx pmd2inks LICENSE
	gpg --yes --default-key 15EA8459B4448BEF4EA9C45E6A12374187A40D51 -b -a -o export_gif.zip.sig -s export_gif.zip
	
inx:
	./pmd2inks export_gif.py | xmllint -format - > export_gif.inx


deb:
	xpm -s src -t deb -n inkscape-export-gif --prefix /usr/share/inkscape/extensions -f export_gif.py
	dpkg-sig -k incl -s builder *_$(shell version export_gif.py)_*deb









>





1
2
3
4
5
6
7
8
9
10
11
12
13
14
SHELL   := /bin/bash 

zip:
	zip export_gif.zip export_gif.py export_gif.inx saveas_gif.inx pmd2inks LICENSE
	gpg --yes --default-key 15EA8459B4448BEF4EA9C45E6A12374187A40D51 -b -a -o export_gif.zip.sig -s export_gif.zip
	
inx:
	./pmd2inks export_gif.py | xmllint -format - > export_gif.inx
	./pmd2inks animate_yo.py | xmllint -format - > animate_yo.inx

deb:
	xpm -s src -t deb -n inkscape-export-gif --prefix /usr/share/inkscape/extensions -f export_gif.py
	dpkg-sig -k incl -s builder *_$(shell version export_gif.py)_*deb

Added inkscape/animate_yo.inx.



















































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?xml version="1.0" encoding="UTF-8"?>
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
  <name>Animate Yo</name>
  <description>Embed basic ❮animate❯ transformations in SVG document</description>
  <!--<schema:softwareVersion xmlns:schema="https://schema.org/">0.1</schema:softwareVersion>-->
  <category>Visualize Path</category>
  <id>org.include-once.inkscape.animate-yo</id>
  <dependency type="executable" location="inx">animate_yo.py</dependency>
  <label appearance="header">Embed basic ❮animate❯ transformations in SVG document</label>
  <param name="mode" type="optiongroup" appearance="combo" gui-text="Animation mode">
    <option value="style">style</option>
    <option value="scale">scale</option>
    <option value="rotate">rotate</option>
    <option value="translate">translate</option>
    <option value="move">move</option>
  </param>
  <hbox>
    <param name="start" type="string" gui-text="Start time">0s</param>
    <param name="duration" type="string" gui-text="Duration">5s</param>
  </hbox>
  <hbox>
    <image width="200" height="210">animate_yo.svg</image>
    <vbox>
      <param name="style" type="optiongroup" appearance="combo" gui-text="Color attribute">
        <option value="fill">fill</option>
        <option value="stroke">stroke</option>
      </param>
      <param name="color" type="color" mode="color" appearance="colorbutton" gui-text="Color (to)">#ff5555</param>
      <param name="scale" type="string" gui-description="Scales both width and height, specify fractions each." gui-text="Scaling">1.0 1.0</param>
      <param name="rotate" type="int" min="-360" max="360" precision="1" gui-description="Just in degrees presumably." gui-text="Rotation">0</param>
      <param name="translate" type="string" gui-description="Should usually be a matrix tuple like 20 30, or three values even." gui-text="Translate"/>
    </vbox>
  </hbox>
  <effect needs-live-preview="false">
    <object-type>all</object-type>
    <effects-menu>
      <submenu name="Visualize Path"/>
    </effects-menu>
  </effect>
  <script>
    <command location="inx" interpreter="python">animate_yo.py</command>
  </script>
</inkscape-extension>
<!--
        pars.add_argument("-"+"-mode", type=str, dest="mode", default="style", help="Animation mode")

        pars.add_argument("-"+"-start", type=str, dest="start", default="0s", help="Start time")
        pars.add_argument("-"+"-duration", type=str, dest="duration", default="5s", help="Duration")


        pars.add_argument("-"+"-style", type=str, dest="style", default="style", help="Color attribute")
        pars.add_argument("-"+"-color", type=inkex.Color, dest="color", default="#ff5555", help="Color (to)")
        pars.add_argument("-"+"-scale", type=str, dest="scale", default="1.0 1.0", help="Scaling")
        pars.add_argument("-"+"-rotate", type=int, dest="rotate", default=0, help="Rotation")
        pars.add_argument("-"+"-translate", type=str, dest="translate", default=, help="Translate")

-->

Added inkscape/animate_yo.py.











































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#!/usr/bin/env python
# encoding: utf-8
# api: inkscape
##type: effect
# category: visualize path
# title: Animate Yo
# description: Embed basic ❮animate❯ transformations in SVG document
# id: org.include-once.inkscape.animate-yo
# license: MITL
# version: 0.1
# state: alpha
# depends: bin:inkscape (>= 1.2), python (>= 3.6)
# pylint: disable=line-too-long, missing-module-docstring, bad-whitespace
# config:
#    { name: mode, type: select, select: "style|scale|rotate|translate|move", value: style, description: Animation mode }
#    {  xml: "<hbox>" }
#    { name: start, type: str, value: "0s", description: Start time }
#    { name: duration, type: str, value: "5s", description: Duration }
#    {  xml: "</hbox>" }
#    {  xml: "<hbox><image width='200' height='210'>animate_yo.svg</image><vbox>" }
#    { name: style, type: select, select: "fill|stroke", value: style, description: Color attribute  }
#    { name: color, type: color, appearance: colorbutton, value: "#ff5555", description: Color (to) }
#    { name: scale, type: str, value: "1.0 1.0", description: Scaling, help: "Scales both width and height, specify fractions each." }
#    { name: rotate, type: int, value: 0, min: -360, max: 360, description: Rotation, help: Just in degrees presumably. }
#    { name: translate, type: str, value: "", description: Translate, help: "Should usually be a matrix tuple like 20 30, or three values even." }
#    {  xml: "</vbox></hbox>" }
# architecture: all
# pack: animate_yo.*
# format: off
# author: mario#include-once:org
#
# Meant as accompanying extension for ★export_gif. Allows to add
# trivial <animation> tags to document. Some of which might be
# understood by the GIF interpolation.
# Unlikely this is all going to work for the SVG itself. Too crude.


import sys
import inkex


class AnimateYo(inkex.EffectExtension):
    """ Add an <animate*> tag to selected object/path """

    def add_arguments(self, pars):
        """ populate self.options from script args """
        pars.add_argument("--mode", type=str, dest="mode", default="style", help="Animation mode")
        pars.add_argument("--start", type=str, dest="start", default="0s", help="Start time")
        pars.add_argument("--duration", type=str, dest="duration", default="5s", help="Duration")
        pars.add_argument("--style", type=str, dest="style", default="style", help="Color attribute")
        pars.add_argument("--color", type=inkex.Color, dest="color", default="#ff5555", help="Color (to)")
        pars.add_argument("--scale", type=str, dest="scale", default="1.0 1.0", help="Scaling")
        pars.add_argument("--rotate", type=int, dest="rotate", default=0, help="Rotation")
        pars.add_argument("--translate", type=str, dest="translate", default="", help="Translate")

    def effect(self):
        """ attach something to tree """

        if not self.svg.selection:
            inkex.AbortExtension("Requires a selected object to work on.")
        elif len(self.svg.selection) > 2:
            inkex.AbortExtension("Can only work on one or two objects selected.")
        elif len(self.svg.selection) == 2:
            self.options.mode = "move"
            path = self.svg.selection[1]
            if path.tag != "path":
                inkex.AbortExtension("Second object must be a path to move on.")

        mode = self.options.mode
        obj = self.svg.selection[0]

        if mode == "style":
            obj.add(Animate(
                attributeName=self.options.style,
                #from=,
                to=hex_color(self.options.color),
                start=self.options.start,
                dur=self.options.duration,
                repeatCount="indefinite"
            ))
        elif mode == "scale":
            obj.add(AnimateTransform(
                type=mode,
                #from="0 0",
                to=self.options.scale,
                dur=self.options.duration,
            ))
        elif mode == "translate":
            obj.add(AnimateTransform(
                type=mode,
                #from="0 0",
                to=self.options.translate,
                dur=self.options.duration,
            ))
        elif mode == "rotate":
            obj.add(AnimateTransform(
                type=mode,
                #from="0 0",
                to=str(self.options.rotate),
                dur=self.options.duration,
            ))
        elif mode == "move":
            obj.add(AnimateMotion(
                path=path.attrib["d"],
                dur=self.options.duration,
                repeatCount="indefinite"
            ))

def hex_color(col):
    """ convert ints or inkex.Color tuple to #hex color """
    if isinstance(col, list):
        col = list(col)
        if len(col) == 3:
            col.append(1.0)
        col = (int(col[0])<<24) + (int(col[1])<<16) + (int(col[2])<<8) + int(col[3]*255)
    return "#{:08X}".format(col & 0xFFFFFFFF)

class Animate(inkex.BaseElement):
    """Title element"""
    tag_name = "animate"

class AnimateTransform(inkex.BaseElement):
    """Title element"""
    tag_name = "animateTransform"

class AnimateMotion(inkex.BaseElement):
    """Title element"""
    tag_name = "animateMotion"


if __name__ == "__main__":
    AnimateYo().run()
    sys.exit(0)

Added inkscape/animate_yo.svg.































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
   width="127.80397mm"
   height="128.06194mm"
   viewBox="0 0 127.80397 128.06193"
   version="1.1"
   id="svg1"
   xml:space="preserve"
   sodipodi:docname="animate_yo.svg"
   inkscape:version="1.3-dev (1:1.2.0-alpha1+devel+202209200006+ea62cf6e94)"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
     id="namedview1"
     pagecolor="#ffffff"
     bordercolor="#111111"
     borderopacity="1"
     inkscape:showpageshadow="0"
     inkscape:pageopacity="0"
     inkscape:pagecheckerboard="1"
     inkscape:deskcolor="#d1d1d1"
     inkscape:document-units="mm"
     showgrid="false"
     inkscape:zoom="0.84096521"
     inkscape:cx="277.65715"
     inkscape:cy="365.05672"
     inkscape:window-width="1920"
     inkscape:window-height="1008"
     inkscape:window-x="0"
     inkscape:window-y="25"
     inkscape:window-maximized="1"
     inkscape:current-layer="layer1" /><defs
     id="defs1"><rect
       x="27.309971"
       y="386.58646"
       width="423.93936"
       height="86.506798"
       id="rect12098" /><linearGradient
       inkscape:collect="always"
       id="linearGradient12096"><stop
         style="stop-color:#f1d58c;stop-opacity:1"
         offset="0"
         id="stop12095" /><stop
         style="stop-color:#916240;stop-opacity:1"
         offset="1"
         id="stop12096" /></linearGradient><linearGradient
       inkscape:collect="always"
       id="linearGradient12070"><stop
         style="stop-color:#020202;stop-opacity:1;"
         offset="0"
         id="stop12069" /><stop
         style="stop-color:#050505;stop-opacity:0.99215686;"
         offset="1"
         id="stop12070" /></linearGradient><linearGradient
       inkscape:collect="always"
       id="linearGradient12059"><stop
         style="stop-color:#808080;stop-opacity:1;"
         offset="0"
         id="stop12058" /><stop
         style="stop-color:#636363;stop-opacity:1;"
         offset="1"
         id="stop12059" /></linearGradient><linearGradient
       inkscape:collect="always"
       id="linearGradient12057"><stop
         style="stop-color:#c7a672;stop-opacity:1;"
         offset="0"
         id="stop12056" /><stop
         style="stop-color:#724f17;stop-opacity:1;"
         offset="1"
         id="stop12057" /></linearGradient><meshgradient
       inkscape:collect="always"
       id="meshgradient1"
       gradientUnits="userSpaceOnUse"
       x="42.200768"
       y="55.930576"
       gradientTransform="matrix(1.0063303,0,0,0.99699456,-0.86714214,-0.43190189)"><meshrow
         id="meshrow11978"><meshpatch
           id="meshpatch11978"><stop
             path="c 8.46667,0  16.9333,0  25.4,0"
             style="stop-color:#151819;stop-opacity:1"
             id="stop11978" /><stop
             path="c 0,11.5006  0,23.0011  0,34.5017"
             style="stop-color:#333637;stop-opacity:1"
             id="stop11979" /><stop
             path="c -8.46667,0  -16.9333,0  -25.4,0"
             style="stop-color:#4c0f06;stop-opacity:1"
             id="stop11980" /><stop
             path="c 0,-11.5006  0,-23.0011  -7.10543e-15,-34.5017"
             style="stop-color:#081012;stop-opacity:1"
             id="stop11981" /></meshpatch><meshpatch
           id="meshpatch11981"><stop
             path="c 8.46667,0  4.94483,-3.24463e-07  13.4114,-3.24463e-07"
             id="stop11982" /><stop
             path="c -4.44283e-05,11.5006  8.15133,24.1237  8.15144,35.6243"
             style="stop-color:#1c0707;stop-opacity:1"
             id="stop11983" /><stop
             path="c -8.46672,-4.60273e-05  -13.0961,-1.12265  -21.5628,-1.1226"
             style="stop-color:#081012;stop-opacity:1"
             id="stop11984" /></meshpatch><meshpatch
           id="meshpatch11984"><stop
             path="c 8.46662,-1.08713e-12  28.9219,3.24463e-07  37.3886,3.24463e-07"
             id="stop11985" /><stop
             path="c 0,11.5006  0,23.0011  0,34.5017"
             style="stop-color:#081012;stop-opacity:1"
             id="stop11986" /><stop
             path="c -8.46667,0  -20.7706,1.12262  -29.2372,1.1226"
             style="stop-color:#54320e;stop-opacity:1"
             id="stop11987" /></meshpatch><meshpatch
           id="meshpatch11987"><stop
             path="c 8.46667,0  16.9333,0  25.4,0"
             id="stop11988" /><stop
             path="c 0,11.5006  0,23.0011  0,34.5017"
             style="stop-color:#59413b;stop-opacity:1"
             id="stop11989" /><stop
             path="c -8.46667,0  -16.9333,0  -25.4,0"
             style="stop-color:#081012;stop-opacity:1"
             id="stop11990" /></meshpatch><meshpatch
           id="meshpatch11990"><stop
             path="c 8.46667,0  16.9333,0  25.4,0"
             id="stop11991" /><stop
             path="c 0,11.5006  0,23.0011  0,34.5017"
             style="stop-color:#081012;stop-opacity:1"
             id="stop11992" /><stop
             path="c -8.46667,0  -16.9333,0  -25.4,0"
             style="stop-color:#471d07;stop-opacity:1"
             id="stop11993" /></meshpatch></meshrow><meshrow
         id="meshrow11993"><meshpatch
           id="meshpatch11993"><stop
             path="c 0,11.5006  0,23.0011  0,34.5017"
             id="stop11994" /><stop
             path="c -8.46667,0  -16.9333,-5.69403  -25.4,-5.69403"
             style="stop-color:#081012;stop-opacity:1"
             id="stop11995" /><stop
             path="c -3.38037e-06,-11.5006  -3.86328e-06,-17.307  0,-28.8077"
             style="stop-color:#483622;stop-opacity:1"
             id="stop11996" /></meshpatch><meshpatch
           id="meshpatch11996"><stop
             path="c -6.10631e-05,11.5006  3.83711,21.8785  3.83711,33.3791"
             id="stop11997" /><stop
             path="c -8.46667,0  -16.9333,0  -25.3999,3.24463e-07"
             style="stop-color:#331e1e;stop-opacity:1"
             id="stop11998" /></meshpatch><meshpatch
           id="meshpatch11998"><stop
             path="c 0,11.5006  0.956927,40.0696  0.956926,51.5702"
             id="stop11999" /><stop
             path="c -8.46667,0.00018399  -17.8902,-17.0685  -26.357,-17.0685"
             style="stop-color:#081012;stop-opacity:1"
             id="stop12000" /></meshpatch><meshpatch
           id="meshpatch12000"><stop
             path="c -6.05007,27.3983  1.18242,57.8788  1.18242,69.3793"
             id="stop12001" /><stop
             path="c -8.46667,0.000152823  -17.1588,-17.809  -25.6255,-17.8091"
             style="stop-color:#41250b;stop-opacity:1"
             id="stop12002" /></meshpatch><meshpatch
           id="meshpatch12002"><stop
             path="c 0,11.5006  7.62939e-06,40.2518  7.62939e-06,51.7525"
             id="stop12003" /><stop
             path="c -8.46667,0.00037452  -14.1962,47.9262  -24.2176,17.6268"
             style="stop-color:#4f3c3a;stop-opacity:1"
             id="stop12004" /></meshpatch></meshrow><meshrow
         id="meshrow12004"><meshpatch
           id="meshpatch12004"><stop
             path="c 0,11.5006  1.26533,13.3339  1.26533,24.8345"
             id="stop12005" /><stop
             path="c -8.46667,-7.61556e-05  -18.1986,-0.181552  -26.6653,-0.181476"
             style="stop-color:#483c38;stop-opacity:1"
             id="stop12006" /><stop
             path="c 2.71025e-05,-11.5007  2.71025e-05,-18.8467  -3e-05,-30.3471"
             style="stop-color:#2b3032;stop-opacity:1"
             id="stop12007" /></meshpatch><meshpatch
           id="meshpatch12007"><stop
             path="c 0,11.5006  0,23.0011  0,34.5017"
             id="stop12008" /><stop
             path="c -8.46667,0  -15.668,-9.66723  -24.1346,-9.6672"
             style="stop-color:#23292b;stop-opacity:1"
             id="stop12009" /></meshpatch><meshpatch
           id="meshpatch12009"><stop
             path="c -1.02304e-06,11.5006  -0.956926,5.93276  -0.956926,17.4332"
             id="stop12010" /><stop
             path="c -8.46667,0  -16.9333,0  -25.4001,-3.24463e-07"
             style="stop-color:#070707;stop-opacity:1"
             id="stop12011" /></meshpatch><meshpatch
           id="meshpatch12011"><stop
             path="c -1.17423e-05,11.5006  -0.381713,-21.3668  -0.381714,-9.8665"
             id="stop12012" /><stop
             path="c -8.46667,6.65063e-06  -17.734,9.49064  -26.2007,9.4906"
             style="stop-color:#120a08;stop-opacity:1"
             id="stop12013" /></meshpatch><meshpatch
           id="meshpatch12013"><stop
             path="c -4.9738e-11,11.5006  -7.62939e-06,5.75078  -7.62939e-06,17.2509"
             id="stop12014" /><stop
             path="c -8.46667,0  -16.1326,-9.49065  -24.5993,-9.4906"
             style="stop-color:#26130f;stop-opacity:1"
             id="stop12015" /></meshpatch></meshrow><meshrow
         id="meshrow12015"><meshpatch
           id="meshpatch12015"><stop
             path="c -1.32389e-05,11.5006  -1.26533,32.6683  -1.26533,44.1689"
             id="stop12016" /><stop
             path="c -8.46667,0  -16.9333,0  -25.4,0"
             style="stop-color:#081012;stop-opacity:1"
             id="stop12017" /><stop
             path="c 0,-11.5006  4.8291e-07,-32.8498  3e-05,-44.3504"
             style="stop-color:#2c2020;stop-opacity:1"
             id="stop12018" /></meshpatch><meshpatch
           id="meshpatch12018"><stop
             path="c 0,11.5006  0,23.0011  0,34.5017"
             id="stop12019" /><stop
             path="c -8.46667,0  -16.9333,0  -25.3999,3.24463e-07"
             style="stop-color:#171715;stop-opacity:1"
             id="stop12020" /></meshpatch><meshpatch
           id="meshpatch12020"><stop
             path="c 0,11.5006  0,23.0011  0,34.5017"
             id="stop12021" /><stop
             path="c -8.46667,0  -16.9333,0  -25.4001,-3.24463e-07"
             style="stop-color:#081012;stop-opacity:1"
             id="stop12022" /></meshpatch><meshpatch
           id="meshpatch12022"><stop
             path="c 9.2174e-07,11.5006  -0.800703,32.4916  -0.800703,43.9922"
             id="stop12023" /><stop
             path="c -8.46667,0  -16.9333,0  -25.4,0.0001"
             style="stop-color:#010101;stop-opacity:1"
             id="stop12024" /></meshpatch><meshpatch
           id="meshpatch12024"><stop
             path="c 0,11.5006  0,23.0011  0,34.5017"
             id="stop12025" /><stop
             path="c -8.46667,0  -16.9333,0  -25.4,-0.0001"
             style="stop-color:#081012;stop-opacity:1"
             id="stop12026" /></meshpatch></meshrow><meshrow
         id="meshrow12026"><meshpatch
           id="meshpatch12026"><stop
             path="c 0,11.5006  0,23.0011  0,34.5017"
             id="stop12027" /><stop
             path="c -8.46667,0  -16.9333,0  -25.4,0"
             style="stop-color:#3f321a;stop-opacity:1"
             id="stop12028" /><stop
             path="c 0,-11.5006  0,-23.0011  0,-34.5017"
             style="stop-color:#363a3b;stop-opacity:1"
             id="stop12029" /></meshpatch><meshpatch
           id="meshpatch12029"><stop
             path="c 0,11.5006  0,23.0011  0,34.5017"
             id="stop12030" /><stop
             path="c -8.46667,0  -16.9333,0  -25.3999,3.24463e-07"
             style="stop-color:#2a2f32;stop-opacity:1"
             id="stop12031" /></meshpatch><meshpatch
           id="meshpatch12031"><stop
             path="c 0,11.5006  0,23.0011  0,34.5017"
             id="stop12032" /><stop
             path="c -8.46667,0  -16.9333,0  -25.4001,-3.24463e-07"
             style="stop-color:#181c20;stop-opacity:1"
             id="stop12033" /></meshpatch><meshpatch
           id="meshpatch12033"><stop
             path="c 0,11.5006  0,23.0011  0,34.5017"
             id="stop12034" /><stop
             path="c -8.46667,0  -16.9333,0  -25.4,0.0001"
             style="stop-color:#272f32;stop-opacity:1"
             id="stop12035" /></meshpatch><meshpatch
           id="meshpatch12035"><stop
             path="c 0,11.5006  0,23.0011  0,34.5017"
             id="stop12036" /><stop
             path="c -8.46667,0  -16.9333,0  -25.4,-0.0001"
             style="stop-color:#303738;stop-opacity:1"
             id="stop12037" /></meshpatch></meshrow></meshgradient><radialGradient
       inkscape:collect="always"
       xlink:href="#linearGradient12057"
       id="radialGradient12057"
       cx="62.500076"
       cy="140.43129"
       fx="62.500076"
       fy="140.43129"
       r="11.912144"
       gradientTransform="matrix(0.99140653,-0.13081705,0.10479728,0.79421385,-14.179725,37.074896)"
       gradientUnits="userSpaceOnUse" /><linearGradient
       inkscape:collect="always"
       xlink:href="#linearGradient12059"
       id="linearGradient12060"
       x1="122.21105"
       y1="99.363533"
       x2="122.50837"
       y2="98.848007"
       gradientUnits="userSpaceOnUse"
       spreadMethod="reflect" /><linearGradient
       inkscape:collect="always"
       xlink:href="#linearGradient12059"
       id="linearGradient12062"
       x1="103.75108"
       y1="103.2849"
       x2="104.16399"
       y2="103.70483"
       gradientUnits="userSpaceOnUse"
       spreadMethod="reflect" /><radialGradient
       inkscape:collect="always"
       xlink:href="#linearGradient12057"
       id="radialGradient12062"
       gradientUnits="userSpaceOnUse"
       gradientTransform="matrix(0.77481554,-0.63218739,-0.5064441,-0.62070321,82.553061,323.40233)"
       cx="62.500076"
       cy="140.43129"
       fx="62.500076"
       fy="140.43129"
       r="11.912144" /><filter
       inkscape:collect="always"
       style="color-interpolation-filters:sRGB"
       id="filter12067"
       x="-0.09683808"
       y="-0.091257878"
       width="1.1936762"
       height="1.1825158"><feGaussianBlur
         inkscape:collect="always"
         stdDeviation="0.15580868"
         id="feGaussianBlur12067" /></filter><filter
       inkscape:collect="always"
       style="color-interpolation-filters:sRGB"
       id="filter12068"
       x="-0.046469752"
       y="-0.033648131"
       width="1.0929395"
       height="1.0672963"><feGaussianBlur
         inkscape:collect="always"
         stdDeviation="0.06587633"
         id="feGaussianBlur12068" /></filter><filter
       inkscape:collect="always"
       style="color-interpolation-filters:sRGB"
       id="filter12069"
       x="-0.059138524"
       y="-0.029445968"
       width="1.118277"
       height="1.0588919"><feGaussianBlur
         inkscape:collect="always"
         stdDeviation="0.062036446"
         id="feGaussianBlur12069" /></filter><linearGradient
       inkscape:collect="always"
       xlink:href="#linearGradient12070"
       id="linearGradient12071"
       x1="100.05061"
       y1="164.0645"
       x2="118.63149"
       y2="164.46968"
       gradientUnits="userSpaceOnUse"
       spreadMethod="reflect" /><filter
       inkscape:collect="always"
       style="color-interpolation-filters:sRGB"
       id="filter12077"
       x="-0.24250955"
       y="-0.11860156"
       width="1.4850191"
       height="1.2372031"><feGaussianBlur
         inkscape:collect="always"
         stdDeviation="1.0687967"
         id="feGaussianBlur12077" /></filter><filter
       inkscape:collect="always"
       style="color-interpolation-filters:sRGB"
       id="filter12080"
       x="-0.594237"
       y="-0.57946283"
       width="2.188474"
       height="2.1589257"><feGaussianBlur
         inkscape:collect="always"
         stdDeviation="1.0687967"
         id="feGaussianBlur12080" /></filter><filter
       inkscape:collect="always"
       style="color-interpolation-filters:sRGB"
       id="filter12081"
       x="-0.17058602"
       y="-0.16220863"
       width="1.341172"
       height="1.3244173"><feGaussianBlur
         inkscape:collect="always"
         stdDeviation="1.0687967"
         id="feGaussianBlur12081" /></filter><filter
       inkscape:collect="always"
       style="color-interpolation-filters:sRGB"
       id="filter12082"
       x="-0.9996942"
       y="-0.21346223"
       width="2.9993884"
       height="1.4269245"><feGaussianBlur
         inkscape:collect="always"
         stdDeviation="1.0687967"
         id="feGaussianBlur12082" /></filter><filter
       inkscape:collect="always"
       style="color-interpolation-filters:sRGB"
       id="filter12083"
       x="-0.040688442"
       y="-0.035099074"
       width="1.0823754"
       height="1.0687014"><feGaussianBlur
         inkscape:collect="always"
         stdDeviation="0.29146107"
         id="feGaussianBlur12083" /></filter><filter
       inkscape:collect="always"
       style="color-interpolation-filters:sRGB"
       id="filter12084"
       x="-0.057994371"
       y="-0.055747729"
       width="1.1174814"
       height="1.1147367"><feGaussianBlur
         inkscape:collect="always"
         stdDeviation="0.29166369"
         id="feGaussianBlur12084" /></filter><filter
       inkscape:collect="always"
       style="color-interpolation-filters:sRGB"
       id="filter12095"
       x="-0.13068033"
       y="-0.095254837"
       width="1.2613607"
       height="1.1905097"><feGaussianBlur
         inkscape:collect="always"
         stdDeviation="2.7919937"
         id="feGaussianBlur12095" /></filter><radialGradient
       inkscape:collect="always"
       xlink:href="#linearGradient12096"
       id="radialGradient12096"
       cx="110.58495"
       cy="89.644562"
       fx="110.58495"
       fy="89.644562"
       r="13.900579"
       gradientTransform="matrix(0.71271963,0.07662199,-0.18565461,1.7269151,48.93654,-75.076158)"
       gradientUnits="userSpaceOnUse" /></defs><g
     inkscape:label="Ebene 1"
     inkscape:groupmode="layer"
     id="layer1"
     transform="translate(-41.600767,-55.330576)"><rect
       style="opacity:1;fill:#081012;fill-opacity:1;stroke:none;stroke-width:0;stroke-linejoin:round;stroke-dasharray:none"
       id="rect1"
       width="127"
       height="172.50833"
       x="42.200768"
       y="55.930576" /><rect
       style="opacity:1;fill:url(#meshgradient1);fill-opacity:1;stroke:none;stroke-width:0.966594;stroke-linejoin:round"
       id="rect2"
       width="127.80399"
       height="171.98985"
       x="41.600765"
       y="55.330578" /><path
       style="opacity:0.37273625;fill:#3d1607;fill-opacity:1;stroke:#240b02;stroke-width:0.96500002;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.99444222;stroke-dasharray:none"
       d="m 89.7056,55.688919 c -2.628054,24.635898 3.748249,42.749573 6.509979,63.481431 24.285761,11.55932 46.973501,34.31533 72.456851,31.43043 l -0.0128,-94.401365 z"
       id="path12084"
       sodipodi:nodetypes="ccccc" /><g
       id="g12095"
       style="mix-blend-mode:normal;filter:url(#filter12095)"><path
         style="opacity:0.481437;fill:#35221e;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
         id="path12085"
         d="M 78.82847,77.663692 C 70.550508,93.113218 61.309907,108.13573 54.929059,124.519 c 9.485658,4.04536 8.803625,-15.11464 14.655826,-19.96307 2.711537,-9.320403 14.922493,-19.00291 12.236059,-28.049157 -1.098859,-0.686702 -2.628342,-0.09424 -2.992474,1.156919 z" /><path
         style="opacity:0.481437;fill:#35221e;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
         id="path12086"
         d="M 81.598165,80.034431 C 75.355504,94.98521 65.780688,108.20682 57.987522,122.28688 c -3.413634,3.6826 -2.332013,17.86138 2.502068,8.30495 3.164926,-11.43566 10.198773,-20.76362 16.395014,-30.60104 1.952198,-6.480534 12.122761,-15.799058 7.363827,-21.502239 -1.117744,-0.305277 -2.456562,0.382615 -2.650266,1.54588 z" /><path
         style="opacity:0.824021;fill:#231714;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
         id="path12087"
         d="m 83.565951,88.009196 c -5.92527,13.901224 -12.637276,27.998064 -20.752282,40.299654 0.961746,12.00929 9.289884,-5.81373 11.515512,-9.66536 5.099724,-9.79659 10.580696,-19.694012 13.554712,-30.334503 -0.0622,-2.716709 -3.259479,-1.69013 -4.317942,-0.299791 z" /><path
         style="opacity:0.824021;fill:#231714;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
         id="path12088"
         d="m 84.468177,78.910383 c 1.252899,18.177356 -1.070309,38.104817 -13.307781,52.415167 -4.672512,3.65095 -6.16808,14.72565 1.448176,7.43692 7.04734,-10.00537 12.83859,-20.58694 15.322,-32.76518 0.467415,-8.694461 5.286849,-23.148924 -1.520285,-28.738112 l -0.902797,0.603256 z" /><path
         style="opacity:0.824021;fill:#231714;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
         id="path12089"
         d="m 87.666521,101.34122 c -4.930968,12.32316 -8.658099,25.64361 -17.661399,35.77825 -1.485432,11.51181 10.544718,-2.68968 11.048127,-7.66991 2.984154,-9.42174 13.103227,-20.77193 9.123338,-29.894802 -1.157293,-0.196971 -2.02784,0.922032 -2.510066,1.786462 z" /><path
         style="opacity:0.824021;fill:#231714;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
         id="path12090"
         d="m 89.494406,109.48884 c -5.554647,11.25206 -15.764477,22.51662 -17.803493,34.1468 10.646853,-2.33017 10.098112,-17.28221 17.68118,-24.105 1.746979,-1.57662 6.547859,-14.9202 0.122313,-10.0418 z" /><path
         style="opacity:0.824021;fill:#231714;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
         id="path12091"
         d="m 73.823365,113.238 c -2.521733,9.05554 -17.304704,21.1386 -12.354286,28.19222 7.898123,-6.8788 12.491348,-18.36852 16.257343,-27.57671 0.423119,-3.13166 -2.966656,-3.65616 -3.903057,-0.61551 z" /><path
         style="opacity:0.824021;fill:#231714;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
         id="path12092"
         d="m 72.573212,102.79122 c -0.711488,6.46409 -11.6106,20.0436 -4.301543,22.14527 4.085067,-5.99865 10.134561,-18.43201 6.718156,-23.62066 l -1.349651,0.63241 z" /><path
         style="opacity:0.824021;fill:#231714;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
         id="path12093"
         d="m 44.545897,139.28822 c 5.31868,-1.54468 21.680475,3.57423 18.978798,-4.24944 -3.864224,-1.3535 -25.591555,-2.72198 -18.978798,4.24944 z" /><path
         style="opacity:0.824021;fill:#231714;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
         id="path12094"
         d="m 44.656361,146.56281 c 6.507049,-3.86872 23.090196,1.55261 23.445597,-6.49751 -8.495721,-2.07488 -18.625827,0.2228 -26.373914,3.30268 -1.145819,1.81449 1.735641,2.89359 2.928317,3.19483 z" /><path
         style="opacity:0.824021;fill:#231714;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
         id="path12095"
         d="m 46.999985,143.26222 c 5.790927,-0.71398 22.400647,4.25769 20.366656,-3.64159 -4.076884,-0.65058 -27.534357,-3.41651 -20.366656,3.64159 z" /></g><path
       style="opacity:1;fill:url(#linearGradient12071);fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
       d="m 132.12944,102.11902 c -3.43977,5.10698 -7.95279,12.45629 -8.69523,9.90799 -2.42384,-4.62453 -6.71673,-2.3205 -11.77283,2.81275 -2.11657,-2.21758 -4.12744,-4.13781 -5.59478,-4.52889 -6.694069,1.76258 -11.176049,6.61897 -14.529465,13.05377 -4.258202,10.23001 -4.096085,16.46617 -5.996575,24.56594 -3.049005,-3.05576 -6.105878,-6.24898 -8.932862,-5.4262 -4.540182,2.83044 -5.224704,6.95258 -4.152914,11.66311 l 4.144907,4.74088 c -8.694918,6.59683 -14.861262,14.67495 -21.997939,22.18463 4.028757,1.21068 1.632036,-3.78244 13.316469,4.81979 1.985197,1.70051 4.08374,0.90777 6.467138,-3.08094 -6.147193,8.16082 -3.075324,15.11844 -4.070707,22.60688 -5.273153,9.65033 -6.08268,4.77248 -7.423138,5.77842 -3.981029,-1.75225 -5.273883,-6.09954 -6.704499,-10.31384 -5.892383,1.40839 -10.014082,6.70888 -14.301706,11.64466 l 0.644585,15.22291 106.522886,0.0305 c -3.24208,-17.4267 -10.12781,-32.1583 -7.19601,-54.15163 5.30644,-11.10918 9.30336,-24.2048 10.02063,-42.27543 2.10182,-7.68976 -0.0101,-16.38002 -19.74796,-29.2553 z"
       id="path12038"
       sodipodi:nodetypes="ccccccccccccccccccccc" /><path
       style="fill:#333333;stroke:#4d4d4d;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
       d="m 77.503048,142.62913 c 0.692711,-0.86485 -1.051334,-1.11142 -2.224932,-1.50274 -2.201502,3.86019 -5.58886,6.49962 -5.48042,12.73775 1.460149,1.07744 2.580358,1.67331 2.774103,0.95672 -0.972534,-5.74085 0.224531,-10.09107 4.931249,-12.19173 z"
       id="path12039"
       sodipodi:nodetypes="ccccc" /><path
       style="fill:#333333;stroke:#4d4d4d;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
       d="m 55.87219,190.81058 c 0.831924,-3.34891 -4.284178,-6.13508 4.502322,-10.23655 4.39792,2.07384 6.894727,4.95169 6.824674,8.9151 0.08464,-4.37476 -0.345151,-8.6247 -6.65231,-11.44841 -14.354182,6.45409 -5.397899,8.90504 -4.674686,12.76986 z"
       id="path12040"
       sodipodi:nodetypes="ccccc" /><path
       style="mix-blend-mode:normal;fill:url(#linearGradient12060);fill-opacity:1;stroke:#999999;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter12083)"
       d="m 111.98482,114.30843 c 1.46197,-3.69988 9.35404,-11.72052 13.43583,-18.136068 0.62907,-2.27166 -0.22746,-3.381106 -0.61905,-4.854279 4.53741,-2.877219 5.84229,4.510281 7.39882,11.098677 l -7.86186,10.20864 c -1.977,-2.3804 -4.66662,-5.84659 -12.35374,1.68303 z"
       id="path12041"
       sodipodi:nodetypes="cccccc" /><path
       style="mix-blend-mode:normal;fill:url(#linearGradient12062);fill-opacity:1;stroke:#999999;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter12084)"
       d="m 111.93271,114.57615 c 0.30761,-2.95197 -3.10419,-7.52274 -2.91841,-11.97439 -2.18065,-0.78442 -3.10541,-2.3864 -4.06151,-3.967969 -4.9237,3.401649 -5.092425,6.348739 -6.998147,9.360839 5.008847,-4.22895 9.021857,3.02135 13.978067,6.58152 z"
       id="path12042"
       sodipodi:nodetypes="ccccc" /><path
       style="opacity:1;fill:#0c1112;fill-opacity:1;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
       d="m 99.783903,86.471374 c -0.453975,-4.815768 -1.952998,-6.70897 -0.887224,-15.774846 1.549981,-2.082764 5.546071,-7.71098 12.890501,-7.963376 4.81997,0.550444 9.12613,1.94534 12.26723,5.255001 4.51928,8.314685 2.60058,10.417438 3.06296,14.817673 l -4.81558,1.14899 z"
       id="path12044"
       sodipodi:nodetypes="ccccccc" /><path
       style="opacity:0.824595;fill:url(#radialGradient12096);fill-opacity:1;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
       d="m 112.04941,113.88909 13.36484,-17.083395 c -0.54059,-3.184108 -1.08119,-4.181786 -1.62178,-5.631169 1.52807,-1.417109 2.82792,-3.875579 3.15929,-8.077346 -0.77349,-1.844084 -3.06315,0.172814 -4.72303,0.585962 -2.59669,-4.437705 -2.68367,-10.756928 -7.79008,-13.313114 -1.5861,-0.4556 -1.58178,-1.394125 -5.2577,-1.215162 -0.38429,1.065228 0.41484,2.926069 -1.83551,2.736749 -0.26149,-0.898252 -0.362,-1.961787 -1.38238,-2.080852 -1.91947,0.284884 -3.83816,0.530988 -5.83481,4.624708 -1.238308,5.483467 -0.531504,9.250353 -0.299098,13.435901 1.542598,3.826392 2.667468,9.385105 4.862958,10.503961 l 2.71931,3.166287 c 0.69563,0.58332 1.38803,1.1762 2.19336,1.43512 -2.01603,1.43391 1.61078,7.26013 2.44463,10.91235 z"
       id="path12043"
       sodipodi:nodetypes="ccccccccccccccc" /><path
       style="opacity:0.437907;fill:none;stroke:#532e1b;stroke-width:0.765;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
       d="m 106.54989,82.608913 c -0.26835,2.820904 -0.90999,6.58362 -0.68407,8.157469 0.57954,0.686963 0.66383,1.344756 2.16879,1.864667 1.13873,-0.069 2.21959,-0.04142 3.06159,-0.986642 0.85054,-0.933838 -0.14715,-2.003266 -0.35486,-3.014739 -1.29456,-1.934523 -0.89952,-4.066351 -1.20864,-6.11595"
       id="path12045"
       sodipodi:nodetypes="cccccc" /><path
       style="opacity:0.497526;fill:#5e3d13;fill-opacity:1;stroke:#7c4627;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
       d="m 105.32986,95.071003 c 0.69988,-0.07279 1.44005,-1.052583 1.98477,-1.026582 0.75184,0.05085 1.45059,0.199758 2.38024,-0.07781 1.1094,0.173578 1.83942,0.742151 2.5481,1.066808 -0.43517,0.268707 -0.79575,0.428131 -1.7968,1.52595 -1.15562,0.82632 -2.1154,0.5336 -3.08189,0.279231 -1.12833,-1.016704 -1.68505,-1.372129 -2.03442,-1.767597 z"
       id="path12046"
       sodipodi:nodetypes="ccccccc" /><path
       style="fill:#623b20;fill-opacity:1;stroke:#834e2a;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
       d="m 105.75795,95.10716 5.42006,-0.01252 m 0.37743,-0.07196 -0.0196,-0.05846"
       id="path12047" /><path
       style="opacity:1;fill:#432816;fill-opacity:1;stroke:#593d26;stroke-width:0.265;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
       id="path12049"
       d="m 105.93221,80.693407 c 0.0385,-0.280184 -0.001,0.174748 -0.0872,-0.05484 -0.0125,-0.03345 0.0636,-0.04399 0.073,-0.07845 0.005,-0.01865 -0.0466,0.03252 -0.0559,0.01557 -0.0138,-0.02523 0.0154,-0.05571 0.0183,-0.08432 0.002,-0.0222 -0.002,-0.04458 -0.003,-0.06687 -0.14947,-0.0014 -0.0891,0.0292 -0.16692,-0.0595 -0.0154,-0.01755 -0.0266,-0.04125 -0.0476,-0.05139 -0.038,-0.01831 -0.0926,-0.0012 -0.1227,-0.03071 -0.0371,-0.03645 -0.0378,-0.09694 -0.0567,-0.145407 -0.0416,-0.03054 -0.0832,-0.06108 -0.1248,-0.09163 -0.30608,-0.07039 5.3e-4,0.0089 -0.27786,-0.08801 -0.0379,-0.0132 -0.097,0.0037 -0.11623,-0.0316 -0.0318,-0.05835 0.0565,-0.190531 -0.009,-0.199117 -0.29956,-0.03903 -0.16296,0.399842 -0.2409,0.0167 -0.0701,-0.08475 -0.17993,-0.102576 -0.26626,-0.164807 -0.0365,-0.02628 -0.055,-0.08989 -0.1,-0.09042 -0.0528,-6.08e-4 -0.0855,0.06256 -0.13188,0.08772 -0.0393,0.02132 -0.0827,0.03403 -0.1241,0.05104 -0.0597,-0.01448 -0.093,-0.08645 -0.15199,-0.102699 -0.0992,-0.02734 -0.0643,0.04998 -0.15531,-0.02081 -0.0319,-0.0248 -0.0388,-0.09144 -0.0792,-0.09174 -0.0461,-3.44e-4 -0.0697,0.06027 -0.10455,0.0904 -0.0286,-0.0099 -0.0571,-0.01987 -0.0857,-0.0298 -0.0255,0.01 -0.0494,0.03443 -0.0764,0.02994 -0.0312,-0.0052 -0.0495,-0.07127 -0.0769,-0.05544 -0.0445,0.02577 -0.0225,0.113611 -0.0673,0.13889 -0.0904,-0.07557 -0.0452,-0.07626 -0.13363,-0.02366 -0.0697,-0.115383 -0.0355,-0.138211 -0.13949,-0.0588 -0.0232,0.01774 -0.0369,0.07101 -0.0639,0.06002 -0.0401,-0.01628 -0.0237,-0.09972 -0.0651,-0.112391 -0.031,-0.0095 -0.0366,0.05627 -0.0645,0.07271 -0.0215,0.01267 -0.0496,0.006 -0.0743,0.0091 -0.18458,-0.195712 -0.0282,-0.08757 -0.13529,0.05422 -0.0151,0.02 -0.0497,-0.0075 -0.0748,-0.0075 -0.0157,-1.7e-5 -0.0349,-0.0031 -0.0466,0.0074 -0.1061,0.09499 0.0354,0.08131 -0.13525,0.06404 -0.0504,0.08131 -0.032,0.102688 -0.14369,0.04492 -0.0507,-0.0262 -0.0854,-0.111515 -0.14071,-0.0974 -0.0508,0.01298 -0.009,0.122176 -0.055,0.1474 -0.16827,-0.05895 -0.0946,-0.07461 -0.22408,0.02996 -0.0207,0.03946 -0.0184,0.110479 -0.0623,0.118388 -0.0567,0.01022 -0.0961,-0.0846 -0.15352,-0.07949 -0.0436,0.0039 -0.0547,0.06856 -0.0845,0.100679 -0.0222,0.02392 -0.0495,0.04283 -0.0712,0.06716 -0.0217,0.02424 -0.0281,0.06668 -0.0585,0.07803 -0.0358,0.01332 -0.0758,-0.0093 -0.11369,-0.01391 -0.006,0.04306 0.006,0.09334 -0.0191,0.129187 -0.0157,0.02271 -0.0563,0.0042 -0.0811,0.01631 -0.0265,0.01293 -0.0446,0.03883 -0.0682,0.05647 -0.0229,0.01709 -0.0588,0.02193 -0.0713,0.0476 -0.0159,0.03232 0.0202,0.0821 -0.005,0.107892 -0.0238,0.02446 -0.0683,0.0015 -0.10241,0.0023 -0.0109,0.02776 -0.006,0.07089 -0.0328,0.08329 -0.0381,0.01741 -0.09,-0.03377 -0.1252,-0.01107 -0.0284,0.01829 0.002,0.0705 -0.0134,0.100386 -0.0132,0.02512 -0.0673,0.02416 -0.067,0.05254 0.002,0.214495 0.17905,0.144811 -0.0411,0.185315 0.002,0.02768 0.0294,0.06619 0.007,0.08303 -0.0303,0.02313 -0.078,-0.01261 -0.11447,-0.0014 -0.0237,0.0073 -0.0346,0.03556 -0.0526,0.05271 -0.0214,0.02044 -0.0599,0.04801 -0.0725,0.07412 -0.007,0.01555 -0.004,0.03426 -0.006,0.05138 -0.0257,0.02749 -0.053,0.04735 -0.055,0.08988 -0.001,0.02256 0.0234,0.0454 0.0146,0.06618 -0.006,0.01522 -0.0321,0.0082 -0.0481,0.01237 -0.22751,0.449477 0.40815,0.771226 0.63566,0.32175 v 0 c 0.0703,0.02667 0.13572,0.08236 0.21086,0.08 0.0481,-0.0015 -0.0788,-0.05527 -0.11823,-0.0829 -0.003,-0.01328 -0.0221,-0.03684 -0.009,-0.03983 0.0366,-0.0083 0.0742,0.01115 0.11132,0.01672 -0.0125,-0.02857 -0.025,-0.05714 -0.0375,-0.08571 0.0224,-0.0047 0.0678,0.0088 0.067,-0.01397 -0.002,-0.04734 -0.0991,-0.08449 -0.0713,-0.122876 0.0274,-0.03795 0.0928,0.04885 0.13662,0.03252 0.0348,-0.01297 -0.0893,-0.141314 0.0463,-0.101436 -0.0145,-0.03126 -0.0857,-0.108457 -0.005,-0.129311 0.0297,-0.0077 0.0696,0.02425 0.0919,0.0032 0.0212,-0.02 -0.01,-0.05907 -0.003,-0.08731 0.0172,-0.06827 0.0524,-0.05826 0.10724,-0.06841 0.0102,-0.0189 0.0128,-0.04485 0.0307,-0.05671 0.0389,-0.02574 0.16602,0.02407 0.16036,-0.03178 -0.006,-0.05682 -0.0556,-0.108714 -0.0461,-0.165032 0.004,-0.02397 0.0482,0.0063 0.0723,0.0095 0.0283,0.0076 0.0571,0.01374 0.0849,0.0229 0.0349,0.01147 0.0921,0.074 0.10298,0.03894 0.0239,-0.07723 -0.062,-0.160908 -0.0411,-0.238998 0.009,-0.03283 0.0642,0.02239 0.0956,0.03546 0.17012,0.07086 0.0378,0.03274 0.21461,0.07329 0.0182,-0.03928 0.0169,-0.0963 0.0544,-0.117843 0.0338,-0.01939 0.0767,0.01372 0.11502,0.02058 0.0339,-0.0014 0.0729,0.01398 0.10156,-0.0042 0.0206,-0.01309 0.0915,-0.194582 0.10135,-0.202424 0.0218,-0.01734 0.0557,0.0021 0.0836,0.0032 0.16368,0.20564 0.0159,0.07966 0.12103,-0.0081 0.0185,-0.01539 0.0452,0.0235 0.069,0.02062 0.014,-0.0017 0.0162,-0.02339 0.0272,-0.03224 0.0326,-0.02639 0.0329,-0.01723 0.0677,-0.0055 0.0112,0.01088 0.0184,0.03643 0.0336,0.03263 0.0449,-0.01128 0.044,-0.134883 0.0845,-0.155757 0.0233,-0.01204 0.0477,0.02668 0.0619,0.04879 0.0269,0.04185 0.0184,0.107196 0.0577,0.137562 0.0208,0.01601 0.0445,-0.02771 0.0668,-0.04157 0.0222,0.0077 0.0434,0.02578 0.0668,0.023 0.0103,-0.0012 0.12772,-0.0783 0.14638,-0.06666 0.0405,0.02528 0.0309,0.134003 0.0769,0.120922 0.0786,-0.02239 0.0124,-0.19614 0.11357,-0.217407 0.0142,0.0036 0.0339,-0.0011 0.0425,0.01069 0.0199,0.02719 0.002,0.08785 0.0346,0.09488 0.0314,0.0067 0.0297,-0.06817 0.0611,-0.07445 0.0238,-0.0047 0.027,0.04704 0.0507,0.05213 0.0643,0.01382 0.12611,-0.07329 0.18901,-0.0568 0.0189,0.06413 0.01,0.144401 0.0566,0.192389 0.009,0.0098 0.183,-0.03952 0.20097,-0.04172 0.0504,-0.0062 0.0841,0.0062 0.12782,0.03039 0.0158,0.0087 0.029,0.02141 0.0435,0.03211 0.029,-0.01601 0.0543,-0.05361 0.087,-0.04802 0.0693,0.01187 0.0286,0.150146 0.084,0.193434 0.0343,0.02677 0.0873,0.002 0.13008,0.0095 0.16547,0.02898 0.11616,0.02185 0.17912,0.186917 0.33455,-0.05013 0.0217,-0.05586 0.17033,0.130377 0.02,0.02502 0.0723,-0.03758 0.0949,-0.01489 0.0249,0.02496 -0.008,0.07052 -0.005,0.105575 5.3e-4,0.0056 0.0104,0.0046 0.0156,0.0069 0.0377,-0.03166 0.0754,-0.06332 0.11307,-0.09498 -0.26278,0.246092 -0.0364,0.0207 0.0228,0.02025 0.031,-2.38e-4 -0.0434,0.05208 -0.0418,0.08303 7.9e-4,0.01494 0.0785,0.01317 0.0578,0.0336 0.26088,0.446041 0.89167,0.07711 0.6308,-0.368929 z" /><path
       style="opacity:1;fill:#683e21;fill-opacity:1;stroke:#5d3c24;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
       id="path12050"
       d="m 110.08091,81.808579 c -0.0298,-0.04238 0.11296,9.16e-4 0.10711,-0.03637 -0.004,-0.02737 -0.0403,-0.03988 -0.0518,-0.06512 -0.007,-0.01574 0.008,-0.03697 -10e-4,-0.05189 -0.0219,-0.03715 -0.0831,-0.05357 -0.086,-0.09659 -0.002,-0.02868 0.0513,-0.02581 0.077,-0.0387 0.021,-0.01103 0.0421,-0.02207 0.0631,-0.0331 0.003,-0.01786 -0.004,-0.04317 0.0108,-0.05349 0.0231,-0.01584 0.0717,0.01456 0.0832,-0.01095 0.0125,-0.02785 -0.0353,-0.05166 -0.0418,-0.08146 -0.0111,-0.05036 0.0409,-0.0439 0.0663,-0.04816 0.0399,0.0049 0.0254,-0.05887 0.0523,-0.06298 0.0264,-0.0041 0.0478,0.03233 0.0744,0.02962 0.0123,-0.0012 -0.001,-0.0246 -0.003,-0.03687 -0.0135,-0.101395 -0.012,-0.02453 -0.004,-0.149393 0.0655,-0.02178 0.14453,0.08138 0.20444,0.04552 0.0296,-0.01769 -0.0234,-0.06827 -0.0166,-0.102054 0.0153,-0.07575 0.13382,-6.26e-4 0.14569,-0.0054 0.0225,-0.0091 0.004,-0.04832 0.007,-0.07244 0.0992,0.03749 0.0156,-0.108026 0.0577,-0.112461 0.0518,-0.0055 0.0796,0.07596 0.1308,0.08553 0.0203,0.0038 0.018,-0.03711 0.0254,-0.05633 0.046,-0.119091 -10e-4,-0.08011 0.0973,-0.121988 0.21909,0.145498 0.0353,-0.162345 0.23449,-0.126255 0.0396,0.0072 0.0742,0.07546 0.10807,0.05372 0.17251,-0.110767 -0.15563,-0.235454 0.14896,-0.07275 0.26332,-0.370163 -0.10899,0.117804 0.15101,-0.128823 0.0275,-0.02604 0.0195,-0.0898 0.0563,-0.09855 0.0375,-0.0089 0.0592,0.06034 0.0978,0.06192 0.29333,0.01208 -0.21271,-0.180796 0.16379,-0.01083 0.029,-0.0031 0.0686,0.01334 0.0871,-0.0093 0.0323,-0.03969 0.0172,-0.102562 0.0408,-0.14793 0.0493,-0.09475 0.0826,-0.03966 0.1603,-0.03896 0.0675,6.31e-4 0.0911,-0.01869 0.147,-0.04663 0.31779,0.244443 -0.0753,-0.0038 0.16217,-0.007 0.0443,-6.01e-4 0.0616,0.09816 0.1032,0.08333 0.0567,-0.02019 0.0396,-0.12921 0.0944,-0.15375 0.0397,-0.01775 0.0747,0.04613 0.11612,0.05966 0.0396,0.01296 0.0824,0.01251 0.12357,0.01878 0.0424,0.01983 0.0804,0.05879 0.12718,0.05949 0.0461,7.28e-4 0.0811,-0.04766 0.12654,-0.05568 0.0457,-0.0081 0.0925,0.0076 0.1389,0.0088 0.0493,0.0013 0.0997,-0.0117 0.14798,-0.0015 0.0532,0.01115 0.0955,0.06112 0.14964,0.06425 0.0549,0.0032 0.10566,-0.03096 0.15848,-0.04644 0.0493,0.02251 0.0985,0.04502 0.14778,0.06753 0.0524,-0.0051 0.10891,-0.03615 0.15733,-0.01537 0.0512,0.02197 0.0541,0.109897 0.10658,0.12864 0.045,0.01609 0.0896,-0.0372 0.13726,-0.04149 0.11926,-0.01073 0.12475,0.02 0.20246,0.08867 0.25367,-0.09484 0.0164,-0.05289 0.1712,0.07915 0.0211,0.01802 0.0544,-0.01368 0.0821,-0.01388 0.0181,-1.36e-4 0.12948,0.01501 0.14825,0.03816 0.0256,0.03167 0.0321,0.07491 0.0481,0.112362 0.0745,0.0081 0.13975,-0.07681 0.21501,-0.07109 0.0259,0.002 0.0425,0.03041 0.0657,0.0422 0.025,0.01267 0.0648,0.0062 0.078,0.03084 0.027,0.05048 -0.007,0.124783 0.0291,0.169286 0.0196,0.02427 0.0609,-0.01358 0.0914,-0.02036 0.0587,-0.03452 0.12643,-0.118524 0.17755,-0.0092 0.0163,0.03478 -0.0256,0.09605 0.008,0.114886 0.0358,0.02014 0.0739,-0.05434 0.11405,-0.04624 0.027,0.0054 0.0162,0.05373 0.0326,0.07578 0.01,0.01285 0.0277,0.01595 0.0416,0.02393 0.15772,-0.08457 0.0552,-0.05047 0.0351,0.05234 -0.003,0.0137 0.0202,0.02065 0.0246,0.03392 0.003,0.0097 -0.002,0.02027 -0.003,0.03046 -0.002,0.04018 -0.004,0.02504 0.0398,0.04508 -0.0606,0.07387 -0.0762,0.0632 3e-5,0.05663 0.2229,0.516193 0.9529,0.200968 0.73001,-0.315225 v 0 c -0.0807,-0.0592 -0.0643,-0.01981 -0.006,-0.127961 -0.003,-0.17769 0.0241,0.04586 -0.12219,-0.09604 -0.0256,-0.02487 -0.006,-0.07138 -0.0141,-0.106209 -0.007,-0.03026 -0.004,-0.07139 -0.0301,-0.0881 -0.0671,-0.04288 -0.16941,0.01567 -0.23541,-0.03948 0.0265,-0.249304 0.0822,-0.194382 -0.10205,-0.165952 -0.0376,0.0058 -0.082,0.03182 -0.11375,0.01074 -0.0393,-0.02612 -0.0405,-0.08515 -0.0615,-0.12734 -0.0642,-0.128513 -0.0165,-0.0928 -0.17559,-0.07838 -0.0306,-0.01017 -0.0601,-0.02411 -0.0916,-0.03045 -0.0268,-0.0054 -0.0591,0.0105 -0.082,-0.0045 -0.031,-0.02024 -0.0267,-0.0884 -0.0636,-0.09078 -0.0531,-0.0034 -0.0868,0.08524 -0.13944,0.07766 -0.0554,-0.008 -0.0125,-0.152257 -0.10423,-0.131596 -0.008,-0.03396 0.004,-0.07902 -0.0228,-0.101872 -0.0211,-0.01832 -0.16555,0.0083 -0.18841,0.0065 -0.0903,-0.0072 -0.10459,-0.02975 -0.17416,-0.08183 -0.0313,-0.02348 -0.0622,-0.04769 -0.0932,-0.07153 -0.18492,-0.0788 -0.0859,-0.05927 -0.2987,-0.05083 -0.0608,-0.02254 -0.0894,-0.101413 -0.15053,-0.123192 -0.17009,-0.06063 -0.39244,0.15505 -0.54667,0.01812 -0.38025,-0.310406 0.01,-0.07991 -0.34842,-0.08069 -0.0593,-1.57e-4 -0.10542,-0.07155 -0.16461,-0.06762 -0.0612,0.0041 -0.10132,0.07528 -0.16107,0.0893 -0.33787,0.07921 0.0278,-0.160341 -0.29028,0.09306 -0.12267,-0.107729 -0.12601,-0.187354 -0.27318,-0.08631 -0.0395,0.02712 -0.0487,0.09926 -0.0959,0.10705 -0.0471,0.0077 -0.0767,-0.07146 -0.12433,-0.07078 -0.30206,0.0042 0.0886,0.180993 -0.207,0.01632 -0.0289,0.02477 -0.051,0.0617 -0.0869,0.07429 -0.0285,0.01 -0.0623,3.38e-4 -0.0895,-0.0125 -0.0408,-0.01923 -0.0662,-0.09579 -0.10883,-0.08078 -0.0488,0.01718 -0.0256,0.106705 -0.064,0.141568 -0.023,0.02097 -0.0622,0.0011 -0.0934,0.0018 -0.0194,0.03827 -0.0388,0.07654 -0.0583,0.11481 -0.0464,-0.07614 -0.0541,-0.201668 -0.1391,-0.228408 -0.0564,-0.01774 -0.0183,0.117016 -0.0329,0.174329 -0.0142,0.05589 -0.002,0.139517 -0.0533,0.164588 -0.0444,0.0214 -0.0798,-0.05958 -0.12532,-0.0785 -0.11651,-0.04847 -0.1106,-0.02285 -0.20138,0.03796 -0.20003,-0.04463 -0.0486,-0.04872 -0.19308,0.09043 -0.0271,0.02605 -0.0699,0.02994 -0.0992,0.05348 -0.0286,0.02302 -0.0353,0.07746 -0.0714,0.08383 -0.0473,0.0083 -0.0889,-0.05616 -0.13607,-0.04725 -0.0371,0.007 -0.0486,0.05779 -0.0729,0.08669 -0.0344,0.01013 -0.0688,0.02026 -0.1032,0.03039 -0.009,0.03325 0.004,0.08817 -0.0289,0.0997 -0.0447,0.01582 -0.0923,-0.05929 -0.13617,-0.04132 -0.0343,0.01405 -0.0112,0.07442 -0.0267,0.10799 -0.0357,0.07601 -0.0816,0.03775 -0.14909,0.025 -0.005,0.03128 0.006,0.06991 -0.0146,0.09392 -0.1344,0.156007 -0.0146,-0.141791 -0.11922,0.04487 -0.0846,0.150765 0.12244,0.258042 -0.16795,0.05362 0.0731,0.289695 0.0551,0.03495 -0.0432,0.162677 -0.0194,0.02526 0.0117,0.08709 -0.0194,0.09364 -0.0557,0.01169 -0.10499,-0.06374 -0.16129,-0.05569 -0.0641,0.0092 0.0809,0.210737 0.009,0.193864 -0.0488,-0.0054 -0.1047,-0.04222 -0.14649,-0.0164 -0.03,0.0185 0.0134,0.07218 0.003,0.105585 -0.036,0.107552 -0.0872,0.01176 -0.10765,0.135359 -0.005,0.03369 0.0295,0.0672 0.0208,0.100226 -0.008,0.03077 -0.0434,0.04656 -0.065,0.06983 -0.0882,0.03797 -0.17631,0.03058 -0.13508,0.154817 0.0162,0.04883 0.0762,0.07935 0.0826,0.130396 0.004,0.03174 -0.0452,0.04763 -0.0567,0.07748 -0.0255,0.06577 -0.007,0.101222 0.009,0.161193 -0.0368,0.524641 0.70512,0.576747 0.74196,0.0521 z" /><path
       style="opacity:0.674219;fill:none;stroke:#5e3b20;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
       d="m 101.24379,82.638017 c 1.69063,-1.449256 3.10864,-0.721747 4.54256,-0.121277 0.42543,0.626961 -1.33204,3.185262 -2.29522,2.830523 -1.60091,-0.589618 -2.97692,-2.160109 -2.24734,-2.709246 z"
       id="path12051"
       sodipodi:nodetypes="ccsc" /><path
       style="opacity:0.564917;fill:none;stroke:#5e3b20;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
       d="m 110.84409,82.970187 c 1.7704,-2.607644 4.31371,-1.187231 5.67324,0.0028 0.42543,0.626961 -1.66363,2.0824 -2.99312,1.962839 -1.69918,-0.152807 -3.4097,-1.416474 -2.68012,-1.965611 z"
       id="path12052"
       sodipodi:nodetypes="ccsc" /><path
       style="opacity:0.94793;fill:#8c7354;fill-opacity:1;stroke:#3f1c0e;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
       d="m 101.41862,83.300115 c 1.07528,-1.261246 2.81129,-0.96223 4.00855,-0.591592 -0.31046,0.604056 -0.54388,1.376083 -2.07234,1.572466 -0.91907,-0.157766 -1.38579,-0.690247 -1.93621,-0.980874 z"
       id="path12053"
       sodipodi:nodetypes="cccc" /><ellipse
       style="opacity:1;fill:#452f1d;fill-opacity:1;stroke:#2e1b13;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
       id="path12054"
       cx="103.63879"
       cy="83.281212"
       rx="0.98640031"
       ry="0.84319782" /><path
       style="opacity:0.815741;fill:#8c7354;fill-opacity:1;stroke:#3f1c0e;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
       d="m 111.46308,83.277211 c 1.07528,-1.261246 3.10479,-0.599567 4.10213,0.0047 -0.31046,0.604056 -0.63746,0.779788 -2.16592,0.976171 -0.91907,-0.157766 -1.38579,-0.690247 -1.93621,-0.980874 z"
       id="path12055"
       sodipodi:nodetypes="cccc" /><path
       style="opacity:1;fill:#452f1d;fill-opacity:1;stroke:#2e1b13;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
       id="ellipse12055"
       sodipodi:type="arc"
       sodipodi:cx="113.56728"
       sodipodi:cy="83.275772"
       sodipodi:rx="0.81260055"
       sodipodi:ry="0.81130558"
       sodipodi:start="0"
       sodipodi:end="5.7642321"
       sodipodi:open="true"
       sodipodi:arc-type="arc"
       d="m 114.37988,83.275772 a 0.81260055,0.81130558 0 0 1 -0.70747,0.804487 0.81260055,0.81130558 0 0 1 -0.89052,-0.596326 0.81260055,0.81130558 0 0 1 0.47704,-0.958787 0.81260055,0.81130558 0 0 1 1.01397,0.348242" /><path
       style="fill:url(#radialGradient12057);fill-opacity:1;stroke:#6a3e2d;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
       d="m 74.22774,142.30274 c 0.803113,-0.68872 -7.93939,-13.08459 -9.273406,-13.548 -1.916014,-0.43952 -1.963004,0.35385 -2.345107,0.92617 0.73466,5.0827 3.348114,5.44158 5.201444,7.83836 l -3.609489,-3.55028 c -1.453557,-0.35049 -2.759666,0.31078 -4.112261,0.65308 -0.217002,0.21976 -0.256799,-0.40615 -0.733749,1.05417 -1.383201,-0.0828 -2.332151,-0.679 -3.466744,-1.05573 -1.325684,-1.50826 -3.10194,-4.22133 -3.77856,-3.994 -0.702609,-0.68964 -1.058005,-0.37555 -1.371595,0.0594 3.377796,8.20652 2.708227,5.22955 3.82928,7.20034 1.413261,0.69902 2.793539,1.29821 3.964478,1.26379 -0.959894,-0.10227 -0.335773,1.30243 -0.222067,2.22154 -0.103743,0.85801 0.05371,1.69652 0.830616,2.48877 -0.94518,-0.0797 -0.510778,1.01956 0.03621,2.21509 6.098113,4.90161 7.196881,4.2839 10.492151,6.09115 0.890649,-3.92583 2.57515,-6.87387 4.558799,-9.86385 z"
       id="path12056"
       sodipodi:nodetypes="ccccccccccccccccc" /><path
       style="fill:url(#radialGradient12062);fill-opacity:1;stroke:#6a3e2d;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
       d="m 66.534669,186.90255 c 1.051967,-0.11267 4.084967,14.7497 3.50797,16.03865 -0.993319,1.69636 -1.603193,1.18675 -2.281824,1.07266 -3.197206,-4.01888 -1.667104,-6.16777 -2.141857,-9.1601 l 0.110863,5.06169 c -0.741152,1.2986 -2.117912,1.79632 -3.294293,2.54653 -0.308756,0.007 0.119702,0.46538 -1.270506,-0.18833 -0.887836,1.06388 -1.104201,2.16349 -1.60761,3.24784 0.189486,1.9991 0.947364,5.1521 0.318047,5.48893 0.02053,0.9843 -0.451775,1.02777 -0.983419,0.95796 -3.659947,-8.08463 -1.951334,-5.55652 -2.617862,-7.72367 0.459761,-1.50816 0.969606,-2.92387 1.797293,-3.75286 -0.5835,0.76902 -1.178476,-0.64828 -1.769752,-1.36108 -0.69584,-0.51259 -1.198442,-1.202 -1.242756,-2.31073 -0.589849,0.74283 -1.092472,-0.32696 -1.588019,-1.54471 0.611063,-7.79996 1.813984,-8.17657 2.756862,-11.81469 2.976825,-4.4821 6.366002,-2.52093 10.306863,3.44191 z"
       id="path12062"
       sodipodi:nodetypes="ccccccccccccccccc" /><path
       style="opacity:0.330207;fill:#683e21;fill-opacity:1;stroke:#5d3c24;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
       id="path12063"
       d="m 109.79017,103.14195 c 5.32178,0.288 9.29953,-4.317073 11.24618,-8.795947 1.11857,-0.826677 2.10023,-5.347306 0.77909,-4.088229 -1.0638,3.778469 -3.13648,7.477175 -6.11643,10.054716 -1.17026,1.88678 -5.74503,1.43183 -5.90884,2.82946 z" /><path
       style="opacity:0.330207;fill:#683e21;fill-opacity:1;stroke:#5d3c24;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
       id="path12064"
       d="m 119.17128,94.803405 c -0.0476,0.007 -0.11466,-0.01805 -0.14267,0.02103 -0.29615,0.412938 0.32576,-0.0684 -0.0374,0.346819 -0.0469,0.05362 -0.14678,0.03831 -0.19242,0.09301 -0.43966,0.526997 0.38639,-0.09188 -0.25552,0.341736 -0.24437,0.589994 0.10155,-0.16387 -0.26742,0.383386 -0.0528,0.07831 -0.0731,0.174173 -0.11139,0.260512 -0.0398,0.08969 -0.0708,0.184277 -0.1227,0.267531 -0.4725,0.757877 0.0981,-0.342226 -0.30878,0.477382 -0.0579,0.07117 -0.10472,0.153059 -0.17376,0.2135 -0.0684,0.05991 -0.1649,0.08181 -0.23274,0.142383 -0.0799,0.07134 -0.17384,0.255749 -0.23131,0.350031 -0.14648,0.24031 -0.072,0.08168 -0.16743,0.320309 -0.0678,0.109078 -0.212,0.0998 -0.29932,0.1757 -0.0419,0.03644 -0.0548,0.09742 -0.0907,0.139776 -0.039,0.04597 -0.0902,0.08012 -0.13239,0.123217 -0.27766,0.283779 -0.0134,0.05776 -0.34579,0.320159 -0.10622,0.177228 -0.35751,0.05349 -0.48486,0.167613 -0.071,0.06362 -0.0331,0.203203 -0.10468,0.266158 -0.0576,0.05064 -0.15688,-5.29e-4 -0.22849,0.02682 -0.0553,0.02122 -0.29742,0.248586 -0.32778,0.27609 -0.19474,0.176474 -0.14575,0.177122 -0.40555,0.235847 -0.0839,0.01897 -0.1787,-0.0026 -0.25554,0.03609 -0.0771,0.0388 -0.11446,0.130403 -0.18199,0.184153 -0.3299,0.262613 -0.0887,-0.06279 -0.32599,0.334323 -0.24189,-0.0982 -0.26799,-0.20476 -0.42232,0.0355 -0.0487,0.0758 -0.0161,0.22523 -0.10267,0.25015 -0.10332,0.0297 -0.18519,-0.14676 -0.29222,-0.13654 -0.0708,0.007 -0.0628,0.13462 -0.12073,0.17596 -0.0522,0.0373 -0.12495,0.0294 -0.18744,0.0441 -0.11969,0.19613 -0.28332,0.0245 -0.44327,0.13677 -0.0486,0.0341 -0.0603,0.11152 -0.11409,0.13668 -0.0997,0.0467 -0.22855,-0.0741 -0.2893,-0.1154 -0.023,0.0731 -0.008,0.1731 -0.0689,0.21928 -0.0414,0.0313 -0.0928,-0.0536 -0.14448,-0.0581 -0.0556,-0.005 -0.10876,0.0346 -0.16447,0.0313 -0.0349,-0.002 -0.33453,-0.10529 -0.3701,-0.0968 -0.0792,0.019 -0.13405,0.0924 -0.20108,0.13857 -0.12046,0.0432 -0.24884,-0.0742 -0.36805,-0.042 -0.0593,0.016 -0.0889,0.0882 -0.14471,0.11384 -0.0397,0.0183 -0.0871,0.007 -0.13056,0.0126 -0.036,0.004 -0.0737,0.0285 -0.10762,0.0157 -0.0426,-0.0162 -0.0661,-0.0628 -0.0991,-0.0942 -0.0373,0.0238 -0.0704,0.0559 -0.11184,0.0713 -0.029,0.0107 -0.0622,0.01 -0.0927,0.005 -0.0134,-0.002 -0.13966,-0.0691 -0.15698,-0.0541 -0.34555,0.29873 0.10934,0.0778 -0.1611,0.19623 -0.0693,0.0366 -0.12035,-0.0947 -0.18231,-0.0734 -0.23085,0.0793 -0.006,0.21164 -0.3198,0.12962 -0.41296,-0.10781 -0.0667,-0.21043 -0.45871,-0.009 -0.0646,0.0184 -0.12917,0.0368 -0.19375,0.0552 -0.65441,0.0725 -0.55185,0.99799 0.10256,0.92547 v 0 c 0.0594,-0.0459 0.11878,-0.0917 0.17818,-0.13761 0.18515,0.0374 0.25935,0.0831 0.44468,-0.006 0.0779,-0.0375 0.12373,-0.131 0.20597,-0.15776 0.17339,-0.0564 0.29897,0.17991 0.44964,-0.01 0.0286,-0.0135 0.0572,-0.0269 0.0858,-0.0404 0.0261,0.0184 0.0475,0.064 0.0782,0.0553 0.0348,-0.01 0.024,-0.0753 0.0554,-0.0933 0.0222,-0.0127 0.049,0.0206 0.0745,0.0187 0.0981,-0.007 -0.008,-0.0933 0.0983,0.0349 0.21953,0.093 -0.0128,0.0349 0.2002,-0.11426 0.0764,-0.0536 0.21035,0.0561 0.28032,0.0273 0.31215,-0.12827 -0.0377,-0.24582 0.3172,-0.0527 0.0566,0.006 0.1134,0.0259 0.16982,0.0183 0.363,-0.0489 0.0339,-0.1024 0.39803,-0.0796 0.0686,0.004 0.13563,0.0504 0.20301,0.0367 0.0693,-0.0141 0.11905,-0.0763 0.17858,-0.11439 0.0512,-0.006 0.10237,-0.0119 0.15355,-0.0179 0.0723,0.0569 0.12498,0.17413 0.21695,0.17076 0.0734,-0.003 0.0603,-0.14412 0.1225,-0.18321 0.0475,-0.0298 0.11901,0.0274 0.16821,5.3e-4 0.0608,-0.0332 0.0637,-0.13969 0.12895,-0.16296 0.0702,-0.025 0.14896,0.0602 0.22023,0.0384 0.0632,-0.0193 0.0891,-0.0977 0.1337,-0.14658 0.15269,-0.0969 0.18667,-0.13872 0.37566,-0.16982 0.0669,-0.011 0.14019,0.0215 0.20343,-0.003 0.0618,-0.024 0.0905,-0.0998 0.14782,-0.1331 0.12238,-0.071 0.28291,-0.0568 0.40142,-0.13801 0.0546,-0.0545 0.10932,-0.10873 0.16366,-0.16341 0.0601,-0.0605 0.1087,-0.13493 0.17973,-0.18215 0.0696,-0.0462 0.15909,-0.0533 0.23298,-0.0922 0.2416,-0.12734 0.36454,-0.31804 0.66585,-0.31645 0.0589,-0.047 0.12319,-0.0878 0.17668,-0.14088 0.0522,-0.0517 0.0762,-0.132328 0.13838,-0.171434 0.0659,-0.04145 0.15936,-0.01804 0.2262,-0.05792 0.0737,-0.04398 0.11819,-0.124587 0.17984,-0.184319 0.24868,-0.240938 0.13585,-0.16382 0.466,-0.270441 0.0689,-0.05481 0.14211,-0.104537 0.20662,-0.164426 0.0631,-0.05858 0.1,-0.147751 0.17507,-0.189926 0.0734,-0.04126 0.17798,-0.0013 0.24814,-0.04785 0.0546,-0.03629 0.0593,-0.116964 0.0883,-0.17576 0.1128,-0.228602 0.0194,-0.143047 0.27572,-0.236463 0.0361,-0.06059 0.0688,-0.123312 0.10828,-0.18175 0.0347,-0.05139 0.0856,-0.09195 0.11385,-0.147135 0.0362,-0.07063 0.0314,-0.160356 0.077,-0.225285 0.0476,-0.06771 0.13024,-0.102322 0.19197,-0.157448 0.23036,-0.205709 0.18505,-0.17235 0.36815,-0.426607 0.0558,-0.0808 0.11163,-0.161607 0.16745,-0.242411 0.0429,-0.08144 0.0775,-0.167896 0.12884,-0.244308 0.0575,-0.08553 0.14427,-0.149958 0.19604,-0.239067 0.0492,-0.08463 0.058,-0.187992 0.10267,-0.27509 0.0548,-0.106918 0.20366,-0.263882 0.2818,-0.352189 0.033,-0.06706 0.0471,-0.147355 0.0989,-0.201195 0.21097,-0.219197 0.2173,-2.64e-4 0.29962,-0.288221 0.0165,-0.05764 0.007,-0.119748 0.0118,-0.179467 0.004,-0.04596 -0.0245,-0.11589 0.0163,-0.137459 0.0581,-0.03073 0.13038,0.01696 0.19557,0.02543 0.34722,-0.494494 -0.3521,-0.985536 -0.69932,-0.491043 z" /><path
       style="opacity:0.330207;fill:#683e21;fill-opacity:1;stroke:#5d3c24;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
       id="path12065"
       d="m 103.63859,97.658143 c 0.008,0.01254 0.072,0.109868 0.0767,0.112585 0.0331,0.01923 0.0806,0.0044 0.11166,0.02685 0.032,0.02315 0.032,0.07648 0.0639,0.09992 0.39841,0.293433 -0.14786,-0.253783 0.23525,0.155189 0.36997,0.457176 -0.345,-0.351393 0.29226,-0.02585 0.0707,0.03613 -0.0221,0.161142 -0.003,0.23827 0.0374,0.152154 0.15056,0.01 0.21606,0.02837 0.0382,0.01074 0.0447,0.06566 0.0671,0.0985 0.0285,0.02785 0.0571,0.0557 0.0856,0.08355 0.0565,-0.01926 0.11815,-0.08812 0.16963,-0.05782 0.0461,0.02711 -0.0236,0.114829 0.004,0.160303 0.0186,0.0301 0.0764,-0.0044 0.10485,0.01667 0.0286,0.02125 0.026,0.06737 0.0471,0.09609 0.0223,0.03024 0.0541,0.05208 0.0812,0.07812 0.27656,-0.0029 0.0345,-0.04582 0.18329,0.155633 0.0241,0.03261 0.0797,0.02424 0.11074,0.05031 0.0177,0.01487 0.004,0.05718 0.0259,0.06434 0.038,0.01238 0.0901,-0.04515 0.11867,-0.0172 0.0308,0.03015 -0.003,0.08623 -0.004,0.129341 0.0414,0.09257 0.15304,0.01543 0.208,0.06255 0.028,0.024 0.005,0.07825 0.0276,0.107101 0.0232,0.0292 0.0675,0.03218 0.099,0.0521 0.10539,0.06658 0.0774,0.0491 0.11618,0.168172 -0.003,0.03582 -0.0454,0.256034 0.0434,0.286004 0.0787,0.02657 0.1967,-0.08649 0.24842,-0.02143 0.0548,0.06896 -0.10672,0.181774 -0.0611,0.257119 0.21754,0.35916 0.26254,-0.398084 0.18553,0.16428 0.44119,-0.0141 -0.0133,-0.056 0.15351,0.14175 0.0332,0.0394 0.11222,-0.0158 0.15392,0.0144 0.0304,0.0221 0.004,0.0767 0.019,0.11108 0.0317,0.0713 0.0846,0.0795 0.14827,0.10704 0.0475,0.0249 0.0854,0.0233 0.0842,0.083 -8e-4,0.0391 -0.0423,0.0863 -0.0171,0.11621 0.0333,0.0394 0.14189,-0.0567 0.16887,0.0301 0.011,0.0352 -0.009,0.0732 -0.0139,0.10976 0.0199,2.6e-4 0.0417,-0.008 0.0596,0.001 0.19409,0.0949 -0.0446,0.0135 0.0136,0.12153 0.0167,0.031 0.067,0.0222 0.0989,0.0373 0.071,0.0335 0.13784,0.0755 0.20814,0.11057 -0.0303,0.28286 -0.0568,0.0627 0.10279,0.19295 0.0268,0.0219 0.0301,0.0622 0.0452,0.0934 0.36388,0.40499 0.93663,-0.1096 0.57275,-0.5146 v 0 c -0.0121,-0.0278 -0.0149,-0.0619 -0.0364,-0.0833 -0.14876,-0.14876 -0.052,0.0816 -0.12018,-0.14128 -0.003,-0.29427 0.0413,0.037 -0.17925,-0.11152 -0.0356,-0.024 0.0359,-0.10057 0.004,-0.12893 -0.0418,-0.0367 -0.14359,0.0369 -0.16633,-0.0139 -0.0249,-0.0557 0.0919,-0.0995 0.0883,-0.1604 -0.002,-0.0331 -0.0658,-0.009 -0.0987,-0.0138 -0.19572,0.0103 -0.003,0.0264 -0.0331,-0.12139 -0.005,-0.0259 -0.0498,0.0249 -0.0761,0.0223 -0.0106,-0.001 -0.006,-0.0204 -0.009,-0.0306 -0.0313,-0.10974 0.006,-0.08 -0.11848,-0.0746 -0.0328,-0.004 -0.0874,0.0202 -0.0985,-0.0109 -0.0693,-0.194398 0.14639,-0.0755 0.0356,-0.251706 -0.057,-0.09068 -0.19851,-0.06135 -0.27368,-0.08593 -0.0404,-0.0132 -0.0718,-0.04564 -0.10765,-0.06846 -0.33879,-0.03222 -0.0526,0.05046 -0.0961,-0.264875 -4e-5,-2.64e-4 -0.2278,-0.161142 -0.23104,-0.162716 -0.0466,-0.02257 -0.12232,-0.0021 -0.148,-0.04715 -0.0308,-0.05399 0.01,-0.123947 0.0149,-0.185917 -0.0296,-0.304036 0.0441,-0.03226 -0.14315,-0.156181 -0.36722,-0.242983 0.28365,0.03521 -0.10732,-0.179623 -0.0389,-0.02138 -0.11795,0.01461 -0.13023,-0.02806 -0.0187,-0.06495 0.0447,-0.127574 0.0671,-0.191359 -0.0466,0.0033 -0.0964,0.02695 -0.13987,0.0098 -0.0384,-0.01511 -0.053,-0.06323 -0.0784,-0.0957 -0.0316,-0.04036 -0.0607,-0.08271 -0.0927,-0.122754 -0.0222,-0.02782 -0.0364,-0.06904 -0.07,-0.08072 -0.0422,-0.01463 -0.0892,0.01505 -0.13362,0.01005 -0.0395,-0.0044 -0.0753,-0.02519 -0.11295,-0.0378 -0.11618,-0.09722 -0.0657,-0.03676 -0.14269,-0.188347 -0.0292,-0.03073 -0.0764,-0.03733 -0.1113,-0.06142 -0.11982,-0.08282 -0.13309,-0.195964 -0.29201,-0.215255 -0.0155,-0.02331 -0.14521,-0.226578 -0.175,-0.23672 -0.0529,-0.01802 -0.11519,0.0519 -0.16541,0.02739 -0.0483,-0.02355 -0.0235,-0.122513 -0.0728,-0.143653 -0.0477,-0.02043 -0.10386,0.0771 -0.14759,0.04922 -0.0468,-0.02983 -0.021,-0.108953 -0.0315,-0.163428 -0.0415,0.02695 -0.0752,0.08381 -0.12456,0.08086 -0.0307,-0.0019 -0.007,-0.06278 -0.0221,-0.08963 -0.0936,-0.167074 -0.26464,0.01728 -0.28311,-0.166958 -0.4177,-0.348083 -0.90996,0.242634 -0.49226,0.590719 z" /><path
       style="opacity:0.330207;fill:#684831;fill-opacity:0.616426;stroke:none;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter12068)"
       id="path12066"
       d="m 117.09731,87.422792 c 0.006,0.02024 0.0453,0.104958 0.001,0.12704 -0.0323,0.01614 -0.0773,-0.01484 -0.10832,0.0037 -0.0205,0.01228 -0.12292,0.193376 -0.13696,0.210445 -0.0227,0.02764 -0.0536,0.04745 -0.0804,0.07118 -0.30225,-0.0572 -0.0151,-0.05281 -0.24788,0.156474 -0.056,0.05037 -0.16032,0.03031 -0.20782,0.08878 -0.0576,0.07089 -0.0251,0.188111 -0.0778,0.262734 -0.0438,0.06205 -0.12999,0.07867 -0.19304,0.120999 -0.0594,0.03985 -0.11598,0.08361 -0.17396,0.125415 -0.52384,0.139155 0.0242,-0.06477 -0.30765,0.233267 -0.0468,0.042 -0.12729,0.02596 -0.17742,0.06386 -0.15573,0.117731 -0.0964,0.169992 -0.13298,0.330163 -0.0104,0.0455 -0.0328,0.0874 -0.0492,0.131098 -0.0215,0.09165 -0.11625,0.119859 -0.16503,0.187262 -0.0303,0.04188 -0.0527,0.08956 -0.0708,0.13798 -0.0179,0.04792 -8e-5,0.113228 -0.0366,0.149077 -0.42081,0.413155 -0.0416,-0.212461 -0.28525,0.237304 0.006,0.01783 0.0914,0.267346 0.0966,0.299435 0.005,0.02916 -0.0137,0.06021 -0.005,0.08849 0.0133,0.04411 0.0805,0.07578 0.0683,0.120203 -0.0139,0.0507 -0.0896,0.05654 -0.12707,0.09347 -0.0328,0.03234 -0.0541,0.07458 -0.0811,0.111871 0.0454,0.118957 0.0556,0.10282 0.0431,0.226375 -0.004,0.03482 -0.0234,0.06819 -0.0202,0.103042 0.004,0.04085 0.0394,0.07526 0.0404,0.116277 5.3e-4,0.02724 -0.0537,0.14429 -0.0679,0.176326 -0.0189,0.0059 -0.0379,0.01172 -0.0568,0.01757 -0.11822,0.606407 0.73937,0.773592 0.85759,0.167185 v 0 c -0.0111,-0.03399 -0.0222,-0.06799 -0.0333,-0.101986 0.0216,-0.0309 0.0503,-0.05788 0.0648,-0.09271 0.01,-0.02312 0.0271,-0.193768 0.0214,-0.213926 -0.0129,-0.0455 -0.0695,-0.07502 -0.0719,-0.122238 -0.0143,-0.275227 0.18734,0.125426 0.002,-0.179922 0.0453,-0.05013 0.1027,-0.09686 0.1147,-0.169195 0.0252,-0.152218 -0.11296,-0.248031 0.0313,-0.387808 0.2194,-0.142243 0.001,0.02236 0.13381,-0.140848 0.0217,-0.02673 0.0783,-0.03173 0.0793,-0.06614 0.002,-0.05433 -0.0658,-0.09178 -0.0734,-0.145603 -0.0129,-0.09237 0.0448,-0.130112 0.0972,-0.181925 0.32326,-0.01101 0.0506,0.05199 0.18343,-0.166635 0.15449,-0.254232 0.10257,0.172043 0.21488,-0.196109 0.0972,-0.31859 -0.14397,-0.22339 0.24857,-0.251235 0.0353,-0.05544 0.0565,-0.122904 0.1058,-0.166314 0.0546,-0.04806 0.13441,-0.05779 0.19484,-0.09829 0.0581,-0.0389 0.10335,-0.09423 0.15781,-0.138036 0.125,-0.100544 0.27093,-0.177035 0.37129,-0.305776 0.0361,-0.02432 0.0716,-0.0496 0.1084,-0.07297 0.029,-0.01844 0.0609,-0.03227 0.0888,-0.05241 0.0271,-0.01955 0.0428,-0.05784 0.0751,-0.06615 0.0443,-0.0114 0.095,0.03029 0.13681,0.01167 0.0198,-0.0088 0.10218,-0.152751 0.11999,-0.18288 0.4735,-0.4735 -0.19613,-1.143134 -0.66963,-0.669631 z" /><path
       style="opacity:0.639781;fill:#7e5334;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter12067)"
       id="path12067"
       d="m 101.57759,88.851481 c 0.0103,0.02778 0.008,0.06476 0.0308,0.08335 0.0524,0.04224 0.12216,0.05663 0.18171,0.08798 0.0921,0.04847 0.18768,0.09181 0.27297,0.151398 0.10857,0.07586 0.20759,0.164809 0.30619,0.253232 0.1082,0.09702 0.19175,0.223769 0.31377,0.302694 0.12987,0.084 0.28579,0.118354 0.42868,0.177528 0.15805,0.212733 0.35648,0.390213 0.52548,0.593246 0.066,0.07928 0.12398,0.164909 0.18558,0.24765 0.0487,0.06539 0.0801,0.147817 0.14528,0.196733 0.27758,0.208227 0.18422,-0.09432 0.2319,0.228193 -0.11604,0.417875 -0.0513,-0.04018 0.12606,0.271206 0.0275,0.04824 -0.0317,0.108545 -0.029,0.163996 0.004,0.07777 0.0682,0.192456 0.102,0.260845 0.13723,0.575342 0.95088,0.381273 0.81366,-0.194069 v 0 c -0.13348,-0.102986 -0.19382,-0.09794 -0.1878,-0.283869 0.003,-0.07806 0.059,-0.151476 0.0496,-0.228997 -0.0171,-0.139996 -0.20799,-0.224432 -0.1647,-0.389752 -0.42133,-0.308941 -0.0225,0.04738 -0.27677,-0.410176 -0.0888,-0.159752 -0.32674,-0.321365 -0.45032,-0.437538 -0.47761,-0.448972 -0.0544,-0.145339 -0.65672,-0.517486 -0.10352,-0.119271 -0.19466,-0.25055 -0.31057,-0.35782 -0.17448,-0.161451 -0.50304,-0.343701 -0.69429,-0.489926 -0.0847,-0.06475 -0.28941,-0.274243 -0.40865,-0.336886 -0.0419,-0.02204 -0.0915,-0.0245 -0.13727,-0.03675 -0.47038,-0.281051 -0.86784,0.384162 -0.39746,0.665213 z" /><path
       style="opacity:0.402041;fill:#5f3e27;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter12069)"
       id="path12068"
       d="m 124.4483,83.941815 c 0.0227,0.214352 0.01,0.0073 -0.002,0.208179 -0.002,0.03351 0.008,0.06769 0.002,0.10065 -0.009,0.04555 -0.0487,0.08479 -0.0466,0.13112 1.8e-4,0.0038 0.11328,0.205396 0.11537,0.209127 0.0848,0.118578 0.10723,0.09676 0.0668,0.245663 -0.0128,0.04715 -0.0576,0.08571 -0.0581,0.134572 -5.3e-4,0.04638 0.0416,0.08338 0.0552,0.127735 0.0358,0.117113 0.0211,0.114007 -0.008,0.225253 -0.004,0.03386 -0.0174,0.06766 -0.0134,0.101577 0.0184,0.15499 0.0649,0.03511 0.0368,0.192727 -0.0237,0.132956 -0.0474,0.06076 -0.0811,0.199988 -0.009,0.03838 -0.005,0.07885 -0.007,0.118272 0.0896,0.105029 0.12423,0.08818 0.0623,0.224345 -0.0198,0.04342 -0.0864,0.07124 -0.0802,0.118539 0.008,0.0604 0.10507,0.08218 0.11465,0.142354 0.007,0.04693 -0.0569,0.07788 -0.0724,0.122811 -0.0149,0.04306 -0.0111,0.09042 -0.0166,0.135626 1.5e-4,0.02921 0.01,0.217601 -0.0248,0.24362 -0.0544,0.04079 -0.15305,-0.003 -0.19829,0.04773 -0.0319,0.03584 0.0347,0.093 0.0303,0.140801 -0.008,0.08764 -0.0862,0.120591 -0.14605,0.161882 0.0143,0.04215 0.06,0.08536 0.0429,0.126442 -0.0154,0.03701 -0.078,0.02183 -0.11291,0.04147 -0.13031,0.07319 -0.0409,0.04211 -0.10859,0.139946 -0.0135,0.01953 -0.0466,0.02429 -0.0535,0.04699 -0.009,0.02827 0.008,0.05847 0.0126,0.0877 -0.16708,-0.137412 -0.0506,-0.0592 -0.0542,-0.0181 -8e-4,0.0089 -0.0224,-0.0019 -0.026,0.0063 -0.007,0.01733 0.01,0.04125 -0.001,0.05664 -0.006,0.009 -0.0176,-0.02725 -0.0263,-0.02043 0.007,-0.08345 0.13291,-0.0084 0.15184,-0.03373 0.0122,-0.01635 -0.042,-0.01754 -0.049,-0.03672 -0.0748,-0.205565 0.12002,-0.05066 -0.15449,-0.193267 -0.002,-0.02051 -0.0246,-0.220385 -0.0227,-0.247296 0.003,-0.03568 0.032,-0.0692 0.0252,-0.104328 -0.007,-0.03754 -0.0534,-0.05858 -0.0637,-0.09541 -0.0286,-0.102209 0.0243,-0.136618 0.0784,-0.210688 -0.0334,-0.120806 -0.0341,-0.06576 -0.015,-0.164451 0.0794,-0.521179 -0.65765,-0.633482 -0.73706,-0.112303 v 0 c -0.004,0.177774 0.0299,0.09329 -0.17566,0.209114 0.0478,0.0806 0.12798,0.199823 0.14536,0.294677 0.0219,0.119467 -0.0231,0.244395 -0.004,0.364349 0.066,0.415476 0.0728,-0.126357 0.0456,0.342784 0.0788,0.682667 -0.0968,-0.343551 0.25099,0.293682 0.0414,0.07581 -0.0765,0.181277 -0.0346,0.256794 0.0417,0.07514 0.16381,0.05759 0.23543,0.105095 0.2493,0.165368 0.0487,0.209537 0.30488,0.07586 0.0414,-0.01865 0.0797,-0.04697 0.12418,-0.05593 0.0906,-0.01823 0.18746,0.03741 0.27685,0.01405 0.04,-0.01048 0.0657,-0.0504 0.0999,-0.07375 0.0398,-0.0272 0.21544,-0.136011 0.25257,-0.159152 0.007,-0.215191 -0.0326,-0.02225 0.10966,-0.147751 0.0253,-0.02233 0.0279,-0.06145 0.0428,-0.09174 0.0587,-0.119449 0.11689,-0.20887 0.24412,-0.268579 0.21147,-0.255159 0.0138,0.04525 0.0581,-0.30735 0.006,-0.0504 0.0571,-0.08444 0.0792,-0.130194 0.0239,-0.04956 0.0431,-0.101558 0.058,-0.154509 0.10466,-0.371414 -0.0714,0.11267 0.0742,-0.266157 -0.3148,-0.386332 -0.0904,0.01085 0.0818,-0.311161 0.0306,-0.05728 -0.0696,-0.12047 -0.0615,-0.184917 0.007,-0.05799 0.09,-0.08507 0.10272,-0.1421 0.02,-0.08935 -0.10782,-0.172064 -0.0629,-0.267393 0.009,-0.03918 0.0171,-0.07845 0.0263,-0.117541 0.008,-0.03527 0.026,-0.0693 0.0259,-0.105521 -9e-5,-0.03287 -0.0228,-0.06232 -0.0265,-0.09498 -0.0175,-0.152739 0.0875,-0.15925 0.0655,-0.305004 -0.0262,-0.03746 -0.0715,-0.06723 -0.0786,-0.112392 -0.007,-0.04426 0.0364,-0.08344 0.0409,-0.128016 7.9e-4,-0.0085 -0.0284,-0.285372 -0.0301,-0.290478 -0.0174,-0.05244 -0.067,-0.09125 -0.0809,-0.144725 -0.0128,-0.04904 0.002,-0.101319 0.004,-0.151982 0.0179,-0.08344 0.0501,-0.186513 0.0329,-0.274849 -0.004,-0.02011 -0.0916,-0.203846 -0.10047,-0.223094 -0.0148,-0.03205 -0.0397,-0.06133 -0.044,-0.09639 -0.002,-0.0173 0.0178,-0.03001 0.0266,-0.04502 -0.0657,-0.5124 -0.79032,-0.419513 -0.72464,0.09289 z" /><path
       style="opacity:1;fill:#020202;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
       id="path12071"
       d="m 75.51736,158.49329 c 0.281559,0.24323 0.225012,0.14213 0.382479,0.53214 0.05409,0.13397 0.0609,0.28994 0.141997,0.40951 0.09789,0.14433 0.268682,0.22541 0.379801,0.35982 0.108593,0.13135 0.177821,0.29098 0.274357,0.43142 0.09994,0.14539 0.209802,0.2837 0.314701,0.42555 0.277672,0.25606 0.289756,0.67721 0.519083,0.95937 0.132366,0.16285 0.351872,0.23942 0.484434,0.40212 0.145658,0.17877 0.190783,0.42557 0.335947,0.60474 0.172783,0.21326 1.058635,0.93256 1.25658,1.0973 0.175199,0.21993 0.326308,0.46142 0.525595,0.65978 0.19096,0.19008 0.428723,0.32664 0.637069,0.49748 0.407794,0.29726 0.738918,0.68165 1.124569,1.00373 1.025512,0.85645 0.205936,0.0128 1.096023,1.0071 0.323043,0.37368 0.696058,0.6987 1.035243,1.05657 0.67269,0.70974 0.377587,0.48826 1.105287,1.14898 1.324086,1.20221 -0.10935,-0.19334 1.086778,0.99287 0.347618,0.2993 0.548421,0.74369 0.894366,1.04432 0.185449,0.16115 0.423302,0.25173 0.618347,0.40113 0.200766,0.15377 0.370668,0.34453 0.565565,0.50568 0.226436,0.18723 1.215859,0.91983 1.401895,1.05857 0.601073,0.70315 0.703361,0.91584 1.460334,1.44339 0.257074,0.17916 0.564107,0.28053 0.815498,0.46757 0.22161,0.16489 0.373116,0.41139 0.592093,0.57976 0.19277,0.14821 0.427066,0.23324 0.633156,0.36229 0.182488,0.11428 0.354356,0.2447 0.531534,0.36705 1.897505,1.3353 -0.829651,-0.64504 0.879047,0.79556 0.12823,0.10811 0.295169,0.15962 0.43883,0.24618 0.131966,0.0795 0.262207,0.16227 0.387614,0.25178 0.125235,0.0894 0.231571,0.20534 0.363591,0.28436 0.173804,0.10403 0.36567,0.17438 0.548502,0.26156 0.258937,0.18656 0.938967,0.67591 1.194983,0.86276 0.196699,0.14354 0.371186,0.32283 0.588285,0.43313 0.208904,0.10614 0.469193,0.0893 0.671774,0.20706 0.178687,0.10387 0.28465,0.30037 0.438531,0.43834 0.134639,0.12072 0.283718,0.22429 0.425577,0.33644 1.219015,1.14204 -0.458504,-0.38719 0.658035,0.51046 0.0841,0.0676 0.12787,0.18059 0.21882,0.23875 0.0757,0.0484 0.18473,0.0204 0.2609,0.068 0.0635,0.0398 0.0856,0.12344 0.13498,0.17986 0.0549,0.0628 0.11804,0.1179 0.17706,0.17685 0.36647,0.0468 0.32339,0.28877 0.66998,0.43592 0.0956,0.0406 0.22878,0.005 0.30119,0.0794 0.50373,0.51764 -0.39052,0.21359 0.41218,0.398 0.15823,0.09 0.43637,0.26515 0.61166,0.27466 0.45496,0.0247 0.73057,-0.19327 1.09806,-0.42779 0.87818,-0.56043 0.59124,-0.36121 1.31806,-1.24684 1.75918,-1.261 0.0546,0.0171 1.75232,-1.43357 0.30977,-0.2647 0.66481,-0.47622 0.95827,-0.75888 1.16616,-1.12323 0.63089,-0.9978 1.92457,-2.13868 0.39057,-0.34445 0.84543,-0.60831 1.26814,-0.91246 0.8015,-0.86158 1.17953,-1.32942 2.09242,-2.07021 0.35198,-0.28562 0.75565,-0.50375 1.10495,-0.79263 0.32114,-0.2656 0.58824,-0.59137 0.90121,-0.86656 1.65178,-1.45242 0.31062,-0.0349 1.74427,-1.66011 0.33557,-0.18577 0.70159,-0.3249 1.00672,-0.55731 0.30265,-0.23052 0.51429,-0.5624 0.79723,-0.81671 0.30267,-0.27204 1.43257,-1.09559 1.75083,-1.34029 1.5457,-1.18842 0.11542,-0.14853 1.752,-1.31185 0.26971,-0.23023 0.53,-0.47196 0.80912,-0.69069 0.67458,-0.5286 0.91073,-0.57234 1.51306,-1.17129 0.30302,-0.30131 0.79513,-0.98858 1.05929,-1.3198 0.19167,-0.24033 0.39152,-0.47402 0.58727,-0.71102 1.18015,-2.25829 -0.36721,0.50316 1.0795,-1.48598 0.16954,-0.2331 0.23011,-0.53211 0.39101,-0.77126 0.15789,-0.23465 0.37969,-0.41965 0.558,-0.63919 0.35447,-0.43642 0.65584,-0.88907 0.9763,-1.35032 0.14401,-0.24995 0.25772,-0.52001 0.43203,-0.74987 0.17349,-0.22877 0.42571,-0.38922 0.60304,-0.61503 0.57048,-0.72639 0.37081,-0.73599 0.81898,-1.55346 0.40671,-0.74185 0.63105,-0.93697 1.17656,-1.5731 0.19135,-0.2499 0.39741,-0.48919 0.57404,-0.74969 0.16417,-0.24211 0.2676,-0.52405 0.44654,-0.75546 0.0219,-0.0284 1.09887,-1.08331 1.14178,-1.14392 0.14589,-0.20608 0.20902,-0.46006 0.32778,-0.68287 0.12155,-0.22805 0.26168,-0.4457 0.39252,-0.66855 0.58347,-0.91087 1.18261,-1.8108 1.77936,-2.71297 0.15421,-0.23314 0.30054,-0.47192 0.46637,-0.69696 0.15369,-0.20858 0.32742,-0.40163 0.49113,-0.60245 0.13001,-0.18555 0.2378,-0.38886 0.39004,-0.55664 0.13324,-0.14684 0.33449,-0.22418 0.45869,-0.37873 0.24271,-0.30201 0.30474,-0.90322 0.62399,-1.1804 0.10767,-0.0935 0.25195,-0.13359 0.37793,-0.20039 0.40285,-0.74797 -0.10912,0.0418 0.56608,-0.51139 0.18711,-0.15329 0.23892,-0.42804 0.41101,-0.598 0.73126,-0.72219 -0.11131,0.32767 0.48313,-0.45257 0.099,-0.055 0.19244,-0.12151 0.29705,-0.16492 0.0968,-0.0402 0.20721,-0.0414 0.30293,-0.0841 0.0737,-0.0328 0.48327,-0.31342 0.53893,-0.36414 0.0879,-0.0801 0.14806,-0.18742 0.23615,-0.26724 0.0903,-0.0818 0.19718,-0.14315 0.29576,-0.21472 0.0859,-0.0887 0.16549,-0.184 0.25766,-0.26616 0.0928,-0.0827 0.20266,-0.14482 0.29577,-0.2272 0.0241,-0.0213 0.48613,-0.5009 0.50878,-0.51792 0.49938,-0.37531 0.18603,0.0858 0.48357,-0.49728 0.10068,-0.069 0.21903,-0.11754 0.30205,-0.20702 0.0783,-0.0844 0.10777,-0.20377 0.16933,-0.30106 0.35061,-0.55416 0.0133,-0.01 0.41428,-0.45648 0.34856,-0.38824 -0.0698,-0.1364 0.46492,-0.37628 0.024,-0.1055 0.0481,-0.21099 0.0722,-0.31649 0.34055,-0.41288 -0.24334,-0.89449 -0.58389,-0.48162 v 0 c -0.0381,0.095 -0.0763,0.1899 -0.11439,0.28485 -0.16082,0.0626 -0.43843,0.14327 -0.55405,0.29402 -0.0607,0.0792 -0.0533,0.19391 -0.0993,0.28248 -0.047,0.0905 -0.11798,0.16646 -0.17717,0.24956 -0.26065,0.36594 -0.12107,0.19678 -0.43841,0.52539 -0.52449,0.45573 0.0242,-0.044 -0.46272,0.47343 -0.17106,0.18177 -0.32877,0.29783 -0.50911,0.46835 -0.0829,0.0784 -0.1493,0.17562 -0.24188,0.24238 -0.0993,0.0716 -0.21785,0.1118 -0.32678,0.16769 -0.21976,0.31997 -0.11584,0.26138 -0.45514,0.41683 -0.09,0.0412 -0.1989,0.0472 -0.27635,0.10894 -0.0951,0.0757 -0.11485,0.23292 -0.22288,0.28869 -0.74644,0.38534 -0.176,-0.37618 -0.62345,0.38308 -0.0946,0.0857 -0.18371,0.17783 -0.28368,0.25718 -0.0944,0.0749 -0.21322,0.11886 -0.29796,0.20447 -0.0885,0.0894 -0.12208,0.22449 -0.21284,0.31155 -0.092,0.0883 -0.22064,0.12866 -0.32394,0.20338 -0.35766,0.2587 -0.28604,0.22204 -0.52724,0.58915 -0.38144,0.39134 -0.20205,0.18389 -0.53734,0.62307 -0.10398,0.1111 -0.24609,0.18454 -0.3411,0.3034 -0.10632,0.13303 -0.16803,0.2963 -0.25516,0.44262 -0.33322,0.55956 -0.30036,0.49143 -0.68806,1.05859 -0.40401,0.48114 -0.64886,0.75955 -1.02953,1.26908 -0.1746,0.23371 -0.33729,0.4761 -0.50705,0.71335 -0.26071,0.36438 -0.71409,0.96656 -0.93433,1.36179 -0.12407,0.22262 -0.21452,0.46237 -0.32178,0.69356 -0.13359,0.20832 -0.27114,0.41415 -0.40077,0.62495 -0.33428,0.54359 -0.39474,0.73436 -0.80145,1.24424 -0.17256,0.21632 -0.38004,0.403 -0.55476,0.61758 -1.10339,1.35511 0.0934,0.0937 -1.22785,1.4106 -1.32828,1.68602 0.0393,-0.16374 -1.04463,1.66573 -0.15058,0.25415 -0.35992,0.46937 -0.51971,0.71782 -0.15113,0.23502 -0.27588,0.486 -0.41156,0.73026 -0.13952,0.25117 -0.2437,0.52462 -0.41402,0.75601 -0.1723,0.23409 -0.4032,0.41877 -0.6048,0.62816 -0.14426,0.2459 -0.2798,0.49712 -0.43277,0.73769 -0.43207,0.67945 -0.50701,0.70184 -0.97865,1.35945 -0.95607,1.33303 0.008,0.0455 -0.96191,1.43739 -0.17396,0.24967 -0.36174,0.48944 -0.54261,0.73416 -0.16363,0.21349 -0.84453,1.11547 -1.05155,1.33548 -0.18188,0.19329 -0.40267,0.34701 -0.58694,0.53802 -0.20303,0.21047 -0.34959,0.47562 -0.57296,0.66435 -0.24525,0.20721 -0.57117,0.3036 -0.81704,0.51007 -0.27199,0.2284 -0.48182,0.52196 -0.72273,0.78294 -1.27514,0.94417 -0.5039,0.36516 -1.74048,1.31175 -0.29841,0.22843 -0.58983,0.46635 -0.89606,0.68418 -0.30072,0.21391 -0.62405,0.39491 -0.92371,0.61029 -0.91056,0.65446 -0.93074,0.72793 -1.73835,1.50077 -0.32664,0.22624 -0.67135,0.4284 -0.97993,0.67871 -3.71867,3.01648 1.98268,-1.36415 -1.81759,1.68553 -0.35395,0.28404 -0.75541,0.5051 -1.11028,0.78799 -0.77347,0.6166 -1.43445,1.36776 -2.26013,1.92301 -0.35822,0.3763 -0.73142,0.73889 -1.07465,1.12891 -1.37624,1.56382 -0.51512,0.82539 -1.91389,2.14724 -3.37864,3.19283 1.52461,-1.48184 -1.8782,1.44794 -0.27348,0.23546 -0.48075,0.53833 -0.72112,0.8075 -0.79791,0.79555 -0.45742,0.5461 -1.29619,1.08535 -0.88538,0.5692 -0.12772,0.13733 -0.56676,0.28919 -0.0404,0.014 -0.0734,0.0741 -0.11366,0.0597 -0.0742,-0.0265 -0.11478,-0.10788 -0.17217,-0.16182 -0.11192,-0.15355 -0.20167,-0.31235 -0.37905,-0.40556 -0.35512,-0.18663 -0.25706,0.0251 -0.55601,-0.2358 -0.0757,-0.0661 -0.11319,-0.16886 -0.18877,-0.23511 -0.0666,-0.0584 -0.15356,-0.0882 -0.23034,-0.13226 -0.0539,-0.0423 -0.11219,-0.0797 -0.16182,-0.12704 -0.11716,-0.11169 -0.19558,-0.26054 -0.3506,-0.33241 -0.0979,-0.0454 -0.21583,-0.0349 -0.31357,-0.0807 -0.33678,-0.15768 -0.37122,-0.2857 -0.59621,-0.58336 -0.15255,-0.10262 -0.301631,-0.21059 -0.457648,-0.30786 -0.469747,-0.29286 -0.676762,-0.35998 -1.127165,-0.70076 -0.200909,-0.15201 -0.364442,-0.35208 -0.574693,-0.49088 -1.915531,-1.26457 0.482864,0.60182 -1.26591,-0.80888 -0.196609,-0.0591 -0.405307,-0.0874 -0.589828,-0.17741 -0.325268,-0.1587 -0.311843,-0.37124 -0.579733,-0.59677 -0.13393,-0.11275 -0.304234,-0.17412 -0.448527,-0.27326 -0.326568,-0.22439 -0.615072,-0.50129 -0.951775,-0.71209 -0.707261,-0.50617 -0.370465,-0.20946 -0.99586,-0.90636 -0.223383,-0.16728 -0.511403,-0.22906 -0.745601,-0.38083 -0.255739,-0.16573 -0.483825,-0.37099 -0.717109,-0.56707 -0.517202,-0.43472 -0.996703,-0.91305 -1.519205,-1.34177 -0.420373,-0.42807 -0.790043,-0.85633 -1.292606,-1.19034 -0.21359,-0.14196 -0.474824,-0.20644 -0.679342,-0.36119 -0.192357,-0.14554 -0.316333,-0.36585 -0.495294,-0.52758 -1.68787,-1.52537 0.548423,0.69373 -0.99844,-0.87183 -0.165809,-0.16135 -0.343699,-0.31115 -0.497422,-0.48405 -0.478875,-0.53863 -0.442066,-0.67156 -0.966097,-1.1864 -0.634611,-0.62347 -0.625409,-0.42716 -1.264976,-1.03835 -0.176694,-0.16885 -0.321714,-0.368 -0.482573,-0.552 -0.166764,-0.19463 -0.317082,-0.40466 -0.500293,-0.5839 -0.173744,-0.16998 -0.377814,-0.30591 -0.566205,-0.45949 -0.193485,-0.15774 -0.382596,-0.32093 -0.579417,-0.47448 -0.195096,-0.15221 -0.420356,-0.26825 -0.596003,-0.44255 -0.188166,-0.18671 -0.294095,-0.44634 -0.485071,-0.63019 -0.200829,-0.19333 -0.452043,-0.32633 -0.678064,-0.48951 -0.187396,-0.20128 -0.374792,-0.40255 -0.562186,-0.60383 -0.202253,-0.16965 -0.424368,-0.3181 -0.606761,-0.50895 -0.149074,-0.15598 -0.25223,-0.35014 -0.38027,-0.5238 -0.116776,-0.15838 -0.23069,-0.31908 -0.354158,-0.47231 -0.109,-0.13528 -0.265763,-0.23687 -0.342773,-0.39259 -0.08415,-0.17016 -0.08401,-0.37023 -0.12601,-0.55535 -0.966992,-0.80957 0.03251,0.12499 -0.654818,-0.81941 -0.09843,-0.13525 -0.264789,-0.21153 -0.361616,-0.34793 -0.08275,-0.11658 -0.09356,-0.27223 -0.166071,-0.39544 -0.138703,-0.23567 -0.283438,-0.33119 -0.483204,-0.49882 -0.289613,-0.405 -0.862361,0.005 -0.572746,0.40957 z" /><path
       style="opacity:1;fill:#020202;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
       id="path12072"
       d="m 87.380634,149.98139 c 0.562337,0.42447 0.10364,0.0899 0.926031,0.63402 0.295741,0.19566 0.576101,0.41581 0.883557,0.5925 0.41379,0.2378 0.858026,0.41901 1.276337,0.64877 0.514945,0.28282 0.981448,0.65883 1.522267,0.88834 0.650042,0.27587 1.350952,0.41179 2.026428,0.61769 0.678124,0.29374 1.343525,0.61879 2.034371,0.88121 0.659511,0.25052 1.339021,0.44507 2.012262,0.65593 1.312595,0.41111 2.369213,0.7202 3.699053,1.03894 2.74701,0.6584 0.62211,0.0301 3.06486,0.80707 0.73017,-0.30215 1.47041,0.14198 2.19671,0.0476 0.36207,-0.047 0.69672,-0.22004 1.03782,-0.35023 2.35975,-0.90069 1.40312,-0.52563 3.8481,-2.14362 0.86635,-0.57331 1.74179,-1.13276 2.61269,-1.69914 1.96455,-1.4736 4.04807,-2.77913 6.03418,-4.22188 0.98848,-0.71806 1.94055,-1.48498 2.91609,-2.22052 0.91395,-0.6891 1.8587,-1.33805 2.75229,-2.05335 1.21282,-0.97084 3.04032,-2.66548 4.22242,-3.7424 0.5334,-0.50236 1.0668,-1.00472 1.6002,-1.50708 0.41856,-0.43844 0.8191,-0.89483 1.25569,-1.31532 0.35085,-0.33792 0.77593,-0.59738 1.10403,-0.95743 0.25893,-0.28414 0.37615,-0.68027 0.64166,-0.95827 1.53092,-1.60298 0.25121,0.46701 1.23634,-1.33174 0.16486,-0.17547 0.32973,-0.35095 0.4946,-0.52643 0.1449,-0.13563 0.29574,-0.26518 0.43472,-0.40689 0.11644,-0.11872 0.21193,-0.25712 0.33067,-0.37354 0.13139,-0.2332 0.41567,-0.26453 0.59497,-0.43147 0.0692,-0.0644 0.10524,-0.15709 0.15785,-0.23563 0.0863,0.001 0.17264,0.003 0.25896,0.004 0.52947,-0.38468 -0.0146,-1.13345 -0.54401,-0.74878 v 0 c -0.059,0.0589 -0.11796,0.11788 -0.17693,0.17682 -0.16097,0.16689 -0.28107,0.30417 -0.47261,0.4436 -0.11547,0.0841 -0.25908,0.12965 -0.36304,0.22759 -0.12683,0.11948 -0.18858,0.29839 -0.31853,0.41448 -0.15898,0.14202 -0.35734,0.23259 -0.53601,0.34889 -0.17296,0.17687 -0.34593,0.35375 -0.51889,0.53062 -0.19342,0.26353 -0.89252,1.23073 -1.09614,1.44387 -0.25699,0.26902 -0.575,0.47429 -0.83659,0.73884 -0.33546,0.33928 -0.61434,0.73171 -0.95136,1.06943 -2.66974,2.67526 0.0363,-0.43094 -2.73348,2.91026 -2.72275,2.34266 -1.23921,1.21067 -4.48466,3.35084 -0.88245,0.72957 -1.55324,1.69094 -2.42777,2.42998 -0.92871,0.78483 -1.98504,1.40507 -2.9639,2.1264 -4.76137,3.50866 -1.19949,1.1134 -6.00919,4.20231 -0.87794,0.53801 -1.75588,1.07602 -2.63383,1.61403 -0.72261,0.42001 -1.45187,0.82876 -2.16782,1.26001 -0.48979,0.29502 -0.94026,0.65695 -1.44875,0.91842 -0.90173,0.46368 -1.93682,0.28687 -2.89872,0.25249 -0.64078,-0.1992 -2.40377,-0.75552 -2.99386,-0.90174 -2.04845,-0.50756 -1.60314,-0.1862 -3.675114,-0.93087 -0.657317,-0.23623 -1.278638,-0.56418 -1.931326,-0.81292 -0.683445,-0.26047 -1.383215,-0.4759 -2.074823,-0.71385 -0.625842,-0.28448 -1.245359,-0.58332 -1.87753,-0.85345 -0.524495,-0.22412 -1.076648,-0.38312 -1.591377,-0.62883 -0.520866,-0.24865 -1.494178,-0.90185 -2.030785,-1.23619 -0.197837,-0.12326 -0.409774,-0.22473 -0.598956,-0.3609 -0.114043,-0.0821 -0.20379,-0.19351 -0.305686,-0.29026 -0.479081,-0.36308 -0.99255,0.31445 -0.513469,0.67753 z" /><path
       style="opacity:1;fill:#020202;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
       id="path12073"
       d="m 73.123484,184.44682 c 0.09088,-0.11877 0.153996,-0.26528 0.272651,-0.35632 0.188571,-0.14469 0.428519,-0.20815 0.629137,-0.3356 0.261284,-0.16601 0.497326,-0.36906 0.753501,-0.54284 0.282747,-0.19181 0.586584,-0.35227 0.862682,-0.55353 0.287105,-0.20928 0.544211,-0.4571 0.824061,-0.67598 0.281794,-0.22041 0.573614,-0.42768 0.860419,-0.64152 1.603603,-0.61443 0.390629,-0.0709 1.79541,-0.90687 1.088882,-0.64799 0.449646,-0.19039 1.464204,-0.77184 0.956834,-0.54837 0.169201,-0.23527 1.179185,-0.56509 0.160255,-0.0955 0.723852,-0.44086 0.9091,-0.51597 0.150762,-0.0611 0.319127,-0.0708 0.469863,-0.13198 0.137088,-0.0556 0.253995,-0.15275 0.387681,-0.21614 0.253494,-0.12019 0.504716,-0.18776 0.771152,-0.27018 0.504605,-0.69051 -0.07724,-0.0436 0.531145,-0.36273 0.134697,-0.14356 0.232498,-0.27517 0.413745,-0.36428 0.0752,-0.037 0.160906,-0.0469 0.241361,-0.0703 0.07663,-0.039 0.153268,-0.078 0.229902,-0.11703 0.08953,-0.0138 0.186864,-0.002 0.268576,-0.0413 0.09679,-0.0463 0.159893,-0.14389 0.247642,-0.20563 0.109101,-0.0768 0.519054,-0.30297 0.628586,-0.36974 0.256212,-0.15618 0.374825,-0.24349 0.617781,-0.412 0.105836,-0.0376 0.211672,-0.0752 0.317508,-0.11285 0.110363,-0.0188 0.225589,-0.0189 0.331092,-0.0563 0.108669,-0.0386 0.20683,-0.10355 0.302162,-0.16842 0.09029,-0.0615 0.152357,-0.1651 0.252388,-0.20894 0.09824,-0.0431 0.212736,-0.0277 0.319101,-0.0416 0.09609,-0.055 0.19218,-0.10994 0.288269,-0.16491 0.506632,-0.21507 0.20247,-0.93156 -0.304162,-0.71648 v 0 c -0.08841,0.0489 -0.178494,0.0948 -0.26524,0.14659 -0.09651,0.0576 -0.177326,0.14676 -0.284271,0.18132 -0.561409,0.18145 -0.159128,-0.1559 -0.675116,0.14631 -0.104733,0.0614 -0.172929,0.17681 -0.281633,0.23081 -0.110083,0.0547 -0.238879,0.0581 -0.35832,0.0871 -0.340315,0.17121 -0.653304,0.36577 -0.968949,0.57916 -0.103502,0.07 -0.199829,0.15114 -0.30825,0.21322 -0.146288,0.0838 -0.372507,0.15411 -0.53217,0.20925 -0.06625,0.0392 -0.130577,0.0818 -0.198736,0.1176 -0.05908,0.031 -0.40816,0.18087 -0.44686,0.21574 -0.08431,0.076 -0.106244,0.21154 -0.199946,0.27557 -0.177147,0.12105 -0.468022,0.003 -0.59508,0.24531 -0.428,0.21243 -0.200035,0.12159 -0.68671,0.26535 -0.134525,0.0666 -0.234942,0.19072 -0.369237,0.25778 -0.145801,0.0728 -0.315682,0.0875 -0.46278,0.1577 -0.156138,0.0745 -0.294073,0.18226 -0.441113,0.27339 -0.171257,0.0779 -0.342516,0.1557 -0.513776,0.23356 -1.745837,0.73317 0.665316,-0.32015 -1.160941,0.62415 -0.231566,0.11973 -0.491731,0.17717 -0.724406,0.29474 -0.268298,0.13556 -0.508161,0.32251 -0.774194,0.46247 -1.612763,0.84846 -0.194569,-0.0826 -1.74937,1.02459 -2.131052,1.13984 0.150604,-0.16645 -1.801264,1.21957 -0.278318,0.19764 -0.587243,0.34823 -0.883661,0.5175 -0.265525,0.15164 -0.563166,0.25431 -0.802061,0.44517 -0.194077,0.15505 -0.275754,0.4256 -0.474458,0.57468 -0.118296,0.0888 -0.287415,0.0698 -0.431123,0.10473 -0.560734,0.3716 -0.03521,1.1646 0.525523,0.793 z" /><path
       style="opacity:1;fill:#020202;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
       id="path12074"
       d="m 74.659827,161.91379 c -0.649867,0.40771 0.534879,-0.2994 -0.69791,0.206 -0.197202,0.0808 -0.349583,0.24613 -0.538686,0.34444 -0.212495,0.11046 -0.441211,0.18643 -0.661818,0.27965 -0.247738,0.0659 -0.512728,0.0854 -0.74321,0.19766 -0.227364,0.1107 -0.402952,0.30566 -0.60443,0.45849 -2.190562,1.04286 0.888603,-0.47626 -1.206137,0.73428 -0.200882,0.11609 -0.439047,0.15641 -0.64211,0.26864 -0.194177,0.10733 -0.364937,0.25262 -0.542255,0.38597 -0.448521,0.3373 -0.529993,0.42502 -0.941082,0.79194 -0.130301,0.14486 -0.260602,0.28971 -0.390903,0.43457 -0.148469,0.11048 -0.321413,0.19406 -0.445408,0.33144 -0.110453,0.12238 -0.155732,0.29087 -0.242669,0.43093 -0.07758,0.12499 -0.172964,0.23832 -0.250367,0.36341 -0.229045,0.37017 -0.218856,0.39805 -0.375766,0.80069 -0.08661,0.11304 -0.198528,0.21058 -0.259818,0.33912 -0.06127,0.12848 -0.03492,0.28851 -0.09986,0.41518 -0.390237,0.76122 -0.159067,-0.11527 -0.510524,0.61566 -0.675601,1.40504 0.501432,-0.56538 -0.327539,0.7663 -0.0629,0.11368 -0.136671,0.22199 -0.188704,0.34103 -0.05012,0.11467 -0.07239,0.23978 -0.116372,0.35694 -0.160221,0.42679 -0.37868,0.83398 -0.627965,1.21378 0.01184,0.27342 -0.306935,0.32285 -0.392146,0.52355 -0.03961,0.0933 0.0539,0.21664 0.0026,0.30409 -0.04791,0.0817 -0.202764,0.0468 -0.254736,0.12599 -0.0457,0.0696 0.02666,0.16854 0.0082,0.24976 -0.01588,0.0697 -0.07156,0.12379 -0.107333,0.18569 -0.04806,0.0431 -0.08912,0.0956 -0.144184,0.12927 -0.05049,0.0309 -0.126975,0.0171 -0.166769,0.0609 -0.04138,0.0455 -0.03799,0.11735 -0.05,0.1777 -0.01284,0.0646 0.02025,0.14757 -0.02434,0.19601 -0.268295,0.29142 -0.257387,-0.11683 -0.219497,0.24979 -0.287559,0.0593 -0.100229,0.19897 -0.227302,0.36311 -0.02883,0.0372 -0.09422,0.0251 -0.129684,0.0561 -0.07584,0.0663 -0.07375,0.18848 -0.08608,0.27384 -0.0657,-0.0364 -0.130315,-0.14367 -0.197088,-0.10927 -0.06639,0.0342 0.03098,0.17157 -0.02333,0.22284 -0.05486,0.0518 -0.154136,-0.0104 -0.225997,0.0126 -0.112906,0.0361 -0.184674,0.15338 -0.292968,0.2016 -0.05724,0.0255 -0.120861,0.0331 -0.181292,0.0496 -0.165916,0.23528 -0.05908,0.15581 -0.31024,0.25159 -0.498587,0.32095 -0.04469,1.02606 0.453893,0.7051 v 0 c 0.107665,-0.21595 0.02214,-0.14838 0.255414,-0.20415 0.02431,-0.011 0.386862,-0.17321 0.406257,-0.18761 0.05105,-0.0379 0.07521,-0.10369 0.122457,-0.14624 0.03684,-0.0332 0.08732,-0.0478 0.1266,-0.078 0.111231,-0.0857 0.197393,-0.20156 0.320945,-0.27274 0.06003,-0.0152 0.133537,-0.005 0.180078,-0.0456 0.04438,-0.0389 0.02796,-0.11748 0.06131,-0.16621 0.03369,-0.0492 0.10204,-0.0684 0.133786,-0.1189 0.02928,-0.0466 0.02093,-0.10873 0.04137,-0.15983 0.06091,-0.15222 0.09142,-0.15453 0.211571,-0.26399 0.011,-0.0158 0.121547,-0.16352 0.136186,-0.21358 0.01408,-0.0481 -0.01265,-0.11502 0.02477,-0.1484 0.05227,-0.0466 0.15001,-0.009 0.202901,-0.0547 0.108756,-0.0944 0.06235,-0.31301 0.24576,-0.35543 0.04655,-0.16332 0.07617,-0.31189 0.174092,-0.45697 0.05007,-0.0742 0.125991,-0.12758 0.181972,-0.19741 0.195976,-0.24445 0.305032,-0.52761 0.411319,-0.81928 0.06177,-0.16071 0.184163,-0.49904 0.272222,-0.64549 0.03489,-0.058 0.370988,-0.45812 0.399913,-0.52007 0.05466,-0.11708 0.0661,-0.24983 0.09915,-0.37474 0.05809,-0.12207 0.116177,-0.24414 0.174266,-0.36621 0.09933,-0.1 0.221227,-0.18169 0.298003,-0.29986 0.301638,-0.46426 -0.003,-0.30129 0.276649,-0.77135 0.07204,-0.12111 0.201367,-0.19872 0.285542,-0.31173 0.234201,-0.31443 0.203708,-0.3561 0.293131,-0.73137 0.219985,-0.35223 0.422682,-0.70937 0.653801,-1.05449 0.169269,-0.25276 0.318912,-0.50255 0.532304,-0.72357 0.117974,-0.1222 0.255779,-0.22355 0.383669,-0.33533 0.05509,-0.0456 0.8676,-0.71924 0.900024,-0.74253 0.174834,-0.12559 0.370478,-0.22013 0.546748,-0.3437 0.181433,-0.12719 0.336643,-0.29104 0.525045,-0.40766 0.187219,-0.11589 0.403434,-0.17819 0.595458,-0.28592 0.199255,-0.11179 0.384064,-0.24757 0.576093,-0.37136 0.245907,-0.0504 0.503044,-0.0622 0.737717,-0.15125 0.230785,-0.0876 0.428027,-0.24612 0.640376,-0.37201 0.203229,-0.12049 0.403453,-0.24599 0.606309,-0.3671 0.310665,-0.18548 0.605189,-0.39158 0.961191,-0.48247 0.07787,-0.0199 0.160721,-0.003 0.241081,-0.004 0.533497,-0.17936 0.279841,-0.93384 -0.253657,-0.75448 z" /><path
       style="opacity:1;fill:#020202;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
       id="path12075"
       d="m 110.98545,117.68223 c 0.0761,0.51305 0.05,0.0504 -0.11826,0.74388 -0.0503,0.20727 -0.0721,0.42042 -0.10819,0.63062 -0.115,0.28156 -0.25758,0.55338 -0.34499,0.84468 -1.14299,3.80898 0.74322,-1.62826 -0.72681,2.47876 -0.075,0.47552 -0.12714,0.95519 -0.2249,1.42655 -0.0999,0.48158 -0.26837,0.94726 -0.36733,1.42903 -1.18427,5.76538 0.69395,-2.61741 -0.54177,3.29694 -0.62351,2.98419 -0.29201,0.34221 -0.57181,3.33358 -0.23732,1.20027 -0.38893,1.82454 -0.51983,3.03089 -0.05,0.46031 -0.0406,0.92616 -0.0982,1.38558 -0.0571,0.45578 -0.17732,0.90175 -0.24553,1.35601 -0.45916,3.05765 0.16403,-0.35226 -0.38955,2.53765 -0.0929,1.50873 0.0266,0.6183 -0.3016,2.01801 -0.0696,0.29686 -0.11706,0.59898 -0.19631,0.89341 -0.0736,0.2736 -0.20027,0.53212 -0.26179,0.8087 -0.51139,2.29902 0.33401,-0.60466 -0.306,1.48311 -0.0436,0.21388 -0.0872,0.42776 -0.13078,0.64164 -0.0778,0.18412 -0.18427,0.35863 -0.23353,0.55236 -0.047,0.18503 -0.0196,0.38223 -0.0519,0.57039 -0.0319,0.18577 -0.0983,0.36403 -0.13998,0.54787 -0.31228,1.37889 0.11259,-0.3108 -0.23707,1.04568 -0.0207,0.34324 -0.23558,0.63779 -0.28887,0.97136 -0.0234,0.14622 0.005,0.2961 0.008,0.44415 -0.12942,0.56185 0.66515,0.74489 0.79458,0.18304 v 0 c 0.0758,-0.47789 0.19293,-0.9458 0.24611,-1.42734 0.0759,-0.16759 0.163,-0.33056 0.22778,-0.50276 0.0591,-0.15709 0.26561,-0.90513 0.29213,-1.05502 0.1048,-0.59218 0.0626,-1.20894 0.23826,-1.79113 0.0357,-0.1272 0.38431,-1.36891 0.40953,-1.45971 0.0768,-0.27653 0.17266,-0.54861 0.22856,-0.83012 0.0612,-0.30802 0.0598,-0.62633 0.12174,-0.93419 0.41315,-2.05376 0.17282,0.15499 0.34642,-2.05013 0.78617,-3.6519 -0.18073,1.33664 0.20748,-2.57065 0.12564,-1.26447 0.50455,-1.44345 0.71338,-2.68912 0.082,-0.48925 0.0259,-0.99322 0.0843,-1.48584 0.0614,-0.51764 0.18317,-1.02633 0.27476,-1.53949 0.35891,-2.70853 0.0237,-0.58352 0.60561,-3.31182 0.11665,-0.54695 0.22395,-1.09602 0.31952,-1.64705 0.0925,-0.53339 0.14671,-1.0731 0.24458,-1.60553 0.22784,-1.23935 0.36294,-1.60733 0.70449,-2.80753 0.16996,-0.73112 0.40034,-1.7749 0.61569,-2.50664 0.0867,-0.29442 0.23051,-0.57194 0.29652,-0.87166 0.047,-0.21334 -0.01,-0.44136 0.0396,-0.65417 0.41059,-1.7721 0.12164,0.48473 0.27492,-0.91399 0,-0.62866 -0.88907,-0.62866 -0.88907,0 z" /><path
       style="opacity:1;fill:#020202;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
       id="path12076"
       d="m 136.0525,113.64477 c 0.0852,0.0466 0.18069,0.0779 0.25562,0.13966 0.11794,0.0972 0.21169,0.22047 0.31645,0.33172 0.31768,0.33733 0.52013,0.59002 0.90587,0.87104 1.89678,1.38184 -0.36335,-0.4689 1.40397,1.01974 1.63911,1.54445 -0.28617,-0.31972 1.19551,1.26996 0.17618,0.18903 0.37882,0.35162 0.56353,0.53232 0.5245,0.51313 1.00902,1.06245 1.50539,1.60223 0.84131,0.95051 0.12222,0.108 0.89107,1.09503 0.1287,0.16522 0.28698,0.30864 0.39762,0.48646 0.21343,0.34305 0.30183,0.75348 0.5114,1.0989 0.1015,0.16728 0.23561,0.31247 0.35341,0.4687 0.2624,0.81196 0.55667,1.60816 0.76495,2.4369 0.0743,0.2955 0.15452,0.5905 0.20216,0.89144 0.32933,2.0803 -0.18475,-0.0826 0.33641,1.90753 0.031,0.30303 0.0619,0.60606 0.0929,0.90908 0.0871,0.31367 0.21847,0.6183 0.26144,0.941 0.0447,0.33546 -0.003,0.67684 -0.001,1.01526 0.002,0.3177 -2e-4,0.63565 0.0146,0.95302 0.0259,0.55608 0.086,1.11008 0.12249,1.66558 -0.12602,1.15396 -0.0419,0.25901 -0.10915,1.32476 -0.0116,0.18386 -0.0365,0.36694 -0.0418,0.55109 -0.005,0.16657 0.0252,0.3337 0.0115,0.49978 -0.0138,0.16862 -0.0623,0.3326 -0.0934,0.4989 -0.01,0.17297 -0.0199,0.34594 -0.0299,0.51892 0.0525,0.34197 -0.2839,0.55864 -0.32953,0.86324 -0.0244,0.163 0.0883,0.32771 0.0625,0.49049 -0.0261,0.16449 -0.16423,0.29286 -0.21219,0.45235 -0.0499,0.16596 -0.0522,0.34263 -0.0784,0.51395 -0.0541,0.16911 -0.10825,0.33823 -0.16238,0.50734 -0.0575,0.18005 -0.10063,0.36534 -0.17254,0.54014 -0.0782,0.19022 -0.21325,0.35592 -0.27656,0.55162 -0.0166,0.0512 -0.15189,1.03863 -0.16757,1.1125 -0.096,0.45244 -0.15176,0.5089 -0.3472,0.92678 -0.009,0.41177 -0.0567,0.83134 -0.23992,1.20757 -0.0618,0.12691 -0.17603,0.22614 -0.22573,0.35824 -0.0665,0.17681 -0.0731,0.63794 -0.0815,0.82049 -0.0361,0.0884 -0.23915,0.61148 -0.31312,0.69557 -0.0898,0.10207 -0.26587,0.11726 -0.33295,0.23549 -0.0608,0.10718 0.0265,0.25196 -0.0103,0.36955 -0.034,0.10844 -0.12891,0.18716 -0.19337,0.28074 -0.0252,0.12357 -0.0503,0.24714 -0.0755,0.37071 -0.22256,0.50255 0.48817,0.81729 0.71072,0.31474 v 0 c 0.27157,-0.96628 -0.13342,0.31303 0.32537,-0.63086 0.0489,-0.1006 0.0302,-0.22401 0.0721,-0.32773 0.0441,-0.10914 0.12363,-0.20036 0.18229,-0.30241 0.22942,-0.39912 0.17699,-0.31107 0.35938,-0.73533 0.13147,-0.63085 0.0305,-0.22332 0.22058,-0.83156 0.0434,-0.13872 0.0692,-0.28358 0.12548,-0.41756 0.0547,-0.13008 0.16187,-0.23587 0.20553,-0.37004 0.086,-0.26433 -0.008,-0.56912 0.14919,-0.82046 0.0391,-0.52494 -0.013,-0.45099 0.21107,-0.93683 0.0786,-0.17042 0.21593,-0.31582 0.26418,-0.49718 0.0494,-0.18567 -0.004,-0.38554 0.0214,-0.57601 0.0597,-0.45084 0.17622,-0.70653 0.32755,-1.12858 0.0558,-0.17238 0.1003,-0.34884 0.16742,-0.51713 0.0642,-0.16089 0.19347,-0.29792 0.2255,-0.46814 0.0325,-0.17282 -0.0498,-0.35067 -0.0384,-0.52615 0.0334,-0.51439 0.3615,-0.90371 0.49345,-1.38848 -0.24197,-1.88931 -0.002,0.76822 0.16668,-1.07897 0.0173,-0.18916 -0.13124,-0.36251 -0.14052,-0.55223 -0.009,-0.18686 0.0577,-0.36968 0.0864,-0.55455 0.13432,-0.86542 0.12053,-0.41919 0.0156,-1.35042 -0.0571,-2.8701 0.045,1.45038 -0.0889,-1.72099 -0.0138,-0.3266 0.0207,-0.65494 -0.007,-0.98065 -0.0291,-0.34067 -0.14219,-0.67141 -0.16314,-1.01268 -0.0205,-0.33308 0.0867,-0.66998 0.0395,-1.00033 -0.0437,-0.30572 -0.20481,-0.58269 -0.30721,-0.87404 -0.0371,-0.32214 -0.0541,-0.64723 -0.11121,-0.96644 -0.0596,-0.33322 -0.16002,-0.65784 -0.23831,-0.98718 -0.0713,-0.30013 -0.13686,-0.60166 -0.2106,-0.90122 -0.0762,-0.30952 -0.16081,-0.61691 -0.23922,-0.92588 -0.0786,-0.30987 -0.13414,-0.62625 -0.23194,-0.93061 -0.08,-0.24896 -0.2,-0.48324 -0.30001,-0.72485 -0.24572,-0.58683 -0.4768,-1.19939 -0.87402,-1.70616 -0.13912,-0.17749 -0.32724,-0.31302 -0.4641,-0.49226 -1.40888,-1.84511 0.68253,0.59461 -0.86849,-1.16935 -0.88022,-1.44474 0.1615,0.0541 -1.02693,-1.06375 -0.19566,-0.18405 -0.31042,-0.43984 -0.48875,-0.64073 -0.17641,-0.19873 -0.36984,-0.3829 -0.57251,-0.55478 -1.36908,-1.16107 -0.027,0.18811 -1.31377,-1.17911 -0.21506,-0.18665 -0.43382,-0.36913 -0.64521,-0.55995 -0.21087,-0.19035 -0.40069,-0.40439 -0.62132,-0.58334 -0.18519,-0.15022 -0.40445,-0.25428 -0.59236,-0.40108 -0.36594,-0.28588 -0.65664,-0.67377 -1.07429,-0.89452 -0.45254,-0.30124 -0.87856,0.33875 -0.42602,0.63999 z" /><path
       style="opacity:1;mix-blend-mode:normal;fill:#0d0d0d;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter12077)"
       id="path12077"
       d="m 100.87853,117.5431 c -0.0646,0.0745 -0.11871,0.15964 -0.19382,0.22357 -0.45399,0.38649 -0.22257,0.0845 -0.772052,0.4146 -0.223634,0.13434 -0.699781,0.57318 -0.893144,0.72292 -0.161658,0.12519 -0.333414,0.23677 -0.50012,0.35515 -0.154596,0.16415 -0.295127,0.34279 -0.463789,0.49244 -0.173376,0.15384 -0.396673,0.24838 -0.558321,0.41451 -0.394401,0.40531 -0.618175,1.10738 -0.937905,1.57475 -0.102333,0.14959 -0.233535,0.27722 -0.350303,0.41583 -0.09798,0.14924 -0.215255,0.28747 -0.293939,0.44772 -0.08331,0.16968 -0.116631,0.36 -0.188489,0.53484 -0.07483,0.18207 -0.164285,0.35783 -0.251026,0.53454 -0.08987,0.18307 -0.206521,0.35392 -0.278731,0.54465 -0.07586,0.20037 -0.09799,0.41759 -0.162885,0.62178 -0.0701,0.22056 -0.161071,0.43393 -0.241605,0.65091 -0.302228,0.45061 -0.416126,0.9953 -0.684516,1.46153 -0.149445,0.2596 -0.385205,0.46439 -0.525124,0.72925 -0.137676,0.26062 -0.189773,0.55842 -0.299604,0.83195 -0.352711,0.8784 -0.270211,0.67096 -0.816041,1.41005 -0.119515,0.63354 -0.472792,1.17745 -0.703088,1.76813 -0.06865,0.17608 -0.121409,0.35807 -0.173969,0.5396 -0.05418,0.18712 -0.120774,0.37272 -0.146113,0.56588 -0.02376,0.18103 1.3e-5,0.36517 1.8e-5,0.54776 -0.244824,0.82454 -0.08074,0.14423 -0.179474,0.96777 -0.01894,0.15792 -0.08244,0.31151 -0.0792,0.47053 0.0033,0.15972 0.106579,0.30952 0.09833,0.46907 -0.0076,0.14661 -0.113406,0.27263 -0.144092,0.4162 -0.02822,0.13204 -0.0208,0.26923 -0.03118,0.40385 -0.02352,0.12727 -0.06352,0.25258 -0.07061,0.38183 -0.0062,0.11354 0.02381,0.22625 0.03102,0.33973 0.01521,0.23939 -0.0066,0.48035 0.0117,0.71952 0.01,0.13088 0.06171,0.25808 0.05907,0.38931 -0.0026,0.12558 -0.04955,0.24627 -0.07433,0.3694 -0.0079,0.11334 -0.01569,0.22667 -0.02355,0.34001 0.0033,0.60567 0.859854,0.60099 0.856546,-0.005 v 0 c 0.003,-0.11323 0.006,-0.22646 0.009,-0.33968 -0.01458,-0.12265 -0.03489,-0.24475 -0.04377,-0.36793 -0.02669,-0.37002 0.01312,-0.38612 -0.04438,-0.74539 -0.01889,-0.11803 -0.08973,-0.23054 -0.07959,-0.34963 0.01,-0.11727 0.126357,-0.20817 0.13707,-0.32536 0.01151,-0.12584 -0.04889,-0.24796 -0.07333,-0.37194 0.06985,-0.25889 0.149114,-0.51204 0.176636,-0.78057 0.08959,-0.87424 -0.07796,0.0227 0.04493,-0.87551 0.02085,-0.15238 0.06927,-0.3002 0.08907,-0.45272 0.02172,-0.16732 0.02352,-0.33663 0.03527,-0.50494 0.09128,-0.15711 0.227132,-0.29574 0.273833,-0.47134 0.509257,-1.91475 -0.518303,0.76829 0.07609,-1.05933 0.0571,-0.17557 0.175762,-0.32529 0.248549,-0.49496 0.49721,-1.15901 -0.118475,0.0118 0.536692,-1.15696 0.341762,-1.24949 -0.0089,-0.29315 0.686569,-1.44843 0.965042,-1.60295 -0.130495,0.0567 0.755629,-1.60372 0.141957,-0.266 0.355246,-0.4898 0.495792,-0.75655 0.119973,-0.2277 0.187746,-0.47928 0.28162,-0.71893 0.926968,-2.40885 -0.388345,0.93121 0.557464,-1.23793 0.558869,-1.28172 -0.145529,0.15277 0.316442,-1.05768 0.06187,-0.16211 0.168674,-0.30366 0.241223,-0.46128 0.07306,-0.15875 0.130037,-0.32441 0.195056,-0.48662 0.128683,-0.13185 0.272293,-0.25063 0.386051,-0.39556 0.182298,-0.23225 0.409424,-0.70594 0.578662,-0.94724 0.108691,-0.15498 0.241118,-0.29191 0.35855,-0.44037 0.128837,-0.16289 0.22419,-0.3565 0.380191,-0.49359 0.153871,-0.13523 0.354557,-0.20527 0.531839,-0.30791 0.03826,-0.0397 0.785831,-0.82021 0.836075,-0.85249 0.158133,-0.1016 0.366203,-0.0995 0.530883,-0.19012 0.13729,-0.0755 0.23616,-0.20646 0.36128,-0.3008 0.3376,-0.25452 0.29539,-0.21558 0.63273,-0.3548 0.50532,-0.37605 -0.0265,-1.09068 -0.53182,-0.71463 z" /><path
       style="opacity:1;mix-blend-mode:normal;fill:#0d0d0d;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter12082)"
       id="path12078"
       d="m 137.47925,115.90542 c -0.0447,0.0915 -0.13047,0.17269 -0.13424,0.27447 -0.006,0.16579 0.0988,0.32053 0.10612,0.48627 0.0114,0.25656 -0.0508,0.51196 -0.0505,0.76877 2.7e-4,0.31232 0.0506,0.62319 0.0523,0.93551 0.002,0.3299 -0.0317,0.65908 -0.0418,0.98882 -0.0104,0.33927 -0.0132,0.67872 -0.0198,1.01808 -0.0322,1.58826 0.0306,0.48129 -0.15835,2.02802 -0.0399,0.32692 -0.0423,0.65905 -0.10398,0.98258 -0.058,0.30391 -0.18039,0.59223 -0.25364,0.89282 -0.31371,1.28732 0.0428,0.38361 -0.4917,1.52286 -0.24424,0.87614 -0.0412,0.48993 -0.58901,1.16894 -0.25974,0.47154 0.40712,0.83886 0.66686,0.36732 v 0 c 0.55761,-0.75111 0.31722,-0.33968 0.70681,-1.24256 0.30567,-1.74184 -0.0958,0.1582 0.51221,-1.62694 0.10492,-0.30802 0.16316,-0.63019 0.2324,-0.94813 0.22566,-1.03626 0.34568,-2.08225 0.28998,-3.14491 0.0328,-0.33936 0.0928,-0.67718 0.0983,-1.01808 0.005,-0.3303 -0.0442,-0.65921 -0.0662,-0.98882 -0.0292,-0.31184 -0.0921,-0.62234 -0.0875,-0.93551 7.9e-4,-0.0544 0.17574,-1.06031 0.15128,-1.25504 -0.0127,-0.10114 -0.0899,-0.18298 -0.13483,-0.27447 0,-0.48409 -0.6846,-0.48409 -0.6846,0 z" /><path
       style="opacity:1;mix-blend-mode:normal;fill:#0d0d0d;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter12081)"
       id="path12079"
       d="m 140.67328,167.39464 c -0.54568,0.38659 -0.46498,0.29734 -1.08034,1.00791 -1.87274,2.16247 -0.25219,0.42852 -2.14521,2.84273 -0.55207,0.70407 -1.8205,2.06864 -2.43634,2.74271 -1.28569,1.66181 -0.60353,0.86133 -1.96476,2.31963 -0.28328,0.30348 -0.58701,0.58919 -0.84894,0.91127 -0.22094,0.27169 -0.37327,0.59488 -0.59579,0.86529 -0.091,0.11059 -1.01556,0.99255 -1.1613,1.13239 -0.17457,0.14118 -0.35279,0.27797 -0.52371,0.42356 -0.15693,0.13367 -0.30217,0.28068 -0.45948,0.4139 -0.22863,0.19361 -0.86284,0.68773 -1.10172,0.85524 -0.45439,0.31864 -0.92397,0.61513 -1.38087,0.93015 -0.18444,0.19635 -0.36889,0.39271 -0.55334,0.58907 -0.43505,0.32431 0.0236,0.93956 0.45865,0.61526 v 0 c 0.21423,-0.15545 0.42846,-0.3109 0.6427,-0.46634 1.94351,-1.97736 -0.77749,0.64007 1.37305,-0.95409 0.20332,-0.15072 0.29148,-0.41987 0.4814,-0.58717 0.18024,-0.15877 0.42078,-0.23453 0.61377,-0.37753 0.1678,-0.12433 0.83097,-0.77191 0.96786,-0.90357 1.5264,-1.81591 -0.67268,0.72211 1.18872,-1.1441 0.25187,-0.25253 0.43827,-0.56409 0.68214,-0.82435 0.2888,-0.3082 0.63844,-0.55762 0.91331,-0.87832 0.31807,-0.37109 0.54773,-0.81141 0.85838,-1.18874 0.3398,-0.41274 0.72626,-0.78475 1.08939,-1.17712 2.55768,-3.26574 -0.44253,0.5268 2.31514,-2.83352 1.0384,-1.26533 1.17502,-1.55328 2.23073,-2.73943 0.23514,-0.26421 0.50188,-0.4989 0.74032,-0.76014 0.0444,-0.0486 0.0705,-0.11127 0.10581,-0.16691 0.45805,-0.2896 0.0485,-0.93739 -0.40957,-0.64778 z" /><path
       style="opacity:1;mix-blend-mode:normal;fill:#0d0d0d;fill-opacity:1;stroke:none;stroke-width:0.264999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter12080)"
       id="path12080"
       d="m 83.635084,183.83116 c -0.0661,0.0872 -0.12413,0.18118 -0.198306,0.26164 -0.246512,0.26739 -0.526179,0.50229 -0.783849,0.75895 -0.155927,0.15531 -0.315595,0.30715 -0.46451,0.4692 -0.14604,0.15892 -0.262811,0.34484 -0.419725,0.49304 -0.150778,0.1424 -0.331782,0.24893 -0.497673,0.37339 -0.243483,0.37686 -0.351861,0.60088 -0.679095,0.90313 -0.118417,0.10938 -0.259141,0.1918 -0.388713,0.2877 -0.390903,0.4653 0.267131,1.01813 0.658035,0.55283 v 0 c 0.106553,-0.11152 0.222551,-0.21472 0.319653,-0.33455 0.594993,-0.73428 -0.05336,-0.13776 0.723609,-0.77382 0.142071,-0.1492 0.272135,-0.31082 0.42621,-0.44759 0.163401,-0.14503 0.384389,-0.22616 0.523054,-0.39501 0.148045,-0.18026 0.174199,-0.43883 0.314696,-0.62503 0.124246,-0.16467 0.316428,-0.26525 0.465013,-0.40835 0.507762,-0.489 0.09714,-0.22902 0.620284,-0.50523 0.431551,-0.43747 -0.187132,-1.04777 -0.618683,-0.6103 z" /><rect
       style="opacity:1;fill:#8c301c;fill-opacity:1;stroke:#7c0f1a;stroke-width:3;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
       id="rect12096"
       width="26.588301"
       height="26.588301"
       x="52.639011"
       y="84.699753" /><rect
       style="opacity:0.383727;fill:#8c301c;fill-opacity:1;stroke:#7c0f1a;stroke-width:1.38267;stroke-linejoin:round;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
       id="rect12097"
       width="30.635649"
       height="30.635649"
       x="100.59612"
       y="7.3525434"
       transform="rotate(45)" /><text
       xml:space="preserve"
       transform="matrix(0.39989751,0,0,0.39989751,35.058425,3.5353229)"
       id="text12097"
       style="font-size:37.3333px;line-height:1.25;font-family:'Noto Sans';-inkscape-font-specification:'Noto Sans';letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect12098);display:inline"><tspan
         x="27.310547"
         y="421.78541"
         id="tspan4"><tspan
           style="font-family:'Sui Generis';-inkscape-font-specification:'Sui Generis';fill:#ffffff"
           id="tspan3">ANIMATE YO</tspan></tspan></text></g><script
     id="mesh_polyfill"
     type="text/javascript">
!function(){const t=&quot;http://www.w3.org/2000/svg&quot;,e=&quot;http://www.w3.org/1999/xlink&quot;,s=&quot;http://www.w3.org/1999/xhtml&quot;,r=2;if(document.createElementNS(t,&quot;meshgradient&quot;).x)return;const n=(t,e,s,r)=&gt;{let n=new x(.5*(e.x+s.x),.5*(e.y+s.y)),o=new x(.5*(t.x+e.x),.5*(t.y+e.y)),i=new x(.5*(s.x+r.x),.5*(s.y+r.y)),a=new x(.5*(n.x+o.x),.5*(n.y+o.y)),h=new x(.5*(n.x+i.x),.5*(n.y+i.y)),l=new x(.5*(a.x+h.x),.5*(a.y+h.y));return[[t,o,a,l],[l,h,i,r]]},o=t=&gt;{let e=t[0].distSquared(t[1]),s=t[2].distSquared(t[3]),r=.25*t[0].distSquared(t[2]),n=.25*t[1].distSquared(t[3]),o=e&gt;s?e:s,i=r&gt;n?r:n;return 18*(o&gt;i?o:i)},i=(t,e)=&gt;Math.sqrt(t.distSquared(e)),a=(t,e)=&gt;t.scale(2/3).add(e.scale(1/3)),h=t=&gt;{let e,s,r,n,o,i,a,h=new g;return t.match(/(\w+\(\s*[^)]+\))+/g).forEach(t=&gt;{let l=t.match(/[\w.-]+/g),d=l.shift();switch(d){case&quot;translate&quot;:2===l.length?e=new g(1,0,0,1,l[0],l[1]):(console.error(&quot;mesh.js: translate does not have 2 arguments!&quot;),e=new g(1,0,0,1,0,0)),h=h.append(e);break;case&quot;scale&quot;:1===l.length?s=new g(l[0],0,0,l[0],0,0):2===l.length?s=new g(l[0],0,0,l[1],0,0):(console.error(&quot;mesh.js: scale does not have 1 or 2 arguments!&quot;),s=new g(1,0,0,1,0,0)),h=h.append(s);break;case&quot;rotate&quot;:if(3===l.length&amp;&amp;(e=new g(1,0,0,1,l[1],l[2]),h=h.append(e)),l[0]){r=l[0]*Math.PI/180;let t=Math.cos(r),e=Math.sin(r);Math.abs(t)&lt;1e-16&amp;&amp;(t=0),Math.abs(e)&lt;1e-16&amp;&amp;(e=0),a=new g(t,e,-e,t,0,0),h=h.append(a)}else console.error(&quot;math.js: No argument to rotate transform!&quot;);3===l.length&amp;&amp;(e=new g(1,0,0,1,-l[1],-l[2]),h=h.append(e));break;case&quot;skewX&quot;:l[0]?(r=l[0]*Math.PI/180,n=Math.tan(r),o=new g(1,0,n,1,0,0),h=h.append(o)):console.error(&quot;math.js: No argument to skewX transform!&quot;);break;case&quot;skewY&quot;:l[0]?(r=l[0]*Math.PI/180,n=Math.tan(r),i=new g(1,n,0,1,0,0),h=h.append(i)):console.error(&quot;math.js: No argument to skewY transform!&quot;);break;case&quot;matrix&quot;:6===l.length?h=h.append(new g(...l)):console.error(&quot;math.js: Incorrect number of arguments for matrix!&quot;);break;default:console.error(&quot;mesh.js: Unhandled transform type: &quot;+d)}}),h},l=t=&gt;{let e=[],s=t.split(/[ ,]+/);for(let t=0,r=s.length-1;t&lt;r;t+=2)e.push(new x(parseFloat(s[t]),parseFloat(s[t+1])));return e},d=(t,e)=&gt;{for(let s in e)t.setAttribute(s,e[s])},c=(t,e,s,r,n)=&gt;{let o,i,a=[0,0,0,0];for(let h=0;h&lt;3;++h)e[h]&lt;t[h]&amp;&amp;e[h]&lt;s[h]||t[h]&lt;e[h]&amp;&amp;s[h]&lt;e[h]?a[h]=0:(a[h]=.5*((e[h]-t[h])/r+(s[h]-e[h])/n),o=Math.abs(3*(e[h]-t[h])/r),i=Math.abs(3*(s[h]-e[h])/n),a[h]&gt;o?a[h]=o:a[h]&gt;i&amp;&amp;(a[h]=i));return a},u=[[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0],[-3,3,0,0,-2,-1,0,0,0,0,0,0,0,0,0,0],[2,-2,0,0,1,1,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0],[0,0,0,0,0,0,0,0,-3,3,0,0,-2,-1,0,0],[0,0,0,0,0,0,0,0,2,-2,0,0,1,1,0,0],[-3,0,3,0,0,0,0,0,-2,0,-1,0,0,0,0,0],[0,0,0,0,-3,0,3,0,0,0,0,0,-2,0,-1,0],[9,-9,-9,9,6,3,-6,-3,6,-6,3,-3,4,2,2,1],[-6,6,6,-6,-3,-3,3,3,-4,4,-2,2,-2,-2,-1,-1],[2,0,-2,0,0,0,0,0,1,0,1,0,0,0,0,0],[0,0,0,0,2,0,-2,0,0,0,0,0,1,0,1,0],[-6,6,6,-6,-4,-2,4,2,-3,3,-3,3,-2,-1,-2,-1],[4,-4,-4,4,2,2,-2,-2,2,-2,2,-2,1,1,1,1]],f=t=&gt;{let e=[];for(let s=0;s&lt;16;++s){e[s]=0;for(let r=0;r&lt;16;++r)e[s]+=u[s][r]*t[r]}return e},p=(t,e,s)=&gt;{const r=e*e,n=s*s,o=e*e*e,i=s*s*s;return t[0]+t[1]*e+t[2]*r+t[3]*o+t[4]*s+t[5]*s*e+t[6]*s*r+t[7]*s*o+t[8]*n+t[9]*n*e+t[10]*n*r+t[11]*n*o+t[12]*i+t[13]*i*e+t[14]*i*r+t[15]*i*o},y=t=&gt;{let e=[],s=[],r=[];for(let s=0;s&lt;4;++s)e[s]=[],e[s][0]=n(t[0][s],t[1][s],t[2][s],t[3][s]),e[s][1]=[],e[s][1].push(...n(...e[s][0][0])),e[s][1].push(...n(...e[s][0][1])),e[s][2]=[],e[s][2].push(...n(...e[s][1][0])),e[s][2].push(...n(...e[s][1][1])),e[s][2].push(...n(...e[s][1][2])),e[s][2].push(...n(...e[s][1][3]));for(let t=0;t&lt;8;++t){s[t]=[];for(let r=0;r&lt;4;++r)s[t][r]=[],s[t][r][0]=n(e[0][2][t][r],e[1][2][t][r],e[2][2][t][r],e[3][2][t][r]),s[t][r][1]=[],s[t][r][1].push(...n(...s[t][r][0][0])),s[t][r][1].push(...n(...s[t][r][0][1])),s[t][r][2]=[],s[t][r][2].push(...n(...s[t][r][1][0])),s[t][r][2].push(...n(...s[t][r][1][1])),s[t][r][2].push(...n(...s[t][r][1][2])),s[t][r][2].push(...n(...s[t][r][1][3]))}for(let t=0;t&lt;8;++t){r[t]=[];for(let e=0;e&lt;8;++e)r[t][e]=[],r[t][e][0]=s[t][0][2][e],r[t][e][1]=s[t][1][2][e],r[t][e][2]=s[t][2][2][e],r[t][e][3]=s[t][3][2][e]}return r};class x{constructor(t,e){this.x=t||0,this.y=e||0}toString(){return`(x=${this.x}, y=${this.y})`}clone(){return new x(this.x,this.y)}add(t){return new x(this.x+t.x,this.y+t.y)}scale(t){return void 0===t.x?new x(this.x*t,this.y*t):new x(this.x*t.x,this.y*t.y)}distSquared(t){let e=this.x-t.x,s=this.y-t.y;return e*e+s*s}transform(t){let e=this.x*t.a+this.y*t.c+t.e,s=this.x*t.b+this.y*t.d+t.f;return new x(e,s)}}class g{constructor(t,e,s,r,n,o){void 0===t?(this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0):(this.a=t,this.b=e,this.c=s,this.d=r,this.e=n,this.f=o)}toString(){return`affine: ${this.a} ${this.c} ${this.e} \n       ${this.b} ${this.d} ${this.f}`}append(t){t instanceof g||console.error(&quot;mesh.js: argument to Affine.append is not affine!&quot;);let e=this.a*t.a+this.c*t.b,s=this.b*t.a+this.d*t.b,r=this.a*t.c+this.c*t.d,n=this.b*t.c+this.d*t.d,o=this.a*t.e+this.c*t.f+this.e,i=this.b*t.e+this.d*t.f+this.f;return new g(e,s,r,n,o,i)}}class w{constructor(t,e){this.nodes=t,this.colors=e}paintCurve(t,e){if(o(this.nodes)&gt;r){const s=n(...this.nodes);let r=[[],[]],o=[[],[]];for(let t=0;t&lt;4;++t)r[0][t]=this.colors[0][t],r[1][t]=(this.colors[0][t]+this.colors[1][t])/2,o[0][t]=r[1][t],o[1][t]=this.colors[1][t];let i=new w(s[0],r),a=new w(s[1],o);i.paintCurve(t,e),a.paintCurve(t,e)}else{let s=Math.round(this.nodes[0].x);if(s&gt;=0&amp;&amp;s&lt;e){let r=4*(~~this.nodes[0].y*e+s);t[r]=Math.round(this.colors[0][0]),t[r+1]=Math.round(this.colors[0][1]),t[r+2]=Math.round(this.colors[0][2]),t[r+3]=Math.round(this.colors[0][3])}}}}class m{constructor(t,e){this.nodes=t,this.colors=e}split(){let t=[[],[],[],[]],e=[[],[],[],[]],s=[[[],[]],[[],[]]],r=[[[],[]],[[],[]]];for(let s=0;s&lt;4;++s){const r=n(this.nodes[0][s],this.nodes[1][s],this.nodes[2][s],this.nodes[3][s]);t[0][s]=r[0][0],t[1][s]=r[0][1],t[2][s]=r[0][2],t[3][s]=r[0][3],e[0][s]=r[1][0],e[1][s]=r[1][1],e[2][s]=r[1][2],e[3][s]=r[1][3]}for(let t=0;t&lt;4;++t)s[0][0][t]=this.colors[0][0][t],s[0][1][t]=this.colors[0][1][t],s[1][0][t]=(this.colors[0][0][t]+this.colors[1][0][t])/2,s[1][1][t]=(this.colors[0][1][t]+this.colors[1][1][t])/2,r[0][0][t]=s[1][0][t],r[0][1][t]=s[1][1][t],r[1][0][t]=this.colors[1][0][t],r[1][1][t]=this.colors[1][1][t];return[new m(t,s),new m(e,r)]}paint(t,e){let s,n=!1;for(let t=0;t&lt;4;++t)if((s=o([this.nodes[0][t],this.nodes[1][t],this.nodes[2][t],this.nodes[3][t]]))&gt;r){n=!0;break}if(n){let s=this.split();s[0].paint(t,e),s[1].paint(t,e)}else{new w([...this.nodes[0]],[...this.colors[0]]).paintCurve(t,e)}}}class b{constructor(t){this.readMesh(t),this.type=t.getAttribute(&quot;type&quot;)||&quot;bilinear&quot;}readMesh(t){let e=[[]],s=[[]],r=Number(t.getAttribute(&quot;x&quot;)),n=Number(t.getAttribute(&quot;y&quot;));e[0][0]=new x(r,n);let o=t.children;for(let t=0,r=o.length;t&lt;r;++t){e[3*t+1]=[],e[3*t+2]=[],e[3*t+3]=[],s[t+1]=[];let r=o[t].children;for(let n=0,o=r.length;n&lt;o;++n){let o=r[n].children;for(let r=0,i=o.length;r&lt;i;++r){let i=r;0!==t&amp;&amp;++i;let h,d=o[r].getAttribute(&quot;path&quot;),c=&quot;l&quot;;null!=d&amp;&amp;(c=(h=d.match(/\s*([lLcC])\s*(.*)/))[1]);let u=l(h[2]);switch(c){case&quot;l&quot;:0===i?(e[3*t][3*n+3]=u[0].add(e[3*t][3*n]),e[3*t][3*n+1]=a(e[3*t][3*n],e[3*t][3*n+3]),e[3*t][3*n+2]=a(e[3*t][3*n+3],e[3*t][3*n])):1===i?(e[3*t+3][3*n+3]=u[0].add(e[3*t][3*n+3]),e[3*t+1][3*n+3]=a(e[3*t][3*n+3],e[3*t+3][3*n+3]),e[3*t+2][3*n+3]=a(e[3*t+3][3*n+3],e[3*t][3*n+3])):2===i?(0===n&amp;&amp;(e[3*t+3][3*n+0]=u[0].add(e[3*t+3][3*n+3])),e[3*t+3][3*n+1]=a(e[3*t+3][3*n],e[3*t+3][3*n+3]),e[3*t+3][3*n+2]=a(e[3*t+3][3*n+3],e[3*t+3][3*n])):(e[3*t+1][3*n]=a(e[3*t][3*n],e[3*t+3][3*n]),e[3*t+2][3*n]=a(e[3*t+3][3*n],e[3*t][3*n]));break;case&quot;L&quot;:0===i?(e[3*t][3*n+3]=u[0],e[3*t][3*n+1]=a(e[3*t][3*n],e[3*t][3*n+3]),e[3*t][3*n+2]=a(e[3*t][3*n+3],e[3*t][3*n])):1===i?(e[3*t+3][3*n+3]=u[0],e[3*t+1][3*n+3]=a(e[3*t][3*n+3],e[3*t+3][3*n+3]),e[3*t+2][3*n+3]=a(e[3*t+3][3*n+3],e[3*t][3*n+3])):2===i?(0===n&amp;&amp;(e[3*t+3][3*n+0]=u[0]),e[3*t+3][3*n+1]=a(e[3*t+3][3*n],e[3*t+3][3*n+3]),e[3*t+3][3*n+2]=a(e[3*t+3][3*n+3],e[3*t+3][3*n])):(e[3*t+1][3*n]=a(e[3*t][3*n],e[3*t+3][3*n]),e[3*t+2][3*n]=a(e[3*t+3][3*n],e[3*t][3*n]));break;case&quot;c&quot;:0===i?(e[3*t][3*n+1]=u[0].add(e[3*t][3*n]),e[3*t][3*n+2]=u[1].add(e[3*t][3*n]),e[3*t][3*n+3]=u[2].add(e[3*t][3*n])):1===i?(e[3*t+1][3*n+3]=u[0].add(e[3*t][3*n+3]),e[3*t+2][3*n+3]=u[1].add(e[3*t][3*n+3]),e[3*t+3][3*n+3]=u[2].add(e[3*t][3*n+3])):2===i?(e[3*t+3][3*n+2]=u[0].add(e[3*t+3][3*n+3]),e[3*t+3][3*n+1]=u[1].add(e[3*t+3][3*n+3]),0===n&amp;&amp;(e[3*t+3][3*n+0]=u[2].add(e[3*t+3][3*n+3]))):(e[3*t+2][3*n]=u[0].add(e[3*t+3][3*n]),e[3*t+1][3*n]=u[1].add(e[3*t+3][3*n]));break;case&quot;C&quot;:0===i?(e[3*t][3*n+1]=u[0],e[3*t][3*n+2]=u[1],e[3*t][3*n+3]=u[2]):1===i?(e[3*t+1][3*n+3]=u[0],e[3*t+2][3*n+3]=u[1],e[3*t+3][3*n+3]=u[2]):2===i?(e[3*t+3][3*n+2]=u[0],e[3*t+3][3*n+1]=u[1],0===n&amp;&amp;(e[3*t+3][3*n+0]=u[2])):(e[3*t+2][3*n]=u[0],e[3*t+1][3*n]=u[1]);break;default:console.error(&quot;mesh.js: &quot;+c+&quot; invalid path type.&quot;)}if(0===t&amp;&amp;0===n||r&gt;0){let e=window.getComputedStyle(o[r]).stopColor.match(/^rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i),a=window.getComputedStyle(o[r]).stopOpacity,h=255;a&amp;&amp;(h=Math.floor(255*a)),e&amp;&amp;(0===i?(s[t][n]=[],s[t][n][0]=Math.floor(e[1]),s[t][n][1]=Math.floor(e[2]),s[t][n][2]=Math.floor(e[3]),s[t][n][3]=h):1===i?(s[t][n+1]=[],s[t][n+1][0]=Math.floor(e[1]),s[t][n+1][1]=Math.floor(e[2]),s[t][n+1][2]=Math.floor(e[3]),s[t][n+1][3]=h):2===i?(s[t+1][n+1]=[],s[t+1][n+1][0]=Math.floor(e[1]),s[t+1][n+1][1]=Math.floor(e[2]),s[t+1][n+1][2]=Math.floor(e[3]),s[t+1][n+1][3]=h):3===i&amp;&amp;(s[t+1][n]=[],s[t+1][n][0]=Math.floor(e[1]),s[t+1][n][1]=Math.floor(e[2]),s[t+1][n][2]=Math.floor(e[3]),s[t+1][n][3]=h))}}e[3*t+1][3*n+1]=new x,e[3*t+1][3*n+2]=new x,e[3*t+2][3*n+1]=new x,e[3*t+2][3*n+2]=new x,e[3*t+1][3*n+1].x=(-4*e[3*t][3*n].x+6*(e[3*t][3*n+1].x+e[3*t+1][3*n].x)+-2*(e[3*t][3*n+3].x+e[3*t+3][3*n].x)+3*(e[3*t+3][3*n+1].x+e[3*t+1][3*n+3].x)+-1*e[3*t+3][3*n+3].x)/9,e[3*t+1][3*n+2].x=(-4*e[3*t][3*n+3].x+6*(e[3*t][3*n+2].x+e[3*t+1][3*n+3].x)+-2*(e[3*t][3*n].x+e[3*t+3][3*n+3].x)+3*(e[3*t+3][3*n+2].x+e[3*t+1][3*n].x)+-1*e[3*t+3][3*n].x)/9,e[3*t+2][3*n+1].x=(-4*e[3*t+3][3*n].x+6*(e[3*t+3][3*n+1].x+e[3*t+2][3*n].x)+-2*(e[3*t+3][3*n+3].x+e[3*t][3*n].x)+3*(e[3*t][3*n+1].x+e[3*t+2][3*n+3].x)+-1*e[3*t][3*n+3].x)/9,e[3*t+2][3*n+2].x=(-4*e[3*t+3][3*n+3].x+6*(e[3*t+3][3*n+2].x+e[3*t+2][3*n+3].x)+-2*(e[3*t+3][3*n].x+e[3*t][3*n+3].x)+3*(e[3*t][3*n+2].x+e[3*t+2][3*n].x)+-1*e[3*t][3*n].x)/9,e[3*t+1][3*n+1].y=(-4*e[3*t][3*n].y+6*(e[3*t][3*n+1].y+e[3*t+1][3*n].y)+-2*(e[3*t][3*n+3].y+e[3*t+3][3*n].y)+3*(e[3*t+3][3*n+1].y+e[3*t+1][3*n+3].y)+-1*e[3*t+3][3*n+3].y)/9,e[3*t+1][3*n+2].y=(-4*e[3*t][3*n+3].y+6*(e[3*t][3*n+2].y+e[3*t+1][3*n+3].y)+-2*(e[3*t][3*n].y+e[3*t+3][3*n+3].y)+3*(e[3*t+3][3*n+2].y+e[3*t+1][3*n].y)+-1*e[3*t+3][3*n].y)/9,e[3*t+2][3*n+1].y=(-4*e[3*t+3][3*n].y+6*(e[3*t+3][3*n+1].y+e[3*t+2][3*n].y)+-2*(e[3*t+3][3*n+3].y+e[3*t][3*n].y)+3*(e[3*t][3*n+1].y+e[3*t+2][3*n+3].y)+-1*e[3*t][3*n+3].y)/9,e[3*t+2][3*n+2].y=(-4*e[3*t+3][3*n+3].y+6*(e[3*t+3][3*n+2].y+e[3*t+2][3*n+3].y)+-2*(e[3*t+3][3*n].y+e[3*t][3*n+3].y)+3*(e[3*t][3*n+2].y+e[3*t+2][3*n].y)+-1*e[3*t][3*n].y)/9}}this.nodes=e,this.colors=s}paintMesh(t,e){let s=(this.nodes.length-1)/3,r=(this.nodes[0].length-1)/3;if(&quot;bilinear&quot;===this.type||s&lt;2||r&lt;2){let n;for(let o=0;o&lt;s;++o)for(let s=0;s&lt;r;++s){let r=[];for(let t=3*o,e=3*o+4;t&lt;e;++t)r.push(this.nodes[t].slice(3*s,3*s+4));let i=[];i.push(this.colors[o].slice(s,s+2)),i.push(this.colors[o+1].slice(s,s+2)),(n=new m(r,i)).paint(t,e)}}else{let n,o,a,h,l,d,u;const x=s,g=r;s++,r++;let w=new Array(s);for(let t=0;t&lt;s;++t){w[t]=new Array(r);for(let e=0;e&lt;r;++e)w[t][e]=[],w[t][e][0]=this.nodes[3*t][3*e],w[t][e][1]=this.colors[t][e]}for(let t=0;t&lt;s;++t)for(let e=0;e&lt;r;++e)0!==t&amp;&amp;t!==x&amp;&amp;(n=i(w[t-1][e][0],w[t][e][0]),o=i(w[t+1][e][0],w[t][e][0]),w[t][e][2]=c(w[t-1][e][1],w[t][e][1],w[t+1][e][1],n,o)),0!==e&amp;&amp;e!==g&amp;&amp;(n=i(w[t][e-1][0],w[t][e][0]),o=i(w[t][e+1][0],w[t][e][0]),w[t][e][3]=c(w[t][e-1][1],w[t][e][1],w[t][e+1][1],n,o));for(let t=0;t&lt;r;++t){w[0][t][2]=[],w[x][t][2]=[];for(let e=0;e&lt;4;++e)n=i(w[1][t][0],w[0][t][0]),o=i(w[x][t][0],w[x-1][t][0]),w[0][t][2][e]=n&gt;0?2*(w[1][t][1][e]-w[0][t][1][e])/n-w[1][t][2][e]:0,w[x][t][2][e]=o&gt;0?2*(w[x][t][1][e]-w[x-1][t][1][e])/o-w[x-1][t][2][e]:0}for(let t=0;t&lt;s;++t){w[t][0][3]=[],w[t][g][3]=[];for(let e=0;e&lt;4;++e)n=i(w[t][1][0],w[t][0][0]),o=i(w[t][g][0],w[t][g-1][0]),w[t][0][3][e]=n&gt;0?2*(w[t][1][1][e]-w[t][0][1][e])/n-w[t][1][3][e]:0,w[t][g][3][e]=o&gt;0?2*(w[t][g][1][e]-w[t][g-1][1][e])/o-w[t][g-1][3][e]:0}for(let s=0;s&lt;x;++s)for(let r=0;r&lt;g;++r){let n=i(w[s][r][0],w[s+1][r][0]),o=i(w[s][r+1][0],w[s+1][r+1][0]),c=i(w[s][r][0],w[s][r+1][0]),x=i(w[s+1][r][0],w[s+1][r+1][0]),g=[[],[],[],[]];for(let t=0;t&lt;4;++t){(d=[])[0]=w[s][r][1][t],d[1]=w[s+1][r][1][t],d[2]=w[s][r+1][1][t],d[3]=w[s+1][r+1][1][t],d[4]=w[s][r][2][t]*n,d[5]=w[s+1][r][2][t]*n,d[6]=w[s][r+1][2][t]*o,d[7]=w[s+1][r+1][2][t]*o,d[8]=w[s][r][3][t]*c,d[9]=w[s+1][r][3][t]*x,d[10]=w[s][r+1][3][t]*c,d[11]=w[s+1][r+1][3][t]*x,d[12]=0,d[13]=0,d[14]=0,d[15]=0,u=f(d);for(let e=0;e&lt;9;++e){g[t][e]=[];for(let s=0;s&lt;9;++s)g[t][e][s]=p(u,e/8,s/8),g[t][e][s]&gt;255?g[t][e][s]=255:g[t][e][s]&lt;0&amp;&amp;(g[t][e][s]=0)}}h=[];for(let t=3*s,e=3*s+4;t&lt;e;++t)h.push(this.nodes[t].slice(3*r,3*r+4));l=y(h);for(let s=0;s&lt;8;++s)for(let r=0;r&lt;8;++r)(a=new m(l[s][r],[[[g[0][s][r],g[1][s][r],g[2][s][r],g[3][s][r]],[g[0][s][r+1],g[1][s][r+1],g[2][s][r+1],g[3][s][r+1]]],[[g[0][s+1][r],g[1][s+1][r],g[2][s+1][r],g[3][s+1][r]],[g[0][s+1][r+1],g[1][s+1][r+1],g[2][s+1][r+1],g[3][s+1][r+1]]]])).paint(t,e)}}}transform(t){if(t instanceof x)for(let e=0,s=this.nodes.length;e&lt;s;++e)for(let s=0,r=this.nodes[0].length;s&lt;r;++s)this.nodes[e][s]=this.nodes[e][s].add(t);else if(t instanceof g)for(let e=0,s=this.nodes.length;e&lt;s;++e)for(let s=0,r=this.nodes[0].length;s&lt;r;++s)this.nodes[e][s]=this.nodes[e][s].transform(t)}scale(t){for(let e=0,s=this.nodes.length;e&lt;s;++e)for(let s=0,r=this.nodes[0].length;s&lt;r;++s)this.nodes[e][s]=this.nodes[e][s].scale(t)}}document.querySelectorAll(&quot;rect,circle,ellipse,path,text&quot;).forEach((r,n)=&gt;{let o=r.getAttribute(&quot;id&quot;);o||(o=&quot;patchjs_shape&quot;+n,r.setAttribute(&quot;id&quot;,o));const i=r.style.fill.match(/^url\(\s*&quot;?\s*#([^\s&quot;]+)&quot;?\s*\)/),a=r.style.stroke.match(/^url\(\s*&quot;?\s*#([^\s&quot;]+)&quot;?\s*\)/);if(i&amp;&amp;i[1]){const a=document.getElementById(i[1]);if(a&amp;&amp;&quot;meshgradient&quot;===a.nodeName){const i=r.getBBox();let l=document.createElementNS(s,&quot;canvas&quot;);d(l,{width:i.width,height:i.height});const c=l.getContext(&quot;2d&quot;);let u=c.createImageData(i.width,i.height);const f=new b(a);&quot;objectBoundingBox&quot;===a.getAttribute(&quot;gradientUnits&quot;)&amp;&amp;f.scale(new x(i.width,i.height));const p=a.getAttribute(&quot;gradientTransform&quot;);null!=p&amp;&amp;f.transform(h(p)),&quot;userSpaceOnUse&quot;===a.getAttribute(&quot;gradientUnits&quot;)&amp;&amp;f.transform(new x(-i.x,-i.y)),f.paintMesh(u.data,l.width),c.putImageData(u,0,0);const y=document.createElementNS(t,&quot;image&quot;);d(y,{width:i.width,height:i.height,x:i.x,y:i.y});let g=l.toDataURL();y.setAttributeNS(e,&quot;xlink:href&quot;,g),r.parentNode.insertBefore(y,r),r.style.fill=&quot;none&quot;;const w=document.createElementNS(t,&quot;use&quot;);w.setAttributeNS(e,&quot;xlink:href&quot;,&quot;#&quot;+o);const m=&quot;patchjs_clip&quot;+n,M=document.createElementNS(t,&quot;clipPath&quot;);M.setAttribute(&quot;id&quot;,m),M.appendChild(w),r.parentElement.insertBefore(M,r),y.setAttribute(&quot;clip-path&quot;,&quot;url(#&quot;+m+&quot;)&quot;),u=null,l=null,g=null}}if(a&amp;&amp;a[1]){const o=document.getElementById(a[1]);if(o&amp;&amp;&quot;meshgradient&quot;===o.nodeName){const i=parseFloat(r.style.strokeWidth.slice(0,-2))*(parseFloat(r.style.strokeMiterlimit)||parseFloat(r.getAttribute(&quot;stroke-miterlimit&quot;))||1),a=r.getBBox(),l=Math.trunc(a.width+i),c=Math.trunc(a.height+i),u=Math.trunc(a.x-i/2),f=Math.trunc(a.y-i/2);let p=document.createElementNS(s,&quot;canvas&quot;);d(p,{width:l,height:c});const y=p.getContext(&quot;2d&quot;);let g=y.createImageData(l,c);const w=new b(o);&quot;objectBoundingBox&quot;===o.getAttribute(&quot;gradientUnits&quot;)&amp;&amp;w.scale(new x(l,c));const m=o.getAttribute(&quot;gradientTransform&quot;);null!=m&amp;&amp;w.transform(h(m)),&quot;userSpaceOnUse&quot;===o.getAttribute(&quot;gradientUnits&quot;)&amp;&amp;w.transform(new x(-u,-f)),w.paintMesh(g.data,p.width),y.putImageData(g,0,0);const M=document.createElementNS(t,&quot;image&quot;);d(M,{width:l,height:c,x:0,y:0});let S=p.toDataURL();M.setAttributeNS(e,&quot;xlink:href&quot;,S);const k=&quot;pattern_clip&quot;+n,A=document.createElementNS(t,&quot;pattern&quot;);d(A,{id:k,patternUnits:&quot;userSpaceOnUse&quot;,width:l,height:c,x:u,y:f}),A.appendChild(M),o.parentNode.appendChild(A),r.style.stroke=&quot;url(#&quot;+k+&quot;)&quot;,g=null,p=null,S=null}}})}();
</script></svg>

Changes to inkscape/export_gif.inx.

11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
  <param name="mode" type="optiongroup" appearance="combo" gui-text="Conversion mode">
    <option value="PNG→ImageMagick (better quality)">PNG→ImageMagick (better quality)</option>
    <option value="SVG→ImageMagick (simple drawings)">SVG→ImageMagick (simple drawings)</option>
    <option value="PNG→Pillow (builtin">PNG→Pillow (builtin</option>
    <option value="a bit faster)">a bit faster)</option>
    <option value="JavaScript→SVG (embed anim code)">JavaScript→SVG (embed anim code)</option>
  </param>
  <param name="delay" type="float" min="0.01" max="20" precision="2" appearance="float" gui-text="Delay between slides (seconds)">0.35</param>
  <param name="loop" type="int" min="0" max="100" precision="1" appearance="int" gui-text="Loop limit (0 for endless)">0</param>
  <param name="fuzz" type="optiongroup" appearance="combo" gui-text="Fuzzing/dither">
    <option value="0%">0%</option>
    <option value="5%">5%</option>
    <option value="10%">10%</option>
    <option value="20%">20%</option>
    <option value="30%">30%</option>
    <option value="50%">50%</option>







|
|







11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
  <param name="mode" type="optiongroup" appearance="combo" gui-text="Conversion mode">
    <option value="PNG→ImageMagick (better quality)">PNG→ImageMagick (better quality)</option>
    <option value="SVG→ImageMagick (simple drawings)">SVG→ImageMagick (simple drawings)</option>
    <option value="PNG→Pillow (builtin">PNG→Pillow (builtin</option>
    <option value="a bit faster)">a bit faster)</option>
    <option value="JavaScript→SVG (embed anim code)">JavaScript→SVG (embed anim code)</option>
  </param>
  <param name="delay" type="float" min="0.01" max="20" precision="2" mode="float" gui-text="Delay between slides (seconds)">0.35</param>
  <param name="loop" type="int" min="0" max="100" precision="1" gui-text="Loop limit (0 for endless)">0</param>
  <param name="fuzz" type="optiongroup" appearance="combo" gui-text="Fuzzing/dither">
    <option value="0%">0%</option>
    <option value="5%">5%</option>
    <option value="10%">10%</option>
    <option value="20%">20%</option>
    <option value="30%">30%</option>
    <option value="50%">50%</option>
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
    <option value="-colors 64">-colors 64</option>
    <option value="-dither FloydSteinberg">-dither FloydSteinberg</option>
    <option value="-limit disk 1MB">-limit disk 1MB</option>
    <option value="-reverse">-reverse</option>
    <option value="-monochrome">-monochrome</option>
    <option value="-transparent white">-transparent white</option>
  </param>
  <param name="extra2" type="string" mode="str" gui-text="Custom args"/>
  <param name="preview" type="bool" mode="checkbox" gui-text="Preview result via XDG-OPEN">false</param>
  <param name="keep_tmp" type="bool" mode="checkbox" gui-text="Keep files (/tmp/inkscape.export_gif/)">false</param>
  <param name="reload_svg" type="bool" mode="checkbox" gui-text="Reload SVG afterwards (avoids warning popup)">false</param>
  <label>Fallback background color</label>
  <param name="background" type="color" mode="color" gui-text="Background color for transparent layers">0</param>
  <effect needs-live-preview="false">
    <object-type>all</object-type>







|







53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
    <option value="-colors 64">-colors 64</option>
    <option value="-dither FloydSteinberg">-dither FloydSteinberg</option>
    <option value="-limit disk 1MB">-limit disk 1MB</option>
    <option value="-reverse">-reverse</option>
    <option value="-monochrome">-monochrome</option>
    <option value="-transparent white">-transparent white</option>
  </param>
  <param name="extra2" type="string" gui-text="Custom args"/>
  <param name="preview" type="bool" mode="checkbox" gui-text="Preview result via XDG-OPEN">false</param>
  <param name="keep_tmp" type="bool" mode="checkbox" gui-text="Keep files (/tmp/inkscape.export_gif/)">false</param>
  <param name="reload_svg" type="bool" mode="checkbox" gui-text="Reload SVG afterwards (avoids warning popup)">false</param>
  <label>Fallback background color</label>
  <param name="background" type="color" mode="color" gui-text="Background color for transparent layers">0</param>
  <effect needs-live-preview="false">
    <object-type>all</object-type>
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<!--
        pars.add_argument("-"+"-file", type=str, dest="file", default="~/anim.gif", help="Target GIF filename")
        pars.add_argument("-"+"-mode", type=str, dest="mode", default="PNG+ImageMagick", help="Conversion mode")
        pars.add_argument("-"+"-delay", type=str, dest="delay", default="0.35", help="Delay between slides (seconds)")
        pars.add_argument("-"+"-loop", type=int, dest="loop", default=0, help="Loop limit (0 for endless)")
        pars.add_argument("-"+"-fuzz", type=str, dest="fuzz", default="10%", help="Fuzzing/dither")
        pars.add_argument("-"+"-layers", type=str, dest="layers", default="optimize", help="Accumulation/combination of -layers")
        pars.add_argument("-"+"-extra", type=str, dest="extra", default="", help="Extra args")
        pars.add_argument("-"+"-extra2", type=str, dest="extra2", default="", help="Custom args")
        pars.add_argument("-"+"-preview", type=inkex.Boolean, dest="preview", default=False, help="Preview result via XDG-OPEN")
        pars.add_argument("-"+"-keep_tmp", type=inkex.Boolean, dest="keep_tmp", default=False, help="Keep files (/tmp/inkscape.export_gif/)")
        pars.add_argument("-"+"-reload_svg", type=inkex.Boolean, dest="reload_svg", default=False, help="Reload SVG afterwards (avoids warning popup)")

        pars.add_argument("-"+"-background", type=inkex.Color, dest="background", default="0", help="Background color for transparent layers")
-->







|
|






83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<!--
        pars.add_argument("-"+"-file", type=str, dest="file", default="~/anim.gif", help="Target GIF filename")
        pars.add_argument("-"+"-mode", type=str, dest="mode", default="PNG+ImageMagick", help="Conversion mode")
        pars.add_argument("-"+"-delay", type=str, dest="delay", default="0.35", help="Delay between slides (seconds)")
        pars.add_argument("-"+"-loop", type=int, dest="loop", default=0, help="Loop limit (0 for endless)")
        pars.add_argument("-"+"-fuzz", type=str, dest="fuzz", default="10%", help="Fuzzing/dither")
        pars.add_argument("-"+"-layers", type=str, dest="layers", default="optimize", help="Accumulation/combination of -layers")
        pars.add_argument("-"+"-extra", type=str, dest="extra", default=, help="Extra args")
        pars.add_argument("-"+"-extra2", type=str, dest="extra2", default=, help="Custom args")
        pars.add_argument("-"+"-preview", type=inkex.Boolean, dest="preview", default=False, help="Preview result via XDG-OPEN")
        pars.add_argument("-"+"-keep_tmp", type=inkex.Boolean, dest="keep_tmp", default=False, help="Keep files (/tmp/inkscape.export_gif/)")
        pars.add_argument("-"+"-reload_svg", type=inkex.Boolean, dest="reload_svg", default=False, help="Reload SVG afterwards (avoids warning popup)")

        pars.add_argument("-"+"-background", type=inkex.Color, dest="background", default="0", help="Background color for transparent layers")
-->

Changes to inkscape/export_gif.py.

8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61




62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# id: org.include-once.inkscape.export-gif
# license: MITL
# version: 0.9-dev
# state: beta
# depends: bin:inkscape (>= 1.1), bin:convert, python (>= 3.6)
# pylint: disable=line-too-long, missing-module-docstring, bad-whitespace
# config:
#    { name: file, type: file, value: "~/anim.gif", description: "Target GIF filename" }
#    { name: mode, type: select, select: "PNG→ImageMagick (better quality)|SVG→ImageMagick (simple drawings)|PNG→Pillow (builtin, a bit faster)|JavaScript→SVG (embed anim code)", value: PNG+ImageMagick, description: Conversion mode }
#    { name: delay, type: float, value: 0.35, min: 0.01, max: 20, precision: 2, description: "Delay between slides (seconds)" }
#    { name: loop, type: int, value: 0, description: "Loop limit (0 for endless)" }
#    { name: fuzz, type: select, select: "0%|5%|10%|20%|30%|50%", value: "10%", description: "Fuzzing/dither" }
#    { name: layers, type: select, select: "optimize|coalesce|compare-any|compare-clear|compare-overlay|composite|dispose|flatten|merge|mosaic|optimize-frame|optimize-plus|optimize-transparency|remove-dups|remove-zero|trim-bounds", value: "optimize", description: "Accumulation/combination of -layers" }
#    { name: extra, type: select, select: "-quiet|-resize 640x360|-alpha background|-auto-gamma|-auto-level|-coalesce|-colors 64|-dither FloydSteinberg|-limit disk 1MB|-reverse|-monochrome|-transparent white", value: "", description: "Extra args" }
#    { name: extra2, type: str, value: "", description: "Custom args" }
#    { name: preview, type: bool, value: 0, description: "Preview result via XDG-OPEN" }
#    { name: keep_tmp, type: bool, value: 0, description: "Keep files (/tmp/inkscape.export_gif/)" }
#    { name: reload_svg, type: bool, value: 0, description: "Reload SVG afterwards (avoids warning popup)" }
#    {  xml: "<label>Fallback background color</label>" }
#    { name: background, type: color, value: "0", description: "Background color for transparent layers" }
# inx-export: .gif, image/gif, GIF slideshow (*.gif), Graphics Interchange Format 98a
# architecture: all
# pack: export_gif.py, *.inx, pmd2inks, LICENSE=/usr/share/doc/inkscape-export-gif/copyright
# format: off
# author: mario#include-once:org
# url: https://inkscape.org/~culturaljuice/★export_gif
# orig: Xavi, https://github.com/jespino/inkscape-export-layers
#
# Generates a GIF slideshow from image layers ☰  (Shift+Ctrl+L). The menu
# option Extensions➔>Export➔GIF-slideshow… iterates over layers to generate
# animation slides. They get merged from bottom to top. Depending on shape
# overlap or layer transparency, there's different usage modes:
#
#  🞂 With a solid background in each layer, there's no accumulation to
#    take care of.
#  🞂 Alternatively elect layers` can be labeled as [background] to stick,
#    or [fixed] as permanent foreground, or [merge] for down-grouping.
#  🞂 If the -layers option is composite/coalesce/merge then all lower
#    layers remain visible until the current frame.
#
# Requires ImageMagick installed; fit for standard Linux setups. But might
# work with convert.exe on Windows. And alternatively there's the builtin
# Pillow conversion method. The options dialog mostly maps to IM flags.
#
#  🞂 Without the PNG conversion step, SVG interpretation is up to Imagick,
#    and will not render fancy font/path effects. Just for plain old SVGs.
#  🞂 The [PNG→Pillow] option works without ImageMagick, but often generates
#    rougher GIFs, yet might produce smaller result files.
#  🞂 In [JavaScript] mode, no output file will be generated. It just adds a
#    script for animating slides into the current document (web views).
#  🞂 Difference between [fixed] and [bg] layers is that fixed layers don't
#    constitute a frame, whereas [background] layers stick around as slide
#    even by themselves. Additionally [merge] frames aren't frames, but
#    get grouped with the preceding slide or background.




#  🞂 The "default background color" is useful for otherwise transparent
#    layers. Half-transparancy can be useful to gradually fade out lower
#    frames (only seems to work in SVG/ImageMagick mode).
#  🞂 Extra arguments are just a list of sample options, might not be
#    particularly useful by themselves. Use the second input for more
#    refined combinations.
#  🞂 Can't run two instances in parallel, due to fixed /tmp/inkscape… dir
#  🞂 It's also available as File > Save As... option (fewer options).
#  🞂 Tested on Inkscape 1.2 (2022-05-xx) and 1.3-dev (2022-09-xx)
#
# Might require some experimentation, and heavily utilizing the preview
# option. Potential error popups become informative at the very end.
#
# Code is derived from Xavi's "Export Layers Redux For Inkscape 1.1+".
# <https://inkscape.org/~VagabondArcade/%E2%98%85export-layers-redux-for-inkscape-11>
#
# ZIP contains the `pmd2inks` command-line tool to ease extending the
# options dialog (using the <https://pypi.org/project/pluginconf/> format).
#
# v0.9 · add [merge] grouping
# v0.8 · support per frame [--options=xyz] and [exclude]
# v0.7 · introduce combined modes · JavaScript embed option
# v0.6 · support file→save-as invocation
# v0.5 · revamped layer combination handling
# v0.4 · support SVG export by removing nodes
# v0.3 · introduced more imagemagick options
# v0.2 · migrated to plugin meta data · more robust file handling







|














|



















|







|
|
|
|
>
>
>
>


|

|
|













|







8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# id: org.include-once.inkscape.export-gif
# license: MITL
# version: 0.9-dev
# state: beta
# depends: bin:inkscape (>= 1.1), bin:convert, python (>= 3.6)
# pylint: disable=line-too-long, missing-module-docstring, bad-whitespace
# config:
#    { name: file, type: file, mode: file, value: "~/anim.gif", description: "Target GIF filename" }
#    { name: mode, type: select, select: "PNG→ImageMagick (better quality)|SVG→ImageMagick (simple drawings)|PNG→Pillow (builtin, a bit faster)|JavaScript→SVG (embed anim code)", value: PNG+ImageMagick, description: Conversion mode }
#    { name: delay, type: float, value: 0.35, min: 0.01, max: 20, precision: 2, description: "Delay between slides (seconds)" }
#    { name: loop, type: int, value: 0, description: "Loop limit (0 for endless)" }
#    { name: fuzz, type: select, select: "0%|5%|10%|20%|30%|50%", value: "10%", description: "Fuzzing/dither" }
#    { name: layers, type: select, select: "optimize|coalesce|compare-any|compare-clear|compare-overlay|composite|dispose|flatten|merge|mosaic|optimize-frame|optimize-plus|optimize-transparency|remove-dups|remove-zero|trim-bounds", value: "optimize", description: "Accumulation/combination of -layers" }
#    { name: extra, type: select, select: "-quiet|-resize 640x360|-alpha background|-auto-gamma|-auto-level|-coalesce|-colors 64|-dither FloydSteinberg|-limit disk 1MB|-reverse|-monochrome|-transparent white", value: "", description: "Extra args" }
#    { name: extra2, type: str, value: "", description: "Custom args" }
#    { name: preview, type: bool, value: 0, description: "Preview result via XDG-OPEN" }
#    { name: keep_tmp, type: bool, value: 0, description: "Keep files (/tmp/inkscape.export_gif/)" }
#    { name: reload_svg, type: bool, value: 0, description: "Reload SVG afterwards (avoids warning popup)" }
#    {  xml: "<label>Fallback background color</label>" }
#    { name: background, type: color, value: "0", description: "Background color for transparent layers" }
# inx-export: .gif, image/gif, GIF slideshow (*.gif), Graphics Interchange Format 98a
# architecture: all
# pack: export_gif.py, *.inx, pmd2inks, animate_yo.py, LICENSE=/usr/share/doc/inkscape-export-gif/copyright
# format: off
# author: mario#include-once:org
# url: https://inkscape.org/~culturaljuice/★export_gif
# orig: Xavi, https://github.com/jespino/inkscape-export-layers
#
# Generates a GIF slideshow from image layers ☰  (Shift+Ctrl+L). The menu
# option Extensions➔>Export➔GIF-slideshow… iterates over layers to generate
# animation slides. They get merged from bottom to top. Depending on shape
# overlap or layer transparency, there's different usage modes:
#
#  🞂 With a solid background in each layer, there's no accumulation to
#    take care of.
#  🞂 Alternatively elect layers` can be labeled as [background] to stick,
#    or [fixed] as permanent foreground, or [merge] for down-grouping.
#  🞂 If the -layers option is composite/coalesce/merge then all lower
#    layers remain visible until the current frame.
#
# Requires ImageMagick installed; fit for standard Linux setups. But might
# work with convert.exe on Windows. And alternatively there's the builtin
# Pillow conversion method. The options mostly map to IM flags.
#
#  🞂 Without the PNG conversion step, SVG interpretation is up to Imagick,
#    and will not render fancy font/path effects. Just for plain old SVGs.
#  🞂 The [PNG→Pillow] option works without ImageMagick, but often generates
#    rougher GIFs, yet might produce smaller result files.
#  🞂 In [JavaScript] mode, no output file will be generated. It just adds a
#    script for animating slides into the current document (web views).
#  🞂 A [fixed] layer label describes a permanent foreground (until overdrawn),
#    but never constitues a frame. Whereas [background] layers only become
#    active and permanent when its frame is reached. Additionally [merge]
#    labels will enjoin partial layers to the preceding full slide. But also
#    [exclude] to omit layers entirely.
#  🞂 There's also a rudimentary [animate=5] option to craft subframes
#    from embedded <animate*> instructions.
#  🞂 Each layer label may also specify ImageMagick flags [--delay=2.5].
#  🞂 The "default background color" is useful for otherwise transparent
#    layers. Half-transparancy can be useful to gradually fade out lower
#    frames (only seems to work in SVG/ImageMagick -displace mode).
#  🞂 Extra arguments are just a list of sample options, might not be
#    particularly useful by themselves. Use the second input or [--flag=X]
#    labels for more refined combinations.
#  🞂 Can't run two instances in parallel, due to fixed /tmp/inkscape… dir
#  🞂 It's also available as File > Save As... option (fewer options).
#  🞂 Tested on Inkscape 1.2 (2022-05-xx) and 1.3-dev (2022-09-xx)
#
# Might require some experimentation, and heavily utilizing the preview
# option. Potential error popups become informative at the very end.
#
# Code is derived from Xavi's "Export Layers Redux For Inkscape 1.1+".
# <https://inkscape.org/~VagabondArcade/%E2%98%85export-layers-redux-for-inkscape-11>
#
# ZIP contains the `pmd2inks` command-line tool to ease extending the
# options dialog (using the <https://pypi.org/project/pluginconf/> format).
#
# v0.9 · add [merge] grouping, preliminary animation support
# v0.8 · support per frame [--options=xyz] and [exclude]
# v0.7 · introduce combined modes · JavaScript embed option
# v0.6 · support file→save-as invocation
# v0.5 · revamped layer combination handling
# v0.4 · support SVG export by removing nodes
# v0.3 · introduced more imagemagick options
# v0.2 · migrated to plugin meta data · more robust file handling
101
102
103
104
105
106
107
108


109
110
111
112
113

114
115
116

117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141

142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158

159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174


175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202









203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220


221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283


284
285
286
287
288
289
290
import inkex


def convert_png(svg_path, output_path):
    """ Use the convenience wrapper (more likely referencing the current inkscape binary) """
    inkex.command.inkscape(
        svg_path, export_area_page=True, export_type="png",
        export_filename=output_path, export_background_opacity=1


    )

def hex_color(col):
    """ convert ints or inkex.Color tuple to #hex color """
    if isinstance(col, list):

        if len(col) == 3:
            col.append(1.0)
        col = col[0]<<24 + col[1]<<16 + col[2]<<36 + col[3]*256

    return "#{:08X}".format(col & 0xFFFFFFFF)

def zip_args(temp_files, prepend_args):
    """ zip files and possible -flags (fitted list of dicts) """
    for arg_list, filename in zip(prepend_args, temp_files):
        for key, val in arg_list.items():
            if key == "write":
                continue
            yield "-" + key
            yield float(val) * 100 if key == "delay" else val
        yield filename

def duration_args(prepend_args, default):
    """ make a pillow duration= list from optional delay values """
    for args in prepend_args:
        yield float(args.get("delay", default)) * 1000;


class GIFExport(inkex.EffectExtension):#, inkex.OutputExtension, inkex.RasterOutputExtension
    """ doubles as effect and save-as extension """

    def __init__(self):
        """ init the effect library """
        self.save_as_mode = (len(sys.argv) < 8)
        self.tempdir = None

        self.win32 = sys.platform == "win32"
        super().__init__()

    def add_arguments(self, pars):
        """ populate self.options from script args """
        pars.add_argument("--file", type=str, dest="file", default="~/anim.gif", help="Target GIF filename")
        pars.add_argument("--mode", type=str, dest="mode", default="PNG+ImageMagick", help="Operation mode")
        pars.add_argument("--delay", type=float, dest="delay", default=0.35, help="Delay between slides (seconds)")
        pars.add_argument("--loop", type=int, dest="loop", default=0, help="Loop limit (0 for endless)")
        pars.add_argument("--fuzz", type=str, dest="fuzz", default="5%", help="Fuzzing/dither")
        pars.add_argument("--layers", type=str, dest="layers", default="optimize", help="Accumulation/combination of -layers")
        pars.add_argument("--extra", type=str, dest="extra", default="", help="Extra args")
        pars.add_argument("--extra2", type=str, dest="extra2", default="", help="Custom args")
        pars.add_argument("--preview", type=inkex.Boolean, dest="preview", default=0, help="Preview result via XDG-OPEN")
        pars.add_argument("--keep_tmp", type=inkex.Boolean, dest="keep_tmp", default="0", help="Keep files (/tmp/inkscape.export_gif/)")
        pars.add_argument("--reload_svg", type=inkex.Boolean, dest="reload_svg", default=False, help="Reload SVG afterwards (avoids warning popup)")
        pars.add_argument("--background", type=int, dest="background", default="0", help="Background color for transparent layers")


    def save(self, stream):
        """ Save-as handler for .gif (all handled in .effect() already; just redirects output as bytestream) """
        if not self.save_as_mode:
            return
        with open(self.options.file, "rb") as tmp:
            stream.write(tmp.read())
        if not self.options.keep_tmp:
            os.unlink(self.options.file)

    def effect(self):
        """ Generate output file when invoked """
        layers = list(self.get_layers())
        fixed_layers = [layer.id for layer in layers if layer.is_fixed]
        temp_files = []
        prepend_args = []



        # more parameter handling
        if re.search("JavaScript", self.options.mode, re.I):
            return self.inject_javascript()
        up_until_mode = re.search("merge|compo|coal|plus", self.options.layers)
        preconvert_png = re.search("PNG", self.options.mode, re.I)
        use_pillow = re.search("Pillow", self.options.mode, re.I)
        img_ext = "png" if preconvert_png else "svg"

        # separate temp directory for easier cleanup
        self.tempdir = tempfile.gettempdir() + "/inkscape.export_gif"
        if not os.path.exists(self.tempdir):
            os.mkdir(self.tempdir)
        if self.save_as_mode:
            self.options.file = tempfile.mkstemp(".gif", "inkex")[1]

        # traverse layers, iteratively slicing for individual .svg/.png frames
        for index, layer in enumerate(layers):

            if layer.no_frame: # fixed, exclude
                continue

            if layer.is_sticky or up_until_mode:
                fixed_layers.append(layer.id)                
            merge_layers = [
                follow.id for follow in layers[index+1:] if follow.do_merge
            ]
                









            dest = self.export_layers(
                dest = f"{self.tempdir}/{index}.{layer.label}.{img_ext}",
                show = [layer.id] + fixed_layers + merge_layers,
                #until_id = layer.id if up_until_mode else False
            )

            temp_files.append(dest)
            prepend_args.append(dict(layer.flags))

        # convert whole batch 0.png, 1.png, 2.png with possible -flags
        if use_pillow and preconvert_png:
            self.pillow_gif(temp_files, prepend_args)
        else:
            self.imagick_gif(temp_files, prepend_args)

        if self.options.preview:
            os.system(('start %s' if self.win32 else 'xdg-open %r 2>&1 &') % self.options.file)



        if self.options.reload_svg and not self.save_as_mode:
            inkex.base.SvgOutputMixin.save(self, self.options.output)

    def imagick_gif(self, temp_files, prepend_args):
        """ Run `convert` using list of exported slides """
        inkex.command.call(*[
            "convert",
            "-delay", self.options.delay * 100,
            "-loop", self.options.loop,
            "-layers", self.options.layers,
            "-fuzz", self.options.fuzz,
            "-background", hex_color(self.options.background) if self.options.background else "transparent",
            *shlex.split(self.options.extra),
            *shlex.split(self.options.extra2),
            *zip_args(temp_files, prepend_args),
            *[os.path.expanduser(self.options.file)]
        ])

    def pillow_gif(self, temp_files, prepend_args):
        """ Alternative: use PIL to assemble GIF (very rough, only works with PNG preconvert) """
        from PIL import Image
        frames = [Image.open(fn) for fn in temp_files]
        # https://pillow.readthedocs.io/en/stable/handbook/image-file-formats.html#saving
        frames[0].save(
            os.path.expanduser(self.options.file),
            save_all = True,
            append_images = frames[1:],
            version = "GIF89a",
            optimize = True,
            disposal = 1, # no disposal
            duration = list(duration_args(prepend_args, self.options.delay)),
            loop = self.options.loop,
        )

    def clean_up(self):
        """ remove tmp files + dir, automatically invoked by base.run() """
        super().clean_up()
        if self.options.keep_tmp or not self.tempdir or not os.path.exists(self.tempdir):
            return
        for file_name in os.listdir(self.tempdir):
            os.unlink(self.tempdir + "/" + file_name)
        os.rmdir(self.tempdir)

    def export_layers(self, dest, show, until_id=False):
        """
        Export selected layers of SVG to the `dest` file. Implicitly converting if requested.
        :arg  str     dest:  path to export SVG or PNG file.
        :arg  list    show:  layers to show. each element is a string.
        :arg  int until_id:  all layers visible until `show`n layer_id.
        """
        svg = copy.deepcopy(self.svg) # always work on copy, in case of `cut` mode
        dest_png = dest.endswith(".png")

        for layer in svg.xpath('./svg:g[@inkscape:groupmode="layer"][@inkscape:label]'):
            layer_id = layer.attrib["id"]

            if until_id == layer_id:
                until_id = False
            if until_id or layer_id in show:
                layer.attrib['style'] = 'display:inline'
            else:
                layer.getparent().remove(layer)



        if dest_png:
            dest_png, dest = dest, f"{dest[0:-4]}.svg"
        with open(dest, "wb") as svg_fp:
            svg_fp.write(svg.tostring())
        if dest_png:
            convert_png(dest, dest_png)
        return dest_png or dest







|
>
>





>


<
>


|
|
|







|

|
|


|




<

>






|



|



|


>



|










|
|
>
>













|



|





|

|

|
>
>
>
>
>
>
>
>
>
|
|
|
<
|
|
<
<



|

|




>
>
|


|










|



|

|
|








|












|




<



|



<
<
|




>
>







105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122

123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146

147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224

225
226


227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286

287
288
289
290
291
292
293


294
295
296
297
298
299
300
301
302
303
304
305
306
307
import inkex


def convert_png(svg_path, output_path):
    """ Use the convenience wrapper (more likely referencing the current inkscape binary) """
    inkex.command.inkscape(
        svg_path, export_area_page=True, export_type="png",
        export_filename=output_path, #export_text_to_path=True,
        #export_dpi=96, #export_background_opacity=1.0,
        #export_use_hints=True, #export_background=COLOR,
    )

def hex_color(col):
    """ convert ints or inkex.Color tuple to #hex color """
    if isinstance(col, list):
        col = list(col)
        if len(col) == 3:
            col.append(1.0)

        col = (int(col[0])<<24) + (int(col[1])<<16) + (int(col[2])<<8) + int(col[3]*255)
    return "#{:08X}".format(col & 0xFFFFFFFF)

def zip_args(temp_files_args):
    """ unzip files and possible -flags (fitted list of dicts) """
    for filename, arg_list in temp_files_args:
        for key, val in arg_list.items():
            if key == "write":
                continue
            yield "-" + key
            yield float(val) * 100 if key == "delay" else val
        yield filename

def duration_args(temp_files_args, default):
    """ make a pillow duration= list from optional delay values """
    for filename, args in temp_files_args: # pylint: disable=unused-variable
        yield float(args.get("delay", default)) * 1000


class GIFExport(inkex.EffectExtension):#, inkex.OutputExtension):#, inkex.RasterOutputExtension
    """ doubles as effect and save-as extension """

    def __init__(self):
        """ init the effect library """

        self.tempdir = None
        self.index = 0 # current slide
        self.win32 = sys.platform == "win32"
        super().__init__()

    def add_arguments(self, pars):
        """ populate self.options from script args """
        pars.add_argument("--file", type=str, dest="file", default="~/anim.gif", help="Target GIF filename")
        pars.add_argument("--mode", type=str, dest="mode", default="PNG→Pillow", help="Operation mode")
        pars.add_argument("--delay", type=float, dest="delay", default=0.35, help="Delay between slides (seconds)")
        pars.add_argument("--loop", type=int, dest="loop", default=0, help="Loop limit (0 for endless)")
        pars.add_argument("--fuzz", type=str, dest="fuzz", default="5%", help="Fuzzing/dither")
        pars.add_argument("--layers", type=str, dest="layers", default="optimize-transparency", help="Accumulation/combination of -layers")
        pars.add_argument("--extra", type=str, dest="extra", default="", help="Extra args")
        pars.add_argument("--extra2", type=str, dest="extra2", default="", help="Custom args")
        pars.add_argument("--preview", type=inkex.Boolean, dest="preview", default=0, help="Preview result via XDG-OPEN")
        pars.add_argument("--keep_tmp", type=inkex.Boolean, dest="keep_tmp", default=True, help="Keep files (/tmp/inkscape.export_gif/)")
        pars.add_argument("--reload_svg", type=inkex.Boolean, dest="reload_svg", default=False, help="Reload SVG afterwards (avoids warning popup)")
        pars.add_argument("--background", type=int, dest="background", default="0", help="Background color for transparent layers")
        pars.add_argument("--save_as", type=inkex.Boolean, dest="save_as", default=False, help="Save-as/Export mode")

    def save(self, stream):
        """ Save-as handler for .gif (all handled in .effect() already; just redirects output as bytestream) """
        if not self.options.save_as:
            return
        with open(self.options.file, "rb") as tmp:
            stream.write(tmp.read())
        if not self.options.keep_tmp:
            os.unlink(self.options.file)

    def effect(self):
        """ Generate output file when invoked """
        layers = list(self.get_layers())
        fixed_layers = [layer.id for layer in layers if layer.is_fixed]
        temp_files_args = [] # tuples of filename,-args

        #if not re.search("Lobby", str(self.svg.tostring())):   # 1.3 bug for save copy as?
        #    raise Exception("Text already gone")

        # more parameter handling
        if re.search("JavaScript", self.options.mode, re.I):
            return self.inject_javascript()
        up_until_mode = re.search("merge|compo|coal|plus", self.options.layers)
        preconvert_png = re.search("PNG", self.options.mode, re.I)
        use_pillow = re.search("Pillow", self.options.mode, re.I)
        img_ext = "png" if preconvert_png else "svg"

        # separate temp directory for easier cleanup
        self.tempdir = tempfile.gettempdir() + "/inkscape.export_gif"
        if not os.path.exists(self.tempdir):
            os.mkdir(self.tempdir)
        if self.options.save_as:
            self.options.file = tempfile.mkstemp(".gif", "inkex")[1]

        # traverse layers, iteratively slicing for individual .svg/.png frames
        for self.index, layer in enumerate(layers):

            if layer.no_frame: # fixed, exclude
                continue

            if layer.is_sticky or up_until_mode:
                fixed_layers.append(layer.id)
            merge_layers = [
                follow.id for follow in layers[self.index+1:] if follow.do_merge
            ]

            if layer.animate:
                # produces multiple subframes
                anim = AnimationSteps(
                    parent = self, layer = layer,
                    svg = self.export_layers(dest="", show=[layer.id] + fixed_layers + merge_layers)
                )
                temp_files_args.extend(list(anim.steps()))
            else:
                # current frame into .svg/.png
                dest = self.export_layers(
                    dest = f"{self.tempdir}/{self.index}.{layer.label}.{img_ext}",
                    show = [layer.id] + fixed_layers + merge_layers

                )
                temp_files_args.append([dest, layer.flags])



        # convert whole batch 0.png, 1.png, 2.png with possible -flags
        if use_pillow and preconvert_png:
            self.pillow_gif(temp_files_args)
        else:
            self.imagick_gif(temp_files_args)

        if self.options.preview:
            os.system(('start %s' if self.win32 else 'xdg-open %r 2>&1 &') % self.options.file)

        if self.options.save_as:
            self.save(self.options.output)
        elif self.options.reload_svg:
            inkex.base.SvgOutputMixin.save(self, self.options.output)

    def imagick_gif(self, temp_files_args):
        """ Run `convert` using list of exported slides """
        inkex.command.call(*[
            "convert",
            "-delay", self.options.delay * 100,
            "-loop", self.options.loop,
            "-layers", self.options.layers,
            "-fuzz", self.options.fuzz,
            "-background", hex_color(self.options.background) if self.options.background else "transparent",
            *shlex.split(self.options.extra),
            *shlex.split(self.options.extra2),
            *zip_args(temp_files_args),
            *[os.path.expanduser(self.options.file)]
        ])

    def pillow_gif(self, temp_files_args):
        """ Alternative: use PIL to assemble GIF (very rough, only works with PNG preconvert) """
        from PIL import Image # pylint: disable=import-outside-toplevel
        frames = [Image.open(fn_ar[0]) for fn_ar in temp_files_args]
        # https://pillow.readthedocs.io/en/stable/handbook/image-file-formats.html#saving
        frames[0].save(
            os.path.expanduser(self.options.file),
            save_all = True,
            append_images = frames[1:],
            version = "GIF89a",
            optimize = True,
            disposal = 1, # no disposal
            duration = list(duration_args(temp_files_args, self.options.delay)),
            loop = self.options.loop,
        )

    def clean_up(self):
        """ remove tmp files + dir, automatically invoked by base.run() """
        super().clean_up()
        if self.options.keep_tmp or not self.tempdir or not os.path.exists(self.tempdir):
            return
        for file_name in os.listdir(self.tempdir):
            os.unlink(self.tempdir + "/" + file_name)
        os.rmdir(self.tempdir)

    def export_layers(self, dest, show):
        """
        Export selected layers of SVG to the `dest` file. Implicitly converting if requested.
        :arg  str     dest:  path to export SVG or PNG file.
        :arg  list    show:  layers to show. each element is a string.

        """
        svg = copy.deepcopy(self.svg) # always work on copy, in case of `cut` mode
        dest_png = dest.endswith(".png")
        
        for layer in svg.xpath('./svg:g[@inkscape:groupmode="layer"][@inkscape:label]'):
            layer_id = layer.attrib["id"]



            if show == True or layer_id in show: # pylint: disable=singleton-comparison
                layer.attrib['style'] = 'display:inline'
            else:
                layer.getparent().remove(layer)

        if not dest:
            return svg
        if dest_png:
            dest_png, dest = dest, f"{dest[0:-4]}.svg"
        with open(dest, "wb") as svg_fp:
            svg_fp.write(svg.tostring())
        if dest_png:
            convert_png(dest, dest_png)
        return dest_png or dest
298
299
300
301
302
303
304

305
306
307
308
309
310
311
312
            yield Namespace(
                id = layer.attrib["id"],
                label = re.sub(r"\W+", "_", label),
                is_fixed = re.search(r"fixed|\[(is_?fixe?d?|foreground)\]", label),
                is_sticky = re.search(r"background|\[(bg)\]", label),
                no_frame = re.search(r"fixed|\[(merge|no_frame|exclude)\]", label),
                do_merge = re.search(r"\[(merge|join|group)\]", label),

                flags = re.findall(r"--(\w[\w\-]+)=(\w[^\s,;\]\)]*)", label)
            )

    def inject_javascript(self):
        """ insert JavaScript version into SVG document """
        script = inkex.Script()
        for node in self.svg.xpath("//svg:script[@id='export_gif']"):
            script = node







>
|







315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
            yield Namespace(
                id = layer.attrib["id"],
                label = re.sub(r"\W+", "_", label),
                is_fixed = re.search(r"fixed|\[(is_?fixe?d?|foreground)\]", label),
                is_sticky = re.search(r"background|\[(bg)\]", label),
                no_frame = re.search(r"fixed|\[(merge|no_frame|exclude)\]", label),
                do_merge = re.search(r"\[(merge|join|group)\]", label),
                animate = re.findall(r"\[(?:steps|animate)(?:=(\d+))?\]", label),
                flags = dict(re.findall(r"--(\w[\w\-]+)=(\w[^\s,;\]\)]*)", label))
            )

    def inject_javascript(self):
        """ insert JavaScript version into SVG document """
        script = inkex.Script()
        for node in self.svg.xpath("//svg:script[@id='export_gif']"):
            script = node
356
357
358
359
360
361
362
363

























































































































364
365
366
367
                self.svg.attrib.get("onload", ""),
                1
            )
        )
        # return modified SVG tree
        inkex.base.SvgOutputMixin.save(self, self.options.output)



























































































































#raise Exception(sys.argv)
if __name__ == "__main__":
    GIFExport().run()
    sys.exit(0)








>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>




374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
                self.svg.attrib.get("onload", ""),
                1
            )
        )
        # return modified SVG tree
        inkex.base.SvgOutputMixin.save(self, self.options.output)


class AnimationSteps(): # pylint: disable=invalid-name, unused-argument
    """
    Try to interpolate some frames from <animate*> interpretations.
    This won't progress beyond the most rudimentary of implementions
    (just color changes, linear moving, and probably scaling).

    doc: https://edutechwiki.unige.ch/en/Using_Inkscape_for_web_animation,
       https://wiki.inkscape.org/wiki/index.php/SVG_Animation,
    also: ext/interp.py, ext/motion.py
    """

    def __init__(self, parent, svg, layer):
        """ inherit from GifExport, and main layer loop """
        import inkex.tween # pylint: disable=unused-import, import-outside-toplevel, redefined-outer-name
        self.gif = parent
        self.svg = svg
        self.layer = copy.deepcopy(layer)
        self.frames = int((layer.animate or [5])[0])
        self.delay = float(layer.flags.get("delay", self.gif.options.delay))
        self.layer.flags.update({
            "delay": self.delay / self.frames   # frame time split between animation steps
        })
        #raise Exception(self.frames)

    def steps(self):
        """ applies transforms in each subframe, yields filename+args list """
        transforms = []
        for anim in self.svg.xpath("//svg:animate"):
            transforms.append(self.animate_style(anim, **anim.attrib))
        for anim in self.svg.xpath("//svg:animateTransform"):
            transforms.append(self.animate_transform(anim, **anim.attrib))
        for anim in self.svg.xpath("//svg:animateMotion"):
            transforms.append(self.animate_motion(anim, **anim.attrib))

        for index in range(0, self.frames):
            for apply in transforms:
                apply(index / self.frames) # does not honor individual durations

            # custom export
            dest = f"{self.gif.tempdir}/{self.gif.index}+{index}.{self.layer.label}.png"
            GIFExport.export_layers(self, dest, show=True)

            yield [dest, self.layer.flags]

    def animate_style(self, anim, attributeName, to, **attrib):
        """ <animate to="#000000" attributeName="fill" /> """
        target = self.get_target(anim)
        #self.adapt(target, css={attributeName: attrib["from"]})
        transformed = self.adapt(
            copy.deepcopy(target),
            css = { attributeName: to }
        )
        inter = inkex.tween.StyleInterpolator(target, transformed)
        #inter = inkex.tween.AttributeInterpolator.create_from_attribute(attrib["attributeName"])

        def apply(time, target=target, tween=inter):
            self.adapt(target, css=tween.interpolate(time))

        return apply

    def animate_transform(self, anim, **attrib):
        """ <animateTransform to="360 0 40" attributeName="transform" /> """
        target = self.get_target(anim)
        _type = attrib.get("type", "translate")
        defaults = {
            "rotate": "0 0 0",
            "translate": "0 0",
            "scale": "0 0",
        }
        from inkex.transforms import Transform
        src = Transform(_type + "(" + attrib.get("from", defaults.get(_type, "0 0")) + ")")
        dest = Transform(_type + "(" + attrib["to"] + ")")

        inter = inkex.tween.TransformInterpolator(src, dest)

        def apply(time, target=target, tween=inter):
            self.adapt(target, prop={"transform": tween.interpolate(time)})

        return apply

    def animate_motion(self, anim, path, **attrib): # pylint: disable=invalid-name
        """ <animateMotion path="M10,20" /> """
        target = self.get_target(anim)
        #path = inkex.paths.Path.parse_string(path)
        move = re.match(r"M\s*([\d.]+),([\d.]+)", path)
        dx = (float(move.group(1)) - float(target.attrib.get("x", target.attrib.get("cx")))) / self.frames
        dy = (float(move.group(2)) - float(target.attrib.get("y", target.attrib.get("cy")))) / self.frames

        def apply(time, dx=dx, dy=dy):
            self.adapt(target, add_cast=float, prop={
                "x": dx, "cx": dx,
                "y": dy, "cy": dy
            })

        return apply

    def adapt(self, elem, prop={}, css={}, add_cast=False): # pylint: disable=dangerous-default-value
        """ modify properties or style= settings """
        if css:
            style = inkex.Style(elem.get("style"))
            style.update(css)
            elem.set("style", str(css))
        for attr, val in prop.items():
            if add_cast:
                if elem.get(attr):
                    elem.set(attr, str(add_cast(elem.get(attr)) + val))
            else:
                elem.set(attr, str(val))
        return elem

    def get_target(self, animation):
        """ resolve xlink or relation """
        #raise Exception(animation.xml_path)
        if animation.attrib.get("xlink:href"): # pylint: disable=no-else-return
            return self.svg.getElementById(animation.attrib["xlink:href"][1:])
        elif animation.getchildren():
            return animation.getchildren()
        else:
            return animation.getparent()


#raise Exception(sys.argv)
if __name__ == "__main__":
    GIFExport().run()
    sys.exit(0)

Changes to inkscape/pmd2inks.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/env python3
# api: python
##type: cli
# category: convert
# title: plugin meta to .inx
# description: Convert plugin description to Inkscape .inx
# license: PD
# version: 0.5
# state: beta
# depends: pluginconf
# config: -
# pylint: disable=missing-docstring, invalid-name, no-else-return
# doc: https://gitlab.com/inkscape/extensions/-/blob/master/inkscape.extension.rng
#
# Quickly converts a PMD comment block to .inx descriptor.







|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/env python3
# api: python
##type: cli
# category: convert
# title: plugin meta to .inx
# description: Convert plugin description to Inkscape .inx
# license: PD
# version: 0.6
# state: beta
# depends: pluginconf
# config: -
# pylint: disable=missing-docstring, invalid-name, no-else-return
# doc: https://gitlab.com/inkscape/extensions/-/blob/master/inkscape.extension.rng
#
# Quickly converts a PMD comment block to .inx descriptor.
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75











76
77
78
79
80

81
82
83
84
85
86
87
88
89
90
91
92
93









94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
        <command location="inx" interpreter="python">{fn}</command>
    </script>
</inkscape-extension>
<!--
{args}
-->
"""
mode_map = {
    "bool": "checkbox",
    "color": "color",
    "range": 'slider" appearance="full',
    "float": "float",
}
type_map = {
    "select": "enum",
    "color": "color",
    "path": "path",
    "int": "int",
    "float": "float",
    "range": "int",
    "bool": "bool",
    "file": "path",
    "str": "string",
    "float": "float",
    "tab": "notebook",
    "group": "optiongroup",
    "label": "label",
}











arg_type_map = {
    "str": "str",
    "int": "int",
    "bool": "inkex.Boolean",
    "color": "inkex.Color",

}
bool_true_map = r"^(1|yes|true)"

def enum_item(k, v, xml="option"):
    return f"""<{xml} value="{k}">{v}</{xml}>"""

def param(o):
    _type = o.get("type", "str")
    _mode = mode_map.get(_type, _type)
    _type = type_map.get(_type, "string")
    _name = o.get("name", "_0")
    _val = o.get("value", "")
    _desc = o.get("description", "…")









    if _type == "bool":
        _val = "true" if re.match(bool_true_map, _val, re.I) else "false"
    if "xml" in o:
        return o["xml"]
    if "label" in o:
        return o["label"]
    if _type == "enum":
        ls = "\n            ".join([enum_item(k, v) for k, v in o.get("select", {}).items()])
        return f"""
            <param name="{_name}" type="optiongroup" appearance="combo" gui-text="{_desc}">
            {ls}
            </param>
        """
    elif _type == "label":
        return f"""
            <label>{_desc}</label>
        """
    elif _type in ("int", "float"):
        return f"""
            <param name="{_name}" type="{_type}" min="{o.get("min",0)}" max="{o.get("max",100)}" precision="{o.get("precision",1)}" appearance="{_mode}" gui-text="{_desc}">{_val}</param>
        """
    else:
        return f"""
            <param name="{_name}" type="{_type}" mode="{_mode}" gui-text="{_desc}">{_val}</param>
        """

def inx_export(m, xml="output"):
    if not "inx_export" in m:
        return ""
    _ext, _mime, _type, _tip = re.split(r"\s*,\s*", m["inx_export"])
    return f"""
    <!--{xml}>
        <extension>{_ext}</extension>
        <mimetype>{_mime}</mimetype>
        <filetypename>{_type}</filetypename>
        <filetypetooltip>{_tip}</filetypetooltip>
        <dataloss>true</dataloss>
    </{xml}-->
    """

def add_arg(o):
    if not o.get("name"):
        return ""
    _type = arg_type_map.get(o["type"], "str")
    _name = o.get("name")
    _val = o.get("value", "")
    if _type == "inkex.Boolean":
        _val = "True" if re.match(bool_true_map, _val, re.I) else "False"
    elif _type != "int":
        _val = '"' + _val + '"'
    return f"""        pars.add_argument("-"+"-{_name}", type={_type}, dest="{_name}", default={_val}, help="{o.get("description","")}")"""


def generate_inx(m):
    """ roughly convert builtin plugin description to .inx """
    params = [param(o) for o in m["config"]]







|
<
<
<
<
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
>
>
>
>
>
>
>
>
>
>
|
|
|
|
|
>








<
|



>
>
>
>
>
>
>
>
>






|


|









|



|



















|




|







48
49
50
51
52
53
54
55





56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95

96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
        <command location="inx" interpreter="python">{fn}</command>
    </script>
</inkscape-extension>
<!--
{args}
-->
"""
map = {





    "type": {
        "select": "select",
        "color": "color",
        "path": "path",
        "int": "int",
        "float": "float",
        "range": "int",
        "bool": "bool",
        "file": "path",
        "str": "string",
        "float": "float",
        "tab": "notebook",
        "group": "optiongroup",
        "label": "label",
    },
    "mode": {
        "bool": "checkbox",
        "color": "color",
        "range": "slider",
        "float": "float",
    },
    "appearance": {
        "range": "full",
        "enum": "combo",
        "select": "combo",
    },
    "arg": {
        "str": "str",
        "int": "int",
        "bool": "inkex.Boolean",
        "color": "inkex.Color",
    }
}
bool_true_map = r"^(1|yes|true)"

def enum_item(k, v, xml="option"):
    return f"""<{xml} value="{k}">{v}</{xml}>"""

def param(o):
    _type = o.get("type", "str")

    _type = map["type"].get(_type, "string")
    _name = o.get("name", "_0")
    _val = o.get("value", "")
    _desc = o.get("description", "…")
    _add = ""
    for prop in "mode", "appearance":
        if map[prop].get(_type) and not o.get(prop):
            o[prop] = map[prop][_type]
        if o.get(prop):
            _add = _add + f"{prop}=\"{o[prop]}\" "
    if o.get("help"):
        _add = _add + f"gui-description=\"{o['help']}\""

    if _type == "bool":
        _val = "true" if re.match(bool_true_map, _val, re.I) else "false"
    if "xml" in o:
        return o["xml"]
    if "label" in o:
        return o["label"]
    if _type == "select":
        ls = "\n            ".join([enum_item(k, v) for k, v in o.get("select", {}).items()])
        return f"""
            <param name="{_name}" type="optiongroup" {_add} gui-text="{_desc}">
            {ls}
            </param>
        """
    elif _type == "label":
        return f"""
            <label>{_desc}</label>
        """
    elif _type in ("int", "float"):
        return f"""
            <param name="{_name}" type="{_type}" min="{o.get("min",0)}" max="{o.get("max",100)}" precision="{o.get("precision",1)}" {_add} gui-text="{_desc}">{_val}</param>
        """
    else:
        return f"""
            <param name="{_name}" type="{_type}" {_add} gui-text="{_desc}">{_val}</param>
        """

def inx_export(m, xml="output"):
    if not "inx_export" in m:
        return ""
    _ext, _mime, _type, _tip = re.split(r"\s*,\s*", m["inx_export"])
    return f"""
    <!--{xml}>
        <extension>{_ext}</extension>
        <mimetype>{_mime}</mimetype>
        <filetypename>{_type}</filetypename>
        <filetypetooltip>{_tip}</filetypetooltip>
        <dataloss>true</dataloss>
    </{xml}-->
    """

def add_arg(o):
    if not o.get("name"):
        return ""
    _type = map["arg"].get(o["type"], "str")
    _name = o.get("name")
    _val = o.get("value", "")
    if _type == "inkex.Boolean":
        _val = "True" if re.match(bool_true_map, _val, re.I) else "False"
    elif _val and _type != "int":
        _val = '"' + _val + '"'
    return f"""        pars.add_argument("-"+"-{_name}", type={_type}, dest="{_name}", default={_val}, help="{o.get("description","")}")"""


def generate_inx(m):
    """ roughly convert builtin plugin description to .inx """
    params = [param(o) for o in m["config"]]

Changes to inkscape/saveas_gif.inx.

15
16
17
18
19
20
21

22
23
24
25
26
27
28
29
30
31
32
    <option value="optimize">optimize</option>
    <option value="coalesce">coalesce</option>
    <option value="composite">composite</option>
    <option value="dispose">dispose</option>
    <option value="optimize-frame">optimize-frame</option>
    <option value="optimize-transparency">optimize-transparency</option>
  </param>

     <output>
        <extension>.gif</extension>
        <mimetype>image/gif</mimetype>
        <filetypename>GIF slideshow (*.gif)</filetypename>
        <filetypetooltip>Graphics Interchange Format 98a</filetypetooltip>
        <dataloss>true</dataloss>
    </output>
    <script savecopyonly="true">
        <command location="inx" interpreter="python">export_gif.py</command>
    </script>
</inkscape-extension>







>











15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
    <option value="optimize">optimize</option>
    <option value="coalesce">coalesce</option>
    <option value="composite">composite</option>
    <option value="dispose">dispose</option>
    <option value="optimize-frame">optimize-frame</option>
    <option value="optimize-transparency">optimize-transparency</option>
  </param>
  <param name="save_as" type="bool" appearance="hidden" gui-hidden="true">true</param>
     <output>
        <extension>.gif</extension>
        <mimetype>image/gif</mimetype>
        <filetypename>GIF slideshow (*.gif)</filetypename>
        <filetypetooltip>Graphics Interchange Format 98a</filetypetooltip>
        <dataloss>true</dataloss>
    </output>
    <script savecopyonly="true">
        <command location="inx" interpreter="python">export_gif.py</command>
    </script>
</inkscape-extension>