Merge: Nitgs optims
authorJean Privat <jean@pryen.org>
Thu, 3 Apr 2014 20:06:32 +0000 (16:06 -0400)
committerJean Privat <jean@pryen.org>
Thu, 3 Apr 2014 20:06:32 +0000 (16:06 -0400)
Some optimizations on the nitg-s side (low level).

Some use the new call-graph mechanism.

Pull-Request: #372
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>

131 files changed:
VERSION
benchmarks/languages/bench_typetest_fts_nesting.nit
contrib/nitcc/src/grammar.nit
contrib/nitcc/src/nitcc_lexer0.nit
examples/mnit_ballz/Makefile [new file with mode: 0644]
examples/mnit_ballz/assets/images/ball.png [new file with mode: 0644]
examples/mnit_ballz/src/ballz_android.nit [new file with mode: 0644]
examples/mnit_ballz/src/game_logic.nit [new file with mode: 0644]
examples/mnit_dino/art/drawing.svg
examples/mnit_dino/assets/images/0.png [new file with mode: 0644]
examples/mnit_dino/assets/images/1.png [new file with mode: 0644]
examples/mnit_dino/assets/images/2.png [new file with mode: 0644]
examples/mnit_dino/assets/images/3.png [new file with mode: 0644]
examples/mnit_dino/assets/images/4.png [new file with mode: 0644]
examples/mnit_dino/assets/images/5.png [new file with mode: 0644]
examples/mnit_dino/assets/images/6.png [new file with mode: 0644]
examples/mnit_dino/assets/images/7.png [new file with mode: 0644]
examples/mnit_dino/assets/images/8.png [new file with mode: 0644]
examples/mnit_dino/assets/images/9.png [new file with mode: 0644]
examples/mnit_dino/assets/images/bush.png [new file with mode: 0644]
examples/mnit_dino/src/dino.nit
examples/mnit_dino/src/dino_android.nit
examples/mnit_dino/src/game_logic.nit
examples/mnit_dino/src/graphism.nit
examples/mnit_dino/src/splash.nit
examples/mnit_moles/Makefile
examples/mnit_moles/art/drawing.svg [new file with mode: 0644]
examples/mnit_moles/art/moles.svg [deleted file]
examples/mnit_moles/assets/images/0.png
examples/mnit_moles/assets/images/1.png
examples/mnit_moles/assets/images/2.png
examples/mnit_moles/assets/images/3.png
examples/mnit_moles/assets/images/4.png
examples/mnit_moles/assets/images/5.png
examples/mnit_moles/assets/images/6.png
examples/mnit_moles/assets/images/7.png
examples/mnit_moles/assets/images/8.png
examples/mnit_moles/assets/images/9.png
examples/mnit_moles/assets/images/empty.png
examples/mnit_moles/assets/images/hit.png
examples/mnit_moles/assets/images/sign-cute.png [new file with mode: 0644]
examples/mnit_moles/assets/images/sign-hits.png [new file with mode: 0644]
examples/mnit_moles/assets/images/sign-warning.png [new file with mode: 0644]
examples/mnit_moles/assets/images/trap.png [new file with mode: 0644]
examples/mnit_moles/assets/images/up.png
examples/mnit_moles/src/moles.nit
examples/mnit_moles/src/moles_android.nit
examples/mnit_moles/src/moles_linux.nit
lib/base64.nit
lib/json/jsonable.nit
lib/mnit/input_events.nit
lib/mnit/numbers.nit
lib/mnit_android/android_app.nit
lib/mnit_android/android_sensor.nit [new file with mode: 0644]
lib/opts.nit
lib/sha1.nit [new file with mode: 0644]
lib/standard/exec.nit
lib/standard/file.nit
lib/standard/ropes.nit
lib/standard/stream.nit
lib/standard/string.nit
lib/standard/string_search.nit
src/abstract_compiler.nit
src/debugger.nit
src/global_compiler.nit
src/location.nit
src/metrics/generate_hierarchies.nit
src/metrics/model_hyperdoc.nit
src/model/model.nit
src/model/model_base.nit
src/modelbuilder.nit
src/naive_interpreter.nit
src/network_debugger.nit
src/nitdbg_client.nit
src/nitdoc.nit
src/nitunit.nit
src/nitx.nit
src/phase.nit
src/rapid_type_analysis.nit
src/separate_compiler.nit
src/transform.nit
src/typing.nit
tests/base_prot.nit
tests/base_prot0.nit [new file with mode: 0644]
tests/base_prot2.nit
tests/base_prot3.nit
tests/base_test_obj_id.nit
tests/bench_string_append.nit
tests/example_objet.nit
tests/example_procedural_string.nit
tests/example_string.nit
tests/sav/ballz_android.res [new file with mode: 0644]
tests/sav/base_attr3_alt2.res
tests/sav/base_attr3_alt3.res
tests/sav/base_attr3_alt4.res
tests/sav/base_class_name.res
tests/sav/base_iterator3.res
tests/sav/base_prot.res
tests/sav/base_prot0.res [new file with mode: 0644]
tests/sav/base_prot2.res
tests/sav/base_prot2_alt1.res
tests/sav/base_prot2_alt2.res
tests/sav/base_prot2_alt3.res
tests/sav/base_prot2_alt4.res
tests/sav/base_prot3.res
tests/sav/base_prot3_alt1.res [new file with mode: 0644]
tests/sav/base_prot3_alt2.res [new file with mode: 0644]
tests/sav/base_prot3_alt3.res [new file with mode: 0644]
tests/sav/base_prot3_alt4.res [new file with mode: 0644]
tests/sav/base_prot3_alt5.res [new file with mode: 0644]
tests/sav/base_prot3_alt6.res [new file with mode: 0644]
tests/sav/base_prot3_alt7.res [new file with mode: 0644]
tests/sav/base_prot3_alt8.res [new file with mode: 0644]
tests/sav/base_prot3_alt9.res [new file with mode: 0644]
tests/sav/error_expr_not_ok_alt4.res
tests/sav/error_expr_not_ok_alt5.res
tests/sav/error_expr_not_ok_alt6.res
tests/sav/error_for_coll.res
tests/sav/error_needed_method_alt2.res
tests/sav/error_needed_method_alt6.res
tests/sav/error_needed_types_alt8.res
tests/sav/nitg-e/base_class_name.res
tests/sav/nitmetrics_args1.res
tests/sav/test_string_search.res
tests/shootout_nsieve.nit
tests/string_ffi_ref_test.nit
tests/string_trim.nit
tests/test_isa.nit
tests/test_string_is_numeric.nit
tests/test_string_long.nit
tests/test_string_search.nit

diff --git a/VERSION b/VERSION
index 2fc7b36..08bc6bd 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-v0.6.4
+v0.6.5
index 8cb2df0..732dab3 100644 (file)
@@ -7,7 +7,7 @@ class TypeTestFtsNestingGenerator
 
        fun clanit(i: Int): String
        do
-               var s = new Buffer
+               var s = new FlatBuffer
                s.append("{classes.first}[" * i)
                s.append("Root")
                s.append("]" * i)
@@ -29,7 +29,7 @@ class TypeTestFtsNestingGenerator
 
        fun clajava(i: Int): String
        do
-               var s = new Buffer
+               var s = new FlatBuffer
                s.append("{classes.first}<" * i)
                s.append("Root")
                s.append(">" * i)
@@ -81,7 +81,7 @@ class TypeTestFtsNestingGenerator
 
        fun clacpp(i: Int): String
        do
-               var s = new Buffer
+               var s = new FlatBuffer
                s.append("{classes.first}<" * i)
                s.append("Root")
                s.append("*>" * i)
@@ -103,7 +103,7 @@ class TypeTestFtsNestingGenerator
 
        fun clae(i: Int): String
        do
-               var s = new Buffer
+               var s = new FlatBuffer
                s.append("{classes.first}[" * i)
                s.append("ROOT")
                s.append("]" * i)
index 52e995c..e6851f0 100644 (file)
@@ -27,7 +27,7 @@ class Gram
        # Dump of the concrete grammar and the transformations
        fun pretty: String
        do
-               var res = new Buffer
+               var res = new FlatBuffer
                for p in prods do
                        if p.spe != null then
                                res.append("{p.name} \{-> {p.spe.name}\}=\n")
@@ -1072,7 +1072,7 @@ class Item
 
        redef fun to_s
        do
-               var b = new Buffer
+               var b = new FlatBuffer
                b.append("{alt.prod.name}::{alt.name}=")
                for i in [0..alt.elems.length[
                do
index a3cade7..6f12765 100644 (file)
@@ -96,7 +96,7 @@ class Lexer_nitcc
 
        fun str
        do
-               var b = new Buffer
+               var b = new FlatBuffer
                b.add('\'')
                while iter.is_ok do
                        var c = iter.item
@@ -123,7 +123,7 @@ class Lexer_nitcc
 
        fun id(c: Char)
        do
-               var b = new Buffer
+               var b = new FlatBuffer
                b.add c
                while iter.is_ok do
                        c = iter.item
@@ -140,7 +140,7 @@ class Lexer_nitcc
 
        fun kw(c: Char)
        do
-               var b = new Buffer
+               var b = new FlatBuffer
                b.add c
                while iter.is_ok do
                        c = iter.item
diff --git a/examples/mnit_ballz/Makefile b/examples/mnit_ballz/Makefile
new file mode 100644 (file)
index 0000000..7eb562a
--- /dev/null
@@ -0,0 +1,8 @@
+default: android
+
+android:
+       mkdir -p bin
+       ../../bin/nitg --no-stacktrace -o bin/ballz.apk src/ballz_android.nit
+
+clean:
+       rm -rf bin
diff --git a/examples/mnit_ballz/assets/images/ball.png b/examples/mnit_ballz/assets/images/ball.png
new file mode 100644 (file)
index 0000000..0f92733
Binary files /dev/null and b/examples/mnit_ballz/assets/images/ball.png differ
diff --git a/examples/mnit_ballz/src/ballz_android.nit b/examples/mnit_ballz/src/ballz_android.nit
new file mode 100644 (file)
index 0000000..d844c48
--- /dev/null
@@ -0,0 +1,78 @@
+# this file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2014 Romain Chanoir <romain.chanoir@viacesi.fr>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+module ballz_android
+
+import realtime
+import mnit_android
+import game_logic
+
+class MyApp
+       super App
+
+       var screen: nullable Screen
+
+       var target_dt = 20000000
+
+       init do super
+
+
+       redef fun init_window 
+       do
+               super
+               screen = new Screen(self, display.as(Display))
+               
+       end
+
+       redef fun frame_core(display)
+       do
+               var screen = self.screen
+               if screen != null then
+                       var clock = new Clock
+
+                       screen.game.do_turn
+                       screen.do_frame(display)
+                       
+                       var dt = clock.lapse
+                       if dt.sec == 0 and dt.nanosec < target_dt then
+                               var sleep_t = target_dt - dt.nanosec
+                               sys.nanosleep(0, sleep_t)
+                       end
+               end
+       end
+
+       redef fun input(ie)
+       do      
+               if ie isa QuitEvent then 
+                       quit = true
+                       return true
+               end
+               if screen != null then
+                       return screen.input(ie)
+               end
+               return false
+       end
+end
+
+var app = new MyApp
+app.sensors_support_enabled = true
+app.accelerometer.enabled = true
+app.accelerometer.event_rate = 10000
+app.magnetic_field.enabled = true
+app.gyroscope.enabled = true
+app.light.enabled = true
+app.proximity.enabled = true
+app.main_loop
diff --git a/examples/mnit_ballz/src/game_logic.nit b/examples/mnit_ballz/src/game_logic.nit
new file mode 100644 (file)
index 0000000..2e64eab
--- /dev/null
@@ -0,0 +1,179 @@
+#this file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2014 Romain Chanoir <romain.chanoir@viacesi.fr>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+module game_logic
+
+import mnit_android
+
+class Ball
+       var x: Float
+       var y: Float
+       var dim: Int
+       var walls_activated: Bool
+       var offset_x = 0.0
+       var offset_y = 0.0
+       var going_left: Bool
+       var going_down: Bool
+
+       var game: Game
+
+       init(game: Game, x,y: Float, walls: Bool)
+       do
+               self.x = x
+               self.y = y
+               self.dim = 20
+               self.game = game
+               self.walls_activated = walls
+       end
+
+       # not very useful at this time
+       fun do_turn
+       do
+       end
+
+       fun intercepts(event: InputEvent): Bool
+       do
+               if event isa ASensorAccelerometer then
+                       do_move(event)
+               else if event isa ASensorMagneticField then
+                       #deal with Magnetic field sensor
+                       print "ASensorMagneticField : x = " + event.x.to_s + " y = " + event.y.to_s + " z = " + event.z.to_s
+               else if event isa ASensorGyroscope then
+                       #deal with Gyroscope sensor
+                       print "ASensorGyroscope : x = " + event.x.to_s + " y = " + event.y.to_s + " z = " + event.z.to_s
+               else if event isa ASensorLight then
+                       #deal with light sensor
+                       print "ASensorLight : light = " + event.light.to_s
+               else if event isa ASensorProximity then
+                       #deal with proximity sensor
+                       print "ASensorProximity : distance = " + event.distance.to_s
+               else if event isa MotionEvent then
+                       activate_walls(event)
+               end
+               return true
+       end
+
+       fun do_move (event: ASensorAccelerometer)
+       do
+               # acceleration value
+               var vx = event.x
+               var vy = event.y
+
+               var gw = game.width
+               var gh = game.height
+
+               # acceleration
+               var max_value = 9.80
+               var acceleration_x = vx/max_value
+               var acceleration_y = vy/max_value
+               offset_x -= (acceleration_x/10.0)*(vx.abs) + offset_x/125.0
+               offset_y += (acceleration_y/10.0)*(vy.abs) - offset_y/125.0
+               var nx = self.x + offset_x
+               var ny = self.y + offset_y
+               going_left = offset_x > 0.0
+               going_down = offset_y > 0.0
+
+               # x value
+               if nx >= 0.0 and nx <= gw then
+                       self.x = nx
+               else if nx < 0.0 then
+                       if not walls_activated then self.x = gw else do_bounce(1)
+               else if nx > gw then
+                       if not walls_activated then self.x = 0.0 else do_bounce(1)
+               end
+
+               # y value
+               if ny >= 0.0 and ny <= gh then
+                       self.y = ny
+               else if ny < 0.0 then
+                       if not walls_activated then self.y = gh else do_bounce(2)
+               else if ny > gh then
+                       if not walls_activated then self.y = 0.0 else do_bounce(2)
+               end
+       end
+
+       # bounce in function of the position of the wall relative to the ball: 1=left or right, 2=top or down
+       fun do_bounce(wall_position: Int)
+       do
+               if wall_position == 1 then
+                       offset_x = -offset_x*0.85
+               else if wall_position == 2 then
+                       offset_y = -offset_y*0.85
+               end
+               if offset_x.abs > 1.0 and offset_y.abs > 1.0 then
+               self.x += offset_x
+               self.y += offset_y
+               end
+       end
+
+       fun activate_walls(event: MotionEvent)
+       do
+               if event.just_went_down then
+                       walls_activated = not walls_activated
+               end
+       end
+end
+
+class Screen
+       var ball_img: Image
+       var game: Game
+
+       init(app: App, display: Display)
+       do
+               game = new Game(display)
+               ball_img = app.load_asset("images/ball.png").as(Image)
+               var scale = game.img_dim.to_f / game.img_ori_dim.to_f
+               ball_img.scale = scale
+               ball_img.scale = 3.0
+       end
+
+       fun do_frame(display: Display)
+       do
+               display.clear(0.0, 0.0, 0.0)
+               display.blit_rotated(ball_img, game.ball.x, game.ball.y, 0.0)
+       end
+
+       fun input(ie: InputEvent): Bool
+       do
+               if ie isa ASensorProximity then
+                       if ie.distance == 0.0 then ball_img.scale = 6.0 else ball_img.scale = 3.0
+               else
+                       game.ball.intercepts(ie)
+               end
+               return true
+       end
+end
+
+class Game
+       var ball: Ball
+       var width: Float
+       var height: Float
+
+       var img_ori_dim: Int = 256
+       fun img_dim: Int do return 210
+
+       init(display: Display)
+       do
+               width = display.width.to_f
+               height = display.height.to_f
+               ball = new Ball(self, width/2.0, height/2.0, false)
+       end
+
+       fun do_turn
+       do
+       ball.do_turn
+       end
+end
index ad66d9d..3881874 100644 (file)
@@ -14,7 +14,7 @@
    height="339.81699"
    id="svg2"
    version="1.1"
-   inkscape:version="0.48.1 r9760"
+   inkscape:version="0.48.4 r9939"
    sodipodi:docname="drawing.svg">
   <defs
      id="defs4" />
      borderopacity="1.0"
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
-     inkscape:zoom="2.8"
-     inkscape:cx="447.8822"
-     inkscape:cy="139.30036"
+     inkscape:zoom="11.313708"
+     inkscape:cx="48.280462"
+     inkscape:cy="238.24232"
      inkscape:document-units="px"
-     inkscape:current-layer="g3514"
+     inkscape:current-layer="layer1"
      showgrid="false"
-     inkscape:window-width="1920"
-     inkscape:window-height="1149"
+     inkscape:window-width="2558"
+     inkscape:window-height="1419"
      inkscape:window-x="0"
-     inkscape:window-y="0"
+     inkscape:window-y="19"
      inkscape:window-maximized="1"
      fit-margin-top="0"
      fit-margin-left="0"
@@ -50,7 +50,7 @@
         <dc:format>image/svg+xml</dc:format>
         <dc:type
            rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
+        <dc:title />
       </cc:Work>
     </rdf:RDF>
   </metadata>
          inkscape:export-ydpi="48.255318">
         <path
            transform="matrix(0.93069307,0,0,0.93069307,1215.7779,479.27052)"
-           d="m 439.28572,243.74556 a 36.07143,36.07143 0 1 1 -72.14286,0 36.07143,36.07143 0 1 1 72.14286,0 z"
+           d="m 439.28572,243.74556 c 0,19.9217 -16.14972,36.07143 -36.07143,36.07143 -19.9217,0 -36.07143,-16.14973 -36.07143,-36.07143 0,-19.9217 16.14973,-36.07143 36.07143,-36.07143 19.92171,0 36.07143,16.14973 36.07143,36.07143 z"
            sodipodi:ry="36.07143"
            sodipodi:rx="36.07143"
            sodipodi:cy="243.74556"
            sodipodi:nodetypes="cccsssssssssssssssscsscsscsssssssssssscssscsssscsssscscccssssssssssssssssscscccsscccccssssssssssssssssssssssscssssssssssssssscsssccsscccccsscssssssssccsccccsscssssccssc" />
       </g>
     </g>
+    <g
+       transform="matrix(0.23143297,0,0,0.23143297,969.27692,566.25391)"
+       id="00"
+       inkscape:label="#g3694">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3549"
+         d="m 1861.2812,1087.8438 c -14.5955,-0.3898 -24.2991,15.1003 -23.875,28.5312 -1.494,13.9164 1.1141,31.5738 15.0626,38.2812 13.0068,5.9874 30.4459,-2.762 32.3437,-17.25 3.8645,-14.5657 3.2348,-32.5174 -7.5,-43.9062 -4.3549,-3.8893 -10.1888,-5.9792 -16.0313,-5.6562 z m 0.4688,17.8437 c 6.2356,1.6508 5.1199,10.0839 5.5625,15.0937 -0.2967,5.8244 1.219,14.849 -5.2187,17.8126 -5.7235,-1.3372 -4.8897,-8.9165 -5.4062,-13.4356 -0.2941,-6.4929 -0.9499,-15.271 4.7186,-19.4394 l 0.2813,-0.031 0.062,0 z"
+         style="font-size:74.79834747px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#f4e3d7;fill-opacity:1;stroke:none;font-family:Sans" />
+      <path
+         d="m 1861.9664,1099.693 c -3.7984,0 -6.6593,1.8749 -8.5828,5.6245 -1.8992,3.7253 -2.8488,9.3376 -2.8488,16.8369 0,7.475 0.9496,13.0873 2.8488,16.8369 1.9235,3.7254 4.7844,5.588 8.5828,5.588 3.8227,0 6.6836,-1.8626 8.5828,-5.588 1.9235,-3.7496 2.8853,-9.3619 2.8853,-16.8369 0,-7.4993 -0.9618,-13.1116 -2.8853,-16.8369 -1.8992,-3.7496 -4.7601,-5.6245 -8.5828,-5.6245 m 0,-5.8436 c 6.1114,0 10.7742,2.4227 13.9882,7.268 3.2383,4.821 4.8575,11.8333 4.8575,21.037 0,9.1794 -1.6192,16.1917 -4.8575,21.037 -3.214,4.821 -7.8768,7.2315 -13.9882,7.2315 -6.1115,0 -10.7863,-2.4105 -14.0247,-7.2315 -3.214,-4.8453 -4.821,-11.8576 -4.821,-21.037 0,-9.2037 1.607,-16.216 4.821,-21.037 3.2384,-4.8453 7.9132,-7.268 14.0247,-7.268"
+         style="font-size:74.79834747px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+         id="path3644"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       transform="matrix(0.23143297,0,0,0.23143297,969.27692,566.25391)"
+       id="01"
+       inkscape:label="#g3698">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3551"
+         d="m 1914.3125,1088.625 c -7.0568,0.3358 -13.9615,1.1781 -20.7813,2.5938 -8.2456,2.7209 -8.4535,18.442 1.125,18.9687 2.3173,0.3306 4.4818,-0.4787 6.5626,-1.3125 -0.4674,9.369 0.087,18.7508 -0.094,28.125 -5.723,-1.2317 -13.9685,1.8936 -12.4375,9 -0.6365,5.1216 3.1467,10.9774 8.9063,9.4375 11.4455,-0.3506 22.896,0.063 34.3437,-0.062 1.5508,-6.2776 2.246,-16.4192 -5.6563,-18.5312 -2.3853,-1.3941 -7.2184,2.116 -5.9929,-1.9664 0.7552,-14.4644 -0.1235,-29.1344 0.056,-43.5024 -0.8388,-2.4617 -3.7617,-2.9085 -6.0313,-2.75 z"
+         style="font-size:74.79834747px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#f4e3d7;fill-opacity:1;stroke:none;font-family:Sans" />
+      <path
+         d="m 1895.0924,1143.1549 12.0525,0 0,-41.5993 -13.1116,2.6297 0,-6.7202 13.0386,-2.6296 7.3775,0 0,48.3194 12.0525,0 0,6.2089 -31.4095,0 0,-6.2089"
+         style="font-size:74.79834747px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+         id="path3646"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       transform="matrix(0.23143297,0,0,0.23143297,969.27692,566.25391)"
+       id="02"
+       inkscape:label="#g3709">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3553"
+         d="m 1954.5938,1087.8125 c -7.7361,0.1393 -15.0454,2.9486 -22.0938,5.9063 2.9504,5.4952 -2.7157,13.8836 4.1562,17.625 5.744,0.9489 10.1682,-4.8136 15.7813,-5.5 5.4292,-2.0643 10.3322,5.9478 5.125,9.2812 -7.6397,9.9106 -19.1613,16.9442 -25,28.2188 -2.6164,7.6317 5.957,14.7096 13.2164,12.2436 11.055,-0.5839 22.1278,0.023 33.1899,-0.2436 1.7515,-6.4499 2.0695,-17.2922 -6.5,-18.6563 -2.758,-0.6325 -13.5028,2.4409 -8.3162,-1.6838 8.7577,-7.9124 18.0465,-19.1891 14.3162,-31.8475 -2.8329,-10.073 -13.8729,-15.7871 -23.875,-15.3437 z"
+         style="font-size:74.79834747px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#f4e3d7;fill-opacity:1;stroke:none;font-family:Sans" />
+      <path
+         d="m 1947.7946,1143.1549 25.7485,0 0,6.2089 -34.6235,0 0,-6.2089 c 2.8001,-2.8974 6.6106,-6.781 11.4316,-11.6507 4.8453,-4.894 7.8888,-8.0471 9.1306,-9.4594 2.3618,-2.6539 4.0053,-4.894 4.9306,-6.7201 0.9496,-1.8505 1.4243,-3.6644 1.4244,-5.4419 -10e-5,-2.8974 -1.0227,-5.2592 -3.0679,-7.0854 -2.021,-1.8261 -4.6628,-2.7391 -7.9254,-2.7392 -2.3131,10e-5 -4.7602,0.4018 -7.3411,1.2053 -2.5566,0.8035 -5.2958,2.0209 -8.2176,3.6522 l 0,-7.4506 c 2.9705,-1.193 5.7462,-2.0939 8.3272,-2.7027 2.5809,-0.6086 4.9427,-0.913 7.0854,-0.913 5.6488,0 10.1532,1.4122 13.5134,4.2366 3.36,2.8245 5.04,6.5985 5.0401,11.322 -10e-5,2.2401 -0.4262,4.3706 -1.2783,6.3915 -0.8279,1.9966 -2.3497,4.3584 -4.5653,7.0854 -0.6088,0.7061 -2.5445,2.7514 -5.8071,6.1358 -3.2628,3.3601 -7.8646,8.0715 -13.8056,14.1342"
+         style="font-size:74.79834747px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+         id="path3648"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       transform="matrix(0.23143297,0,0,0.23143297,969.27692,566.25391)"
+       id="03"
+       inkscape:label="#g3713">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3555"
+         d="m 2001.3438,1087.875 c -6.6413,0.2869 -13.0693,1.9981 -19.4063,3.9062 1.826,5.5436 -2.4065,13.8707 4.3437,17.0938 6.9372,0.7324 15.4467,-6.354 21.7813,-0.9062 0.2369,3.8944 -4.6233,3.5325 -7.2187,2.8437 -6.0803,-0.9029 -12.8344,3.912 -11.125,10.5 -0.1227,4.8764 4.3108,9.8358 9.4374,8 4.0153,-1.1985 12.1518,0.419 9.8126,6.0937 -5.3778,5.5433 -14.7768,2.3934 -20.5626,-0.7187 -2.8663,-0.7569 -10.8672,-8.8834 -8.3039,-2.7486 3.1647,6.7812 -3.3568,16.2643 4.2415,21.1861 13.4971,5.3965 32.5554,5.3978 41.375,-7.9688 4.5677,-7.83 3.9958,-18.7663 -2.4063,-25.4374 9.1057,-10.6015 1.8678,-29.373 -12,-30.9376 -3.2368,-0.8512 -6.6206,-1.0301 -9.9687,-0.9062 z"
+         style="font-size:74.79834747px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#f4e3d7;fill-opacity:1;stroke:none;font-family:Sans" />
+      <path
+         d="m 2011.417,1119.9631 c 3.5305,0.7548 6.2819,2.3253 8.2541,4.7114 1.9966,2.3861 2.9948,5.3323 2.9949,8.8384 -10e-5,5.3811 -1.8505,9.5446 -5.5515,12.4908 -3.7009,2.9461 -8.9602,4.4192 -15.7777,4.4192 -2.2888,0 -4.6506,-0.2313 -7.0854,-0.6939 -2.4105,-0.4383 -4.9062,-1.1079 -7.4872,-2.0087 l 0,-7.122 c 2.0453,1.1931 4.2854,2.094 6.7202,2.7027 2.4348,0.6087 4.9792,0.9131 7.6332,0.9131 4.6262,0 8.1446,-0.9131 10.5551,-2.7392 2.4348,-1.8261 3.6522,-4.4801 3.6522,-7.962 0,-3.2139 -1.1322,-5.7218 -3.3966,-7.5236 -2.24,-1.8261 -5.3688,-2.7392 -9.3863,-2.7392 l -6.3549,0 0,-6.0628 6.6471,0 c 3.6279,10e-5 6.4036,-0.7182 8.3272,-2.1548 1.9235,-1.4609 2.8852,-3.5548 2.8852,-6.2819 0,-2.8 -0.9983,-4.9427 -2.9948,-6.428 -1.9723,-1.5095 -4.8088,-2.2643 -8.5098,-2.2644 -2.0209,10e-5 -4.1879,0.2192 -6.501,0.6574 -2.3131,0.4383 -4.8575,1.1201 -7.6332,2.0453 l 0,-6.5741 c 2.8,-0.7791 5.4175,-1.3634 7.8523,-1.7531 2.4592,-0.3895 4.7723,-0.5843 6.9393,-0.5843 5.6001,0 10.0315,1.2783 13.2943,3.8348 3.2626,2.5323 4.894,5.9655 4.894,10.2994 0,3.0193 -0.8644,5.5759 -2.5931,7.6698 -1.7288,2.0696 -4.188,3.5062 -7.3776,4.3097"
+         style="font-size:74.79834747px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+         id="path3650"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       transform="matrix(0.23143297,0,0,0.23143297,969.27692,566.25391)"
+       id="04"
+       inkscape:label="#g3717">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3557"
+         d="m 2067.9688,1088.5 c -6.4566,1.2478 -15.8923,-2.333 -19.5938,5.2188 -6.8742,12.7279 -17.4663,23.6403 -22.5,37.2812 -1.572,7.0228 5.2313,13.9814 12.3438,11.875 3.9917,0.1935 9.577,-1.2527 12.6874,-0.094 -2.331,6.4246 2.8647,13.7912 9.875,13.1563 4.8047,0.5137 10.6116,-2.4892 9.7813,-8.0313 0.1948,-2.0256 -1.8022,-5.6463 1.5313,-4.9062 9.2778,-1.7968 8.8762,-18.6589 -1.1563,-18.7812 -2.5581,-0.2345 0.1191,-4.9342 -0.3437,-6.875 -0.5201,-9.6938 -0.1936,-19.5008 -0.2813,-29.25 -0.7813,0.1354 -1.5625,0.2708 -2.3437,0.4062 z m -17,35.8438 c -3.9084,1.4633 1.969,-5.5538 0,0 z"
+         style="font-size:74.79834747px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#f4e3d7;fill-opacity:1;stroke:none;font-family:Sans" />
+      <path
+         d="m 2056.9607,1101.2635 -18.6265,29.1085 18.6265,0 0,-29.1085 m -1.9357,-6.428 9.2768,0 0,35.5365 7.7793,0 0,6.1358 -7.7793,0 0,12.856 -7.3411,0 0,-12.856 -24.6162,0 0,-7.1219 22.6805,-34.5504"
+         style="font-size:74.79834747px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+         id="path3652"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       transform="matrix(0.23143297,0,0,0.23143297,969.27692,566.25391)"
+       id="05"
+       inkscape:label="#g3721">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3559"
+         d="m 2109.9375,1088.5938 c -10.4996,1.0059 -21.0465,-0.2572 -31.5625,0.3124 0,14.1876 0,28.3751 0,42.5626 7.3358,-3.1633 17.2764,-9.6845 24.5938,-3.2813 3.7528,5.0113 -2.2292,12.0024 -7.9376,10.0313 -8.8461,-0.3631 -15.8755,-6.5226 -23.375,-10.5313 3.6937,4.6785 5.7134,10.2291 4.1876,16.125 -1.0926,5.5511 2.8253,10.8038 8.5312,11.0937 13.2642,3.9438 31.177,1.3118 37.1562,-12.8124 6.287,-13.9111 -2.7986,-33.2811 -18.7812,-34.4376 -1.5653,-0.5764 -5.5121,0.106 -5.8125,-0.5624 6.6526,-1.7269 15.0485,2.7703 20.9063,-2.3438 3.2745,-4.0311 2.5348,-11.1189 -1.0313,-14.7812 -1.943,-1.4822 -4.5521,-1.4446 -6.875,-1.375 z"
+         style="font-size:74.79834747px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#f4e3d7;fill-opacity:1;stroke:none;font-family:Sans" />
+      <path
+         d="m 2084.3893,1094.8355 28.9624,0 0,6.2088 -22.2058,0 0,13.3673 c 1.0714,-0.3652 2.1427,-0.633 3.214,-0.8035 1.0713,-0.1947 2.1427,-0.2921 3.214,-0.2922 6.0871,10e-5 10.9081,1.6679 14.463,5.0036 3.5548,3.3358 5.3322,7.8524 5.3323,13.5499 -1e-4,5.868 -1.8262,10.4333 -5.4784,13.696 -3.6523,3.2384 -8.802,4.8575 -15.4491,4.8575 -2.2888,0 -4.6262,-0.1948 -7.0123,-0.5843 -2.3618,-0.3896 -4.8088,-0.974 -7.3411,-1.7531 l 0,-7.4141 c 2.1914,1.1931 4.4558,2.0818 6.7932,2.6661 2.3375,0.5844 4.8088,0.8766 7.4141,0.8766 4.2123,0 7.548,-1.1079 10.0072,-3.3236 2.4592,-2.2157 3.6888,-5.2227 3.6888,-9.0211 0,-3.7983 -1.2296,-6.8053 -3.6888,-9.0211 -2.4592,-2.2156 -5.7949,-3.3235 -10.0072,-3.3235 -1.9722,0 -3.9444,0.2191 -5.9166,0.6574 -1.9479,0.4383 -3.9445,1.12 -5.9897,2.0453 l 0,-27.392"
+         style="font-size:74.79834747px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+         id="path3654"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       transform="matrix(0.23143297,0,0,0.23143297,969.27692,566.25391)"
+       id="06"
+       inkscape:label="#g3725">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3561"
+         d="m 2150.4062,1087.875 c -17.0218,0.044 -28.4729,17.9964 -27.25,33.8438 -0.7225,13.3171 4.2817,29.7495 18.4376,33.875 13.9967,4.4832 30.9648,-6.0029 31.2812,-21.125 1.8486,-13.5211 -9.0414,-28.0168 -23.2188,-27.25 -4.081,0.7728 -1.5713,-0.6732 0.9063,-1.0626 6.4418,-1.5816 11.5353,4.2341 17.5937,4.5313 4.4021,-1.7187 -0.3406,-6.3667 1.3126,-9.4063 1.0941,-5.408 -1.5872,-11.8349 -7.75,-12 -3.6656,-1.0468 -7.4824,-1.6115 -11.3126,-1.4062 z m -1.7812,37.25 c 6.8705,0.3855 6.766,13.7973 -0.4062,13.4688 -6.3586,-0.3671 -5.9789,-13.7823 0.4062,-13.4688 z"
+         style="font-size:74.79834747px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#f4e3d7;fill-opacity:1;stroke:none;font-family:Sans" />
+      <path
+         d="m 2148.6325,1119.1596 c -3.3114,0 -5.941,1.1322 -7.8889,3.3966 -1.9235,2.2644 -2.8853,5.3688 -2.8852,9.3132 -1e-4,3.9201 0.9617,7.0246 2.8852,9.3133 1.9479,2.2644 4.5775,3.3966 7.8889,3.3966 3.3114,0 5.9288,-1.1322 7.8524,-3.3966 1.9478,-2.2887 2.9218,-5.3932 2.9218,-9.3133 0,-3.9444 -0.974,-7.0488 -2.9218,-9.3132 -1.9236,-2.2644 -4.541,-3.3966 -7.8524,-3.3966 m 14.6456,-23.1189 0,6.7202 c -1.8505,-0.8765 -3.7253,-1.5461 -5.6245,-2.0088 -1.8748,-0.4625 -3.7375,-0.6938 -5.5879,-0.6939 -4.8697,10e-5 -8.595,1.6436 -11.176,4.9306 -2.5566,3.2871 -4.0175,8.2541 -4.3827,14.9012 1.4366,-2.1183 3.2383,-3.7374 5.4054,-4.8575 2.167,-1.1443 4.5531,-1.7165 7.1584,-1.7166 5.4784,10e-5 9.8002,1.6679 12.9655,5.0036 3.1896,3.3114 4.7845,7.8281 4.7845,13.5499 0,5.6002 -1.6557,10.0925 -4.9671,13.4769 -3.3114,3.3844 -7.7185,5.0766 -13.2212,5.0766 -6.3062,0 -11.1272,-2.4105 -14.4629,-7.2315 -3.3358,-4.8453 -5.0036,-11.8576 -5.0036,-21.037 0,-8.6193 2.0452,-15.4855 6.1358,-20.5988 4.0905,-5.1374 9.5811,-7.7062 16.4717,-7.7062 1.8504,0 3.7131,0.1826 5.5879,0.5478 1.8992,0.3653 3.8714,0.9131 5.9167,1.6435"
+         style="font-size:74.79834747px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+         id="path3656"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       transform="matrix(0.23143297,0,0,0.23143297,969.27692,566.25391)"
+       id="07"
+       inkscape:label="#g3729">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3563"
+         d="m 2209.75,1088.6562 c -12.648,0.697 -25.3139,-0.1463 -37.9688,0.2188 -0.2216,5.9415 -2.593,15.3639 5,17.8125 6.045,1.3815 12.2835,0.3166 18.4063,0.1563 -6.4395,16.6289 -12.857,33.2666 -19.1875,49.9374 7.165,-3.9545 17.8338,2.508 23,-5.5624 5.9055,-18.923 15.5718,-36.7773 20.125,-56.0626 -0.1789,-4.6758 -5.1961,-7.0393 -9.375,-6.5 z"
+         style="font-size:74.79834747px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#f4e3d7;fill-opacity:1;stroke:none;font-family:Sans" />
+      <path
+         d="m 2177.7046,1094.8355 35.0617,0 0,3.1409 -19.7953,51.3874 -7.7063,0 18.6266,-48.3195 -26.1867,0 0,-6.2088"
+         style="font-size:74.79834747px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+         id="path3658"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       transform="matrix(0.23143297,0,0,0.23143297,969.27692,566.25391)"
+       id="08"
+       inkscape:label="#g3733">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3565"
+         d="m 2240.0625,1087.875 c -13.6524,-0.3672 -25.6832,15.5638 -18.7813,28.1562 1.4454,2.2503 3.6077,4.2458 0.6563,6.1876 -8.9965,12.1117 -0.7737,32.8909 14.8437,33.75 12.1353,2.69 28.0745,-2.9229 30.375,-16.4688 1.6379,-6.7464 -0.1803,-14.402 -4.9374,-19.4688 9.0624,-10.4855 2.4513,-29.4066 -11.4376,-31.3437 -3.5021,-0.8444 -7.1009,-0.9227 -10.7187,-0.8125 z m 4.1875,17.6562 c 3.9463,0.4802 3.57,6.7349 -0.5938,6.3126 -3.5408,1.1246 -7.1302,-4.3084 -3.2187,-5.7813 1.1585,-0.469 2.5085,-0.4523 3.8125,-0.5313 z m -1.2188,23.7813 c 5.6435,-1.2668 7.4781,8.7318 1.5938,9.2813 -4.5356,1.7131 -9.4705,-3.9443 -6.0312,-7.6876 1.0869,-1.067 2.8443,-1.5814 4.4374,-1.5937 z"
+         style="font-size:74.79834747px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#f4e3d7;fill-opacity:1;stroke:none;font-family:Sans" />
+      <path
+         d="m 2242.9705,1123.4692 c -3.5062,10e-5 -6.2697,0.9375 -8.2906,2.8123 -1.9966,1.8748 -2.9949,4.4557 -2.9949,7.7428 0,3.287 0.9983,5.8679 2.9949,7.7428 2.0209,1.8748 4.7844,2.8122 8.2906,2.8122 3.5062,0 6.2697,-0.9374 8.2906,-2.8122 2.0209,-1.8992 3.0314,-4.4801 3.0314,-7.7428 0,-3.2871 -1.0105,-5.868 -3.0314,-7.7428 -1.9966,-1.8748 -4.7601,-2.8122 -8.2906,-2.8123 m -7.3776,-3.1409 c -3.1653,-0.7791 -5.6366,-2.2522 -7.4141,-4.4193 -1.7531,-2.1669 -2.6296,-4.8087 -2.6296,-7.9254 0,-4.3583 1.5461,-7.8036 4.6384,-10.3359 3.1166,-2.5322 7.3775,-3.7983 12.7829,-3.7983 5.4297,0 9.6906,1.2661 12.7829,3.7983 3.0922,2.5323 4.6384,5.9776 4.6384,10.3359 0,3.1167 -0.8888,5.7585 -2.6661,7.9254 -1.7532,2.1671 -4.2002,3.6402 -7.3411,4.4193 3.5548,0.8279 6.3184,2.447 8.2906,4.8575 1.9966,2.4105 2.9949,5.3567 2.9949,8.8385 0,5.2836 -1.6192,9.3376 -4.8575,12.162 -3.214,2.8244 -7.8281,4.2366 -13.8421,4.2366 -6.0141,0 -10.6403,-1.4122 -13.8786,-4.2366 -3.214,-2.8244 -4.821,-6.8784 -4.821,-12.162 0,-3.4818 0.9983,-6.428 2.9949,-8.8385 1.9965,-2.4105 4.7723,-4.0296 8.3271,-4.8575 m -2.7026,-11.6507 c -1e-4,2.8244 0.8765,5.0279 2.6296,6.6106 1.7774,1.5826 4.2609,2.374 7.4506,2.3739 3.1653,10e-5 5.6366,-0.7913 7.4141,-2.3739 1.8018,-1.5827 2.7026,-3.7862 2.7027,-6.6106 -1e-4,-2.8244 -0.9009,-5.0279 -2.7027,-6.6106 -1.7775,-1.5826 -4.2488,-2.374 -7.4141,-2.374 -3.1897,0 -5.6732,0.7914 -7.4506,2.374 -1.7531,1.5827 -2.6297,3.7862 -2.6296,6.6106"
+         style="font-size:74.79834747px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+         id="path3660"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       transform="matrix(0.23143297,0,0,0.23143297,969.27692,566.25391)"
+       id="09">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3567"
+         d="m 2286.5938,1087.875 c -14.9887,1.0257 -24.7315,18.0548 -20.4063,31.9375 2.4825,10.8425 13.904,18.0445 24.7187,17.1875 -6.8178,3.8694 -13.673,-1.566 -19.7812,-4.0312 -4.7974,0.088 -1.8396,5.3924 -2.0312,8.125 -0.9432,5.0988 -0.4374,12.5024 5.9374,13.5312 14.9007,6.0512 34.5156,-2.1867 38,-18.5625 4.2953,-14.0928 2.888,-31.5143 -7.5624,-42.5313 -5.1553,-4.6235 -12.0868,-6.2491 -18.875,-5.6562 z m 3.1874,17.7812 c 6.5421,0.5339 6.5201,12.455 0.3438,13.5313 -7.0521,0.6189 -7.2159,-13.7981 -0.3438,-13.5313 z"
+         style="font-size:74.79834747px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#f4e3d7;fill-opacity:1;stroke:none;font-family:Sans" />
+      <path
+         d="m 2275.0374,1148.2316 0,-6.7202 c 1.8505,0.8766 3.7253,1.5461 5.6245,2.0087 1.8991,0.4627 3.7618,0.694 5.5879,0.694 4.8697,0 8.5828,-1.6314 11.1394,-4.8941 2.5809,-3.287 4.054,-8.2662 4.4193,-14.9377 -1.4123,2.094 -3.2019,3.701 -5.3689,4.821 -2.167,1.12 -4.5653,1.68 -7.1949,1.68 -5.4541,0 -9.7759,-1.6435 -12.9655,-4.9305 -3.1653,-3.3114 -4.748,-7.828 -4.748,-13.5499 0,-5.6001 1.6557,-10.0924 4.9671,-13.4769 3.3114,-3.3844 7.7184,-5.0766 13.2212,-5.0766 6.3062,0 11.115,2.4227 14.4264,7.268 3.3357,4.821 5.0036,11.8333 5.0036,21.037 0,8.595 -2.0453,15.4613 -6.1358,20.5988 -4.0662,5.1131 -9.5446,7.6697 -16.4352,7.6697 -1.8505,0 -3.7253,-0.1826 -5.6244,-0.5478 -1.8992,-0.3652 -3.8715,-0.9131 -5.9167,-1.6435 m 14.6821,-23.1189 c 3.3113,1e-4 5.9288,-1.1321 7.8523,-3.3966 1.9479,-2.2643 2.9218,-5.3688 2.9219,-9.3132 -1e-4,-3.9201 -0.974,-7.0123 -2.9219,-9.2768 -1.9235,-2.2887 -4.541,-3.4331 -7.8523,-3.4331 -3.3114,0 -5.941,1.1444 -7.8889,3.4331 -1.9235,2.2645 -2.8853,5.3567 -2.8853,9.2768 0,3.9444 0.9618,7.0489 2.8853,9.3132 1.9479,2.2645 4.5775,3.3967 7.8889,3.3966"
+         style="font-size:74.79834747px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+         id="path3662"
+         inkscape:connector-curvature="0" />
+    </g>
+    <path
+       sodipodi:type="arc"
+       style="fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:0.625;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="path3587"
+       sodipodi:cx="59.5"
+       sodipodi:cy="226.06699"
+       sodipodi:rx="5.25"
+       sodipodi:ry="5.25"
+       d="m 64.75,226.06699 a 5.25,5.25 0 1 1 -10.5,0 5.25,5.25 0 1 1 10.5,0 z"
+       transform="translate(1197.6486,499.99212)" />
+    <g
+       id="0bush"
+       inkscape:label="#g4395"
+       transform="matrix(1.2299966,0,0,1.2299966,-280.64375,-155.00257)">
+      <path
+         id="path3585"
+         transform="translate(1216.2708,585.16711)"
+         d="m 24.34375,94.71875 c -1.812184,0 -3.400287,0.915991 -4.34375,2.3125 -0.36034,-0.07817 -0.741256,-0.09375 -1.125,-0.09375 -0.934291,0 -1.802484,0.259672 -2.5625,0.6875 -0.93487,-0.857464 -2.163597,-1.40625 -3.53125,-1.40625 -2.8995,0 -5.25,2.3505 -5.25,5.25 0,1.37869 0.5370576,2.62573 1.40625,3.5625 -0.2438294,0.43892 -0.40625,0.89675 -0.40625,1.375 0,0.23386 0.064633,0.46163 0.125,0.6875 l 20.15625,0 c 0.05998,-0.22587 0.125,-0.45364 0.125,-0.6875 0,-0.88565 -0.436106,-1.71127 -1.21875,-2.4375 1.141786,-0.96305 1.875,-2.38937 1.875,-4 0,-2.8995 -2.350505,-5.25 -5.25,-5.25 z"
+         style="fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:0.625;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3581"
+         transform="translate(1216.2708,585.16711)"
+         d="m 19.9375,96.125 c -2.8995,0 -5.25,2.3505 -5.25,5.25 0,0.77506 0.16725,1.52531 0.46875,2.1875 -0.3005,0.66134 -0.46875,1.38248 -0.46875,2.15625 0,0.47703 0.06828,0.93571 0.1875,1.375 l 10.125,0 c 0.117938,-0.43709 0.1875,-0.90063 0.1875,-1.375 0,-0.77451 -0.16765,-1.49442 -0.46875,-2.15625 0.3021,-0.66274 0.46875,-1.41162 0.46875,-2.1875 0,-2.8995 -2.3505,-5.25 -5.25,-5.25 z"
+         style="fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:0.625;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         inkscape:connector-curvature="0" />
+      <path
+         transform="translate(1216.2708,585.16711)"
+         id="path3573"
+         d="m 9.5,100.8125 c -2.899495,0 -5.25,2.3505 -5.25,5.25 0,0.36887 0.1463751,0.68386 0.21875,1.03125 l 15.53125,0 c -0.171291,-2.74481 -2.399519,-4.9375 -5.1875,-4.9375 -0.543656,0 -1.06932,0.0654 -1.5625,0.21875 -0.95242,-0.96851 -2.284341,-1.5625 -3.75,-1.5625 z"
+         style="fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:0.625;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3583"
+         transform="translate(1216.2708,585.16711)"
+         d="m 28.0625,99.9375 c -2.8995,0 -5.25,2.3505 -5.25,5.25 0,0.67776 0.14115,1.31149 0.375,1.90625 l 9.75,0 c 0.233857,-0.59476 0.375,-1.22849 0.375,-1.90625 0,-2.8995 -2.3506,-5.25 -5.25,-5.25 z"
+         style="fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:0.625;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         inkscape:connector-curvature="0" />
+      <path
+         sodipodi:type="arc"
+         style="opacity:0;fill:#008000;fill-opacity:1;stroke:none"
+         id="path4393"
+         sodipodi:cx="59.5"
+         sodipodi:cy="226.06699"
+         sodipodi:rx="5.25"
+         sodipodi:ry="5.25"
+         d="m 64.75,226.06699 c 0,2.89949 -2.350505,5.25 -5.25,5.25 -2.899495,0 -5.25,-2.35051 -5.25,-5.25 0,-2.8995 2.350505,-5.25 5.25,-5.25 2.899495,0 5.25,2.3505 5.25,5.25 z"
+         transform="matrix(0.96728498,0,0,2.4825138,1176.7025,130.81517)" />
+    </g>
   </g>
 </svg>
diff --git a/examples/mnit_dino/assets/images/0.png b/examples/mnit_dino/assets/images/0.png
new file mode 100644 (file)
index 0000000..1c71a2c
Binary files /dev/null and b/examples/mnit_dino/assets/images/0.png differ
diff --git a/examples/mnit_dino/assets/images/1.png b/examples/mnit_dino/assets/images/1.png
new file mode 100644 (file)
index 0000000..ace37b6
Binary files /dev/null and b/examples/mnit_dino/assets/images/1.png differ
diff --git a/examples/mnit_dino/assets/images/2.png b/examples/mnit_dino/assets/images/2.png
new file mode 100644 (file)
index 0000000..73447e6
Binary files /dev/null and b/examples/mnit_dino/assets/images/2.png differ
diff --git a/examples/mnit_dino/assets/images/3.png b/examples/mnit_dino/assets/images/3.png
new file mode 100644 (file)
index 0000000..b17f046
Binary files /dev/null and b/examples/mnit_dino/assets/images/3.png differ
diff --git a/examples/mnit_dino/assets/images/4.png b/examples/mnit_dino/assets/images/4.png
new file mode 100644 (file)
index 0000000..6286125
Binary files /dev/null and b/examples/mnit_dino/assets/images/4.png differ
diff --git a/examples/mnit_dino/assets/images/5.png b/examples/mnit_dino/assets/images/5.png
new file mode 100644 (file)
index 0000000..b1969b8
Binary files /dev/null and b/examples/mnit_dino/assets/images/5.png differ
diff --git a/examples/mnit_dino/assets/images/6.png b/examples/mnit_dino/assets/images/6.png
new file mode 100644 (file)
index 0000000..5dc8b4d
Binary files /dev/null and b/examples/mnit_dino/assets/images/6.png differ
diff --git a/examples/mnit_dino/assets/images/7.png b/examples/mnit_dino/assets/images/7.png
new file mode 100644 (file)
index 0000000..175c014
Binary files /dev/null and b/examples/mnit_dino/assets/images/7.png differ
diff --git a/examples/mnit_dino/assets/images/8.png b/examples/mnit_dino/assets/images/8.png
new file mode 100644 (file)
index 0000000..f40379d
Binary files /dev/null and b/examples/mnit_dino/assets/images/8.png differ
diff --git a/examples/mnit_dino/assets/images/9.png b/examples/mnit_dino/assets/images/9.png
new file mode 100644 (file)
index 0000000..d794791
Binary files /dev/null and b/examples/mnit_dino/assets/images/9.png differ
diff --git a/examples/mnit_dino/assets/images/bush.png b/examples/mnit_dino/assets/images/bush.png
new file mode 100644 (file)
index 0000000..205d906
Binary files /dev/null and b/examples/mnit_dino/assets/images/bush.png differ
index 6333b3e..d3e930f 100644 (file)
@@ -33,6 +33,7 @@ class DinoApp
        var target_dt = 12000000
 
        var game : nullable Game = null
+       var score = new Container[Int](0)
        var imgs : nullable ImageSet = null
        var splash : nullable SplashScreen = null
 
@@ -83,12 +84,17 @@ class DinoApp
                else if input_event isa PointerEvent then
                        if game == null then
                                # start from splash
-                               game = new Game( cavemen_at_first_level )
+                               game = new Game( cavemen_at_first_level, score )
                        else if game.over and game.ready_to_start_over then
                                # play next game
                                var next_nbr_caveman = game.nbr_wanted_cavemen
-                               if game.won then next_nbr_caveman += cavemen_incr
-                               game = new Game( next_nbr_caveman )
+                               if game.won then
+                                       next_nbr_caveman += cavemen_incr
+                               else
+                                       score = new Container[Int](0)
+                                       next_nbr_caveman = cavemen_at_first_level
+                               end
+                               game = new Game( next_nbr_caveman, score )
                        else
                                # normal play
                                game.dino.going_to = (new ScreenPos( input_event.x, input_event.y )).to_game( display.as(not null) )
index ecf1ea7..f2a7260 100644 (file)
@@ -28,4 +28,8 @@ redef class SplashScreen
        redef fun splash_play_path do return "images/splash_play_mobile.png"
 end
 
+redef class Display
+       redef fun top_offset do return 92
+end
+
 super
index 74b8673..08f790a 100644 (file)
@@ -28,12 +28,14 @@ class Game
        var dino = new Dino
        var cavemen = new Array[Caveman]
        var javelins_in_air = new Array[Javelin]
-       var javelins_on_ground = new Array[Javelin]
+       var items_on_ground = new Array[Entity]
        var entities = new Array[Entity].with_items(dino)
        var turn_nbr = 0
 
        var over_since = 0
 
+       var score: Container[Int]
+
        var random_radius_min = 200
        var random_radius_max = 400
        protected var random_radius_diff : Int =
@@ -41,9 +43,11 @@ class Game
 
        var entities_sorter = new EntitiesSorter
 
-       init( cavemen_nbr : Int )
+       init( cavemen_nbr : Int, score: Container[Int] )
        do
-               srand
+               srand_from(cavemen_nbr)
+
+               self.score = score
 
                nbr_wanted_cavemen = cavemen_nbr
 
@@ -57,6 +61,13 @@ class Game
                        man.pos.x = ( angle.cos * radius ).to_i
                        man.pos.y = ( angle.sin * radius ).to_i
                end
+
+               for b in 24.times do
+                       var bush = new Bush
+                       bush.pos = new GamePos([-300..300[.rand, [-400..400[.rand)
+                       items_on_ground.add bush
+                       entities.add bush
+               end
        end
 
        fun do_turn : Turn
@@ -69,6 +80,7 @@ class Game
                        man.do_turn( turn )
                        if not man.is_alive then
                                cavemen.remove( man )
+                               score.item += 1
                        end
                end
 
@@ -79,7 +91,7 @@ class Game
                                entities.remove( j )
                        else if j.hit_ground then
                                javelins_in_air.remove( j )
-                               javelins_on_ground.add( j )
+                               items_on_ground.add( j )
                        end
                end
 
@@ -147,6 +159,7 @@ end
 class Entity
        super Turnable
 
+       fun run_over_distance: Int do return 500
        var pos = new GamePos( 0, 0 )
 
        fun squared_dist_with_dino( game : Game ) : Int
@@ -218,6 +231,14 @@ class Dino
                if is_alive then
                        super
                end
+
+               for i in t.game.items_on_ground do
+                       var dwd = i.squared_dist_with_dino(t.game)
+                       if dwd < i.run_over_distance then
+                               t.game.items_on_ground.remove i
+                               t.game.entities.remove i
+                       end
+               end
        end
 end
 
@@ -231,14 +252,18 @@ class Caveman
        var throw_distance : Int = 400*40+10.rand
        var fear_distance : Int = 300*20+8.rand
        var flee_distance : Int = 600*60+16.rand
-       var run_over_distance = 500
 
        var fear_duration : Int = 80+40.rand
        var throw_period : Int = 40+8.rand
 
+       var variance_angle: Float = 2.0*pi.rand
+       var variance_dist: Int = throw_distance.to_f.sqrt.to_i-4
+       var variance_x: Int = (variance_angle.cos*variance_dist.to_f).to_i
+       var variance_y: Int = (variance_angle.sin*variance_dist.to_f).to_i
+
        redef var is_alive : Bool = true
 
-       redef fun speed do return 4
+       redef var speed: Int = 3+3.rand
 
        fun is_afraid( turn : Turn ) : Bool do return turn.nbr < afraid_until
        fun can_throw( turn : Turn ) : Bool do return cannot_throw_until < turn.nbr
@@ -249,7 +274,7 @@ class Caveman
                        var dwd = squared_dist_with_dino( t.game )
 
                        if dwd < run_over_distance then
-                               is_alive = false
+                               if t.game.dino.is_alive then is_alive = false
                                return
                        else if is_afraid( t ) then
                                # going to destination
@@ -264,6 +289,7 @@ class Caveman
                                        var dy = dino_pos.y - pos.y
                                        var a = atan2( dy.to_f, dx.to_f )
                                        a += pi # get opposite
+                                       a += [-100..100[.rand.to_f*pi/3.0/100.0
                                        var x = a.cos*flee_distance.to_f
                                        var y = a.sin*flee_distance.to_f
                                        going_to = new GamePos( x.to_i, y.to_i )
@@ -276,7 +302,8 @@ class Caveman
                                        end
                                else
                                        # get closer to dino
-                                       going_to = t.game.dino.pos
+                                       var dino_pos = t.game.dino.pos
+                                       going_to = new GamePos(dino_pos.x+variance_x, dino_pos.y+variance_y)
                                end
                        end
 
@@ -320,6 +347,12 @@ class Javelin
                else
                        if z <= 0 then
                                hit_ground = true
+                               if thrown_angle_xy.cos > 0.0 then
+                                       angle = pi*5.0/8.0+(pi/4.0).rand
+                               else
+                                       # left of the screen
+                                       angle = pi*9.0/8.0+(pi/4.0).rand
+                               end
                        else
                                # in the air
                                speed_z += gravity
@@ -339,6 +372,8 @@ class Javelin
        end
 end
 
+class Bush super Entity end
+
 # Sort entities on screen in order of Y, entities in the back are drawn first
 class EntitiesSorter
        super AbstractSorter[Entity]
index 466df20..6afc592 100644 (file)
@@ -90,6 +90,15 @@ redef class Javelin
        end
 end
 
+redef class Bush
+       redef fun draw( display, imgs, turn )
+       do
+               var spos = pos.to_screen( display )
+               var img = imgs.bush_img
+               display.blit_centered( img, spos.x.to_i, spos.y.to_i )
+       end
+end
+
 class ImageSet
        var javelin_img : Image
 
@@ -100,6 +109,7 @@ class ImageSet
        var caveman_afraid_img : Image
        var caveman_ready_img : Image
        var blood_img : Image
+       var bush_img : Image
 
        var life_img : Image
        var life_empty_img : Image
@@ -109,6 +119,8 @@ class ImageSet
        var start_over_img : Image
        fun start_over_path : String is abstract
 
+       var numbers: NumberImages
+
        init ( app : App )
        do
                javelin_img = app.load_image( "images/javelin.png" )
@@ -120,6 +132,7 @@ class ImageSet
                caveman_afraid_img = app.load_image( "images/caveman_afraid.png" )
                caveman_ready_img = app.load_image( "images/caveman_ready.png" )
                blood_img = app.load_image( "images/blood.png" )
+               bush_img = app.load_image( "images/bush.png" )
 
                life_img = app.load_image( "images/life.png" )
                life_empty_img = app.load_image( "images/life_empty.png" )
@@ -127,14 +140,15 @@ class ImageSet
                you_won_img = app.load_image( "images/you_won.png" )
                you_lost_img = app.load_image( "images/you_lost.png" )
                start_over_img = app.load_image( start_over_path )
+
+               numbers = app.load_numbers("images/#.png")
        end
 end
 
-
 redef class Game
        fun draw( display : Display, imgs : ImageSet, turn : Turn )
        do
-               display.clear( 0.0, 0.5, 0.1 )
+               display.clear(0.05, 0.45, 0.1)
 
                # entities (dino, cavemen and javelins)
                for e in entities do
@@ -148,13 +162,16 @@ redef class Game
                end
 
                for life in [0..life_out_of_ten[ do
-                       display.blit_centered( imgs.life_img, display.width*(life+1)/11, 20 )
+                       display.blit_centered( imgs.life_img, display.width*(life+1)/11, display.top_offset )
                end
 
                for empty in [life_out_of_ten..10[ do
-                       display.blit_centered( imgs.life_empty_img, display.width*(empty+1)/11, 20 )
+                       display.blit_centered( imgs.life_empty_img, display.width*(empty+1)/11, display.top_offset )
                end
 
+               # display score
+               display.blit_number(imgs.numbers, score.item,  display.width/11, display.top_offset+32)
+
                # game over messages
                if over then
                        var concl_img : Image
@@ -163,11 +180,15 @@ redef class Game
                        else
                                concl_img = imgs.you_lost_img
                        end
-                       display.blit_centered( concl_img, display.width/2, 80 )
+                       display.blit_centered( concl_img, display.width/2, 60+display.top_offset )
 
                        if ready_to_start_over then
-                               display.blit_centered( imgs.start_over_img, display.width/2, 120 )
+                               display.blit_centered( imgs.start_over_img, display.width/2, 100+display.top_offset )
                        end
                end
        end
 end
+
+redef interface Display
+       fun top_offset: Int do return 48
+end
index f9927de..49936de 100644 (file)
@@ -42,9 +42,9 @@ class SplashScreen
 
                display.clear( 0.0, 0.5, 0.1 )
 
-               display.blit_centered( splash_head, dc, display.height/2+64 )
-               display.blit_centered( splash_title, dc, 32 )
-               display.blit_centered( splash_text, dc, 128 )
+               display.blit_centered(splash_head, dc, display.height/2+64+display.top_offset)
+               display.blit_centered(splash_title, dc, 32+display.top_offset)
+               display.blit_centered(splash_text, dc, 128+display.top_offset)
 
                if ready then display.blit_centered( splash_play, dc, display.height-64 )
 
index e08226c..d5356fb 100644 (file)
@@ -8,5 +8,12 @@ android:
        mkdir -p bin
        ../../bin/nitg -o bin/moles.apk src/moles_android.nit
 
+android-install: android
+       adb install -rf bin/moles.apk
+
+pngs:
+       mkdir -p assets/images
+       ../mnit_dino/tools/svg-to-pngs art/drawing.svg assets/images
+
 clean:
        rm -rf bin
diff --git a/examples/mnit_moles/art/drawing.svg b/examples/mnit_moles/art/drawing.svg
new file mode 100644 (file)
index 0000000..f63fd06
--- /dev/null
@@ -0,0 +1,1942 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="980.68469"
+   height="1141.1479"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="drawing.svg">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.260189"
+     inkscape:cx="392.19731"
+     inkscape:cy="868.40226"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1838"
+     inkscape:window-height="1274"
+     inkscape:window-x="2783"
+     inkscape:window-y="1201"
+     inkscape:window-maximized="0"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(154.42237,306.56642)">
+    <g
+       id="0empty"
+       inkscape:label="#g4008">
+      <g
+         id="0empty-back"
+         inkscape:label="#g3188">
+        <g
+           id="g3975"
+           inkscape:label="#g3777"
+           transform="matrix(1.3901274,0,0,1.3901274,341.58474,-368.60908)"
+           inkscape:tile-x0="522.758"
+           inkscape:tile-y0="204.64342">
+          <path
+             d="m 342.85714,452.36218 c 0,15.77957 -38.37559,28.57143 -85.71429,28.57143 -47.33869,0 -85.71428,-12.79186 -85.71428,-28.57143 0,-15.77956 38.37559,-28.57143 85.71428,-28.57143 47.3387,0 85.71429,12.79187 85.71429,28.57143 z"
+             sodipodi:ry="28.571428"
+             sodipodi:rx="85.714287"
+             sodipodi:cy="452.36218"
+             sodipodi:cx="257.14285"
+             id="path3978"
+             style="fill:#000000;stroke:none"
+             sodipodi:type="arc" />
+        </g>
+        <path
+           style="fill:#0f7f0f;fill-opacity:1;stroke:#000000;stroke-width:1.20354867;stroke-opacity:1"
+           d="m 816.15407,245.31557 c 2.12049,3.00831 -3.02081,6.62413 -6.74718,6.62413 -3.72637,0 -6.68204,-2.96628 -6.74719,-6.62413 -0.33279,-18.6873 11.85252,-38.28079 11.94415,-34.14247 -1.38307,3.98264 -1.20162,30.23846 1.55022,34.14247 z"
+           id="path3980"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="ssscs" />
+        <path
+           sodipodi:nodetypes="ssscs"
+           inkscape:connector-curvature="0"
+           id="path3988"
+           d="m 824.15936,256.45695 c -0.926,3.84038 -3.77529,7.88891 -7.12854,9.09243 -4.2889,1.53933 -11.52105,-5.07752 -8.25076,-8.25076 7.77989,-7.54905 14.10324,-46.01662 12.54315,-45.41659 -1.50356,-6.61644 7.51615,25.16565 2.83615,44.57492 z"
+           style="fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:1.48536134;stroke-opacity:1" />
+        <path
+           sodipodi:nodetypes="ssscs"
+           inkscape:connector-curvature="0"
+           id="path4000"
+           d="m 755.40989,218.13873 c -0.58476,4.11763 -3.3715,7.53046 -7.53047,7.53046 -4.15897,0 -9.20305,-3.72266 -7.53047,-7.53046 9.33151,-21.24414 13.95259,-43.51848 13.33075,-38.81395 1.93615,0.86569 2.55003,33.04096 1.73019,38.81395 z"
+           style="fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:1.35568762;stroke-opacity:1" />
+        <path
+           style="fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:1.31436789;stroke-opacity:1"
+           d="m 735.59779,221.67786 c 0.60714,3.72781 3.02347,3.44463 7.25751,4.29255 4.98344,0.998 10.94357,0.39565 8.37973,-4.29255 -10.33291,-18.8946 -14.48648,-39.39857 -13.84084,-35.13942 -2.01024,0.78373 -2.64761,29.91296 -1.7964,35.13942 z"
+           id="path4002"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="ssscs" />
+        <path
+           sodipodi:nodetypes="ssscs"
+           inkscape:connector-curvature="0"
+           id="path4004"
+           d="m 739.88521,220.64862 c 0.0929,3.46026 -1.65994,3.9548 -5.8189,3.9548 -4.15897,0 -8.81789,-1.33135 -7.53047,-5.28602 7.10263,-21.81771 -2.457,-31.55331 -2.37835,-31.37838 3.48877,2.69066 15.08567,8.80156 15.72772,32.7096 z"
+           style="fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:1.35568762;stroke-opacity:1" />
+        <path
+           style="fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:1.35568762;stroke-opacity:1"
+           d="m 766.09351,223.61041 c 1.24208,6.70972 -3.89392,5.61504 -7.81102,4.16379 -3.89992,-1.44488 -6.92082,-0.0179 -7.24991,-4.16379 -0.0892,-1.12413 12.06056,-29.75665 13.33075,-36.3417 1.52292,-1.86845 0.30937,28.66644 1.73018,36.3417 z"
+           id="path4006"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="ssscs" />
+      </g>
+      <g
+         inkscape:label="#g3188"
+         id="0empty-front">
+        <path
+           sodipodi:nodetypes="ssscs"
+           inkscape:connector-curvature="0"
+           id="path3965"
+           d="m 586.18291,255.21982 c 2.71739,3.92675 -3.87116,8.64649 -8.64649,8.64649 -4.77533,0 -8.56301,-3.87191 -8.64649,-8.64649 -0.42646,-24.39254 15.18895,-49.96795 15.30638,-44.5662 -1.77239,5.19853 -1.53988,39.4703 1.9866,44.5662 z"
+           style="fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:1.55660164;stroke-opacity:1" />
+        <path
+           sodipodi:nodetypes="ssscs"
+           inkscape:connector-curvature="0"
+           id="path3969"
+           d="m 579.63218,260.67875 c 1.60056,3.72053 -4.43095,8.87397 -9.20627,6.27631 -4.19485,-2.28189 -4.91164,-3.18531 -6.12149,-7.80482 -1.82387,-6.96397 -0.58253,-29.65657 2.42332,-34.74015 -0.36976,6.57837 10.12007,29.79635 12.90444,36.26866 z"
+           style="fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:1.55660164;stroke-opacity:1" />
+        <path
+           style="fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:1.55660164;stroke-opacity:1"
+           d="m 594.2621,265.04587 c -1.1157,6.92776 -2.22147,13.64253 -9.83678,8.84487 -4.04036,-2.54543 -9.70306,-4.63119 -7.45619,-8.84487 1.5916,-2.98478 17.18913,-37.50779 15.30638,-41.72757 2.83698,-2.22907 3.6138,31.62371 1.98659,41.72757 z"
+           id="path3963"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="ssscs" />
+        <path
+           style="fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:1.58057249;stroke-opacity:1"
+           d="m 817.02202,265.60669 c 0.63593,2.79633 -5.32422,11.70302 -8.49907,12.70742 -4.62304,1.46255 -10.45783,-8.06437 -9.0602,-12.70742 6.51456,-21.64174 7.58881,-24.43681 9.73071,-35.07673 1.57596,5.56511 6.77241,30.43259 7.82856,35.07673 z"
+           id="path3971"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="ssscs" />
+        <path
+           style="fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:1.33338177;stroke-opacity:1"
+           d="m 618.74376,284.54928 c 2.61086,2.99886 -3.71939,6.60332 -8.30751,6.60332 -4.58811,0 -8.2273,-2.95696 -8.30752,-6.60332 -0.40974,-18.62858 14.59349,-38.16052 14.70631,-34.0352 -1.70291,3.97013 -1.4795,30.14346 1.90872,34.0352 z"
+           id="path3973"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="ssscs" />
+        <path
+           style="fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:1.55660164;stroke-opacity:1"
+           d="m 625.71665,287.40463 c 3.31919,3.43315 -1.14262,9.28876 -10.61037,6.6826 -5.71544,-1.57327 -8.60104,-2.00841 -6.6826,-6.6826 8.45136,-20.59133 22.12398,-15.53273 30.61775,-9.34712 -18.28625,-0.074 -16.32787,6.24093 -13.32478,9.34712 z"
+           id="path3977"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="ssscs" />
+        <path
+           sodipodi:nodetypes="ssscs"
+           inkscape:connector-curvature="0"
+           id="path3975"
+           d="m 634.73915,293.20829 c 1.92217,4.37136 -3.02948,4.7187 -7.80481,4.7187 -4.77533,0 -7.27341,-1.66342 -6.6826,-6.40204 3.33658,-26.76132 7.73171,-27.26178 9.19239,-34.74014 -2.64888,9.68164 3.99345,33.46345 5.29502,36.42348 z"
+           style="fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:1.55660164;stroke-opacity:1" />
+        <path
+           sodipodi:nodetypes="ssscs"
+           inkscape:connector-curvature="0"
+           id="path3192"
+           d="m 810.90706,276.55264 c 0.13944,4.84683 -8.98078,7.93796 -13.82964,7.93796 -4.84886,0 -1.767,-3.50405 -3.72963,-7.93796 -3.31815,-7.49625 0.20181,-48.28125 4.28097,-46.16265 2.27865,12.8389 13.11935,40.63759 13.2783,46.16265 z"
+           style="fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:1.58057249;stroke-opacity:1" />
+      </g>
+    </g>
+    <g
+       id="0up"
+       inkscape:label="#g4948">
+      <path
+         inkscape:connector-curvature="0"
+         id="path4533"
+         d="m -127.26814,-98.063473 c -5.95186,1.40398 -0.2481,8.635395 0.83368,11.991316 2.24081,5.979379 7.51684,11.886198 8.3357,17.847385 -2.62353,2.574653 -3.85637,8.944892 1.49003,6.877037 7.90915,-3.992679 17.380548,-7.629391 25.750679,-2.559786 14.710026,7.405353 15.841258,31.458759 1.031556,39.199112 -11.072405,7.261846 -26.161435,9.565391 -37.670885,2.139523 -6.17665,-0.315109 -4.38976,8.690863 -5.66148,12.7164549 -0.94084,12.8917246 -4.49017,25.4374211 -8.62747,37.4859171 -0.18176,4.437309 5.04449,3.411524 7.56474,1.833876 -2.83088,2.430046 -3.70633,8.312205 1.49002,6.877038 2.63273,-1.267918 6.95152,-3.715862 7.71757,0.878732 4.75803,7.151288 9.39205,15.415322 17.30721,19.484939 4.29992,-3.203098 0.74888,-9.710755 5.08136,-13.180988 3.140909,-6.068884 10.191174,-8.427262 13.868696,-13.830486 -1.972725,-8.564326 -14.939736,-11.666071 -13.104576,-21.8154903 2.146821,-10.5535319 8.866365,-20.4278567 19.141087,-24.3370707 12.082813,-7.168232 31.492135,-6.969318 38.167556,7.2973006 3.843194,8.609366 1.612626,18.5334504 -2.712609,26.5147994 -2.783605,10.343211 8.396661,16.781267 13.295605,24.222453 1.906107,3.450684 5.739154,8.743875 9.818881,4.775721 5.096515,-3.360738 9.891148,-12.368924 16.9463895,-7.853504 4.8812293,4.089998 0.6420891,-5.684198 2.2711095,-5.671336 2.90321,1.707265 8.7438625,2.162091 6.4185681,-2.597992 C -3.0975928,23.888062 1.8254978,15.835082 0.37730995,8.6834277 -0.42578129,-4.2660885 -2.732688,-17.734836 -8.3718097,-29.369512 c -7.4160253,-3.251487 -14.9369123,3.717525 -22.3503713,4.355457 -15.75635,2.980893 -31.017553,-13.460617 -26.05633,-29.074585 3.216828,-12.382812 19.26194,-12.789614 29.416176,-9.903814 3.432063,0.871495 5.427186,-4.069299 9.133439,-4.805405 6.972875,-4.441368 17.94322288,-7.074191 20.5546998,-15.970008 -1.75343051,-5.640296 -9.2846238,-0.481955 -13.1045768,-0.420264 -6.880265,1.299852 -14.363154,5.152008 -21.089581,4.50828 -4.987141,-2.981198 -7.175629,-11.254574 -13.715868,-10.506584 -0.870688,2.601292 1.61029,6.458094 1.26079,8.137827 -6.070547,-1.486822 -10.619918,-7.335727 -16.886947,-7.832181 -2.431158,1.306637 -0.259836,5.412968 -3.018255,2.445168 -6.150003,-3.794229 -10.120077,6.368345 -16.581301,3.400313 -3.524846,-1.473446 -10.120175,-1.56256 -8.710914,3.858782 -1.754714,1.269067 -5.624231,-3.783287 -7.802204,-4.521679 -2.640293,-3.207585 -7.332647,-1.249763 -5.684427,2.917037 1.28382,2.439435 -0.43856,6.28516 -2.55979,2.483375 -6.81601,-5.755573 -11.84574,-17.051947 -21.70087,-17.76568 z"
+         style="fill:#a05a2c;fill-opacity:1;stroke:none" />
+      <path
+         id="path27595"
+         d="m -128.64355,-98.330913 c -4.51196,0.135817 2.29544,10.340448 8.40527,24.451688 5.59286,5.388846 -2.37336,14.95552 -8.67271,20.325466 -10.46414,8.364898 -3.24552,25.819515 -1.60464,30.220758 -2.36354,7.471054 -4.22953,37.686653 -12.95176,53.984742 -0.78364,2.15 10.54536,-2.411181 9.32221,-1.872082 -4.38782,1.933884 -6.95345,11.003259 -6.95345,11.003259 0,0 10.61434,-1.323447 11.80558,-4.928543 4.59647,7.445967 -8.51327,36.317065 -7.71756,45.655886 -3.35976,13.007662 1.3099,28.483219 -9.85709,39.581169 -4.19109,5.98004 -13.06696,16.24697 -0.38206,10.77403 1.26048,-1.07252 -11.87855,29.66016 4.50828,12.14943 -0.40913,17.26216 -0.84323,38.42636 -2.25414,55.66579 -0.82682,20.16164 0.76032,40.49146 6.38037,59.90664 13.78536,6.43183 29.36652,8.38891 44.242269,11.19429 23.399471,3.0414 55.390568,2.22068 78.933105,1.75746 10.0766998,-1.48473 17.6899774,-1.33326 30.526405,-3.66775 L 26.777492,265.77 c 0.01663,-12.87961 -1.904726,-26.43766 -0.611292,-39.8104 0.139301,-14.36637 2.377584,-28.40878 1.910288,-42.75225 0.409015,-12.59618 -2.488828,-26.25604 1.298996,-38.35858 -13.068926,-4.8777 13.24164,-12.57597 -1.528231,-10.96506 -13.558485,-0.9744 9.769513,-2.75969 -1.52823,-7.60295 C 22.158348,124.35941 18.803234,105.27744 13.90215,96.862328 9.1427877,86.602326 5.0309552,79.677033 -1.0363033,69.659825 -8.6725899,56.974619 -19.150957,42.346971 -9.8236286,37.032103 c 9.30368386,10.662306 7.9403433,2.249617 4.1644281,-4.164428 12.4187556,5.06073 7.7349981,0.373952 5.11957215,-7.411918 C 1.1734202,19.967625 0.04773787,11.342659 -0.15757072,7.0405799 -0.6866319,3.8952982 -0.45067311,0.36168692 -1.0363033,-3.3131817 -1.6219334,-6.9880381 -3.0312431,-11.050209 -3.5578836,-14.698499 -4.084524,-18.346801 -7.2911551,-29.39878 -10.129275,-29.675158 c -3.071217,-0.299081 -2.54992,0.485941 2.8654325,-9.322206 2.9583852,-5.358147 3.1762498,-12.077703 -7.8321815,-22.159342 -22.769277,-8.114232 2.009868,-3.652006 17.077976,-21.127787 6.8775752,-13.316499 -23.42907,2.522815 -31.901812,1.107967 -6.301456,1.936403 -21.16774,-24.636974 -13.945103,-2.52158 -0.356909,1.438456 -1.160013,1.876716 -2.215934,1.719259 2.665368,1.063649 4.703942,1.358634 3.935193,-0.649498 -7.85497,-20.518965 7.643292,5.366571 11.117877,3.9734 12.109332,-1.303532 26.8548245,-8.14756 32.2838695,-7.297301 -1.40701127,11.206967 -29.9253575,16.94837 -26.2473585,21.127787 -11.853653,-4.574031 -30.936423,-3.263579 -33.582866,11.232494 -3.292994,13.921202 5.799109,26.450014 17.345417,29.380231 13.730356,5.188 26.006057,-8.034164 32.1692516,-3.935193 6.639538,17.444152 9.98526249,35.9448613 6.6478027,54.252182 10.8172311,17.765142 -13.3910283,-7.980713 -1.6428478,14.594602 -11.9651765,-17.53021 -21.2021805,15.848031 -26.9732685,2.330551 -5.02904,-9.322401 -21.273824,-17.286561 -13.104576,-29.036379 6.819954,-12.4953264 3.013047,-30.465813 -11.652758,-35.07289 -12.760407,-5.364578 -27.197857,1.753491 -38.358585,9.704263 -6.141234,9.0486654 -14.650084,20.6160621 -5.23419,30.717433 4.023256,3.431245 9.27164,7.45285 9.054766,10.124527 -0.203744,2.509954 -5.184247,3.161347 -7.985005,6.456774 -2.106125,2.478118 -4.701045,5.001887 -6.494975,7.832182 -1.79394,2.830295 -2.82959,5.957825 -1.9867,9.704263 -1.40702,5.845005 -12.55493,-10.625151 -15.66437,-14.250749 -3.55558,-5.371987 0.37795,-10.417825 -15.20589,-2.101317 18.23377,-24.24188 -12.28037,6.274792 0.26744,-17.001564 2.48369,-8.538738 3.41974,-14.8286165 4.43187,-18.6444124 1.96387,-7.4038367 0.78006,-26.7642916 6.15113,-22.3503706 12.23027,9.621702 33.989775,3.003461 43.860212,-7.297301 12.885049,-15.422095 1.969388,-40.799341 -19.293912,-39.886816 -7.60565,-0.603431 -24.04382,13.81304 -13.52484,-0.764115 -2.75252,-6.593398 -13.88397,-23.602542 -12.64611,-28.004824 13.11205,-1.020822 25.64394,31.958111 27.62277,15.855391 -6.32012,-17.095618 16.101388,14.302184 12.493285,-3.629547 4.402465,0.100863 11.998101,3.346164 15.129482,0.229234 9.565977,-9.521805 10.21336,3.02718 13.945103,1.375408 -2.352619,-4.889335 -2.64412,-6.687757 -1.52823,-6.76242 1.115877,-0.0747 3.633802,1.593027 6.877037,3.705959 1.049442,0.683706 2.848989,1.698279 4.699309,2.636197 -5.596649,-3.767455 -13.37566,-12.743767 -12.837136,-3.51493 -9.705658,-7.653268 -10.034129,7.714006 -17.994914,-3.056461 -0.942906,0.835832 3.779118,4.531827 2.25414,5.195984 -1.524979,0.664169 -9.308795,-1.715677 -11.194289,-1.413613 -1.885506,0.302076 0.763675,5.713895 -1.26079,5.463424 -2.024465,-0.250459 -8.71754,-6.15103 -10.659407,-7.144478 -6.06574,-5.591954 2.636784,20.835063 -7.06807,4.393663 -6.60225,-7.513698 -11.59768,-10.995643 -15.62615,-13.219194 -2.39453,-1.114642 -4.04014,-1.635977 -5.08137,-1.604642 z m 82.562653,16.352066 c -0.978557,-0.390493 -2.021042,-0.889992 -3.056461,-1.413613 1.134851,0.759665 2.192962,1.284863 3.056461,1.413613 z"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path27591"
+         d="m -101.14264,-66.616866 c 1.08956,-0.06211 2.349344,-0.01284 4.049812,0.191029 15.178422,1.81956 19.678572,21.379309 15.244099,34.041334 -7.637607,10.370927 -21.372961,16.160439 -34.155951,15.014865 -14.42653,-3.613739 -22.37215,-19.145293 -13.56305,-33.468248 4.65885,-6.004625 14.62694,-12.54742 15.58796,-12.378667 l 7.83218,-2.597992 c 1.86724,-0.31259 3.18903,-0.698756 5.00495,-0.802321 z"
+         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path27589"
+         d="m -39.402127,-65.547105 c 11.331927,0.0037 24.842329,2.223319 30.1825529,13.639458 6.8810351,13.571286 -6.8435019,25.677805 -19.4467329,27.04968 -12.991634,1.600375 -31.124419,-7.354335 -28.195853,-22.732429 0.417708,-8.648684 5.241708,-18.456403 15.244099,-17.918503 0.733074,-0.01736 1.460475,-0.03839 2.215934,-0.03814 z"
+         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="csccccccc"
+         inkscape:connector-curvature="0"
+         id="path27587"
+         d="m -127.04615,-46.2914 c -1.63223,3.339183 -1.0304,2.873733 -1.60464,6.380362 -0.57425,3.506641 2.15583,11.898558 3.74417,12.569696 9.02869,12.618281 24.70027,7.352219 37.976525,-4.011605 7.07435,-7.018111 0.429408,-32.404147 -11.2707,-31.366931 3.831139,16.637393 -3.102965,14.062899 -8.431845,17.856432 -4.81437,-4.438544 -11.45355,-10.741138 4.62952,-17.338093 -3.87571,-0.265252 -6.49544,-0.498766 -10.17642,1.564981 -7.3582,3.534211 -11.1141,6.675275 -14.86661,14.345158 z"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="cccccc"
+         inkscape:connector-curvature="0"
+         id="path27585"
+         d="m -31.653142,-57.675874 c -13.419869,-2.764691 -22.654281,18.225029 -9.513235,24.337071 14.629152,7.32531 33.781144,-9.885732 13.372017,-12.416873 3.757197,-6.208663 10.42406,-11.125005 -2.712609,-11.881992 -0.384197,-0.02482 -0.767698,-0.04878 -1.146173,-0.03815 z"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path27583"
+         d="m -64.923576,-21.037391 c 12.763084,0.824719 23.977081,15.349877 20.745729,28.0812352 -6.404851,10.7986238 -5.329172,20.0435128 3.782371,28.2340588 4.449302,4.029956 9.593118,7.396696 7.488329,16.963358 -1.009207,7.559276 -25.865044,14.088684 -35.684182,8.137828 -6.989967,0.58173 -15.353178,5.610256 -27.011474,2.25414 -18.017297,-5.901501 -9.782597,-20.518769 2.597992,-28.883557 13.865843,-5.640234 -12.279769,-16.270092 -8.634499,-26.4001817 1.06419,-11.5718102 10.157924,-20.2881283 21.013166,-24.4134823 4.940243,-2.118299 10.260894,-3.973301 15.702568,-3.973399 z"
+         style="fill:#9e6947;fill-opacity:1;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path27581"
+         d="m -73.214226,-11.868008 c -10.678896,0.329914 -19.960219,4.5031204 -14.059721,18.7590292 1.88871,7.2271368 9.521524,26.5881668 19.714174,21.0131698 7.164796,-4.092614 9.832048,-15.50127 13.486634,-24.1460424 4.784608,-14.1316326 -6.05606,-15.5407106 -14.747425,-15.5115396 -0.718684,-0.07727 -1.485733,-0.10392 -2.25414,-0.114556 -0.720383,-0.0098 -1.427599,-0.02201 -2.139522,0 z"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path27579"
+         d="m -72.335494,-9.7284855 c 7.958768,-0.2558747 16.263209,2.0212743 17.230799,6.1893335 -0.184879,8.2852711 -8.202502,31.322038 -16.237449,30.56461 -10.59466,-0.998717 -14.693423,-21.6710787 -16.122832,-27.89020662 -0.451635,-5.82404978 7.170715,-8.60786218 15.129482,-8.86373688 z"
+         style="fill:#ff8598;fill-opacity:1;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path27577"
+         d="m -77.378654,0.1286012 c -4.310307,0.20257001 1.107429,13.2332778 2.063111,1.9484939 l 0.191029,-0.3438519 -0.573087,-1.18437861 C -76.367345,0.25398946 -76.932766,0.1076461 -77.378654,0.1286012 z"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path27575"
+         d="m -66.222572,0.58707035 c -1.237659,-0.15226066 -2.571131,12.36680765 0.72591,6.03651045 l 0.191029,-2.25414 c -0.22866,-2.7164969 -0.570397,-3.73973893 -0.916939,-3.78237045 z"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path27571"
+         d="m -127.19897,34.284553 c 2.73931,0.537081 15.36955,24.102946 20.59291,22.006519 7.319855,9.807487 26.607982,12.875281 31.023076,7.832181 -8.146361,10.471106 -9.792424,30.633295 6.265745,29.112791 8.674873,1.7225 17.493533,4.089753 14.059721,-7.450123 -0.827005,-2.800183 -3.86822,-17.3824 -6.800626,-19.179293 -3.901768,-2.390886 7.610111,-0.570654 13.410223,-2.101317 7.358564,-3.165992 7.195936,-1.411388 13.180988,-6.074716 7.607825,-5.640247 -0.795034,-19.792065 7.75577,-10.124527 10.019275,-8.791458 12.552482,-10.698262 13.983309,-11.232494 2.235605,-0.83472 -2.833266,7.033197 -1.337202,9.742469 L 7.8966075,88.460324 c 3.2894125,5.956896 8.5910275,18.682256 11.9966095,26.896856 3.192486,7.70061 0.746791,10.64675 3.094667,11.07967 13.30964,2.45411 0.784263,4.88285 0.343852,5.19599 -3.924081,2.7901 5.755633,3.69723 7.526535,3.01825 -0.812163,0.67635 -21.0715847,17.48125 -30.56461027,19.17929 -9.57825193,4.98263 -19.56904073,6.53085 -17.99491373,-7.87038 -7.206047,-9.0651 -6.104682,-16.40454 5.04316,-14.70922 6.9258186,0.0279 35.358682,-4.92329 24.107836,-11.30891 -7.6681835,1.90569 8.49058,2.02158 -4.0880162,5.57804 -7.46374329,1.08164 -16.6834112,4.48378 -27.7373838,4.39367 -4.31829,1.22329 -50.280715,7.96751 -38.473203,9.09297 50.8494373,-2.53217 40.325052,0.81393 -2.941843,4.58469 1.561582,8.00203 35.903379,1.08473 38.58782,-0.26744 6.029101,5.66612 -27.220561,8.41544 -37.174207,11.88199 -7.525142,2.46392 34.130754,-1.89527 42.217367,-0.53488 -13.460923,6.57473 -44.887724,4.03954 -39.428346,6.18933 9.338955,3.94917 37.459912,4.94978 44.662536,-0.0381 12.25902484,-0.69515 37.632676,-16.88695 37.632676,-16.88695 0,0 0.11908,23.77844 -0.07641,34.80545 -0.35093,19.96806 0.679574,39.93588 -0.191028,59.83023 -0.521738,6.60956 1.337201,26.17094 1.337201,26.17094 -29.1934202,14.8881 -55.96215,18.25746 -90.206091,16.58295 -34.243929,-1.67448 -55.298425,-13.07765 -72.703285,-24.41519 0,0 -6.52383,-37.71768 -6.22754,-51.65419 0.44,-10.03552 0.68337,-21.75203 0.99335,-33.46825 0.30999,-11.71622 -0.46405,-22.22609 1.56644,-32.05463 0.30066,-1.45533 3.53725,-4.00521 2.98005,-0.42027 -0.78799,5.06979 7.10955,12.34647 10.39197,14.70922 6.89159,4.96074 15.55847,9.03512 21.50984,11.53814 12.191492,4.5406 29.290912,-1.38585 38.052942,-2.71261 5.565412,-4.96083 -88.399732,2.70458 -1.146172,-4.73751 3.555654,-4.5475 -35.71146,-0.67935 -36.4483,-2.71261 2.98036,-2.93365 32.855772,-0.6984 35.837007,-6.34216 -3.479353,-1.90818 -33.207707,-1.66271 -33.926717,-3.40031 -0.2758,-0.66652 31.674839,-0.89558 33.391837,-1.41361 -2.582722,-5.39551 -24.54859,-4.84589 -31.672577,-6.95345 -3.96685,-5.64094 -18.5298,-19.48494 -18.5298,-19.48494 0,0 -9.87892,-16.47556 -3.70596,-4.27905 5.93324,11.21142 20.42792,13.78995 17.11619,31.94002 0.89904,4.94325 -0.85459,14.65261 -0.72591,18.60621 -9.63223,-6.08156 -28.20253,-11.06737 -27.92842,-24.33707 -0.49371,-13.37336 -14.05974,10.29361 -13.41022,6.30395 -2.13128,-10.09071 11.26939,-21.66948 -2.94184,-14.82384 -6.8817,3.31495 15.42008,-15.13151 13.75407,-28.99817 -0.53033,-7.587886 1.59753,-19.865519 3.66775,-29.609467 1.97486,-10.236113 9.09471,-31.258219 6.80063,-36.983178 -0.0643,-1.005588 0.14356,-1.413932 0.53488,-1.337202 z"
+         style="fill:#784421;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         sodipodi:nodetypes="cccccscccsccssscccccccccccccccccczccsssscccccsccccccccscccc" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path27569"
+         d="m -71.800613,64.505311 c -0.801294,2.2526 2.871472,18.93952 2.024905,26.705828 -17.735677,5.519162 -11.677368,-27.253008 -2.024905,-26.705828 z"
+         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3168"
+         d="m -67.597979,64.543456 c 8.774916,0.198914 10.934917,20.727952 11.53814,27.546354 -2.895337,1.482005 -9.274158,1.422869 -11.881992,-0.878732 -0.279165,-7.145297 -4.652643,-27.012012 0.343852,-26.667622 z"
+         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1" />
+    </g>
+    <path
+       style="fill:#000000;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 463.97438,427.51208 c -1.21015,0.91859 -4.38505,0.87557 -8.69868,-5.99569 4.71496,9.31298 -1.91741,7.58156 -0.41561,8.19405 5.40941,2.2062 12.00553,11.30708 -1.47491,2.18489 2.14048,3.15367 8.18699,6.4286 5.4292,4.40866 -0.52302,-0.38309 -4.65635,3.788 -4.97565,4.72444 -0.32363,0.94915 -0.80654,-8.67612 -1.62354,-8.14388 -0.32354,-2.19962 1.5929,9.20232 -2.1986,11.76831 -1.11131,0.7521 -1.65129,-12.05045 -1.78805,-9.32979 -0.14108,2.80513 0.14256,9.82581 0.47122,11.24459 0.43707,1.8868 -0.63514,2.41826 -3.36375,1.39151 -0.23112,0.72784 0.92877,-10.2087 0.52038,-9.31399 -0.42372,0.92832 -0.65468,2.46141 -0.85237,4.09763 -0.19771,1.63623 -0.33039,3.3894 -0.46231,4.79939 -0.13193,1.41 -0.26312,2.47681 -0.45782,2.7403 -0.77881,1.05397 -2.04786,-10.73667 -2.35722,-7.88774 -0.41394,3.81211 2.14799,14.71154 2.67243,16.83206 0.65417,2.6451 -1.1532,-0.099 -4.96025,2.8315 -3.11422,6.0782 5.79818,-9.28409 9.26227,7.07559 -15.61235,-4.0249 -5.21992,-0.20869 -0.15383,1.55954 -1.54636,3.43663 -2.15153,-0.66243 -8.83227,2.96745 -1.01559,0.55179 6.47258,-1.87455 9.48894,2.18234 1.29503,1.74175 2.67625,3.52272 3.63834,5.26555 0.96207,1.74284 -0.13822,0.41871 -0.3117,1.35768 -0.2856,1.54615 -3.53365,-3.62278 -8.01713,-0.0702 9.02576,-1.33089 9.72745,10.03568 6.93332,8.6332 -2.71102,-1.36076 -6.78811,-2.37333 -8.46605,-1.50603 -4.77323,0.99047 -0.29028,0.12437 -5.8757,0.93535 -8.59353,-10.70676 -1.99706,-1.97058 -5.70171,0.0994 -6.02426,-4.48573 -2.47029,-0.27291 -9.80716,1.51137 -6.06793,-14.55809 1.18828,10.64791 -10.83687,0.86792 -14.62705,-4.09768 7.56648,6.51043 -7.76955,6.31685 -19.16231,6.59148 13.65997,-4.95034 4.74469,10.0508 5.55788,-3.98705 3.04794,-4.05368 11.61573,-2.83963 2.13431,10.35326 3.27119,-5.15859 7.70713,2.17011 3.23375,-2.88724 11.68591,-1.50369 15.07441,-4.92309 -0.88384,3.36099 -0.71538,2.14269 -0.57488,4.75326 1.636,-3.87926 0.61451,-3.58267 2.87502,-5.25512 2.66583,-1.9723 2.10385,-0.96507 5.37447,3.77363 -1.35768,-13.51716 5.73689,-0.52519 5.2954,9.43636 -0.0512,1.15761 -8.74911,-4.48719 -7.17252,-3.16415 1.57658,1.32306 5.44793,3.38258 6.77512,5.03899 1.32722,1.65641 2.14403,3.51296 1.6791,5.63662 -3.11586,-0.0168 -9.07841,-4.65728 -8.71909,-3.77159 0.3593,0.88568 1.9446,2.09819 3.73267,3.38878 1.78806,1.29059 3.77891,2.65927 4.94934,3.85728 1.1704,1.19801 1.5204,2.22534 0.0267,2.83326 -6.27133,0.54397 -12.97599,0.98332 -16.88355,1.55919 -3.60212,0.53087 -1.86646,6.03088 -1.32401,8.98925 0.61453,3.35156 -1.14214,5.2424 3.02118,7.38259 3.30936,1.70123 6.72986,3.68856 11.65499,3.42029 -1.97034,4.75817 1.54844,11.55961 0.82133,19.84487 0.75007,5.47623 0.59023,11.03116 0.81416,12.96104 -0.1813,3.11135 1.32301,7.68673 1.33853,12.33369 1.89598,3.27194 3.19246,5.91329 4.57437,8.26755 1.38189,2.35426 2.25394,3.92951 2.1212,3.99272 -0.53098,0.25284 -17.62026,-29.88311 -18.34704,-31.04552 -4.79681,0.65649 9.49682,37.9473 8.65907,37.50854 -0.84267,-0.44133 -13.24283,-38.66191 -14.8805,-34.26032 -0.49123,5.25872 10.38148,40.36799 8.9331,40.00615 -1.44837,-0.36183 -10.23945,-33.05903 -10.81985,-37.94649 -6.90045,9.85678 -3.38942,13.78426 -1.93504,21.67555 4.39304,12.32743 7.88707,19.92182 20.70489,26.06169 15.11848,2.14256 11.7674,2.30018 12.24117,4.31723 0.58935,3.30953 0.20836,4.38819 0.74903,7.41317 0.54069,3.02496 0.51786,6.38853 0.37912,9.76809 -0.13812,3.3796 -0.40832,6.78573 -0.42742,9.84782 0.40186,6.00648 0.17791,12.79887 0.48111,19.75361 0.30322,6.95474 0.17012,12.49772 1.07532,21.04138 0.75958,7.16916 0.70154,14.14217 0.86786,20.53524 0.1663,6.39306 -0.25962,12.14741 -1.83753,16.78485 -1.16072,1.62039 -3.28689,1.6918 -4.972,0.0137 -3.69626,-3.68103 -8.57793,-10.22552 -10.49372,-4.92973 -3.70023,-3.38771 -23.57319,-17.69719 -5.90765,4.82974 -2.56318,3.94978 -11.28705,21.72151 -16.15648,33.90754 -4.86943,12.18601 -5.32847,16.61536 15.78218,19.65287 24.10939,2.64926 47.77663,1.17415 75.04836,1.34519 8.68064,-0.97009 25.91908,-0.88331 33.34864,-0.92357 l 8.86029,-1.4893 c 1.24404,-0.20619 1.72191,-1.00296 1.66271,-2.18409 -1.38864,3.48191 -18.82608,2.12345 -20.82549,3.14975 -12.09601,0.0723 -22.97445,0.35557 -34.25807,0.73114 -23.18832,0.0201 -47.30485,1.76928 -70.37351,-2.4425 -15.69864,-3.37513 -11.26991,-10.99521 -6.00599,-22.86154 4.3484,-9.80247 7.26859,-17.7624 14.14383,-28.94698 -14.40527,-15.82288 -4.62906,-12.6411 4.29967,-3.02569 3.62283,1.20181 -0.58066,-8.21432 8.34103,1.66224 6.09809,7.81184 9.80496,2.41136 9.51251,-0.65791 2.2343,-20.54605 -1.15886,-41.35599 -1.43352,-61.24898 1.47901,-16.47493 -3.90151,-35.08892 6.61508,-42.27595 -2.92281,-4.1436 -19.9806,-1.64299 -25.72361,-7.34986 -10.51941,-4.19501 7.79918,-12.51552 13.02962,-15.61074 5.37022,-7.708 15.76172,0.76304 21.28544,0.35021 5.63797,5.76252 5.145,29.67788 4.77257,39.82558 -0.22146,3.72093 -0.37221,8.56892 -0.0652,13.84067 0.61228,10.50796 0.78539,22.7128 1.87101,30.90404 1.84572,18.15456 0.61519,40.22976 2.17014,58.37459 2.12898,-0.34081 -1.21841,-24.88025 -0.0622,-32.92884 -0.71254,-27.19588 -4.68142,-60.9216 -3.26925,-64.77041 0.35229,-2.97258 1.19575,-30.77241 4.99015,-45.36756 2.52137,-2.29143 9.26358,-3.47669 10.79271,-3.48577 5.46118,-0.0325 15.06047,11.8682 18.91347,16.9572 12.55944,8.23421 -19.06891,4.72776 -23.62062,10.04689 3.16608,-0.67682 5.08444,2.75394 6.51265,4.8357 1.42821,2.08176 1.87638,2.91468 2.19764,6.02878 0.32123,3.1141 0.65998,5.18071 0.40276,9.96032 -0.13031,2.42161 -0.14763,4.07233 -0.14763,4.07233 0,0 2.61986,35.38343 3.81685,52.921 2.50833,10.10646 0.8576,36.76521 18.32701,21.58713 -5.29858,12.38067 12.33799,3.37934 2.41264,9.76674 -5.31433,7.21967 5.30946,10.35407 11.66058,16.6209 6.39141,6.57924 12.68762,18.73079 18.63906,26.88146 0.35678,0.34975 0.61062,0.65051 0.79999,0.95252 -1.97057,-6.49294 -13.24647,-19.70221 -15.85395,-25.04807 -4.60933,-9.04728 -27.42715,-11.41417 -8.85216,-23.3675 -21.30231,4.38611 3.17886,-15.58607 -10.59167,-5.31639 -15.27033,12.16684 -13.39819,-11.50878 -15.4342,-22.00211 -2.50135,-24.39461 -3.70982,-51.01899 -4.7983,-75.51137 -10e-4,-2.17383 -1.30592,-3.35683 0.24957,-4.05583 1.55552,-0.69901 5.97058,-0.91399 8.178,-1.06675 2.20741,-0.15276 4.51443,-0.26456 6.46829,-0.79972 1.95387,-0.53513 3.55457,-1.49361 4.34937,-3.33974 16.36058,-4.22518 22.50943,-21.9345 22.49408,-37.18896 -0.68544,0.82066 -1.82259,2.6206 -3.10438,4.61091 -1.2818,1.99031 -2.70827,4.17097 -3.97237,5.75303 -1.26412,1.58207 -16.57076,21.34698 -17.20318,20.94293 -0.63242,-0.40402 13.40941,-20.977 14.02271,-24.94502 0.89562,-3.21086 4.62826,-18.2384 -4.38973,-2.82921 -2.23845,3.54557 -14.94162,22.80498 -15.31596,23.51553 -2.47128,4.69066 12.13778,-21.41858 12.01799,-23.78196 -0.11982,-2.36336 0.56933,-6.74259 0.0899,-9.13932 -0.47949,-2.39671 -14.94098,26.29168 -16.72617,25.809 1.40277,-1.35334 2.58212,-3.42817 3.59299,-6.03407 1.01089,-2.60589 1.85328,-5.74283 2.58212,-9.2204 0.72884,-3.47757 1.34411,-7.29575 1.90077,-11.26413 0.55666,-3.96839 -1.62186,-23.98714 -1.60728,-28.0953 0.0149,-4.22054 -0.6106,-11.18756 0.97191,-11.00486 2.15294,0.0175 3.71808,-0.13181 4.12807,-0.45439 2.54986,-0.93759 1.80282,-1.32006 3.21747,-2.26931 0.47614,-1.89069 1.98318,-9.73162 1.63777,-9.76748 -0.10362,-5.0503 -2.22526,-6.41114 -9.25481,-4.75822 -20.62769,-9.51133 21.89688,-20.99196 18.10888,-36.58076 -7.34959,-4.84705 12.05293,-8.07342 13.5513,-9.15462 0.64456,-0.46513 -23.48028,3.61837 -17.22612,-0.0418 2.05111,-1.92333 13.51906,-14.55148 8.30578,-10.54022 -13.12512,17.04815 -18.82289,1.93985 -13.35896,-9.07881 -3.21302,4.27609 -7.88031,23.17998 -10.94592,3.60914 -4.47509,7.77095 -13.04658,1.22742 -10.77007,-11.92596 -3.10564,12.46206 -10.3446,17.9167 -11.88756,10.84526 0.36713,3.29373 -16.51936,11.84654 -15.13128,6.76216 -4.90703,-7.2497 7.11053,2.55062 3.37682,-4.67189 -18.05764,-5.78977 -10.80677,-8.36163 2.53877,-4.74651 -5.17205,-3.56503 -24.41381,-3.35632 4.00418,-4.14753 -23.31639,-0.66553 -8.28108,-5.93151 4.55851,-3.7028 -4.94277,-2.47856 -20.78344,-3.48813 1.51282,-5.66547 -6.96765,0.62507 -7.15882,-6.72555 -0.96155,-12.32246 -10.03788,5.29731 -5.48553,-7.18157 -7.66306,1.15864 -12.86884,8.20303 -23.12432,12.93511 -17.00486,-8.12212 -2.37215,4.17867 -3.62152,5.25541 -3.83381,6.61353 -0.19657,1.25759 -2.7029,0.40517 -3.21988,-0.95137 -0.51701,-1.35654 0.82377,-2.75606 -0.46096,-4.20715 -1.24711,-1.40858 1.99975,-5.76963 2.04852,-5.69847 0,0 0.38115,-0.52346 -3.28765,2.43775 -2.15415,1.04009 -1.15036,-6.55188 -1.46901,-6.78522 -0.23071,-2.68864 -0.1137,1.00534 -0.85535,5.88678 z"
+       id="path27793"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 565.24799,789.17074 c 0.16709,0.55058 0.25662,1.05871 0.27893,1.50354 0.16922,-0.42435 0.0856,-0.92218 -0.27893,-1.50354 z"
+       id="path27791"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 460.61071,443.97223 c 0.7163,10e-4 1.62055,0.14575 2.76983,0.50265 5.35053,-0.96552 0.72038,9.09134 -1.59306,1.46052 -1.52236,5.29361 -6.19083,-1.97118 -1.17677,-1.96317 z"
+       id="path27789"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 460.87692,436.947 c 0.9049,0.0378 1.56802,1.04542 1.78595,3.78696 1.45085,-2.88021 1.68461,-4.65877 7.1874,-1.71487 4.25956,7.61461 -5.19539,-0.6316 0.90164,6.54023 -1.62536,2.17083 -4.40669,-0.993 -0.78613,6.65818 -5.02328,-2.78764 -6.01929,-4.14166 -2.48243,3.44874 -8.5813,-4.2519 -10.39826,8.81796 -12.58497,14.17686 -5.17595,11.07682 -17.46313,-38.54926 -4.46852,-13.10841 -2.37205,-10.07611 0.8242,-11.37838 1.98542,-14.26572 3.16719,-1.03316 6.47083,-5.60518 8.46164,-5.52197 z"
+       id="path27787"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 493.59191,440.04954 c 0.26982,0.0167 0.5625,0.0637 0.83642,0.11284 0.80363,1.38606 0.12921,3.04147 -0.64359,4.25514 -5.05012,8.19184 -14.64701,12.02904 -17.88699,17.38849 0.28358,-9.077 -2.60084,0.42865 -3.72871,3.96827 -4.40086,7.98391 -12.81817,9.95455 -11.18735,-3.92731 6.17492,-10.64621 0.0424,9.9949 6.63844,3.00329 1.05559,-9.06751 9.44475,-8.91043 12.29095,-17.97555 -0.99684,7.16295 5.31613,-7.33987 13.68083,-6.82511 z"
+       id="path27785"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 465.1357,457.7827 c -0.38622,-0.005 -0.43831,1.08974 1.00428,3.29412 0.10226,-2.18613 -0.61808,-3.28957 -1.00428,-3.29412 z"
+       id="path27783"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 490.88377,459.28263 c -0.34511,-0.015 -0.70202,0.24186 -0.0331,0.7634 0.71155,-0.46162 0.37822,-0.74842 0.0331,-0.7634 z"
+       id="path27781"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 462.57838,458.55127 c -0.75808,-0.20008 -1.99988,1.9401 0.0384,3.5199 0.68555,-2.44464 0.41642,-3.39988 -0.0384,-3.5199 z"
+       id="path27779"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 472.76808,459.03175 c 1.71537,4.07185 -2.3687,0.66326 0,0 z"
+       id="path27777"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 455.58337,458.47712 c -1.29264,-0.10111 -3.43839,2.15959 0.003,3.4419 1.25364,-2.45456 0.772,-3.38122 -0.003,-3.4419 z"
+       id="path27775"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 487.59805,461.85519 c -1.03158,-0.13629 -1.63681,9.72392 0.46473,0.74676 -0.15796,-0.51194 -0.31736,-0.72728 -0.46473,-0.74676 z"
+       id="path27773"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 473.72921,462.43874 c -0.34498,6.69366 -4.62639,0.39435 0,0 z"
+       id="path27771"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 456.42191,464.70866 c -1.27375,-0.14245 -3.26735,4.40308 0.66746,4.00612 0.34624,-2.90137 -0.0885,-3.94136 -0.66746,-4.00612 z"
+       id="path27769"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 462.60212,465.05338 c -0.64976,0.0155 -1.3335,1.43646 0.32716,3.0353 0.66483,-2.19639 0.17815,-3.04735 -0.32716,-3.0353 z"
+       id="path27767"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 483.28195,467.02171 c -0.78769,-0.16361 -3.36229,2.9191 -0.6968,2.83788 1.02968,-2.016 1.05484,-2.76352 0.6968,-2.83788 z"
+       id="path27765"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 458.94795,467.30402 c -0.56429,0.10587 -1.01589,1.50149 0.56778,2.77803 0.38919,-2.16744 -0.12889,-2.86041 -0.56778,-2.77803 z"
+       id="path27763"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 456.49223,472.78071 c -0.97234,0.10026 -2.40039,3.13378 0.58765,2.32002 0.20935,-1.79812 -0.14568,-2.36556 -0.58765,-2.32002 z"
+       id="path27761"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 471.85665,476.5069 c -0.6092,0.0921 -1.30566,0.60921 -0.28204,1.21151 1.41316,-0.97074 0.89123,-1.30361 0.28204,-1.21151 z"
+       id="path27759"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 452.06818,476.91001 c -1.42807,-0.0961 -3.62437,4.38199 0.58123,5.11139 0.70433,-3.74903 0.16679,-5.06103 -0.58123,-5.11139 z"
+       id="path27757"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 468.99763,481.5837 c -0.90357,-0.17057 -6.13606,3.29902 -1.06863,1.71274 1.20892,-1.18452 1.36981,-1.65589 1.06863,-1.71274 z"
+       id="path27755"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 478.77911,466.7877 c 0.68193,0.0616 1.40397,0.87556 2.09125,2.92066 l 0.12803,3.21786 c -6.13023,2.98835 -4.65473,-6.35854 -2.21928,-6.13852 z"
+       id="path27753"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 458.12943,468.53014 c 0.58399,0.0633 1.1915,0.86786 1.93527,2.99036 1.79575,12.51426 1.24668,4.33397 10.46901,7.26142 -4.76672,-11.16957 11.75376,-5.08968 7.96913,-0.34247 -8.29946,-9.37278 -1.45767,7.42539 -6.87844,5.17002 -9.98815,-5.46192 0.33349,1.4386 -2.25806,7.97099 -10.0266,-10.92869 5.27786,7.94735 -1.73154,13.46243 5.49445,-0.34858 8.55982,7.36703 13.9477,10.8159 2.50332,12.05743 0.68113,-4.07539 3.68948,3.98431 l 0.63252,3.04854 -1.3641,0.59091 c 1.40689,5.41716 -4.37285,9.79406 -8.05695,2.36547 2.40538,8.21132 -10.73323,3.6736 -12.30726,-0.15174 0.0449,12.48939 -4.81904,-10.82288 -3.90485,0.97778 -2.10822,8.88794 -2.98724,-5.52275 -3.08062,-6.55832 -2.58434,-9.03976 -4.06544,-31.21477 -4.02042,-33.36577 4.87971,-1.16602 -3.98547,-8.97285 -3.279,-15.34128 3.33177,4.49988 6.1525,-3.10482 8.23813,-2.87855 z"
+       id="path27751"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 464.17619,525.69628 c -0.001,-0.43484 -0.005,-0.8144 -0.0183,-1.33926 -0.19455,0.41675 -0.17154,0.87772 0.0183,1.33926 z"
+       id="path27749"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 467.6348,505.04289 c -1.14036,0.0724 -2.37482,0.48991 -3.76874,1.36609 1.68064,-0.18548 2.88797,-0.67309 3.76874,-1.36609 z"
+       id="path27747"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 506.15212,471.37926 c 13.88581,0.48027 29.3975,6.22679 32.91711,20.47307 3.90236,15.38628 -16.12988,17.80487 -21.45249,29.05043 -2.94568,13.97421 -1.086,-11.55173 -3.97808,-1.74057 4.54657,10.55704 -20.85815,12.63427 -11.02226,6.36688 -7.71445,-8.61665 2.90144,-23.35538 -7.59774,-25.83699 6.72055,6.663 -0.45884,4.38987 0.47038,9.42788 7.48264,15.66356 -8.2561,4.27573 -12.13966,-0.48865 2.98104,4.50231 -0.41056,2.55579 -5.44006,-0.65677 2.47051,-1.47534 1.01766,-2.36317 -3.57685,-6.57986 8.62212,-1.75471 -3.55025,-1.21019 -1.13417,-9.11251 10.88989,6.62131 -4.2232,-9.7306 7.9168,-12.35266 9.26206,3.7292 2.61473,-8.15482 11.16361,-2.57481 2.68201,-4.90133 9.17363,-2.52801 13.87341,-5.97544 z"
+       id="path27745"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 520.76978,475.57018 c -6.58396,0.62286 -2.32952,16.88784 -0.21716,3.24113 l 0.43795,-2.16078 z"
+       id="path27743"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 510.20673,475.76183 c -1.06422,-0.04 -3.08824,5.15606 0.51297,2.27853 0.10869,-1.66965 -0.15822,-2.26521 -0.51297,-2.27853 z"
+       id="path27741"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 464.55733,474.62188 c 5.11833,1.29872 -1.53163,3.05907 0,0 z"
+       id="path27739"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 459.36459,474.43473 c -1.53364,0.2081 -4.12281,3.92338 -0.0544,4.77786 1.52601,-3.75148 0.97459,-4.90272 0.0544,-4.77786 z"
+       id="path27737"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 503.51388,477.53641 c -1.0545,0.2073 -0.75192,2.60205 3.65803,4.70953 -1.2032,-3.72199 -2.83786,-4.87075 -3.65803,-4.70953 z"
+       id="path27735"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 529.10113,480.97969 c -0.93004,-0.2021 -2.44154,8.95195 0.54465,4.19198 0.006,-3.00369 -0.23465,-4.12462 -0.54465,-4.19198 z"
+       id="path27733"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 497.55959,479.91666 c -1.56687,-0.22914 -2.26794,4.44773 2.2623,4.26653 -0.66319,-3.06039 -1.55008,-4.16239 -2.2623,-4.26653 z"
+       id="path27731"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 508.93606,483.01086 c -1.32746,-0.32084 -4.79704,9.58504 -0.30483,6.14369 l 0.56408,-1.54343 c 0.40797,-3.24917 0.18277,-4.49334 -0.25925,-4.60026 z"
+       id="path27729"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 489.52763,483.46871 c -1.1035,-0.0672 -1.43906,1.04556 2.2556,3.53965 0.71933,-2.22519 -1.15209,-3.47242 -2.2556,-3.53965 z"
+       id="path27727"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 480.45488,483.6868 c -1.73262,0.19013 -2.15931,3.0738 3.95349,5.83136 -0.46899,-4.5112 -2.6059,-5.97925 -3.95349,-5.83136 z"
+       id="path27725"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 501.96119,485.99692 c 3.38311,3.53323 -3.90953,20.94843 4.19444,9.97194 0.82612,-2.49826 -1.80782,-8.53154 -4.19444,-9.97194 z"
+       id="path27723"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 459.16784,484.25432 c -1.4981,0.2116 -3.40743,3.87679 0.97446,3.98119 0.48891,-2.75691 0.0153,-3.83267 -0.66909,-3.96793 -0.0942,-0.0186 -0.20549,-0.0274 -0.30537,-0.0132 z"
+       id="path27721"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 517.8299,486.91511 c -1.45036,0.21677 -7.50398,13.82439 -0.27846,3.77384 0.7022,-2.8542 0.68474,-3.83453 0.27846,-3.77384 z"
+       id="path27719"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 462.28949,484.58101 c -0.66457,-0.011 -1.29532,1.13576 0.50303,2.50754 0.54714,-1.77437 0.0138,-2.49852 -0.50303,-2.50754 z"
+       id="path27717"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 495.87914,488.67756 c -0.83988,0.0571 -0.59996,1.23755 3.22482,4.1171 0.71618,-2.40796 -2.145,-4.19057 -3.22482,-4.1171 z"
+       id="path27715"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 408.6561,485.00662 c -0.21015,-0.0249 -0.39939,-0.0165 -0.57419,0.0133 -1.3985,0.2382 -1.40632,2.17852 4.21564,5.0779 -0.0245,-3.37064 -2.17032,-4.91792 -3.64145,-5.09122 z"
+       id="path27713"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 525.9622,493.38675 c -2.39881,-0.0472 -8.62605,9.80286 0.79507,1.94659 0.0913,-1.40528 -0.2415,-1.93572 -0.79507,-1.94659 z"
+       id="path27711"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 443.96513,490.0191 c 1.25061,-0.12153 6.21882,-0.2581 7.29474,1.98691 4.16608,5.03024 0.74689,9.09335 -7.57055,9.54023 1.0517,-6.60957 -2.8537,-2.15642 -1.76909,0.50178 -1.07135,1.95348 -12.98794,6.71043 -21.5126,1.81477 3.43253,-3.56405 -8.37615,-5.04855 -2.92539,0.24556 -13.01074,2.41091 -10.79852,-12.03322 -0.53247,-7.53695 5.14189,-10.47102 2.60339,0.78211 7.37009,0.2434 -1.80956,-11.0051 7.59677,-0.69577 9.69706,-7.55338 3.96083,3.75103 6.66001,1.07734 9.94821,0.75768 z"
+       id="path27709"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 489.87514,492.2029 c -1.50613,-0.046 -2.51139,1.3327 2.04316,3.14803 0.60269,-2.2121 -0.87171,-3.11219 -2.04316,-3.14803 z"
+       id="path27707"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 535.30062,494.97755 c -1.77727,0.1698 -5.5651,9.39272 0.77015,1.63958 -0.0452,-1.24641 -0.36002,-1.67876 -0.77015,-1.63958 z"
+       id="path27705"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 460.36165,491.99272 c -1.3392,0.0143 -3.41748,5.92162 0.52325,6.44733 0.68746,-4.83677 0.17821,-6.45483 -0.52325,-6.44733 z"
+       id="path27703"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 462.16398,492.7593 c -0.60407,0.0371 -0.81072,1.30918 1.26146,2.65519 -0.0849,-1.95572 -0.79162,-2.68409 -1.26146,-2.65519 z"
+       id="path27701"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 444.94773,492.05031 c -2.04169,-0.24684 -6.82853,3.87839 0.55942,2.08934 0.47475,-1.43273 0.12116,-2.00705 -0.55942,-2.08934 z"
+       id="path27699"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 455.70003,492.78469 c -1.39243,0.0755 -2.6925,4.24162 0.82031,6.65141 l 0.73677,-1.11527 c 0.11969,-4.17292 -0.72163,-5.5815 -1.55708,-5.53614 z"
+       id="path27697"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 436.83923,492.96038 c -1.92205,-0.16157 -5.68813,4.02848 0.86976,1.98806 0.22629,-1.42076 -0.22908,-1.93423 -0.86976,-1.98806 z"
+       id="path27695"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 483.08616,495.31177 c -1.82878,-0.0628 -1.71494,3.26926 4.49111,4.89865 -1.59426,-3.62351 -3.39385,-4.86096 -4.49111,-4.89865 z"
+       id="path27693"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 430.21273,494.0877 c -1.8761,0.007 -6.51295,2.18321 -0.4214,1.77907 1.5497,-1.34189 1.27417,-1.7824 0.4214,-1.77907 z"
+       id="path27691"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 467.87143,496.06636 c -0.92134,0.17264 -2.33193,4.57066 0.50642,3.31076 0.22306,-2.599 -0.0877,-3.38924 -0.50642,-3.31076 z"
+       id="path27689"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 510.80256,498.1591 c -1.38575,0.32405 -7.72714,8.69864 -0.39814,2.12427 0.80134,-1.67702 0.78613,-2.21499 0.39814,-2.12427 z"
+       id="path27687"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 434.95261,496.77914 c -2.97483,-0.0519 -6.28979,6.10285 2.17581,1.85356 -0.50713,-1.35644 -1.34286,-1.83901 -2.17581,-1.85356 z"
+       id="path27685"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 490.88149,500.73624 c -1.08636,0.17142 -1.73042,2.92028 1.21174,3.80029 l 0.51279,-0.36016 c -0.29491,-2.72592 -1.07273,-3.54298 -1.72453,-3.44013 z"
+       id="path27683"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 517.54894,502.19962 c -3.04486,-0.23701 -7.4812,7.94009 -0.65366,2.72503 l 1.84858,-2.0613 c -0.34168,-0.44074 -0.75995,-0.62989 -1.19492,-0.66373 z"
+       id="path27681"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 528.95177,502.92397 c -1.67668,0.19658 -9.52959,7.97708 -0.54914,2.07945 1.00412,-1.6025 1.01862,-2.1345 0.54914,-2.07945 z"
+       id="path27679"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 426.78944,498.94879 c -1.31288,0.0809 -4.39519,2.52589 -0.15752,1.86701 0.99604,-1.45988 0.75429,-1.90371 0.15752,-1.86701 z"
+       id="path27677"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 463.7196,500.97231 c -0.28299,0.0616 -0.18773,0.6406 0.89964,2.18058 1.68386,-0.2559 -0.0326,-2.02876 -0.74696,-2.17395 -0.0536,-0.011 -0.11223,-0.0154 -0.15268,-0.006 z"
+       id="path27675"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 484.34139,503.39701 c -1.54802,-0.10058 -1.89633,0.95846 3.55999,3.4433 0.73578,-2.08218 -2.01196,-3.34264 -3.55999,-3.4433 z"
+       id="path27673"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 456.16874,502.25072 c -1.14347,0.24652 -1.22033,4.27723 2.53803,7.60554 l 0.40483,-1.39737 c -0.88305,-4.77083 -2.16049,-6.37681 -2.94286,-6.20817 z"
+       id="path27671"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 504.97821,507.23731 c -1.48213,-0.0171 -3.72679,4.48417 -0.0443,7.18752 l 0.42147,-0.89951 c 1.11067,-4.62984 0.51209,-6.27771 -0.3772,-6.28801 z"
+       id="path27669"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 461.62405,506.96178 c -1.30946,0.18387 -2.22653,3.92711 1.77104,4.1305 -0.15966,-2.87636 -0.85345,-3.96256 -1.50386,-4.1189 -0.0894,-0.0215 -0.17989,-0.0238 -0.26718,-0.0122 z"
+       id="path27667"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 521.12418,509.6972 c -1.90561,-0.086 -5.9071,6.50456 0.82159,1.33587 -0.0598,-0.96027 -0.38183,-1.31602 -0.82159,-1.33587 z"
+       id="path27665"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 491.76496,508.57591 c -1.27338,-0.0631 -1.52414,1.20461 3.03895,3.99431 0.53047,-2.53753 -1.76556,-3.93127 -3.03895,-3.99431 z"
+       id="path27663"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 469.11865,507.86069 c -0.62331,0.0388 -1.1931,1.68423 0.49648,3.5398 0.50934,-2.64085 -0.0123,-3.56992 -0.49648,-3.5398 z"
+       id="path27661"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 472.85605,508.97895 c -0.47683,0.24003 0.57453,5.95045 2.46514,9.285 1.27397,-1.01035 -0.51701,-2.96102 -0.36044,-4.03102 -1.18435,-4.01004 -1.85492,-5.37972 -2.1047,-5.25398 z"
+       id="path27659"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 510.29733,510.68047 c -0.94116,0.0197 -5.42875,11.33485 -0.33497,3.31249 0.57981,-2.43801 0.5985,-3.31803 0.33497,-3.31249 z"
+       id="path27657"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 466.29939,512.02142 c -0.77655,0.0285 -1.40692,1.25464 0.45665,3.57629 1.24268,-2.43571 0.31991,-3.60481 -0.45665,-3.57629 z"
+       id="path27655"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 469.92234,514.01425 c -0.6099,-0.0673 -0.84144,1.48686 1.16538,4.86905 0.43279,-3.11284 -0.55548,-4.80171 -1.16538,-4.86905 z"
+       id="path27653"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 459.14526,514.73201 c -0.91411,0.0935 -1.74818,2.48565 0.4634,5.18274 l 0.43313,-0.28713 c 0.58788,-3.66792 -0.18554,-4.96824 -0.89653,-4.89561 z"
+       id="path27651"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 477.94477,515.9686 c -0.29531,0.0947 -0.50257,0.77514 0.0566,2.22047 0.84215,-1.4909 0.32309,-2.34226 -0.0566,-2.22047 z"
+       id="path27649"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 504.84621,517.3274 c -1.16998,0.1532 -2.97764,2.54273 0.21266,3.03032 0.9459,-2.40527 0.48932,-3.12225 -0.21266,-3.03032 z"
+       id="path27647"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 463.65938,516.4576 c -1.01293,0.19811 -2.21685,4.17799 0.76539,4.39277 0.23749,-3.03579 -0.10467,-4.21948 -0.57455,-4.3845 -0.0645,-0.0226 -0.12332,-0.0215 -0.19084,-0.008 z"
+       id="path27645"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 467.93281,517.56087 c -0.46024,-0.0657 -0.7393,1.10736 0.68395,2.74485 0.14232,-1.88915 -0.32598,-2.69384 -0.68395,-2.74485 z"
+       id="path27643"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 495.91301,519.61659 c 0.562,-0.008 1.41449,0.24065 2.60059,0.87771 2.98669,12.30509 -6.53446,-0.817 -2.60059,-0.87771 z"
+       id="path27641"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 508.2469,520.91674 c -2.32483,0.15534 -6.77589,5.57739 -0.0146,5.62091 1.87074,-4.33756 1.23228,-5.70227 0.0146,-5.62091 z"
+       id="path27639"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 490.49462,520.22274 c 1.00257,0.0533 2.49248,1.56803 4.48456,5.9309 2.77671,9.67998 -5.53644,0.20992 -4.9023,0.16964 -1.59852,-0.96912 -1.4963,-6.20117 0.41774,-6.10054 z"
+       id="path27637"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 476.01845,521.58301 c -0.48032,0.021 -0.77357,0.78706 0.59429,2.16733 0.55341,-1.46444 -0.11395,-2.18837 -0.59429,-2.16733 z"
+       id="path27635"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 472.73922,522.24376 c -0.11602,-0.0253 -0.20999,-0.006 -0.30701,0.0249 -0.60363,0.19558 -0.71601,1.51275 1.34622,4.22678 0.90188,-2.51592 -0.22695,-4.07404 -1.03921,-4.25169 z"
+       id="path27633"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 469.2459,522.55104 c -0.63324,0.0723 -1.10031,1.89879 0.46009,5.25909 0.97253,-3.64912 0.17314,-5.33129 -0.46009,-5.25909 z"
+       id="path27631"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#a05a2c;fill-opacity:1;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 524.54436,529.57837 c 3.20892,-0.76167 7.8362,-2.3891 7.43794,1.02087 1.63763,1.9216 -2.04416,11.42699 -1.03653,11.88452 -1.89241,2.6898 -4.32548,1.81307 -7.26631,2.06021 -4.23263,7.67075 1.28666,25.18055 0.35346,36.77458 -0.25656,3.18741 -7.40211,10.31665 -10.2538,17.43078 -1.78028,3.74222 -4.4597,6.13531 -7.67319,7.62125 -3.2135,1.48591 -7.66702,2.36576 -11.08549,4.29908 -9.22514,1.30303 -15.54927,-0.87873 -24.19324,-3.84169 -0.95005,-1.59933 -1.29119,-3.07657 -2.01174,-4.75281 -1.58652,-4.92425 -5.69506,-17.52238 -7.35188,-22.69049 -1.21541,-4.87725 -2.18543,-6.56497 -2.97604,-6.32434 -0.79064,0.24065 -1.07985,3.37703 -1.29069,5.94794 -1.24999,4.79983 0.38071,14.9875 -0.17275,19.83996 -2.90577,-11.75398 -1.72947,-30.54298 -3.4302,-42.55895 1.56121,-5.73911 0.35185,-5.29011 -2.83327,-6.10379 -3.18506,-0.81368 -8.08487,-0.99042 -10.80513,-4.2415 -2.40283,-9.56124 -0.71768,-13.16447 -0.71768,-13.16447 0,0 10.27509,-1.30738 15.89701,-1.00941 14.32266,0.75916 28.31409,1.21054 42.76071,1.2024 6.81263,0.94288 19.85556,-1.7817 26.64882,-3.39414 z"
+       id="path27629"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 493.49213,612.40068 c -1.78824,1.44944 -2.44684,26.20235 -3.62406,27.10906 -0.82023,-4.59683 -0.52249,-24.98978 -4.3219,-27.30095 1.18741,0.49262 6.26351,0.45027 7.94596,0.19189 z"
+       id="path27627"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+       d="m 522.00045,794.36843 c 0.3851,0.0868 -0.696,0.66707 -0.96252,0.14944 0.53655,-0.13316 0.83416,-0.17841 0.96252,-0.14944 z"
+       id="path3218"
+       inkscape:connector-curvature="0" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path27552"
+       d="m -96.095076,446.90133 c -4.511964,0.13582 2.295438,10.34045 8.405267,24.45169 5.592859,5.38884 -2.373355,14.95551 -8.672708,20.32546 -10.464133,8.36489 -3.245521,25.81952 -1.604642,30.22076 -2.363541,7.47105 -4.229531,37.68665 -12.951751,53.98474 -0.78364,2.15 10.54536,-2.41118 9.3222,-1.87208 -4.3878,1.93388 -6.95345,11.00326 -6.95345,11.00326 0,0 10.614347,-1.32346 11.805585,-4.92855 4.596465,7.44597 -8.513275,36.31707 -7.717565,45.65589 -3.35976,13.00766 1.3099,28.48322 -9.85708,39.58117 -4.1911,5.98004 -13.06697,16.24697 -0.38206,10.77402 1.26047,-1.07251 -11.87855,29.66017 4.50828,12.14944 -0.40914,17.26215 -0.84323,38.42636 -2.25414,55.66579 -0.82682,20.16164 0.76031,40.49146 6.38036,59.90663 13.78536,6.43184 29.366526,8.38892 44.242273,11.19429 23.39947,3.04141 55.3905661,2.22068 78.933104,1.75747 10.0767,-1.48474 17.689977,-1.33327 30.526409,-3.66775 l 11.690962,-2.10132 c 0.01668,-12.87961 -1.904725,-26.43766 -0.611299,-39.81041 0.139303,-14.36636 2.377592,-28.40877 1.910294,-42.75224 0.409015,-12.59618 -2.488829,-26.25604 1.298995,-38.35859 -13.068923,-4.8777 13.24164,-12.57596 -1.528234,-10.96505 -13.558486,-0.9744 9.76952,-2.7597 -1.528233,-7.60295 -4.160666,-1.92135 -7.515781,-21.00333 -12.416866,-29.41843 -4.759365,-10.26001 -8.871197,-17.1853 -14.938455,-27.2025 -7.636287,-12.68521 -18.114654,-27.31286 -8.787326,-32.62772 9.303684,10.66229 7.940343,2.24961 4.164428,-4.16444 12.418756,5.06073 7.734998,0.37396 5.119573,-7.41191 1.713048,-5.48814 0.587365,-14.1131 0.382057,-18.41518 -0.529061,-3.14529 -0.293102,-6.67889 -0.878732,-10.35377 -0.58563,-3.67485 -1.99494,-7.73703 -2.521581,-11.38531 -0.52664,-3.64831 -3.733272,-14.70028 -6.571391,-14.97666 -3.071218,-0.29908 -2.54992,0.48594 2.865432,-9.32221 2.958385,-5.35814 3.17625,-12.0777 -7.832181,-22.15934 -22.7692769,-8.11422 2.009867,-3.652 17.077976,-21.12778 6.877574,-13.3165 -23.429069,2.52281 -31.9018124,1.10796 -6.3014562,1.9364 -21.1677396,-24.63697 -13.9451016,-2.52158 -0.35691,1.43846 -1.160013,1.87672 -2.215935,1.71926 2.665368,1.06365 4.7039421,1.35863 3.9351929,-0.64949 -7.8549699,-20.51897 7.6432927,5.36656 11.1178774,3.9734 12.1093317,-1.30354 26.8548237,-8.14757 32.2838687,-7.29731 -1.407011,11.20697 -29.9253565,16.94837 -26.247359,21.12779 -11.8536521,-4.57403 -30.936417,-3.26358 -33.582859,11.2325 -3.292995,13.9212 5.799104,26.45001 17.3454108,29.38022 13.7303562,5.18801 26.0060572,-8.03416 32.1692522,-3.93519 6.639537,17.44415 9.985262,35.94486 6.647802,54.25218 10.817231,17.76515 -13.391028,-7.9807 -1.642848,14.5946 -11.965176,-17.53021 -21.2021806,15.84803 -26.9732677,2.33055 -5.0290404,-9.3224 -21.2738243,-17.28656 -13.1045763,-29.03638 6.8199546,-12.49531 3.0130467,-30.4658 -11.652752,-35.07289 -12.760413,-5.36457 -27.197863,1.7535 -38.358591,9.70427 -6.141237,9.04867 -14.650083,20.61606 -5.23419,30.71743 4.023257,3.43125 9.271641,7.45286 9.054766,10.12454 -0.203744,2.50995 -5.184246,3.16133 -7.985005,6.45676 -2.106121,2.47812 -4.701044,5.00189 -6.494979,7.83219 -1.793935,2.83029 -2.829586,5.95782 -1.986699,9.70426 -1.407012,5.845 -12.554928,-10.62515 -15.664363,-14.25075 -3.555582,-5.37198 0.377949,-10.41783 -15.205897,-2.10132 18.233774,-24.24188 -12.28037,6.2748 0.26744,-17.00156 2.4837,-8.53873 3.41974,-14.82862 4.43187,-18.64442 1.963876,-7.40383 0.78006,-26.76429 6.151129,-22.35037 12.23027,9.6217 33.989779,3.00346 43.860216,-7.2973 12.885049,-15.42209 1.969387,-40.79933 -19.29391,-39.88681 -7.605649,-0.60343 -24.043821,13.81304 -13.52484,-0.76412 -2.752527,-6.59339 -13.883974,-23.60254 -12.646107,-28.00482 13.112046,-1.02082 25.643941,31.95811 27.622766,15.85539 -6.320126,-17.09562 16.101388,14.30218 12.493285,-3.62954 4.402465,0.10089 11.9981,3.34616 15.129482,0.22922 9.565977,-9.5218 10.213359,3.02719 13.945108,1.37542 -2.352619,-4.88934 -2.64412,-6.68776 -1.528231,-6.76242 1.115878,-0.0747 3.633802,1.59302 6.877033,3.70596 1.049441,0.6837 2.848988,1.69828 4.699308,2.6362 -5.596648,-3.76746 -13.375655,-12.74377 -12.837131,-3.51494 -9.705662,-7.65327 -10.034134,7.71401 -17.994919,-3.05646 -0.942906,0.83584 3.779118,4.53183 2.25414,5.19599 -1.524979,0.66417 -9.308795,-1.71568 -11.194289,-1.41362 -1.885505,0.30208 0.763675,5.7139 -1.260789,5.46342 -2.024466,-0.25045 -8.717541,-6.15102 -10.659408,-7.14447 -6.065743,-5.59196 2.636784,20.83506 -7.068067,4.39366 -6.602249,-7.51369 -11.59768,-10.99564 -15.626157,-13.21919 -2.394529,-1.11465 -4.040139,-1.63598 -5.081365,-1.60464 z m 82.562652,16.35206 c -0.978557,-0.39049 -2.021042,-0.89 -3.05646,-1.41361 1.134851,0.75966 2.192961,1.28486 3.05646,1.41361 z m -55.054503,15.35872 c 1.089554,-0.0621 2.349342,-0.0128 4.04981,0.19102 15.178422,1.81956 19.678572,21.37932 15.244099,34.04134 -7.637607,10.37093 -21.372963,16.16044 -34.155952,15.01487 -14.426532,-3.61374 -22.37214,-19.1453 -13.563045,-33.46825 4.658841,-6.00462 14.626938,-12.54742 15.587951,-12.37867 l 7.832181,-2.59799 c 1.867242,-0.3126 3.189039,-0.69876 5.004956,-0.80232 z m 61.7405107,1.06976 c 11.3319272,0.004 24.8423283,2.22332 30.1825523,13.63945 6.881036,13.5713 -6.843501,25.67781 -19.4467327,27.04968 -12.9916343,1.60039 -31.1244143,-7.35432 -28.1958473,-22.73242 0.417709,-8.64869 5.241703,-18.45641 15.244094,-17.9185 0.733074,-0.0174 1.4604749,-0.0384 2.2159337,-0.0382 z m -66.5926437,1.75746 c -6.859921,0.33476 -19.592208,14.51315 -21.051375,17.49824 -1.632236,3.33919 -1.030406,2.87373 -1.604641,6.38037 -0.574249,3.50664 2.155831,11.89855 3.744164,12.56969 9.028688,12.61828 29.91488,8.68619 37.976529,-4.0116 7.074349,-7.01812 -3.329967,-35.19335 -11.270701,-31.36693 7.168061,29.65057 -35.756476,11.50746 -3.438518,-0.57309 l -3.705959,-0.45847 c -0.208463,-0.0188 -0.428211,-0.049 -0.649499,-0.0382 z m 71.5975992,6.45678 c -11.7325562,0.3287 -22.6024022,18.32013 -9.5132342,24.33707 12.34572941,6.1836 32.212457,-10.67007 13.3720164,-12.41687 3.7571974,-6.20866 10.4240596,-11.12501 -2.71260976,-11.882 -0.38419734,-0.0248 -0.76769734,-0.0488 -1.14617244,-0.0382 z m -30.5264042,36.29547 c 12.763084,0.82472 23.9770804,15.34988 20.745729,28.08124 -6.40485,10.79863 -5.329171,20.04351 3.7823706,28.23405 4.4493017,4.02997 9.5931178,7.3967 7.48832876,16.96336 -1.00920606,7.55928 -25.86503936,14.08869 -35.68418236,8.13783 -6.989967,0.58174 -15.353177,5.61026 -27.011473,2.25414 -18.0173,-5.90149 -9.782595,-20.51877 2.597992,-28.88355 13.865842,-5.64023 -12.279773,-16.27009 -8.634502,-26.40018 1.064198,-11.57182 10.157927,-20.28813 21.013169,-24.41349 4.940243,-2.1183 10.260894,-3.9733 15.702568,-3.9734 z m -8.290651,9.16938 c -10.678895,0.32992 -19.960218,4.50313 -14.05972,18.75904 1.88871,7.22713 9.521524,26.58816 19.714173,21.01316 7.164803,-4.0926 9.832053,-15.50127 13.486635,-24.14603 4.784608,-14.13164 -6.056055,-15.54072 -14.747425,-15.51154 -0.718684,-0.0773 -1.485734,-0.10394 -2.25414,-0.11457 -0.720383,-0.009 -1.427599,-0.022 -2.139523,0 z m 0.878733,2.13952 c 7.958768,-0.25586 16.263214,2.02128 17.230804,6.18934 -0.184879,8.28528 -8.202507,31.32204 -16.237455,30.56461 -10.594659,-0.99871 -14.693422,-21.67108 -16.122831,-27.8902 -0.451635,-5.82405 7.170714,-8.60787 15.129482,-8.86375 z m -5.04316,9.8571 c -4.310307,0.20257 1.107429,13.23327 2.06311,1.94849 l 0.191029,-0.34385 -0.573086,-1.18438 c -0.669744,-0.29488 -1.235165,-0.44122 -1.681053,-0.42026 z m 11.156082,0.45847 c -1.237659,-0.15227 -2.571131,12.3668 0.72591,6.0365 l 0.191028,-2.25413 c -0.22866,-2.7165 -0.570397,-3.73974 -0.916938,-3.78237 z m 65.943146,11.38531 c 0.450779,1.14522 -0.437074,1.28692 0,0 z m -126.919542,22.31216 c 2.73931,0.53709 15.369548,24.10295 20.592905,22.00653 7.319858,9.80748 26.607985,12.87528 31.023079,7.83217 -8.146361,10.47112 -9.792424,30.63331 6.265746,29.1128 8.674876,1.7225 17.493532,4.08975 14.059725,-7.45012 -0.827005,-2.80019 -3.86822,-17.3824 -6.800625,-19.1793 -3.901774,-2.39088 7.610106,-0.57065 13.410217,-2.10131 7.3585638,-3.166 7.1959361,-1.41139 13.180988,-6.07472 7.607824,-5.64024 -0.7950346,-19.79206 7.7557693,-10.12453 10.0192747,-8.79145 12.5524817,-10.69826 13.9833097,-11.2325 2.235605,-0.83471 -2.833266,7.03321 -1.337202,9.74247 l 22.961662,41.64429 c 3.289413,5.95689 8.591032,18.68225 11.996607,26.89685 3.192487,7.70061 0.746795,10.64676 3.094674,11.07967 13.309635,2.45411 0.78426,4.88285 0.343843,5.19599 -3.924075,2.7901 5.755635,3.69723 7.526542,3.01825 -0.812168,0.67635 -21.071586,17.48125 -30.564612,19.1793 -9.578252,4.98263 -19.56904,6.53085 -17.994914,-7.87039 -7.2060471,-9.06509 -6.104682,-16.40454 5.043161,-14.70922 6.925818,0.0279 35.35868,-4.92329 24.107836,-11.3089 -7.668184,1.90569 8.490582,2.02157 -4.088017,5.57804 -7.463743,1.08163 -16.683411,4.48377 -27.737383,4.39366 -4.3182907,1.22329 -50.280715,7.96751 -38.473198,9.09297 50.849432,-2.53216 40.325046,0.81393 -2.941843,4.58469 1.561583,8.00203 35.903373,1.08472 38.5878138,-0.26743 6.0291022,5.6661 -27.2205588,8.41544 -37.1742008,11.88199 -7.525147,2.46392 34.1307488,-1.89528 42.217361,-0.53488 -13.4609224,6.57472 -44.887722,4.03953 -39.42834,6.18932 9.33895,3.94918 37.459906,4.94978 44.662531,-0.0382 12.259025,-0.69514 37.632674,-16.88694 37.632674,-16.88694 0,0 0.119082,23.77842 -0.07646,34.80545 -0.350932,19.96805 0.679567,39.93588 -0.19103,59.83022 -0.521742,6.60956 1.337203,26.17095 1.337203,26.17095 0,0 -23.069218,3.26019 -33.773898,4.50827 l -54.748852,1.41356 c -18.647547,-1.64106 -37.683601,-1.97301 -56.047858,-7.10628 -10.523456,-1.1154 -18.338767,-6.6478 -18.338767,-6.6478 0,0 -6.52383,-37.71768 -6.22754,-51.65419 0.44001,-10.03552 0.68338,-21.75203 0.99335,-33.46825 0.30999,-11.71621 -0.46405,-22.22609 1.56644,-32.05464 0.30067,-1.45532 3.53725,-4.00521 2.98005,-0.42025 -0.78798,5.06978 7.109545,12.34646 10.391965,14.70922 6.891598,4.96073 15.558474,9.03512 21.509843,11.53814 12.19149,4.54058 29.29091,-1.38585 38.052939,-2.71262 5.565418,-4.96082 -88.399737,2.70458 -1.146172,-4.73751 3.555655,-4.5475 -35.711458,-0.67936 -36.448297,-2.71261 2.980356,-2.93365 32.855769,-0.6984 35.837005,-6.34215 -3.479353,-1.90819 -33.207703,-1.66272 -33.926717,-3.40031 -0.275803,-0.66652 31.674838,-0.89558 33.391836,-1.41362 -2.582721,-5.39551 -24.54859,-4.84589 -31.672576,-6.95345 -3.966847,-5.64094 -18.529795,-19.48493 -18.529795,-19.48493 0,0 -9.878922,-16.47557 -3.705959,-4.27905 5.933238,11.21142 20.427918,13.78994 17.116181,31.94002 0.89904,4.94324 -0.854586,14.6526 -0.72591,18.6062 -9.632229,-6.08156 -28.202523,-11.06737 -27.928413,-24.33708 -0.4937,-13.37336 -14.05974,10.29361 -13.41022,6.30396 -2.13127,-10.09071 11.26939,-21.66948 -2.94184,-14.82384 -6.8817,3.31496 15.42007,-15.13151 13.75407,-28.99817 -0.53033,-7.58789 1.59753,-19.86551 3.66775,-29.60946 1.97487,-10.23612 9.09471,-31.25823 6.800628,-36.98319 -0.06431,-1.00559 0.143556,-1.41393 0.534881,-1.3372 z m 55.398354,30.22077 c -0.801294,2.25259 2.871473,18.93951 2.024906,26.70582 -17.735676,5.51916 -11.677368,-27.253 -2.024906,-26.70582 z m 4.202634,0.0382 c 8.774922,0.19892 10.934922,20.72795 11.538146,27.54636 -2.895337,1.482 -9.274164,1.42287 -11.881997,-0.87874 -0.279166,-7.1453 -4.652644,-27.01201 0.343851,-26.66762 z"
+       style="fill:#000000" />
+    <path
+       sodipodi:nodetypes="ccccccccscsccccccccccccccccccccccccccccccccccsccccccccsccccccccccccccccscccccccsccsccccccccsssscccccccsscccccssccssscsccsccccsssscsssccsssccssccscccccccccccccscccccccccccccccccccccccccccccsccccccsscccccc"
+       inkscape:connector-curvature="0"
+       id="path27554"
+       d="m 147.46151,489.10636 c -0.34909,0.0326 -0.73598,0.1307 -1.14617,0.26744 l -2.55978,0.84053 c -3.28153,1.09385 -6.90227,1.10527 -10.20095,2.86543 -0.14548,5.08163 9.24671,11.52821 11.42353,17.80388 -3.9886,4.51093 -14.23509,8.58276 -18.91185,15.12949 -9.18913,5.33555 -8.12598,16.98819 -6.11293,25.90351 0.65947,9.23115 10.44018,14.17746 17.00157,19.67596 4.76716,2.34145 10.40835,2.24112 13.71587,3.24748 3.3075,1.00638 3.01634,5.28305 6.72421,10.04812 9.40366,6.97455 21.09314,17.76918 33.50645,22.5032 15.95603,6.08509 -22.00132,-8.096 -27.20249,-7.10628 -0.5002,0.41071 -1.2865,2.24308 -2.06312,2.59799 -4.97378,0.54433 -9.14559,1.06474 -13.67766,1.64285 -2.91312,0.3652 -2.6188,0.41744 -6.07472,1.49003 -1.40809,0.11504 -5.22924,-0.39647 -6.57139,-0.30565 -5.88681,-2.26005 21.64863,15.6199 -0.38206,9.05477 -14.55433,3.91884 20.6632,18.05703 -9.39862,9.24579 10.72468,6.74691 24.88101,1.49091 5.31061,10.81223 -9.72113,6.09983 5.29674,6.21025 8.6345,8.06143 -2.01093,3.17926 -12.61328,9.79533 -2.13953,10.6594 15.4083,6.08051 -11.19921,2.92942 -14.36536,7.41192 -9.93802,9.75929 17.83233,5.68921 5.3488,11.53814 -7.48095,1.73568 -2.88906,6.08531 5.42522,5.76907 -3.13683,4.49871 -17.88793,7.29661 -24.41348,9.47502 -7.95039,5.87094 14.33144,5.95753 6.38037,10.35377 -1.99701,8.32079 15.9656,1.02713 21.31881,1.52822 10.14498,0.4805 14.70059,0.71613 24.41348,0.72592 6.84365,-0.241 13.00594,-0.72913 19.71418,0.15282 2.56255,0.18242 8.05865,0.19963 10.6212,0.38206 11.44005,0.0517 19.68366,-0.12473 31.1759,-0.30565 24.3226,-1.39697 48.73746,0.36288 73.01121,-2.17772 15.84138,-0.86793 31.13601,-7.4561 29.57127,-11.95841 -5.34872,-0.0297 -9.62514,-4.13358 -4.77572,-9.9717 -13.16378,5.24606 -1.68106,-4.20264 -1.68106,-4.20264 0,0 -19.93112,1.09864 -26.78224,-1.22258 -2.22227,-5.13034 5.15097,-15.08564 10.04811,-20.66932 8.97013,-9.78949 -9.67955,-3.91124 -7.67935,-9.62785 9.67306,-15.67475 -20.34247,-0.80686 -20.40531,-0.36705 0,0 18.36103,-20.14002 18.49501,-28.01983 -7.99007,7.65617 -9.16286,9.92044 -13.2956,-2.59799 -7.89367,10.70165 -3.28968,-0.59823 -4.39366,-6.26575 -9.46591,4.30384 0.64698,-5.43881 -5.53984,-5.76907 -11.0313,12.75822 -0.19951,-3.40085 -5.84548,-5.80727 -16.53683,2.54304 -1.11986,-3.58403 1.14448,-9.08619 4.4427,-4.35731 9.0624,-14.63038 18.05689,-16.67215 20.57837,-4.67131 -29.04852,-10.48712 6.4729,-9.50558 12.96365,-5.29024 -36.96876,-4.77779 -7.67935,-6.07472 12.63308,-2.59619 -5.7283,-6.71472 -10.69761,-8.5963 -5.98397,-5.89407 -8.81707,-15.78405 -11.95841,-23.8786 -15.26703,-13.18944 7.15177,-7.7172 13.86869,-13.60125 9.53851,-5.31741 2.36626,-8.92134 -4.96675,-9.39862 -9.29565,-0.41879 -18.25668,-2.3268 -24.5281,4.20264 -1.86986,12.73886 -1.2614,9.55316 -16.39027,1.26078 -5.79661,-0.28373 -24.10271,-4.19253 -31.36693,-1.03155 -3.7957,1.65167 -6.07828,-0.87591 -12.07302,1.37541 -5.9453,12.8688 -19.95103,-1.55248 -29.64767,-8.48169 -2.85237,-1.44285 -4.01309,-3.55212 -6.45678,-3.32389 z m -0.22924,2.78902 c 12.54372,1.84363 17.82938,15.88071 25.86531,15.89359 7.26616,5.44209 10.54022,-9.4037 17.07798,-5.23419 13.49461,-4.55326 23.84237,-0.85051 36.21906,-0.42025 7.18614,4.67172 23.28934,14.68628 16.84874,6.30394 0.17154,-12.80893 19.53818,-11.81009 28.00482,-9.9717 11.59302,0.11602 -4.08113,7.26293 -8.32886,8.25245 -7.84433,-0.72389 -15.42112,1.14251 -8.56474,8.21081 0.72621,1.1902 1.39407,1.91144 2.15777,2.63448 3.82965,1.10142 5.11273,15.20779 13.26406,25.82881 23.7554,4.68426 13.93495,7.29507 -0.55465,6.39044 -0.67572,4.7391 41.41452,5.28666 5.50315,5.80062 -4.37981,1.10876 5.15808,5.14121 10.82261,7.3114 -2.05305,1.9987 -9.22238,3.8601 -10.8741,6.2564 -2.72116,3.94785 -6.53046,7.76842 -8.28993,10.09995 -11.50302,12.36438 -23.07036,21.01152 -35.74804,29.20902 -11.70928,8.53665 -9.31737,-10.2903 -3.51492,-15.01485 7.03632,-7.98449 16.65537,-18.1365 12.44007,-29.77389 -7.95387,-5.67173 -18.4782,-9.03577 -28.21906,-7.13289 -7.55804,-1.19185 -37.99669,23.78409 -16.07132,0.87874 6.72558,-19.50475 -3.15303,-37.83553 -19.76568,-45.00639 -8.57116,-6.50604 -23.42457,-0.53753 -29.38023,-4.6611 -4.84862,-3.35708 -12.00824,-13.06506 -10.20094,-13.44843 z m 10.54479,18.87364 c 3.23114,0.0597 6.16047,0.67312 9.09298,1.37541 11.60531,3.13451 7.38968,2.39485 12.5697,5.00495 8.28738,5.05976 12.19157,13.85952 14.6328,22.84705 0.35425,1.79882 0.66016,5.5855 -0.0898,6.43358 1.47906,7.13816 -2.64459,14.37053 -8.51988,19.71418 -6.6589,7.44867 -16.3042,-2.7319 -24.5148,-2.95686 -9.45913,-1.45174 -19.07053,-3.12692 -28.23406,-5.08137 -14.12338,0.33351 -14.02252,-13.30186 -12.49328,-19.02647 2.1863,-12.18011 19.55032,-23.72781 26.66762,-26.36198 4.12288,-1.52591 7.65752,-2.00814 10.88864,-1.94849 z m 99.83167,12.07303 c -3.03205,-0.17139 -9.20759,6.22753 -9.20759,6.22753 -4.08128,5.3147 -5.67041,7.12113 -17.2308,-3.3239 -13.09803,-3.59939 1.47615,3.06056 7.9468,10.00992 3.49242,2.77196 -14.66632,11.62334 -4.66111,12.11122 10.627,-17.61174 13.68613,-8.86659 21.66267,-2.36876 8.81673,2.80914 -0.26783,-6.10167 -4.12622,-7.14447 -8.36077,-3.98658 1.59805,-10.01589 6.18933,-15.39693 -0.17138,-0.0737 -0.37094,-0.1032 -0.57308,-0.11455 z m -37.28883,35.26391 c 7.26562,-0.0979 14.39482,3.55402 18.26235,8.00991 1.82947,8.03315 -5.38086,14.32058 -8.97834,20.64441 -6.23633,6.99214 -12.27646,16.8679 -9.36042,25.94172 -9.21092,1.53627 -18.84592,2.52145 -24.87195,-6.6478 -3.29423,-9.49527 -11.46291,-16.78798 -9.55144,-27.69918 1.06572,-11.30585 12.80569,-15.24461 21.9301,-18.37697 3.79372,-1.0046 8.21033,-1.81335 12.5697,-1.87209 z m -94.48285,1.03156 c 8.04336,-0.52669 44.68952,9.9119 52.22727,11.2707 5.75324,1.71404 -13.19442,4.05365 -28.08122,2.33055 0.56492,-0.67322 3.24748,-2.64115 3.24748,-3.66776 0,-2.46266 -1.60003,-4.27337 -4.96675,-4.81391 -11.96835,-1.92165 -12.43563,-2.08112 -13.14278,0.80231 -0.43955,1.7923 1.30944,3.76424 2.67441,4.92855 -7.09399,-3.97573 -14.91749,-10.65669 -11.95841,-10.85044 z m 85.96297,7.48833 c -1.84588,0.0512 -3.6087,0.24268 -5.08136,0.45846 -11.8009,-1.50683 -14.22883,9.79048 -9.28401,19.02648 5.49483,5.63906 6.82481,17.96694 15.62616,20.36366 8.97771,-5.4443 8.25003,-18.77913 12.45507,-27.81379 4.0139,-10.23655 -5.7171,-12.257 -13.71586,-12.03481 z m -25.38021,1.87208 c 4.60461,0.0867 -5.95744,11.43387 -3.1595,16.84875 3.01741,4.45689 10.59852,21.91176 8.40527,20.32545 -3.11997,1.52691 -34.318,-22.19967 -37.97653,-29.49484 -2.18692,-4.36076 21.02655,0.95154 24.5281,-2.0249 1.5382,-1.30753 7.5753,-5.65754 8.20266,-5.65446 z m 22.6676,0 c 4.95913,-0.0274 10.23796,1.2348 13.52484,2.94184 3.49995,3.01087 0.43416,7.77034 -0.53489,11.2325 -3.02112,5.59456 -3.80646,26.97441 -12.95175,18.95006 -4.57109,-8.01249 -10.38922,-15.68372 -12.72252,-24.71913 0.42995,-6.20039 6.3083,-8.37004 12.68432,-8.40527 z m -3.89699,8.29066 c -4.31031,0.20256 1.10743,13.23327 2.06311,1.94849 l 0.19103,-0.34386 -0.57308,-1.18438 c -0.66975,-0.29487 -1.23517,-0.44121 -1.68106,-0.42025 z m 11.15608,0.45846 c -1.23766,-0.15226 -2.57113,12.36681 0.72592,6.03651 l 0.19103,-2.25414 c -0.22867,-2.71649 -0.57041,-3.73973 -0.91695,-3.78237 z m 46.76385,15.70257 c 2.30329,3.07326 -0.72573,7.75354 -0.19103,9.81888 -0.0986,0.72699 1.83281,3.52212 7.14448,-3.09466 -1.6433,4.17508 -0.61811,7.92131 4.58469,5.38701 -2.43719,4.25679 -0.68005,9.47219 -1.79567,11.2707 3.35985,-0.69225 4.31958,-2.07528 6.11293,-4.43187 0.54731,3.31537 3.31978,13.98295 12.30225,3.43852 -1.42279,3.56477 -12.43818,20.97823 -19.42183,24.66267 2.17377,3.94399 10.74417,-4.08375 19.14109,-4.73752 9.78406,-2.34606 -2.14981,7.98514 3.87209,9.98996 18.02466,-2.40114 3.03868,7.28924 0.53487,12.49328 -3.64875,4.23831 -9.29415,15.4806 -0.76411,15.62616 23.11642,0.63295 25.29433,-3.04243 16.46668,5.53983 6.68589,1.82023 8.9443,-2.56562 7.9468,-0.91693 -0.99748,1.64866 -3.08473,5.44132 0.26744,7.985 14.56444,1.45913 -5.93861,7.78676 -8.36706,9.20759 -14.93037,1.61259 -30.08,2.67699 -45.15921,2.94184 -18.7821,-0.36357 -37.57204,0.18492 -56.31529,1.14617 -22.45409,0.20195 -46.44902,-0.82826 -68.9232,-0.22923 -4.70029,-4.03842 -31.047,10.60568 -21.2424,-4.35546 -14.12903,-3.16431 -13.27058,-5.82598 -1.06977,-8.0232 10.45476,-3.23877 27.8083,-8.06613 10.583,-10.88865 -6.49796,-0.89299 6.05612,-0.38925 3.89699,-7.83218 -22.2993,-2.42217 -4.00198,-8.9975 5.19598,-9.32221 11.77616,-1.58017 5.22955,-3.26113 -3.78237,-7.79397 7.34365,-6.61865 12.41477,-10.00856 0.11455,-11.42352 -16.68337,-0.2404 11.14098,-5.40433 8.97836,-12.79894 -17.17298,-9.044 -10.41321,-14.95738 3.89699,-6.15112 5.48161,-4.43288 -19.40359,-17.12359 -6.6096,-13.02816 5.42048,-1.28052 15.39182,-3.47881 20.97497,-3.20929 0.0777,3.9092 1.66457,11.16143 4.20263,13.48663 -1.92721,3.1737 1.01857,4.79198 2.13953,10.04811 4.0522,9.3164 7.69108,3.50129 27.69918,-4.6993 2.26426,-1.33204 5.16469,-6.22066 4.66109,-10.12453 4.10467,2.15965 6.27203,1.49437 13.83049,2.02491 10.36367,0.76954 23.91753,-8.55945 31.84578,-14.36707 4.47167,-3.25227 6.44368,-7.14185 9.45465,-7.52483 2.61974,0.79349 5.72829,0.53741 7.79398,-0.11456 z m -97.80674,8.25244 c 4.34022,0.45555 15.4445,5.35787 21.12778,6.95345 5.29853,0.6774 9.04845,2.60765 10.88865,3.62955 1.1353,1.75497 -3.21822,1.03213 -5.80728,1.87208 -2.58907,0.83995 -7.48939,0.43124 -11.42353,2.17773 -3.70686,1.64554 -8.82798,1.65714 -11.9202,-0.0765 -3.09221,-1.73354 -4.9998,-6.80214 -4.6993,-11.30891 -0.74756,-1.79141 0.5084,-3.15679 1.83388,-3.24749 z m 31.8636,12.60791 c 0.67544,0.0216 1.19921,0.22113 1.49002,0.76411 1.22065,1.0694 -0.47514,5.7044 -3.05646,7.22089 -1.29515,1.37576 -3.96233,1.37061 -6.83883,3.05646 -2.87649,1.68585 -6.32884,3.46205 -9.55144,4.43187 -3.22261,0.96981 -6.16253,2.7331 -7.67936,0.61129 -4.0025,-5.59885 -3.77585,-6.02037 -3.17108,-12.03482 7.74339,2.17033 18.61624,-3.1861 24.87195,-3.55313 1.30328,-0.0765 2.80945,-0.53276 3.9352,-0.49667 z"
+       style="fill:#000000" />
+    <path
+       sodipodi:nodetypes="ccscsscssscsssssscccsssscscccccccccccscssscssscsssccccsscscsccccsccssscsccsccccccccsccccccccccccccccsccsssccccccccccccsssccsssccssscssssccccccscccccccccccccccsssccccscsscssccccccccsccccccccscscsssscscssssscscsscscscssssssscscsssssssssscssccccccccccccccccscccccccccccccccccccccsccscscssssssssssscscsccsssscscccccccccccscscscsccssssscccccccsssssssssssssssssscssssssssssssssssssssscssscssssscscsccssssscssccsccccccccccccccccccccccccscsccscscscsccccccccscscsccccccccscccscscccccsccccccccccsccsccccccccc"
+       inkscape:connector-curvature="0"
+       id="path27556"
+       d="m 628.40486,466.56484 c -1.21015,0.9186 -4.38505,0.87557 -8.6987,-5.99568 4.71498,9.31298 -1.91739,7.58156 -0.4156,8.19404 5.40941,2.20621 12.00554,11.30709 -1.4749,2.1849 2.14048,3.15368 8.18699,6.4286 5.42919,4.40866 -0.52302,-0.38309 -4.65634,3.788 -4.97565,4.72444 -0.32362,0.94914 -0.80654,-8.67611 -1.62353,-8.14388 -0.32356,-2.19963 1.59289,9.20232 -2.19861,11.76831 -1.1113,0.7521 -1.65128,-12.05046 -1.78805,-9.32979 -0.14107,2.80513 0.14257,9.8258 0.47122,11.24459 0.43707,1.8868 -0.63514,2.41826 -3.36374,1.39151 -0.23112,0.72784 0.92877,-10.2087 0.52037,-9.314 -0.42372,0.92832 -0.65467,2.46142 -0.85236,4.09764 -0.19772,1.63622 -0.33039,3.3894 -0.46232,4.79939 -0.13193,1.41 -0.26313,2.47681 -0.45782,2.7403 -0.77881,1.05397 -2.04785,-10.73667 -2.35721,-7.88774 -0.41395,3.8121 2.14798,14.71154 2.67242,16.83206 0.65418,2.6451 -1.15321,-0.099 -4.96025,2.83149 -3.11421,6.07822 5.79818,-9.28408 9.26228,7.0756 -15.61236,-4.0249 -5.21993,-0.20869 -0.15384,1.55954 -1.54635,3.43662 -2.15152,-0.66243 -8.83226,2.96744 -1.0156,0.55179 6.47258,-1.87454 9.48894,2.18235 1.29503,1.74175 2.67624,3.52271 3.63834,5.26555 0.96207,1.74284 -0.13823,0.41871 -0.3117,1.35769 -0.2856,1.54613 -3.53366,-3.6228 -8.01713,-0.0702 9.02576,-1.3309 9.72745,10.03567 6.93332,8.6332 -2.71102,-1.36076 -6.78813,-2.37334 -8.46606,-1.50602 -4.77322,0.99046 -0.29028,0.12435 -5.87569,0.93534 -8.59353,-10.70676 -1.99706,-1.97058 -5.70172,0.0994 -6.02426,-4.48574 -2.47028,-0.27291 -9.80716,1.51136 -6.06793,-14.55808 1.18829,10.64792 -10.83686,0.86793 -14.62706,-4.09768 7.56648,6.51042 -7.76955,6.31684 -19.16232,6.59148 13.65996,-4.95034 4.74468,10.0508 5.55789,-3.98705 3.04794,-4.05368 11.61574,-2.83962 2.13431,10.35326 3.27119,-5.15859 7.70712,2.17011 3.23376,-2.88724 11.68592,-1.5037 15.07442,-4.92309 -0.88384,3.36098 -0.71538,2.14269 -0.57489,4.75326 1.636,-3.87926 0.61451,-3.58268 2.87502,-5.25512 2.66583,-1.9723 2.10386,-0.96507 5.37447,3.77362 -1.35768,-13.51715 5.7369,-0.52517 5.29541,9.43637 -0.0513,1.15761 -8.74911,-4.48719 -7.17253,-3.16415 1.57659,1.32306 5.44794,3.38257 6.77512,5.03899 1.32722,1.65641 2.14404,3.51295 1.6791,5.63662 -3.11585,-0.0168 -9.07841,-4.65728 -8.7191,-3.77159 0.35932,0.88568 1.94462,2.09819 3.73268,3.38878 1.78807,1.29059 3.77892,2.65926 4.94934,3.85728 1.1704,1.198 1.5204,2.22534 0.0267,2.83326 -6.27134,0.54396 -12.97599,0.98332 -16.88356,1.55919 -3.60212,0.53086 -1.86645,6.03088 -1.32401,8.98925 0.61453,3.35155 -1.14213,5.24239 3.02118,7.38259 3.30937,1.70122 6.72986,3.68855 11.655,3.42029 -1.97034,4.75817 1.54844,11.55961 0.82132,19.84486 0.75008,5.47624 0.59024,11.03116 0.81416,12.96105 -0.1813,3.11134 1.32301,7.68673 1.33854,12.33369 1.89598,3.27194 3.19245,5.91328 4.57436,8.26754 1.3819,2.35427 2.25394,3.92951 2.12121,3.99272 -0.53099,0.25285 -17.62026,-29.88311 -18.34705,-31.04552 -4.79681,0.65649 9.49683,37.94731 8.65907,37.50855 -0.84267,-0.44132 -13.24282,-38.66191 -14.88049,-34.26032 -0.49123,5.25871 10.38148,40.36799 8.93309,40.00615 -1.44836,-0.36184 -10.23945,-33.05904 -10.81985,-37.9465 -6.90044,9.85678 -3.38941,13.78427 -1.93503,21.67555 4.39302,12.32744 7.88707,19.92183 20.70488,26.0617 15.11848,2.14256 11.7674,2.30017 12.24118,4.31724 0.58935,3.30952 0.20835,4.38818 0.74903,7.41315 0.54068,3.02497 0.51785,6.38853 0.37911,9.7681 -0.13811,3.37959 -0.40832,6.78572 -0.42742,9.84782 0.40187,6.00649 0.17791,12.79887 0.48111,19.75361 0.30321,6.95473 0.17013,12.49771 1.07533,21.04138 0.75958,7.16916 0.70153,14.14217 0.86785,20.53523 0.16631,6.39307 -0.25961,12.14742 -1.83752,16.78485 -1.16072,1.6204 -3.28689,1.69182 -4.972,0.0137 -3.69627,-3.68103 -8.57794,-10.22552 -10.49373,-4.92973 -3.70022,-3.38771 -23.57318,-17.69719 -5.90765,4.82975 -2.56319,3.94976 -11.28704,21.72151 -16.15647,33.90753 -4.86943,12.18601 -5.32848,16.61536 15.78216,19.65288 24.1094,2.64925 47.77665,1.17414 75.04837,1.34518 8.68063,-0.97009 25.91905,-0.88331 33.34865,-0.92358 l 8.8603,-1.48929 c 1.2441,-0.20619 1.7219,-1.00296 1.6626,-2.1841 -1.3886,3.48193 -18.826,2.12346 -20.8254,3.14976 -12.096,0.0723 -22.97444,0.35558 -34.25807,0.73114 -23.18831,0.0201 -47.30484,1.76929 -70.37351,-2.44251 -15.69864,-3.37512 -11.26992,-10.99521 -6.00599,-22.86152 4.34841,-9.80248 7.26859,-17.76241 14.14383,-28.94699 -14.40526,-15.82289 -4.62905,-12.6411 4.29968,-3.02569 3.62282,1.20181 -0.58067,-8.21432 8.34103,1.66224 6.09809,7.81184 9.80495,2.41137 9.5125,-0.65791 2.23431,-20.54604 -1.15885,-41.356 -1.43352,-61.24898 1.47902,-16.47493 -3.90151,-35.08892 6.61509,-42.27595 -2.92283,-4.14361 -19.98061,-1.64299 -25.72362,-7.34986 -10.5194,-4.19501 7.79919,-12.51553 13.02962,-15.61074 5.37023,-7.708 15.76172,0.76303 21.28544,0.35021 5.63797,5.76252 5.145,29.67787 4.77258,39.82558 -0.22146,3.72092 -0.37222,8.56893 -0.0653,13.84067 0.61228,10.50797 0.78539,22.71281 1.87101,30.90403 1.84572,18.15457 0.61519,40.22977 2.17013,58.3746 2.12899,-0.34081 -1.21839,-24.88024 -0.0622,-32.92883 -0.71254,-27.1959 -4.68142,-60.92162 -3.26924,-64.77042 0.35228,-2.97258 1.19575,-30.77242 4.99014,-45.36757 2.52137,-2.29143 9.26358,-3.47668 10.79271,-3.48576 5.46118,-0.0325 15.06047,11.8682 18.91347,16.95719 12.55946,8.23421 -19.06891,4.72776 -23.62062,10.0469 3.16608,-0.67681 5.08444,2.75393 6.51265,4.83571 1.42821,2.08175 1.87639,2.91467 2.19763,6.02876 0.32124,3.11411 0.65999,5.18072 0.40277,9.96033 -0.13031,2.4216 -0.14763,4.07233 -0.14763,4.07233 0,0 2.61986,35.38344 3.81685,52.921 2.50833,10.10645 0.8576,36.76521 18.32702,21.58713 -5.29859,12.38068 12.33799,3.37935 2.41268,9.76673 -5.31443,7.21969 5.3094,10.35408 11.66051,16.6209 6.3914,6.57925 12.6876,18.73081 18.6391,26.88148 0.3567,0.34973 0.6106,0.65049 0.8,0.95251 -1.9706,-6.49294 -13.2465,-19.70221 -15.854,-25.04808 -4.6093,-9.04727 -27.42713,-11.41417 -8.8522,-23.36748 -21.30225,4.3861 3.1789,-15.58607 -10.59159,-5.31641 -15.27035,12.16685 -13.39821,-11.50878 -15.43422,-22.0021 -2.50135,-24.39461 -3.70981,-51.019 -4.7983,-75.51137 -0.001,-2.17383 -1.30592,-3.35684 0.24957,-4.05584 1.55552,-0.699 5.97058,-0.91398 8.178,-1.06674 2.20742,-0.15277 4.51443,-0.26457 6.4683,-0.79972 1.95386,-0.53513 3.55456,-1.49362 4.34941,-3.33975 16.36053,-4.22518 22.50933,-21.93449 22.49403,-37.18895 -0.6855,0.82065 -1.8226,2.6206 -3.1043,4.6109 -1.2819,1.99031 -2.7084,4.17097 -3.9724,5.75303 -1.2642,1.58208 -16.57082,21.34697 -17.20323,20.94294 -0.63242,-0.40403 13.40943,-20.97701 14.02273,-24.94503 0.8956,-3.21086 4.6283,-18.23839 -4.38973,-2.82921 -2.23848,3.54557 -14.94164,22.80499 -15.31599,23.51553 -2.47127,4.69067 12.13777,-21.41857 12.018,-23.78195 -0.11978,-2.36337 0.56929,-6.74259 0.0902,-9.13932 -0.47952,-2.39672 -14.94101,26.29167 -16.72621,25.809 1.40277,-1.35335 2.58213,-3.42818 3.59299,-6.03408 1.0109,-2.60589 1.85328,-5.74283 2.58212,-9.22039 0.72883,-3.47758 1.34412,-7.29576 1.90077,-11.26414 0.55665,-3.96839 -1.62186,-23.98713 -1.60728,-28.0953 0.0149,-4.22053 -0.61059,-11.18756 0.97191,-11.00486 2.15294,0.0175 3.71808,-0.13181 4.12807,-0.45439 2.54986,-0.93758 1.80279,-1.32006 3.21743,-2.26931 0.47616,-1.89069 1.9832,-9.73161 1.63782,-9.76748 -0.10383,-5.0503 -2.22526,-6.41114 -9.25481,-4.75821 -20.6277,-9.51134 21.89691,-20.99196 18.10891,-36.58077 -7.34968,-4.84704 12.0529,-8.07341 13.5512,-9.15461 0.6446,-0.46513 -23.48022,3.61838 -17.22606,-0.0419 2.05116,-1.92333 13.51906,-14.55149 8.30576,-10.54022 -13.12504,17.04815 -18.82288,1.93985 -13.35893,-9.07882 -3.21303,4.27611 -7.88033,23.17999 -10.94593,3.60915 -4.47509,7.77095 -13.04659,1.22741 -10.77006,-11.92596 -3.10565,12.46206 -10.34461,17.9167 -11.88756,10.84526 0.36712,3.29372 -16.51937,11.84654 -15.13129,6.76216 -4.90704,-7.24971 7.11053,2.55062 3.37683,-4.67189 -18.05765,-5.78976 -10.80677,-8.36163 2.53876,-4.74651 -5.17204,-3.56503 -24.41382,-3.35632 4.00418,-4.14753 -23.31638,-0.66553 -8.28107,-5.9315 4.55852,-3.70281 -4.94278,-2.47856 -20.78345,-3.48811 1.51281,-5.66546 -6.96765,0.62506 -7.15882,-6.72556 -0.96155,-12.32247 -10.03788,5.29732 -5.48552,-7.18156 -7.66306,1.15865 -12.86883,8.20304 -23.12432,12.93511 -17.00485,-8.12213 -2.37216,4.17867 -3.62153,5.25542 -3.83382,6.61354 -0.19657,1.25759 -2.7029,0.40517 -3.21988,-0.95137 -0.517,-1.35654 0.82378,-2.75607 -0.46095,-4.20715 -1.24711,-1.40858 1.99974,-5.76964 2.0485,-5.69848 0,0 0.38116,-0.52345 -3.28763,2.43775 -2.15415,1.04009 -1.15037,-6.55187 -1.46902,-6.78522 -0.2307,-2.68863 -0.1137,1.00534 -0.85535,5.88678 z m 101.27362,361.65867 c 0.1671,0.55057 0.2566,1.05869 0.2789,1.50354 0.1693,-0.42435 0.086,-0.92219 -0.2789,-1.50354 z M 625.04118,467.15437 c 0.7163,0.001 1.62055,0.14574 2.76984,0.50263 5.35052,-0.9655 0.72038,9.09135 -1.59306,1.46053 -1.52236,5.2936 -6.19084,-1.97119 -1.17678,-1.96316 z m 0.26621,8.84539 c 0.90491,0.0378 1.56803,1.04542 1.78596,3.78696 1.45084,-2.88021 1.6846,-4.65876 7.18739,-1.71486 4.25956,7.61461 -5.19538,-0.63161 0.90163,6.54023 -1.62535,2.17083 -4.40667,-0.993 -0.78611,6.65818 -5.02329,-2.78765 -6.01929,-4.14166 -2.48244,3.44874 -8.5813,-4.25191 -10.39827,8.81795 -12.58497,14.17685 -5.17594,11.07683 -17.46312,-38.54925 -4.46852,-13.10841 -2.37204,-10.0761 0.82421,-11.37837 1.98542,-14.26572 3.16719,-1.03315 6.47083,-5.60516 8.46164,-5.52197 z m 32.71499,3.10254 c 0.26982,0.0166 0.56249,0.0637 0.83642,0.11279 0.80362,1.38607 0.12922,3.04146 -0.64358,4.25514 -5.05012,8.19183 -14.64702,12.02903 -17.887,17.38848 0.28357,-9.07698 -2.60083,0.42865 -3.72871,3.96828 -4.40085,7.9839 -12.81818,9.95454 -11.18734,-3.92732 6.17492,-10.6462 0.0425,9.9949 6.63843,3.00329 1.0556,-9.0675 9.44474,-8.91042 12.29095,-17.97554 -0.99684,7.16295 5.31614,-7.33988 13.68083,-6.82512 z m -28.4562,1.86252 c -0.38622,-0.004 -0.43831,1.08976 1.00427,3.29413 0.10216,-2.18614 -0.61807,-3.28957 -1.00427,-3.29413 z m 25.74806,1.49994 c -0.34511,-0.015 -0.70201,0.24186 -0.0331,0.7634 0.71154,-0.46163 0.37823,-0.74842 0.0331,-0.7634 z m -28.30538,-0.73137 c -0.75809,-0.20006 -1.9999,1.9401 0.0384,3.5199 0.68556,-2.44464 0.41643,-3.39987 -0.0384,-3.5199 z m 10.18969,0.48049 c 1.71538,4.07186 -2.36869,0.66325 0,0 z m -17.18471,-0.55464 c -1.29263,-0.10115 -3.43839,2.1596 0.004,3.44191 1.25363,-2.45456 0.772,-3.38122 -0.004,-3.44191 z m 32.01468,3.37808 c -1.03158,-0.1363 -1.6368,9.72391 0.46473,0.74676 -0.15796,-0.51194 -0.31736,-0.72729 -0.46473,-0.74676 z m -13.86884,0.58355 c -0.34497,6.69366 -4.62639,0.39435 0,0 z m -17.30729,2.26992 c -1.27375,-0.14246 -3.26735,4.40307 0.66744,4.00611 0.34626,-2.90136 -0.0885,-3.94135 -0.66744,-4.00611 z m 6.1802,0.34472 c -0.64976,0.0155 -1.3335,1.43646 0.32716,3.0353 0.66483,-2.19638 0.17816,-3.04735 -0.32716,-3.0353 z m 20.67983,1.96832 c -0.78768,-0.16361 -3.36228,2.91911 -0.69679,2.83789 1.02968,-2.016 1.05484,-2.76352 0.69679,-2.83789 z m -24.33399,0.28231 c -0.56429,0.10589 -1.01589,1.5015 0.56777,2.77805 0.3892,-2.16745 -0.12888,-2.86041 -0.56777,-2.77805 z m -2.45573,5.47671 c -0.97233,0.10021 -2.40038,3.13377 0.58766,2.32001 0.20934,-1.79812 -0.14568,-2.36556 -0.58766,-2.32001 z m 15.36443,3.72619 c -0.60921,0.0921 -1.30566,0.6092 -0.28204,1.21149 1.41316,-0.97073 0.89123,-1.3036 0.28204,-1.21149 z m -19.78847,0.40311 c -1.42808,-0.0961 -3.62438,4.38198 0.58123,5.11138 0.70433,-3.74903 0.16679,-5.06103 -0.58123,-5.11138 z m 16.92944,4.67367 c -0.90356,-0.17057 -6.13605,3.29903 -1.06863,1.71274 1.20893,-1.18451 1.36982,-1.65588 1.06863,-1.71274 z m 9.78148,1.07465 c 0.68194,0.0616 1.40397,0.87555 2.09126,2.92066 l 0.12803,3.21786 c -6.13024,2.98835 -4.65474,-6.35854 -2.21929,-6.13852 z m -20.64968,1.74244 c 0.584,0.0634 1.19151,0.86787 1.93526,2.99037 1.79577,12.51425 1.24668,4.33396 10.46902,7.2614 -4.76672,-11.16957 11.75375,-5.08966 7.96914,-0.34247 -8.29947,-9.37276 -1.45768,7.42541 -6.87844,5.17003 -9.98816,-5.46192 0.33349,1.4386 -2.25806,7.971 -10.02661,-10.9287 5.27786,7.94734 -1.73155,13.46242 5.49444,-0.34858 8.55982,7.36702 13.9477,10.8159 2.50333,12.05742 0.68112,-4.07539 3.68949,3.9843 l 0.63252,3.04855 -1.36412,0.59092 c 1.40691,5.41714 -4.37284,9.79405 -8.05693,2.36546 2.40538,8.21132 -10.73323,3.6736 -12.30726,-0.15174 0.0449,12.48939 -4.81905,-10.82288 -3.90485,0.97777 -2.10823,8.88794 -2.98726,-5.52274 -3.08062,-6.55831 -2.58434,-9.03976 -4.06544,-31.21477 -4.02042,-33.36578 4.87971,-1.16601 -3.98548,-8.97284 -3.27901,-15.34127 3.33178,4.49988 6.1525,-3.10481 8.23813,-2.87855 z m 6.04677,57.16614 c -10e-4,-0.43484 -0.005,-0.8144 -0.0183,-1.33926 -0.19456,0.41674 -0.17156,0.87772 0.0183,1.33926 z m 3.4586,-20.65339 c -1.14035,0.0723 -2.37482,0.48992 -3.76873,1.3661 1.68063,-0.1855 2.88796,-0.6731 3.76873,-1.3661 z m 38.51731,-33.66362 c 13.88581,0.48026 29.39755,6.22679 32.91715,20.47305 3.90235,15.38628 -16.12991,17.80487 -21.45252,29.05044 -2.94567,13.97421 -1.08599,-11.55172 -3.97808,-1.74057 4.54657,10.55704 -20.85815,12.63427 -11.02226,6.36687 -7.71445,-8.61664 2.90144,-23.35536 -7.59773,-25.83699 6.72054,6.663 -0.45885,4.38988 0.47037,9.42788 7.48265,15.66357 -8.2561,4.27573 -12.13966,-0.48864 2.98105,4.50231 -0.41055,2.55579 -5.44007,-0.65677 2.47053,-1.47535 1.01768,-2.36318 -3.57683,-6.57986 8.62211,-1.75471 -3.55026,-1.21019 -1.13417,-9.11251 10.88989,6.62131 -4.2232,-9.7306 7.91679,-12.35265 9.26206,3.72919 2.61474,-8.15483 11.16362,-2.57481 2.68201,-4.90135 9.17363,-2.52801 13.87339,-5.97544 z m 14.61766,4.19092 c -6.58394,0.62285 -2.3295,16.88783 -0.21714,3.24112 l 0.43795,-2.16077 z m -10.56304,0.19165 c -1.06422,-0.0399 -3.08823,5.15605 0.51298,2.27852 0.10868,-1.66965 -0.15823,-2.26521 -0.51298,-2.27852 z m -45.64939,-1.13997 c 5.11832,1.29873 -1.53163,3.05908 0,0 z m -5.19275,-0.18714 c -1.53364,0.2081 -4.1228,3.92338 -0.0544,4.77786 1.52601,-3.75148 0.97458,-4.90272 0.0544,-4.77786 z m 44.1493,3.10167 c -1.05451,0.2073 -0.75192,2.60205 3.65802,4.70954 -1.20319,-3.722 -2.83785,-4.87076 -3.65802,-4.70954 z m 25.58726,3.44329 c -0.93005,-0.20209 -2.44156,8.95195 0.54465,4.19199 0.0105,-3.0037 -0.23462,-4.12462 -0.54465,-4.19199 z m -31.54155,-1.06304 c -1.56688,-0.22913 -2.26795,4.44774 2.2623,4.26654 -0.6632,-3.0604 -1.55008,-4.16238 -2.2623,-4.26654 z m 11.37647,3.09421 c -1.32746,-0.32084 -4.79705,9.58505 -0.30483,6.14369 l 0.56407,-1.54343 c 0.40798,-3.24918 0.18278,-4.49334 -0.25924,-4.60026 z m -19.40843,0.45785 c -1.1035,-0.0672 -1.43907,1.04555 2.2556,3.53965 0.71932,-2.22519 -1.1521,-3.47243 -2.2556,-3.53965 z m -9.07276,0.21809 c -1.73262,0.19013 -2.1593,3.07379 3.9535,5.83136 -0.469,-4.51121 -2.6059,-5.97924 -3.9535,-5.83136 z m 21.50632,2.31012 c 3.38311,3.53324 -3.90954,20.94843 4.19444,9.97193 0.82611,-2.49825 -1.80783,-8.53153 -4.19444,-9.97193 z m -42.79336,-1.7426 c -1.4981,0.21159 -3.40743,3.8768 0.97446,3.98119 0.48892,-2.75692 0.0153,-3.83267 -0.66909,-3.96794 -0.0941,-0.0186 -0.20549,-0.0274 -0.30537,-0.0133 z m 58.66206,2.66079 c -1.45037,0.21677 -7.50398,13.82439 -0.27846,3.77384 0.70219,-2.8542 0.68475,-3.83453 0.27846,-3.77384 z m -55.54041,-2.3341 c -0.66456,-0.0116 -1.29531,1.13575 0.50304,2.50755 0.54714,-1.77438 0.0138,-2.49853 -0.50304,-2.50755 z m 33.58965,4.09655 c -0.83987,0.0572 -0.59996,1.23754 3.22482,4.1171 0.71619,-2.40797 -2.14499,-4.19058 -3.22482,-4.1171 z m -87.22303,-3.67095 c -0.21015,-0.0248 -0.39939,-0.0165 -0.57419,0.0133 -1.3985,0.2382 -1.40632,2.17852 4.21563,5.07791 -0.0245,-3.37066 -2.17032,-4.91793 -3.64144,-5.09123 z m 117.3061,8.38014 c -2.39881,-0.0471 -8.62606,9.80286 0.79507,1.94659 0.0912,-1.40528 -0.2415,-1.93572 -0.79507,-1.94659 z m -81.99708,-3.36765 c 1.25062,-0.12158 6.21883,-0.2581 7.29475,1.9869 4.16608,5.03025 0.74688,9.09336 -7.57055,9.54024 1.05169,-6.60957 -2.8537,-2.15642 -1.76909,0.50179 -1.07135,1.95347 -12.98795,6.71042 -21.5126,1.81476 3.43253,-3.56405 -8.37615,-5.04855 -2.9254,0.24555 -13.01073,2.41092 -10.79852,-12.03322 -0.53247,-7.53694 5.14189,-10.47101 2.60339,0.78211 7.37009,0.24339 -1.80955,-11.00509 7.59677,-0.69576 9.69706,-7.55338 3.96084,3.75104 6.66,1.07734 9.94821,0.75769 z m 45.91001,2.1838 c -1.50613,-0.0461 -2.51138,1.33269 2.04316,3.14802 0.6027,-2.21209 -0.8717,-3.11218 -2.04316,-3.14802 z m 45.42543,2.77465 c -1.77721,0.16979 -5.56499,9.39271 0.77025,1.63958 -0.0451,-1.24641 -0.36006,-1.67877 -0.77025,-1.63958 z m -74.93892,-2.98483 c -1.33919,0.0143 -3.41747,5.92163 0.52326,6.44732 0.68745,-4.83676 0.17821,-6.45481 -0.52326,-6.44732 z m 1.80233,0.76658 c -0.60406,0.0371 -0.81072,1.30917 1.26147,2.65518 -0.085,-1.95571 -0.79163,-2.68407 -1.26147,-2.65518 z m -17.21624,-0.70899 c -2.04169,-0.24683 -6.82853,3.87839 0.55942,2.08934 0.47475,-1.43274 0.12116,-2.00706 -0.55942,-2.08934 z m 10.75229,0.73437 c -1.39242,0.0756 -2.69249,4.24163 0.82032,6.65142 l 0.73677,-1.11527 c 0.11969,-4.17291 -0.72164,-5.5815 -1.55709,-5.53615 z m -18.86079,0.17568 c -1.92205,-0.16155 -5.68814,4.0285 0.86976,1.98808 0.22628,-1.42077 -0.22908,-1.93423 -0.86976,-1.98808 z m 46.24691,2.3514 c -1.82877,-0.0628 -1.71493,3.26927 4.49112,4.89866 -1.59425,-3.62351 -3.39384,-4.86096 -4.49112,-4.89866 z m -52.87342,-1.22406 c -1.87611,0.007 -6.51296,2.18321 -0.4214,1.77908 1.5497,-1.34191 1.27416,-1.78241 0.4214,-1.77908 z m 37.65871,1.97865 c -0.92134,0.17264 -2.33194,4.57067 0.50641,3.31077 0.22307,-2.599 -0.0877,-3.38924 -0.50641,-3.31077 z m 42.93112,2.09276 c -1.38574,0.32404 -7.72714,8.69863 -0.39814,2.12426 0.80135,-1.67702 0.78614,-2.21499 0.39814,-2.12426 z m -75.84994,-1.37997 c -2.97483,-0.0519 -6.2898,6.10285 2.17581,1.85355 -0.50713,-1.35643 -1.34287,-1.83901 -2.17581,-1.85355 z m 55.92886,3.9571 c -1.08634,0.17142 -1.7304,2.92027 1.21176,3.80029 l 0.51277,-0.36016 c -0.29489,-2.72592 -1.07271,-3.54298 -1.72453,-3.44013 z m 26.66746,1.46337 c -3.04485,-0.23701 -7.48121,7.9401 -0.65365,2.72503 l 1.84858,-2.0613 c -0.34168,-0.44073 -0.75995,-0.62988 -1.19493,-0.66373 z m 11.40286,0.72436 c -1.6767,0.19657 -9.52961,7.97708 -0.54917,2.07946 1.00414,-1.60251 1.01862,-2.13451 0.54917,-2.07946 z m -102.16235,-3.97518 c -1.31288,0.0808 -4.39519,2.52589 -0.15752,1.86701 0.99604,-1.45989 0.75428,-1.90372 0.15752,-1.86701 z m 36.93016,2.02351 c -0.28299,0.0616 -0.18774,0.64061 0.89964,2.18059 1.68386,-0.25591 -0.0326,-2.02877 -0.74696,-2.17396 -0.0536,-0.0109 -0.11224,-0.0154 -0.15268,-0.007 z m 20.62178,2.4247 c -1.54801,-0.10066 -1.89632,0.95847 3.56,3.4433 0.73577,-2.08218 -2.01198,-3.34263 -3.56,-3.4433 z m -28.17264,-1.14627 c -1.14347,0.24651 -1.22034,4.27722 2.53803,7.60554 l 0.40483,-1.39738 c -0.88305,-4.77083 -2.16049,-6.37682 -2.94286,-6.20816 z m 48.80947,4.98657 c -1.48214,-0.0172 -3.72679,4.48417 -0.0443,7.18753 l 0.42146,-0.89951 c 1.11066,-4.62985 0.51209,-6.27772 -0.37719,-6.28802 z m -43.35417,-0.27551 c -1.30946,0.18386 -2.22653,3.92709 1.77105,4.13049 -0.15967,-2.87636 -0.85345,-3.96256 -1.50386,-4.1189 -0.0894,-0.0215 -0.17989,-0.0238 -0.26719,-0.0116 z m 59.50013,2.7354 c -1.90561,-0.086 -5.9071,6.50457 0.82159,1.33588 -0.0598,-0.96027 -0.38183,-1.31602 -0.82159,-1.33588 z m -29.35922,-1.12129 c -1.27338,-0.0631 -1.52413,1.20462 3.03894,3.99432 0.53049,-2.53753 -1.76556,-3.93127 -3.03894,-3.99432 z m -22.64631,-0.7152 c -0.62331,0.0387 -1.19311,1.68423 0.49649,3.53978 0.50933,-2.64085 -0.0123,-3.56991 -0.49649,-3.53978 z m 3.73741,1.11825 c -0.47683,0.24003 0.57453,5.95045 2.46513,9.285 1.27397,-1.01035 -0.51701,-2.96102 -0.36043,-4.03102 -1.18435,-4.01005 -1.85493,-5.37972 -2.1047,-5.25398 z m 37.44128,1.70152 c -0.94116,0.0197 -5.42875,11.33485 -0.33498,3.3125 0.57981,-2.43802 0.5985,-3.31804 0.33498,-3.3125 z m -43.99796,1.34094 c -0.77654,0.0285 -1.4069,1.25464 0.45667,3.5763 1.24268,-2.43571 0.31989,-3.60481 -0.45667,-3.5763 z m 3.62296,1.99284 c -0.60989,-0.0674 -0.84144,1.48686 1.16538,4.86904 0.43279,-3.11283 -0.55547,-4.8017 -1.16538,-4.86904 z m -10.77708,0.71776 c -0.9141,0.0934 -1.74819,2.48564 0.46341,5.18274 l 0.43313,-0.28714 c 0.58788,-3.66791 -0.18556,-4.96824 -0.89654,-4.8956 z m 18.79951,1.23659 c -0.2953,0.0948 -0.50256,0.77514 0.0566,2.22047 0.84214,-1.4909 0.32308,-2.34226 -0.0566,-2.22047 z m 26.90145,1.35879 c -1.16998,0.15321 -2.97765,2.54275 0.21265,3.03033 0.94591,-2.40528 0.48933,-3.12225 -0.21265,-3.03033 z m -41.18683,-0.86979 c -1.01293,0.19811 -2.21685,4.17799 0.76539,4.39277 0.23748,-3.03579 -0.10467,-4.21948 -0.57455,-4.38449 -0.0646,-0.0226 -0.12332,-0.0215 -0.19084,-0.009 z m 4.27342,1.10327 c -0.46025,-0.0657 -0.73929,1.10736 0.68395,2.74485 0.14232,-1.88915 -0.32598,-2.69384 -0.68395,-2.74485 z m 27.98021,2.05573 c 0.56198,-0.009 1.41448,0.24064 2.60059,0.8777 2.98669,12.30508 -6.53446,-0.817 -2.60059,-0.8777 z m 12.33388,1.30014 c -2.32482,0.15534 -6.77588,5.5774 -0.0146,5.62091 1.87075,-4.33756 1.23228,-5.70227 0.0146,-5.62091 z m -17.75227,-0.694 c 1.00257,0.0533 2.49248,1.56803 4.48456,5.93089 2.77671,9.67999 -5.53646,0.20992 -4.90231,0.16965 -1.59852,-0.96912 -1.4963,-6.20117 0.41775,-6.10054 z m -14.47618,1.36027 c -0.48031,0.021 -0.77357,0.78705 0.59429,2.16733 0.55342,-1.46444 -0.11394,-2.18837 -0.59429,-2.16733 z m -3.27922,0.66075 c -0.11603,-0.0253 -0.20999,-0.006 -0.30702,0.0248 -0.60362,0.19558 -0.716,1.51276 1.34622,4.22678 0.90189,-2.51592 -0.22696,-4.07404 -1.0392,-4.25169 z m -3.49333,0.30728 c -0.63324,0.0723 -1.10032,1.89879 0.4601,5.25908 0.97253,-3.64912 0.17312,-5.33128 -0.4601,-5.25908 z m 55.29847,7.02733 c 3.2089,-0.76167 7.8362,-2.3891 7.43797,1.02087 1.63761,1.9216 -2.04424,11.42698 -1.03654,11.88452 -1.89247,2.68979 -4.32551,1.81307 -7.26633,2.06021 -4.23264,7.67075 1.28666,25.18054 0.35346,36.77458 -0.25656,3.18741 -7.40211,10.31665 -10.25381,17.43077 -1.78027,3.74222 -4.45969,6.13532 -7.67319,7.62125 -3.21349,1.48592 -7.66703,2.36576 -11.08548,4.29909 -9.22515,1.30302 -15.54928,-0.87874 -24.19324,-3.84169 -0.95005,-1.59933 -1.29121,-3.07656 -2.01174,-4.75281 -1.58653,-4.92426 -5.69508,-17.52239 -7.35188,-22.6905 -1.21542,-4.87724 -2.18543,-6.56497 -2.97605,-6.32433 -0.79063,0.24065 -1.07985,3.37702 -1.29069,5.94794 -1.24998,4.79982 0.3807,14.9875 -0.17274,19.83996 -2.90578,-11.75399 -1.72947,-30.54298 -3.43022,-42.55896 1.56122,-5.7391 0.35187,-5.29011 -2.83325,-6.10379 -3.18508,-0.81367 -8.08487,-0.99041 -10.80513,-4.2415 -2.40284,-9.56123 -0.71768,-13.16446 -0.71768,-13.16446 0,0 10.27509,-1.30739 15.897,-1.00941 14.32266,0.75915 28.3141,1.21054 42.76072,1.2024 6.81262,0.94288 19.85555,-1.78169 26.64882,-3.39414 z m -31.05224,82.82231 c -1.78823,1.44945 -2.44684,26.20234 -3.62405,27.10905 -0.82023,-4.59682 -0.5225,-24.98978 -4.3219,-27.30095 1.1874,0.49263 6.26349,0.45027 7.94595,0.1919 z m 28.50833,181.96774 c 0.3851,0.0868 -0.69601,0.66707 -0.96254,0.14944 0.53656,-0.13315 0.83417,-0.1784 0.96254,-0.14944 z"
+       style="fill:#000000" />
+    <g
+       id="0hit"
+       inkscape:label="#g4980">
+      <path
+         sodipodi:nodetypes="ccccccccscscccccccccccccccccccccccccccccccccsccccccccsccc"
+         inkscape:connector-curvature="0"
+         id="path27623"
+         d="m 128.33505,49.404077 c -0.3491,0.03264 -0.73599,0.130707 -1.14618,0.267441 l -2.55978,0.840526 c -3.28153,1.093859 -6.90226,1.105278 -10.20094,2.865433 -0.14549,5.081635 9.2467,11.528212 11.42352,17.803885 -3.98859,4.510933 -14.23509,8.582762 -18.91185,15.129482 -9.189127,5.335554 -8.12598,16.988206 -6.11292,25.903506 0.65946,9.23116 10.44017,14.17747 17.00156,19.67597 4.76716,2.34144 10.40835,2.24112 13.71587,3.24749 3.30751,1.00637 3.01635,5.28304 6.72422,10.04811 9.40365,6.97455 21.09313,17.76918 33.50645,22.5032 15.95602,6.08508 -22.00132,-8.09599 -27.2025,-7.10627 -0.5002,0.4107 -1.28649,2.24307 -2.06311,2.59799 -4.97378,0.54432 -9.1456,1.06472 -13.67767,1.64285 -2.91311,0.36519 -2.6188,0.41743 -6.07471,1.49002 -1.40809,0.11505 -5.22925,-0.39647 -6.5714,-0.30565 -5.50431,-2.09006 26.95539,18.89472 -2.44365,9.05477 -5.77657,8.69805 23.19025,12.63976 -2.02642,20.05803 -9.72112,6.09982 5.29674,6.21025 8.6345,8.06141 -2.01093,3.17927 -12.61328,9.79534 -2.13952,10.65941 15.40829,6.08051 -11.19922,2.92942 -14.36537,7.41192 -9.938018,9.75929 17.83234,5.68921 5.34881,11.53814 -7.48096,1.73568 -2.88906,6.0853 5.42522,5.76907 -3.13684,4.4987 -17.887927,7.29661 -24.413484,9.47503 -7.950393,5.87093 14.331444,5.95753 6.380363,10.35376 -1.997006,8.32079 15.965611,1.02714 21.318811,1.52823 10.14499,0.48049 14.70059,0.71613 24.41349,0.72591 6.84364,-0.241 13.00593,-0.72913 19.71417,0.15282 2.56255,0.18242 8.05865,0.19964 10.6212,0.38206 11.44005,0.0517 19.68366,-0.12473 31.1759,-0.30565 24.32261,-1.39697 48.73746,0.36289 73.01122,-2.17773 15.84138,-0.86792 31.13601,-7.45609 29.57126,-11.9584 -5.34871,-0.0297 -9.62514,-4.13358 -4.77572,-9.9717 -13.16378,5.24606 -1.68106,-4.20264 -1.68106,-4.20264 0,0 -19.93111,1.09864 -26.78224,-1.22258 -2.22226,-5.13034 5.15097,-15.08564 10.04812,-20.66932 8.97012,-9.78949 -9.67956,-3.91124 -7.67936,-9.62785 9.67306,-15.67476 -20.34247,-0.80686 -20.4053,-0.36705 0,0 18.36102,-20.14002 18.49501,-28.01983 -7.99008,7.65618 -9.16286,9.92044 -13.2956,-2.59799 -7.89367,10.70166 -3.28968,-0.59823 -4.39367,-6.26575 -9.4659,4.30384 0.64698,-5.4388 -5.53983,-5.76907 -11.03131,12.75822 -0.19952,-3.40085 -5.84548,-5.80728 -16.53684,2.54305 -1.11987,-3.58403 1.14447,-9.08618 4.4427,-4.35731 9.06241,-14.63039 18.05689,-16.67214 20.57837,-4.67131 -29.04851,-10.48713 6.47291,-9.50559 12.96364,-5.29024 -36.96876,-4.77779 -7.67936,-6.07472 12.63309,-2.5962 -5.7283,-6.71472 -10.69761,-8.5963 -5.98397,-5.894077 -8.81706,-15.784051 -11.95841,-23.878599 -15.26703,-13.189436 7.15177,-7.717197 13.8687,-13.601251 9.5385,-5.317411 2.36625,-8.921333 -4.96675,-9.398618 -9.29566,-0.418796 -18.25669,-2.326798 -24.5281,4.202634 -1.86986,12.738865 -1.2614,9.553164 -16.39028,1.26079 -5.7966,-0.283737 -24.10271,-4.192535 -31.36693,-1.031556 -3.79569,1.651675 -6.07827,-0.875908 -12.07302,1.375408 -5.9453,12.868801 -19.95103,-1.552487 -29.64767,-8.481679 -2.85236,-1.442858 -4.01308,-3.552134 -6.45677,-3.323902 z"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path27621"
+         d="m 128.10581,52.193098 c 12.54372,1.843633 17.82937,15.880711 25.8653,15.893597 7.26617,5.44209 10.54022,-9.403703 17.07798,-5.234189 13.49462,-4.553271 23.84238,-0.850516 36.21906,-0.420264 7.18615,4.671728 23.28934,14.686283 16.84874,6.303951 0.17154,-12.808931 19.53819,-11.810092 28.00483,-9.971704 11.59301,0.116023 -4.08114,7.262934 -8.32886,8.252445 -7.84433,-0.723892 -15.42113,1.142517 -8.56474,8.210815 0.7262,1.190199 1.39406,1.911438 2.15776,2.634486 3.82966,1.101415 5.11273,15.207777 13.26407,25.828805 23.7554,4.68426 13.93495,7.29508 -0.55465,6.39044 -0.67573,4.7391 41.41452,5.28666 5.50314,5.80062 -4.3798,1.10877 5.15809,5.14122 10.82261,7.3114 -2.05305,1.99869 -9.22237,3.8601 -10.87409,6.25641 -2.72117,3.94784 -6.53047,7.76841 -8.28993,10.09994 -11.50303,12.36438 -23.07036,21.01152 -35.74804,29.20903 -11.70929,8.53663 -9.31737,-10.29031 -3.51493,-15.01487 7.03632,-7.98447 16.65538,-18.13648 12.44007,-29.77387 -7.95387,-5.67173 -18.47819,-9.03577 -28.21905,-7.13289 -7.55804,-1.19185 -37.9967,23.78408 -16.07132,0.87873 6.72557,-19.504756 -3.15304,-37.835527 -19.76568,-45.006388 -8.57118,-6.506044 -23.42457,-0.537533 -29.38023,-4.661103 -4.84863,-3.357082 -12.00824,-13.065062 -10.20094,-13.448428 z"
+         style="fill:#a05a2c;fill-opacity:1;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path27617"
+         d="m 233.75273,83.139766 c -3.03205,-0.171382 -9.20759,6.227539 -9.20759,6.227539 -4.08128,5.314696 -5.67041,7.121126 -17.2308,-3.323902 -13.09802,-3.599398 1.47615,3.060557 7.9468,10.00991 3.49242,2.771966 -14.66632,11.623357 -4.6611,12.111227 10.62699,-17.611744 13.68612,-8.866586 21.66266,-2.36876 8.81673,2.80915 -0.26783,-6.101672 -4.12622,-7.144475 -8.36076,-3.986566 1.59805,-10.015888 6.18934,-15.396922 -0.17139,-0.07372 -0.37095,-0.103186 -0.57309,-0.114556 z"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path27615"
+         d="m 201.19344,118.40368 c 7.26562,-0.0979 14.39482,3.55402 18.26235,8.00991 1.82946,8.03315 -5.38086,14.32057 -8.97835,20.64442 -6.23632,6.99213 -12.27645,16.8679 -9.36042,25.94171 -9.21091,1.53627 -18.84591,2.52144 -24.87195,-6.6478 -3.29423,-9.49527 -11.46291,-16.78798 -9.55144,-27.69918 1.06573,-11.30585 12.80569,-15.24461 21.93011,-18.37697 3.79372,-1.0046 8.21033,-1.81335 12.5697,-1.87209 z"
+         style="fill:#9e6947;fill-opacity:1;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path27613"
+         d="m 106.71059,119.43524 c 8.04335,-0.52669 44.68951,9.9119 52.22727,11.2707 5.75323,1.71404 -13.19442,4.05365 -28.08123,2.33055 0.56492,-0.67323 3.24749,-2.64115 3.24749,-3.66775 0,-2.46267 -1.60004,-4.27337 -4.96675,-4.81393 -11.96836,-1.92163 -12.43563,-2.08111 -13.14278,0.80232 -0.43956,1.7923 1.30943,3.76424 2.6744,4.92855 -7.09399,-3.97573 -14.91749,-10.65668 -11.9584,-10.85044 z"
+         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path27611"
+         d="m 192.67355,126.92357 c -1.84587,0.0512 -3.60869,0.24268 -5.08137,0.45847 -11.80089,-1.50685 -14.22881,9.79047 -9.284,19.02647 5.49484,5.63906 6.82481,17.96694 15.62616,20.36367 8.97771,-5.44432 8.25004,-18.77914 12.45508,-27.8138 4.01389,-10.23655 -5.71711,-12.257 -13.71587,-12.03481 z"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="cccssc"
+         inkscape:connector-curvature="0"
+         id="path27609"
+         d="m 167.29333,128.79565 c 4.60462,0.0867 -5.95743,11.43387 -3.15948,16.84874 3.01741,4.4569 10.59852,21.91177 8.40526,20.32547 -3.11997,1.5269 -33.28899,-20.48466 -36.43301,-28.29433 -1.82186,-4.52546 19.48303,-0.24898 22.98459,-3.22543 1.5382,-1.30753 7.57529,-5.65753 8.20264,-5.65445 z"
+         style="fill:#a05a2c;fill-opacity:1;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path27607"
+         d="m 189.96094,128.79565 c 4.95913,-0.0274 10.23796,1.2348 13.52484,2.94185 3.49996,3.01085 0.43417,7.77034 -0.53488,11.23249 -3.02113,5.59456 -3.80647,26.9744 -12.95175,18.95006 -4.5711,-8.01249 -10.38922,-15.68372 -12.72252,-24.71913 0.42995,-6.2004 6.30829,-8.37003 12.68431,-8.40527 z"
+         style="fill:#917c6f;fill-opacity:1;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path27605"
+         d="m 186.06395,137.0863 c -4.3103,0.20257 1.10743,13.23328 2.06312,1.9485 l 0.19102,-0.34386 -0.57308,-1.18437 c -0.66975,-0.29488 -1.23517,-0.44122 -1.68106,-0.42027 z"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path27603"
+         d="m 197.22004,137.54477 c -1.23766,-0.15226 -2.57113,12.36681 0.72591,6.03651 l 0.19103,-2.25414 c -0.22866,-2.7165 -0.5704,-3.73974 -0.91694,-3.78237 z"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path27601"
+         d="m 243.98389,153.24734 c 2.30328,3.07326 -0.72574,7.75354 -0.19103,9.81888 -0.0985,0.727 1.8328,3.52212 7.14448,-3.09467 -1.6433,4.17509 -0.61812,7.92132 4.58469,5.38702 -2.4372,4.25679 -0.68005,9.47219 -1.79567,11.2707 3.35985,-0.69224 4.31957,-2.07528 6.11292,-4.43187 0.54732,3.31537 3.31978,13.98295 12.30226,3.43852 -1.4228,3.56477 -12.43819,20.97822 -19.42183,24.66267 2.17377,3.94399 10.74417,-4.08374 19.14109,-4.73752 9.78406,-2.34605 -2.14981,7.98514 3.87208,9.98996 18.02466,-2.40114 3.03868,7.28924 0.53488,12.49328 -3.64875,4.23831 -9.29415,15.4806 -0.76412,15.62616 23.11642,0.63296 25.29433,-3.04243 16.46669,5.53984 6.68588,1.82022 8.94429,-2.56562 7.9468,-0.91694 -0.99749,1.64866 -3.08473,5.44132 0.26744,7.985 14.56444,1.45913 -5.93862,7.78676 -8.36706,9.20759 -14.93038,1.61259 -20.16086,16.96057 -35.24007,17.22542 -8.57685,-1.47559 -24.56409,4.94219 -32.84203,9.82798 -11.74701,6.93329 -24.00179,-11.27973 -34.18594,-6.30122 -22.45408,0.20195 -49.22637,7.10706 -65.35231,-3.00659 -4.70029,-4.03843 -33.824361,-3.28113 -24.01976,-18.24226 -14.129029,-3.16432 -13.270579,-5.82599 -1.069761,-8.02321 10.454761,-3.23877 27.808291,-8.06613 10.583001,-10.88865 -6.49797,-0.89299 6.05612,-0.38926 3.89698,-7.83218 -22.299289,-2.42217 -4.00197,-8.9975 5.19599,-9.3222 11.77615,-1.58017 5.22955,-3.26114 -3.78237,-7.79398 7.34365,-6.61866 12.41477,-10.00855 0.11455,-11.42352 -16.683384,-0.2404 11.14097,-5.40433 8.97836,-12.79893 -17.17299,-9.04401 -10.41322,-14.95738 3.89698,-6.15113 5.48161,-4.43288 -19.40358,-17.12359 -6.60959,-13.02817 5.42047,-1.28051 15.39181,-3.4788 20.97496,-3.20928 0.0778,3.9092 1.66457,11.16142 4.20263,13.48663 -1.9272,3.1737 1.01858,4.79197 2.13953,10.04812 4.0522,9.31639 7.69108,3.50129 27.69918,-4.69931 2.26427,-1.33204 5.16469,-6.22066 4.6611,-10.12453 4.10467,2.15965 6.27203,1.49437 13.83048,2.02491 10.36367,0.76954 23.91753,-8.55945 31.84579,-14.36707 4.47166,-3.25227 6.44368,-7.14185 9.45464,-7.52483 2.61975,0.79349 5.7283,0.53741 7.79398,-0.11456 z"
+         style="fill:#784421;fill-opacity:1;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         sodipodi:nodetypes="cccccccccccccscccscccccccccccccccccccccc" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path27599"
+         d="m 146.17714,161.49978 c 4.34022,0.45555 15.4445,5.35787 21.12779,6.95345 5.29852,0.6774 9.04844,2.60765 10.88864,3.62955 1.13531,1.75497 -3.21821,1.03213 -5.80728,1.87208 -2.58907,0.83996 -7.48939,0.43125 -11.42352,2.17773 -3.70687,1.64554 -8.82798,1.65714 -11.9202,-0.0764 -3.09221,-1.73354 -4.99981,-6.80214 -4.69931,-11.30891 -0.74756,-1.7914 0.5084,-3.15679 1.83388,-3.24749 z"
+         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path27539"
+         d="m 178.04074,174.10769 c 0.67545,0.0216 1.19921,0.22112 1.49003,0.76411 1.22064,1.0694 -0.47515,5.7044 -3.05646,7.22089 -1.29516,1.37576 -3.96234,1.37062 -6.83883,3.05646 -2.8765,1.68585 -6.32885,3.46205 -9.55144,4.43187 -3.22261,0.96981 -6.16254,2.7331 -7.67936,0.61129 -4.00251,-5.59885 -3.77586,-6.02037 -3.17108,-12.03481 7.74338,2.17032 18.61624,-3.18611 24.87195,-3.55314 1.30328,-0.0764 2.80945,-0.53276 3.93519,-0.49667 z"
+         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path27619"
+         d="m 138.6506,71.066745 c 3.23113,0.05966 6.16046,0.673118 9.09297,1.375407 11.60531,3.134511 7.38968,2.394847 12.5697,5.004955 8.28739,5.059751 12.19158,13.85951 14.63281,22.847043 0.35424,1.79882 0.66016,5.5855 -0.0897,6.43358 1.47906,7.13816 -2.64458,14.37053 -8.51989,19.71418 -6.6589,7.44867 -16.3042,-2.7319 -24.51479,-2.95686 -9.45914,-1.45174 -19.07053,-3.12692 -28.23406,-5.08137 -14.123382,0.3335 -14.022531,-13.30186 -12.49329,-19.026465 2.1863,-12.180108 19.55033,-23.727821 26.66763,-26.361977 4.12287,-1.525919 7.65751,-2.008156 10.88864,-1.948493 z"
+         style="fill:#a05a2c;fill-opacity:1;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1" />
+    </g>
+    <g
+       id="0trap"
+       inkscape:label="#g5080">
+      <path
+         sodipodi:nodetypes="cccccccccccccccccccccccccccccc"
+         inkscape:connector-curvature="0"
+         id="path4735"
+         d="m 419.64206,77.888594 c -6.2234,1.303508 -10.76172,6.708028 -16.50489,9.245795 -3.89735,1.938151 -10.21519,7.129843 -4.34215,10.842074 7.00394,6.161577 16.80455,5.425097 25.2025,7.955157 -9.02738,9.3599 -3.47494,23.99232 -4.81887,35.53801 -0.69147,23.30969 3.31601,47.0578 0.005,70.02452 -3.78962,2.67112 -6.62294,-4.75858 -9.55981,-6.09549 -4.55552,-8.70208 -3.96345,3.20792 -7.44175,-0.93437 -3.42342,-2.14502 -7.31285,-7.85103 -11.76738,-4.96675 -0.50835,5.06927 4.96392,8.37457 6.72422,12.26405 -7.17074,13.31481 -15.09703,29.62238 -19.24691,44.18505 -0.41947,9.60739 13.00801,16.91279 20.32775,17.55641 30.07061,4.58728 82.73946,5.9384 94.69446,-0.0255 7.23521,-1.30786 19.20836,-5.76058 25.06953,-10.9787 0.66051,-4.89594 -5.51863,-9.06743 -7.27789,-13.63167 -5.858,-9.96285 -12.67547,-19.27868 -22.4844,-25.52924 -3.76699,-2.09108 -3.1056,-7.02777 0.79963,-8.79959 7.05316,-5.13612 -2.66367,-1.33709 -6.39934,-2.87636 0.76731,-4.2987 -2.18654,-6.33004 -5.05305,-3.30565 -4.76258,3.36086 -8.65751,-3.03743 -8.64115,-7.40697 -4.37088,-24.34285 -5.92444,-49.43062 -7.10799,-74.1956 0.34373,-7.37788 0.28422,-15.4269 -5.65274,-20.5929 7.31196,-2.35887 16.32334,-0.41147 22.80884,-4.69931 2.38493,-4.957531 -5.14735,-7.68376 -6.91524,-11.652758 -5.299,-5.600854 -12.02088,-14.867506 -20.93676,-10.926848 -4.64231,0.509219 -8.1874,3.629328 -8.06141,8.519885 -0.74127,2.809487 -1.2221,10.118365 -1.87209,10.506585 -0.99332,-6.479746 -1.14173,-16.752255 -9.85708,-17.230799 -3.8607,-0.93804 -7.64408,-3.000638 -11.69097,-2.789021 z"
+         style="fill:#784421;fill-opacity:1;stroke:none" />
+      <path
+         sodipodi:nodetypes="cccccscsccccccsccccssccscccccccccccccsccsscssscsssccccsscscczccsccsssccccscczsccccscccscccczzzscccccccccccccccccccccccssscccccccccccccccsssccccczzscccccccccscc"
+         inkscape:connector-curvature="0"
+         id="path4562"
+         d="m 418.57725,-92.795601 c -1.21015,0.91858 -3.73604,-7.834809 -3.73604,-7.834809 1.93127,7.216858 -1.04362,14.883055 -5.26982,0.70228 1.77209,3.838349 -0.13746,12.536892 -7.42449,2.893256 1.21454,1.789435 6.00112,3.456669 7.40884,4.334741 -1.14589,0.55454 -4.34351,3.879921 -4.6229,4.699309 -0.32363,0.949141 -4.47682,-6.392832 -5.29381,-5.860592 -0.32356,-2.199625 5.26474,6.885949 1.47324,9.451934 -0.9724,0.65808 -4.8816,-6.072738 -5.09177,-6.690314 2.1669,6.183901 8.32542,6.001774 3.79278,8.638808 0.43708,1.886802 3.50471,0.08757 0.77609,-0.939179 -0.36377,2.982985 -6.48307,-1.855427 -6.75961,-3.202242 4.86488,7.91913 4.58701,6.725157 4.58701,6.725157 l -7.32747,0.170276 c 0,0 9.14271,-0.22427 9.66715,1.896254 0.65418,2.645098 -10.62394,5.367536 -10.62394,5.367536 1.38764,0.06608 10.11883,-3.650269 9.68077,12.523597 -15.61235,-4.024894 -5.21891,-0.201799 -0.15282,1.566437 -1.54635,3.436623 64.17323,28.158217 -6.94089,3.773581 -1.01559,0.551789 4.57403,-2.672681 7.59039,1.384197 1.29503,1.741755 2.66746,3.529564 3.62954,5.272395 0.96208,1.742843 -0.13217,0.398232 -0.30564,1.337202 -0.2856,1.546141 -3.53973,-3.629022 -8.02321,-0.07641 9.02576,-1.330893 9.74758,10.036978 6.95345,8.634502 -2.71102,-1.360761 -6.80375,-2.357338 -8.48168,-1.490024 -4.77323,0.990476 -0.29828,0.105998 -5.88369,0.916938 -8.36531,-10.645899 1.30042,-1.07845 -5.69266,0.114556 -5.23425,4.983113 -4.18121,-0.962491 -4.86872,-4.389257 -1.87668,9.146233 -0.81431,15.246468 -7.04127,1.268029 1.80316,20.355118 -9.41278,3.164442 -9.47482,2.999005 3.21279,12.101095 1.25275,7.85528 -9.71845,9.825052 0,0 16.43445,-6.01456 7.45389,9.0562 4.3319,-6.356428 3.1523,-5.549402 11.75484,-4.268211 2.4941,-1.691637 1.34333,5.062495 1.3353,5.080005 1.87122,-9.549809 10.67981,-14.510277 6.27391,2.568563 2.33559,-11.989366 11.78384,-6.353357 15.02114,-8.996604 -0.88384,3.360983 -0.78373,4.90058 -0.64323,7.51114 0.48062,-4.209373 0.64809,-6.343088 2.93558,-8.007815 2.68125,-1.951291 4.2425,1.526429 4.96618,6.728207 -1.35768,-13.517162 6.13471,-3.470557 5.69322,6.490987 -0.0512,1.157617 -6.12592,-2.810787 -4.54933,-1.487743 1.57658,1.323056 2.84009,1.703407 4.16728,3.359826 1.32721,1.6564059 2.14599,3.5307868 1.68105,5.6544525 -3.11585,-0.016749 -6.33481,-2.2833348 -5.97549,-1.3976458 0.3593,0.8856769 -0.81753,-0.3132143 0.97053,0.9773824 1.78807,1.2905846 3.79634,2.6607594 4.96675,3.8587821 1.17041,1.19799818 1.53184,2.25751428 0.0381,2.8654321 -6.27133,0.5439645 -12.97939,0.9523566 -16.88695,1.5282305 -3.60212,0.5308584 -1.87965,6.0581845 -1.3372,9.0165572 0.61453,3.351557 -1.14506,5.233517 3.01826,7.373713 3.30936,1.701226 6.72762,3.668572 11.65275,3.400312 -1.97034,4.758177 1.56765,11.581738 0.84053,19.866997 0.75008,5.476237 0.57839,11.021867 0.80232,12.951753 -0.1813,3.111343 1.32168,7.693504 1.3372,12.340462 1.89597,3.271941 3.20278,5.898187 4.58469,8.252444 1.3819,2.35427 2.23406,3.948398 2.10132,4.011605 -0.53098,0.252855 -15.55039,-30.383961 -16.27717,-31.546369 -4.79681,0.656491 7.44888,38.441904 6.61111,38.003143 -0.84266,-0.441328 -13.26258,-38.672154 -14.90024,-34.270569 -0.49124,5.258715 9.17583,36.118823 7.72745,35.756987 -7.20643,-22.117737 -14.00492,-35.449054 -9.85025,-17.08635 4.15468,18.362716 6.19192,25.00981 19.00974,31.149672 15.11848,2.14256 11.75207,2.3002 12.22585,4.31725 0.58934,3.30953 0.22344,4.38694 0.76411,7.41192 0.54069,3.02497 0.5208,6.36291 0.38206,9.74247 -0.13812,3.37959 -0.40117,6.79499 -0.42026,9.85709 0.40186,6.00648 0.15526,12.79763 0.45846,19.75238 0.30322,6.95473 0.20277,12.50771 1.10797,21.05137 0.75958,7.16916 0.33036,14.12343 0.49668,20.5165 0.16631,6.39306 0.0879,12.1731 -1.49003,16.81053 -1.16072,1.6204 -3.28163,1.67812 -4.96675,0 -3.47742,-6.1156 -7.6183,-21.04328 -10.50658,-4.92854 -2.73108,-4.35685 -27.16404,-18.70533 -5.88369,4.81393 -2.56318,3.94976 -11.29161,21.74069 -16.16104,33.92671 -4.86943,12.18602 -10.08572,25.79416 11.02493,28.83167 24.08125,2.76182 57.99406,4.01442 85.52577,3.14554 22.04792,-4.15359 37.36588,-10.90407 39.19582,-15.37976 1.82993,-4.47569 -15.4503,-24.24461 -17.30865,-29.5492 -1.85834,-5.30457 -25.94894,-9.36536 -8.71092,-20.5547 -21.30231,4.38611 3.14934,-15.61848 -10.6212,-5.34881 -13.7642,10.66072 -12.77671,-11.63892 -14.82383,-22.12113 -2.50135,-24.39462 -4.29853,-50.8876 -5.38702,-75.37997 -10e-4,-2.17383 -1.32626,-3.35081 0.22924,-4.04981 1.55552,-0.699 5.96861,-0.917 8.17603,-1.06977 3.14769,-0.47491 3.55995,-0.0263 12.66948,-4.004948 17.49498,-14.187028 24.81658,-44.002671 17.55128,-32.710783 -1.28181,1.990306 -2.7093,4.187009 -3.9734,5.76907 -1.26413,1.582073 -16.56018,21.340797 -17.19259,20.936758 -0.63242,-0.404028 6.98089,-11.278745 7.5942,-15.246765 0.89562,-3.210861 11.05163,-27.938009 2.03365,-12.528825 -2.17059,3.438079 -14.68159,22.553247 -15.74914,24.302289 2.46192,-4.341337 0.81935,-0.115535 11.25075,-23.842108 10.43138,-23.726524 -1.17649,-7.946847 -6.59231,2.105315 -5.41583,10.052174 -7.41721,11.190706 -2.66338,-1.419323 4.75384,-12.610029 7.86995,-23.242943 1.42521,-13.817367 -2.26178,3.307909 -1.17234,-21.426403 -1.15777,-25.534568 0.0149,-4.220533 -0.58916,-11.185963 0.99335,-11.00326 2.15294,0.01748 3.71623,-0.13589 4.12623,-0.458469 2.54986,-0.937588 1.79464,-1.343094 3.20928,-2.292346 0.47615,-1.89069 1.98827,-9.706596 1.64285,-9.7424667 -0.10368,-5.0503005 -2.21625,-6.4286422 -9.2458,-4.77572027 -20.62768,-9.51134003 21.89753,-20.97410803 18.10954,-36.56291503 -7.34961,-4.847046 4.77023,-6.404843 6.26859,-7.486048 0.64457,-0.465132 -16.1905,1.938645 -9.93635,-1.721475 -5.4738,1.387632 5.82567,-11.396447 1.41703,-7.739233 -13.12511,17.048145 -11.96233,-0.879865 -6.49839,-11.898529 -3.21302,4.276099 -7.86125,23.200385 -10.92685,3.629547 -4.48859,8.000442 -13.79092,10.873604 -11.19486,-7.71186 -3.10564,12.462048 -9.9182,13.713539 -11.46116,6.642099 0.36713,3.293716 -16.51757,11.846806 -15.12948,6.76242 -4.90704,-7.249706 7.09581,2.523206 3.36211,-4.699309 -18.05765,-5.789756 -10.78575,-8.352635 2.55978,-4.737515 -5.17204,-3.565031 -24.4446,-3.335014 3.9734,-4.126222 -23.31638,-0.665526 -8.2549,-5.934657 4.58469,-3.705959 -4.94277,-2.478557 -20.80623,-3.515309 1.49003,-5.692658 -6.96766,0.625058 -7.15241,-6.705338 -0.95515,-12.302256 -10.03788,5.297324 -5.46362,-7.194029 -7.64115,1.146173 -12.86884,8.20304 -20.38187,20.000204 -14.26241,-1.057028 -4.55377,9.850872 -6.54889,-1.366681 -6.59794,-0.432997 -0.0668,1.271103 -2.6923,0.401387 -3.20928,-0.955144 -0.51699,-1.356543 6.05144,4.84716 4.76671,3.396087 -1.24711,-1.408588 1.90892,-7.311861 1.95769,-7.240691 0,0 -0.55777,2.260432 -4.22656,5.221632 -2.15416,1.040096 -0.0761,-8.679322 -0.39475,-8.912662 -0.70935,4.873037 -2.04441,4.020439 -2.63292,7.898629 z m 1.56149,172.288837 c 5.18566,-0.03007 11.29372,3.875153 15.09127,3.591342 5.63798,5.762517 5.14815,29.700902 4.77572,39.848612 -0.22146,3.72092 -0.38334,8.55874 -0.0764,13.83048 0.61228,10.50797 0.78647,22.71724 1.87208,30.90847 1.84573,18.15456 0.62279,40.23357 2.17773,58.3784 2.12899,-0.34081 -1.19438,-24.88477 -0.0381,-32.93337 -0.71255,-27.19588 -4.69787,-60.90996 -3.2857,-64.75876 0.35229,-2.97258 1.21056,-30.793298 5.00496,-45.388449 2.52136,-2.291429 9.24489,-3.467641 10.77402,-3.476725 5.46119,-0.03252 15.05886,11.874364 18.91185,16.963359 12.55944,8.234205 -19.05945,4.728985 -23.61116,10.048115 3.16608,-0.67682 5.06677,2.73216 6.49498,4.81393 1.42821,2.08175 1.89469,2.92241 2.21594,6.03651 0.32123,3.1141 0.63927,5.19209 0.38206,9.9717 -0.13032,2.42161 -0.11456,4.08802 -0.11456,4.08802 0,0 3.19667,35.37742 4.39366,52.91498 2.50833,10.10646 0.25806,36.76433 17.72748,21.58625 -5.29858,12.38068 12.3323,3.35508 2.40696,9.74247 -5.31433,7.21968 5.35043,8.91387 12.03481,15.43513 6.68438,6.52126 11.16761,15.43611 14.03902,19.4439 2.87141,4.00779 6.40976,7.36344 5.58809,11.23037 -1.03431,4.86767 -41.14692,20.74953 -71.90228,14.97136 -30.80247,-4.91626 -84.32031,4.83167 -59.82053,-36.51445 4.3484,-9.80247 7.26089,-17.77539 14.13613,-28.95997 -14.40527,-15.82288 -4.64969,-12.63366 4.27904,-3.01825 3.73348,0.37192 0.48669,-16.04366 8.36707,1.64284 6.09809,7.81184 9.80569,2.41978 9.51323,-0.64949 2.23431,-20.54605 -1.17715,-41.35085 -1.45182,-61.24384 1.47902,-16.47493 -3.907,-35.10676 6.6096,-42.29378 -2.92282,-4.14361 -19.96947,-1.62864 -25.71248,-7.335507 -10.51941,-4.195017 7.79773,-12.53094 13.02817,-15.626157 1.67819,-2.408748 3.83221,-3.233846 6.18933,-3.24749 z"
+         style="fill:#000000;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="zzsz"
+         inkscape:connector-curvature="0"
+         style="fill:#88aa00;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         d="m 376.20574,-22.586177 c -41.14968,-0.941903 -12.02182,-15.867348 7.88562,-16.168691 19.90745,-0.301354 21.48793,-0.860161 20.49613,6.110624 -1.39619,9.813037 12.76795,10.999971 -28.38175,10.058067 z"
+         id="path4646" />
+      <path
+         sodipodi:nodetypes="ccccczc"
+         inkscape:connector-curvature="0"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 422.6515,-90.632559 c 4.25956,7.61461 -0.46585,1.066167 5.63117,8.238006 -1.62536,2.170833 -10.834,-2.084433 -7.21344,5.566757 -5.02328,-2.787639 -6.01928,-4.141664 -2.48243,3.448739 -8.58129,-4.251916 -10.39826,8.817951 -12.58497,14.176857 -15.74914,-10.624687 -10.18108,-16.641184 -2.4831,-27.37413 7.69798,-10.732946 16.56332,-15.23949 19.13277,-4.056229 z"
+         id="path4568" />
+      <path
+         sodipodi:nodetypes="zccczz"
+         inkscape:connector-curvature="0"
+         style="fill:#88aa00;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 416.30129,-96.952318 c 16.87208,-0.508216 28.59311,77.385228 39.06215,100.9861439 -19.40711,17.1444941 -4.0266,-6.7059855 -15.23261,2.6517 -27.56614,36.1472701 -34.81405,-18.4539209 -37.31231,-48.8595949 -0.7827,-7.029225 -6.87901,-19.242305 -6.5533,-27.832073 0.32571,-8.589768 3.16398,-26.43796 20.03607,-26.946176 z"
+         id="path4604" />
+      <path
+         sodipodi:nodetypes="zzccccz"
+         inkscape:connector-curvature="0"
+         style="fill:#88aa00;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 458.11308,-61.782074 c 17.52028,-0.893342 32.96597,6.764046 35.14662,22.188086 2.18066,15.424027 -19.09563,21.539858 -24.41824,32.7854219 2.86981,9.8466581 23.01658,6.85960324 -19.60859,12.0237753 -13.07292,1.8422268 4.04976,-2.3582797 -14.78004,-25.6291962 -4.26187,-2.649083 -11.24836,-11.973539 -10.15107,-16.349144 0.052,-14.213632 16.29103,-24.1256 33.81132,-25.018943 z"
+         id="path4610" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         d="m 471.87323,-53.475114 c -6.58395,0.622858 -2.32952,16.88784 -0.21716,3.24112 l 0.43796,-2.160771 z"
+         id="path4612" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         d="m 461.31018,-53.283462 c -1.06422,-0.03998 -3.08823,5.156055 0.51298,2.278531 0.10868,-1.669659 -0.15823,-2.265217 -0.51298,-2.278531 z"
+         id="path4614" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 407.24166,-55.311954 c -1.53365,0.208096 -4.12282,3.923384 -0.0544,4.77786 1.52601,-3.751488 0.97458,-4.902722 0.0544,-4.77786 z"
+         id="path4618" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         d="m 454.61734,-51.508893 c -1.0545,0.207302 -0.75193,2.602051 3.65802,4.70953 -1.20319,-3.721987 -2.83785,-4.870752 -3.65802,-4.70953 z"
+         id="path4620" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         d="m 480.20459,-48.065606 c -0.93004,-0.202093 -2.44155,8.951947 0.54465,4.191985 0.006,-3.003694 -0.23465,-4.12462 -0.54465,-4.191985 z"
+         id="path4622" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         d="m 448.66305,-49.128643 c -1.56688,-0.229137 -2.26794,4.447738 2.26229,4.266538 -0.66319,-3.060397 -1.55007,-4.162386 -2.26229,-4.266538 z"
+         id="path4624" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         d="m 460.03952,-46.034441 c -1.32746,-0.320843 -4.79705,9.58505 -0.30483,6.143695 l 0.56407,-1.54344 c 0.40798,-3.249165 0.18278,-4.493328 -0.25924,-4.600255 z"
+         id="path4626" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         d="m 440.63109,-45.576595 c -1.1035,-0.06724 -1.43907,1.045566 2.2556,3.539663 0.71932,-2.225189 -1.1521,-3.472433 -2.2556,-3.539663 z"
+         id="path4628" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         d="m 431.55834,-45.358498 c -1.73263,0.190124 -2.15931,3.073797 3.95349,5.831361 -0.46899,-4.511202 -2.6059,-5.979245 -3.95349,-5.831361 z"
+         id="path4630" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         d="m 453.06465,-43.048376 c 3.38311,3.533232 -3.90953,20.948433 4.19444,9.971936 0.82611,-2.498253 -1.80782,-8.531536 -4.19444,-9.971936 z"
+         id="path4632" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         d="m 468.93335,-42.130191 c -1.45036,0.216777 -7.50398,13.824398 -0.27845,3.773849 0.70219,-2.854209 0.68474,-3.834538 0.27845,-3.773849 z"
+         id="path4636" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 411.70961,-49.794849 c -0.66457,-0.011 -1.29531,1.135757 0.50304,2.507545 0.54714,-1.774373 0.0138,-2.498522 -0.50304,-2.507545 z"
+         id="path4638" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         d="m 446.98259,-40.367738 c -0.83987,0.0571 -0.59995,1.237549 3.22483,4.117102 0.71618,-2.407965 -2.145,-4.190579 -3.22483,-4.117102 z"
+         id="path4640" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         d="m 477.06565,-35.65855 c -2.39881,-0.04719 -8.62605,9.802865 0.79507,1.946599 0.0912,-1.405288 -0.24149,-1.935718 -0.79507,-1.946599 z"
+         id="path4644" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         d="m 440.97859,-36.842391 c -1.50612,-0.04609 -2.51138,1.33269 2.04316,3.14802 0.6027,-2.212095 -0.8717,-3.112186 -2.04316,-3.14802 z"
+         id="path4648" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         d="m 486.40407,-34.067748 c -1.77726,0.169793 -5.56509,9.392713 0.77016,1.639584 -0.0452,-1.246413 -0.36002,-1.678768 -0.77016,-1.639584 z"
+         id="path4650" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.05836891999999994;stroke-opacity:1;fill-opacity:1"
+         d="m 411.77839,-35.731911 c -1.21302,0.01183 -3.09551,4.899265 0.47396,5.334204 0.62269,-4.001705 0.16143,-5.340404 -0.47396,-5.334204 z"
+         id="path4652" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 396.05118,-36.994982 c -2.04169,-0.24684 -6.82852,3.87838 0.55943,2.089336 0.47475,-1.432735 0.12116,-2.007056 -0.55943,-2.089336 z"
+         id="path4656" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 407.08404,-37.663391 c -1.39242,0.07556 -2.69249,4.241622 0.82032,6.651421 l 0.73677,-1.115278 c 0.11969,-4.172913 -0.72163,-5.581501 -1.55709,-5.536143 z"
+         id="path4658" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 387.94269,-36.084927 c -1.92205,-0.161564 -5.68814,4.028489 0.86975,1.988069 0.22629,-1.420765 -0.22907,-1.934226 -0.86975,-1.988069 z"
+         id="path4660" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         d="m 434.18961,-33.733542 c -1.82878,-0.06284 -1.71494,3.269276 4.49111,4.898663 -1.59425,-3.623508 -3.39384,-4.860959 -4.49111,-4.898663 z"
+         id="path4662" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 381.31618,-35.518706 c -1.8761,0.0073 -6.51295,2.183206 -0.4214,1.779068 1.5497,-1.341896 1.27417,-1.782405 0.4214,-1.779068 z"
+         id="path4664" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 407.05126,-45.183131 c -0.92134,0.172641 -2.33194,4.570681 0.50641,3.310771 0.22307,-2.598995 -0.0876,-3.389236 -0.50641,-3.310771 z"
+         id="path4666" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         d="m 461.90601,-30.886192 c -1.38574,0.324046 -7.72714,8.698639 -0.39813,2.124265 0.80134,-1.677019 0.78613,-2.214993 0.39813,-2.124265 z"
+         id="path4668" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 386.05607,-32.26616 c -2.97483,-0.05196 -6.2898,6.10286 2.17581,1.85356 -0.50713,-1.356433 -1.34287,-1.839011 -2.17581,-1.85356 z"
+         id="path4670" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         d="m 441.98494,-28.309058 c -1.08635,0.171419 -1.73041,2.920278 1.21175,3.800294 l 0.51278,-0.360161 c -0.2949,-2.725923 -1.07272,-3.542976 -1.72453,-3.440133 z"
+         id="path4672" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 468.65239,-26.845685 c -3.04485,-0.23701 -7.4812,7.940099 -0.65365,2.72503 l 1.84858,-2.061301 c -0.34169,-0.44073 -0.75995,-0.629876 -1.19493,-0.663729 z"
+         id="path4674" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 480.05523,-26.121328 c -1.67668,0.196579 -9.5296,7.977082 -0.54915,2.079457 1.00412,-1.602503 1.01863,-2.134498 0.54915,-2.079457 z"
+         id="path4676" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 379.1554,-30.938168 c -1.31289,0.08081 -4.3952,2.525883 -0.15752,1.867008 0.99604,-1.459888 0.75428,-1.903723 0.15752,-1.867008 z"
+         id="path4678" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 435.44485,-25.648286 c -1.54803,-0.100619 -1.89633,0.958457 3.55999,3.443299 0.73578,-2.082184 -2.01197,-3.342644 -3.55999,-3.443299 z"
+         id="path4682" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 456.08167,-21.807989 c -1.48214,-0.01712 -3.72679,4.48417 -0.0443,7.187524 l 0.42146,-0.899516 c 1.11067,-4.629842 0.51209,-6.277714 -0.37719,-6.288008 z"
+         id="path4686" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 472.22763,-19.348101 c -1.90561,-0.08595 -5.9071,6.504565 0.82159,1.335869 -0.0598,-0.960266 -0.38183,-1.316014 -0.82159,-1.335869 z"
+         id="path4690" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 442.86841,-20.469394 c -1.27338,-0.06308 -1.52413,1.204612 3.03895,3.994318 0.53048,-2.537523 -1.76556,-3.931269 -3.03895,-3.994318 z"
+         id="path4692" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 461.40079,-18.364825 c -0.94116,0.01968 -5.42875,11.3348489 -0.33498,3.312495 0.57981,-2.438017 0.59851,-3.318033 0.33498,-3.312495 z"
+         id="path4698" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 455.94966,-11.717903 c -1.16997,0.153202 -2.97764,2.5427436 0.21266,3.0303225 0.9459,-2.4052755 0.48933,-3.1222485 -0.21266,-3.0303225 z"
+         id="path4708" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 459.35036,-8.1285538 c -2.32483,0.1553416 -6.7759,5.5773934 -0.0146,5.6209052 1.87074,-4.3375583 1.23228,-5.7022681 0.0146,-5.6209052 z"
+         id="path4716" />
+      <path
+         sodipodi:nodetypes="scccscsccczcccsccscs"
+         inkscape:connector-curvature="0"
+         style="fill:#a05a2c;fill-opacity:1;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         d="m 475.64782,0.53307772 c 3.20891,-0.76167008 7.83619,-2.38910112 7.43794,1.02087018 1.63762,1.921597 -2.04416,11.4269801 -1.03653,11.8845201 -1.89242,2.689784 -4.32548,1.813069 -7.26631,2.060202 -4.23264,7.670751 1.28666,25.180544 0.35346,36.774581 -0.25656,3.187412 -7.40211,10.316656 -10.2538,17.430777 -1.78028,3.74222 -4.4597,6.135319 -7.6732,7.621248 -3.21349,1.485917 -7.66702,2.365762 -11.08548,4.299084 -9.22514,1.30303 -15.54928,-0.878733 -24.19325,-3.84169 -0.95004,-1.599324 -4.44421,-4.046718 -5.16475,-5.722967 -1.58653,-4.924252 -4.0365,-12.140043 -5.41155,-19.294937 -1.37507,-7.154906 -2.48777,-9.638623 -3.05404,-2.801797 -1.24999,4.79983 0.3807,14.987504 -0.17276,19.839966 -2.90577,-11.753988 -1.72946,-30.542983 -3.4302,-42.558958 1.56122,-5.739105 0.35186,-5.29011 -2.83327,-6.103789 -3.18506,-0.813679 -8.08486,-0.990416 -10.80512,-4.2415 -2.40283,-9.5612312 -0.71769,-13.1644686 -0.71769,-13.1644686 0,0 10.27509,-1.3073829 15.89701,-1.0094024 14.32266,0.7591516 28.31409,1.2105419 42.76071,1.2023995 6.81263,0.9428816 19.85557,-1.7816967 26.64883,-3.39413878 z"
+         id="path4726" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         d="m 444.59558,83.355381 c -1.78823,1.449447 -2.44684,26.202359 -3.62405,27.109059 -0.82024,-4.59683 -0.5225,-24.989783 -4.3219,-27.300956 1.1874,0.492628 6.26349,0.450277 7.94595,0.191897 z"
+         id="path4728" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;fill-opacity:1"
+         d="m 411.84974,-57.233 c 10.22207,2.59375 -3.0589,6.109438 0,0 z"
+         id="path4616" />
+      <path
+         sodipodi:nodetypes="czccc"
+         inkscape:connector-curvature="0"
+         style="fill:#88aa00;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 447.48456,-89.965921 c 3.21765,10.1765 -13.2364,22.230045 -17.69415,25.637119 -4.45774,3.407061 -13.50633,13.695732 -17.70526,-2.869528 -1.47283,-6.416087 9.53596,-10.480397 18.4443,-16.306232 10.41011,-4.760132 14.60298,-10.299479 16.95511,-6.461359 z"
+         id="path4570" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 416.23916,-85.87074 c -0.38622,-0.0049 -0.43831,1.08975 1.00428,3.294131 0.10221,-2.18614 -0.61808,-3.289583 -1.00428,-3.294131 z"
+         id="path4572" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         d="m 441.98722,-85.633302 c -0.34511,-0.01504 -0.70202,0.241852 -0.0331,0.763394 0.71155,-0.461623 0.37823,-0.748417 0.0331,-0.763394 z"
+         id="path4574" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 411.71795,-86.504954 c -0.75809,-0.200064 -1.99989,1.940107 0.0384,3.519906 0.68556,-2.444643 0.41642,-3.399873 -0.0384,-3.519906 z"
+         id="path4576" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 423.87153,-85.884188 c 1.71537,4.071854 -2.36869,0.663252 0,0 z"
+         id="path4578" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 406.68682,-86.438826 c -1.29263,-0.101107 -3.43839,2.159598 0.004,3.441905 1.25364,-2.454558 0.772,-3.381216 -0.004,-3.441905 z"
+         id="path4580" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         d="m 438.7015,-83.060752 c -1.03158,-0.136293 -1.6368,9.723923 0.46473,0.746767 -0.15795,-0.511945 -0.31735,-0.727291 -0.46473,-0.746767 z"
+         id="path4582" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 424.83267,-82.4772 c -0.34498,6.693662 -4.6264,0.394357 0,0 z"
+         id="path4584" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 403.73787,-79.225331 c -1.27375,-0.142456 -3.26736,4.403076 0.66745,4.006115 0.34624,-2.901364 -0.0885,-3.941355 -0.66745,-4.006115 z"
+         id="path4586" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 413.70557,-79.862556 c -0.64975,0.01553 -1.3335,1.436463 0.32716,3.035298 0.66483,-2.196385 0.17816,-3.047353 -0.32716,-3.035298 z"
+         id="path4588" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 434.3854,-77.894232 c -0.78768,-0.163606 -3.36229,2.919103 -0.6968,2.837887 1.02969,-2.016005 1.05485,-2.76353 0.6968,-2.837887 z"
+         id="path4590" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 410.05141,-77.611925 c -0.56429,0.105876 -1.01589,1.501505 0.56777,2.778042 0.3892,-2.167447 -0.12888,-2.860408 -0.56777,-2.778042 z"
+         id="path4592" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 407.59568,-72.135224 c -0.97233,0.100252 -2.40038,3.133777 0.58766,2.320013 0.20934,-1.798116 -0.14568,-2.365554 -0.58766,-2.320013 z"
+         id="path4594" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 418.05038,-69.531254 c -0.6092,0.09206 -1.30566,0.609201 -0.28204,1.211495 1.41316,-0.970732 0.89123,-1.303605 0.28204,-1.211495 z"
+         id="path4596" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 401.4883,-71.092035 c -1.42808,-0.0961 -3.62438,4.381987 0.58123,5.111381 0.70433,-3.74903 0.16679,-5.061035 -0.58123,-5.111381 z"
+         id="path4598" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 420.10108,-63.332237 c -0.90356,-0.170575 -6.13605,3.299021 -1.06862,1.71273 1.20891,-1.184513 1.36981,-1.65588 1.06862,-1.71273 z"
+         id="path4600" />
+      <path
+         id="path3298"
+         d="m 396.61229,-31.383865 c -2.04169,-0.24684 -6.82852,3.87838 0.55943,2.089336 0.47475,-1.432735 0.12116,-2.007056 -0.55943,-2.089336 z"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3300"
+         d="m 372.23156,-33.84048 c -1.92205,-0.161564 -5.68814,4.028489 0.86975,1.988069 0.22629,-1.420765 -0.22907,-1.934226 -0.86975,-1.988069 z"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3302"
+         d="m 365.60505,-32.713147 c -1.8761,0.0073 -6.51295,2.183206 -0.4214,1.779068 1.5497,-1.341896 1.27417,-1.782405 0.4214,-1.779068 z"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3306"
+         d="m 362.18177,-27.852053 c -1.31289,0.08081 -4.3952,2.525883 -0.15752,1.867008 0.99604,-1.459888 0.75428,-1.903723 0.15752,-1.867008 z"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3308"
+         d="m 401.10119,-27.456083 c -2.04169,-0.24684 -6.82852,3.87838 0.55943,2.089336 0.47475,-1.432735 0.12116,-2.007056 -0.55943,-2.089336 z"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3310"
+         d="m 391.7302,-27.668251 c -1.92205,-0.161564 -5.68814,4.028489 0.86975,1.988069 0.22629,-1.420765 -0.22907,-1.934226 -0.86975,-1.988069 z"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 382.05102,-27.247417 c -1.92205,-0.161564 -5.68814,4.028489 0.86975,1.988069 0.22629,-1.420765 -0.22907,-1.934226 -0.86975,-1.988069 z"
+         id="path3312" />
+      <path
+         id="path3314"
+         d="m 374.89684,-27.527974 c -1.92205,-0.161564 -5.68814,4.028489 0.86975,1.988069 0.22629,-1.420765 -0.22907,-1.934226 -0.86975,-1.988069 z"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3316"
+         d="m 369.112,-28.364532 c -1.8761,0.0073 -6.51295,2.183206 -0.4214,1.779068 1.5497,-1.341896 1.27417,-1.782405 0.4214,-1.779068 z"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3318"
+         d="m 430.56538,-72.39963 c -1.03158,-0.136293 -1.6368,9.723923 0.46473,0.746767 -0.15795,-0.511945 -0.31735,-0.727291 -0.46473,-0.746767 z"
+         style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3320"
+         d="m 426.24928,-67.23311 c -0.78768,-0.163606 -3.36229,2.919103 -0.6968,2.837887 1.02969,-2.016005 1.05485,-2.76353 0.6968,-2.837887 z"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3322"
+         d="m 425.26733,-74.387284 c -0.78768,-0.163606 -3.36229,2.919103 -0.6968,2.837887 1.02969,-2.016005 1.05485,-2.76353 0.6968,-2.837887 z"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         d="m 430.00427,-80.395472 c -1.03158,-0.136293 -1.6368,9.723923 0.46473,0.746767 -0.15795,-0.511945 -0.31735,-0.727291 -0.46473,-0.746767 z"
+         id="path3324" />
+      <path
+         id="path3326"
+         d="m 421.14889,-91.902691 c -0.38622,-0.0049 -0.43831,1.08975 1.00428,3.294131 0.10221,-2.18614 -0.61808,-3.289583 -1.00428,-3.294131 z"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3328"
+         d="m 416.62768,-92.536905 c -0.75809,-0.200064 -1.99989,1.940107 0.0384,3.519906 0.68556,-2.444643 0.41642,-3.399873 -0.0384,-3.519906 z"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3330"
+         d="m 411.59655,-92.470777 c -1.29263,-0.101107 -3.43839,2.159598 0.004,3.441905 1.25364,-2.454558 0.772,-3.381216 -0.004,-3.441905 z"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3332"
+         d="m 403.45415,-62.606406 c -1.53365,0.208096 -4.12282,3.923384 -0.0544,4.77786 1.52601,-3.751488 0.97458,-4.902722 0.0544,-4.77786 z"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3334"
+         d="m 407.78167,-63.264951 c 10.22207,2.59375 -3.0589,6.109438 0,0 z"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3336"
+         d="m 421.14428,-39.016469 c -1.33919,0.0143 -3.41748,5.921624 0.52325,6.447324 0.68746,-4.836764 0.17822,-6.454818 -0.52325,-6.447324 z"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3338"
+         d="m 416.48266,-38.224503 c -1.39242,0.07556 -2.69249,4.241622 0.82032,6.651421 l 0.73677,-1.115278 c 0.11969,-4.172913 -0.72163,-5.581501 -1.55709,-5.536143 z"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3340"
+         d="m 413.28871,-27.233124 c -1.33919,0.0143 -3.41748,5.921624 0.52325,6.447324 0.68746,-4.836764 0.17822,-6.454818 -0.52325,-6.447324 z"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3342"
+         d="m 408.62709,-26.441158 c -1.39242,0.07556 -2.69249,4.241622 0.82032,6.651421 l 0.73677,-1.115278 c 0.11969,-4.172913 -0.72163,-5.581501 -1.55709,-5.536143 z"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 422.96789,-29.197015 c -1.33919,0.0143 -3.41748,5.921624 0.52325,6.447324 0.68746,-4.836764 0.17822,-6.454818 -0.52325,-6.447324 z"
+         id="path3345" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.05836891999999994;stroke-opacity:1;fill-opacity:1"
+         d="m 417.97504,-28.577364 c -1.26124,0.06251 -2.43882,3.509313 0.74304,5.503065 l 0.66735,-0.922728 c 0.10842,-3.452466 -0.65364,-4.617864 -1.41039,-4.580337 z"
+         id="path3347" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 420.58316,-18.676171 c -1.33919,0.0143 -3.41748,5.921624 0.52325,6.447324 0.68746,-4.836764 0.17822,-6.454818 -0.52325,-6.447324 z"
+         id="path3349" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#5f7800;stroke:#000000;stroke-width:0.94697887000000003;stroke-opacity:1;fill-opacity:1"
+         d="m 415.88206,-17.601136 c -0.80669,0.07825 -1.55988,4.392549 0.47525,6.888094 l 0.42685,-1.154962 c 0.0693,-4.321395 -0.41808,-5.780104 -0.9021,-5.733132 z"
+         id="path3351" />
+      <path
+         id="path3353"
+         d="m 430.97069,-19.837121 c -0.94675,0.01012 -2.41602,4.188995 0.36992,4.560879 0.486,-3.421558 0.12599,-4.56618 -0.36992,-4.560879 z"
+         style="fill:#668000;stroke:#000000;stroke-width:0.86459017000000005;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3355"
+         d="m 425.60072,-19.848096 c -1.39242,0.07556 -2.69249,4.241622 0.82032,6.651421 l 0.73677,-1.115278 c 0.11969,-4.172913 -0.72163,-5.581501 -1.55709,-5.536143 z"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3357"
+         d="m 418.05816,-7.5942153 c -1.33919,0.0143 -3.41748,5.921624 0.52325,6.447324 0.68746,-4.836764 0.17822,-6.454818 -0.52325,-6.447324 z"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3359"
+         d="m 413.25626,-6.9425272 c -1.39242,0.07556 -2.69249,4.241622 0.82032,6.65142103 l 0.73677,-1.11527803 c 0.11969,-4.172913 -0.72163,-5.581501 -1.55709,-5.536143 z"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 428.15817,-10.540052 c -1.33919,0.0143 -3.41748,5.9216243 0.52325,6.4473243 0.68746,-4.836764 0.17822,-6.4548183 -0.52325,-6.4473243 z"
+         id="path3361" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:0.94697887000000003;stroke-opacity:1;fill-opacity:1"
+         d="m 423.31221,-7.0413976 c -0.80669,0.078249 -1.55988,4.3925488 0.47525,6.88809405 l 0.42685,-1.15496215 c 0.0693,-4.321395 -0.41808,-5.7801039 -0.9021,-5.7331319 z"
+         id="path3363" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:0.93440281999999997;stroke-opacity:1;fill-opacity:1"
+         d="m 434.59756,-13.068871 c -0.90468,0.01237 -2.30865,5.1203503 0.35347,5.5749161 0.46441,-4.1822861 0.1204,-5.5813961 -0.35347,-5.5749161 z"
+         id="path3365" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 410.73126,-16.341148 c -1.39242,0.07556 -2.69249,4.241622 0.82032,6.6514212 l 0.73677,-1.1152782 c 0.11969,-4.172913 -0.72163,-5.581501 -1.55709,-5.536143 z"
+         id="path3367" />
+      <path
+         id="path3369"
+         d="m 439.94151,-4.6483791 c -1.33919,0.0143 -3.41748,5.9216241 0.52325,6.4473241 0.68746,-4.8367641 0.17822,-6.4548181 -0.52325,-6.4473241 z"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3371"
+         d="m 432.84679,-3.2331308 c -0.94064,0.065336 -1.81889,3.66767441 0.55416,5.7513958 l 0.49772,-0.9643661 c 0.0808,-3.6082628 -0.48749,-4.8262502 -1.05188,-4.7870297 z"
+         style="fill:#668000;stroke:#000000;stroke-width:0.93440281999999997;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3373"
+         d="m 411.82071,-43.640073 c -0.92134,0.172641 -2.33194,4.570681 0.50641,3.310771 0.22307,-2.598995 -0.0876,-3.389236 -0.50641,-3.310771 z"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 416.59016,-47.006743 c -0.92134,0.172641 -2.33194,4.570681 0.50641,3.310771 0.22307,-2.598995 -0.0876,-3.389236 -0.50641,-3.310771 z"
+         id="path3375" />
+      <path
+         id="path3377"
+         d="m 421.49989,-46.165075 c -0.92134,0.172641 -2.33194,4.570681 0.50641,3.310771 0.22307,-2.598995 -0.0876,-3.389236 -0.50641,-3.310771 z"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 424.0249,-54.581751 c -0.92134,0.172641 -2.33194,4.570681 0.50641,3.310771 0.22307,-2.598995 -0.0876,-3.389236 -0.50641,-3.310771 z"
+         id="path3379" />
+      <path
+         id="path3381"
+         d="m 432.58185,-63.278982 c -0.92134,0.172641 -2.33194,4.570681 0.50641,3.310771 0.22307,-2.598995 -0.0876,-3.389236 -0.50641,-3.310771 z"
+         style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:none;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         d="m 427.98545,-58.70508 c -1.39242,0.07556 -2.69249,4.241622 0.82032,6.651421 l 0.73677,-1.115278 c 0.11969,-4.172913 -0.72163,-5.581501 -1.55709,-5.536143 z"
+         id="path3383" />
+      <path
+         id="path3385"
+         d="m 419.00766,-53.795353 c -1.39242,0.07556 -2.69249,4.241622 0.82032,6.651421 l 0.73677,-1.115278 c 0.11969,-4.172913 -0.72163,-5.581501 -1.55709,-5.536143 z"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3387"
+         d="m 448.51897,-29.063231 c -0.98994,1.081925 2.87948,15.463903 2.16081,3.106503 -1.25243,-2.659134 -1.88348,-3.409555 -2.16081,-3.106503 z"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3391"
+         d="m 449.42706,-57.821399 c -1.0545,0.207302 -0.75193,2.602051 3.65802,4.70953 -1.20319,-3.721987 -2.83785,-4.870752 -3.65802,-4.70953 z"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3393"
+         d="m 443.47277,-55.441149 c -1.56688,-0.229137 -2.26794,4.447738 2.26229,4.266538 -0.66319,-3.060397 -1.55007,-4.162386 -2.26229,-4.266538 z"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3395"
+         d="m 435.44081,-51.889101 c -1.1035,-0.06724 -1.43907,1.045566 2.2556,3.539663 0.71932,-2.225189 -1.1521,-3.472433 -2.2556,-3.539663 z"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3397"
+         d="m 487.63932,-43.857268 c -0.93004,-0.202093 -2.44155,8.951947 0.54465,4.191985 0.006,-3.003694 -0.23465,-4.12462 -0.54465,-4.191985 z"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         d="m 477.67959,-56.201725 c -0.93004,-0.202093 -2.44155,8.951947 0.54465,4.191985 0.006,-3.003694 -0.23465,-4.12462 -0.54465,-4.191985 z"
+         id="path3399" />
+      <path
+         id="path3401"
+         d="m 466.03652,-59.147561 c -0.93004,-0.202093 -2.44155,8.951947 0.54465,4.191985 0.006,-3.003694 -0.23465,-4.12462 -0.54465,-4.191985 z"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3403"
+         d="m 466.70304,-15.040308 c -1.4685,0.832706 -5.6806,11.0534123 0.30211,2.129421 0.30245,-1.866762 0.10908,-2.362582 -0.30211,-2.129421 z"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3405"
+         d="m 450.33114,-16.675557 c -0.92835,-0.873865 -1.94137,-0.07156 -0.27735,5.011274 2.0495,-1.587448 1.20573,-4.137426 0.27735,-5.011274 z"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 447.66586,-2.9283207 c -0.92835,-0.873865 -1.94137,-0.07156 -0.27735,5.011274 2.0495,-1.58744805 1.20573,-4.137426 0.27735,-5.011274 z"
+         id="path3407" />
+      <path
+         id="path3409"
+         d="m 446.27801,-12.725984 c -1.4589,0.26202 -2.81664,5.1052214 1.30868,7.0675183 l 0.24471,-0.9627436 c 0.21982,-4.7561227 -0.67808,-6.2619597 -1.55342,-6.1047697 z"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         d="m 452.59052,-6.8343113 c -1.4589,0.26202 -2.81664,5.1052214 1.30868,7.06751828 l 0.24471,-0.9627436 c 0.21982,-4.75612268 -0.67808,-6.26195968 -1.55342,-6.10476968 z"
+         id="path3411" />
+      <path
+         id="path3413"
+         d="m 465.34088,-4.4713778 c -0.92835,-0.873865 -1.94137,-0.07156 -0.27735,5.01127397 2.0495,-1.58744807 1.20573,-4.13742597 0.27735,-5.01127397 z"
+         style="fill:#668000;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         id="path3415"
+         d="m 401.60421,-83.830215 c -0.64975,0.01553 -1.3335,1.436463 0.32716,3.035298 0.66483,-2.196385 0.17816,-3.047353 -0.32716,-3.035298 z"
+         style="fill:#5f7800;stroke:#000000;stroke-width:1.22258437000000009;stroke-opacity:1;fill-opacity:1"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       id="0sign-warning"
+       transform="matrix(1.525334,-0.20537456,0.20537456,1.525334,99.174751,443.48013)"
+       inkscape:label="#g3997">
+      <path
+         style="fill:#ac7905;fill-opacity:1;stroke:#000000;stroke-width:1.25000000000000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         d="m 17.598259,-420.73934 0,72.79425 -2.205794,1.22556 -3.256697,0.65967 -2.124193,-1.53194 -2.5837759,1.22555 -3.2525318,-0.90933 -2.7535111,-0.66951 0,-72.79425 2.7164414,1.0213 5.0654206,-2.34898 5.2696818,2.85962 z"
+         id="path3974"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccccccccccccc" />
+      <path
+         sodipodi:nodetypes="ccccccccccccc"
+         inkscape:connector-curvature="0"
+         id="rect3202"
+         d="m -89.373545,-452.72425 199.969995,0 3.38745,8.63727 -1.40278,10.32417 -4.20834,5.83528 3.36667,7.09778 -6.17223,7.09778 5.05001,8.02333 -199.969998,0 2.805558,-7.46222 -6.452784,-13.915 7.855564,-14.47612 z"
+         style="fill:#ac7905;fill-opacity:1;stroke:#000000;stroke-width:1.25000000000000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <g
+         id="g4067">
+        <path
+           inkscape:connector-curvature="0"
+           id="path4027"
+           d="m -44.84375,-447.625 c -4.04892,2.71771 -3.010349,9.61695 -4.625,14.09375 -0.274588,2.74549 -2.317764,-2.80543 -4.09375,-3.28125 -3.344727,-3.01215 -8.405322,-0.4388 -8.71875,3.90625 -1.033645,1.79027 -1.5258,-5.57336 -2.53125,-7.4375 0.240748,-4.05318 -6.14459,-7.46636 -7.25,-2.40625 -0.0052,6.26209 2.871424,12.15253 3.4375,18.53125 0.337175,3.74408 1.692437,10.91389 7.09375,8.40625 3.289833,-3.15374 3.188671,-8.63947 5.5,-12.53125 2.194951,3.76135 2.901479,9.71673 8.0625,10.375 4.980069,-0.47931 3.257298,-7.01267 4.90443,-10.22619 0.367845,-5.87574 4.086313,-12.17178 2.28307,-17.96131 -0.818393,-1.31872 -2.632662,-1.75052 -4.0625,-1.46875 z"
+           style="font-size:33.90216827px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4029"
+           d="m -28.0625,-439.375 c -3.881559,1.00043 -10.189619,1.37939 -11.0625,6.1875 0.418556,5.46759 6.916953,1.74545 9.71875,0.71875 2.319389,-1.68393 3.205559,2.70823 0.375,1.34375 -5.722057,-0.0148 -12.962374,5.13936 -9.71875,11.53125 2.626534,4.14657 9.169069,2.85939 12.25,1.125 1.989523,4.2018 7.673298,0.22668 6.21875,-3.5 -0.660487,-5.98521 1.874934,-17.53098 -7.78125,-17.40625 z m -1.5,14.90625 c -1.241205,1.45385 -4.448155,1.25594 -1.5,0.1875 0.481227,-0.14062 0.991436,-0.21107 1.5,-0.1875 z"
+           style="font-size:33.90216827px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4031"
+           d="m -15.4375,-439.09375 c -5.394792,1.6613 -2.48071,8.97939 -2.90625,13.03125 0.518726,3.46863 -0.590468,11.45935 5.21875,10.4375 4.459513,-2.7568 2.079549,-9.54234 6.40625,-12.75 1.7155639,-2.51097 8.3962639,-3.81367 4.96875,-7.78125 -3.2025699,-2.85852 -7.6219917,0.17668 -10.09375,2.59375 0.02534,-2.384 -0.361182,-5.84952 -3.59375,-5.53125 z"
+           style="font-size:33.90216827px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4033"
+           d="m 4.6875,-440.28125 c -5.30071781,1.49604 -1.6944317,8.75046 -2.0657143,12.49589 1.0140363,4.04166 -1.217366,11.44464 4.5032143,12.59786 4.508335,-1.78553 1.7501847,-8.42497 4.875,-11.71875 1.092559,-2.38676 3.314485,-6.17767 2.859952,-1.09685 0.89927,3.53664 -2.415975,11.1975 3.265048,11.47185 5.480532,-1.18576 2.430726,-8.81202 3.15625,-12.59375 0.554048,-4.40074 -1.763899,-12.51046 -7.625,-10.4375 -2.320548,0.95095 -3.7889167,3.33708 -5.28125,5.0625 -0.1937303,-2.35211 -0.4652789,-5.97795 -3.6875,-5.78125 z"
+           style="font-size:33.90216827px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4035"
+           d="m 27.03125,-449.46875 c -5.537781,0.82424 -2.391319,9.59965 2.34375,7.375 3.874248,-2.08331 2.05486,-7.86437 -2.34375,-7.375 z M 27,-440.5 c -5.819073,1.68473 -2.416598,9.57271 -3,13.8125 -0.124567,3.5057 -0.2487,11.19427 5.375,9.40625 4.342062,-2.217 1.432037,-8.65938 2.09375,-12.65625 C 30.640728,-433.12426 32.328956,-440.79475 27,-440.5 z"
+           style="font-size:33.90216827px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4037"
+           d="m 37.78125,-440.28125 c -5.080911,1.1153 -2.034703,8.07805 -2.21875,11.5 1.271282,4.30248 -1.417945,12.14951 4.5625,13.625 4.628738,-1.82962 1.734599,-8.42403 4.90625,-11.75 0.805782,-1.45076 3.058514,-6.36617 2.8125,-2.0625 1.21884,3.85704 -2.361342,10.51041 2.40625,12.40625 5.812938,0.39539 3.947869,-7.56222 4.099692,-11.06218 0.357857,-4.50921 -0.600152,-12.99175 -6.880942,-12.21907 -2.648763,0.71351 -4.432689,3.36558 -6.03125,5.34375 -0.246668,-2.33913 -0.438268,-5.9396 -3.65625,-5.78125 z"
+           style="font-size:33.90216827px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4039"
+           d="m 71.25,-440.96875 c -8.640403,-0.0606 -18.233117,8.95 -14.59375,17.875 0.705055,2.4169 4.290238,3.66868 5.25,4.8125 -2.933719,5.24877 4.522748,8.00237 8.34375,9.125 4.457952,2.22023 12.23009,-0.25702 10.068454,-6.33619 -0.350293,-6.75417 -1.812153,-13.5847 -0.0997,-20.16381 -0.287067,-4.30435 -5.404531,-5.51665 -8.96875,-5.3125 z m 0.4375,6.625 c 1.537227,1.03391 -1.12249,5.0909 -2.4375,6.71875 -1.398911,1.97203 -6.273894,5.08572 -6.4375,0.71875 0.66765,-3.70376 5.09375,-7.21703 8.875,-7.4375 z m 1.03125,13.3125 c 0.476321,2.72623 1.662711,6.85231 -2.125,4.46875 -2.174971,0.42331 -1.23016,-3.04393 -0.3125,-3.53125 0.831591,-0.10033 2.359257,-2.28937 2.4375,-0.9375 z"
+           style="font-size:33.90216827px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4041"
+           d="m 88.125,-439.875 c -4.496579,1.51596 -1.040187,7.0211 -1.598305,10.37101 -0.459598,2.58114 2.467362,4.73693 -0.276695,6.37899 -4.054194,4.94808 6.151295,9.88265 7.625,3.75 1.183496,-2.19009 -0.261361,-4.86417 -1.5625,-5.9375 1.32047,-4.52527 2.84285,-9.06984 3.03125,-13.90625 -2.391634,-0.16014 -4.823663,-0.84439 -7.21875,-0.65625 z"
+           style="font-size:33.90216827px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+      </g>
+      <path
+         transform="translate(-154.42237,-108.94201)"
+         d="m 164.40573,-304.87988 c 0,0.34863 -0.28262,0.63125 -0.63125,0.63125 -0.34864,0 -0.63126,-0.28262 -0.63126,-0.63125 0,-0.34863 0.28262,-0.63125 0.63126,-0.63125 0.34863,0 0.63125,0.28262 0.63125,0.63125 z"
+         sodipodi:ry="0.63125068"
+         sodipodi:rx="0.63125068"
+         sodipodi:cy="-304.87988"
+         sodipodi:cx="163.77448"
+         id="path3985"
+         style="fill:#d39440;fill-opacity:1;stroke:#3b3b3b;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         sodipodi:type="arc" />
+      <path
+         sodipodi:type="arc"
+         style="fill:#d39440;fill-opacity:1;stroke:#3b3b3b;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="path3987"
+         sodipodi:cx="163.77448"
+         sodipodi:cy="-304.87988"
+         sodipodi:rx="0.63125068"
+         sodipodi:ry="0.63125068"
+         d="m 164.40573,-304.87988 c 0,0.34863 -0.28262,0.63125 -0.63125,0.63125 -0.34864,0 -0.63126,-0.28262 -0.63126,-0.63125 0,-0.34863 0.28262,-0.63125 0.63126,-0.63125 0.34863,0 0.63125,0.28262 0.63125,0.63125 z"
+         transform="translate(-154.42237,-137.69898)" />
+      <text
+         sodipodi:linespacing="125%"
+         id="text3989"
+         y="-418.78613"
+         x="-72.148483"
+         style="font-size:33.90216827px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Purisa;-inkscape-font-specification:Purisa Bold"
+           y="-418.78613"
+           x="-72.148483"
+           id="tspan3991"
+           sodipodi:role="line">Warning!</tspan></text>
+      <path
+         sodipodi:nodetypes="ssscs"
+         inkscape:connector-curvature="0"
+         id="path3965-7"
+         d="m 18.878035,-348.06163 c 1.213615,2.38023 -2.792071,4.50541 -5.439965,4.14889 -2.647895,-0.35652 -4.4590732,-2.78625 -4.1488992,-5.43996 1.5846402,-13.55737 17.3012832,-21.09756 16.9631112,-18.09356 -1.370894,2.75023 -8.949209,16.29569 -7.374247,19.38463 z"
+         style="fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:0.87091565;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="ssscs"
+         inkscape:connector-curvature="0"
+         id="path3969-2"
+         d="m -0.06781464,-347.74437 c 0.4272138,2.22545 4.83849904,2.71772 6.23399394,0.0152 1.225879,-2.37396 1.274083,-3.01739 0.38364,-5.53642 -1.3423429,-3.79747 -9.0433462,-13.91563 -12.0316377,-15.3257 2.2370366,2.93006 4.67081956,16.97546 5.41400376,20.84688 z"
+         style="fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:0.87091565;stroke-opacity:1" />
+      <path
+         style="fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:0.87091565;stroke-opacity:1"
+         d="m 13.048982,-349.48997 c 0.391662,3.90643 0.758104,7.69626 -4.0489262,6.19565 -2.550406,-0.79617 -5.912073,-1.11076 -5.30225,-3.712 0.431978,-1.84261 3.9081,-22.75109 2.283956,-24.76254 1.213952,-1.61282 6.4960052,16.58152 7.0672202,22.27889 z"
+         id="path3963-4"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ssscs" />
+    </g>
+    <g
+       id="0sign-cute"
+       transform="matrix(1.5327722,0.13939765,-0.13939765,1.5327722,-47.019003,386.37643)"
+       inkscape:label="#g4005">
+      <path
+         sodipodi:nodetypes="ccccccccccccc"
+         inkscape:connector-curvature="0"
+         id="path3213"
+         d="m 266.17074,-422.98379 0,72.79425 -3.44511,0.74066 -2.16104,1.75524 -2.663,-0.88533 -2.2784,2.39298 -3.48603,-1.28649 -2.14292,-2.71706 0,-72.79425 2.71644,1.0213 5.06542,-2.34898 5.26968,2.85962 z"
+         style="fill:#ac7905;fill-opacity:1;stroke:#000000;stroke-width:1.25000000000000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <path
+         style="fill:#ac7905;fill-opacity:1;stroke:#000000;stroke-width:1.25000000000000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         d="m 151.84264,-467.82894 210.51567,0.99002 0.75921,8.1083 -2.04637,5.0716 4.29082,8.36034 -5.19853,13.80629 4.07631,8.94622 -1.68334,7.37834 -1.25416,10.3173 -210.51567,-0.99002 -2.22046,-12.81411 6.24373,-17.08913 -2.37647,-10.38057 3.23465,-10.38056 -4.7196,-5.61041 z"
+         id="path3215"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="cccccccccccccccc" />
+      <path
+         sodipodi:type="arc"
+         style="fill:#d39440;fill-opacity:1;stroke:#656565;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="path3217"
+         sodipodi:cx="163.77448"
+         sodipodi:cy="-304.87988"
+         sodipodi:rx="0.63125068"
+         sodipodi:ry="0.63125068"
+         d="m 164.40573,-304.87988 c 0,0.34863 -0.28262,0.63125 -0.63125,0.63125 -0.34864,0 -0.63126,-0.28262 -0.63126,-0.63125 0,-0.34863 0.28262,-0.63125 0.63126,-0.63125 0.34863,0 0.63125,0.28262 0.63125,0.63125 z"
+         transform="translate(94.150109,-107.18646)" />
+      <path
+         transform="translate(93.994897,-154.24404)"
+         d="m 164.40573,-304.87988 c 0,0.34863 -0.28262,0.63125 -0.63125,0.63125 -0.34864,0 -0.63126,-0.28262 -0.63126,-0.63125 0,-0.34863 0.28262,-0.63125 0.63126,-0.63125 0.34863,0 0.63125,0.28262 0.63125,0.63125 z"
+         sodipodi:ry="0.63125068"
+         sodipodi:rx="0.63125068"
+         sodipodi:cy="-304.87988"
+         sodipodi:cx="163.77448"
+         id="path3219"
+         style="fill:#d39440;fill-opacity:1;stroke:#656565;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         sodipodi:type="arc" />
+      <g
+         id="g4219">
+        <path
+           inkscape:connector-curvature="0"
+           id="path4084"
+           d="m 168.84375,-459.03125 c -6.19988,0.42282 -9.97161,6.61719 -8.8125,12.46875 -1.21364,6.36188 7.22386,10.75756 11.75,6.09375 2.52256,-2.14163 5.80459,-5.93233 3.28125,-9.25 -4.24144,-1.68066 -5.20245,6.04102 -8.8125,4.875 -1.17424,-2.9243 -0.58273,-8.44515 3.5,-8.15625 3.41064,2.89508 6.62322,-2.73715 3.15625,-4.8125 -1.12701,-0.93474 -2.60629,-1.36249 -4.0625,-1.21875 z"
+           style="font-size:20.66493225px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4086"
+           d="m 186.4375,-453.65625 c -3.8847,1.0849 -2.52031,6.61873 -5.28125,9.125 -0.52823,-2.99003 1.21355,-9.47062 -3.84375,-8.8125 -3.85279,2.52012 -1.70563,8.5889 -1.4375,12.4375 0.68802,4.33597 6.47753,4.08679 8.65625,1.3125 1.9592,4.44544 7.70542,0.0965 4.9375,-3.5 -1.88946,-3.41419 3.01214,-10.35081 -3.03125,-10.5625 z"
+           style="font-size:20.66493225px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4088"
+           d="m 194.875,-461.78125 c -3.92368,0.083 -2.24385,5.16232 -2.96875,6.71875 -3.75305,-0.37918 -5.29612,5.65975 -1.03125,5.875 3.43099,-0.80933 1.68337,4.87334 2.5,7.03125 -1.20608,4.52586 6.44733,6.42389 6.40625,1.375 0.11195,-3.07528 -2.29785,-7.99499 -0.1875,-9.96875 4.08413,-0.45775 2.8757,-6.49836 -1.0625,-5.5625 -0.80595,-1.48291 -0.22262,-5.97505 -3.65625,-5.46875 z"
+           style="font-size:20.66493225px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4090"
+           d="m 207.15625,-453.625 c -7.05912,0.95231 -8.97379,11.60806 -2.46875,14.71875 4.79954,2.78565 13.41155,-2.15971 11.21875,-7.78125 -1.54759,-0.97708 -0.39865,-4.41427 -2.90625,-5.46875 -1.58177,-1.4234 -3.82642,-1.52037 -5.84375,-1.46875 z m 2.0625,9.46875 c -1.60422,0.85066 -2.55719,3e-4 0,0 z"
+           style="font-size:20.66493225px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4092"
+           d="m 239.125,-458.5625 c -7.50656,1.99122 -13.60424,11.40868 -9.0625,18.6875 2.31485,2.93328 6.76545,1.1711 8.9375,0.3125 2.38503,3.56959 6.85707,-0.33169 5.53125,-3.78125 0.18706,-3.78446 -0.9705,-8.88254 -5.78125,-8.65625 2.15815,0.863 5.67664,-0.088 5.40625,-3.3125 -0.11127,-2.36716 -2.99537,-3.47874 -5.03125,-3.25 z m -4.5,12.90625 c 3.4468,0.15288 -1.04404,2.66771 0,0 z"
+           style="font-size:20.66493225px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4094"
+           d="m 246.84375,-453.4375 c -4.82383,2.1567 -1.46203,9.0802 -1.875,13.09375 0.24753,3.98896 6.14068,3.35337 6,-0.5 0.0558,-3.62692 2.92874,-5.71903 5.625,-7.5 1.68932,-4.73573 -5.01763,-4.42544 -6.65625,-2.9375 -0.21855,-1.38807 -1.70475,-2.52195 -3.09375,-2.15625 z"
+           style="font-size:20.66493225px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4096"
+           d="m 264.5625,-454.03125 c -6.95768,0.0145 -12.72827,9.58875 -6.53125,14.5625 5.59032,4.43185 13.48828,-0.97881 13.53125,-7.53125 0.87748,-4.43888 -2.54141,-7.85891 -7,-7.03125 z m 1.28125,5.9375 c 0.3779,2.27679 -3.00975,6.56694 -4.3125,3.125 0.0862,-1.97969 2.44855,-3.38871 4.3125,-3.125 z"
+           style="font-size:20.66493225px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4098"
+           d="m 281.59375,-453.65625 c -3.90398,1.15746 -2.44282,6.61607 -5.25,9.15625 -0.54675,-2.99722 1.18363,-9.6597 -3.96875,-8.8125 -3.67302,2.71027 -1.67642,8.60355 -1.28125,12.5 0.72782,4.7152 6.79131,3.34031 8.6875,1.40625 2.14102,4.19511 7.5872,-0.22786 4.84375,-3.6875 -1.85497,-3.30561 3.00763,-10.40269 -3.03125,-10.5625 z"
+           style="font-size:20.66493225px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4100"
+           d="m 286.78125,-454.03125 c -4.04961,2.78361 -0.26246,8.93348 -0.9375,13.0625 -0.43547,4.0568 5.91903,4.80332 5.53125,0.46875 -0.12492,-1.62892 2.04525,-7.19245 1.59375,-2.90625 -1.50268,3.25434 2.39913,7.38039 4.9375,4.03125 0.88692,-4.39785 1.57003,-10.25883 -1.6875,-13.90625 -2.04777,-2.21296 -5.14041,0.98123 -6.0625,0.96875 -0.37527,-1.39758 -2.02481,-2.29358 -3.375,-1.71875 z"
+           style="font-size:20.66493225px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4102"
+           d="m 310.78125,-462.46875 c -4.00741,1.40455 -1.31626,7.76425 -2.84375,9.59375 -7.71843,-3.39937 -14.81668,10.84623 -6.34375,14.21875 2.33696,1.56639 5.84979,-0.56621 7.3125,-0.21875 1.69466,4.06632 7.33857,0.529 5.5625,-3.15625 -0.42764,-6.85552 0.10576,-13.73113 0.0937,-20.59375 -1.2336,0.14562 -2.59743,-0.23379 -3.78125,0.15625 z m -4.71875,15.3125 c 3.99402,1.1668 -3.82177,5.28368 -2.0625,1.34375 0.60395,-0.31573 1.31084,-1.81408 2.0625,-1.34375 z"
+           style="font-size:20.66493225px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4104"
+           d="m 315.46875,-459.3125 c -4.56266,2.78015 -0.9431,9.50273 -1.52611,13.81021 -0.46693,2.9575 0.51108,9.79973 4.86986,6.93979 1.97974,-2.05868 0.57072,-5.41585 2.4375,-7.5 -0.40567,2.86652 0.12996,10.25594 4.625,7.0625 1.60115,-3.63606 1.75459,-8.74332 0.0937,-12.4375 -1.40822,-2.68036 -5.18169,-1.98173 -6.65625,-0.78125 -0.30429,-2.46825 0.29673,-7.96133 -3.84375,-7.09375 z"
+           style="font-size:20.66493225px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4106"
+           d="m 334.625,-454.03125 c -6.96817,0.0231 -12.70448,9.57958 -6.53125,14.5625 5.58741,4.43234 13.48962,-0.96695 13.53125,-7.53125 0.89458,-4.50332 -2.48479,-7.80731 -7,-7.03125 z m 1.28125,5.9375 c 0.46073,2.33222 -3.06278,6.54878 -4.3125,3.125 0.12943,-2.02762 2.42087,-3.34216 4.3125,-3.125 z"
+           style="font-size:20.66493225px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4108"
+           d="m 350.125,-454.59375 c -6.54613,-0.17375 -13.41818,8.88772 -7.53125,14 2.04585,0.9816 0.38655,4.37799 3.25,5.25 3.21871,2.19936 9.99563,3.81168 11.125,-1.1875 -0.51356,-5.01167 -0.83081,-10.06487 -0.34375,-14.9375 -0.80248,-2.65762 -4.08356,-3.3427 -6.5,-3.125 z m 0.0625,5.65625 c -0.15476,1.4222 -2.83358,5.22865 -4,3.6875 0.35654,-1.66148 2.38577,-3.22444 4,-3.6875 z M 350.875,-440 c -0.7189,1.70624 -0.53352,-2.0591 0,0 z"
+           style="font-size:20.66493225px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4110"
+           d="m 179.78125,-432.5625 c -3.21288,-0.18064 -10.27417,2.91194 -5.6875,6.375 1.62035,0.55777 3.68839,-0.28162 2.78125,2.4375 -0.12038,2.42016 1.60423,6.29453 -2.0625,5.78125 -4.23505,1.91814 -0.16219,7.00982 3.34375,5.8125 3.07837,-0.41793 9.55053,-2.37183 6.65625,-6.5 -2.28285,-1.53854 -1.42528,-6.39879 -0.90625,-8.25 3.77589,-1.52554 0.87858,-6.87067 -2.65625,-5.6875 -0.48934,0.019 -0.98054,-0.0285 -1.46875,0.0312 z"
+           style="font-size:20.66493225px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4112"
+           d="m 188.9375,-428.34375 c -4.59228,1.81286 -0.9354,8.01926 -1.5625,11.59375 -1.11129,3.39814 3.88983,7.67877 5.46875,3.28125 0.0618,-1.62066 0.95962,-5.7105 1.78125,-5.625 -1.36365,3.0899 0.94594,9.05921 4.625,5.90625 1.6854,-3.74111 1.2057,-8.78926 -0.125,-12.6875 -1.32014,-3.15222 -5.59023,-2.72745 -7.1875,-0.0625 -0.12116,-1.47262 -1.54344,-2.66585 -3,-2.40625 z"
+           style="font-size:20.66493225px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4114"
+           d="m 207.65625,-437.09375 c -5.141,0.78406 -3.55775,7.43299 -4.875,10.3125 -3.80031,-0.13848 -4.76283,5.79084 -0.5625,5.84375 2.36862,0.40337 0.30129,5.01252 2,7.0625 2.44285,3.82949 7.35884,-0.62166 4.875,-4 -0.8644,-3.3551 0.66963,-4.54416 3.40625,-5.71875 2.02159,-2.19486 -1.05924,-4.88791 -3.4375,-4.0625 0.009,-2.19307 0.1486,-5.53622 1.40625,-2.09375 4.11404,3.01078 6.81126,-4.84737 2.53125,-6.5 -1.58238,-0.93411 -3.56373,-0.86604 -5.34375,-0.84375 z"
+           style="font-size:20.66493225px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4116"
+           d="m 219.84375,-427.78125 c -6.88819,1.14827 -8.68581,11.51993 -2.4375,14.625 4.66722,2.86976 13.14801,-1.77582 11.5,-7.375 -1.75072,-1.45927 -0.70855,-5.10322 -3.65625,-6.25 -1.57822,-1.01226 -3.58446,-1.05711 -5.40625,-1 z m 2.21875,9.46875 c -1.59854,0.79732 -2.29242,-7.6e-4 0,0 z"
+           style="font-size:20.66493225px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4118"
+           d="m 233.59375,-427.375 c -4.09723,0.3059 -8.16041,6.17828 -4.21875,9 -3.63841,2.86069 0.80275,7.75636 4.53125,7.03125 6.01388,0.83605 6.88473,-8.62487 3.65625,-9.75 6.0259,-1.12101 0.0829,-8.58309 -3.96875,-6.28125 z m 1.6875,5.3125 c 2.07093,0.93234 -1.14555,0.0206 0,0 z"
+           style="font-size:20.66493225px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4120"
+           d="m 245.1875,-435.96875 c -3.84407,0.14906 -2.31128,5.17785 -2.96875,6.75 -4.25349,-0.46862 -5.0142,6.51169 -0.40625,5.84375 2.3495,-0.0323 1.24559,4.91355 1.875,6.96875 -1.08351,4.06515 5.42133,6.66479 6.34375,2.125 0.43592,-3.36292 -2.26095,-8.22797 -0.1875,-10.59375 4.40646,-0.49335 2.73574,-6.85287 -1.3125,-5.5625 -0.21417,-2.19931 -0.14043,-5.85704 -3.34375,-5.53125 z"
+           style="font-size:20.66493225px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4122"
+           d="m 259.28125,-427.78125 c -3.30282,0.0801 -10.05809,3.17174 -5.96875,6.84375 -1.47538,1.7021 -2.69774,6.97684 1.09375,8.03125 2.69294,1.54568 5.29541,-1.33297 7.46875,0.53125 5.37093,-0.76204 2.74622,-8.23668 2.65625,-11.96875 -0.73277,-2.21557 -2.86783,-3.80531 -5.25,-3.4375 z"
+           style="font-size:20.66493225px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4124"
+           d="m 270.09375,-435.96875 c -3.83527,0.15828 -2.3385,5.09178 -2.96875,6.75 -4.24724,-0.45118 -5.03636,6.49168 -0.40625,5.84375 2.39012,0.16382 1.30993,5.2262 1.875,7.5625 -0.73397,4.63859 7.06516,5.41004 6.375,0.46875 0.0441,-2.89667 -2.19262,-7.64257 -0.21875,-9.5625 4.40039,-0.43612 2.72082,-6.84122 -1.3125,-5.53125 -0.21417,-2.19931 -0.14043,-5.85704 -3.34375,-5.53125 z"
+           style="font-size:20.66493225px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4126"
+           d="m 279.0625,-433.8125 c -2.76784,0.67865 -2.25078,4.62291 -0.625,5.65625 -3.57841,3.44307 -0.69244,9.45068 -1,13.84375 1.84055,3.54027 7.05303,0.8645 5.8125,-2.78125 -0.17184,-3.57219 0.1674,-8.37596 -1.53125,-11.03125 2.99921,-2.00244 0.8836,-6.7967 -2.65625,-5.6875 z"
+           style="font-size:20.66493225px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4128"
+           d="m 291.9375,-428.21875 c -7.24185,-0.48133 -13.569,9.53832 -7.03125,14.65625 5.85214,4.46013 13.75421,-1.46516 13.46875,-8.15625 0.55273,-4.03944 -2.40875,-7.03585 -6.4375,-6.5 z m 0.6875,5.96875 c 0.66217,2.47573 -3.61506,6.55156 -4.34375,2.90625 0.47779,-1.87806 2.42188,-3.18189 4.34375,-2.90625 z"
+           style="font-size:20.66493225px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4130"
+           d="m 300.53125,-428.34375 c -4.99252,2.06777 -0.7955,8.96414 -1.53125,13.0625 -0.48902,4.03483 5.94587,5.11386 5.59375,0.5625 -0.19771,-1.62039 2.00648,-7.15466 1.5625,-2.875 -1.55304,3.27899 2.35842,7.42199 4.9375,4.03125 0.89976,-4.3778 1.60861,-10.42166 -1.8125,-13.9375 -1.97955,-2.08711 -5.08938,0.97154 -5.875,1.125 -0.34991,-1.23589 -1.58539,-2.19315 -2.875,-1.96875 z"
+           style="font-size:20.66493225px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4132"
+           d="m 315.59375,-428.09375 c -3.70106,1.50903 -1.17273,6.49011 -1.15625,9.5 -1.49057,1.95119 -1.51523,5.86491 1.84375,6.1875 3.96038,1.04824 4.79578,-4.5289 3.15625,-6.71875 0.33397,-3.143 3.91748,-9.2795 -1.4375,-8.875 -0.81989,0.0696 -1.59892,-0.31851 -2.40625,-0.0937 z"
+           style="font-size:20.66493225px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4134"
+           d="m 326.4375,-428.125 c -3.86256,1.39007 -1.23722,6.55049 -1.28125,9.53125 -1.44018,1.97851 -1.45678,5.85629 1.875,6.1875 3.84342,1.0725 4.90112,-4.5485 3.125,-6.6875 0.28365,-3.06319 4.03103,-9.43221 -1.40625,-8.90625 -0.8122,0.0738 -1.4816,-0.28111 -2.3125,-0.125 z"
+           style="font-size:20.66493225px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4136"
+           d="m 337.0625,-428.09375 c -3.73996,1.53008 -1.11627,6.42896 -1.15625,9.5 -1.52416,1.97777 -1.45154,5.94876 1.9375,6.21875 3.8472,0.90877 4.74569,-4.5426 3.0625,-6.71875 0.28789,-3.17051 4.00331,-9.36386 -1.4375,-8.90625 -0.81989,0.0696 -1.59892,-0.31851 -2.40625,-0.0937 z"
+           style="font-size:20.66493225px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+      </g>
+      <text
+         sodipodi:linespacing="125%"
+         id="text3993"
+         y="-440.30981"
+         x="257.99982"
+         style="font-size:20.66493225px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Purisa;-inkscape-font-specification:Purisa Bold"
+           y="-440.30981"
+           x="257.99982"
+           id="tspan3995"
+           sodipodi:role="line">Cute Groundhog</tspan><tspan
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Purisa;-inkscape-font-specification:Purisa Bold"
+           id="tspan3997"
+           y="-414.47864"
+           x="257.99982"
+           sodipodi:role="line">Infestation!!!</tspan></text>
+      <path
+         style="fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:0.87091571;stroke-opacity:1"
+         d="m 267.04242,-350.36831 c 2.02342,1.74475 -0.12635,3.54329 -5.57345,4.26121 -4.00089,0.52731 -4.9229,-0.63991 -4.06218,-3.38489 3.72603,-11.88296 11.54035,-9.77593 16.58652,-6.75974 -10.19283,0.88541 -8.78161,4.30484 -6.95089,5.88342 z"
+         id="path3977-5-3"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ssscs" />
+      <path
+         style="fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:0.87091571;stroke-opacity:1"
+         d="m 257.10769,-352.48041 c 1.2516,3.72117 2.45265,7.33428 -2.56782,6.94162 -2.66366,-0.20833 -6.01099,0.23345 -5.99563,-2.43827 0.0109,-1.89253 -1.25556,-23.05014 -3.28678,-24.64948 0.82438,-1.84262 10.02483,14.71896 11.85023,20.14613 z"
+         id="path3963-4-7"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ssscs" />
+      <path
+         sodipodi:nodetypes="ssscs"
+         inkscape:connector-curvature="0"
+         id="path3975-7-1"
+         d="m 262.80009,-348.27508 c -0.84952,2.53311 1.92714,2.47572 4.58794,2.23375 2.66081,-0.24199 3.96845,-1.29543 3.39912,-3.90585 -3.21525,-14.74228 -5.68957,-14.79842 -6.88241,-18.89133 1.96655,5.26035 -0.52942,18.84814 -1.10465,20.56343 z"
+         style="fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:0.87091571;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="csscsc"
+         inkscape:connector-curvature="0"
+         id="path3969-2-2"
+         d="m 246.66253,-346.29967 c 0.85712,1.74722 3.46745,1.38844 4.87624,1.48195 5.17109,0.34322 2.8547,-6.04183 0.34597,-8.33799 -2.97113,-2.71939 -11.91467,-11.55282 -15.14191,-12.26215 2.83326,2.35843 8.33318,15.50938 9.91968,19.11816 z"
+         style="fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:0.87091571;stroke-opacity:1" />
+    </g>
+    <g
+       id="0sign-hits"
+       transform="matrix(1.5390979,0,0,1.5390979,-6.5847589,444.36219)"
+       inkscape:label="#g4014">
+      <path
+         style="fill:#ac7905;fill-opacity:1;stroke:#000000;stroke-width:1.25000000000000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         d="m 469.31487,-436.19026 0,72.79425 -2.40418,0.53122 -2.95912,0.85805 -2.52096,0.65028 -2.68297,-1.25424 -2.55819,-1.10771 -3.05108,0.3224 0,-72.79425 2.71644,1.0213 5.06542,-2.34898 5.26968,2.85962 z"
+         id="path3989"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccccccccccccc" />
+      <path
+         sodipodi:nodetypes="cccccccccccccccc"
+         inkscape:connector-curvature="0"
+         id="path3991"
+         d="m 399.884,-464.65899 115.63147,0 -1.09403,6.19387 2.42047,8.47821 -5.73074,8.92139 5.6826,9.60696 -4.02746,2.82964 5.06168,18.48778 -2.31252,11.31366 -115.63147,0 2.80556,-9.04928 -8.03985,-15.50207 7.14592,-14.34822 -5.4942,-11.96763 3.61248,-11.16513 z"
+         style="fill:#ac7905;fill-opacity:1;stroke:#000000;stroke-width:1.25000000000000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <path
+         transform="translate(296.50071,-103.94765)"
+         d="m 164.40573,-304.87988 c 0,0.34863 -0.28262,0.63125 -0.63125,0.63125 -0.34864,0 -0.63126,-0.28262 -0.63126,-0.63125 0,-0.34863 0.28262,-0.63125 0.63126,-0.63125 0.34863,0 0.63125,0.28262 0.63125,0.63125 z"
+         sodipodi:ry="0.63125068"
+         sodipodi:rx="0.63125068"
+         sodipodi:cy="-304.87988"
+         sodipodi:cx="163.77448"
+         id="path3993"
+         style="fill:#d39440;fill-opacity:1;stroke:#656565;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         sodipodi:type="arc" />
+      <path
+         sodipodi:type="arc"
+         style="fill:#d39440;fill-opacity:1;stroke:#656565;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="path3995"
+         sodipodi:cx="163.77448"
+         sodipodi:cy="-304.87988"
+         sodipodi:rx="0.63125068"
+         sodipodi:ry="0.63125068"
+         d="m 164.40573,-304.87988 c 0,0.34863 -0.28262,0.63125 -0.63125,0.63125 -0.34864,0 -0.63126,-0.28262 -0.63126,-0.63125 0,-0.34863 0.28262,-0.63125 0.63126,-0.63125 0.34863,0 0.63125,0.28262 0.63125,0.63125 z"
+         transform="translate(296.50071,-150.70462)" />
+      <g
+         id="g4278"
+         transform="translate(0,2.598925)">
+        <path
+           inkscape:connector-curvature="0"
+           id="path4253"
+           d="m 435.375,-461.59375 c -4.99081,2.30289 -1.62652,9.49086 -2.42073,13.62385 0.88425,3.72378 -1.3085,11.27465 3.98323,12.2824 6.12028,-0.6152 -0.3648,-10.36902 5.34375,-10.71875 3.33762,-1.24623 0.28279,5.7567 2.96875,7.65625 3.16399,2.40498 6.50833,-1.53992 5.0625,-4.78125 -0.96141,-4.88968 1.42432,-11.17577 -1.78125,-15.28125 -3.35392,-1.91243 -5.35672,2.28016 -5.0625,5.125 -3.4612,1.69944 -5.21343,1.16898 -4.5625,-3.09375 -0.13886,-2.18091 -0.48389,-5.47348 -3.53125,-4.8125 z"
+           style="font-size:24.51045799px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4255"
+           d="m 453,-461.75 c -3.38574,0.89389 -2.19752,5.81864 0.15625,6.40625 -4.83385,1.9925 -1.57683,8.75394 -2.1875,12.59375 -1.0291,3.39142 2.4586,7.20493 5.5625,4.59375 2.21144,-4.30048 0.47557,-10.22282 0.125,-14.96875 -0.14964,-1.76284 -3.03999,-2.08702 -0.34375,-2.875 2.51301,-2.55681 0.17324,-6.72527 -3.3125,-5.75 z"
+           style="font-size:24.51045799px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4257"
+           d="m 464.34375,-464.25 c -4.19411,0.36349 -2.71044,5.57136 -2.875,7.90625 -4.04085,-0.80473 -6.84678,5.47365 -2.15625,6.28125 2.75228,-0.76988 3.38781,0.4301 3.04969,3.36869 0.26955,3.58767 -0.0767,12.36758 6.04406,9.81881 3.25906,-3.35176 -0.53254,-8.57924 0.15625,-12.71875 -1.02058,-2.94039 5.94185,-2.54626 3.875,-6.53125 -0.96429,-2.8855 -5.69314,-0.01 -4.73543,-3.71263 -0.009,-2.07626 -0.73488,-4.7792 -3.35832,-4.41237 z"
+           style="font-size:24.51045799px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4259"
+           d="m 478.59375,-454.0625 c -4.64205,0.33791 -9.61186,7.28484 -4.21875,10.28125 -4.53916,2.10066 -0.65002,8.51074 3.53125,7.875 6.09468,1.88351 10.74038,-8.45089 4.34375,-10.9375 -1.52235,-0.54605 -4.24397,-1.36605 -1.4375,-1.65625 2.3514,3.15261 7.21498,-0.92212 4.1875,-3.6875 -1.33016,-2.28645 -4.0642,-2.40651 -6.40625,-1.875 z m -0.78125,11.75 c 3.25428,0.98441 -0.29157,0.93591 0,0 z"
+           style="font-size:24.51045799px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4261"
+           d="m 489.125,-454.03125 c -4.74395,1.56778 -1.72221,10.90873 2.90625,7.34375 3.15821,-2.21783 1.20132,-8.44298 -2.90625,-7.34375 z m 0.71875,9.28125 c -5.35438,0.8238 -2.64639,10.6548 2.1875,7.25 2.36075,-2.22811 2.0257,-7.72752 -2.1875,-7.25 z"
+           style="font-size:24.51045799px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+      </g>
+      <text
+         sodipodi:linespacing="125%"
+         id="text3999"
+         y="-436.55045"
+         x="432.56479"
+         style="font-size:24.51045799px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+         xml:space="preserve"><tspan
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Purisa;-inkscape-font-specification:Purisa Bold"
+           y="-436.55045"
+           x="432.56479"
+           id="tspan4001"
+           sodipodi:role="line">Hits:</tspan></text>
+      <path
+         style="fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:0.87091571;stroke-opacity:1"
+         d="m 459.12637,-367.68876 c 0.90943,3.81923 1.82578,6.18895 -3.18598,6.68053 -3.1382,0.30781 -6.47495,0.38937 -5.75016,-2.97128 0.399,-1.85004 0.83729,-18.87656 -1.04072,-20.6533 0.98788,-1.76038 8.65051,11.37386 9.97686,16.94405 z"
+         id="path3963-4-9"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ssscs" />
+      <path
+         style="fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:0.88432735;stroke-opacity:1"
+         d="m 472.21814,-364.89718 c 0.21887,1.3775 1.11533,3.78334 -5.01301,4.78966 -2.67707,0.43959 -6.09281,-2.39846 -4.81137,-4.78966 6.48893,-12.10851 4.44848,-13.67236 5.44432,-19.62536 3.12918,3.86281 4.01083,17.30146 4.38006,19.62536 z"
+         id="path3971-9-4"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ssscs" />
+      <path
+         style="fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:0.74602461;stroke-opacity:1"
+         d="m 464.92765,-363.59839 c 0.41138,0.49905 0.43345,3.77627 -4.64804,3.69454 -4.04851,-0.0651 -4.60315,-1.65441 -4.64804,-3.69454 -0.22925,-10.42266 7.64945,-20.06177 7.71257,-17.75366 -2.69471,2.55928 0.81742,16.8243 1.58351,17.75366 z"
+         id="path3973-4-9"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ssscs" />
+    </g>
+    <g
+       id="00"
+       transform="translate(288.4488,400.73354)"
+       inkscape:label="#g3374">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3293"
+         d="m 296.5,-461.75 c -5.96237,1.53498 -11.02039,6.15239 -12.40148,12.25962 -2.60798,4.7764 -4.9677,11.18783 -0.28602,15.55288 5.33294,5.74523 14.80828,0.53947 17.40625,-5.71875 4.28655,-6.51778 6.18091,-21.12666 -4.71875,-22.09375 z m 0.375,8.28125 c 1.28305,3.80234 -1.26696,9.15371 -3.625,12.28125 -1.37544,2.19804 -5.54149,3.18011 -4.03125,-0.59375 1.48482,-3.94089 3.26637,-10.27505 7.65625,-11.6875 z"
+         style="font-size:41.73131561px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+      <path
+         d="m 295.86243,-441.12791 c 0.0278,-0.30602 0.31993,-0.95981 0.87636,-1.96137 0.58422,-1.00154 1.15455,-2.29521 1.71098,-3.88101 0.5564,-1.58578 0.83461,-3.26894 0.83463,-5.04949 -2e-5,-1.27974 -0.20868,-2.17001 -0.62597,-2.67081 -0.41733,-0.52857 -1.01548,-0.79287 -1.79445,-0.79289 -0.72336,2e-5 -1.41888,0.19477 -2.08656,0.58424 -1.47452,0.80682 -3.14377,2.93512 -5.00776,6.38489 -1.83619,3.4498 -2.75427,6.27361 -2.75427,8.47146 0,0.80681 0.29211,1.50233 0.87636,2.08656 0.58423,0.58424 1.29366,0.87636 2.1283,0.87636 0.9459,0 2.17001,-0.61206 3.67235,-1.83618 1.30757,-1.08501 2.03091,-1.82226 2.17003,-2.21176 m -8.17934,-11.97689 c 0,-0.44511 0.58423,-1.21018 1.75272,-2.29522 1.16847,-1.08499 2.51778,-2.08654 4.04794,-3.00465 1.53013,-0.91807 2.71252,-1.37711 3.54716,-1.37714 1.2241,3e-5 2.46213,0.75119 3.71409,2.25349 1.27973,1.47453 1.91961,3.49154 1.91964,6.05104 -3e-5,3.61673 -1.22414,7.49774 -3.67236,11.64304 -2.58736,4.2566 -5.8424,6.38489 -9.76513,6.38489 -2.2535,0 -4.02012,-1.29367 -5.29987,-3.88101 -0.63989,-1.27975 -0.95983,-2.23957 -0.95982,-2.87946 -1e-5,-1.25193 0.77898,-3.6167 2.33695,-7.09432 1.58578,-3.4776 2.37868,-5.41114 2.37868,-5.80066"
+         style="font-size:41.73131561px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold"
+         id="path3344"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       id="01"
+       transform="translate(288.4488,400.73354)"
+       inkscape:label="#g3378">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3295"
+         d="m 315.3125,-461.90625 c -4.38109,1.45786 -5.20144,7.24489 -8.78125,9.84375 -2.76623,3.93967 3.56663,7.78203 6.15625,3.9375 0.81771,5.04755 -1.68072,12.16494 2.5625,16.03125 3.98836,1.95903 6.04132,-3.23898 5.0625,-6.4375 -0.80495,-7.22894 0.88792,-15.24173 -1.875,-22.0625 -0.69178,-0.99886 -1.92409,-1.51947 -3.125,-1.3125 z"
+         style="font-size:41.73131561px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+      <path
+         d="m 316.9048,-433.69973 c -0.47297,0 -0.83464,-0.13911 -1.08502,-0.41732 -0.2504,-0.27821 -0.47296,-0.86244 -0.6677,-1.75271 -0.16693,-0.89027 -0.29213,-2.07265 -0.37558,-3.54716 -0.0557,-1.50232 -0.0835,-3.56107 -0.0835,-6.17624 -10e-6,-3.92273 -0.0835,-6.51007 -0.25039,-7.76202 -0.13912,0.13912 -0.58425,0.69554 -1.3354,1.66925 -0.72335,0.97375 -1.40496,1.75273 -2.04484,2.33695 -0.61206,0.55643 -1.16848,0.83464 -1.66925,0.83463 -0.3895,10e-6 -0.73726,-0.13909 -1.04328,-0.41731 -0.27822,-0.2782 -0.41732,-0.63987 -0.41732,-1.08502 0,-0.36165 0.0835,-0.66768 0.25039,-0.91809 0.16692,-0.25037 0.47295,-0.61204 0.91809,-1.08501 0.47295,-0.47294 0.86244,-0.90416 1.16848,-1.29367 l 1.41886,-1.83618 c 0.33385,-0.38947 0.75116,-1.04326 1.25194,-1.96137 0.52859,-0.91807 1.00154,-1.61359 1.41887,-2.08657 0.44512,-0.50075 0.9459,-0.75114 1.50232,-0.75116 0.0278,2e-5 0.0695,0.0139 0.1252,0.0417 0.0556,3e-5 0.11127,3e-5 0.16692,0 0.72333,0.19477 1.18238,1.07113 1.37714,2.62907 0.13909,1.1685 0.30601,4.06187 0.50077,8.68012 0.19473,4.61827 0.29211,8.30453 0.29212,11.05879 -1e-5,1.64144 -0.0557,2.6569 -0.16692,3.04639 -0.33387,0.5286 -0.75118,0.7929 -1.25194,0.7929"
+         style="font-size:41.73131561px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold"
+         id="path3346"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       id="02"
+       transform="matrix(0.8473467,0,0,1,337.59724,400.73354)"
+       inkscape:label="#g3382">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3297"
+         d="m 336.65625,-460.84375 c -6.05195,0.52457 -11.92962,4.43887 -14.4375,9.75 -1.28454,3.40813 2.51945,7.08509 5.15625,3.8125 2.73291,-2.91462 7.48375,-7.24591 11.46875,-5.625 -1.16343,6.74356 -6.1683,11.82319 -10.84375,16.4375 -3.58684,3.95246 2.83346,8.17385 6.28125,5.53125 6.38248,-1.20115 13.05058,-1.20086 19.375,-2.5625 3.70082,-3.02487 -0.75463,-7.66416 -4.625,-6.5 -2.37655,-0.32112 -7.19801,1.02074 -7.9375,0.0625 3.26543,-5.19308 8.57112,-13.45422 3.375,-19.0625 -2.15155,-1.81908 -5.13388,-2.04583 -7.8125,-1.84375 z"
+         style="font-size:41.73131561px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+      <path
+         d="m 349.03399,-437.99806 c 1.33538,0 2.32302,0.11129 2.96293,0.33385 0.66767,0.19475 1.00152,0.63988 1.00155,1.3354 -3e-5,0.47296 -0.0974,0.82072 -0.29212,1.04329 -0.19478,0.19474 -0.57036,0.33385 -1.12675,0.41731 -0.55644,0.0556 -1.18241,0.0835 -1.8779,0.0835 -0.66773,0 -1.65537,0.0556 -2.96293,0.16693 -1.3076,0.11128 -2.643,0.27821 -4.0062,0.50077 -1.64146,0.27821 -3.28289,0.51469 -4.9243,0.70943 -1.61363,0.19475 -2.76819,0.33385 -3.4637,0.41732 -0.66771,0.0835 -1.09894,0.20865 -1.29367,0.37558 -0.3895,0.27821 -0.89028,0.41731 -1.50233,0.41731 -0.63989,0 -1.23804,-0.16692 -1.79444,-0.50077 -0.52861,-0.33385 -0.79291,-0.72335 -0.7929,-1.16848 -10e-6,-0.58424 0.58423,-1.50233 1.75272,-2.75427 1.16846,-1.25193 2.14219,-2.1422 2.92119,-2.6708 1.02936,-0.72334 2.48995,-2.75426 4.38179,-6.09277 1.91962,-3.36631 2.87944,-6.09276 2.87946,-8.17934 -2e-5,-0.66768 -0.20868,-1.12673 -0.62597,-1.37713 -0.38951,-0.25037 -1.23805,-0.37556 -2.54561,-0.37559 -1.36324,3e-5 -2.69864,0.25041 -4.00621,0.75117 -1.27977,0.50079 -2.37869,1.11285 -3.29677,1.83618 -0.9181,0.72336 -1.75273,1.4467 -2.50388,2.17002 -0.75117,0.72336 -1.39105,1.33542 -1.91964,1.83618 -0.5286,0.50079 -0.90418,0.75118 -1.12675,0.75117 -0.0278,-0.0556 -0.0974,-0.0974 -0.20865,-0.1252 -0.11129,-0.0278 -0.20866,-0.0695 -0.29212,-0.12519 -0.0557,-0.0556 -0.11129,-0.22255 -0.16693,-0.50078 -0.0556,-0.30601 -0.0835,-0.70941 -0.0835,-1.21021 0,-0.63986 0.0974,-1.15455 0.29212,-1.54406 0.22256,-0.38947 0.45904,-0.65377 0.70943,-0.79289 0.2782,-0.13909 0.52859,-0.2921 0.75116,-0.45904 0.25039,-0.16691 0.4034,-0.36166 0.45905,-0.58424 0.0278,-0.19473 0.0974,-0.37556 0.20866,-0.54251 0.13909,-0.19473 0.33384,-0.38947 0.58423,-0.58424 0.25039,-0.22254 0.48686,-0.41729 0.70944,-0.58424 0.25038,-0.1669 0.61205,-0.41729 1.08501,-0.75116 0.47295,-0.33383 0.87635,-0.61204 1.21021,-0.83463 0.63987,-0.50075 1.69706,-1.00152 3.17158,-1.50232 1.47449,-0.52858 3.07419,-0.79287 4.7991,-0.7929 2.86553,3e-5 4.79908,0.75119 5.80065,2.25349 0.47293,0.72337 0.70941,1.66928 0.70943,2.83773 -2e-5,2.19787 -0.54253,4.38181 -1.62752,6.55182 -2.44825,4.84084 -4.75738,8.34627 -6.92739,10.51629 5.34158,-0.83462 9.66773,-1.25194 12.97843,-1.25194"
+         style="font-size:41.73131561px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold"
+         id="path3348"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       id="03"
+       transform="translate(288.4488,400.73354)"
+       inkscape:label="#g3386">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3299"
+         d="m 377.09375,-461.84375 c -6.18396,1.77874 -13.6882,0.79018 -19.09375,4.5625 -1.58557,4.01827 3.57049,7.09398 7.08092,5.15281 4.33865,-1.05691 -0.29131,1.53505 -1.51842,2.53469 -2.97059,5.24947 4.87183,7.67441 8.15625,4.1875 3.60277,-1.54728 2.59101,4.91036 0.125,5.53125 -2.10007,1.52485 -4.05899,1.53366 -4.96875,-1.03125 -2.95025,-3.56808 -7.7369,0.31253 -6.3125,4.21875 1.03633,7.43757 10.79356,6.13501 15.34375,2.90625 6.25127,-3.57408 8.66908,-14.43865 1.5625,-18.46875 4.01677,-1.84076 5.56474,-8.55385 0.3125,-9.59375 l -0.34375,-0.0625 -0.34375,0.0625 z"
+         style="font-size:41.73131561px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+      <path
+         d="m 367.29601,-433.19896 c -3.1994,0 -4.7991,-1.62752 -4.7991,-4.88256 0,-1.4745 0.44513,-2.21176 1.33541,-2.21176 0.69551,0 1.30757,0.34776 1.83617,1.04328 0.55641,0.69553 0.83462,1.40496 0.83463,2.1283 -1e-5,0.25039 0.0417,0.4034 0.12519,0.45904 0.11128,0.0278 0.41731,0.0417 0.91809,0.0417 1.33539,1e-5 2.58733,-0.25038 3.75582,-0.75116 1.19628,-0.52859 2.017,-0.98764 2.46215,-1.37713 0.47294,-0.38949 0.84852,-0.75116 1.12674,-1.08502 0.66769,-0.77898 1.00154,-2.04482 1.00156,-3.79755 -2e-5,-1.64142 -0.22259,-2.71252 -0.66771,-3.21331 -0.41733,-0.50076 -1.08503,-0.75115 -2.0031,-0.75116 -1.41888,1e-5 -2.68473,0.31995 -3.79755,0.95982 -1.11285,0.61207 -1.91965,0.9181 -2.42041,0.91809 -0.66772,1e-5 -1.1824,-0.18083 -1.54406,-0.54251 -0.36168,-0.36166 -0.54252,-0.79288 -0.54251,-1.29367 -10e-6,-0.36166 0.0974,-0.66769 0.29212,-0.91809 0.19474,-0.25037 0.45903,-0.37557 0.79289,-0.37558 0.47295,-0.11127 1.55796,-1.02936 3.25505,-2.75427 1.69706,-1.75269 2.78207,-2.93508 3.25504,-3.54716 -1.02939,0.0835 -2.42043,0.25041 -4.17313,0.50077 -1.72491,0.25041 -3.24114,0.48689 -4.54872,0.70944 -1.30758,0.19476 -2.01701,0.29214 -2.12829,0.29212 -0.36168,2e-5 -0.62598,-0.0835 -0.7929,-0.25039 -0.16693,-0.19473 -0.2643,-0.41729 -0.29212,-0.6677 l -0.0417,-0.33385 c -0.25039,-0.0278 -0.47296,-0.11127 -0.6677,-0.25039 -0.16693,-0.1669 -0.25039,-0.37556 -0.25039,-0.62597 0.0556,-0.30601 0.19475,-0.52857 0.41732,-0.6677 0.38948,-0.25037 1.37712,-0.5564 2.96292,-0.91809 1.58578,-0.36165 3.17157,-0.66768 4.75737,-0.91809 1.6136,-0.27818 3.24112,-0.54248 4.88256,-0.79289 1.64142,-0.25037 2.53168,-0.38947 2.67081,-0.41732 1.3632,-0.25036 2.07263,-0.37555 2.12829,-0.37558 0.47294,3e-5 0.90416,0.26432 1.29367,0.7929 0.4173,0.5008 0.62595,0.94593 0.62597,1.3354 -2e-5,0.19477 -0.1113,0.47298 -0.33385,0.83462 -0.22259,0.33388 -0.55644,0.75119 -1.00155,1.25194 -0.44515,0.47298 -0.87638,0.91811 -1.29367,1.33541 -0.38951,0.38951 -0.9042,0.90419 -1.54406,1.54405 -0.6399,0.6399 -1.12676,1.14068 -1.46059,1.50233 l 0.58424,0 c 0.97371,2e-5 2.0309,0.5147 3.17158,1.54406 1.14063,1.00157 1.86397,2.04485 2.17002,3.12985 0.11126,0.44515 0.16691,1.00156 0.16693,1.66925 -2e-5,2.39261 -0.62599,4.54872 -1.87791,6.46836 -1.00157,1.55797 -2.54563,2.82382 -4.63218,3.79755 -2.08658,0.97373 -4.08968,1.46059 -6.00931,1.46059"
+         style="font-size:41.73131561px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold"
+         id="path3350"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       id="04"
+       transform="translate(288.4488,400.73354)"
+       inkscape:label="#g3390">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3301"
+         d="m 398.875,-461.125 c -6.50628,3.66867 -11.13339,10.54016 -15.34375,16.6875 -2.35578,3.71023 2.23157,6.87562 5.59375,5.5 2.99788,-0.66116 6.12976,-1.74964 5.4375,2.46875 -0.26302,3.63876 3.97444,7.68836 7,4.28125 3.32164,-2.97494 -3.37657,-9.73873 2.65625,-10.09375 4.87338,-0.0374 4.36749,-7.25338 -0.15625,-7.40625 -1.80148,-0.31661 -3.97847,1.86827 -2.96875,-1.6875 -0.78861,-3.25506 4.36977,-6.23576 0.4375,-9.09375 -0.73097,-0.59796 -1.72584,-0.78244 -2.65625,-0.65625 z"
+         style="font-size:41.73131561px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+      <path
+         d="m 389.96198,-444.25776 c 1.50232,-0.22255 2.64297,-0.40339 3.42197,-0.5425 0.77897,-0.1391 1.36321,-0.29211 1.75271,-0.45905 0.4173,-0.16691 0.65378,-0.30602 0.70944,-0.41731 0.0835,-0.11127 0.12518,-0.30602 0.12519,-0.58424 -1e-5,-0.36166 -0.0974,-1.4884 -0.29212,-3.38024 l -0.16692,-1.50232 -1.08502,1.12674 c -1.64144,1.75273 -3.12986,3.67237 -4.46525,5.75892 m -3.00465,3.4637 c -1.33541,10e-6 -2.00311,-0.47295 -2.00311,-1.41886 0,-0.75116 0.55642,-1.91963 1.66926,-3.50543 1.89181,-2.53169 3.99228,-5.09121 6.30143,-7.67857 2.30912,-2.58731 3.78362,-4.07573 4.42351,-4.46525 0.22256,-0.11126 0.37557,-0.1669 0.45905,-0.16692 0.13909,2e-5 0.33383,-0.18081 0.58424,-0.54251 0.25037,-0.38947 0.59813,-0.58421 1.04328,-0.58424 0.47294,3e-5 0.84852,0.16695 1.12675,0.50078 0.30601,0.33387 0.45902,0.68163 0.45904,1.04328 -2e-5,0.66773 -0.36169,1.36325 -1.08501,2.08657 -0.38951,0.44515 -0.62599,0.87638 -0.70944,1.29367 -0.0835,0.41733 -0.12521,1.37715 -0.12519,2.87946 -2e-5,3.19941 0.12518,4.79911 0.37558,4.7991 0.61204,10e-6 1.3493,-0.19473 2.21176,-0.58424 0.86243,-0.38948 1.40494,-0.58422 1.62752,-0.58424 0.6955,2e-5 1.27974,0.19476 1.75272,0.58424 0.50075,0.38951 0.75114,0.83464 0.75116,1.3354 -2e-5,0.38951 -0.16695,0.73727 -0.50077,1.04329 -0.30606,0.27822 -0.7651,0.44514 -1.37714,0.50077 -0.47297,0.0278 -1.46061,0.26431 -2.96292,0.70943 l -1.50233,0.45905 0.16693,3.00465 c 0.0556,1.19631 0.1669,2.19786 0.33385,3.00466 0.1669,0.77899 0.31992,1.34931 0.45904,1.71098 0.13909,0.33385 0.20864,0.57033 0.20866,0.70944 -2e-5,0.36167 -0.19477,0.73725 -0.58424,1.12674 -0.38951,0.41731 -0.82073,0.62597 -1.29367,0.62597 -0.779,0 -1.36324,-0.63988 -1.75272,-1.91964 -0.36168,-1.27976 -0.62598,-2.74035 -0.79289,-4.38179 -0.13912,-1.64142 -0.27822,-2.61515 -0.41731,-2.92119 -0.30605,0.0557 -1.09894,0.20866 -2.37869,0.45904 -1.27977,0.22258 -2.50389,0.43124 -3.67235,0.62597 -1.16849,0.16694 -2.10049,0.2504 -2.796,0.25039"
+         style="font-size:41.73131561px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold"
+         id="path3352"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       id="05"
+       transform="translate(288.4488,400.73354)"
+       inkscape:label="#g3394">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3303"
+         d="m 426.6875,-460.625 c -4.82996,1.5999 -11.26451,-1.00959 -15.125,2.5 -1.17183,4.50217 -1.72538,10.31962 0.78125,14.40625 3.33089,3.70092 6.42577,-2.06789 9.46875,-2.34375 1.02924,4.12288 -1.92332,9.71066 -6.6875,6.90625 -0.85475,-2.80677 -5.12971,-4.85732 -6.28125,-1.0625 -1.02477,5.6889 5.10779,10.99165 10.6875,8.875 9.74032,-1.12594 13.50598,-16.16862 5.78125,-21.8125 0.27239,-0.91505 7.27557,-1.22758 6.25,-5.28125 -0.66485,-2.0888 -2.96835,-2.50342 -4.875,-2.1875 z"
+         style="font-size:41.73131561px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+      <path
+         d="m 423.94106,-444.7168 c -2e-5,-1.05718 -0.15303,-1.93354 -0.45905,-2.62907 -0.27822,-0.72333 -0.61207,-1.085 -1.00155,-1.08502 -0.58425,2e-5 -1.48843,0.29213 -2.71253,0.87636 -1.19631,0.55643 -2.08658,1.14067 -2.67081,1.75271 -0.89027,0.89028 -1.57188,1.33542 -2.04483,1.33541 -0.41732,10e-6 -0.89028,-0.26429 -1.41887,-0.7929 -0.61206,-0.75115 -0.91809,-2.93509 -0.91809,-6.55182 0,-3.44976 0.29212,-5.32767 0.87636,-5.63372 0.44513,-0.22255 2.36477,-0.38947 5.75892,-0.50078 3.42196,-0.13908 5.60589,-0.306 6.55182,-0.50077 0.66768,-0.16691 1.34929,-0.25037 2.04484,-0.25039 1.08499,2e-5 1.62749,0.31996 1.62752,0.95982 -3e-5,0.25041 -0.0835,0.45907 -0.25039,0.62597 -0.52862,0.52862 -1.93357,1.05721 -4.21486,1.58579 -2.28133,0.50079 -4.20097,0.75118 -5.75893,0.75116 l -0.75116,0 c -1.75272,2e-5 -2.62908,0.47298 -2.62907,1.41887 -10e-6,0.19476 0.0695,0.52861 0.20865,1.00155 0.16692,0.44515 0.25038,0.94592 0.25039,1.50232 -10e-6,0.25041 -0.0417,0.62599 -0.12519,1.12675 l 0.41731,-0.20866 c 2.11438,-1.14063 4.11748,-1.71096 6.00931,-1.71098 0.72333,2e-5 1.26583,0.0835 1.62752,0.25039 0.91807,0.38951 1.65533,1.29368 2.21176,2.71253 0.5564,1.39106 0.83461,2.83774 0.83463,4.34006 -2e-5,0.66771 -0.0696,1.37714 -0.20866,2.1283 -0.61208,3.17158 -1.78055,5.48071 -3.50543,6.9274 -1.69709,1.44668 -4.1175,2.17002 -7.26125,2.17002 -1.08502,0 -1.85009,-0.11128 -2.29522,-0.33385 -0.44514,-0.19474 -0.98765,-0.69552 -1.62752,-1.50232 -1.22412,-1.47451 -1.83618,-2.76818 -1.83618,-3.88102 0,-1.02936 0.29212,-1.54405 0.87636,-1.54406 0.0278,1e-5 0.0835,0.0139 0.16692,0.0417 0.11128,0.0278 0.16692,0.0556 0.16693,0.0835 -1e-5,1e-5 0.0278,0.0278 0.0835,0.0835 0.0835,0.0278 0.1391,0.0696 0.16693,0.1252 0.0278,0.0278 0.0695,0.0835 0.12519,0.16692 0.0835,0.0835 0.15301,0.19475 0.20866,0.33385 0.0556,0.11129 0.1391,0.25039 0.25038,0.41731 0.50078,0.97374 1.14066,1.64144 1.91965,2.00311 0.77897,0.33385 1.91963,0.50078 3.42196,0.50077 1.36321,10e-6 2.37868,-0.25038 3.04639,-0.75116 0.69551,-0.52859 1.3493,-1.50232 1.96137,-2.92119 0.58422,-1.3354 0.87634,-2.8099 0.87636,-4.42352"
+         style="font-size:41.73131561px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold"
+         id="path3354"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       id="06"
+       transform="translate(288.4488,400.73354)"
+       inkscape:label="#g3398">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3305"
+         d="m 440.03125,-461.40625 c -5.53497,1.48246 -4.76398,9.34217 -6.9375,13.5625 -2.23432,5.2727 -2.85972,13.96423 3.75,16.21875 7.21559,1.9417 16.29063,-5.88899 13.59375,-13.34375 -1.61901,-3.12123 -5.60387,-4.48271 -8.9375,-4.09375 0.73079,-3.60088 5.49441,-10.72669 -0.375,-12.375 -0.36148,0.0255 -0.73874,-0.0454 -1.09375,0.0312 z M 442.6875,-442 c 2.26308,0.61829 -2.72194,4.38187 -3.34375,3.25 -0.92424,-1.99802 1.91843,-2.68444 3.34375,-3.25 z"
+         style="font-size:41.73131561px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+      <path
+         d="m 445.63417,-442.00427 c -10e-6,-0.61205 -0.36168,-1.09891 -1.08501,-1.46059 -0.72336,-0.36166 -1.34933,-0.5425 -1.87791,-0.54251 -0.52861,0.0278 -1.23804,0.23649 -2.1283,0.62597 -0.86246,0.3895 -1.64144,0.89028 -2.33695,1.50233 -0.44514,0.3895 -0.72335,0.69553 -0.83463,0.91809 -0.11129,0.19475 -0.16693,0.48687 -0.16692,0.87635 -1e-5,1.0572 0.13909,1.91965 0.41731,2.58735 0.30602,0.63988 0.57032,1.04328 0.79289,1.2102 0.25038,0.13911 0.43122,0.20866 0.54251,0.20866 0.36166,0 1.6136,-0.5425 3.75582,-1.62752 0.58422,-0.27821 1.21019,-0.91808 1.87791,-1.91964 0.69551,-1.02937 1.04327,-1.82226 1.04328,-2.37869 m -7.09432,-3.54716 c 0.13909,-0.0556 0.43121,-0.22255 0.87635,-0.50077 0.47295,-0.30602 0.98764,-0.57032 1.54406,-0.7929 0.55641,-0.22255 1.09892,-0.33384 1.62752,-0.33385 0.89026,10e-6 1.8779,0.20867 2.96293,0.62597 1.085,0.41733 1.8918,0.90419 2.42041,1.4606 0.72333,0.80681 1.085,1.85009 1.08502,3.12984 -2e-5,0.52861 -0.0557,0.95983 -0.16693,1.29368 -0.1113,0.33385 -0.31995,0.72334 -0.62597,1.16847 -0.27822,0.44514 -0.50079,0.86245 -0.6677,1.25194 -0.27822,0.61207 -1.07112,1.44669 -2.37868,2.50388 -1.3076,1.0572 -2.36479,1.7249 -3.17158,2.0031 -0.779,0.27821 -1.82228,0.41732 -3.12985,0.41732 -1.61362,0 -2.93511,-0.6677 -3.96448,-2.00311 -1.00155,-1.36322 -1.50233,-2.97683 -1.50232,-4.84083 -10e-6,-0.58423 0.15301,-1.54405 0.45904,-2.87946 0.30603,-1.33539 0.68161,-2.75425 1.12675,-4.25659 0.44513,-1.53014 0.87635,-2.99073 1.29367,-4.38179 0.44513,-1.41885 0.83462,-2.64296 1.16847,-3.67236 0.36167,-1.02935 0.5425,-1.55794 0.54251,-1.58579 0.55641,-1.66923 1.37713,-2.50385 2.46215,-2.50388 0.4173,3e-5 0.77897,0.12522 1.08501,0.37559 0.33384,0.25041 0.50077,0.55644 0.50078,0.91808 -1e-5,0.83465 -0.59816,2.94904 -1.79445,6.34316 -1.16848,3.39417 -1.75272,5.48073 -1.75271,6.2597"
+         style="font-size:41.73131561px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold"
+         id="path3356"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       id="07"
+       transform="translate(288.4488,400.73354)"
+       inkscape:label="#g3402">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3307"
+         d="m 466.625,-461.625 c -4.25987,0.48568 -8.47698,1.39498 -12.71875,2.0625 1.07644,4.20042 -2.27176,11.27102 2.46875,13.84375 4.50986,1.27908 5.40916,-4.65686 4.9375,-7.8125 4.51883,-1.04576 0.44724,5.45874 0.61118,8.06633 -0.16582,4.15633 -4.73271,10.47602 -0.61118,13.80867 4.42006,2.05298 7.23969,-2.97447 6.97902,-6.84527 0.91014,-6.86996 4.52329,-14.13079 2.86473,-21.12348 -0.9144,-1.57089 -2.76666,-2.24378 -4.53125,-2 z"
+         style="font-size:41.73131561px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+      <path
+         d="m 457.65866,-447.55453 c -0.72335,10e-6 -1.1963,-0.22255 -1.41887,-0.6677 -0.22257,-0.47294 -0.33385,-1.44667 -0.33385,-2.92119 l 0,-6.71875 8.01242,-1.37713 c 1.66924,-0.27818 2.79598,-0.41729 3.38023,-0.41731 1.6136,2e-5 2.4204,0.86247 2.42042,2.58734 -2e-5,0.69554 -0.0835,1.64145 -0.25039,2.83773 -0.16694,1.16849 -0.43124,2.643 -0.79289,4.42352 -0.36169,1.75273 -0.68163,3.29678 -0.95982,4.63217 -0.27823,1.33542 -0.68163,3.14377 -1.21021,5.42507 -0.50079,2.2535 -0.84855,3.82538 -1.04328,4.71564 -0.13912,0.63988 -0.36169,1.09893 -0.66771,1.37714 -0.30604,0.25038 -0.77899,0.37558 -1.41886,0.37558 -0.66771,0 -1.12676,-0.0974 -1.37713,-0.29212 -0.2504,-0.16693 -0.3756,-0.51469 -0.37559,-1.04328 -1e-5,-1.41887 0.59814,-4.2705 1.79445,-8.55492 0.44512,-1.58578 0.9459,-3.82536 1.50233,-6.71875 0.58422,-2.89335 0.91807,-4.8269 1.00155,-5.80065 l -0.50078,0 c -1.22413,2e-5 -2.22568,0.0278 -3.00465,0.0835 l -3.25504,0.20866 0.12519,1.58579 c 0.0278,0.27823 0.0417,0.72336 0.0417,1.3354 -10e-6,1.89184 -0.15302,3.18551 -0.45904,3.88102 -0.27822,0.69553 -0.68162,1.04329 -1.21021,1.04328"
+         style="font-size:41.73131561px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold"
+         id="path3358"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       id="08"
+       transform="translate(288.4488,400.73354)"
+       inkscape:label="#g3406">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3309"
+         d="m 484.5625,-461.125 c -5.4129,0.52765 -12.16325,4.81172 -10.53125,11.09375 0.22844,2.79139 5.08698,4.08829 1.96875,6.5625 -4.19086,5.19767 2.25762,10.77483 6.9375,12.46875 6.25611,2.07257 11.46014,-6.08634 7.78125,-11.25 -0.78775,-1.83703 -3.56277,-3.65207 -0.28125,-4.75 4.21422,-2.10976 7.46111,-7.97133 2.8125,-11.53125 -2.27955,-2.1684 -5.63455,-2.82454 -8.6875,-2.59375 z m 1.21875,6.4375 c 3.44436,0.25158 -2.52839,3.44547 -3.15625,3.53125 -1.64431,-1.9665 2.06079,-3.11445 3.15625,-3.53125 z m -3.09375,13.9375 c 1.00352,0.78913 3.04671,3.7184 0.625,1.625 -0.47341,-0.42173 -1.27688,-1.13071 -0.625,-1.625 z"
+         style="font-size:41.73131561px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+      <path
+         d="m 482.45685,-443.25621 c -0.2504,1e-5 -0.6538,0.33386 -1.21021,1.00156 -0.52861,0.6677 -0.80682,1.32149 -0.83463,1.96137 -1e-5,0.86245 0.5425,1.76663 1.62752,2.71253 1.11283,0.94592 2.017,1.41887 2.71254,1.41887 0.4173,0 0.83461,-0.20866 1.25194,-0.62597 0.44512,-0.44513 0.66768,-0.91809 0.6677,-1.41887 -2e-5,-0.77898 -0.58425,-1.80835 -1.75272,-3.08811 -1.16848,-1.30758 -1.9892,-1.96137 -2.46214,-1.96138 m 8.2628,-10.64148 c -2e-5,-0.16691 -0.26432,-0.47294 -0.7929,-0.91809 -0.52861,-0.44511 -1.22413,-0.87634 -2.08656,-1.29367 -0.86247,-0.41729 -1.66927,-0.62595 -2.42042,-0.62597 -0.1113,2e-5 -0.22258,0.0139 -0.33385,0.0417 -0.1113,0.0278 -0.22258,0.0835 -0.33385,0.16693 -0.1113,0.0557 -0.3756,0.19476 -0.7929,0.41731 -0.41732,0.19477 -0.89028,0.41733 -1.41886,0.6677 -0.61207,0.27823 -1.12676,0.70945 -1.54406,1.29367 -0.3895,0.55644 -0.63989,1.02939 -0.75116,1.41887 -0.0835,0.36169 -0.12521,0.63989 -0.1252,0.83462 -10e-6,0.41733 0.29211,1.05721 0.87636,1.91964 0.58423,0.83464 1.11283,1.47452 1.58579,1.91964 0.11127,-0.0834 0.65378,-0.51467 1.62752,-1.29367 1.00154,-0.80679 1.97527,-1.55795 2.92119,-2.25349 0.97372,-0.6955 1.79443,-1.18237 2.46215,-1.4606 0.75115,-0.33383 1.12673,-0.61203 1.12675,-0.83462 m -5.84239,21.19951 c -0.9181,-0.0278 -1.90574,-0.33385 -2.96292,-0.91809 -1.0572,-0.61206 -1.96138,-1.29367 -2.71254,-2.04484 -0.75117,-0.77898 -1.39105,-1.51623 -1.91964,-2.21176 -0.50078,-0.72333 -0.75117,-1.22411 -0.75116,-1.50232 -1e-5,-0.72334 0.4034,-1.76662 1.21021,-3.12985 0.8068,-1.36321 1.51623,-2.29521 2.12829,-2.796 0,-0.2782 -0.22257,-0.63987 -0.6677,-1.08501 -0.41732,-0.44513 -0.87636,-0.89026 -1.37713,-1.33541 -0.50078,-0.44512 -0.97374,-1.04326 -1.41886,-1.79444 -0.41732,-0.75115 -0.62598,-1.53013 -0.62597,-2.33696 -10e-6,-1.58577 0.70942,-3.04636 2.12829,-4.38179 1.44668,-1.36319 2.8099,-2.0448 4.08967,-2.04483 0.22256,3e-5 0.40339,-0.0417 0.54251,-0.12519 0.16691,-0.11126 0.30602,-0.20864 0.41731,-0.29212 0.1391,-0.11126 0.44512,-0.20863 0.91809,-0.29212 0.47294,-0.11126 1.09891,-0.1669 1.87791,-0.16693 1.44667,3e-5 2.71252,0.2226 3.79755,0.6677 1.11282,0.41734 1.94744,0.94594 2.50388,1.58579 0.5564,0.61209 0.9598,1.19632 1.21021,1.75272 0.25036,0.52862 0.37556,1.00157 0.37558,1.41886 -0.0278,0.66772 -0.43125,1.44671 -1.21021,2.33696 -0.779,0.86246 -1.62754,1.62754 -2.54561,2.29522 -0.91811,0.66772 -1.76664,1.33542 -2.54561,2.0031 -0.75118,0.6399 -1.12676,1.09894 -1.12675,1.37714 -1e-5,0.27822 0.30602,0.80681 0.91809,1.58579 0.61205,0.75117 1.22411,1.69708 1.83618,2.83773 0.61204,1.14066 0.91807,2.28131 0.91809,3.42196 -2e-5,1.50233 -0.54252,2.74036 -1.62752,3.71409 -1.05721,0.97373 -2.18395,1.4606 -3.38024,1.4606"
+         style="font-size:41.73131561px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold"
+         id="path3360"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       id="09"
+       transform="translate(288.4488,400.73354)"
+       inkscape:label="#g3410">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3311"
+         d="m 510.0625,-461.28125 c -6.46604,0.78385 -14.94002,6.34077 -12.5,13.8125 1.6255,4.34118 6.97522,4.71526 10.75,3.375 0.44195,4.14355 -2.43188,12.59623 3.75,13.4375 4.97691,-0.39317 3.54833,-6.18525 3.40625,-9.5 -0.84899,-5.9398 1.92693,-11.676 1.125,-17.4375 -0.94005,-2.65629 -3.8643,-3.90417 -6.53125,-3.6875 z m -0.96875,7.15625 c -0.40021,1.76527 -3.38838,4.17916 -4.40625,3.25 0.59466,-1.76714 2.86839,-3.76329 4.40625,-3.25 z"
+         style="font-size:41.73131561px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold" />
+      <path
+         d="m 509.92127,-456.40157 c -1.25195,2e-5 -2.39261,0.25041 -3.42197,0.75116 -1.00156,0.47298 -1.78055,1.07113 -2.33695,1.79445 -0.55643,0.72336 -0.97374,1.41888 -1.25194,2.08657 -0.27822,0.66771 -0.41732,1.25195 -0.41732,1.75271 0,1.05721 0.58423,1.58581 1.75272,1.58579 0.77897,2e-5 1.68315,-0.22255 2.71253,-0.6677 1.02936,-0.44512 2.00309,-1.2241 2.9212,-2.33695 0.91807,-1.11282 1.37711,-2.39258 1.37713,-3.83928 -2e-5,-0.5564 -0.0139,-0.90416 -0.0417,-1.04329 -0.36169,-0.0556 -0.79291,-0.0834 -1.29367,-0.0835 m 2.08656,23.70339 c -0.44515,0 -0.80682,-0.1252 -1.08501,-0.37558 -0.27822,-0.22257 -0.47297,-0.61206 -0.58424,-1.16848 -0.1113,-0.55642 -0.18085,-1.01546 -0.20866,-1.37714 -1e-5,-0.36166 -1e-5,-0.91808 0,-1.66925 -1e-5,-1.25193 0.0417,-2.97682 0.1252,-5.17468 0.11127,-2.22566 0.16691,-3.60279 0.16692,-4.1314 -1e-5,-0.52858 -0.0139,-0.84852 -0.0417,-0.95982 l -1.50233,0.95982 c -0.66771,0.41732 -1.29368,0.70944 -1.87791,0.87636 -0.55642,0.13911 -1.3215,0.20866 -2.29522,0.20865 -1.39105,1e-5 -2.35087,-0.0834 -2.87946,-0.25038 -0.50078,-0.16692 -0.97373,-0.50077 -1.41886,-1.00156 -0.9181,-1.00153 -1.37714,-2.05873 -1.37714,-3.17158 0,-0.41729 0.0974,-0.94589 0.29212,-1.58579 0.55642,-1.72487 1.50233,-3.14373 2.83773,-4.25659 1.3354,-1.14063 3.22721,-2.10045 5.67546,-2.87946 1.44667,-0.44511 2.43431,-0.66768 2.96292,-0.6677 0.33384,2e-5 0.69551,0.0557 1.08502,0.16692 0.4173,0.0835 0.86243,0.25042 1.3354,0.50078 0.50076,0.25041 0.90416,0.65381 1.21021,1.21021 0.33383,0.52862 0.50076,1.1685 0.50077,1.91964 -10e-6,0.61208 -0.12521,1.37715 -0.37558,2.29522 -0.2504,0.91811 -0.50079,2.44825 -0.75116,4.59044 -0.22259,2.1144 -0.33387,4.93822 -0.33385,8.47146 -2e-5,1.1963 0.0139,2.17003 0.0417,2.92119 0.0556,0.72335 0.0974,1.18239 0.12519,1.37714 0.0556,0.16692 0.0974,0.33385 0.1252,0.50077 0.0556,0.13911 0.0834,0.29212 0.0835,0.45905 -2e-5,0.77898 -0.19476,1.3354 -0.58424,1.66925 -0.36169,0.36167 -0.779,0.54251 -1.25194,0.54251"
+         style="font-size:41.73131561px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold"
+         id="path3362"
+         inkscape:connector-curvature="0" />
+    </g>
+  </g>
+</svg>
diff --git a/examples/mnit_moles/art/moles.svg b/examples/mnit_moles/art/moles.svg
deleted file mode 100644 (file)
index ffcd66c..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="256"
-   height="512"
-   id="svg2"
-   version="1.1"
-   inkscape:version="0.48.1 r9760"
-   sodipodi:docname="moles.svg"
-   inkscape:export-filename="/home/xymus/projects/mnit/tests/game/assets/images/hit.png"
-   inkscape:export-xdpi="90"
-   inkscape:export-ydpi="90">
-  <defs
-     id="defs4" />
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="0.98994949"
-     inkscape:cx="494.62817"
-     inkscape:cy="244.34564"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     inkscape:window-width="2048"
-     inkscape:window-height="1127"
-     inkscape:window-x="1920"
-     inkscape:window-y="0"
-     inkscape:window-maximized="1" />
-  <metadata
-     id="metadata7">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(0,-540.36218)">
-    <g
-       id="0hole"
-       inkscape:label="#g3777"
-       transform="matrix(1.3901274,0,0,1.3901274,-226.58753,287.35615)">
-      <path
-         d="m 342.85714,452.36218 c 0,15.77957 -38.37559,28.57143 -85.71429,28.57143 -47.33869,0 -85.71428,-12.79186 -85.71428,-28.57143 0,-15.77956 38.37559,-28.57143 85.71428,-28.57143 47.3387,0 85.71429,12.79187 85.71429,28.57143 z"
-         sodipodi:ry="28.571428"
-         sodipodi:rx="85.714287"
-         sodipodi:cy="452.36218"
-         sodipodi:cx="257.14285"
-         id="path2985"
-         style="fill:#000000;stroke:none"
-         sodipodi:type="arc" />
-    </g>
-    <path
-       style="fill:#803300;stroke:#000000;stroke-width:2.7802546;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       d="m 230.41985,916.1971 c 0,16.4517 -44.56829,29.7884 -99.54607,29.7884 -54.97777,0 -99.54608,-13.3367 -99.54608,-29.7884 0,-16.45155 -0.36741,-272.72198 99.54608,-272.72198 99.91349,0 99.54607,256.27043 99.54607,272.72198 z"
-       id="path2989"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="sssss" />
-    <g
-       id="g3790"
-       transform="matrix(1.3901274,0,0,1.3901274,-225.10125,297.88795)">
-      <path
-         sodipodi:nodetypes="cc"
-         inkscape:connector-curvature="0"
-         id="path3786"
-         d="m 223.74879,277.57518 64.64976,40.91118"
-         style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-      <path
-         sodipodi:nodetypes="cc"
-         style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         d="m 223.74879,318.48636 64.64976,-40.91118"
-         id="path3788"
-         inkscape:connector-curvature="0" />
-    </g>
-    <g
-       id="g3780"
-       transform="matrix(1.3901274,0,0,1.3901274,-486.58753,294.73832)">
-      <path
-         inkscape:connector-curvature="0"
-         id="path3760"
-         d="m 241.21248,273.50303 c -10.17671,0 -18.42624,13.36084 -18.42624,29.82709 0,16.46625 8.24953,29.76546 18.42624,29.76546 6.80306,0 12.70758,-5.97778 15.89956,-14.85192 3.19021,8.88544 9.1529,14.85192 15.96119,14.85192 10.17671,0 18.42624,-13.29921 18.42624,-29.76546 0,-16.46625 -8.24953,-29.82709 -18.42624,-29.82709 -6.80829,0 -12.77098,5.96648 -15.96119,14.85192 -3.19198,-8.87414 -9.0965,-14.85192 -15.89956,-14.85192 z"
-         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
-      <g
-         transform="translate(-0.40544189,0)"
-         id="g3773">
-        <path
-           sodipodi:type="arc"
-           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-           id="path3765"
-           sodipodi:cx="237.89093"
-           sodipodi:cy="318.99142"
-           sodipodi:rx="5.0507627"
-           sodipodi:ry="5.0507627"
-           d="m 242.94169,318.99142 c 0,2.78946 -2.2613,5.05077 -5.05076,5.05077 -2.78946,0 -5.05076,-2.26131 -5.05076,-5.05077 0,-2.78945 2.2613,-5.05076 5.05076,-5.05076 2.78946,0 5.05076,2.26131 5.05076,5.05076 z"
-           transform="translate(4,-9.0913729)" />
-        <path
-           transform="translate(35.314729,-9.0913729)"
-           d="m 242.94169,318.99142 c 0,2.78946 -2.2613,5.05077 -5.05076,5.05077 -2.78946,0 -5.05076,-2.26131 -5.05076,-5.05077 0,-2.78945 2.2613,-5.05076 5.05076,-5.05076 2.78946,0 5.05076,2.26131 5.05076,5.05076 z"
-           sodipodi:ry="5.0507627"
-           sodipodi:rx="5.0507627"
-           sodipodi:cy="318.99142"
-           sodipodi:cx="237.89093"
-           id="path3767"
-           style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-           sodipodi:type="arc" />
-      </g>
-    </g>
-  </g>
-</svg>
index 1c71a2c..b471835 100644 (file)
Binary files a/examples/mnit_moles/assets/images/0.png and b/examples/mnit_moles/assets/images/0.png differ
index ace37b6..2a5ae86 100644 (file)
Binary files a/examples/mnit_moles/assets/images/1.png and b/examples/mnit_moles/assets/images/1.png differ
index 73447e6..113e0eb 100644 (file)
Binary files a/examples/mnit_moles/assets/images/2.png and b/examples/mnit_moles/assets/images/2.png differ
index b17f046..f94c43d 100644 (file)
Binary files a/examples/mnit_moles/assets/images/3.png and b/examples/mnit_moles/assets/images/3.png differ
index 6286125..2e05015 100644 (file)
Binary files a/examples/mnit_moles/assets/images/4.png and b/examples/mnit_moles/assets/images/4.png differ
index b1969b8..ac17174 100644 (file)
Binary files a/examples/mnit_moles/assets/images/5.png and b/examples/mnit_moles/assets/images/5.png differ
index 5dc8b4d..122f412 100644 (file)
Binary files a/examples/mnit_moles/assets/images/6.png and b/examples/mnit_moles/assets/images/6.png differ
index 175c014..a341702 100644 (file)
Binary files a/examples/mnit_moles/assets/images/7.png and b/examples/mnit_moles/assets/images/7.png differ
index f40379d..40c1c17 100644 (file)
Binary files a/examples/mnit_moles/assets/images/8.png and b/examples/mnit_moles/assets/images/8.png differ
index d794791..8263229 100644 (file)
Binary files a/examples/mnit_moles/assets/images/9.png and b/examples/mnit_moles/assets/images/9.png differ
index 7d3b7d1..032d075 100644 (file)
Binary files a/examples/mnit_moles/assets/images/empty.png and b/examples/mnit_moles/assets/images/empty.png differ
index fb21eb3..1488e6a 100644 (file)
Binary files a/examples/mnit_moles/assets/images/hit.png and b/examples/mnit_moles/assets/images/hit.png differ
diff --git a/examples/mnit_moles/assets/images/sign-cute.png b/examples/mnit_moles/assets/images/sign-cute.png
new file mode 100644 (file)
index 0000000..bf1ab24
Binary files /dev/null and b/examples/mnit_moles/assets/images/sign-cute.png differ
diff --git a/examples/mnit_moles/assets/images/sign-hits.png b/examples/mnit_moles/assets/images/sign-hits.png
new file mode 100644 (file)
index 0000000..a8a9992
Binary files /dev/null and b/examples/mnit_moles/assets/images/sign-hits.png differ
diff --git a/examples/mnit_moles/assets/images/sign-warning.png b/examples/mnit_moles/assets/images/sign-warning.png
new file mode 100644 (file)
index 0000000..62b7688
Binary files /dev/null and b/examples/mnit_moles/assets/images/sign-warning.png differ
diff --git a/examples/mnit_moles/assets/images/trap.png b/examples/mnit_moles/assets/images/trap.png
new file mode 100644 (file)
index 0000000..c795661
Binary files /dev/null and b/examples/mnit_moles/assets/images/trap.png differ
index 8f04749..84cb8d0 100644 (file)
Binary files a/examples/mnit_moles/assets/images/up.png and b/examples/mnit_moles/assets/images/up.png differ
index dc0f9ed..194cad4 100644 (file)
@@ -1,12 +1,12 @@
-# This file is part of NIT ( http://www.nitlanguage.org ).
+# This file is part of NIT (http://www.nitlanguage.org).
 #
-# Copyright 2012-2013 Alexis Laferrière <alexis.laf@xymus.net>
+# Copyright 2012-2014 Alexis Laferrière <alexis.laf@xymus.net>
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at
 #
-#     http://www.apache.org/licenses/LICENSE-2.0
+#       http://www.apache.org/licenses/LICENSE-2.0
 #
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # limitations under the License.
 
 # Classic moles game
+#
+# This is a minimal practical example of the mnit framework.
 module moles
 
 import mnit
 import realtime
 
 class Hole
-       var game : Game
-       var x : Int
-       var y : Int
-       var dim : Int # Should it be removed?
+       var game: Game
+
+       # Center of the hole
+       var x: Int
+       var y: Int
+
+       # Half width of the hit box
+       var dx = 200.0
+       # Heigth of the hit box
+       var dy = 800.0
 
        # state
-       var up : Bool = false
-       var hitted : Bool = false
+       var up = false
+       var hitted = false
+       var trap = false
 
-       init ( g : Game, x, y : Int )
+       init (g: Game, x, y: Int)
        do
                game = g
                self.x = x
                self.y = y
-               dim = game.img_dim
        end
 
        fun do_turn
@@ -54,53 +62,71 @@ class Hole
                else if (100.0*game.speed_modifier).to_i.rand == 0 then
                        # show up
                        up = true
+
+                       # shot traps only at 50 points and up
+                       trap = false
+                       if game.points > 50 then
+
+                               # After 50 points we have more and more traps until point 1000
+                               var d = 1250-(game.points - 50)
+                               if d < 200 then d = 200
+
+                               if d.rand < 100 then trap = true
+                       end
                end
        end
 
-       fun intercepts( event : PointerEvent ) : Bool
+       fun intercepts(event: PointerEvent): Bool
        do
-               var ex = event.x.to_i
-               var ey = event.y.to_i
-               return ex > x and ex < x + dim and
-                       ey > y and ey < y + dim
+               if not up or hitted then return false
+
+               var dx = (dx*display_scale).to_i
+               var dy = (dy*display_scale).to_i
+               var ex = event.x.to_i - display_offset_x
+               var ey = event.y.to_i - display_offset_y
+               return ex > x - dx and ex < x + dx and
+                       ey > y - dy and ey < y
        end
 
        fun hit
        do
                if hitted then return
 
-               if up then
+               if trap then
+                       up = false
+                       game.points -= 5
+                       if game.points < 0 then game.points = 0
+               else
                        hitted = true
                        game.points += 1
-               else
-                       abort # should not happen
                end
        end
 end
 
 class Game
-       var holes : Sequence[Hole] = new Array[Hole].with_capacity(4)
+       var holes = new Array[Hole].with_capacity(4)
 
        # rule / const
-       var modifier_half_life : Float = 40.0
-       var rows : Int = 5
-       var columns : Int = 3
+       var modifier_half_life = 1000.0
+       fun rows: Int do return 4
+       fun columns: Int do return 5
 
        # state
-       var points : Int = 0
-       var speed_modifier : Float = 1.0
+       var points = 0
+       var speed_modifier = 1.0
 
        # configs
-       var img_ori_dim : Int = 256
-       fun img_dim : Int do return 210
-       fun global_speed_modifier : Float do return 2.0
+       var dist_between_rows = 512
+       var dist_between_columns = 600
+       fun global_speed_modifier: Float do return 2.0
 
        init
        do
-               var d = img_dim
-               for x in [ 0 .. rows [ do
-                       for y in [ 0 .. columns [ do
-                               holes.add( new Hole( self, x*d, y*d ) )
+               var dx = (dist_between_columns.to_f*display_scale).to_i
+               var dy = (dist_between_rows.to_f*display_scale).to_i
+               for x in [0 .. columns[ do
+                       for y in [0 .. rows[ do
+                               holes.add(new Hole(self, x*dx, y*dy))
                        end
                end
        end
@@ -109,62 +135,89 @@ class Game
                for hole in holes do hole.do_turn
 
                speed_modifier = modifier_half_life / (modifier_half_life+points.to_f) * global_speed_modifier
-
-               print "p: {points} sm: {speed_modifier}"
        end
 end
 
 # Where all the UI stuff is done
 class Screen
-       var empty_img : Image
-       var up_img : Image
-       var hit_img : Image
+       var empty_img: Image
+       var up_img: Image
+       var hit_img: Image
+       var trap_img: Image
        var numbers: NumberImages
 
-       var game : Game = new Game
+       var sign_warning: Image
+       var sign_cute: Image
+       var sign_hits: Image
+
+       var game = new Game
 
-       init ( app : App )
+       init (app: App)
        do
-               empty_img = app.load_asset( "images/empty.png" ).as(Image)
-               up_img = app.load_asset( "images/up.png" ).as(Image)
-               hit_img = app.load_asset( "images/hit.png" ).as(Image)
+               empty_img = app.load_image("images/empty.png")
+               up_img = app.load_image("images/up.png")
+               hit_img = app.load_image("images/hit.png")
+               trap_img = app.load_image("images/trap.png")
                numbers = app.load_numbers("images/#.png")
 
-               var scale = game.img_dim.to_f / game.img_ori_dim.to_f
-               empty_img.scale = scale
-               up_img.scale = scale
-               hit_img.scale = scale
+               sign_warning = app.load_image("images/sign-warning.png")
+               sign_cute = app.load_image("images/sign-cute.png")
+               sign_hits = app.load_image("images/sign-hits.png")
        end
 
-       fun do_frame( display : Display )
+       fun do_frame(display: Display)
        do
-               display.clear( 0.0, 0.7, 0.0 )
+               display.clear(0.1, 0.65, 0.2)
 
-               for hole in game.holes do
-                       var img
+               sign_warning.scale = display_scale
+               sign_cute.scale = display_scale
+               sign_hits.scale = display_scale
+               for img in numbers.imgs do img.scale = display_scale
+
+               display.blit(sign_warning, (-120.0*display_scale).to_i, (-235.0*display_scale).to_i)
+               display.blit(sign_cute, (540.0*display_scale).to_i, (-180.0*display_scale).to_i)
+               display.blit(sign_hits, (1340.0*display_scale).to_i, (55.0*display_scale).to_i)
+               display.blit_number(numbers, game.points, (1460.0*display_scale).to_i, (270.0*display_scale).to_i)
 
+               for hole in game.holes do
+                       # Hole
+                       var img = empty_img
+                       var dx = 512.0*display_scale
+                       var dy = 512.0*display_scale
+                       img.scale = display_scale
+                       display.blit(img, hole.x-dx.to_i+display_offset_x, hole.y-dy.to_i+display_offset_y)
+
+                       # Mole
+                       var empty = false
                        if hole.hitted then
                                img = hit_img
+                               dx = 256.0*display_scale
+                               dy = 417.0*display_scale
                        else if hole.up then
-                               img = up_img
-                       else
-                               img = empty_img
-                       end
+                               if hole.trap then
+                                       img = trap_img
+                                       dx = 512.0*display_scale
+                                       dy = 830.0*display_scale
+                               else
+                                       img = up_img
+                                       dx = 512.0*display_scale
+                                       dy = 830.0*display_scale
+                               end
+                       else empty = true
 
-                       display.blit( img, hole.x, hole.y-64 )
+                       if not empty then
+                               img.scale = display_scale
+                               display.blit(img, hole.x-dx.to_i+display_offset_x, hole.y-dy.to_i+display_offset_y)
+                       end
                end
-
-               display.blit_number(numbers, game.points, 20, 20)
        end
 
-       fun input( event : InputEvent ) : Bool
+       fun input(event: InputEvent): Bool
        do
                if event isa PointerEvent then
                        for hole in game.holes do
-                               if hole.intercepts( event ) then
-                                       if hole.up then
-                                               hole.hit
-                                       end
+                               if hole.intercepts(event) then
+                                       if hole.up then hole.hit
                                        return true
                                end
                        end
@@ -177,7 +230,7 @@ end
 class MyApp
        super App
 
-       var screen : nullable Screen = null
+       var screen: nullable Screen = null
 
        var target_dt = 20000000
 
@@ -187,17 +240,19 @@ class MyApp
        do
                super
 
-               screen = new Screen( self )
+               init_screen_and_game
        end
 
-       redef fun frame_core( display )
+       fun init_screen_and_game do screen = new Screen(self)
+
+       redef fun frame_core(display)
        do
                var screen = self.screen
                if screen != null then
                        var clock = new Clock
 
                        screen.game.do_turn
-                       screen.do_frame( display )
+                       screen.do_frame(display)
 
                        var dt = clock.lapse
                        if dt.sec == 0 and dt.nanosec < target_dt then
@@ -207,15 +262,15 @@ class MyApp
                end
        end
 
-       redef fun input( ie )
+       redef fun input(ie)
        do
                var screen = screen
                if ie isa QuitEvent or
-                       ( ie isa KeyEvent and ie.to_c == 'q' ) then
+                       (ie isa KeyEvent and ie.to_c == 'q') then
                        quit = true
                        return true
                else if screen != null then
-                       return screen.input( ie )
+                       return screen.input(ie)
                else
                        print "unknown input: {ie}"
                        return false
@@ -223,6 +278,13 @@ class MyApp
        end
 end
 
+fun display_scale: Float do return 1.0
+
+# Depends on the hole center in the uo image
+fun display_offset_x: Int do return (512.0*display_scale).to_i
+
+# Depends on the width of the holes
+fun display_offset_y: Int do return (800.0*display_scale).to_i
+
 var app = new MyApp
 app.main_loop
-
index e0e92c6..281a536 100644 (file)
@@ -19,4 +19,33 @@ module moles_android
 import moles
 import mnit_android
 
-super
+redef class Game
+       redef fun columns do return 3
+       redef fun rows do return 5
+end
+
+redef class MyApp
+       redef fun init_screen_and_game
+       do
+               # We use as a reference the Moto X
+               var tw = 720
+               var th = 1184
+
+               # Calculate the scale to fit a Moto X screen in this device screen
+               var xs = display.width.to_f/tw.to_f*0.4
+               var ys = display.height.to_f/th.to_f*0.4
+
+               # Use the smaller scale so everything fits
+               # FIXME replace these conditions with xs.min(ys) when Float isa Comparable
+               if xs < ys then
+                       display_scale_container.item = xs
+               else display_scale_container.item = ys
+
+               super
+       end
+end
+
+fun display_scale_container: Container[Float] do return once new Container[Float](0.1)
+redef fun display_scale do return display_scale_container.item
+redef fun display_offset_x: Int do return (300.0*display_scale).to_i
+redef fun display_offset_y: Int do return (800.0*display_scale).to_i
index 8f30a1d..f7ddd91 100644 (file)
@@ -19,8 +19,4 @@ module moles_linux
 import moles
 import mnit_linux
 
-redef class Game
-       redef fun img_dim do return 128
-end
-
-super
+redef fun display_scale do return 0.25
index 9c57166..2d941e9 100644 (file)
@@ -87,12 +87,12 @@ redef class String
                var steps = length / 4
                var result_length = steps*3
 
-               var padding_begin = padding.search_index_in( self, 0 )
+               var padding_begin = self.search(padding)
                var padding_count : Int
-               if padding_begin == -1 then
+               if padding_begin == null then
                        padding_count = 0
                else
-                       padding_count = length - padding_begin
+                       padding_count = length - padding_begin.from
                        steps -= 1
                        result_length -= padding_count
                end
index a4e909a..08f8908 100644 (file)
@@ -39,6 +39,10 @@ redef class SequenceRead[ V ]
        super Jsonable
 end
 
+redef class String
+       super Jsonable
+end
+
 # Can b converted to a Json object
 redef class Map[ K, V ]
        super Jsonable
index 51c3412..09db4c8 100644 (file)
@@ -102,6 +102,11 @@ interface MobileKeyEvent
        fun is_home_key: Bool is abstract
 end
 
+# Sensor events like accelerometer, gyroscope etc for mobile apps
+interface SensorEvent
+       super InputEvent
+end
+
 # Quit event, used for window close button
 interface QuitEvent
        super InputEvent
index 827b4cc..e7fb184 100644 (file)
@@ -45,8 +45,9 @@ redef class Display
                for c in str.chars do
                        var d = c.ascii-'0'.ascii
                        assert d >= 0 and d <= 9
-                       blit(imgs.imgs[d], x, y)
-                       x += imgs.imgs[d].width
+                       var img = imgs.imgs[d]
+                       blit(img, x, y)
+                       x += (img.width.to_f * img.scale).to_i
                end
        end
 end
index c7d4792..d396bd0 100644 (file)
@@ -19,12 +19,14 @@ module android_app
 
 import mnit
 import android
+import android_sensor
 
 in "C header" `{
        #include <jni.h>
        #include <errno.h>
        #include <android/log.h>
        #include <android_native_app_glue.h>
+       #include <android/sensor.h>
 
        #define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "mnit", __VA_ARGS__))
        #ifdef DEBUG
@@ -83,7 +85,7 @@ in "C" `{
                        LOGI("motion");
                        return App_extern_input_motion(nit_app, event);
                }
-               
+
                return 0;
        }
 
@@ -92,7 +94,7 @@ in "C" `{
                mnit_java_app = app;
                        AConfiguration_setOrientation(mnit_java_app->config, ACONFIGURATION_ORIENTATION_LAND);
                                LOGI("cmd %i", (int)pthread_self());
-               
+
                switch (cmd) {
                        case APP_CMD_SAVE_STATE:
                                LOGI ("save state");
@@ -100,7 +102,7 @@ in "C" `{
                                mnit_java_app->savedState = malloc(1);
                                App_save(nit_app);
                                break;
-                               
+
                        case APP_CMD_INIT_WINDOW:
                                LOGI ("init window");
                                if (mnit_java_app->window != NULL) {
@@ -110,43 +112,43 @@ in "C" `{
                                        mnit_animating = 1;
                                }
                                break;
-                               
+
                        case APP_CMD_TERM_WINDOW:
                                LOGI ("term window");
                                mnit_term_display();
                                App_term_window(nit_app);
                                break;
-                               
+
                        case APP_CMD_GAINED_FOCUS:
                                LOGI ("gain foc");
                                mnit_animating = 1;
                                App_gained_focus(nit_app);
                                LOGI ("gain foc 1");
                                break;
-                               
+
                        case APP_CMD_LOST_FOCUS:
                                LOGI ("lost foc");
                                mnit_animating = 0;
                                App_lost_focus(nit_app);
                                mnit_frame();
                                break;
-                               
+
                        case APP_CMD_PAUSE:
                                LOGI ("app pause");
                                App_pause(nit_app);
                                break;
-                               
+
                                /*
                        case APP_CMD_STOP:
                                LOGI ("app stop");
                                App_stop(nit_app);
                                break;
-                               
+
                        case APP_CMD_DESTROY:
                                LOGI ("app destrop");
                                App_destroy(nit_app);
                                break;
-                               
+
                        case APP_CMD_START:
                                LOGI ("app start");
                                App_start(nit_app);
@@ -157,28 +159,28 @@ in "C" `{
                                LOGI ("app resume");
                                App_resume(nit_app);
                                break;
-                               
+
                        case APP_CMD_LOW_MEMORY:
                                LOGI ("app low mem");
                                break;
-                               
+
                        case APP_CMD_CONFIG_CHANGED:
                                LOGI ("app cmd conf ch");
                                break;
-                               
+
                        case APP_CMD_INPUT_CHANGED:
                                LOGI ("app cmd in ch");
                                break;
-                               
+
                        case APP_CMD_WINDOW_RESIZED:
                                mnit_orientation_changed = 1;
                                LOGI ("app win res");
                                break;
-                               
+
                        case APP_CMD_WINDOW_REDRAW_NEEDED:
                                LOGI ("app win redraw needed");
                                break;
-                               
+
                        case APP_CMD_CONTENT_RECT_CHANGED:
                                LOGI ("app content rect ch");
                                break;
@@ -190,7 +192,7 @@ in "C" `{
                mnit_java_app = app;
 
                app_dummy();
-               
+
                main(0, NULL);
        }
 
@@ -240,7 +242,7 @@ in "C" `{
 
 extern InnerAndroidMotionEvent in "C" `{AInputEvent *`}
        super Pointer
-       private fun pointers_count: Int is extern `{ 
+       private fun pointers_count: Int is extern `{
        return AMotionEvent_getPointerCount(recv);
        `}
        private fun just_went_down: Bool is extern `{
@@ -271,16 +273,16 @@ extern class AMotionEventAction `{ int32_t `}
 end
 
 interface AndroidInputEvent
-       super InputEvent 
+       super InputEvent
 end
 
 class AndroidMotionEvent
        super AndroidInputEvent
        super MotionEvent
-       
+
        private init(ie: InnerAndroidMotionEvent) do inner_event = ie
        private var inner_event: InnerAndroidMotionEvent
-       
+
        private var pointers_cache: nullable Array[AndroidPointerEvent] = null
        fun pointers: Array[AndroidPointerEvent]
        do
@@ -318,17 +320,17 @@ class AndroidPointerEvent
 
        protected var motion_event: AndroidMotionEvent
        protected var pointer_id: Int
-       
+
        redef fun x: Float do return extern_x(motion_event.inner_event, pointer_id)
        private fun extern_x(motion_event: InnerAndroidMotionEvent, pointer_id: Int): Float is extern `{
                return ((int) AMotionEvent_getX(motion_event, pointer_id) * mnit_zoom);
        `}
-       
+
        redef fun y: Float do return extern_y(motion_event.inner_event, pointer_id)
        private fun extern_y(motion_event: InnerAndroidMotionEvent, pointer_id: Int): Float is extern `{
                return ((int) AMotionEvent_getY(motion_event, pointer_id) * mnit_zoom) + 32;
        `}
-       
+
        fun pressure: Float do return extern_pressure(motion_event.inner_event, pointer_id)
        private fun extern_pressure(motion_event: InnerAndroidMotionEvent, pointer_id: Int): Float is extern `{
                return AMotionEvent_getPressure(motion_event, pointer_id);
@@ -356,7 +358,7 @@ extern AndroidKeyEvent in "C" `{AInputEvent *`}
        fun key_code: Int is extern `{
                return AKeyEvent_getKeyCode(recv);
        `}
-       
+
        fun key_char: Char is extern `{
                int code = AKeyEvent_getKeyCode(recv);
                if (code >= AKEYCODE_0 && code <= AKEYCODE_9)
@@ -382,6 +384,15 @@ redef class App
        redef type IE: AndroidInputEvent
        redef type D: Opengles1Display
 
+       var accelerometer = new AndroidSensor
+       var magnetic_field = new AndroidSensor
+       var gyroscope = new AndroidSensor
+       var light = new AndroidSensor
+       var proximity = new AndroidSensor
+       var sensormanager: ASensorManager
+       var eventqueue: ASensorEventQueue
+       var sensors_support_enabled writable = false
+
        redef fun log_warning(msg) is extern import String.to_cstring `{
                LOGW("%s", String_to_cstring(msg));
        `}
@@ -395,8 +406,8 @@ redef class App
 
                display = new Opengles1Display
        end
-       
-       # these two are used as a callback from native to type incoming events
+
+       # these are used as a callback from native to type incoming events
        private fun extern_input_key(event: AndroidKeyEvent): Bool
        do
                return input(event)
@@ -414,43 +425,161 @@ redef class App
 
                return handled
        end
-       
-       redef fun main_loop is extern import full_frame, generate_input `{
+
+       private fun extern_input_sensor_accelerometer(event: ASensorAccelerometer) do input(event)
+       private fun extern_input_sensor_magnetic_field(event: ASensorMagneticField) do input(event)
+       private fun extern_input_sensor_gyroscope(event: ASensorGyroscope) do input(event)
+       private fun extern_input_sensor_light(event: ASensorLight) do input(event)
+       private fun extern_input_sensor_proximity(event: ASensorProximity) do input(event)
+
+       # Sensors support
+       # The user decides which sensors he wants to use by setting them enabled
+       private fun enable_sensors
+       do
+               if sensors_support_enabled then enable_sensors_management else return
+               if accelerometer.enabled then enable_accelerometer
+               if magnetic_field.enabled then enable_magnetic_field
+               if gyroscope.enabled then enable_gyroscope
+               if light.enabled then enable_light
+               if proximity.enabled then enable_proximity
+       end
+
+       private fun enable_sensors_management
+       do
+               sensormanager = new ASensorManager.get_instance
+               #eventqueue = sensormanager.create_event_queue(new NdkAndroidApp)
+               eventqueue = initialize_event_queue(sensormanager)
+       end
+
+       # HACK: need a nit method to get mnit_java_app, then we can use the appropriate sensormanager.create_event_queue method to initialize the event queue
+       private fun initialize_event_queue(sensormanager: ASensorManager): ASensorEventQueue `{
+               return ASensorManager_createEventQueue(sensormanager, mnit_java_app->looper, LOOPER_ID_USER, NULL, NULL);
+       `}
+
+       private fun enable_accelerometer
+       do
+               accelerometer.asensor = sensormanager.get_default_sensor(new ASensorType.accelerometer)
+               if accelerometer.asensor.address_is_null then 
+                               print "Accelerometer sensor unavailable" 
+               else
+                               if eventqueue.enable_sensor(accelerometer.asensor) < 0 then print "Accelerometer enabling failed"
+                       eventqueue.set_event_rate(accelerometer.asensor, accelerometer.event_rate)
+               end
+       end
+
+       private fun enable_magnetic_field
+       do
+               magnetic_field.asensor = sensormanager.get_default_sensor(new ASensorType.magnetic_field)
+               if magnetic_field.asensor.address_is_null then
+                               print "Magnetic Field unavailable"
+               else
+                       if eventqueue.enable_sensor(magnetic_field.asensor) < 0 then print "Magnetic Field enabling failed"
+                       eventqueue.set_event_rate(magnetic_field.asensor, magnetic_field.event_rate)
+               end
+       end
+
+       private fun enable_gyroscope
+       do
+               gyroscope.asensor = sensormanager.get_default_sensor(new ASensorType.gyroscope)
+               if gyroscope.asensor.address_is_null then
+                               print "Gyroscope sensor unavailable"
+               else
+                       if eventqueue.enable_sensor(gyroscope.asensor) < 0 then print "Gyroscope enabling failed"
+                       eventqueue.set_event_rate(gyroscope.asensor, gyroscope.event_rate)
+               end
+       end
+
+       private fun enable_light
+       do
+               light.asensor = sensormanager.get_default_sensor(new ASensorType.light)
+               if light.asensor.address_is_null then
+                               print "Light sensor unavailable"
+               else
+                       if eventqueue.enable_sensor(light.asensor) < 0 then print "Light enabling failed"
+                       eventqueue.set_event_rate(light.asensor, light.event_rate)
+               end
+       end
+
+       private fun enable_proximity
+       do
+               proximity.asensor = sensormanager.get_default_sensor(new ASensorType.proximity)
+               if proximity.asensor.address_is_null then 
+                               print "Proximity sensor unavailable"
+               else
+                       if eventqueue.enable_sensor(proximity.asensor) < 0 then print "Proximity enabling failed"
+                       eventqueue.set_event_rate(light.asensor, light.event_rate)
+               end
+       end
+
+       redef fun main_loop is extern import full_frame, generate_input, enable_sensors `{
                LOGI("nitni loop");
-               
+
                nit_app = recv;
 
                mnit_java_app->userData = &nit_app;
                mnit_java_app->onAppCmd = mnit_handle_cmd;
                mnit_java_app->onInputEvent = mnit_handle_input;
-               
+
+               //Enbales sensors if needed
+               App_enable_sensors(nit_app);
+
                while (1) {
                        App_generate_input(recv);
 
                        if (mnit_java_app->destroyRequested != 0) return;
-                       
+
                        if (mnit_animating == 1) {
                                mnit_frame();
                                LOGI("frame at loop end 1");
                        }
                }
-               
-          /* App_exit(); // this is unreachable anyway*/
+               /* App_exit(); // this is unreachable anyway*/
        `}
 
-       redef fun generate_input import save, pause, resume, gained_focus, lost_focus, init_window, term_window, extern_input_key, extern_input_motion `{
+       redef fun generate_input import save, pause, resume, gained_focus, lost_focus, init_window, term_window, extern_input_key, extern_input_motion, extern_input_sensor_accelerometer, extern_input_sensor_magnetic_field, extern_input_sensor_gyroscope, extern_input_sensor_light, extern_input_sensor_proximity, eventqueue `{
                int ident;
                int events;
                static int block = 0;
                struct android_poll_source* source;
 
                while ((ident=ALooper_pollAll(0, NULL, &events,
-                               (void**)&source)) >= 0) { /* first 0 is for non-blocking */ 
+                               (void**)&source)) >= 0) { /* first 0 is for non-blocking */
 
                        // Process this event.
                        if (source != NULL)
                                source->process(mnit_java_app, source);
 
+                       //If a sensor has data, process it
+                       if(ident == LOOPER_ID_USER) {
+                               //maybe add a boolean to the app to know if we want to use Sensor API or ASensorEvent directly ...
+                               ASensorEvent* events = malloc(sizeof(ASensorEvent)*10);
+                               int nbevents;
+                               ASensorEventQueue* queue = App_eventqueue(nit_app);
+                               while((nbevents = ASensorEventQueue_getEvents(queue, events, 10)) > 0) {
+                                       int i;
+                                       for(i = 0; i < nbevents; i++){
+                                               ASensorEvent event = events[i];
+                                               switch (event.type) {
+                                                       case ASENSOR_TYPE_ACCELEROMETER:
+                                                               App_extern_input_sensor_accelerometer(nit_app, &event);
+                                                               break;
+                                                       case ASENSOR_TYPE_MAGNETIC_FIELD:
+                                                               App_extern_input_sensor_magnetic_field(nit_app, &event);
+                                                               break;
+                                                       case ASENSOR_TYPE_GYROSCOPE:
+                                                               App_extern_input_sensor_gyroscope(nit_app, &event);
+                                                               break;
+                                                       case ASENSOR_TYPE_LIGHT:
+                                                               App_extern_input_sensor_light(nit_app, &event);
+                                                               break;
+                                                       case ASENSOR_TYPE_PROXIMITY:
+                                                               App_extern_input_sensor_proximity(nit_app, &event);
+                                                               break;
+                                               }
+                                       }
+                               }
+                       }
+
                        // Check if we are exiting.
                        if (mnit_java_app->destroyRequested != 0) {
                                mnit_term_display();
@@ -459,4 +588,3 @@ redef class App
                }
        `}
 end
-
diff --git a/lib/mnit_android/android_sensor.nit b/lib/mnit_android/android_sensor.nit
new file mode 100644 (file)
index 0000000..f7dab3b
--- /dev/null
@@ -0,0 +1,236 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2014 Romain Chanoir <romain.chanoir@viacesi.fr>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# This module is used to manipulate android sensors
+# The sensor support is implemented in android_app module, so the user can enable the type of sensor he wants to use.
+# There is an example of how you can use the android sensors in nit/examples/mnit_ballz :
+# `var app = new MyApp
+# app.sensors_support_enabled = true
+# app.accelerometer.enabled = true
+# app.accelerometer.eventrate = 10000
+# app.magnetic_field.enabled = true
+# app.gyroscope.enabled = true
+# app.light.enabled = true
+# app.proximity.enabled = true
+# app.main_loop`
+#
+# In this example, we enable the sensor support, then enable all types of sensors supported, before running the app.
+# The result is you get all type of SensorEvent (ASensorAccelerometer, ASensorMagneticField ...) in the input method of your app
+module android_sensor
+
+import mnit
+
+in "C header" `{
+       #include <jni.h>
+       #include <android/sensor.h>
+       #include <android_native_app_glue.h>
+`}
+
+in "C" `{
+       extern struct android_app *mnit_java_app;
+`}
+
+extern ASensorType `{int`}
+       new accelerometer: ASensorType `{return ASENSOR_TYPE_ACCELEROMETER;`}
+       fun is_accelerometer: Bool `{return recv == ASENSOR_TYPE_ACCELEROMETER;`}
+       new magnetic_field: ASensorType `{return ASENSOR_TYPE_MAGNETIC_FIELD;`}
+       fun is_magnetic_field: Bool `{return recv == ASENSOR_TYPE_MAGNETIC_FIELD;`}
+       new gyroscope:ASensorType `{return ASENSOR_TYPE_GYROSCOPE;`}
+       fun is_gyroscope: Bool `{ return recv == ASENSOR_TYPE_GYROSCOPE;`}
+       new light: ASensorType `{return ASENSOR_TYPE_LIGHT;`}
+       fun is_light: Bool `{return recv == ASENSOR_TYPE_LIGHT;`}
+       new proximity: ASensorType `{return ASENSOR_TYPE_PROXIMITY;`}
+       fun is_proximity:Bool `{return recv == ASENSOR_TYPE_PROXIMITY;`}
+end
+
+# Manages the sensors
+extern class ASensorManager `{ASensorManager*`}
+
+       new get_instance: ASensorManager `{return ASensorManager_getInstance();`}
+
+       # Returns the list of available sensors
+       fun get_sensor_list: Pointer `{
+               ASensorList *list;
+               ASensorManager_getSensorList(recv, list);
+               return list;
+       `}
+
+       # Create a new sensor event queue and associate it with a looper
+       fun create_event_queue(app: NdkAndroidApp): ASensorEventQueue `{
+               return ASensorManager_createEventQueue(recv, app->looper, LOOPER_ID_USER, NULL, NULL);
+       `}
+
+       # Returns the default sensor of the given type
+       fun get_default_sensor(sensortype: ASensorType): ASensor `{
+               return ASensorManager_getDefaultSensor(recv, sensortype);
+       `}
+
+       # Destroys the event queue and free all resources associated to it
+       fun destroy_event_queue(queue: ASensorEventQueue) `{
+               ASensorManager_destroyEventQueue(recv, queue);
+       `}
+end
+
+# Manages the sensors events
+extern class ASensorEventQueue `{ASensorEventQueue*`}
+
+       # Enable the selected sensor, returns a negative value on error
+       fun enable_sensor(sensor: ASensor): Int `{
+               return ASensorEventQueue_enableSensor(recv, sensor);
+       `}
+
+       # Disable the selected sensor, returns a negative value on error
+       fun disable_sensor(sensor: ASensor): Int `{
+               return ASensorEventQueue_disableSensor(recv, sensor);
+       `}
+
+       # Set the delivery rate of events in microseconds for the given sensor
+       fun set_event_rate(sensor: ASensor, usec: Int): Int `{
+               return ASensorEventQueue_setEventRate(recv, sensor, usec);
+       `}
+       # Returns 1 if the queue has events, 0 if it does not have events,
+       # and a negative value if there is an error
+       fun has_events: Int `{
+               return ASensorEventQueue_hasEvents(recv);
+       `}
+
+       # Returns the next available events from the queue.
+       # Returns a negative value if no events are available or an error has occured
+       # otherwise the number of events returned
+       fun get_events(events: ASensorEvents, count: Int): Int `{
+               return ASensorEventQueue_getEvents(recv, events, (size_t)count);
+       `}
+end
+
+# Extern class referencing a ASensor
+extern class ASensor `{ASensorRef`}
+
+       new  `{return malloc(sizeof(ASensorRef));`}
+       fun name: NativeString `{return (char*)ASensor_getName(recv);`}
+       fun vendor: NativeString `{return (char*)ASensor_getVendor(recv);`}
+       fun sensor_type: ASensorType `{return ASensor_getType(recv);`}
+       fun resolution: Float `{return ASensor_getResolution(recv);`}
+       fun min_delay: Int `{return ASensor_getMinDelay(recv);`}
+end
+
+# NIT representation of an Android Sensor used in android_app to initialize sensors
+class AndroidSensor
+
+       var asensor writable = new ASensor
+       var enabled writable = false
+       var event_rate writable = 100000
+
+       fun name: String do return asensor.name.to_s
+       fun vendor: String do return asensor.vendor.to_s
+       fun sensor_type: ASensorType do return asensor.sensor_type
+       fun resolution: Float do return asensor.resolution
+       fun min_delay: Int do return asensor.min_delay
+end
+
+# Extern class referencing a ASensorEvent
+extern class ASensorEvent `{ASensorEvent*`}
+               super SensorEvent
+
+       fun version: Int `{return recv->version;`}
+       fun sensor: ASensor `{return (ASensorRef)recv->sensor;`}
+       fun sensor_type: ASensorType `{return recv->type;`}
+       fun timestamp: Int `{return recv->timestamp;`}
+end
+
+extern class FullSensor `{ASensorEvent*`}
+               super ASensorLight
+               super ASensorProximity
+
+       fun temperature: Float `{return recv->temperature;`}
+       fun pressure: Float `{return recv->pressure;`}
+       fun data: Pointer `{return recv->data;`}
+       fun vector: ASensorVector `{return &(recv->vector);`}
+       fun acceleration: ASensorVector `{return &(recv->acceleration);`}
+       fun magnetic: ASensorVector `{return &(recv->magnetic);`}
+end
+
+# Extern class referencing a ASensorVector, attribute of ASensorRef
+extern class ASensorVector `{ASensorVector*`}
+
+       fun v: Pointer `{return recv->v;`}
+       fun x: Float `{ return recv->x;`}
+       fun y: Float `{return recv->y;`}
+       fun z: Float `{return recv->z;`}
+       fun azimuth: Float `{return recv->azimuth;`}
+       fun pitch: Float `{return recv->pitch;`}
+       fun roll: Float `{return recv->roll;`}
+       fun status: Int `{return recv->status;`}
+       fun reserved: Pointer `{return recv->reserved;`}
+end
+
+# Sensor event returned by the Accelerometer sensor
+extern class ASensorAccelerometer `{ASensorEvent*`}
+       super ASensorEvent
+
+       fun x: Float `{return recv->acceleration.x;`}
+       fun y: Float `{return recv->acceleration.y;`}
+       fun z: Float `{return recv->acceleration.z;`}
+end
+
+# Sensor event returned by the Magnetic Field sensor
+extern class ASensorMagneticField `{ASensorEvent*`}
+       super ASensorEvent
+
+       fun x: Float `{return recv->magnetic.x;`}
+       fun y: Float `{return recv->magnetic.y;`}
+       fun z: Float `{ return recv->magnetic.z;`}
+end
+
+# Sensor event returned by the gyroscope sensor
+extern class ASensorGyroscope `{ASensorEvent*`}
+       super ASensorEvent
+
+       fun x: Float `{return recv->vector.x;`}
+       fun y: Float `{return recv->vector.y;`}
+       fun z: Float `{return recv->vector.y;`}
+end
+
+# Sensor event returned by the Light sensor
+extern class ASensorLight `{ASensorEvent*`}
+       super ASensorEvent
+
+       fun light: Float `{return recv->light;`}
+end
+
+# sensor event returned by the Proximity Sensor
+extern class ASensorProximity `{ASensorEvent*`}
+       super ASensorEvent
+
+       fun distance: Float `{return recv->distance;`}
+end
+
+# Array of SensorEvents
+extern class ASensorEvents `{ASensorEvent*`}
+
+       new (length: Int) `{return malloc(sizeof(ASensorEvent)*length);`}
+
+       fun [](index: Int): ASensorEvent `{
+               return recv+index;
+       `}
+end
+
+extern class NdkAndroidApp `{struct android_app*`}
+
+       # FIXME: remove when android_app fixed
+       new `{
+               return mnit_java_app;
+       `}
+end
index ec3c006..14e28fa 100644 (file)
@@ -68,7 +68,7 @@ abstract class Option
        # A pretty print for this help
        fun pretty(off: Int): String
        do
-               var text = new Buffer.from("  ")
+               var text = new FlatBuffer.from("  ")
                text.append(_names.join(", "))
                text.append("  ")
                var rest = off - text.length
diff --git a/lib/sha1.nit b/lib/sha1.nit
new file mode 100644 (file)
index 0000000..033bd83
--- /dev/null
@@ -0,0 +1,279 @@
+# This file is part of NIT (http://www.nitlanguage.org).
+#
+# Copyright 2014 Lucas Bajolet <r4pass@hotmail.com>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#               http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Provides methods to compute the SHA1 hash of a String
+module sha1
+
+in "C Header" `{
+
+       /* This code is public-domain - it is based on libcrypt
+        * placed in the public domain by Wei Dai and other contributors.
+        */
+
+       #include <stdint.h>
+       #include <string.h>
+
+       #define HASH_LENGTH 20
+       #define BLOCK_LENGTH 64
+
+       union _buffer {
+               uint8_t b[BLOCK_LENGTH];
+               uint32_t w[BLOCK_LENGTH/4];
+       };
+
+       union _state {
+               uint8_t b[HASH_LENGTH];
+               uint32_t w[HASH_LENGTH/4];
+       };
+
+       typedef struct sha1nfo {
+               union _buffer buffer;
+               uint8_t bufferOffset;
+               union _state state;
+               uint32_t byteCount;
+               uint8_t keyBuffer[BLOCK_LENGTH];
+               uint8_t innerHash[HASH_LENGTH];
+       } sha1nfo;
+
+       /**
+        */
+       void sha1_init(sha1nfo *s);
+       /**
+        */
+       void sha1_writebyte(sha1nfo *s, uint8_t data);
+       /**
+        */
+       void sha1_write(sha1nfo *s, const char *data, size_t len);
+       /**
+        */
+       uint8_t* sha1_result(sha1nfo *s);
+       /**
+        */
+       void sha1_initHmac(sha1nfo *s, const uint8_t* key, int keyLength);
+       /**
+        */
+       uint8_t* sha1_resultHmac(sha1nfo *s);
+`}
+
+`{
+       #define SHA1_K0 0x5a827999
+       #define SHA1_K20 0x6ed9eba1
+       #define SHA1_K40 0x8f1bbcdc
+       #define SHA1_K60 0xca62c1d6
+
+       const uint8_t sha1InitState[] = {
+               0x01,0x23,0x45,0x67, // H0
+               0x89,0xab,0xcd,0xef, // H1
+               0xfe,0xdc,0xba,0x98, // H2
+               0x76,0x54,0x32,0x10, // H3
+               0xf0,0xe1,0xd2,0xc3     // H4
+       };
+
+       void sha1_init(sha1nfo *s) {
+               memcpy(s->state.b,sha1InitState,HASH_LENGTH);
+               s->byteCount = 0;
+               s->bufferOffset = 0;
+       }
+
+       uint32_t sha1_rol32(uint32_t number, uint8_t bits) {
+               return ((number << bits) | (number >> (32-bits)));
+       }
+
+       void sha1_hashBlock(sha1nfo *s) {
+               uint8_t i;
+               uint32_t a,b,c,d,e,t;
+
+               a=s->state.w[0];
+               b=s->state.w[1];
+               c=s->state.w[2];
+               d=s->state.w[3];
+               e=s->state.w[4];
+               for (i=0; i<80; i++) {
+                       if (i>=16) {
+                               t = s->buffer.w[(i+13)&15] ^ s->buffer.w[(i+8)&15] ^ s->buffer.w[(i+2)&15] ^ s->buffer.w[i&15];
+                               s->buffer.w[i&15] = sha1_rol32(t,1);
+                       }
+                       if (i<20) {
+                               t = (d ^ (b & (c ^ d))) + SHA1_K0;
+                       } else if (i<40) {
+                               t = (b ^ c ^ d) + SHA1_K20;
+                       } else if (i<60) {
+                               t = ((b & c) | (d & (b | c))) + SHA1_K40;
+                       } else {
+                               t = (b ^ c ^ d) + SHA1_K60;
+                       }
+                       t+=sha1_rol32(a,5) + e + s->buffer.w[i&15];
+                       e=d;
+                       d=c;
+                       c=sha1_rol32(b,30);
+                       b=a;
+                       a=t;
+               }
+               s->state.w[0] += a;
+               s->state.w[1] += b;
+               s->state.w[2] += c;
+               s->state.w[3] += d;
+               s->state.w[4] += e;
+       }
+
+       void sha1_addUncounted(sha1nfo *s, uint8_t data) {
+               s->buffer.b[s->bufferOffset ^ 3] = data;
+               s->bufferOffset++;
+               if (s->bufferOffset == BLOCK_LENGTH) {
+                       sha1_hashBlock(s);
+                       s->bufferOffset = 0;
+               }
+       }
+
+       void sha1_writebyte(sha1nfo *s, uint8_t data) {
+               ++s->byteCount;
+               sha1_addUncounted(s, data);
+       }
+
+       void sha1_write(sha1nfo *s, const char *data, size_t len) {
+               for (;len--;) sha1_writebyte(s, (uint8_t) *data++);
+       }
+
+       void sha1_pad(sha1nfo *s) {
+               // Implement SHA-1 padding (fips180-2 Â§5.1.1)
+
+               // Pad with 0x80 followed by 0x00 until the end of the block
+               sha1_addUncounted(s, 0x80);
+               while (s->bufferOffset != 56) sha1_addUncounted(s, 0x00);
+
+               // Append length in the last 8 bytes
+               sha1_addUncounted(s, 0); // We're only using 32 bit lengths
+               sha1_addUncounted(s, 0); // But SHA-1 supports 64 bit lengths
+               sha1_addUncounted(s, 0); // So zero pad the top bits
+               sha1_addUncounted(s, s->byteCount >> 29); // Shifting to multiply by 8
+               sha1_addUncounted(s, s->byteCount >> 21); // as SHA-1 supports bitstreams as well as
+               sha1_addUncounted(s, s->byteCount >> 13); // byte.
+               sha1_addUncounted(s, s->byteCount >> 5);
+               sha1_addUncounted(s, s->byteCount << 3);
+       }
+
+       uint8_t* sha1_result(sha1nfo *s) {
+               int i;
+               // Pad to complete the last block
+               sha1_pad(s);
+
+               // Swap byte order back
+               for (i=0; i<5; i++) {
+                       uint32_t a,b;
+                       a=s->state.w[i];
+                       b=a<<24;
+                       b|=(a<<8) & 0x00ff0000;
+                       b|=(a>>8) & 0x0000ff00;
+                       b|=a>>24;
+                       s->state.w[i]=b;
+               }
+
+               // Return pointer to hash (20 characters)
+               return s->state.b;
+       }
+
+       #define HMAC_IPAD 0x36
+       #define HMAC_OPAD 0x5c
+
+       void sha1_initHmac(sha1nfo *s, const uint8_t* key, int keyLength) {
+               uint8_t i;
+               memset(s->keyBuffer, 0, BLOCK_LENGTH);
+               if (keyLength > BLOCK_LENGTH) {
+                       // Hash long keys
+                       sha1_init(s);
+                       for (;keyLength--;) sha1_writebyte(s, *key++);
+                       memcpy(s->keyBuffer, sha1_result(s), HASH_LENGTH);
+               } else {
+                       // Block length keys are used as is
+                       memcpy(s->keyBuffer, key, keyLength);
+               }
+               // Start inner hash
+               sha1_init(s);
+               for (i=0; i<BLOCK_LENGTH; i++) {
+                       sha1_writebyte(s, s->keyBuffer[i] ^ HMAC_IPAD);
+               }
+       }
+
+       uint8_t* sha1_resultHmac(sha1nfo *s) {
+               uint8_t i;
+               // Complete inner hash
+               memcpy(s->innerHash,sha1_result(s),HASH_LENGTH);
+               // Calculate outer hash
+               sha1_init(s);
+               for (i=0; i<BLOCK_LENGTH; i++) sha1_writebyte(s, s->keyBuffer[i] ^ HMAC_OPAD);
+               for (i=0; i<HASH_LENGTH; i++) sha1_writebyte(s, s->innerHash[i]);
+               return sha1_result(s);
+       }
+`}
+
+redef class String
+
+       # Computes the SHA1 of the receiver
+       #
+       # Returns a digest of 20 bytes as a String,
+       # note that all the characters are not necessarily ASCII.
+       # If you want the hex string version of the digest, use
+       # sha1_to_s.
+       #
+       #     import base64
+       #     assert "The quick brown fox jumps over the lazy dog".sha1.encode_base64 == "L9ThxnotKPzthJ7hu3bnORuT6xI="
+       fun sha1: String import String.to_cstring, String.length, NativeString.to_s_with_length `{
+               uint32_t a;
+               sha1nfo s;
+
+               sha1_init(&s);
+               sha1_write(&s, String_to_cstring(recv), String_length(recv));
+               uint8_t* digest = sha1_result(&s);
+
+               char* digested = malloc(21);
+
+               memcpy(digested, digest, 20);
+
+               digested[20] = '\0';
+
+               return NativeString_to_s_with_length(digested, 20);
+       `}
+
+       # Computes the SHA1 of the receiver.
+       #
+       # Returns a 40 char String containing the Hexadecimal
+       # Digest in its Char form.
+       #
+       #     assert "The quick brown fox jumps over the lazy dog".sha1_to_s == "2FD4E1C67A2D28FCED849EE1BB76E7391B93EB12"
+       fun sha1_to_s: String import String.to_cstring, String.length, NativeString.to_s_with_length `{
+               uint32_t a;
+               sha1nfo s;
+
+               sha1_init(&s);
+               sha1_write(&s, String_to_cstring(recv), String_length(recv));
+               uint8_t* digest = sha1_result(&s);
+
+               char* ret_str = malloc(41);
+               char* hexmap = "0123456789ABCDEF";
+
+               int i;
+               for(i=0;i<20;i++){
+                       uint8_t q = digest[i];
+                       ret_str[i*2] = hexmap[q >> 4];
+                       ret_str[(i*2)+1] = hexmap[q & 0x0F];
+               }
+               ret_str[40] = '\0';
+
+               return NativeString_to_s_with_length(ret_str, 40);
+       `}
+
+end
+
index 78424ff..166cef4 100644 (file)
@@ -59,7 +59,7 @@ class Process
        # Internal code to handle execution
        protected init execute(command: String, arguments: nullable Array[String], pipeflags: Int)
        do
-               var args = new Buffer
+               var args = new FlatBuffer
                var l = 1 # Number of elements in args
                args.append(command)
                if arguments != null then
index 0d00cdd..b851876 100644 (file)
@@ -99,12 +99,12 @@ class IFStream
 
        redef fun fill_buffer
        do
-               var nb = _file.io_read(_buffer._items, _buffer._capacity)
+               var nb = _file.io_read(_buffer.items, _buffer.capacity)
                if nb <= 0 then
                        _end_reached = true
                        nb = 0
                end
-               _buffer._length = nb
+               _buffer.length = nb
                _buffer_pos = 0
        end
        
@@ -274,7 +274,7 @@ redef class String
        #     assert "".basename("")                            == ""
        fun basename(ext: String): String
        do
-               var l = _length - 1 # Index of the last char
+               var l = length - 1 # Index of the last char
                while l > 0 and self.chars[l] == '/' do l -= 1 # remove all trailing `/`
                if l == 0 then return "/"
                var pos = last_index_of_from('/', l)
@@ -297,7 +297,7 @@ redef class String
        #     assert "".dirname                            == "."
        fun dirname: String
        do
-               var l = _length - 1 # Index of the last char
+               var l = length - 1 # Index of the last char
                while l > 0 and self.chars[l] == '/' do l -= 1 # remove all trailing `/`
                var pos = last_index_of_from('/', l)
                if pos > 0 then
@@ -375,7 +375,7 @@ redef class String
        fun mkdir
        do
                var dirs = self.split_with("/")
-               var path = new Buffer
+               var path = new FlatBuffer
                if dirs.is_empty then return
                if dirs[0].is_empty then
                        # it was a starting /
index 49453ab..ad093ae 100644 (file)
@@ -45,7 +45,7 @@ abstract class Rope
        end
 
        # Initializes a new Rope with a text embedded in directly
-       init with_string(str: AbstractString) do
+       init with_string(str: String) do
                self.parent_node = new ConcatNode
                parent_node.as(ConcatNode).right_child = new LeafNode(str)
                parent_node.as(ConcatNode).update_data
@@ -71,7 +71,7 @@ abstract class Rope
        end
 
        # Stores a flat version of self in cache
-       private fun flatten: String
+       private fun flatten: FlatString
        do
                var native_final_str = calloc_string(length + 1)
 
@@ -82,7 +82,7 @@ abstract class Rope
                var iter = new DFSRopeLeafIterator(self)
 
                while iter.is_ok do
-                       iter.item.value._items.copy_to(native_final_str, iter.item.value.length, 0, offset)
+                       iter.item.value.as(FlatString).items.copy_to(native_final_str, iter.item.value.length, 0, offset)
                        offset += iter.item.value.length
                        iter.next
                end
@@ -276,7 +276,7 @@ abstract class Rope
        # Compares the current Rope to another object (either another rope or a String)
        redef fun == (other)
        do
-               if other == null or not (other isa Rope or other isa AbstractString) then return false
+               if other == null or not (other isa Rope or other isa FlatText) then return false
                var self_iter = new RopeCharIterator(self)
                if other isa Rope then
                        if self.length != other.length then return false
@@ -286,7 +286,7 @@ abstract class Rope
                                self_iter.next
                                other_iterator.next
                        end
-               else if other isa AbstractString then
+               else if other isa FlatText then
                        var pos = 0
                        if self.length != other.length then return false
                        while self_iter.is_ok do
@@ -449,45 +449,37 @@ class BufferRope
        ############################################################################
 
        # Appends a new Collection[Char] at the end of the current rope
-       fun append(str: Collection[Char]): BufferRope
+       fun append(str: String): BufferRope
        do
-               if str isa AbstractString then
-                       var last_node = parent_node
+               var last_node = parent_node
 
-                       while last_node isa ConcatNode and last_node.right_child != null do
-                               last_node = last_node.right_child.as(not null)
-                       end
-
-                       if last_node isa ConcatNode then
-                               last_node.right_child = new LeafNode(str.to_s)
-                       else if last_node isa LeafNode then
-                               var last_node_parent = last_node.parent
-                               var new_concat = new ConcatNode
-                               last_node_parent.right_child = new_concat
-                               new_concat.left_child = last_node
-                               new_concat.right_child = new LeafNode(str.to_s)
-                               last_node = new_concat
-                       else
-                               print "Fatal Error, please report to the developers for more insight."
-                               abort
-                       end
+               while last_node isa ConcatNode and last_node.right_child != null do
+                       last_node = last_node.right_child.as(not null)
+               end
 
-                       balance_from_node(last_node)
+               if last_node isa ConcatNode then
+                       last_node.right_child = new LeafNode(str.to_s)
+               else if last_node isa LeafNode then
+                       var last_node_parent = last_node.parent
+                       var new_concat = new ConcatNode
+                       last_node_parent.right_child = new_concat
+                       new_concat.left_child = last_node
+                       new_concat.right_child = new LeafNode(str.to_s)
+                       last_node = new_concat
                else
-                       var buf = new Buffer.with_capacity(str.length)
-                       for i in str do
-                               buf.add(i)
-                       end
-                       append(buf)
+                       print "Fatal Error, please report to the developers for more insight."
+                       abort
                end
 
-               if not is_dirty then is_dirty = true
+               balance_from_node(last_node)
+
+               is_dirty = true
 
                return self
        end
 
        # Variatic function to append several collections of Chars
-       fun append_multi(strs: Collection[Char]...): BufferRope
+       fun append_multi(strs: String...): BufferRope
        do
                for i in strs do
                        append(i)
@@ -496,46 +488,38 @@ class BufferRope
        end
 
        # Adds a new Collection[Char] at the beginning of the rope
-       fun prepend(str: Collection[Char]): BufferRope
+       fun prepend(str: String): BufferRope
        do
-               if str isa AbstractString then
-                       var curr_node = parent_node
-
-                       while curr_node isa ConcatNode and curr_node.left_child != null do
-                               curr_node = curr_node.left_child.as(not null)
-                       end
+               var curr_node = parent_node
 
-                       if curr_node isa ConcatNode then
-                               curr_node.left_child = new LeafNode(str.to_s)
-                       else if curr_node isa LeafNode then
-                               var parent = curr_node.parent
-                               var new_concat = new ConcatNode
-                               var new_leaf = new LeafNode(str.to_s)
-                               new_concat.left_child = new_leaf
-                               new_concat.right_child = curr_node
-                               parent.left_child = new_concat
-                               curr_node = new_concat
-                       else
-                               print "Fatal Error"
-                               abort
-                       end
+               while curr_node isa ConcatNode and curr_node.left_child != null do
+                       curr_node = curr_node.left_child.as(not null)
+               end
 
-                       balance_from_node(curr_node)
+               if curr_node isa ConcatNode then
+                       curr_node.left_child = new LeafNode(str.to_s)
+               else if curr_node isa LeafNode then
+                       var parent = curr_node.parent
+                       var new_concat = new ConcatNode
+                       var new_leaf = new LeafNode(str.to_s)
+                       new_concat.left_child = new_leaf
+                       new_concat.right_child = curr_node
+                       parent.left_child = new_concat
+                       curr_node = new_concat
                else
-                       var buf = new Buffer.with_capacity(str.length)
-                       for i in str do
-                               buf.add(i)
-                       end
-                       prepend(buf.to_s)
+                       print "Fatal Error"
+                       abort
                end
 
-               if not is_dirty then is_dirty = true
+               balance_from_node(curr_node)
+
+               is_dirty = true
 
                return self
        end
 
        # Variatic function to prepend several collections of Chars
-       fun prepend_multi(strs: Collection[Char]...): BufferRope
+       fun prepend_multi(strs: String...): BufferRope
        do
                for i in strs do
                        prepend(i)
@@ -1055,7 +1039,7 @@ private class LeafNode
        # Encapsulated string in the leaf node
        private var _value: String
 
-       init(val: AbstractString)
+       init(val: String)
        do
                self._value = val.to_s
                self.length = val.length
index 5724e94..d65d377 100644 (file)
@@ -37,7 +37,7 @@ interface IStream
        # Read at most i bytes
        fun read(i: Int): String
        do
-               var s = new Buffer.with_capacity(i)
+               var s = new FlatBuffer.with_capacity(i)
                while i > 0 and not eof do
                        var c = read_char
                        if c >= 0 then
@@ -52,7 +52,7 @@ interface IStream
        fun read_line: String
        do
                assert not eof
-               var s = new Buffer
+               var s = new FlatBuffer
                append_line_to(s)
                return s.to_s
        end
@@ -60,7 +60,7 @@ interface IStream
        # Read all the stream until the eof.
        fun read_all: String
        do
-               var s = new Buffer
+               var s = new FlatBuffer
                while not eof do
                        var c = read_char
                        if c >= 0 then s.add(c.ascii)
@@ -146,7 +146,7 @@ abstract class BufferedIStream
 
        redef fun read(i)
        do
-               var s = new Buffer.with_capacity(i)
+               var s = new FlatBuffer.with_capacity(i)
                var j = _buffer_pos
                var k = _buffer.length
                while i > 0 do
@@ -168,7 +168,7 @@ abstract class BufferedIStream
 
        redef fun read_all
        do
-               var s = new Buffer
+               var s = new FlatBuffer
                while not eof do
                        var j = _buffer_pos
                        var k = _buffer.length
@@ -221,7 +221,7 @@ abstract class BufferedIStream
        redef fun eof do return _buffer_pos >= _buffer.length and end_reached
 
        # The buffer
-       var _buffer: nullable Buffer = null
+       var _buffer: nullable FlatBuffer = null
 
        # The current position in the buffer
        var _buffer_pos: Int = 0
@@ -235,7 +235,7 @@ abstract class BufferedIStream
        # Allocate a `_buffer` for a given `capacity`.
        protected fun prepare_buffer(capacity: Int)
        do
-               _buffer = new Buffer.with_capacity(capacity)
+               _buffer = new FlatBuffer.with_capacity(capacity)
                _buffer_pos = 0 # need to read
        end
 end
index 0b3d6d9..29a25ff 100644 (file)
@@ -25,18 +25,26 @@ intrude import collection # FIXME should be collection::array
 # String                                                                      #
 ###############################################################################
 
-# Common subclass for String and Buffer
-abstract class AbstractString
-       super AbstractArrayRead[Char]
+# High-level abstraction for all text representations
+abstract class Text
+       super Comparable
+       super StringCapable
 
-       readable private var _items: NativeString
+       redef type OTHER: Text
 
-       fun chars: StringCharView is abstract
+       # Type of the view on self (.chars)
+       type SELFVIEW: StringCharView
 
-       # Access a character at `index` in the string.
-       #
-       #     assert "abcd"[2]         == 'c'
-       redef fun [](index) do return _items[index]
+       # Type of self (used for factorization of several methods, ex : substring_from, empty...)
+       type SELFTYPE: Text
+
+       var hash_cache: nullable Int = null
+
+       # Gets a view on the chars of the Text object
+       fun chars: SELFVIEW is abstract
+
+       # Number of characters contained in self.
+       fun length: Int is abstract
 
        # Create a substring.
        #
@@ -48,24 +56,115 @@ abstract class AbstractString
        # A `from` index < 0 will be replaced by 0.
        # Unless a `count` value is > 0 at the same time.
        # In this case, `from += count` and `count -= from`.
-       fun substring(from: Int, count: Int): String
+       fun substring(from: Int, count: Int): SELFTYPE is abstract
+
+       # Concatenates `o` to `self`
+       fun +(o: Text): SELFTYPE is abstract
+
+       # Auto-concatenates self `i` times
+       fun *(i: Int): SELFTYPE is abstract
+
+       # Is the current Text empty (== "")
+       #       assert "".is_empty
+       #       assert not "foo".is_empty
+       fun is_empty: Bool do return self.length == 0
+
+       # Returns an empty Text of the right type
+       fun empty: SELFTYPE is abstract
+
+       # Gets the first char of the Text
+       #
+       # DEPRECATED : Use self.chars.first instead
+       fun first: Char do return self.chars[0]
+
+       # Access a character at `index` in the string.
+       #
+       #     assert "abcd"[2]         == 'c'
+       #
+       # DEPRECATED : Use self.chars.[] instead
+       fun [](index: Int): Char do return self.chars[index]
+
+       # Gets the index of the first occurence of 'c'
+       #
+       # Returns -1 if not found
+       #
+       # DEPRECATED : Use self.chars.index_of instead
+       fun index_of(c: Char): Int
        do
-               assert count >= 0
-               count += from
-               if from < 0 then from = 0
-               if count > length then count = length
-               if from < count then
-                       var r = new Buffer.with_capacity(count - from)
-                       while from < count do
-                               r.chars.push(_items[from])
-                               from += 1
-                       end
-                       return r.to_s
-               else
-                       return ""
+               return index_of_from(c, 0)
+       end
+
+       # Gets the last char of self
+       #
+       # DEPRECATED : Use self.chars.last instead
+       fun last: Char do return self.chars[length-1]
+
+       # Gets the index of the first occurence of Â´c´ starting from Â´pos´
+       #
+       # Returns -1 if not found
+       #
+       # DEPRECATED : Use self.chars.index_of_from instead
+       fun index_of_from(c: Char, pos: Int): Int
+       do
+               var iter = self.chars.iterator_from(pos)
+               while iter.is_ok do
+                       if iter.item == c then return iter.index
                end
+               return -1
        end
 
+       # Gets the last index of char Â´c´
+       #
+       # Returns -1 if not found
+       #
+       # DEPRECATED : Use self.chars.last_index_of instead
+       fun last_index_of(c: Char): Int
+       do
+               return last_index_of_from(c, length - 1)
+       end
+
+       # Return a null terminated char *
+       fun to_cstring: NativeString do return flatten.to_cstring
+
+       # The index of the last occurrence of an element starting from pos (in reverse order).
+       # Example :
+       #               assert "/etc/bin/test/test.nit".last_index_of_from('/', length-1) == 13
+       #               assert "/etc/bin/test/test.nit".last_index_of_from('/', 12) == 8
+       #
+       # Returns -1 if not found
+       #
+       # DEPRECATED : Use self.chars.last_index_of_from instead
+       fun last_index_of_from(item: Char, pos: Int): Int
+       do
+               var iter = self.chars.reverse_iterator_from(pos)
+               while iter.is_ok do
+                       if iter.item == item then return iter.index
+                       iter.next
+               end
+               return -1
+       end
+
+       # Gets an iterator on the chars of self
+       #
+       # DEPRECATED : Use self.chars.iterator instead
+       fun iterator: Iterator[Char]
+       do
+               return self.chars.iterator
+       end
+
+       # Is 'c' contained in self ?
+       #
+       # DEPRECATED : Use self.chars.has instead
+       fun has(c: Char): Bool
+       do
+               return self.chars.has(c)
+       end
+
+       # Gets an Array containing the chars of self
+       #
+       # DEPRECATED : Use self.chars.to_a instead
+       fun to_a: Array[Char] do return chars.to_a
+
        # Create a substring from `self` beginning at the `from` position
        #
        #     assert "abcd".substring_from(1)    ==  "bcd"
@@ -73,30 +172,30 @@ abstract class AbstractString
        #     assert "abcd".substring_from(2)    ==  "cd"
        #
        # As with substring, a `from` index < 0 will be replaced by 0
-       fun substring_from(from: Int): String
+       fun substring_from(from: Int): SELFTYPE
        do
-               assert from < length
+               if from > self.length then return empty
+               if from < 0 then from = 0
                return substring(from, length - from)
        end
 
+       # Returns a reversed version of self
+       fun reversed: SELFTYPE is abstract
+
        # Does self have a substring `str` starting from position `pos`?
        #
        #     assert "abcd".has_substring("bc",1)            ==  true
        #     assert "abcd".has_substring("bc",2)            ==  false
        fun has_substring(str: String, pos: Int): Bool
        do
-               var itsindex = str.length - 1
-               var myindex = pos + itsindex
-               var myitems = _items
-               var itsitems = str._items
-               if myindex > length or itsindex > myindex  then return false
-               var its_index_from = str._index_from
-               itsindex += its_index_from
-               while itsindex >= its_index_from do
-                       if myitems[myindex] != itsitems[itsindex] then return false
-                       myindex -= 1
-                       itsindex -= 1
+               var myiter = self.chars.iterator_from(pos)
+               var itsiter = str.iterator
+               while myiter.is_ok and itsiter.is_ok do
+                       if myiter.item != itsiter.item then return false
+                       myiter.next
+                       itsiter.next
                end
+               if itsiter.is_ok then return false
                return true
        end
 
@@ -194,21 +293,35 @@ abstract class AbstractString
        # A upper case version of `self`
        #
        #     assert "Hello World!".to_upper     == "HELLO WORLD!"
-       fun to_upper: String
-       do
-               var s = new Buffer.with_capacity(length)
-               for i in self.chars do s.add(i.to_upper)
-               return s.to_s
-       end
+       fun to_upper: SELFTYPE is abstract
 
        # A lower case version of `self`
        #
        #     assert "Hello World!".to_lower     == "hello world!"
-       fun to_lower : String
+       fun to_lower : SELFTYPE is abstract
+
+       # Removes the whitespaces at the beginning of self
+       fun l_trim: SELFTYPE
        do
-               var s = new Buffer.with_capacity(length)
-               for i in self.chars do s.add(i.to_lower)
-               return s.to_s
+               var iter = self.chars.iterator
+               while iter.is_ok do
+                       if iter.item.ascii > 32 then break
+                       iter.next
+               end
+               if iter.index == length then return self.empty
+               return self.substring_from(iter.index)
+       end
+
+       # Removes the whitespaces at the end of self
+       fun r_trim: SELFTYPE
+       do
+               var iter = self.chars.reverse_iterator
+               while iter.is_ok do
+                       if iter.item.ascii > 32 then break
+                       iter.next
+               end
+               if iter.index == length then return self.empty
+               return self.substring(0, iter.index + 1)
        end
 
        # Trims trailing and preceding white spaces
@@ -216,37 +329,12 @@ abstract class AbstractString
        #
        #     assert "  Hello  World !  ".trim   == "Hello  World !"
        #     assert "\na\nb\tc\t".trim          == "a\nb\tc"
-       fun trim: String
-       do
-               if self.length == 0 then return self.to_s
-               # find position of the first non white space char (ascii < 32) from the start of the string
-               var start_pos = 0
-               while self.chars[start_pos].ascii <= 32 do
-                       start_pos += 1
-                       if start_pos == length then return ""
-               end
-               # find position of the first non white space char from the end of the string
-               var end_pos = length - 1
-               while self.chars[end_pos].ascii <= 32 do
-                       end_pos -= 1
-                       if end_pos == start_pos then return self.chars[start_pos].to_s
-               end
-               return self.substring(start_pos, end_pos - start_pos + 1)
-       end
-
-       redef fun output
-       do
-               var i = 0
-               while i < length do
-                       _items[i].output
-                       i += 1
-               end
-       end
+       fun trim: SELFTYPE do return (self.l_trim).r_trim
 
        # Mangle a string to be a unique string only made of alphanumeric characters
        fun to_cmangle: String
        do
-               var res = new Buffer
+               var res = new FlatBuffer
                var underscore = false
                for c in self.chars do
                        if (c >= 'a' and c <= 'z') or (c >='A' and c <= 'Z') then
@@ -280,7 +368,7 @@ abstract class AbstractString
        #     assert "\n\"'\\".escape_to_c         == "\\n\\\"\\'\\\\"
        fun escape_to_c: String
        do
-               var b = new Buffer
+               var b = new FlatBuffer
                for c in self.chars do
                        if c == '\n' then
                                b.append("\\n")
@@ -307,9 +395,9 @@ abstract class AbstractString
        #     assert "ab|\{\}".escape_more_to_c("|\{\}") == "ab\\|\\\{\\\}"
        fun escape_more_to_c(chars: String): String
        do
-               var b = new Buffer
+               var b = new FlatBuffer
                for c in escape_to_c do
-                       if chars.has(c) then
+                       if chars.chars.has(c) then
                                b.add('\\')
                        end
                        b.add(c)
@@ -332,7 +420,7 @@ abstract class AbstractString
        #     assert u[0].ascii      ==  10 # (the ASCII value of the "new line" character)
        fun unescape_nit: String
        do
-               var res = new Buffer.with_capacity(self.length)
+               var res = new FlatBuffer.with_capacity(self.length)
                var was_slash = false
                for c in self do
                        if not was_slash then
@@ -358,14 +446,77 @@ abstract class AbstractString
                end
                return res.to_s
        end
+
+       redef fun ==(o)
+       do
+               if o == null then return false
+               if not o isa Text then return false
+               if self.is_same_instance(o) then return true
+               if self.length != o.length then return false
+               return self.chars == o.chars
+       end
+
+       redef fun <(o)
+       do
+               return self.chars < o.chars
+       end
+
+       # Flat representation of self
+       fun flatten: FlatText is abstract
+
+       redef fun hash
+       do
+               if hash_cache == null then
+                       # djb2 hash algorithm
+                       var h = 5381
+                       var i = length - 1
+
+                       for char in self.chars do
+                               h = (h * 32) + h + char.ascii
+                               i -= 1
+                       end
+
+                       hash_cache = h
+               end
+               return hash_cache.as(not null)
+       end
+
+end
+
+# All kinds of array-based text representations.
+abstract class FlatText
+       super Text
+
+       private var items: NativeString
+
+       # Real items, used as cache for to_cstring is called
+       private var real_items: nullable NativeString = null
+
+       redef var length: Int
+
+       init do end
+
+       redef fun output
+       do
+               var i = 0
+               while i < length do
+                       items[i].output
+                       i += 1
+               end
+       end
+
+       redef fun flatten do return self
 end
 
 # Abstract class for the SequenceRead compatible
 # views on String and Buffer objects
 abstract class StringCharView
        super SequenceRead[Char]
+       super Comparable
+
+       type SELFTYPE: Text
 
-       type SELFTYPE: AbstractString
+       redef type OTHER: StringCharView
 
        private var target: SELFTYPE
 
@@ -378,6 +529,44 @@ abstract class StringCharView
 
        redef fun length do return target.length
 
+       redef fun iterator: IndexedIterator[Char] do return self.iterator_from(0)
+
+       # Gets a new Iterator starting at position `pos`
+       #
+       # Ex :
+       #       var iter = "abcd".iterator_from(2)
+       #       while iter.is_ok do
+       #               printn iter.item
+       #               iter.next
+       #       end
+       #
+       # Outputs : cd
+       fun iterator_from(pos: Int): IndexedIterator[Char] is abstract
+
+       # Gets an iterator starting at the end and going backwards
+       #
+       # Ex :
+       #       var reviter = "now step live...".reverse_iterator
+       #       while reviter.is_ok do
+       #               printn reviter.item
+       #               reviter.next
+       #       end
+       #
+       # Outputs : ...evil pets won
+       fun reverse_iterator: IndexedIterator[Char] do return self.reverse_iterator_from(self.length - 1)
+
+       # Gets an iterator on the chars of self starting from `pos`
+       #
+       # Ex :
+       #       var iter = "abcd".reverse_iterator_from(1)
+       #       while iter.is_ok do
+       #               printn iter.item
+       #               iter.next
+       #       end
+       #
+       # Outputs : ba
+       fun reverse_iterator_from(pos: Int): IndexedIterator[Char] is abstract
+
        redef fun has(c: Char): Bool
        do
                for i in self do
@@ -386,6 +575,36 @@ abstract class StringCharView
                return false
        end
 
+       redef fun ==(other)
+       do
+               if other == null then return false
+               if not other isa StringCharView then return false
+               var other_chars = other.iterator
+               for i in self do
+                       if i != other_chars.item then return false
+                       other_chars.next
+               end
+               return true
+       end
+
+       redef fun <(other)
+       do
+               var self_chars = self.iterator
+               var other_chars = other.iterator
+
+               while self_chars.is_ok and other_chars.is_ok do
+                       if self_chars.item < other_chars.item then return true
+                       if self_chars.item > other_chars.item then return false
+                       self_chars.next
+                       other_chars.next
+               end
+
+               if self_chars.is_ok then
+                       return false
+               else
+                       return true
+               end
+       end
 end
 
 # View on Buffer objects, extends Sequence
@@ -398,21 +617,29 @@ abstract class BufferCharView
 
 end
 
+abstract class String
+       super Text
+
+       redef type SELFTYPE: String
+
+       redef fun to_s do return self
+
+end
+
 # Immutable strings of characters.
-class String
-       super Comparable
-       super AbstractString
-       super StringCapable
+class FlatString
+       super FlatText
+       super String
 
-       redef type OTHER: String
+       redef type SELFTYPE: FlatString
 
        # Index in _items of the start of the string
-       readable var _index_from: Int
+       private var index_from: Int
 
        # Indes in _items of the last item of the string
-       readable var _index_to: Int
+       private var index_to: Int
 
-       redef var chars: StringCharView = new FlatStringCharView(self)
+       redef var chars: SELFVIEW = new FlatStringCharView(self)
 
        ################################################
        #       AbstractString specific methods        #
@@ -422,11 +649,24 @@ class String
                assert index >= 0
                # Check that the index (+ index_from) is not larger than indexTo
                # In other terms, if the index is valid
-               assert (index + _index_from) <= _index_to
-               return _items[index + _index_from]
+               assert (index + index_from) <= index_to
+               return items[index + index_from]
+       end
+
+       redef fun reversed
+       do
+               var native = calloc_string(self.length + 1)
+               var reviter = chars.reverse_iterator
+               var pos = 0
+               while reviter.is_ok do
+                       native[pos] = reviter.item
+                       pos += 1
+                       reviter.next
+               end
+               return native.to_s_with_length(self.length)
        end
 
-       redef fun substring(from: Int, count: Int): String
+       redef fun substring(from, count)
        do
                assert count >= 0
 
@@ -436,56 +676,27 @@ class String
                        from = 0
                end
 
-               var realFrom = _index_from + from
+               var realFrom = index_from + from
 
-               if (realFrom + count) > _index_to then return new String.with_infos(_items, _index_to - realFrom + 1, realFrom, _index_to)
+               if (realFrom + count) > index_to then return new FlatString.with_infos(items, index_to - realFrom + 1, realFrom, index_to)
 
-               if count == 0 then return ""
+               if count == 0 then return empty
 
                var to = realFrom + count - 1
 
-               return new String.with_infos(_items, to - realFrom + 1, realFrom, to)
+               return new FlatString.with_infos(items, to - realFrom + 1, realFrom, to)
        end
 
-       redef fun substring_from(from: Int): String
-       do
-               if from > _length then return ""
-               if from < 0 then from = 0
-               return substring(from, _length)
-       end
-
-       redef fun has_substring(str: String, pos: Int): Bool
-       do
-               var itsindex = str._length - 1
-
-               var myindex = pos + itsindex
-               var myitems = _items
-
-               var itsitems = str._items
-
-               if myindex > _length or itsindex > myindex then return false
-
-               var itsindexfrom = str.index_from
-               itsindex += itsindexfrom
-               myindex += index_from
-
-               while itsindex >= itsindexfrom do
-                       if myitems[myindex] != itsitems[itsindex] then return false
-                       myindex -= 1
-                       itsindex -= 1
-               end
+       redef fun empty do return "".as(FlatString)
 
-               return true
-       end
-
-       redef fun to_upper: String
+       redef fun to_upper
        do
-               var outstr = calloc_string(self._length + 1)
+               var outstr = calloc_string(self.length + 1)
                var out_index = 0
 
-               var myitems = self._items
-               var index_from = self._index_from
-               var max = self._index_to
+               var myitems = self.items
+               var index_from = self.index_from
+               var max = self.index_to
 
                while index_from <= max do
                        outstr[out_index] = myitems[index_from].to_upper
@@ -495,17 +706,17 @@ class String
 
                outstr[self.length] = '\0'
 
-               return outstr.to_s_with_length(self._length)
+               return outstr.to_s_with_length(self.length)
        end
 
-       redef fun to_lower : String
+       redef fun to_lower
        do
-               var outstr = calloc_string(self._length + 1)
+               var outstr = calloc_string(self.length + 1)
                var out_index = 0
 
-               var myitems = self._items
-               var index_from = self._index_from
-               var max = self._index_to
+               var myitems = self.items
+               var index_from = self.index_from
+               var max = self.index_to
 
                while index_from <= max do
                        outstr[out_index] = myitems[index_from].to_lower
@@ -515,35 +726,15 @@ class String
 
                outstr[self.length] = '\0'
 
-               return outstr.to_s_with_length(self._length)
-       end
-
-       redef fun trim: String
-       do
-               if self._length == 0 then return self
-               # find position of the first non white space char (ascii < 32) from the start of the string
-               var start_pos = self._index_from
-               while _items[start_pos].ascii <= 32 do
-                       start_pos += 1
-                       if start_pos == _index_to + 1 then return ""
-               end
-               # find position of the first non white space char from the end of the string
-               var end_pos = _index_to
-               while _items[end_pos].ascii <= 32 do
-                       end_pos -= 1
-                       if end_pos == start_pos then return _items[start_pos].to_s
-               end
-               start_pos -= index_from
-               end_pos -= index_from
-               return self.substring(start_pos, end_pos - start_pos + 1)
+               return outstr.to_s_with_length(self.length)
        end
 
        redef fun output
        do
-               var i = self._index_from
-               var imax = self._index_to
+               var i = self.index_from
+               var imax = self.index_to
                while i <= imax do
-                       _items[i].output
+                       items[i].output
                        i += 1
                end
        end
@@ -554,41 +745,43 @@ class String
 
        private init with_infos(items: NativeString, len: Int, from: Int, to: Int)
        do
-               self._items = items
-               _length = len
-               _index_from = from
-               _index_to = to
+               self.items = items
+               length = len
+               index_from = from
+               index_to = to
        end
 
        # Return a null terminated char *
-       fun to_cstring: NativeString
+       redef fun to_cstring: NativeString
        do
-               if _index_from > 0 or _index_to != items.cstring_length - 1 then
-                       var newItems = calloc_string(_length + 1)
-                       self.items.copy_to(newItems, _length, _index_from, 0)
+               if real_items != null then return real_items.as(not null)
+               if index_from > 0 or index_to != items.cstring_length - 1 then
+                       var newItems = calloc_string(length + 1)
+                       self.items.copy_to(newItems, length, index_from, 0)
                        newItems[length] = '\0'
+                       self.real_items = newItems
                        return newItems
                end
-               return _items
+               return items
        end
 
        redef fun ==(other)
        do
-               if not other isa String then return false
+               if not other isa FlatString then return super
 
                if self.object_id == other.object_id then return true
 
-               var my_length = _length
+               var my_length = length
 
-               if other._length != my_length then return false
+               if other.length != my_length then return false
 
-               var my_index = _index_from
-               var its_index = other._index_from
+               var my_index = index_from
+               var its_index = other.index_from
 
                var last_iteration = my_index + my_length
 
-               var itsitems = other._items
-               var myitems = self._items
+               var itsitems = other.items
+               var myitems = self.items
 
                while my_index < last_iteration do
                        if myitems[my_index] != itsitems[its_index] then return false
@@ -604,19 +797,21 @@ class String
        #     assert ("aa" < "b")      ==  true
        redef fun <(other)
        do
+               if not other isa FlatString then return super
+
                if self.object_id == other.object_id then return false
 
                var my_curr_char : Char
                var its_curr_char : Char
 
-               var curr_id_self = self._index_from
-               var curr_id_other = other._index_from
+               var curr_id_self = self.index_from
+               var curr_id_other = other.index_from
 
-               var my_items = self._items
-               var its_items = other._items
+               var my_items = self.items
+               var its_items = other.items
 
-               var my_length = self._length
-               var its_length = other._length
+               var my_length = self.length
+               var its_length = other.length
 
                var max_iterations = curr_id_self + my_length
 
@@ -639,37 +834,45 @@ class String
        # The concatenation of `self` with `s`
        #
        #     assert "hello " + "world!"         == "hello world!"
-       fun +(s: String): String
+       redef fun +(s)
        do
-               var my_length = self._length
-               var its_length = s._length
+               var my_length = self.length
+               var its_length = s.length
 
                var total_length = my_length + its_length
 
                var target_string = calloc_string(my_length + its_length + 1)
 
-               self._items.copy_to(target_string, my_length, _index_from, 0)
-               s._items.copy_to(target_string, its_length, s._index_from, my_length)
+               self.items.copy_to(target_string, my_length, index_from, 0)
+               if s isa FlatString then
+                       s.items.copy_to(target_string, its_length, s.index_from, my_length)
+               else if s isa FlatBuffer then
+                       s.items.copy_to(target_string, its_length, 0, my_length)
+               else
+                       var curr_pos = my_length
+                       for i in s.chars do
+                               target_string[curr_pos] = i
+                               curr_pos += 1
+                       end
+               end
 
                target_string[total_length] = '\0'
 
                return target_string.to_s_with_length(total_length)
        end
 
-       # `i` repetitions of `self`
-       #
        #     assert "abc"*3           == "abcabcabc"
        #     assert "abc"*1           == "abc"
        #     assert "abc"*0           == ""
-       fun *(i: Int): String
+       redef fun *(i)
        do
                assert i >= 0
 
-               var my_length = self._length
+               var my_length = self.length
 
                var final_length = my_length * i
 
-               var my_items = self._items
+               var my_items = self.items
 
                var target_string = calloc_string((final_length) + 1)
 
@@ -685,38 +888,66 @@ class String
                return target_string.to_s_with_length(final_length)
        end
 
-       redef fun to_s do return self
-
        redef fun hash
        do
-               # djb2 hash algorythm
-               var h = 5381
-               var i = _length - 1
+               if hash_cache == null then
+                       # djb2 hash algorythm
+                       var h = 5381
+                       var i = length - 1
+
+                       var myitems = items
+                       var strStart = index_from
 
-               var myitems = _items
-               var strStart = _index_from
+                       i += strStart
 
-               i += strStart
+                       while i >= strStart do
+                               h = (h * 32) + h + self.items[i].ascii
+                               i -= 1
+                       end
 
-               while i >= strStart do
-                       h = (h * 32) + h + self._items[i].ascii
-                       i -= 1
+                       hash_cache = h
                end
 
-               return h
+               return hash_cache.as(not null)
        end
 end
 
+private class FlatStringReverseIterator
+       super IndexedIterator[Char]
+
+       var target: FlatString
+
+       var target_items: NativeString
+
+       var curr_pos: Int
+
+       init with_pos(tgt: FlatString, pos: Int)
+       do
+               target = tgt
+               target_items = tgt.items
+               curr_pos = pos + tgt.index_from
+       end
+
+       redef fun is_ok do return curr_pos >= 0
+
+       redef fun item do return target_items[curr_pos]
+
+       redef fun next do curr_pos -= 1
+
+       redef fun index do return curr_pos - target.index_from
+
+end
+
 private class FlatStringIterator
        super IndexedIterator[Char]
 
-       var target: String
+       var target: FlatString
 
        var target_items: NativeString
 
        var curr_pos: Int
 
-       init with_pos(tgt: String, pos: Int)
+       init with_pos(tgt: FlatString, pos: Int)
        do
                target = tgt
                target_items = tgt.items
@@ -736,155 +967,265 @@ end
 private class FlatStringCharView
        super StringCharView
 
-       redef type SELFTYPE: String
+       redef type SELFTYPE: FlatString
 
        redef fun [](index)
        do
                # Check that the index (+ index_from) is not larger than indexTo
                # In other terms, if the index is valid
                assert index >= 0
-               assert (index + target._index_from) <= target._index_to
-               return target._items[index + target._index_from]
+               assert (index + target.index_from) <= target.index_to
+               return target.items[index + target.index_from]
        end
 
-       redef fun iterator: IndexedIterator[Char] do return new FlatStringIterator.with_pos(target, 0)
+       redef fun iterator_from(start) do return new FlatStringIterator.with_pos(target, start)
+
+       redef fun reverse_iterator_from(start) do return new FlatStringReverseIterator.with_pos(target, start)
+
+end
+
+abstract class Buffer
+       super Text
+
+       redef type SELFVIEW: BufferCharView
+       redef type SELFTYPE: Buffer
+
+       var is_dirty = true
+
+       # Modifies the char contained at pos `index`
+       #
+       # DEPRECATED : Use self.chars.[]= instead
+       fun []=(index: Int, item: Char) is abstract
+
+       # Adds a char `c` at the end of self
+       #
+       # DEPRECATED : Use self.chars.add instead
+       fun add(c: Char) is abstract
+
+       # Clears the buffer
+       fun clear is abstract
+
+       # Enlarges the subsequent array containing the chars of self
+       fun enlarge(cap: Int) is abstract
+
+       # Adds the content of text `s` at the end of self
+       fun append(s: Text) is abstract
+
+       redef fun hash
+       do
+               if is_dirty then hash_cache = null
+               return super
+       end
 
 end
 
 # Mutable strings of characters.
-class Buffer
-       super AbstractString
-       super Comparable
-       super StringCapable
-       super AbstractArray[Char]
+class FlatBuffer
+       super FlatText
+       super Buffer
+
+       redef type SELFTYPE: FlatBuffer
 
-       redef type OTHER: String
+       redef var chars: SELFVIEW = new FlatBufferCharView(self)
 
-       redef var chars: BufferCharView = new FlatBufferCharView(self)
+       var capacity: Int
 
        redef fun []=(index, item)
        do
+               is_dirty = true
                if index == length then
                        add(item)
                        return
                end
                assert index >= 0 and index < length
-               _items[index] = item
+               items[index] = item
        end
 
        redef fun add(c)
        do
-               if _capacity <= length then enlarge(length + 5)
-               _items[length] = c
-               _length += 1
+               is_dirty = true
+               if capacity <= length then enlarge(length + 5)
+               items[length] = c
+               length += 1
+       end
+
+       redef fun clear do
+               is_dirty = true
+               length = 0
        end
 
+       redef fun empty do return new FlatBuffer
+
        redef fun enlarge(cap)
        do
-               var c = _capacity
+               is_dirty = true
+               var c = capacity
                if cap <= c then return
                while c <= cap do c = c * 2 + 2
                var a = calloc_string(c+1)
-               _items.copy_to(a, length, 0, 0)
-               _items = a
-               _capacity = c
+               items.copy_to(a, length, 0, 0)
+               items = a
+               capacity = c
+               items.copy_to(a, length, 0, 0)
        end
 
-       redef fun append(s)
+       redef fun to_s: String
+       do
+               return to_cstring.to_s_with_length(length)
+       end
+
+       redef fun to_cstring
        do
-               if s isa String then
-                       var sl = s.length
-                       if _capacity < _length + sl then enlarge(_length + sl)
-                       s.items.copy_to(_items, sl, s._index_from, _length)
-                       _length += sl
+               if is_dirty then
+                       var new_native = calloc_string(length + 1)
+                       new_native[length] = '\0'
+                       items.copy_to(new_native, length, 0, 0)
+                       real_items = new_native
+                       is_dirty = false
+               end
+               return real_items.as(not null)
+       end
+
+       # Create a new empty string.
+       init do with_capacity(5)
+
+       init from(s: Text)
+       do
+               capacity = s.length + 1
+               length = s.length
+               items = calloc_string(capacity)
+               if s isa FlatString then
+                       s.items.copy_to(items, length, s.index_from, 0)
+               else if s isa FlatBuffer then
+                       s.items.copy_to(items, length, 0, 0)
                else
-                       super
+                       var curr_pos = 0
+                       for i in s.chars do
+                               items[curr_pos] = i
+                               curr_pos += 1
+                       end
                end
        end
 
-       redef fun to_s: String
+       # Create a new empty string with a given capacity.
+       init with_capacity(cap: Int)
        do
-               var l = length
-               var a = calloc_string(l+1)
-               _items.copy_to(a, l, 0, 0)
+               assert cap >= 0
+               # _items = new NativeString.calloc(cap)
+               items = calloc_string(cap+1)
+               capacity = cap
+               length = 0
+       end
 
-               # Ensure the afterlast byte is '\0' to nul-terminated char *
-               a[length] = '\0'
+       redef fun append(s)
+       do
+               is_dirty = true
+               var sl = s.length
+               if capacity < length + sl then enlarge(length + sl)
+               if s isa FlatString then
+                       s.items.copy_to(items, sl, s.index_from, length)
+               else if s isa FlatBuffer then
+                       s.items.copy_to(items, sl, 0, length)
+               else
+                       var curr_pos = self.length
+                       for i in s.chars do
+                               items[curr_pos] = i
+                               curr_pos += 1
+                       end
+               end
+               length += sl
+       end
 
-               return a.to_s_with_length(length)
+       # Copies the content of self in `dest`
+       fun copy(start: Int, len: Int, dest: Buffer, new_start: Int)
+       do
+               var self_chars = self.chars
+               var dest_chars = dest.chars
+               for i in [0..len-1] do
+                       dest_chars[new_start+i] = self_chars[start+i]
+               end
        end
 
-       redef fun <(s)
+       redef fun substring(from, count)
        do
-               var i = 0
-               var l1 = length
-               var l2 = s.length
-               while i < l1 and i < l2 do
-                       var c1 = self.chars[i].ascii
-                       var c2 = s.chars[i].ascii
-                       if c1 < c2 then
-                               return true
-                       else if c2 < c1 then
-                               return false
+               assert count >= 0
+               count += from
+               if from < 0 then from = 0
+               if count > length then count = length
+               if from < count then
+                       var r = new FlatBuffer.with_capacity(count - from)
+                       while from < count do
+                               r.chars.push(items[from])
+                               from += 1
                        end
-                       i += 1
-               end
-               if l1 < l2 then
-                       return true
+                       return r
                else
-                       return false
+                       return new FlatBuffer
                end
        end
 
-       # Create a new empty string.
-       init
+       redef fun reversed
        do
-               with_capacity(5)
+               var new_buf = new FlatBuffer.with_capacity(self.length)
+               var reviter = self.chars.reverse_iterator
+               while reviter.is_ok do
+                       new_buf.add(reviter.item)
+                       reviter.next
+               end
+               return new_buf
        end
 
-       init from(s: String)
+       redef fun +(other)
        do
-               _capacity = s.length + 1
-               _length = s.length
-               _items = calloc_string(_capacity)
-               s.items.copy_to(_items, _length, s._index_from, 0)
+               var new_buf = new FlatBuffer.with_capacity(self.length + other.length)
+               new_buf.append(self)
+               new_buf.append(other)
+               return new_buf
        end
 
-       # Create a new empty string with a given capacity.
-       init with_capacity(cap: Int)
+       redef fun *(repeats)
        do
-               assert cap >= 0
-               # _items = new NativeString.calloc(cap)
-               _items = calloc_string(cap+1)
-               _capacity = cap
-               _length = 0
+               var new_buf = new FlatBuffer.with_capacity(self.length * repeats)
+               for i in [0..repeats[ do
+                       new_buf.append(self)
+               end
+               return new_buf
        end
+end
 
-       redef fun ==(o)
+private class FlatBufferReverseIterator
+       super IndexedIterator[Char]
+
+       var target: FlatBuffer
+
+       var target_items: NativeString
+
+       var curr_pos: Int
+
+       init with_pos(tgt: FlatBuffer, pos: Int)
        do
-               if not o isa Buffer then return false
-               var l = length
-               if o.length != l then return false
-               var i = 0
-               var it = _items
-               var oit = o._items
-               while i < l do
-                       if it[i] != oit[i] then return false
-                       i += 1
-               end
-               return true
+               target = tgt
+               target_items = tgt.items
+               curr_pos = pos
        end
 
-       readable private var _capacity: Int
+       redef fun index do return curr_pos
+
+       redef fun is_ok do return curr_pos >= 0
+
+       redef fun item do return target_items[curr_pos]
+
+       redef fun next do curr_pos -= 1
+
 end
 
 private class FlatBufferCharView
        super BufferCharView
        super StringCapable
 
-       redef type SELFTYPE: Buffer
+       redef type SELFTYPE: FlatBuffer
 
-       redef fun [](index) do return target._items[index]
+       redef fun [](index) do return target.items[index]
 
        redef fun []=(index, item)
        do
@@ -893,7 +1234,7 @@ private class FlatBufferCharView
                        add(item)
                        return
                end
-               target._items[index] = item
+               target.items[index] = item
        end
 
        redef fun push(c)
@@ -918,20 +1259,22 @@ private class FlatBufferCharView
                if target.capacity < s.length then enlarge(s_length + target.length)
        end
 
-       redef fun iterator: IndexedIterator[Char] do return new FlatBufferIterator.with_pos(target, 0)
+       redef fun iterator_from(pos) do return new FlatBufferIterator.with_pos(target, pos)
+
+       redef fun reverse_iterator_from(pos) do return new FlatBufferReverseIterator.with_pos(target, pos)
 
 end
 
 private class FlatBufferIterator
        super IndexedIterator[Char]
 
-       var target: Buffer
+       var target: FlatBuffer
 
        var target_items: NativeString
 
        var curr_pos: Int
 
-       init with_pos(tgt: Buffer, pos: Int)
+       init with_pos(tgt: FlatBuffer, pos: Int)
        do
                target = tgt
                target_items = tgt.items
@@ -1041,7 +1384,7 @@ redef class Int
        fun to_base(base: Int, signed: Bool): String
        do
                var l = digit_count(base)
-               var s = new Buffer.from(" " * l)
+               var s = new FlatBuffer.from(" " * l)
                fill_buffer(s, base, signed)
                return s.to_s
        end
@@ -1116,7 +1459,7 @@ redef class Char
        #     assert 'x'.to_s    == "x"
        redef fun to_s
        do
-               var s = new Buffer.with_capacity(1)
+               var s = new FlatBuffer.with_capacity(1)
                s.chars[0] = self
                return s.to_s
        end
@@ -1150,7 +1493,7 @@ redef class Collection[E]
        # Concatenate elements.
        redef fun to_s
        do
-               var s = new Buffer
+               var s = new FlatBuffer
                for e in self do if e != null then s.append(e.to_s)
                return s.to_s
        end
@@ -1163,7 +1506,7 @@ redef class Collection[E]
        do
                if is_empty then return ""
 
-               var s = new Buffer # Result
+               var s = new FlatBuffer # Result
 
                # Concat first item
                var i = iterator
@@ -1186,7 +1529,7 @@ redef class Array[E]
        # Fast implementation
        redef fun to_s
        do
-               var s = new Buffer
+               var s = new FlatBuffer
                var i = 0
                var l = length
                while i < l do
@@ -1211,7 +1554,7 @@ redef class Map[K,V]
        do
                if is_empty then return ""
 
-               var s = new Buffer # Result
+               var s = new FlatBuffer # Result
 
                # Concat first item
                var i = iterator
@@ -1259,18 +1602,18 @@ class NativeString
                return to_s_with_length(cstring_length)
        end
 
-       fun to_s_with_length(length: Int): String
+       fun to_s_with_length(length: Int): FlatString
        do
                assert length >= 0
-               return new String.with_infos(self, length, 0, length - 1)
+               return new FlatString.with_infos(self, length, 0, length - 1)
        end
 
-       fun to_s_with_copy: String
+       fun to_s_with_copy: FlatString
        do
                var length = cstring_length
                var new_self = calloc_string(length + 1)
                copy_to(new_self, length, 0, 0)
-               return new String.with_infos(new_self, length, 0, length - 1)
+               return new FlatString.with_infos(new_self, length, 0, length - 1)
        end
 
 end
index 6cd67c4..846de56 100644 (file)
@@ -45,10 +45,10 @@ interface Pattern
        # Search all `self` occurrences into `s`.
        #
        #     assert 'l'.search_all_in("hello world").length  == 3
-       #     assert 'z'.search_all_in("hello world"),length  == 0
+       #     assert 'z'.search_all_in("hello world").length  == 0
        #
        # Note: Is used by `String::search_all`.
-       fun search_all_in(s: String): Array[Match]
+       protected fun search_all_in(s: String): Array[Match]
        do
                var res = new Array[Match] # Result
                var match = search_in(s, 0)
@@ -68,7 +68,7 @@ interface Pattern
        #     assert 'z'.split_in("hello world").join("|")  == "hello world"
        #
        # Note: is used by `String::split`
-       fun split_in(s: String): Array[Match]
+       protected fun split_in(s: String): Array[Match]
        do
                var res = new Array[Match] # Result
                var i = 0 # Cursor
index 1beb99d..90eb876 100644 (file)
@@ -2230,29 +2230,29 @@ redef class AForExpr
                var cl = v.expr(self.n_expr, null)
                var it_meth = self.method_iterator
                assert it_meth != null
-               var it = v.send(it_meth, [cl])
+               var it = v.compile_callsite(it_meth, [cl])
                assert it != null
                v.add("for(;;) \{")
                var isok_meth = self.method_is_ok
                assert isok_meth != null
-               var ok = v.send(isok_meth, [it])
+               var ok = v.compile_callsite(isok_meth, [it])
                assert ok != null
                v.add("if(!{ok}) break;")
                if self.variables.length == 1 then
                        var item_meth = self.method_item
                        assert item_meth != null
-                       var i = v.send(item_meth, [it])
+                       var i = v.compile_callsite(item_meth, [it])
                        assert i != null
                        v.assign(v.variable(variables.first), i)
                else if self.variables.length == 2 then
                        var key_meth = self.method_key
                        assert key_meth != null
-                       var i = v.send(key_meth, [it])
+                       var i = v.compile_callsite(key_meth, [it])
                        assert i != null
                        v.assign(v.variable(variables[0]), i)
                        var item_meth = self.method_item
                        assert item_meth != null
-                       i = v.send(item_meth, [it])
+                       i = v.compile_callsite(item_meth, [it])
                        assert i != null
                        v.assign(v.variable(variables[1]), i)
                else
@@ -2262,7 +2262,7 @@ redef class AForExpr
                v.add("CONTINUE_{v.escapemark_name(escapemark)}: (void)0;")
                var next_meth = self.method_next
                assert next_meth != null
-               v.send(next_meth, [it])
+               v.compile_callsite(next_meth, [it])
                v.add("\}")
                v.add("BREAK_{v.escapemark_name(escapemark)}: (void)0;")
        end
@@ -2405,7 +2405,7 @@ redef class ACrangeExpr
                var i2 = v.expr(self.n_expr2, null)
                var mtype = self.mtype.as(MClassType)
                var res = v.init_instance(mtype)
-               var it = v.send(v.get_property("init", res.mtype), [res, i1, i2])
+               var it = v.compile_callsite(init_callsite.as(not null), [res, i1, i2])
                return res
        end
 end
@@ -2417,7 +2417,7 @@ redef class AOrangeExpr
                var i2 = v.expr(self.n_expr2, null)
                var mtype = self.mtype.as(MClassType)
                var res = v.init_instance(mtype)
-               var it = v.send(v.get_property("without_last", res.mtype), [res, i1, i2])
+               var it = v.compile_callsite(init_callsite.as(not null), [res, i1, i2])
                return res
        end
 end
index 02276be..a73bab5 100644 (file)
@@ -109,7 +109,7 @@ redef class ToolContext
                                message_sorter.sort(messages)
 
                                for m in messages do
-                                       if "Warning".search_in(m.text, 0) == null then had_error = true
+                                       if m.text.search("Warning") == null then had_error = true
                                        stderr.write("{m.to_color_string}\n")
                                end
                        end
@@ -480,7 +480,7 @@ class Debugger
                else if command == "nit" then
                        printn "$~> "
                        command = gets
-                       var nit_buf = new Buffer
+                       var nit_buf = new FlatBuffer
                        while not command == ":q" do
                                nit_buf.append(command)
                                nit_buf.append("\n")
@@ -818,10 +818,10 @@ class Debugger
 
        # Gets all the identifiers of an instruction (uses the rules of Nit as of Mar 05 2013)
        #
-       fun get_identifiers_in_current_instruction(instruction: AbstractString): Array[String]
+       fun get_identifiers_in_current_instruction(instruction: Text): Array[String]
        do
                var result_array = new Array[String]
-               var instruction_buffer = new Buffer
+               var instruction_buffer = new FlatBuffer
 
                var trigger_char_escape = false
                var trigger_string_escape = false
@@ -866,9 +866,9 @@ class Debugger
 
        # Takes a function call or declaration and strips all but the arguments
        #
-       fun get_function_arguments(function: AbstractString): String
+       fun get_function_arguments(function: Text): String
        do
-               var buf = new Buffer
+               var buf = new FlatBuffer
                var trigger_copy = false
 
                for i in function.chars do
@@ -904,7 +904,7 @@ class Debugger
        fun get_real_variable_name(name: String): String
        do
                var explode_string = name.split_with(".")
-               var final_string = new Buffer
+               var final_string = new FlatBuffer
                for i in explode_string do
                        var alias_resolved = get_variable_name_by_alias(i)
                        if alias_resolved != null then
@@ -1152,7 +1152,7 @@ class Debugger
        # Returns an array containing their content
        fun remove_braces(braces: String): nullable Array[String]
        do
-               var buffer = new Buffer
+               var buffer = new FlatBuffer
 
                var result_array = new Array[String]
 
index bcb66ba..a85f889 100644 (file)
@@ -902,8 +902,8 @@ private class CustomizedRuntimeFunction
                var frame = new Frame(v, mmethoddef, recv, arguments)
                v.frame = frame
 
-               var sig = new Buffer
-               var comment = new Buffer
+               var sig = new FlatBuffer
+               var comment = new FlatBuffer
                var ret = mmethoddef.msignature.return_mtype
                if ret != null then
                        ret = v.resolve_for(ret, selfvar)
index 753acea..2737580 100644 (file)
@@ -193,7 +193,7 @@ class Location
                        lmid = ""
                        lend = ""
                end
-               var indent = new Buffer
+               var indent = new FlatBuffer
                for j in [line_start..line_start+l.column_start-1[ do
                        if string.chars[j] == '\t' then
                                indent.add '\t'
index 7a85a5d..455ed83 100644 (file)
@@ -67,7 +67,7 @@ end
 # Create a dot file representing the class hierarchy of a model.
 fun generate_class_hierarchy(toolcontext: ToolContext, mmodule: MModule)
 do
-       var buf = new Buffer
+       var buf = new FlatBuffer
        buf.append("digraph \{\n")
        buf.append("node [shape=box];\n")
        buf.append("rankdir=BT;\n")
@@ -88,7 +88,7 @@ end
 # For a simple user of the model, the classdef hierarchy is not really usefull, it is more an internal thing.
 fun generate_classdef_hierarchy(toolcontext: ToolContext, model: Model)
 do
-       var buf = new Buffer
+       var buf = new FlatBuffer
        buf.append("digraph \{\n")
        buf.append("node [shape=box];\n")
        buf.append("rankdir=BT;\n")
index 6cffa50..ae7fccf 100644 (file)
@@ -39,7 +39,7 @@ end
 # The generated file contains the description of each entity of the model
 fun generate_model_hyperdoc(toolcontext: ToolContext, model: Model)
 do
-       var buf = new Buffer
+       var buf = new FlatBuffer
        buf.append("<html>\n<body>\n")
        buf.append("<h1>Model</h1>\n")
 
index 85d281e..bebfa5c 100644 (file)
@@ -1418,7 +1418,7 @@ class MSignature
 
        redef fun to_s
        do
-               var b = new Buffer
+               var b = new FlatBuffer
                if not mparameters.is_empty then
                        b.append("(")
                        for i in [0..mparameters.length[ do
index 409b66b..39df50b 100644 (file)
@@ -59,8 +59,8 @@ class MVisibility
        end
 end
 
-fun intrude_visibility: MVisibility do return once new MVisibility("intrude", 4)
+fun intrude_visibility: MVisibility do return once new MVisibility("intrude", 5)
 fun public_visibility: MVisibility do return once new MVisibility("public", 4)
 fun protected_visibility: MVisibility do return once new MVisibility("protected", 3)
 fun private_visibility: MVisibility do return once new MVisibility("private", 2)
-fun none_visibility: MVisibility do return once new MVisibility("none", 2)
+fun none_visibility: MVisibility do return once new MVisibility("none", 1)
index b916077..ef75a3f 100644 (file)
@@ -43,10 +43,13 @@ redef class ToolContext
        # Option --only-parse
        var opt_only_parse: OptionBool = new OptionBool("Only proceed to parse step of loaders", "--only-parse")
 
+       # Option --ignore-visibility
+       var opt_ignore_visibility: OptionBool = new OptionBool("Do not check, and produce errors, on visibility issues.", "--ignore-visibility")
+
        redef init
        do
                super
-               option_context.add_option(opt_path, opt_only_parse, opt_only_metamodel)
+               option_context.add_option(opt_path, opt_only_parse, opt_only_metamodel, opt_ignore_visibility)
        end
 
        fun modelbuilder: ModelBuilder do return modelbuilder_real.as(not null)
@@ -65,6 +68,7 @@ redef class ToolContext
                        mainmodule.set_imported_mmodules(mmodules)
                end
                for phase in phases_list do
+                       if phase.disabled then continue
                        phase.process_mainmodule(mainmodule, mmodules)
                end
        end
index afa3fd9..4bd3267 100644 (file)
@@ -249,7 +249,7 @@ private class NaiveInterpreter
        # Return a new native string initialized with `txt`
        fun native_string_instance(txt: String): Instance
        do
-               var val = new Buffer.from(txt)
+               var val = new FlatBuffer.from(txt)
                val.add('\0')
                var ic = self.mainmodule.get_primitive_class("NativeString")
                return new PrimitiveInstance[Buffer](ic.mclass_type, val)
@@ -264,7 +264,7 @@ private class NaiveInterpreter
        # Return a stack stace. One line per function
        fun stack_trace: String
        do
-               var b = new Buffer
+               var b = new FlatBuffer
                b.append(",---- Stack trace -- - -  -\n")
                for f in frames do
                        b.append("| {f.mpropdef} ({f.current_node.location})\n")
@@ -771,7 +771,7 @@ redef class AInternMethPropdef
                                return null
                        else if pname == "copy_to" then
                                # sig= copy_to(dest: NativeString, length: Int, from: Int, to: Int)
-                               var destval = args[1].val.as(Buffer)
+                               var destval = args[1].val.as(FlatBuffer)
                                var lenval = args[2].to_i
                                var fromval = args[3].to_i
                                var toval = args[4].to_i
@@ -787,7 +787,7 @@ redef class AInternMethPropdef
                                if toval + lenval >= destval.length then
                                        debug("Illegal access on {destval} for element {toval}+{lenval}/{destval.length}")
                                end
-                               recvval.copy(fromval, lenval, destval, toval)
+                               recvval.as(FlatBuffer).copy(fromval, lenval, destval, toval)
                                return null
                        else if pname == "atoi" then
                                return v.int_instance(recvval.to_i)
@@ -874,12 +874,12 @@ redef class AExternMethPropdef
                        var recvval = args.first.val
                        if pname == "io_write" then
                                var a1 = args[1].val.as(Buffer)
-                               recvval.as(OStream).write(a1.substring(0, args[2].to_i))
+                               recvval.as(OStream).write(a1.substring(0, args[2].to_i).to_s)
                                return args[2]
                        else if pname == "io_read" then
                                var str = recvval.as(IStream).read(args[2].to_i)
                                var a1 = args[1].val.as(Buffer)
-                               new Buffer.from(str).copy(0, str.length, a1, 0)
+                               new FlatBuffer.from(str).copy(0, str.length, a1.as(FlatBuffer), 0)
                                return v.int_instance(str.length)
                        else if pname == "io_close" then
                                recvval.as(IOS).close
@@ -1261,19 +1261,19 @@ redef class AForExpr
                if col.mtype isa MNullType then fatal(v, "Receiver is null")
 
                #self.debug("col {col}")
-               var iter = v.send(v.force_get_primitive_method("iterator", col.mtype), [col]).as(not null)
+               var iter = v.callsite(method_iterator, [col]).as(not null)
                #self.debug("iter {iter}")
                loop
-                       var isok = v.send(v.force_get_primitive_method("is_ok", iter.mtype), [iter]).as(not null)
+                       var isok = v.callsite(method_is_ok, [iter]).as(not null)
                        if not isok.is_true then return
                        if self.variables.length == 1 then
-                               var item = v.send(v.force_get_primitive_method("item", iter.mtype), [iter]).as(not null)
+                               var item = v.callsite(method_item, [iter]).as(not null)
                                #self.debug("item {item}")
                                v.frame.map[self.variables.first] = item
                        else if self.variables.length == 2 then
-                               var key = v.send(v.force_get_primitive_method("key", iter.mtype), [iter]).as(not null)
+                               var key = v.callsite(method_key, [iter]).as(not null)
                                v.frame.map[self.variables[0]] = key
-                               var item = v.send(v.force_get_primitive_method("item", iter.mtype), [iter]).as(not null)
+                               var item = v.callsite(method_item, [iter]).as(not null)
                                v.frame.map[self.variables[1]] = item
                        else
                                abort
@@ -1282,7 +1282,7 @@ redef class AForExpr
                        if v.is_break(self.escapemark) then return
                        v.is_continue(self.escapemark) # Clear the break
                        if v.is_escaping then return
-                       v.send(v.force_get_primitive_method("next", iter.mtype), [iter])
+                       v.callsite(method_next, [iter])
                end
        end
 end
@@ -1427,7 +1427,7 @@ redef class ACrangeExpr
                var mtype = v.unanchor_type(self.mtype.as(not null))
                var res = new MutableInstance(mtype)
                v.init_instance(res)
-               v.send(v.force_get_primitive_method("init", mtype), [res, e1, e2])
+               v.callsite(init_callsite, [res, e1, e2])
                return res
        end
 end
@@ -1442,7 +1442,7 @@ redef class AOrangeExpr
                var mtype = v.unanchor_type(self.mtype.as(not null))
                var res = new MutableInstance(mtype)
                v.init_instance(res)
-               v.send(v.force_get_primitive_method("without_last", mtype), [res, e1, e2])
+               v.callsite(init_callsite, [res, e1, e2])
                return res
        end
 end
index cac7dd5..7fc38aa 100644 (file)
@@ -152,7 +152,7 @@ redef class Stdin
        var connection: nullable Socket = null
 
        # Used to store data that has been read from the connection
-       var buf: Buffer = new Buffer
+       var buf: Buffer = new FlatBuffer
        var buf_pos: Int = 0
 
        # Checks if data is available for reading
@@ -165,7 +165,7 @@ redef class Stdin
        # Blocking if the buffer is empty
        redef fun read_all
        do
-               var loc_buf = new Buffer
+               var loc_buf = new FlatBuffer
                if connection.ready_to_read(0) then buf.append(connection.read)
                for i in [buf_pos .. buf.length-1] do loc_buf.add(buf.chars[i])
                buf.clear
@@ -193,7 +193,7 @@ redef class Stdin
        # If the buffer is empty, the read_line call is blocking
        redef fun read_line
        do
-               var line_buf = new Buffer
+               var line_buf = new FlatBuffer
                if connection.ready_to_read(0) then buf.append(connection.read)
                var has_found_eol: Bool = false
                loop
index 3b06cf5..4b01ecd 100644 (file)
@@ -89,7 +89,7 @@ class DebugClient
 
        fun read_command: String
        do
-               var buff = new Buffer
+               var buff = new FlatBuffer
                while debugger_connection.ready_to_read(40) do buff.append(debugger_connection.read)
                return buff.to_s
        end
index 57af655..4715068 100644 (file)
@@ -436,7 +436,7 @@ class NitdocOverview
                        end
                end
                # build graph
-               var op = new Buffer
+               var op = new FlatBuffer
                op.append("digraph dep \{ rankdir=BT; node[shape=none,margin=0,width=0,height=0,fontsize=10]; edge[dir=none,color=gray]; ranksep=0.2; nodesep=0.1;\n")
                for mmodule in poset do
                        op.append("\"{mmodule.name}\"[URL=\"{mmodule.url}\"];\n")
@@ -707,7 +707,7 @@ class NitdocModule
                        end
                end
                # build graph
-               var op = new Buffer
+               var op = new FlatBuffer
                var name = "dep_{mmodule.name}"
                op.append("digraph {name} \{ rankdir=BT; node[shape=none,margin=0,width=0,height=0,fontsize=10]; edge[dir=none,color=gray]; ranksep=0.2; nodesep=0.1;\n")
                for mmodule in poset do
@@ -1091,7 +1091,7 @@ class NitdocClass
                end
                cla.add_all(pe.greaters)
 
-               var op = new Buffer
+               var op = new FlatBuffer
                var name = "dep_{mclass.name}"
                op.append("digraph {name} \{ rankdir=BT; node[shape=none,margin=0,width=0,height=0,fontsize=10]; edge[dir=none,color=gray]; ranksep=0.2; nodesep=0.1;\n")
                for c in cla do
@@ -1132,7 +1132,7 @@ redef class MModule
        #       module_owner_name.html
        private fun url: String do
                if url_cache == null then
-                       var res = new Buffer
+                       var res = new FlatBuffer
                        res.append("module_")
                        var mowner = public_owner
                        if mowner != null then
@@ -1149,7 +1149,7 @@ redef class MModule
        #       MOD_owner_name
        private fun anchor: String do
                if anchor_cache == null then
-                       var res = new Buffer
+                       var res = new FlatBuffer
                        res.append("MOD_")
                        var mowner = public_owner
                        if mowner != null then
@@ -1166,7 +1166,7 @@ redef class MModule
        #       <a href="url" title="short_comment">html_name</a>
        private fun html_link(page: NitdocPage) do
                if html_link_cache == null then
-                       var res = new Buffer
+                       var res = new FlatBuffer
                        if page.ctx.mbuilder.mmodule2nmodule.has_key(self) then
                                res.append("<a href='{url}' title='{page.ctx.mbuilder.mmodule2nmodule[self].short_comment}'>{html_name}</a>")
                        else
@@ -1278,7 +1278,7 @@ redef class MClass
        #       <a href="url" title="short_comment">html_name(signature)</a>
        private fun html_link(page: NitdocPage) do
                if html_link_cache == null then
-                       var res = new Buffer
+                       var res = new FlatBuffer
                        res.append("<a href='{url}'")
                        if page.ctx.mbuilder.mclassdef2nclassdef.has_key(intro) then
                                var nclass = page.ctx.mbuilder.mclassdef2nclassdef[intro]
@@ -1297,7 +1297,7 @@ redef class MClass
        #       <a href="url" title="short_comment">html_name</a>
        private fun html_short_link(page: NitdocPage) do
                if html_short_link_cache == null then
-                       var res = new Buffer
+                       var res = new FlatBuffer
                        res.append("<a href='{url}'")
                        if page.ctx.mbuilder.mclassdef2nclassdef.has_key(intro) then
                                var nclass = page.ctx.mbuilder.mclassdef2nclassdef[intro]
@@ -1316,7 +1316,7 @@ redef class MClass
        #       <a href="url" title="short_comment">html_name</a>
        private fun html_link_anchor(page: NitdocPage) do
                if html_link_anchor_cache == null then
-                       var res = new Buffer
+                       var res = new FlatBuffer
                        res.append("<a href='#{anchor}'")
                        if page.ctx.mbuilder.mclassdef2nclassdef.has_key(intro) then
                                var nclass = page.ctx.mbuilder.mclassdef2nclassdef[intro]
@@ -1578,7 +1578,7 @@ redef class MPropDef
        #       <a href="url" title="short_comment">html_name</a>
        private fun html_link(page: NitdocPage) do
                if html_link_cache == null then
-                       var res = new Buffer
+                       var res = new FlatBuffer
                        if page.ctx.mbuilder.mpropdef2npropdef.has_key(self) then
                                var nprop = page.ctx.mbuilder.mpropdef2npropdef[self]
                                res.append("<a href=\"{url}\" title=\"{nprop.short_comment}\">{mproperty.html_name}</a>")
@@ -1741,7 +1741,7 @@ redef class MSignature
        end
 
        private fun untyped_signature(page: NitdocPage): String do
-               var res = new Buffer
+               var res = new FlatBuffer
                if not mparameters.is_empty then
                        res.append("(")
                        for i in [0..mparameters.length[ do
@@ -1781,7 +1781,7 @@ redef class ADoc
        end
 
        private fun full_comment: String do
-               var res = new Buffer
+               var res = new FlatBuffer
                for t in n_comment do
                        var text = t.text
                        text = text.substring_from(1)
index 4dceda0..b429a19 100644 (file)
@@ -93,7 +93,7 @@ class NitUnitExecutor
                end
                f.close
 
-               var cmd = "../bin/nitg --no-color '{file}' -I . >'{file}.out1' 2>&1 </dev/null -o '{file}.bin'"
+               var cmd = "../bin/nitg --ignore-visibility --no-color '{file}' -I . >'{file}.out1' 2>&1 </dev/null -o '{file}.bin'"
                var res = sys.system(cmd)
                var res2 = 0
                if res == 0 then
index d70c9e3..7f865b1 100644 (file)
@@ -352,7 +352,7 @@ private class PagerMatchesRenderer
 end
 
 private class Pager
-       var content = new Buffer
+       var content = new FlatBuffer
        var indent = 0
        fun add(text: String) do
                add_indent
@@ -458,7 +458,7 @@ redef class MClass
        # return the generic signature of the class
        #       [E, F]
        private fun signature: String do
-               var res = new Buffer
+               var res = new FlatBuffer
                if arity > 0 then
                        res.append("[")
                        for i in [0..intro.parameter_names.length[ do
@@ -474,7 +474,7 @@ redef class MClass
        # class name is displayed with colors depending on visibility
        #       abstract interface Foo[E]
        private fun prototype: String do
-               var res = new Buffer
+               var res = new FlatBuffer
                res.append("{kind} ")
                if visibility.to_s == "public" then res.append("{name}{signature}".bold.green)
                if visibility.to_s == "private" then res.append("{name}{signature}".bold.red)
@@ -568,7 +568,7 @@ redef class MClassDef
        end
 
        fun to_console: String do
-               var res = new Buffer
+               var res = new FlatBuffer
                if not is_intro then res.append("redef ")
                res.append(mclass.prototype)
                return res.to_s
@@ -692,7 +692,7 @@ end
 
 redef class MMethodDef
        redef fun to_console do
-               var res = new Buffer
+               var res = new FlatBuffer
                if not is_intro then res.append("redef ")
                if not mproperty.is_init then res.append("fun ")
                res.append(mproperty.to_console.bold)
@@ -707,7 +707,7 @@ end
 
 redef class MVirtualTypeDef
        redef fun to_console do
-               var res = new Buffer
+               var res = new FlatBuffer
                res.append("type ")
                res.append(mproperty.to_console.bold)
                res.append(": {bound.to_console}")
@@ -717,7 +717,7 @@ end
 
 redef class MAttributeDef
        redef fun to_console do
-               var res = new Buffer
+               var res = new FlatBuffer
                res.append("var ")
                res.append(mproperty.to_console.bold)
                res.append(": {static_mtype.to_console}")
@@ -727,7 +727,7 @@ end
 
 redef class MSignature
        redef fun to_console do
-               var res = new Buffer
+               var res = new FlatBuffer
                if not mparameters.is_empty then
                        res.append("(")
                        for i in [0..mparameters.length[ do
@@ -745,7 +745,7 @@ end
 
 redef class MParameter
        fun to_console: String do
-               var res = new Buffer
+               var res = new FlatBuffer
                res.append("{name}: {mtype.to_console}")
                if is_vararg then res.append("...")
                return res.to_s
@@ -762,7 +762,7 @@ end
 
 redef class MGenericType
        redef fun to_console do
-               var res = new Buffer
+               var res = new FlatBuffer
                res.append("{mclass.name}[")
                for i in [0..arguments.length[ do
                        res.append(arguments[i].to_console)
@@ -837,7 +837,7 @@ redef class String
 
        private fun escape: String
        do
-               var b = new Buffer
+               var b = new FlatBuffer
                for c in self.chars do
                        if c == '\n' then
                                b.append("\\n")
index 3a93084..ace2cb9 100644 (file)
@@ -27,6 +27,43 @@ redef class ToolContext
        # it is often simpler to use the constructor in `Phase`
        var phases = new POSet[Phase]
 
+       # --disable-phase
+       var opt_disable_phase = new OptionArray("DEBUG: Disable a specific phase; use `list` to get the list.", "--disable-phase")
+
+       redef init
+       do
+               super
+
+               option_context.add_option(opt_disable_phase)
+       end
+
+       redef fun process_options(args)
+       do
+               super
+
+               for v in opt_disable_phase.value do
+                       if v == "list" then
+                               for p in phases_list do
+                                       var deps = p.in_hierarchy.direct_greaters
+                                       if deps.is_empty then
+                                               print p
+                                       else
+                                               print "{p} (dep: {deps.join(", ")})"
+                                       end
+                               end
+                               exit 0
+                       end
+
+                       var found = false
+                       for p in phases do
+                               if v != p.to_s then continue
+                               found = true
+                               p.disabled = true
+                       end
+                       if not found then fatal_error(null, "Error: no phase named `{v}`. Use `list` to list all phases.")
+               end
+       end
+
        fun phases_list: Sequence[Phase]
        do
                var phases = self.phases.to_a
@@ -44,13 +81,14 @@ redef class ToolContext
                var phases = phases_list
 
                for phase in phases do
-                       self.info(" registered phases: {phase.class_name}", 2)
+                       self.info(" registered phases: {phase}", 2)
                end
 
                for nmodule in nmodules do
                        self.info("Semantic analysis module {nmodule.location.file.filename}", 2)
                        for phase in phases do
-                               self.info(" phase: {phase.class_name}", 3)
+                               if phase.disabled then continue
+                               self.info(" phase: {phase}", 3)
                                assert phase.toolcontext == self
                                var errcount = self.error_count
                                phase.process_nmodule(nmodule)
@@ -60,7 +98,7 @@ redef class ToolContext
                                end
                                errcount = self.error_count
                                for nclassdef in nmodule.n_classdefs do
-                                       self.info(" phase: {phase.class_name} for {nclassdef.location}", 3)
+                                       self.info(" phase: {phase} for {nclassdef.location}", 3)
                                        assert phase.toolcontext == self
                                        phase.process_nclassdef(nclassdef)
                                        for npropdef in nclassdef.n_propdefs do
@@ -122,6 +160,13 @@ abstract class Phase
                end
        end
 
+       # By default, the name is the lowercased prefix of the classname
+       redef fun to_s do return class_name.strip_extension("Phase").to_lower
+
+       # Is the phase globally disabled?
+       # A disabled phase is not called automatically called by `ToolContext::run_phases` and cie.
+       var disabled = false
+
        # Specific actions to execute on the whole tree of a module
        # @toimplement
        fun process_nmodule(nmodule: AModule) do end
index 978fab4..c68d33a 100644 (file)
@@ -550,8 +550,7 @@ redef class ACrangeExpr
        do
                var mtype = self.mtype.as(MClassType)
                v.add_type(mtype)
-               var prop = v.get_method(mtype, "init")
-               v.add_monomorphic_send(mtype, prop)
+               v.add_callsite(init_callsite)
        end
 end
 
@@ -560,8 +559,7 @@ redef class AOrangeExpr
        do
                var mtype = self.mtype.as(MClassType)
                v.add_type(mtype)
-               var prop = v.get_method(mtype, "without_last")
-               v.add_monomorphic_send(mtype, prop)
+               v.add_callsite(init_callsite)
        end
 end
 
@@ -640,22 +638,17 @@ end
 redef class AForExpr
        redef fun accept_rapid_type_visitor(v)
        do
-               var recvtype = self.n_expr.mtype.as(not null)
-               var colltype = self.coltype.as(not null)
-               var itmeth = v.get_method(colltype, "iterator")
-               v.add_send(recvtype, itmeth)
-               var iteratortype = itmeth.intro.msignature.return_mtype.as(MClassType).mclass.intro.bound_mtype
-               var objtype = v.get_class("Object").mclass_type
-               v.add_send(objtype, v.get_method(iteratortype, "is_ok"))
+               v.add_callsite(self.method_iterator)
+               v.add_callsite(self.method_is_ok)
                if self.variables.length == 1 then
-                       v.add_send(objtype, v.get_method(iteratortype, "item"))
+                       v.add_callsite(self.method_item)
                else if self.variables.length == 2 then
-                       v.add_send(objtype, v.get_method(iteratortype, "key"))
-                       v.add_send(objtype, v.get_method(iteratortype, "item"))
+                       v.add_callsite(self.method_key)
+                       v.add_callsite(self.method_item)
                else
                        abort
                end
-               v.add_send(objtype, v.get_method(iteratortype, "next"))
+               v.add_callsite(self.method_next)
        end
 end
 
index 96978f0..92cd821 100644 (file)
@@ -1133,8 +1133,8 @@ class SeparateCompilerVisitor
                        res = self.new_var(ret)
                end
 
-               var s = new Buffer
-               var ss = new Buffer
+               var s = new FlatBuffer
+               var ss = new FlatBuffer
 
                s.append("val*")
                ss.append("{recv}")
@@ -1767,8 +1767,8 @@ class SeparateRuntimeFunction
 
                var msignature = mmethoddef.msignature.resolve_for(mmethoddef.mclassdef.bound_mtype, mmethoddef.mclassdef.bound_mtype, mmethoddef.mclassdef.mmodule, true)
 
-               var sig = new Buffer
-               var comment = new Buffer
+               var sig = new FlatBuffer
+               var comment = new FlatBuffer
                var ret = msignature.return_mtype
                if ret != null then
                        sig.append("{ret.ctype} ")
@@ -1840,8 +1840,8 @@ class VirtualRuntimeFunction
                var frame = new Frame(v, mmethoddef, recv, arguments)
                v.frame = frame
 
-               var sig = new Buffer
-               var comment = new Buffer
+               var sig = new FlatBuffer
+               var comment = new FlatBuffer
 
                # Because the function is virtual, the signature must match the one of the original class
                var intromclassdef = self.mmethoddef.mproperty.intro.mclassdef
index 4ec6635..bf4b992 100644 (file)
@@ -225,9 +225,7 @@ redef class ACrangeExpr
        redef fun accept_transform_visitor(v)
        do
                var mtype = self.mtype.as(MClassType)
-               var meth = v.get_method(self, "init", mtype.mclass)
-
-               replace_with(v.builder.make_new(mtype, meth, [n_expr, n_expr2]))
+               replace_with(v.builder.make_new(mtype, init_callsite.mproperty, [n_expr, n_expr2]))
        end
 end
 
@@ -236,9 +234,7 @@ redef class AOrangeExpr
        redef fun accept_transform_visitor(v)
        do
                var mtype = self.mtype.as(MClassType)
-               var meth = v.get_method(self, "without_last", mtype.mclass)
-
-               replace_with(v.builder.make_new(mtype, meth, [n_expr, n_expr2]))
+               replace_with(v.builder.make_new(mtype, init_callsite.mproperty, [n_expr, n_expr2]))
        end
 end
 
index f888b6f..fbd3f36 100644 (file)
@@ -242,8 +242,8 @@ private class TypeVisitor
                end
 
                assert mproperty isa MMethod
-               if mproperty.visibility == protected_visibility and not recv_is_self and self.mmodule.visibility_for(mproperty.intro_mclassdef.mmodule) < intrude_visibility then
-                       self.modelbuilder.error(node, "Error: Method '{name}' is protected and can only acceded by self. {mproperty.intro_mclassdef.mmodule.visibility_for(self.mmodule)}")
+               if mproperty.visibility == protected_visibility and not recv_is_self and self.mmodule.visibility_for(mproperty.intro_mclassdef.mmodule) < intrude_visibility and not modelbuilder.toolcontext.opt_ignore_visibility.value then
+                       self.modelbuilder.error(node, "Error: Method '{name}' is protected and can only acceded by self.")
                        return null
                end
 
@@ -816,11 +816,11 @@ end
 redef class AForExpr
        var coltype: nullable MClassType
 
-       var method_iterator: nullable MMethod
-       var method_is_ok: nullable MMethod
-       var method_item: nullable MMethod
-       var method_next: nullable MMethod
-       var method_key: nullable MMethod
+       var method_iterator: nullable CallSite
+       var method_is_ok: nullable CallSite
+       var method_item: nullable CallSite
+       var method_next: nullable CallSite
+       var method_key: nullable CallSite
 
        private fun do_type_iterator(v: TypeVisitor, mtype: MType)
        do
@@ -834,22 +834,12 @@ redef class AForExpr
                if objcla == null then return
 
                # check iterator method
-               var unsafe_type = v.anchor_to(mtype)
-               if v.try_get_mproperty_by_name2(self, unsafe_type, "iterator") == null then
-                       if v.try_get_mproperty_by_name2(self, unsafe_type, "iterate") == null then
-                               v.error(self, "Type Error: 'for' expects a type providing 'iterator' method, got '{mtype}'.")
-                       else
-                               v.modelbuilder.error(self, "NOT YET IMPLEMENTED: Do 'for' on {mtype}")
-                       end
-                       return
-               end
-
                var itdef = v.get_method(self, mtype, "iterator", true)
                if itdef == null then
                        v.error(self, "Type Error: 'for' expects a type providing 'iterator' method, got '{mtype}'.")
                        return
                end
-               self.method_iterator = itdef.mproperty
+               self.method_iterator = itdef
 
                # check that iterator return something
                var ittype = itdef.msignature.return_mtype
@@ -906,21 +896,21 @@ redef class AForExpr
                        v.error(self, "Type Error: 'for' expects a method 'is_ok' in 'Iterator' type {ittype}.")
                        return
                end
-               self.method_is_ok = ikdef.mproperty
+               self.method_is_ok = ikdef
 
                var itemdef = v.get_method(self, ittype, "item", false)
                if itemdef == null then
                        v.error(self, "Type Error: 'for' expects a method 'item' in 'Iterator' type {ittype}.")
                        return
                end
-               self.method_item = itemdef.mproperty
+               self.method_item = itemdef
 
                var nextdef = v.get_method(self, ittype, "next", false)
                if nextdef == null then
                        v.error(self, "Type Error: 'for' expects a method 'next' in 'Iterator' type {ittype}.")
                        return
                end
-               self.method_next = nextdef.mproperty
+               self.method_next = nextdef
 
                if is_map then
                        var keydef = v.get_method(self, ittype, "key", false)
@@ -928,7 +918,7 @@ redef class AForExpr
                                v.error(self, "Type Error: 'for' expects a method 'key' in 'Iterator' type {ittype}.")
                                return
                        end
-                       self.method_key = keydef.mproperty
+                       self.method_key = keydef
                end
        end
 
@@ -1101,6 +1091,8 @@ redef class AArrayExpr
 end
 
 redef class ARangeExpr
+       var init_callsite: nullable CallSite
+
        redef fun accept_typing(v)
        do
                var discrete_class = v.get_mclass(self, "Discrete")
@@ -1111,13 +1103,28 @@ redef class ARangeExpr
                if t1 == null or t2 == null then return
                var mclass = v.get_mclass(self, "Range")
                if mclass == null then return # Forward error
+               var mtype
                if v.is_subtype(t1, t2) then
-                       self.mtype = mclass.get_mtype([t2])
+                       mtype = mclass.get_mtype([t2])
                else if v.is_subtype(t2, t1) then
-                       self.mtype = mclass.get_mtype([t1])
+                       mtype = mclass.get_mtype([t1])
                else
                        v.error(self, "Type Error: Cannot create range: {t1} vs {t2}")
+                       return
+               end
+
+               self.mtype = mtype
+
+               # get the constructor
+               var callsite
+               if self isa ACrangeExpr then
+                       callsite = v.get_method(self, mtype, "init", false)
+               else if self isa AOrangeExpr then
+                       callsite = v.get_method(self, mtype, "without_last", false)
+               else
+                       abort
                end
+               init_callsite = callsite
        end
 end
 
index c7e2930..95d1065 100644 (file)
@@ -1,7 +1,5 @@
 # This file is part of NIT ( http://www.nitlanguage.org ).
 #
-# Copyright 2008 Jean Privat <jean@pryen.org>
-#
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at
@@ -16,7 +14,9 @@
 
 import kernel
 
-class A
+import base_prot0
+
+redef class A
        fun pub do 0.output
        protected fun pro do 1.output
        private fun pri do 2.output
@@ -30,6 +30,7 @@ class O1
                a.pub
                a.pro
                a.pri
+               3.output
        end
        init do end
 end
diff --git a/tests/base_prot0.nit b/tests/base_prot0.nit
new file mode 100644 (file)
index 0000000..9be3552
--- /dev/null
@@ -0,0 +1,18 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import kernel
+
+class A
+end
index 4611f85..b6dbfcb 100644 (file)
@@ -1,7 +1,5 @@
 # This file is part of NIT ( http://www.nitlanguage.org ).
 #
-# Copyright 2008 Jean Privat <jean@pryen.org>
-#
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import base_prot0
 private import base_prot
 
-class A2
+class B
        super A
-       fun o
-       do
+       redef fun pub do 10.output
+       redef fun pro do 11.output
+       #alt1#redef fun pri do 12.output
+       fun o do
                pub
                pro
-               #alt1#pri
+               #alt2#pri
        end
-       init do end
 end
 
 class O2
        fun o
        do
-               var a = new A
+               var a = new B
                a.pub
-               #alt2#a.pro
-               #alt3#a.pri
-
-               var a2 = new A2
-               a2.o
-               a2.pub
-               #alt4#a2.pro
-               #alt5#a2.pri
+               #alt3#a.pro
+               #alt4#a.pri
+               13.output
        end
        init do end
 end
index df87cd0..191cfa2 100644 (file)
@@ -1,7 +1,5 @@
 # This file is part of NIT ( http://www.nitlanguage.org ).
 #
-# Copyright 2008 Jean Privat <jean@pryen.org>
-#
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import base_prot0
 private import base_prot2
-intrude import base_prot
+
+class C
+       super A
+       #alt5#redef fun pub do 20.output
+       #alt6#redef fun pro do 21.output
+       #alt1#redef fun pri do 22.output
+       fun o do
+               #alt7#pub
+               #alt8#pro
+               #alt2#pri
+       end
+end
 
 class O3
        fun o
        do
-               var a = new A
-               a.pub
-               a.pro
-               a.pri
+               var a = new C
+               #alt9#a.pub
+               #alt3#a.pro
+               #alt4#a.pri
+               23.output
        end
        init do end
 end
 
 (new O3).o
-
index 97c6c63..6c7125d 100644 (file)
@@ -27,4 +27,4 @@ assert 'd'.object_id.to_s.is_numeric
 assert 1.0.object_id.to_s.is_numeric
 
 # Check NativeString.object_id
-assert "Test"._items.object_id.to_s.is_numeric
+assert "Test".as(FlatString).items.object_id.to_s.is_numeric
index 6a2d643..3dff2fc 100644 (file)
@@ -22,7 +22,7 @@ end
 var s = "*"
 var i = 0
 while i < n do
-       var s2 = new Buffer.from("Je dis Â«")
+       var s2 = new FlatBuffer.from("Je dis Â«")
        s2.append(s)
        s2.append("» et redis Â«")
        s2.append(s)
@@ -33,16 +33,15 @@ while i < n do
        s = s2.to_s
        i = i + 1
 end
-print("Je dis Â«Je dis".search_all_in(s).length)
+print(s.search_all("Je dis Â«Je dis").length)
 
 i = 0
 var j = 0
 while j >= 0 do
-       j = "Je dis Â«Je dis".search_index_in(s, j)
-       if j >= 0 then
-               i = i + 1
-               j = j + 1
-       end
+       var r = s.search_from("Je dis Â«Je dis", j)
+       if r == null then break
+       i = i + 1
+       j = r.from + 1
 end
 print(i)
 
index 1bcc313..a0f69d6 100644 (file)
@@ -101,7 +101,7 @@ private
        do
                # Les variables sont déclarées par "var", leur portée va de leur
                # déclaration jusqu'au "end" correspondant
-               var s = new Buffer              # Là où on calcule le résultat
+               var s = new FlatBuffer          # Là où on calcule le résultat
                # Les chaînes littérales sont déclarées avec des guillemets
                s.append("*** Entrepôt ")       # On initialise "s"
                # puis on concatène des chaînes Ã  "s"
@@ -218,7 +218,7 @@ private
                # Si une expression est passée comme valeur initiale d'une
                # variable, le type statique de la variable est implicitement
                # celui de l'expression.
-               var s = new Buffer
+               var s = new FlatBuffer
                s.append("* Rayon : ")
                # Ici, le type statique de s est implicitement String
 
@@ -245,7 +245,7 @@ private
 
        redef fun to_s: String
        do
-               var s = new Buffer
+               var s = new FlatBuffer
                s.append(to_s_head)
                # Les boucles en NIT sont des structures puissantes, toutefois
                # la manipulation des itérateurs peut Ãªtre facilité par la
index a78d01f..c00d979 100644 (file)
@@ -18,7 +18,7 @@
 
 fun first_word(s: String): String
 do
-       var result = new Buffer
+       var result = new FlatBuffer
        var i = 0
        while i < s.length and s.chars[i] != ' ' do
                result.add(s.chars[i])
index 006efff..f066eac 100644 (file)
@@ -27,7 +27,7 @@ printn("The value of a is: ", a, ".\n")
 # Second way: Build a string and display it.
 # Pro: Eiffel way (rigourous).
 # Con: Eiffel way (heavy).
-var s = new Buffer.from("The value of a is: ")
+var s = new FlatBuffer.from("The value of a is: ")
 s.append(a.to_s)
 s.append(".\n")
 printn(s)
diff --git a/tests/sav/ballz_android.res b/tests/sav/ballz_android.res
new file mode 100644 (file)
index 0000000..174d681
--- /dev/null
@@ -0,0 +1 @@
+Not executable (platform?)
index 37c350e..d7b62f6 100644 (file)
@@ -1,10 +1,17 @@
 alt/base_attr3_alt2.nit:49,3--10: Error: Method 'a1=' doesn't exists in A.
+alt/base_attr3_alt2.nit:50,3--6: Error: Method 'a2' is protected and can only acceded by self.
 alt/base_attr3_alt2.nit:51,3--10: Error: Method 'a2=' doesn't exists in A.
 alt/base_attr3_alt2.nit:52,3--6: Error: Method 'a3' doesn't exists in A.
 alt/base_attr3_alt2.nit:53,3--10: Error: Method 'a3=' doesn't exists in A.
+alt/base_attr3_alt2.nit:56,3--6: Error: Method 'a5' is protected and can only acceded by self.
 alt/base_attr3_alt2.nit:58,3--6: Error: Method 'a6' doesn't exists in A.
+alt/base_attr3_alt2.nit:61,3--10: Error: Method 'a7=' is protected and can only acceded by self.
+alt/base_attr3_alt2.nit:62,3--6: Error: Method 'a8' is protected and can only acceded by self.
+alt/base_attr3_alt2.nit:63,3--10: Error: Method 'a8=' is protected and can only acceded by self.
 alt/base_attr3_alt2.nit:64,3--6: Error: Method 'a9' doesn't exists in A.
+alt/base_attr3_alt2.nit:65,3--10: Error: Method 'a9=' is protected and can only acceded by self.
 alt/base_attr3_alt2.nit:67,3--11: Error: Method 'a10=' doesn't exists in A.
+alt/base_attr3_alt2.nit:68,3--7: Error: Method 'a11' is protected and can only acceded by self.
 alt/base_attr3_alt2.nit:69,3--11: Error: Method 'a11=' doesn't exists in A.
 alt/base_attr3_alt2.nit:70,3--7: Error: Method 'a12' doesn't exists in A.
 alt/base_attr3_alt2.nit:71,3--11: Error: Method 'a12=' doesn't exists in A.
index bda1613..c762e5c 100644 (file)
@@ -1,10 +1,17 @@
 alt/base_attr3_alt3.nit:80,2--9: Error: Method 'a1=' doesn't exists in A.
+alt/base_attr3_alt3.nit:81,2--5: Error: Method 'a2' is protected and can only acceded by self.
 alt/base_attr3_alt3.nit:82,2--9: Error: Method 'a2=' doesn't exists in A.
 alt/base_attr3_alt3.nit:83,2--5: Error: Method 'a3' doesn't exists in A.
 alt/base_attr3_alt3.nit:84,2--9: Error: Method 'a3=' doesn't exists in A.
+alt/base_attr3_alt3.nit:87,2--5: Error: Method 'a5' is protected and can only acceded by self.
 alt/base_attr3_alt3.nit:89,2--5: Error: Method 'a6' doesn't exists in A.
+alt/base_attr3_alt3.nit:92,2--9: Error: Method 'a7=' is protected and can only acceded by self.
+alt/base_attr3_alt3.nit:93,2--5: Error: Method 'a8' is protected and can only acceded by self.
+alt/base_attr3_alt3.nit:94,2--9: Error: Method 'a8=' is protected and can only acceded by self.
 alt/base_attr3_alt3.nit:95,2--5: Error: Method 'a9' doesn't exists in A.
+alt/base_attr3_alt3.nit:96,2--9: Error: Method 'a9=' is protected and can only acceded by self.
 alt/base_attr3_alt3.nit:98,2--10: Error: Method 'a10=' doesn't exists in A.
+alt/base_attr3_alt3.nit:99,2--6: Error: Method 'a11' is protected and can only acceded by self.
 alt/base_attr3_alt3.nit:100,2--10: Error: Method 'a11=' doesn't exists in A.
 alt/base_attr3_alt3.nit:101,2--6: Error: Method 'a12' doesn't exists in A.
 alt/base_attr3_alt3.nit:102,2--10: Error: Method 'a12=' doesn't exists in A.
index c48963f..4ccdc82 100644 (file)
@@ -1,10 +1,17 @@
 alt/base_attr3_alt4.nit:110,2--9: Error: Method 'a1=' doesn't exists in B.
+alt/base_attr3_alt4.nit:111,2--5: Error: Method 'a2' is protected and can only acceded by self.
 alt/base_attr3_alt4.nit:112,2--9: Error: Method 'a2=' doesn't exists in B.
 alt/base_attr3_alt4.nit:113,2--5: Error: Method 'a3' doesn't exists in B.
 alt/base_attr3_alt4.nit:114,2--9: Error: Method 'a3=' doesn't exists in B.
+alt/base_attr3_alt4.nit:117,2--5: Error: Method 'a5' is protected and can only acceded by self.
 alt/base_attr3_alt4.nit:119,2--5: Error: Method 'a6' doesn't exists in B.
+alt/base_attr3_alt4.nit:122,2--9: Error: Method 'a7=' is protected and can only acceded by self.
+alt/base_attr3_alt4.nit:123,2--5: Error: Method 'a8' is protected and can only acceded by self.
+alt/base_attr3_alt4.nit:124,2--9: Error: Method 'a8=' is protected and can only acceded by self.
 alt/base_attr3_alt4.nit:125,2--5: Error: Method 'a9' doesn't exists in B.
+alt/base_attr3_alt4.nit:126,2--9: Error: Method 'a9=' is protected and can only acceded by self.
 alt/base_attr3_alt4.nit:128,2--10: Error: Method 'a10=' doesn't exists in B.
+alt/base_attr3_alt4.nit:129,2--6: Error: Method 'a11' is protected and can only acceded by self.
 alt/base_attr3_alt4.nit:130,2--10: Error: Method 'a11=' doesn't exists in B.
 alt/base_attr3_alt4.nit:131,2--6: Error: Method 'a12' doesn't exists in B.
 alt/base_attr3_alt4.nit:132,2--10: Error: Method 'a12=' doesn't exists in B.
index 34cdf5b..35e4ebe 100644 (file)
@@ -1,4 +1,4 @@
-String
+FlatString
 Int
 Test
 Test
index e7c9557..7711bba 100644 (file)
@@ -1,5 +1,6 @@
 base_iterator3.nit:35,1--25: Type Error: 'for' expects method 'iterator' to return an 'Iterator' or 'MapIterator' type'.
 base_iterator3.nit:39,1--25: Type Error: 'for' expects method 'iterator' to return an 'Iterator' or 'MapIterator' type'.
+base_iterator3.nit:43,1--25: Error: Method or variable 'iterator' unknown in Test3.
 base_iterator3.nit:43,1--25: Type Error: 'for' expects a type providing 'iterator' method, got 'Test3'.
 base_iterator3.nit:46,1--48: Type Error: 'for' expects only one variable when using 'Iterator'.
 base_iterator3.nit:47,1--47: Type Error: 'for' expects two variables when using 'MapIterator'.
diff --git a/tests/sav/base_prot0.res b/tests/sav/base_prot0.res
new file mode 100644 (file)
index 0000000..e69de29
index 0e4b84c..c18edb9 100644 (file)
@@ -1 +1 @@
-alt/base_prot2_alt1.nit:25,3--5: Error: Method or variable 'pri' unknown in A2.
+alt/base_prot2_alt1.nit:22,12--14: Error: No property B::pri is inherited. Remove the redef keyword to define a new property.
index be87afb..f861feb 100644 (file)
@@ -1 +1 @@
-alt/base_prot2_alt2.nit:35,3--7: Error: Method 'pro' is protected and can only acceded by self. none
+alt/base_prot2_alt2.nit:26,3--5: Error: Method or variable 'pri' unknown in B.
index d6e7a77..f597f61 100644 (file)
@@ -1 +1 @@
-alt/base_prot2_alt3.nit:36,3--7: Error: Method 'pri' doesn't exists in A.
+alt/base_prot2_alt3.nit:35,3--7: Error: Method 'pro' is protected and can only acceded by self.
index 0142026..221e070 100644 (file)
@@ -1 +1 @@
-alt/base_prot2_alt4.nit:41,3--8: Error: Method 'pro' is protected and can only acceded by self. none
+alt/base_prot2_alt4.nit:36,3--7: Error: Method 'pri' doesn't exists in B.
diff --git a/tests/sav/base_prot3_alt1.res b/tests/sav/base_prot3_alt1.res
new file mode 100644 (file)
index 0000000..5ecf371
--- /dev/null
@@ -0,0 +1 @@
+alt/base_prot3_alt1.nit:22,12--14: Error: No property C::pri is inherited. Remove the redef keyword to define a new property.
diff --git a/tests/sav/base_prot3_alt2.res b/tests/sav/base_prot3_alt2.res
new file mode 100644 (file)
index 0000000..956aacd
--- /dev/null
@@ -0,0 +1 @@
+alt/base_prot3_alt2.nit:26,3--5: Error: Method or variable 'pri' unknown in C.
diff --git a/tests/sav/base_prot3_alt3.res b/tests/sav/base_prot3_alt3.res
new file mode 100644 (file)
index 0000000..a384502
--- /dev/null
@@ -0,0 +1 @@
+alt/base_prot3_alt3.nit:35,3--7: Error: Method 'pro' doesn't exists in C.
diff --git a/tests/sav/base_prot3_alt4.res b/tests/sav/base_prot3_alt4.res
new file mode 100644 (file)
index 0000000..d7f2b51
--- /dev/null
@@ -0,0 +1 @@
+alt/base_prot3_alt4.nit:36,3--7: Error: Method 'pri' doesn't exists in C.
diff --git a/tests/sav/base_prot3_alt5.res b/tests/sav/base_prot3_alt5.res
new file mode 100644 (file)
index 0000000..d375312
--- /dev/null
@@ -0,0 +1 @@
+alt/base_prot3_alt5.nit:20,12--14: Error: No property C::pub is inherited. Remove the redef keyword to define a new property.
diff --git a/tests/sav/base_prot3_alt6.res b/tests/sav/base_prot3_alt6.res
new file mode 100644 (file)
index 0000000..da112d3
--- /dev/null
@@ -0,0 +1 @@
+alt/base_prot3_alt6.nit:21,12--14: Error: No property C::pro is inherited. Remove the redef keyword to define a new property.
diff --git a/tests/sav/base_prot3_alt7.res b/tests/sav/base_prot3_alt7.res
new file mode 100644 (file)
index 0000000..06cbec1
--- /dev/null
@@ -0,0 +1 @@
+alt/base_prot3_alt7.nit:24,3--5: Error: Method or variable 'pub' unknown in C.
diff --git a/tests/sav/base_prot3_alt8.res b/tests/sav/base_prot3_alt8.res
new file mode 100644 (file)
index 0000000..168d1c8
--- /dev/null
@@ -0,0 +1 @@
+alt/base_prot3_alt8.nit:25,3--5: Error: Method or variable 'pro' unknown in C.
diff --git a/tests/sav/base_prot3_alt9.res b/tests/sav/base_prot3_alt9.res
new file mode 100644 (file)
index 0000000..a708c8f
--- /dev/null
@@ -0,0 +1 @@
+alt/base_prot3_alt9.nit:34,3--7: Error: Method 'pub' doesn't exists in C.
index 9a470bf..ac5bee9 100644 (file)
@@ -22,6 +22,7 @@ alt/error_expr_not_ok_alt4.nit:66,21: Type error: expected A, got Int
 alt/error_expr_not_ok_alt4.nit:67,1--18: Warning: use 'loop' instead of 'while true do'.
 alt/error_expr_not_ok_alt4.nit:69,24: Type error: expected A, got Int
 alt/error_expr_not_ok_alt4.nit:69,1--25: Type Error: 'for' expects a type providing 'iterator' method, got 'Int'.
+alt/error_expr_not_ok_alt4.nit:69,1--25: Error: Method or variable 'iterator' unknown in Int.
 alt/error_expr_not_ok_alt4.nit:71,8--11: Type error: expected Bool, got Int
 alt/error_expr_not_ok_alt4.nit:72,7--15: Type error: expected A, got Int
 alt/error_expr_not_ok_alt4.nit:73,7--10: Type error: expected Bool, got Int
index 0896d50..7b7b730 100644 (file)
@@ -18,6 +18,7 @@ alt/error_expr_not_ok_alt5.nit:66,21: Type error: expected A, got Int
 alt/error_expr_not_ok_alt5.nit:67,1--18: Warning: use 'loop' instead of 'while true do'.
 alt/error_expr_not_ok_alt5.nit:69,24: Type error: expected A, got Int
 alt/error_expr_not_ok_alt5.nit:69,1--25: Type Error: 'for' expects a type providing 'iterator' method, got 'Int'.
+alt/error_expr_not_ok_alt5.nit:69,1--25: Error: Method or variable 'iterator' unknown in Int.
 alt/error_expr_not_ok_alt5.nit:71,8--11: Type error: expected Bool, got Int
 alt/error_expr_not_ok_alt5.nit:72,7--15: Type error: expected A, got Int
 alt/error_expr_not_ok_alt5.nit:73,7--10: Type error: expected Bool, got Int
index 9e3b463..50c3b32 100644 (file)
@@ -22,6 +22,7 @@ alt/error_expr_not_ok_alt6.nit:66,21: Type error: expected A, got Int
 alt/error_expr_not_ok_alt6.nit:67,1--18: Warning: use 'loop' instead of 'while true do'.
 alt/error_expr_not_ok_alt6.nit:69,24: Type error: expected A, got Int
 alt/error_expr_not_ok_alt6.nit:69,1--25: Type Error: 'for' expects a type providing 'iterator' method, got 'Int'.
+alt/error_expr_not_ok_alt6.nit:69,1--25: Error: Method or variable 'iterator' unknown in Int.
 alt/error_expr_not_ok_alt6.nit:71,8--11: Type error: expected Bool, got Int
 alt/error_expr_not_ok_alt6.nit:72,7--15: Type error: expected A, got Int
 alt/error_expr_not_ok_alt6.nit:73,7--10: Type error: expected Bool, got Int
index b3ba3de..d507465 100644 (file)
@@ -1 +1,2 @@
+error_for_coll.nit:17,1--18,3: Error: Method or variable 'iterator' unknown in Int.
 error_for_coll.nit:17,1--18,3: Type Error: 'for' expects a type providing 'iterator' method, got 'Int'.
index 802c302..849db8b 100644 (file)
@@ -1,2 +1,3 @@
 alt/error_needed_method_alt2.nit:47,10--27: Cannot instantiate interface Collection[Int].
+alt/error_needed_method_alt2.nit:47,1--40: Error: Method or variable 'iterator' unknown in Collection[Int].
 alt/error_needed_method_alt2.nit:47,1--40: Type Error: 'for' expects a type providing 'iterator' method, got 'Collection[Int]'.
index 4a4ed00..0d5f77b 100644 (file)
@@ -1 +1 @@
-alt/error_needed_method_alt6.nit:51,9--15: Fatal Error: Range must have a property named without_last.
+alt/error_needed_method_alt6.nit:51,9--15: Error: Method 'without_last' doesn't exists in Range[Int].
index 59a8aed..2a2c208 100644 (file)
@@ -1 +1,2 @@
+alt/error_needed_types_alt8.nit:21,1--22,3: Error: Method or variable 'iterator' unknown in L.
 alt/error_needed_types_alt8.nit:21,1--22,3: Type Error: 'for' expects a type providing 'iterator' method, got 'L'.
index b0c00ac..4bb419d 100644 (file)
          std: 0.926
        cnbip: number of introduced properties
          avg: 2.0
-         max: C (7)
+         max: C (5)
          min: Bool (0)
-         std: 2.42
+         std: 1.69
        cnbrp: number of redefined properties
          avg: 0.0
          max: Object (0)
          std: 0.866
        cnbip: number of introduced properties
          avg: 2.0
-         max: C (7)
+         max: C (5)
          min: Bool (0)
-         std: 2.291
+         std: 1.62
        cnbrp: number of redefined properties
          avg: 0.0
          max: Object (0)
          std: 0.866
        cnbip: number of introduced properties
          avg: 2.0
-         max: C (7)
+         max: C (5)
          min: Bool (0)
-         std: 2.291
+         std: 1.62
        cnbrp: number of redefined properties
          avg: 0.0
          max: Object (0)
index c8277d4..76c6e5c 100644 (file)
@@ -3,25 +3,25 @@ searches:
 * [1, 2[ = " "
 * [8, 9[ = " "
 splits:
-* [0, 1[ = "A"
-* [2, 8[ = "simple"
-* [9, 16[ = "example"
+* "A"
+* "simple"
+* "example"
 join: A, simple, example
 string: "A simple example" ; pattern: "ple"
 searches:
 * [5, 8[ = "ple"
 * [13, 16[ = "ple"
 splits:
-* [0, 5[ = "A sim"
-* [8, 13[ = " exam"
-* [16, 16[ = ""
+* "A sim"
+* " exam"
+* ""
 join: A sim,  exam, 
 string: "A simple example" ; pattern: "ple"
 searches:
 * [5, 8[ = "ple"
 * [13, 16[ = "ple"
 splits:
-* [0, 5[ = "A sim"
-* [8, 13[ = " exam"
-* [16, 16[ = ""
+* "A sim"
+* " exam"
+* ""
 join: A sim,  exam, 
index b0ecf41..acc2856 100644 (file)
@@ -17,7 +17,7 @@
 fun nsieve(n: Int): Int
 do
        var count = 0
-       var array = new Buffer.with_capacity(n)
+       var array = new FlatBuffer.with_capacity(n)
        for i in [0..n[ do
                array.chars[i] = 'o'
        end
index 2f8e168..040226a 100644 (file)
@@ -16,6 +16,9 @@
 
 module string_ffi_ref_test
 
+intrude import string
+import file
+
 class StringTest
 
        var copied_str: nullable String
@@ -28,16 +31,16 @@ class StringTest
                referenced_str = null
        end
 
-       fun get_c_string import String.items, NativeString.to_s, NativeString.to_s_with_copy, StringTest.ref_test, StringTest.copy_test `{
+       fun get_c_string import FlatString.items, NativeString.to_s, NativeString.to_s_with_copy, StringTest.ref_test, StringTest.copy_test `{
                char* string = "This is a test string";
 
-               String ref_string = NativeString_to_s(string);
+               FlatString ref_string = NativeString_to_s(string);
                StringTest_ref_test(recv, ref_string);
 
-               String copy_string = NativeString_to_s_with_copy(string);
+               FlatString copy_string = NativeString_to_s_with_copy(string);
                StringTest_copy_test(recv, copy_string);
 
-               int same_refs = String_items(copy_string) == String_items(ref_string);
+               int same_refs = FlatString_items(copy_string) == FlatString_items(ref_string);
 
                printf("Do the strings have the same NativeString reference ? ");
 
index 09bd541..387c8b1 100644 (file)
@@ -4,7 +4,7 @@ var trimtest = "   \t nono nono   \n \t"
 
 var subtrim = trimtest.substring(2,15)
 
-var buffertrimtest = new Buffer.from(trimtest)
+var buffertrimtest = new FlatBuffer.from(trimtest)
 
 print "resulttrim = {buffertrimtest.trim}"
 
@@ -14,7 +14,7 @@ print "thirdtrim = {subtrim.trim}"
 
 var emptytrim = "         \t  "
 
-var bufferemptytest = new Buffer.from(emptytrim)
+var bufferemptytest = new FlatBuffer.from(emptytrim)
 
 print "emptytrim = {emptytrim.trim}"
 
@@ -22,7 +22,7 @@ print "bufferemptytrim = {bufferemptytest.trim}"
 
 var onelettertrim = "    \n   d      \n\t  "
 
-var oneletterbuftest = new Buffer.from(onelettertrim)
+var oneletterbuftest = new FlatBuffer.from(onelettertrim)
 
 print "onelettertrim = {onelettertrim.trim}"
 
@@ -30,7 +30,7 @@ print "oneletterbuftest = {oneletterbuftest.trim}"
 
 var twolettertrim = "    \n   hg      \n\t  "
 
-var twoletterbuftest = new Buffer.from(twolettertrim)
+var twoletterbuftest = new FlatBuffer.from(twolettertrim)
 
 print "twolettertrim = {twolettertrim.trim}"
 
@@ -38,7 +38,7 @@ print "twoletterbuftest = {twoletterbuftest.trim}"
 
 var firstlettertrim = "d                "
 
-var firstlettertrimbuf = new Buffer.from(firstlettertrim)
+var firstlettertrimbuf = new FlatBuffer.from(firstlettertrim)
 
 print "firstlettertrimtest = {firstlettertrim.trim}"
 
@@ -46,7 +46,7 @@ print "firstlettertrimbuftest = {firstlettertrimbuf.trim}"
 
 var lastlettertrim = "                     d"
 
-var lastlettertrimbuf = new Buffer.from(lastlettertrim)
+var lastlettertrimbuf = new FlatBuffer.from(lastlettertrim)
 
 print "lastlettertrimtest = {lastlettertrim.trim}"
 
index f008c34..feb1e65 100644 (file)
@@ -28,7 +28,7 @@ print("string:")
 var a2: Object = "Bonjour"
 print(not a2 isa Int)
 print(a2 isa String)
-print(a2 isa AbstractArrayRead[Char])
+print(a2 isa Text)
 print(not a2 isa Iterator[Int])
 print(not a2 isa Discrete)
 print(a2 isa Object)
index aa02268..fcf7ea2 100644 (file)
@@ -52,7 +52,7 @@ print "585,210.52".is_numeric
 #False
 print "21,52,210.52".is_numeric
 
-var buf = new Buffer
+var buf = new FlatBuffer
 
 buf.append("45.3")
 
index 1b59ba8..04655ba 100644 (file)
@@ -16,8 +16,8 @@
 
 
 var s = "Bonjour !\n"
-var r = new Buffer.with_capacity(50)
-var r2 = new Buffer
+var r = new FlatBuffer.with_capacity(50)
+var r2 = new FlatBuffer
 
 var i = 0
 while i < 5000 do
index 26aaf9d..0702869 100644 (file)
@@ -23,11 +23,11 @@ fun search_and_split(s: String, p: Pattern)
            print("* [{m.from}, {m.after}[ = \"{m}\"")
        end
        print("splits:")
-       for m in p.split_in(s) do
-           print("* [{m.from}, {m.after}[ = \"{m}\"")
+       for m in s.split(p) do
+           print("* \"{m}\"")
        end
 
-       print("join: {s.split_with(p).join(", ")}")
+       print("join: {s.split(p).join(", ")}")
     end
     
 search_and_split("A simple example", ' ')