diff --git a/.gitignore b/.gitignore index 8fdf038142..07e4e54e73 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ #auto_saved_files -#__pycache__/ +__pycache__/ *.swp -__*__.* diff --git a/webots/controllers/controller/.gitignore b/attic/webots/controller/.gitignore similarity index 100% rename from webots/controllers/controller/.gitignore rename to attic/webots/controller/.gitignore diff --git a/webots/controllers/controller/Makefile b/attic/webots/controller/Makefile similarity index 79% rename from webots/controllers/controller/Makefile rename to attic/webots/controller/Makefile index fa1dccc6a7..f8f742c652 100644 --- a/webots/controllers/controller/Makefile +++ b/attic/webots/controller/Makefile @@ -12,11 +12,8 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -# Command-line variables; e.g. make run world=maze --------------------------- +# Command-line variable; e.g. make run world=twoexit ------------------------ world = simple -poselogname = poselog.csv -setpointlogname = setpointlog.csv -# ---------------------------------------------------------------------------- EXE = $(shell basename "`pwd`") @@ -42,12 +39,14 @@ USE_C_API = true VERBOSE = 1 -run: - sed 's/#physics/physics/' $(WORLDS_DIR)/$(world).wbt > $(WORLDS_DIR)/tmp.wbt - webots $(WORLDS_DIR)/tmp.wbt & - /usr/local/webots/webots-controller --stdout-redirect $(EXE) $(world) \ - $(poselogname) $(setpointlogname) +# https://stackoverflow.com/a/49524393 +.EXPORT_ALL_VARIABLES: +WEBOTS_WORLD = $(world) +WEBOTS_PATH = $(shell pwd) +run: + webots $(WORLDS_DIR)/$(world).wbt & + /usr/local/webots/webots-controller --stdout-redirect $(EXE) $(world) edit: vim main.cpp diff --git a/webots/controllers/controller/main.cpp b/attic/webots/controller/main.cpp similarity index 93% rename from webots/controllers/controller/main.cpp rename to attic/webots/controller/main.cpp index 653a501004..8674384211 100644 --- a/webots/controllers/controller/main.cpp +++ b/attic/webots/controller/main.cpp @@ -16,10 +16,13 @@ along with this program. If not, see . */ -// C/C++ +// C #include #include +#include #include + +// C++ #include #include using namespace std; @@ -30,7 +33,6 @@ using namespace std; #include #include - #include "platform.h" typedef struct { @@ -234,10 +236,8 @@ static void getSimInfoFromJoystick(hf::siminfo_t & siminfo, hf::mode_e & mode) siminfo.setpoint.thrust = readJoystickAxis(axes.throttle); } -int main(int argc, char ** argv) +int main() { - (void)argc; - hf::mode_e mode = hf::MODE_IDLE; platform_init(); @@ -251,14 +251,9 @@ int main(int argc, char ** argv) platform_get_vehicle_psi() }; - FILE * setpointlogfp = fopen(argv[3], "w"); - while (true) { hf::siminfo_t siminfo = {}; - strcpy(siminfo.path, getcwd(siminfo.path, sizeof(siminfo.path))); - strcpy(siminfo.worldname, argv[1]); - strcpy(siminfo.poselogname, argv[2]); if (!platform_step()) { break; @@ -289,16 +284,8 @@ int main(int argc, char ** argv) memcpy(&siminfo.startingPose, &startingPose, sizeof(hf::pose_t)); siminfo.framerate = platform_get_framerate(); platform_send_siminfo(&siminfo, sizeof(siminfo)); - - // Save mode and setpoint to logfile - const auto sp = siminfo.setpoint; - fprintf(setpointlogfp, "%d,%f,%f,%f,%f\n", - siminfo.mode, sp.thrust, sp.roll, sp.pitch, sp.yaw); - } - fclose(setpointlogfp); - platform_cleanup(); return 0; diff --git a/webots/controllers/controller/platform.h b/attic/webots/controller/platform.h similarity index 100% rename from webots/controllers/controller/platform.h rename to attic/webots/controller/platform.h diff --git a/webots/controllers/controller/platform_webots.cpp b/attic/webots/controller/platform_webots.cpp similarity index 100% rename from webots/controllers/controller/platform_webots.cpp rename to attic/webots/controller/platform_webots.cpp diff --git a/attic/webots/controllers/controller/Makefile b/attic/webots/controllers/controller/Makefile deleted file mode 100644 index 852a1f3ad8..0000000000 --- a/attic/webots/controllers/controller/Makefile +++ /dev/null @@ -1,72 +0,0 @@ -# Copyright (C) 2025 Simon D. Levy - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, in version 3. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# TeNNLab framework stuff ---------------------------------------------------- - -include ../../../snn_path.makefile - -NET = $(EMBDIR)/examples/difference/difference.txt - -VIZ_DIR = $(HOME)/Desktop/framework/viz -VIZ_PORT = 8100 - -# Support different worlds and closed-loop controllers ------------------------ - -world = empty -closedloop = standard - -# ----------------------------------------------------------------------------- - -CFLAGS = -O3 -std=c++11 -Wall -Wextra - -SRCDIR = ../../../src -INCLUDE = -I$(SRCDIR) - -CXX_SOURCES = controller.cpp - -all: controller - -# Use the Webots C API in your C++ controller program -USE_C_API = true - -VERBOSE = 1 - -run: - cp ../../plugins/physics/$(closedloop)/lib$(closedloop).so \ - ../../plugins/physics/__custom__/lib__custom__.so - webots ../../worlds/$(world).wbt & - /usr/local/webots/webots-controller --stdout-redirect controller - -runsnn: - cp ../../plugins/physics/snn/libsnn.so \ - ../../plugins/physics/__custom__/lib__custom__.so - webots ../../worlds/$(world).wbt & - /usr/local/webots/webots-controller --stdout-redirect controller & - sleep 1 - cd $(VIZ_DIR); \ - love . -i '{"source":"request","port":$(VIZ_PORT),"host":"localhost"}' \ - -n $(NET) --set_num_screen_shot 0 --use_name_neuron \ - '{"0":"I1","1":"I2","2":"S","3":"D1","4":"D2","5":"O","6":"S2"}' \ - --set_font_size 16 \ - > /dev/null - -### Do not modify: this includes Webots global Makefile.include -null := -space := $(null) $(null) -WEBOTS_HOME_PATH=$(subst $(space),\ ,$(strip $(subst \,/,$(WEBOTS_HOME)))) -include $(WEBOTS_HOME_PATH)/resources/Makefile.include - -edit: - vim main.cpp - diff --git a/kicad/teensy2-bottom-bmi088/teensy2-bottom-bmi088.kicad_pcb b/kicad/teensy2-bottom-bmi088/teensy2-bottom-bmi088.kicad_pcb index 4388b88f9a..b32592020e 100644 --- a/kicad/teensy2-bottom-bmi088/teensy2-bottom-bmi088.kicad_pcb +++ b/kicad/teensy2-bottom-bmi088/teensy2-bottom-bmi088.kicad_pcb @@ -166,7 +166,7 @@ (sheetfile "teensy2-bottom-small.kicad_sch") (attr exclude_from_pos_files exclude_from_bom) (pad "" np_thru_hole circle - (at 1.11 0.5) + (at 1.11 1.5) (size 2.5 2.5) (drill 2.5) (layers "*.Cu" "*.Mask") @@ -577,7 +577,7 @@ (sheetfile "teensy2-bottom-small.kicad_sch") (attr exclude_from_pos_files exclude_from_bom) (pad "" np_thru_hole circle - (at 0.365 -0.11) + (at 0.365 -1.11) (size 2.5 2.5) (drill 2.5) (layers "*.Cu" "*.Mask") @@ -1706,7 +1706,7 @@ (sheetfile "teensy2-bottom-small.kicad_sch") (attr exclude_from_pos_files exclude_from_bom) (pad "" np_thru_hole circle - (at 0.425 0.33) + (at 0.425 1.33) (size 2.5 2.5) (drill 2.5) (layers "*.Cu" "*.Mask") @@ -1774,7 +1774,7 @@ (sheetfile "teensy2-bottom-small.kicad_sch") (attr exclude_from_pos_files exclude_from_bom) (pad "" np_thru_hole circle - (at 1.23 -0.8) + (at 1.23 -1.8) (size 2.5 2.5) (drill 2.5) (layers "*.Cu" "*.Mask") @@ -2251,7 +2251,7 @@ ) ) (gr_text "CS" - (at 143.91 85.41 270) + (at 148 85.41 270) (layer "F.SilkS") (uuid "bacaeae0-c411-4564-8f7e-80f9a69cbf78") (effects @@ -2407,7 +2407,7 @@ ) ) (gr_text "SO" - (at 147.93 85.45 270) + (at 144 85.25 270) (layer "F.SilkS") (uuid "f52a00b7-0695-4179-b822-d5bf698c6df3") (effects @@ -2455,7 +2455,7 @@ ) ) (gr_text "CS" - (at 143.88 87.05 270) + (at 148 87.05 270) (layer "B.SilkS") (uuid "32cea446-2810-4452-9529-ffe9db9992dc") (effects @@ -2575,7 +2575,7 @@ ) ) (gr_text "SO" - (at 147.91 87.22 270) + (at 144 87 270) (layer "B.SilkS") (uuid "cdee91b0-cf45-46a4-9644-2afe901e933c") (effects @@ -2694,21 +2694,13 @@ (net 2) (uuid "19fab7e3-e88a-47d6-adfd-f1ecef35113a") ) - (segment - (start 131.52 77.52) - (end 131.52 76.25) - (width 0.2) - (layer "F.Cu") - (net 2) - (uuid "1a9c19fd-95e1-4caf-86d3-893111dde0b7") - ) - (segment - (start 139.436903 85.436903) - (end 131.52 77.52) - (width 0.2) - (layer "F.Cu") + (via + (at 139.436903 85.436903) + (size 0.6) + (drill 0.3) + (layers "F.Cu" "B.Cu") (net 2) - (uuid "496027c7-2289-44a2-a04d-b630d32960f6") + (uuid "1bb914f9-a4bb-4c16-bcf3-ab258271c229") ) (via (at 143.963147 85.436903) @@ -2718,6 +2710,14 @@ (net 2) (uuid "afe9a1bd-b214-411e-be33-f711a9b4e978") ) + (segment + (start 131.52 76.25) + (end 131.52 78.484156) + (width 0.2) + (layer "B.Cu") + (net 2) + (uuid "9fc78240-9251-40eb-b805-f0589b179899") + ) (segment (start 143.963147 85.436903) (end 144.289123 85.436903) @@ -2726,6 +2726,14 @@ (net 2) (uuid "aca33f5f-07b3-4b95-9404-5ffc8b4d8186") ) + (segment + (start 131.52 78.484156) + (end 138.472747 85.436903) + (width 0.2) + (layer "B.Cu") + (net 2) + (uuid "b5f25cbd-1aed-4df0-b126-8ae704f0eb0f") + ) (segment (start 144.289123 85.436903) (end 145.42103 86.56881) @@ -2742,6 +2750,14 @@ (net 2) (uuid "c79b5ea6-f389-44de-8b3d-df869982f3b1") ) + (segment + (start 138.472747 85.436903) + (end 139.436903 85.436903) + (width 0.2) + (layer "B.Cu") + (net 2) + (uuid "cf293652-22bc-4dc5-b1a6-f271c6eae5f1") + ) (segment (start 145.42103 86.56881) (end 145.42103 87.30103) @@ -3512,162 +3528,162 @@ (xy 150.23 81.585) (xy 150.702828 81.585) (xy 150.702844 81.584999) (xy 150.762372 81.578598) (xy 150.762379 81.578596) (xy 150.897086 81.528354) (xy 150.897093 81.52835) (xy 151.012187 81.44219) (xy 151.01219 81.442187) (xy 151.09835 81.327093) (xy 151.098354 81.327086) (xy 151.148596 81.192379) (xy 151.148598 81.192372) - (xy 151.154999 81.132844) (xy 151.155 81.132827) (xy 151.155 80.66) (xy 150.295686 80.66) (xy 150.30008 80.655606) - (xy 150.352741 80.564394) (xy 150.38 80.462661) (xy 150.38 80.357339) (xy 150.352741 80.255606) - (xy 150.30008 80.164394) (xy 150.295686 80.16) (xy 151.155 80.16) (xy 151.155 80.158501) (xy 151.174685 80.091462) - (xy 151.185718 80.081902) (xy 154.4995 80.081902) (xy 154.4995 80.318097) (xy 154.536446 80.551368) - (xy 154.609433 80.775996) (xy 154.652865 80.861235) (xy 154.716657 80.986433) (xy 154.855483 81.17751) - (xy 155.02249 81.344517) (xy 155.213567 81.483343) (xy 155.253528 81.503704) (xy 155.424003 81.590566) - (xy 155.424005 81.590566) (xy 155.424008 81.590568) (xy 155.544412 81.629689) (xy 155.648631 81.663553) - (xy 155.881903 81.7005) (xy 155.881908 81.7005) (xy 156.118097 81.7005) (xy 156.351368 81.663553) - (xy 156.39925 81.647995) (xy 156.575992 81.590568) (xy 156.786433 81.483343) (xy 156.97751 81.344517) - (xy 157.144517 81.17751) (xy 157.283343 80.986433) (xy 157.390568 80.775992) (xy 157.463553 80.551368) - (xy 157.477603 80.462661) (xy 157.5005 80.318097) (xy 157.5005 80.081902) (xy 157.463553 79.848631) - (xy 157.390566 79.624003) (xy 157.283342 79.413566) (xy 157.276844 79.404622) (xy 157.144517 79.22249) - (xy 156.97751 79.055483) (xy 156.786433 78.916657) (xy 156.575996 78.809433) (xy 156.351368 78.736446) - (xy 156.118097 78.6995) (xy 156.118092 78.6995) (xy 155.881908 78.6995) (xy 155.881903 78.6995) - (xy 155.648631 78.736446) (xy 155.424003 78.809433) (xy 155.213566 78.916657) (xy 155.10455 78.995862) - (xy 155.02249 79.055483) (xy 155.022488 79.055485) (xy 155.022487 79.055485) (xy 154.855485 79.222487) - (xy 154.855485 79.222488) (xy 154.855483 79.22249) (xy 154.821798 79.268853) (xy 154.716657 79.413566) - (xy 154.609433 79.624003) (xy 154.536446 79.848631) (xy 154.4995 80.081902) (xy 151.185718 80.081902) - (xy 151.227489 80.045707) (xy 151.267195 80.037069) (xy 151.266997 80.035562) (xy 151.275054 80.034501) - (xy 151.275057 80.034501) (xy 151.427785 79.993577) (xy 151.488079 79.958765) (xy 151.488082 79.958765) - (xy 151.564709 79.914524) (xy 151.564708 79.914524) (xy 151.564716 79.91452) (xy 151.67652 79.802716) - (xy 151.67652 79.802714) (xy 151.686724 79.792511) (xy 151.686728 79.792506) (xy 153.895478 77.583755) - (xy 153.956799 77.550272) (xy 154.021473 77.553506) (xy 154.063757 77.567246) (xy 154.273713 77.6005) - (xy 154.273714 77.6005) (xy 154.486286 77.6005) (xy 154.486287 77.6005) (xy 154.696243 77.567246) - (xy 154.898412 77.501557) (xy 155.087816 77.405051) (xy 155.109789 77.389086) (xy 155.259786 77.280109) - (xy 155.259788 77.280106) (xy 155.259792 77.280104) (xy 155.410104 77.129792) (xy 155.410106 77.129788) - (xy 155.410109 77.129786) (xy 155.535048 76.95782) (xy 155.535047 76.95782) (xy 155.535051 76.957816) - (xy 155.539514 76.949054) (xy 155.587488 76.898259) (xy 155.655308 76.881463) (xy 155.721444 76.903999) - (xy 155.760486 76.949056) (xy 155.764951 76.95782) (xy 155.88989 77.129786) (xy 156.040213 77.280109) - (xy 156.212179 77.405048) (xy 156.212181 77.405049) (xy 156.212184 77.405051) (xy 156.401588 77.501557) - (xy 156.603757 77.567246) (xy 156.813713 77.6005) (xy 156.813714 77.6005) (xy 157.026286 77.6005) - (xy 157.026287 77.6005) (xy 157.236243 77.567246) (xy 157.438412 77.501557) (xy 157.627816 77.405051) - (xy 157.649789 77.389086) (xy 157.799786 77.280109) (xy 157.799788 77.280106) (xy 157.799792 77.280104) - (xy 157.950104 77.129792) (xy 157.950106 77.129788) (xy 157.950109 77.129786) (xy 158.075048 76.95782) - (xy 158.075047 76.95782) (xy 158.075051 76.957816) (xy 158.079514 76.949054) (xy 158.127488 76.898259) - (xy 158.195308 76.881463) (xy 158.261444 76.903999) (xy 158.300486 76.949056) (xy 158.304951 76.95782) - (xy 158.42989 77.129786) (xy 158.580213 77.280109) (xy 158.752179 77.405048) (xy 158.752181 77.405049) - (xy 158.752184 77.405051) (xy 158.941588 77.501557) (xy 159.143757 77.567246) (xy 159.353713 77.6005) - (xy 159.353714 77.6005) (xy 159.566286 77.6005) (xy 159.566287 77.6005) (xy 159.776243 77.567246) - (xy 159.978412 77.501557) (xy 160.167816 77.405051) (xy 160.254478 77.342088) (xy 160.339784 77.28011) - (xy 160.339784 77.280109) (xy 160.339792 77.280104) (xy 160.453717 77.166178) (xy 160.515036 77.132696) - (xy 160.584728 77.13768) (xy 160.640662 77.179551) (xy 160.657577 77.210528) (xy 160.706646 77.342088) - (xy 160.706649 77.342093) (xy 160.792809 77.457187) (xy 160.792812 77.45719) (xy 160.907906 77.54335) - (xy 160.907913 77.543354) (xy 161.04262 77.593596) (xy 161.042627 77.593598) (xy 161.102155 77.599999) - (xy 161.102172 77.6) (xy 161.75 77.6) (xy 161.75 76.683012) (xy 161.807007 76.715925) (xy 161.934174 76.75) - (xy 162.065826 76.75) (xy 162.192993 76.715925) (xy 162.25 76.683012) (xy 162.25 77.6) (xy 162.897828 77.6) - (xy 162.897844 77.599999) (xy 162.957372 77.593598) (xy 162.957379 77.593596) (xy 163.092086 77.543354) - (xy 163.092093 77.54335) (xy 163.207187 77.45719) (xy 163.20719 77.457187) (xy 163.29335 77.342093) - (xy 163.293354 77.342086) (xy 163.343596 77.207379) (xy 163.343598 77.207372) (xy 163.349999 77.147844) - (xy 163.35 77.147827) (xy 163.35 76.5) (xy 162.433012 76.5) (xy 162.465925 76.442993) (xy 162.5 76.315826) - (xy 162.5 76.184174) (xy 162.465925 76.057007) (xy 162.433012 76) (xy 163.35 76) (xy 163.35 75.352172) - (xy 163.349999 75.352155) (xy 163.343598 75.292627) (xy 163.343596 75.29262) (xy 163.293354 75.157913) - (xy 163.29335 75.157906) (xy 163.20719 75.042812) (xy 163.207187 75.042809) (xy 163.092093 74.956649) - (xy 163.092086 74.956645) (xy 162.957379 74.906403) (xy 162.957372 74.906401) (xy 162.897844 74.9) - (xy 162.25 74.9) (xy 162.25 75.816988) (xy 162.192993 75.784075) (xy 162.065826 75.75) (xy 161.934174 75.75) - (xy 161.807007 75.784075) (xy 161.75 75.816988) (xy 161.75 74.9) (xy 161.102155 74.9) (xy 161.042627 74.906401) - (xy 161.04262 74.906403) (xy 160.907913 74.956645) (xy 160.907906 74.956649) (xy 160.792812 75.042809) - (xy 160.792809 75.042812) (xy 160.706649 75.157906) (xy 160.706646 75.157912) (xy 160.657577 75.289471) - (xy 160.615705 75.345404) (xy 160.550241 75.369821) (xy 160.481968 75.354969) (xy 160.453714 75.333818) - (xy 160.339786 75.21989) (xy 160.16782 75.094951) (xy 159.978414 74.998444) (xy 159.978413 74.998443) - (xy 159.978412 74.998443) (xy 159.776243 74.932754) (xy 159.776241 74.932753) (xy 159.77624 74.932753) - (xy 159.614957 74.907208) (xy 159.566287 74.8995) (xy 159.353713 74.8995) (xy 159.305042 74.907208) - (xy 159.14376 74.932753) (xy 158.941585 74.998444) (xy 158.752179 75.094951) (xy 158.580213 75.21989) - (xy 158.42989 75.370213) (xy 158.304949 75.542182) (xy 158.300484 75.550946) (xy 158.252509 75.601742) - (xy 158.184688 75.618536) (xy 158.118553 75.595998) (xy 158.079516 75.550946) (xy 158.07505 75.542182) - (xy 157.950109 75.370213) (xy 157.799786 75.21989) (xy 157.62782 75.094951) (xy 157.438414 74.998444) - (xy 157.438413 74.998443) (xy 157.438412 74.998443) (xy 157.236243 74.932754) (xy 157.236241 74.932753) - (xy 157.23624 74.932753) (xy 157.074957 74.907208) (xy 157.026287 74.8995) (xy 156.813713 74.8995) - (xy 156.765042 74.907208) (xy 156.60376 74.932753) (xy 156.401585 74.998444) (xy 156.212179 75.094951) - (xy 156.040213 75.21989) (xy 155.88989 75.370213) (xy 155.764949 75.542182) (xy 155.760484 75.550946) - (xy 155.712509 75.601742) (xy 155.644688 75.618536) (xy 155.578553 75.595998) (xy 155.539516 75.550946) - (xy 155.53505 75.542182) (xy 155.410109 75.370213) (xy 155.259786 75.21989) (xy 155.08782 75.094951) - (xy 154.898414 74.998444) (xy 154.898413 74.998443) (xy 154.898412 74.998443) (xy 154.696243 74.932754) - (xy 154.696241 74.932753) (xy 154.69624 74.932753) (xy 154.534957 74.907208) (xy 154.486287 74.8995) - (xy 154.273713 74.8995) (xy 154.225042 74.907208) (xy 154.06376 74.932753) (xy 153.861585 74.998444) - (xy 153.672179 75.094951) (xy 153.500213 75.21989) (xy 153.34989 75.370213) (xy 153.224949 75.542182) - (xy 153.220484 75.550946) (xy 153.172509 75.601742) (xy 153.104688 75.618536) (xy 153.038553 75.595998) - (xy 152.999516 75.550946) (xy 152.99505 75.542182) (xy 152.870109 75.370213) (xy 152.719786 75.21989) - (xy 152.54782 75.094951) (xy 152.358414 74.998444) (xy 152.358413 74.998443) (xy 152.358412 74.998443) - (xy 152.156243 74.932754) (xy 152.156241 74.932753) (xy 152.15624 74.932753) (xy 151.994957 74.907208) - (xy 151.946287 74.8995) (xy 151.733713 74.8995) (xy 151.685042 74.907208) (xy 151.52376 74.932753) - (xy 151.321585 74.998444) (xy 151.132179 75.094951) (xy 150.960213 75.21989) (xy 150.80989 75.370213) - (xy 150.684949 75.542182) (xy 150.680484 75.550946) (xy 150.632509 75.601742) (xy 150.564688 75.618536) - (xy 150.498553 75.595998) (xy 150.459516 75.550946) (xy 150.45505 75.542182) (xy 150.330109 75.370213) - (xy 150.179786 75.21989) (xy 150.00782 75.094951) (xy 149.818414 74.998444) (xy 149.818413 74.998443) - (xy 149.818412 74.998443) (xy 149.616243 74.932754) (xy 149.616241 74.932753) (xy 149.61624 74.932753) - (xy 149.454957 74.907208) (xy 149.406287 74.8995) (xy 149.193713 74.8995) (xy 149.145042 74.907208) - (xy 148.98376 74.932753) (xy 148.781585 74.998444) (xy 148.592179 75.094951) (xy 148.420213 75.21989) - (xy 148.26989 75.370213) (xy 148.144949 75.542182) (xy 148.140484 75.550946) (xy 148.092509 75.601742) - (xy 148.024688 75.618536) (xy 147.958553 75.595998) (xy 147.919516 75.550946) (xy 147.91505 75.542182) - (xy 147.790109 75.370213) (xy 147.639786 75.21989) (xy 147.46782 75.094951) (xy 147.278414 74.998444) - (xy 147.278413 74.998443) (xy 147.278412 74.998443) (xy 147.076243 74.932754) (xy 147.076241 74.932753) - (xy 147.07624 74.932753) (xy 146.914957 74.907208) (xy 146.866287 74.8995) (xy 146.653713 74.8995) - (xy 146.605042 74.907208) (xy 146.44376 74.932753) (xy 146.241585 74.998444) (xy 146.052179 75.094951) - (xy 145.880213 75.21989) (xy 145.72989 75.370213) (xy 145.604949 75.542182) (xy 145.600484 75.550946) - (xy 145.552509 75.601742) (xy 145.484688 75.618536) (xy 145.418553 75.595998) (xy 145.379516 75.550946) - (xy 145.37505 75.542182) (xy 145.250109 75.370213) (xy 145.099786 75.21989) (xy 144.92782 75.094951) - (xy 144.738414 74.998444) (xy 144.738413 74.998443) (xy 144.738412 74.998443) (xy 144.536243 74.932754) - (xy 144.536241 74.932753) (xy 144.53624 74.932753) (xy 144.374957 74.907208) (xy 144.326287 74.8995) - (xy 144.113713 74.8995) (xy 144.065042 74.907208) (xy 143.90376 74.932753) (xy 143.701585 74.998444) - (xy 143.512179 75.094951) (xy 143.340213 75.21989) (xy 143.18989 75.370213) (xy 143.064949 75.542182) - (xy 143.060484 75.550946) (xy 143.012509 75.601742) (xy 142.944688 75.618536) (xy 142.878553 75.595998) - (xy 142.839516 75.550946) (xy 142.83505 75.542182) (xy 142.710109 75.370213) (xy 142.559786 75.21989) - (xy 142.38782 75.094951) (xy 142.198414 74.998444) (xy 142.198413 74.998443) (xy 142.198412 74.998443) - (xy 141.996243 74.932754) (xy 141.996241 74.932753) (xy 141.99624 74.932753) (xy 141.834957 74.907208) - (xy 141.786287 74.8995) (xy 141.573713 74.8995) (xy 141.525042 74.907208) (xy 141.36376 74.932753) - (xy 141.161585 74.998444) (xy 140.972179 75.094951) (xy 140.800213 75.21989) (xy 140.64989 75.370213) - (xy 140.524949 75.542182) (xy 140.520484 75.550946) (xy 140.472509 75.601742) (xy 140.404688 75.618536) - (xy 140.338553 75.595998) (xy 140.299516 75.550946) (xy 140.29505 75.542182) (xy 140.170109 75.370213) - (xy 140.019786 75.21989) (xy 139.84782 75.094951) (xy 139.658414 74.998444) (xy 139.658413 74.998443) - (xy 139.658412 74.998443) (xy 139.456243 74.932754) (xy 139.456241 74.932753) (xy 139.45624 74.932753) - (xy 139.294957 74.907208) (xy 139.246287 74.8995) (xy 139.033713 74.8995) (xy 138.985042 74.907208) - (xy 138.82376 74.932753) (xy 138.621585 74.998444) (xy 138.432179 75.094951) (xy 138.260213 75.21989) - (xy 138.10989 75.370213) (xy 137.984949 75.542182) (xy 137.980484 75.550946) (xy 137.932509 75.601742) - (xy 137.864688 75.618536) (xy 137.798553 75.595998) (xy 137.759516 75.550946) (xy 137.75505 75.542182) - (xy 137.630109 75.370213) (xy 137.479786 75.21989) (xy 137.30782 75.094951) (xy 137.118414 74.998444) - (xy 137.118413 74.998443) (xy 137.118412 74.998443) (xy 136.916243 74.932754) (xy 136.916241 74.932753) - (xy 136.91624 74.932753) (xy 136.754957 74.907208) (xy 136.706287 74.8995) (xy 136.493713 74.8995) - (xy 136.445042 74.907208) (xy 136.28376 74.932753) (xy 136.081585 74.998444) (xy 135.892179 75.094951) - (xy 135.720213 75.21989) (xy 135.56989 75.370213) (xy 135.444949 75.542182) (xy 135.440484 75.550946) - (xy 135.392509 75.601742) (xy 135.324688 75.618536) (xy 135.258553 75.595998) (xy 135.219516 75.550946) - (xy 135.21505 75.542182) (xy 135.090109 75.370213) (xy 134.939786 75.21989) (xy 134.76782 75.094951) - (xy 134.578414 74.998444) (xy 134.578413 74.998443) (xy 134.578412 74.998443) (xy 134.376243 74.932754) - (xy 134.376241 74.932753) (xy 134.37624 74.932753) (xy 134.214957 74.907208) (xy 134.166287 74.8995) - (xy 133.953713 74.8995) (xy 133.905042 74.907208) (xy 133.74376 74.932753) (xy 133.541585 74.998444) - (xy 133.352179 75.094951) (xy 133.180213 75.21989) (xy 133.02989 75.370213) (xy 132.904949 75.542182) - (xy 132.900484 75.550946) (xy 132.852509 75.601742) (xy 132.784688 75.618536) (xy 132.718553 75.595998) - (xy 132.679516 75.550946) (xy 132.67505 75.542182) (xy 132.550109 75.370213) (xy 132.399786 75.21989) - (xy 132.22782 75.094951) (xy 132.038414 74.998444) (xy 132.038413 74.998443) (xy 132.038412 74.998443) - (xy 131.836243 74.932754) (xy 131.836241 74.932753) (xy 131.83624 74.932753) (xy 131.674957 74.907208) - (xy 131.626287 74.8995) (xy 131.413713 74.8995) (xy 131.365042 74.907208) (xy 131.20376 74.932753) - (xy 131.001585 74.998444) (xy 130.812179 75.094951) (xy 130.640213 75.21989) (xy 130.48989 75.370213) - (xy 130.364949 75.542182) (xy 130.360484 75.550946) (xy 130.312509 75.601742) (xy 130.244688 75.618536) - (xy 130.178553 75.595998) (xy 130.139516 75.550946) (xy 130.13505 75.542182) (xy 130.010109 75.370213) - (xy 129.859786 75.21989) (xy 129.68782 75.094951) (xy 129.498414 74.998444) (xy 129.498413 74.998443) - (xy 129.498412 74.998443) (xy 129.296243 74.932754) (xy 129.296241 74.932753) (xy 129.29624 74.932753) - (xy 129.134957 74.907208) (xy 129.086287 74.8995) (xy 128.873713 74.8995) (xy 128.825042 74.907208) - (xy 128.66376 74.932753) (xy 128.461585 74.998444) (xy 128.272179 75.094951) (xy 128.100213 75.21989) - (xy 127.94989 75.370213) (xy 127.824951 75.542179) (xy 127.728444 75.731585) (xy 127.662753 75.93376) - (xy 127.6295 76.143713) (xy 127.6295 76.356286) (xy 127.662753 76.566239) (xy 127.728444 76.768414) - (xy 127.824951 76.95782) (xy 127.94989 77.129786) (xy 128.100213 77.280109) (xy 128.272179 77.405048) - (xy 128.272181 77.405049) (xy 128.272184 77.405051) (xy 128.461588 77.501557) (xy 128.663757 77.567246) - (xy 128.873713 77.6005) (xy 128.873714 77.6005) (xy 129.086286 77.6005) (xy 129.086287 77.6005) - (xy 129.296243 77.567246) (xy 129.338523 77.553507) (xy 129.408362 77.551511) (xy 129.464522 77.583757) - (xy 138.414035 86.53327) (xy 138.414045 86.533281) (xy 138.418375 86.537611) (xy 138.418376 86.537612) - (xy 138.53018 86.649416) (xy 138.581741 86.679184) (xy 138.616991 86.699535) (xy 138.616993 86.699537) - (xy 138.667109 86.728472) (xy 138.667111 86.728473) (xy 138.819838 86.769396) (xy 138.819839 86.769396) - (xy 142.284774 86.769396) (xy 142.302917 86.774723) (xy 142.321827 86.775061) (xy 142.350044 86.788561) - (xy 142.351813 86.789081) (xy 142.353665 86.790294) (xy 142.454093 86.857398) (xy 142.498898 86.91101) - (xy 142.507605 86.980335) (xy 142.477451 87.043363) (xy 142.418008 87.080082) (xy 142.385202 87.0845) - (xy 142.287486 87.0845) (xy 142.247028 87.090908) (xy 142.104734 87.113445) (xy 141.928767 87.170619) - (xy 141.928764 87.17062) (xy 141.763903 87.254622) (xy 141.684188 87.312539) (xy 141.614213 87.363379) - (xy 141.614211 87.363381) (xy 141.61421 87.363381) (xy 141.483378 87.494213) (xy 141.429163 87.568833) - (xy 141.409745 87.583805) (xy 140.78 88.213551) (xy 140.78 88.207339) (xy 140.752741 88.105606) - (xy 140.70008 88.014394) (xy 140.625606 87.93992) (xy 140.534394 87.887259) (xy 140.432661 87.86) - (xy 140.426447 87.86) (xy 141.016431 87.270016) (xy 141.01643 87.270015) (xy 140.995834 87.25505) + (xy 151.154999 81.132844) (xy 151.155 81.132827) (xy 151.155 81.081902) (xy 154.4995 81.081902) + (xy 154.4995 81.318097) (xy 154.536446 81.551368) (xy 154.609433 81.775996) (xy 154.716657 81.986433) + (xy 154.855483 82.17751) (xy 155.02249 82.344517) (xy 155.213567 82.483343) (xy 155.312991 82.534002) + (xy 155.424003 82.590566) (xy 155.424005 82.590566) (xy 155.424008 82.590568) (xy 155.544412 82.629689) + (xy 155.648631 82.663553) (xy 155.881903 82.7005) (xy 155.881908 82.7005) (xy 156.118097 82.7005) + (xy 156.351368 82.663553) (xy 156.575992 82.590568) (xy 156.786433 82.483343) (xy 156.97751 82.344517) + (xy 157.144517 82.17751) (xy 157.283343 81.986433) (xy 157.390568 81.775992) (xy 157.463553 81.551368) + (xy 157.471787 81.499379) (xy 157.5005 81.318097) (xy 157.5005 81.081902) (xy 157.463553 80.848631) + (xy 157.410471 80.685264) (xy 157.390568 80.624008) (xy 157.390566 80.624005) (xy 157.390566 80.624003) + (xy 157.328664 80.502514) (xy 157.283343 80.413567) (xy 157.144517 80.22249) (xy 156.97751 80.055483) + (xy 156.786433 79.916657) (xy 156.771472 79.909034) (xy 156.575996 79.809433) (xy 156.351368 79.736446) + (xy 156.118097 79.6995) (xy 156.118092 79.6995) (xy 155.881908 79.6995) (xy 155.881903 79.6995) + (xy 155.648631 79.736446) (xy 155.424003 79.809433) (xy 155.213566 79.916657) (xy 155.185121 79.937324) + (xy 155.02249 80.055483) (xy 155.022488 80.055485) (xy 155.022487 80.055485) (xy 154.855485 80.222487) + (xy 154.855485 80.222488) (xy 154.855483 80.22249) (xy 154.831423 80.255606) (xy 154.716657 80.413566) + (xy 154.609433 80.624003) (xy 154.536446 80.848631) (xy 154.4995 81.081902) (xy 151.155 81.081902) + (xy 151.155 80.66) (xy 150.295686 80.66) (xy 150.30008 80.655606) (xy 150.352741 80.564394) (xy 150.38 80.462661) + (xy 150.38 80.357339) (xy 150.352741 80.255606) (xy 150.30008 80.164394) (xy 150.295686 80.16) (xy 151.155 80.16) + (xy 151.155 80.158501) (xy 151.174685 80.091462) (xy 151.227489 80.045707) (xy 151.267195 80.037069) + (xy 151.266997 80.035562) (xy 151.275054 80.034501) (xy 151.275057 80.034501) (xy 151.427785 79.993577) + (xy 151.488081 79.958765) (xy 151.488082 79.958765) (xy 151.564709 79.914524) (xy 151.564708 79.914524) + (xy 151.564716 79.91452) (xy 151.67652 79.802716) (xy 151.67652 79.802714) (xy 151.686724 79.792511) + (xy 151.686728 79.792506) (xy 153.895478 77.583755) (xy 153.956799 77.550272) (xy 154.021473 77.553506) + (xy 154.063757 77.567246) (xy 154.273713 77.6005) (xy 154.273714 77.6005) (xy 154.486286 77.6005) + (xy 154.486287 77.6005) (xy 154.696243 77.567246) (xy 154.898412 77.501557) (xy 155.087816 77.405051) + (xy 155.174478 77.342088) (xy 155.259786 77.280109) (xy 155.259788 77.280106) (xy 155.259792 77.280104) + (xy 155.410104 77.129792) (xy 155.410106 77.129788) (xy 155.410109 77.129786) (xy 155.535048 76.95782) + (xy 155.535047 76.95782) (xy 155.535051 76.957816) (xy 155.539514 76.949054) (xy 155.587488 76.898259) + (xy 155.655308 76.881463) (xy 155.721444 76.903999) (xy 155.760486 76.949056) (xy 155.764951 76.95782) + (xy 155.88989 77.129786) (xy 156.040213 77.280109) (xy 156.212179 77.405048) (xy 156.212181 77.405049) + (xy 156.212184 77.405051) (xy 156.401588 77.501557) (xy 156.603757 77.567246) (xy 156.813713 77.6005) + (xy 156.813714 77.6005) (xy 157.026286 77.6005) (xy 157.026287 77.6005) (xy 157.236243 77.567246) + (xy 157.438412 77.501557) (xy 157.627816 77.405051) (xy 157.714478 77.342088) (xy 157.799786 77.280109) + (xy 157.799788 77.280106) (xy 157.799792 77.280104) (xy 157.950104 77.129792) (xy 157.950106 77.129788) + (xy 157.950109 77.129786) (xy 158.075048 76.95782) (xy 158.075047 76.95782) (xy 158.075051 76.957816) + (xy 158.079514 76.949054) (xy 158.127488 76.898259) (xy 158.195308 76.881463) (xy 158.261444 76.903999) + (xy 158.300486 76.949056) (xy 158.304951 76.95782) (xy 158.42989 77.129786) (xy 158.580213 77.280109) + (xy 158.752179 77.405048) (xy 158.752181 77.405049) (xy 158.752184 77.405051) (xy 158.941588 77.501557) + (xy 159.143757 77.567246) (xy 159.353713 77.6005) (xy 159.353714 77.6005) (xy 159.566286 77.6005) + (xy 159.566287 77.6005) (xy 159.776243 77.567246) (xy 159.978412 77.501557) (xy 160.167816 77.405051) + (xy 160.254478 77.342088) (xy 160.339784 77.28011) (xy 160.339784 77.280109) (xy 160.339792 77.280104) + (xy 160.453717 77.166178) (xy 160.515036 77.132696) (xy 160.584728 77.13768) (xy 160.640662 77.179551) + (xy 160.657577 77.210528) (xy 160.706646 77.342088) (xy 160.706649 77.342093) (xy 160.792809 77.457187) + (xy 160.792812 77.45719) (xy 160.907906 77.54335) (xy 160.907913 77.543354) (xy 161.04262 77.593596) + (xy 161.042627 77.593598) (xy 161.102155 77.599999) (xy 161.102172 77.6) (xy 161.75 77.6) (xy 161.75 76.683012) + (xy 161.807007 76.715925) (xy 161.934174 76.75) (xy 162.065826 76.75) (xy 162.192993 76.715925) + (xy 162.25 76.683012) (xy 162.25 77.6) (xy 162.897828 77.6) (xy 162.897844 77.599999) (xy 162.957372 77.593598) + (xy 162.957379 77.593596) (xy 163.092086 77.543354) (xy 163.092093 77.54335) (xy 163.207187 77.45719) + (xy 163.20719 77.457187) (xy 163.29335 77.342093) (xy 163.293354 77.342086) (xy 163.343596 77.207379) + (xy 163.343598 77.207372) (xy 163.349999 77.147844) (xy 163.35 77.147827) (xy 163.35 76.5) (xy 162.433012 76.5) + (xy 162.465925 76.442993) (xy 162.5 76.315826) (xy 162.5 76.184174) (xy 162.465925 76.057007) (xy 162.433012 76) + (xy 163.35 76) (xy 163.35 75.352172) (xy 163.349999 75.352155) (xy 163.343598 75.292627) (xy 163.343596 75.29262) + (xy 163.293354 75.157913) (xy 163.29335 75.157906) (xy 163.20719 75.042812) (xy 163.207187 75.042809) + (xy 163.092093 74.956649) (xy 163.092086 74.956645) (xy 162.957379 74.906403) (xy 162.957372 74.906401) + (xy 162.897844 74.9) (xy 162.25 74.9) (xy 162.25 75.816988) (xy 162.192993 75.784075) (xy 162.065826 75.75) + (xy 161.934174 75.75) (xy 161.807007 75.784075) (xy 161.75 75.816988) (xy 161.75 74.9) (xy 161.102155 74.9) + (xy 161.042627 74.906401) (xy 161.04262 74.906403) (xy 160.907913 74.956645) (xy 160.907906 74.956649) + (xy 160.792812 75.042809) (xy 160.792809 75.042812) (xy 160.706649 75.157906) (xy 160.706646 75.157912) + (xy 160.657577 75.289471) (xy 160.615705 75.345404) (xy 160.550241 75.369821) (xy 160.481968 75.354969) + (xy 160.453714 75.333818) (xy 160.339786 75.21989) (xy 160.16782 75.094951) (xy 159.978414 74.998444) + (xy 159.978413 74.998443) (xy 159.978412 74.998443) (xy 159.776243 74.932754) (xy 159.776241 74.932753) + (xy 159.77624 74.932753) (xy 159.614957 74.907208) (xy 159.566287 74.8995) (xy 159.353713 74.8995) + (xy 159.305042 74.907208) (xy 159.14376 74.932753) (xy 158.941585 74.998444) (xy 158.752179 75.094951) + (xy 158.580213 75.21989) (xy 158.42989 75.370213) (xy 158.304949 75.542182) (xy 158.300484 75.550946) + (xy 158.252509 75.601742) (xy 158.184688 75.618536) (xy 158.118553 75.595998) (xy 158.079516 75.550946) + (xy 158.07505 75.542182) (xy 157.950109 75.370213) (xy 157.799786 75.21989) (xy 157.62782 75.094951) + (xy 157.438414 74.998444) (xy 157.438413 74.998443) (xy 157.438412 74.998443) (xy 157.236243 74.932754) + (xy 157.236241 74.932753) (xy 157.23624 74.932753) (xy 157.074957 74.907208) (xy 157.026287 74.8995) + (xy 156.813713 74.8995) (xy 156.765042 74.907208) (xy 156.60376 74.932753) (xy 156.401585 74.998444) + (xy 156.212179 75.094951) (xy 156.040213 75.21989) (xy 155.88989 75.370213) (xy 155.764949 75.542182) + (xy 155.760484 75.550946) (xy 155.712509 75.601742) (xy 155.644688 75.618536) (xy 155.578553 75.595998) + (xy 155.539516 75.550946) (xy 155.53505 75.542182) (xy 155.410109 75.370213) (xy 155.259786 75.21989) + (xy 155.08782 75.094951) (xy 154.898414 74.998444) (xy 154.898413 74.998443) (xy 154.898412 74.998443) + (xy 154.696243 74.932754) (xy 154.696241 74.932753) (xy 154.69624 74.932753) (xy 154.534957 74.907208) + (xy 154.486287 74.8995) (xy 154.273713 74.8995) (xy 154.225042 74.907208) (xy 154.06376 74.932753) + (xy 153.861585 74.998444) (xy 153.672179 75.094951) (xy 153.500213 75.21989) (xy 153.34989 75.370213) + (xy 153.224949 75.542182) (xy 153.220484 75.550946) (xy 153.172509 75.601742) (xy 153.104688 75.618536) + (xy 153.038553 75.595998) (xy 152.999516 75.550946) (xy 152.99505 75.542182) (xy 152.870109 75.370213) + (xy 152.719786 75.21989) (xy 152.54782 75.094951) (xy 152.358414 74.998444) (xy 152.358413 74.998443) + (xy 152.358412 74.998443) (xy 152.156243 74.932754) (xy 152.156241 74.932753) (xy 152.15624 74.932753) + (xy 151.994957 74.907208) (xy 151.946287 74.8995) (xy 151.733713 74.8995) (xy 151.685042 74.907208) + (xy 151.52376 74.932753) (xy 151.321585 74.998444) (xy 151.132179 75.094951) (xy 150.960213 75.21989) + (xy 150.80989 75.370213) (xy 150.684949 75.542182) (xy 150.680484 75.550946) (xy 150.632509 75.601742) + (xy 150.564688 75.618536) (xy 150.498553 75.595998) (xy 150.459516 75.550946) (xy 150.45505 75.542182) + (xy 150.330109 75.370213) (xy 150.179786 75.21989) (xy 150.00782 75.094951) (xy 149.818414 74.998444) + (xy 149.818413 74.998443) (xy 149.818412 74.998443) (xy 149.616243 74.932754) (xy 149.616241 74.932753) + (xy 149.61624 74.932753) (xy 149.454957 74.907208) (xy 149.406287 74.8995) (xy 149.193713 74.8995) + (xy 149.145042 74.907208) (xy 148.98376 74.932753) (xy 148.781585 74.998444) (xy 148.592179 75.094951) + (xy 148.420213 75.21989) (xy 148.26989 75.370213) (xy 148.144949 75.542182) (xy 148.140484 75.550946) + (xy 148.092509 75.601742) (xy 148.024688 75.618536) (xy 147.958553 75.595998) (xy 147.919516 75.550946) + (xy 147.91505 75.542182) (xy 147.790109 75.370213) (xy 147.639786 75.21989) (xy 147.46782 75.094951) + (xy 147.278414 74.998444) (xy 147.278413 74.998443) (xy 147.278412 74.998443) (xy 147.076243 74.932754) + (xy 147.076241 74.932753) (xy 147.07624 74.932753) (xy 146.914957 74.907208) (xy 146.866287 74.8995) + (xy 146.653713 74.8995) (xy 146.605042 74.907208) (xy 146.44376 74.932753) (xy 146.241585 74.998444) + (xy 146.052179 75.094951) (xy 145.880213 75.21989) (xy 145.72989 75.370213) (xy 145.604949 75.542182) + (xy 145.600484 75.550946) (xy 145.552509 75.601742) (xy 145.484688 75.618536) (xy 145.418553 75.595998) + (xy 145.379516 75.550946) (xy 145.37505 75.542182) (xy 145.250109 75.370213) (xy 145.099786 75.21989) + (xy 144.92782 75.094951) (xy 144.738414 74.998444) (xy 144.738413 74.998443) (xy 144.738412 74.998443) + (xy 144.536243 74.932754) (xy 144.536241 74.932753) (xy 144.53624 74.932753) (xy 144.374957 74.907208) + (xy 144.326287 74.8995) (xy 144.113713 74.8995) (xy 144.065042 74.907208) (xy 143.90376 74.932753) + (xy 143.701585 74.998444) (xy 143.512179 75.094951) (xy 143.340213 75.21989) (xy 143.18989 75.370213) + (xy 143.064949 75.542182) (xy 143.060484 75.550946) (xy 143.012509 75.601742) (xy 142.944688 75.618536) + (xy 142.878553 75.595998) (xy 142.839516 75.550946) (xy 142.83505 75.542182) (xy 142.710109 75.370213) + (xy 142.559786 75.21989) (xy 142.38782 75.094951) (xy 142.198414 74.998444) (xy 142.198413 74.998443) + (xy 142.198412 74.998443) (xy 141.996243 74.932754) (xy 141.996241 74.932753) (xy 141.99624 74.932753) + (xy 141.834957 74.907208) (xy 141.786287 74.8995) (xy 141.573713 74.8995) (xy 141.525042 74.907208) + (xy 141.36376 74.932753) (xy 141.161585 74.998444) (xy 140.972179 75.094951) (xy 140.800213 75.21989) + (xy 140.64989 75.370213) (xy 140.524949 75.542182) (xy 140.520484 75.550946) (xy 140.472509 75.601742) + (xy 140.404688 75.618536) (xy 140.338553 75.595998) (xy 140.299516 75.550946) (xy 140.29505 75.542182) + (xy 140.170109 75.370213) (xy 140.019786 75.21989) (xy 139.84782 75.094951) (xy 139.658414 74.998444) + (xy 139.658413 74.998443) (xy 139.658412 74.998443) (xy 139.456243 74.932754) (xy 139.456241 74.932753) + (xy 139.45624 74.932753) (xy 139.294957 74.907208) (xy 139.246287 74.8995) (xy 139.033713 74.8995) + (xy 138.985042 74.907208) (xy 138.82376 74.932753) (xy 138.621585 74.998444) (xy 138.432179 75.094951) + (xy 138.260213 75.21989) (xy 138.10989 75.370213) (xy 137.984949 75.542182) (xy 137.980484 75.550946) + (xy 137.932509 75.601742) (xy 137.864688 75.618536) (xy 137.798553 75.595998) (xy 137.759516 75.550946) + (xy 137.75505 75.542182) (xy 137.630109 75.370213) (xy 137.479786 75.21989) (xy 137.30782 75.094951) + (xy 137.118414 74.998444) (xy 137.118413 74.998443) (xy 137.118412 74.998443) (xy 136.916243 74.932754) + (xy 136.916241 74.932753) (xy 136.91624 74.932753) (xy 136.754957 74.907208) (xy 136.706287 74.8995) + (xy 136.493713 74.8995) (xy 136.445042 74.907208) (xy 136.28376 74.932753) (xy 136.081585 74.998444) + (xy 135.892179 75.094951) (xy 135.720213 75.21989) (xy 135.56989 75.370213) (xy 135.444949 75.542182) + (xy 135.440484 75.550946) (xy 135.392509 75.601742) (xy 135.324688 75.618536) (xy 135.258553 75.595998) + (xy 135.219516 75.550946) (xy 135.21505 75.542182) (xy 135.090109 75.370213) (xy 134.939786 75.21989) + (xy 134.76782 75.094951) (xy 134.578414 74.998444) (xy 134.578413 74.998443) (xy 134.578412 74.998443) + (xy 134.376243 74.932754) (xy 134.376241 74.932753) (xy 134.37624 74.932753) (xy 134.214957 74.907208) + (xy 134.166287 74.8995) (xy 133.953713 74.8995) (xy 133.905042 74.907208) (xy 133.74376 74.932753) + (xy 133.541585 74.998444) (xy 133.352179 75.094951) (xy 133.180213 75.21989) (xy 133.02989 75.370213) + (xy 132.904949 75.542182) (xy 132.900484 75.550946) (xy 132.852509 75.601742) (xy 132.784688 75.618536) + (xy 132.718553 75.595998) (xy 132.679516 75.550946) (xy 132.67505 75.542182) (xy 132.550109 75.370213) + (xy 132.399786 75.21989) (xy 132.22782 75.094951) (xy 132.038414 74.998444) (xy 132.038413 74.998443) + (xy 132.038412 74.998443) (xy 131.836243 74.932754) (xy 131.836241 74.932753) (xy 131.83624 74.932753) + (xy 131.674957 74.907208) (xy 131.626287 74.8995) (xy 131.413713 74.8995) (xy 131.365042 74.907208) + (xy 131.20376 74.932753) (xy 131.001585 74.998444) (xy 130.812179 75.094951) (xy 130.640213 75.21989) + (xy 130.48989 75.370213) (xy 130.364949 75.542182) (xy 130.360484 75.550946) (xy 130.312509 75.601742) + (xy 130.244688 75.618536) (xy 130.178553 75.595998) (xy 130.139516 75.550946) (xy 130.13505 75.542182) + (xy 130.010109 75.370213) (xy 129.859786 75.21989) (xy 129.68782 75.094951) (xy 129.498414 74.998444) + (xy 129.498413 74.998443) (xy 129.498412 74.998443) (xy 129.296243 74.932754) (xy 129.296241 74.932753) + (xy 129.29624 74.932753) (xy 129.134957 74.907208) (xy 129.086287 74.8995) (xy 128.873713 74.8995) + (xy 128.825042 74.907208) (xy 128.66376 74.932753) (xy 128.461585 74.998444) (xy 128.272179 75.094951) + (xy 128.100213 75.21989) (xy 127.94989 75.370213) (xy 127.824951 75.542179) (xy 127.728444 75.731585) + (xy 127.662753 75.93376) (xy 127.6295 76.143713) (xy 127.6295 76.356286) (xy 127.662753 76.566239) + (xy 127.728444 76.768414) (xy 127.824951 76.95782) (xy 127.94989 77.129786) (xy 128.100213 77.280109) + (xy 128.272179 77.405048) (xy 128.272181 77.405049) (xy 128.272184 77.405051) (xy 128.461588 77.501557) + (xy 128.663757 77.567246) (xy 128.873713 77.6005) (xy 128.873714 77.6005) (xy 129.086286 77.6005) + (xy 129.086287 77.6005) (xy 129.296243 77.567246) (xy 129.338523 77.553507) (xy 129.408362 77.551511) + (xy 129.464522 77.583757) (xy 138.414035 86.53327) (xy 138.414045 86.533281) (xy 138.418375 86.537611) + (xy 138.418376 86.537612) (xy 138.53018 86.649416) (xy 138.581741 86.679184) (xy 138.616991 86.699535) + (xy 138.616993 86.699537) (xy 138.667109 86.728472) (xy 138.667111 86.728473) (xy 138.819838 86.769396) + (xy 138.819839 86.769396) (xy 142.284774 86.769396) (xy 142.302917 86.774723) (xy 142.321827 86.775061) + (xy 142.350044 86.788561) (xy 142.351813 86.789081) (xy 142.353665 86.790294) (xy 142.454093 86.857398) + (xy 142.498898 86.91101) (xy 142.507605 86.980335) (xy 142.477451 87.043363) (xy 142.418008 87.080082) + (xy 142.385202 87.0845) (xy 142.287486 87.0845) (xy 142.247028 87.090908) (xy 142.104734 87.113445) + (xy 141.928767 87.170619) (xy 141.928764 87.17062) (xy 141.763903 87.254622) (xy 141.684188 87.312539) + (xy 141.614213 87.363379) (xy 141.614211 87.363381) (xy 141.61421 87.363381) (xy 141.483378 87.494213) + (xy 141.429163 87.568833) (xy 141.409745 87.583805) (xy 140.78 88.213551) (xy 140.78 88.207339) + (xy 140.752741 88.105606) (xy 140.70008 88.014394) (xy 140.625606 87.93992) (xy 140.534394 87.887259) + (xy 140.432661 87.86) (xy 140.426447 87.86) (xy 141.016431 87.270016) (xy 141.01643 87.270015) (xy 140.995834 87.25505) (xy 140.831043 87.171084) (xy 140.83104 87.171083) (xy 140.655147 87.113933) (xy 140.472473 87.085) (xy 140.287527 87.085) (xy 140.104852 87.113933) (xy 139.928959 87.171083) (xy 139.928956 87.171084) (xy 139.764167 87.255049) (xy 139.743568 87.270015) (xy 140.333554 87.86) (xy 140.327339 87.86) @@ -3766,76 +3782,76 @@ (xy 134.949501 104.682116) (xy 134.949501 104.682123) (xy 134.9495 104.682135) (xy 134.9495 104.74301) (xy 134.929815 104.810049) (xy 134.877011 104.855804) (xy 134.807853 104.865748) (xy 134.744297 104.836723) (xy 134.728704 104.820512) (xy 134.722819 104.813162) (xy 134.7105 104.791825) (xy 134.686593 104.767918) - (xy 134.682319 104.76258) (xy 134.682205 104.762304) (xy 134.681224 104.761192) (xy 131.720328 100.95315) - (xy 131.66493 100.881902) (xy 134.9995 100.881902) (xy 134.9995 101.118097) (xy 135.036446 101.351368) - (xy 135.109433 101.575996) (xy 135.2005 101.754723) (xy 135.216657 101.786433) (xy 135.355483 101.97751) - (xy 135.52249 102.144517) (xy 135.713567 102.283343) (xy 135.772381 102.31331) (xy 135.924003 102.390566) - (xy 135.924005 102.390566) (xy 135.924008 102.390568) (xy 136.044412 102.429689) (xy 136.148631 102.463553) - (xy 136.381903 102.5005) (xy 136.381908 102.5005) (xy 136.618097 102.5005) (xy 136.851368 102.463553) - (xy 137.075992 102.390568) (xy 137.286433 102.283343) (xy 137.47751 102.144517) (xy 137.644517 101.97751) - (xy 137.783343 101.786433) (xy 137.890568 101.575992) (xy 137.963553 101.351368) (xy 137.964971 101.342416) - (xy 138.0005 101.118097) (xy 138.0005 100.881902) (xy 137.963553 100.648631) (xy 137.890566 100.424003) - (xy 137.783342 100.213566) (xy 137.644517 100.02249) (xy 137.47751 99.855483) (xy 137.286433 99.716657) - (xy 137.245617 99.69586) (xy 137.075996 99.609433) (xy 136.851368 99.536446) (xy 136.618097 99.4995) - (xy 136.618092 99.4995) (xy 136.381908 99.4995) (xy 136.381903 99.4995) (xy 136.148631 99.536446) - (xy 135.924003 99.609433) (xy 135.713566 99.716657) (xy 135.60455 99.795862) (xy 135.52249 99.855483) - (xy 135.522488 99.855485) (xy 135.522487 99.855485) (xy 135.355485 100.022487) (xy 135.355485 100.022488) - (xy 135.355483 100.02249) (xy 135.295862 100.10455) (xy 135.216657 100.213566) (xy 135.109433 100.424003) - (xy 135.036446 100.648631) (xy 134.9995 100.881902) (xy 131.66493 100.881902) (xy 126.206609 93.861895) - (xy 126.180998 93.796888) (xy 126.1805 93.785781) (xy 126.1805 72.935097) (xy 126.200185 72.868058) - (xy 126.252989 72.822303) (xy 126.280909 72.813362) (xy 126.640319 72.743713) (xy 144.2195 72.743713) - (xy 144.2195 72.956286) (xy 144.252753 73.166239) (xy 144.318444 73.368414) (xy 144.414951 73.55782) - (xy 144.53989 73.729786) (xy 144.690213 73.880109) (xy 144.862179 74.005048) (xy 144.862181 74.005049) - (xy 144.862184 74.005051) (xy 145.051588 74.101557) (xy 145.253757 74.167246) (xy 145.463713 74.2005) - (xy 145.463714 74.2005) (xy 145.676286 74.2005) (xy 145.676287 74.2005) (xy 145.886243 74.167246) - (xy 146.088412 74.101557) (xy 146.277816 74.005051) (xy 146.364138 73.942335) (xy 146.449786 73.880109) - (xy 146.449788 73.880106) (xy 146.449792 73.880104) (xy 146.600104 73.729792) (xy 146.600106 73.729788) - (xy 146.600109 73.729786) (xy 146.667515 73.637007) (xy 146.725051 73.557816) (xy 146.729793 73.548508) - (xy 146.777763 73.497711) (xy 146.845583 73.480911) (xy 146.911719 73.503445) (xy 146.950763 73.5485) - (xy 146.955373 73.557547) (xy 146.994728 73.611716) (xy 147.627037 72.979408) (xy 147.644075 73.042993) - (xy 147.709901 73.157007) (xy 147.802993 73.250099) (xy 147.917007 73.315925) (xy 147.98059 73.332962) - (xy 147.348282 73.965269) (xy 147.348282 73.96527) (xy 147.402449 74.004624) (xy 147.591782 74.101095) - (xy 147.79387 74.166757) (xy 148.003754 74.2) (xy 148.216246 74.2) (xy 148.426127 74.166757) (xy 148.42613 74.166757) - (xy 148.628217 74.101095) (xy 148.817554 74.004622) (xy 148.871716 73.96527) (xy 148.871717 73.96527) - (xy 148.239408 73.332962) (xy 148.302993 73.315925) (xy 148.417007 73.250099) (xy 148.510099 73.157007) - (xy 148.575925 73.042993) (xy 148.592962 72.979408) (xy 149.263181 73.649628) (xy 149.296666 73.710951) - (xy 149.2995 73.7373) (xy 149.2995 73.747865) (xy 149.299501 73.747876) (xy 149.305908 73.807483) - (xy 149.356202 73.942328) (xy 149.356206 73.942335) (xy 149.442452 74.057544) (xy 149.442455 74.057547) - (xy 149.557664 74.143793) (xy 149.557671 74.143797) (xy 149.692517 74.194091) (xy 149.692516 74.194091) - (xy 149.699444 74.194835) (xy 149.752127 74.2005) (xy 151.547872 74.200499) (xy 151.607483 74.194091) - (xy 151.742331 74.143796) (xy 151.857546 74.057546) (xy 151.943796 73.942331) (xy 151.994091 73.807483) - (xy 152.0005 73.747873) (xy 152.000499 71.952128) (xy 151.994091 71.892517) (xy 151.943796 71.757669) - (xy 151.943795 71.757668) (xy 151.943793 71.757664) (xy 151.857547 71.642455) (xy 151.857544 71.642452) - (xy 151.742335 71.556206) (xy 151.742328 71.556202) (xy 151.607482 71.505908) (xy 151.607483 71.505908) - (xy 151.547883 71.499501) (xy 151.547881 71.4995) (xy 151.547873 71.4995) (xy 151.547864 71.4995) - (xy 149.752129 71.4995) (xy 149.752123 71.499501) (xy 149.692516 71.505908) (xy 149.557671 71.556202) - (xy 149.557664 71.556206) (xy 149.442455 71.642452) (xy 149.442452 71.642455) (xy 149.356206 71.757664) - (xy 149.356202 71.757671) (xy 149.305908 71.892517) (xy 149.301639 71.932232) (xy 149.299501 71.952123) - (xy 149.2995 71.952135) (xy 149.2995 71.96269) (xy 149.279815 72.029729) (xy 149.263181 72.050371) - (xy 148.592962 72.72059) (xy 148.575925 72.657007) (xy 148.510099 72.542993) (xy 148.417007 72.449901) - (xy 148.302993 72.384075) (xy 148.239409 72.367037) (xy 148.871716 71.734728) (xy 148.81755 71.695375) - (xy 148.628217 71.598904) (xy 148.426129 71.533242) (xy 148.216246 71.5) (xy 148.003754 71.5) (xy 147.793872 71.533242) - (xy 147.793869 71.533242) (xy 147.591782 71.598904) (xy 147.402439 71.69538) (xy 147.348282 71.734727) - (xy 147.348282 71.734728) (xy 147.980591 72.367037) (xy 147.917007 72.384075) (xy 147.802993 72.449901) - (xy 147.709901 72.542993) (xy 147.644075 72.657007) (xy 147.627037 72.720591) (xy 146.994728 72.088282) - (xy 146.994727 72.088282) (xy 146.95538 72.14244) (xy 146.955376 72.142446) (xy 146.95076 72.151505) - (xy 146.902781 72.202297) (xy 146.834959 72.219087) (xy 146.768826 72.196543) (xy 146.729794 72.151493) - (xy 146.725051 72.142184) (xy 146.725049 72.142181) (xy 146.725048 72.142179) (xy 146.600109 71.970213) - (xy 146.449786 71.81989) (xy 146.27782 71.694951) (xy 146.088414 71.598444) (xy 146.088413 71.598443) - (xy 146.088412 71.598443) (xy 145.886243 71.532754) (xy 145.886241 71.532753) (xy 145.88624 71.532753) - (xy 145.724957 71.507208) (xy 145.676287 71.4995) (xy 145.463713 71.4995) (xy 145.415042 71.507208) - (xy 145.25376 71.532753) (xy 145.051585 71.598444) (xy 144.862179 71.694951) (xy 144.690213 71.81989) - (xy 144.53989 71.970213) (xy 144.414951 72.142179) (xy 144.318444 72.331585) (xy 144.252753 72.53376) - (xy 144.2195 72.743713) (xy 126.640319 72.743713) (xy 127.29365 72.617106) (xy 127.723757 72.533757) - (xy 139.248047 70.3005) (xy 139.265892 70.3005) (xy 139.312515 70.288006) (xy 139.316797 70.287177) - (xy 139.316798 70.287177) (xy 139.335235 70.283603) (xy 139.359907 70.278823) (xy 139.365246 70.276222) - (xy 139.387445 70.26793) (xy 139.393186 70.266392) (xy 139.434992 70.242254) (xy 139.478387 70.221121) - (xy 139.491858 70.209421) (xy 139.496314 70.206849) (xy 139.502171 70.203468) (xy 139.502173 70.203468) - (xy 139.502179 70.203464) (xy 139.507314 70.2005) (xy 139.541445 70.166368) (xy 139.577895 70.13472) - (xy 139.587881 70.119932) (xy 139.6005 70.107314) (xy 139.622468 70.069263) (xy 139.627057 70.061922) - (xy 139.651651 70.025507) (xy 139.657469 70.008639) (xy 139.666392 69.993186) (xy 139.678885 69.94656) - (xy 139.694627 69.900928) (xy 139.695044 69.895002) (xy 139.698965 69.871618) (xy 139.7005 69.865891) - (xy 139.7005 69.817615) (xy 139.703894 69.76947) (xy 139.7005 69.751955) (xy 139.7005 56.7245) (xy 139.720185 56.657461) + (xy 134.682319 104.76258) (xy 134.682205 104.762304) (xy 134.681224 104.761192) (xy 130.94279 99.95315) + (xy 130.887392 99.881902) (xy 134.9995 99.881902) (xy 134.9995 100.118097) (xy 135.036446 100.351368) + (xy 135.109433 100.575996) (xy 135.203843 100.761284) (xy 135.216657 100.786433) (xy 135.355483 100.97751) + (xy 135.52249 101.144517) (xy 135.713567 101.283343) (xy 135.772381 101.31331) (xy 135.924003 101.390566) + (xy 135.924005 101.390566) (xy 135.924008 101.390568) (xy 136.044412 101.429689) (xy 136.148631 101.463553) + (xy 136.381903 101.5005) (xy 136.381908 101.5005) (xy 136.618097 101.5005) (xy 136.851368 101.463553) + (xy 137.075992 101.390568) (xy 137.286433 101.283343) (xy 137.47751 101.144517) (xy 137.644517 100.97751) + (xy 137.783343 100.786433) (xy 137.890568 100.575992) (xy 137.963553 100.351368) (xy 138.0005 100.118097) + (xy 138.0005 99.881902) (xy 137.963553 99.648631) (xy 137.890566 99.424003) (xy 137.783342 99.213566) + (xy 137.644517 99.02249) (xy 137.47751 98.855483) (xy 137.286433 98.716657) (xy 137.245617 98.69586) + (xy 137.075996 98.609433) (xy 136.851368 98.536446) (xy 136.618097 98.4995) (xy 136.618092 98.4995) + (xy 136.381908 98.4995) (xy 136.381903 98.4995) (xy 136.148631 98.536446) (xy 135.924003 98.609433) + (xy 135.713566 98.716657) (xy 135.60455 98.795862) (xy 135.52249 98.855483) (xy 135.522488 98.855485) + (xy 135.522487 98.855485) (xy 135.355485 99.022487) (xy 135.355485 99.022488) (xy 135.355483 99.02249) + (xy 135.295862 99.10455) (xy 135.216657 99.213566) (xy 135.109433 99.424003) (xy 135.036446 99.648631) + (xy 134.9995 99.881902) (xy 130.887392 99.881902) (xy 126.206609 93.861895) (xy 126.180998 93.796888) + (xy 126.1805 93.785781) (xy 126.1805 72.935097) (xy 126.200185 72.868058) (xy 126.252989 72.822303) + (xy 126.280909 72.813362) (xy 126.640319 72.743713) (xy 144.2195 72.743713) (xy 144.2195 72.956286) + (xy 144.252753 73.166239) (xy 144.318444 73.368414) (xy 144.414951 73.55782) (xy 144.53989 73.729786) + (xy 144.690213 73.880109) (xy 144.862179 74.005048) (xy 144.862181 74.005049) (xy 144.862184 74.005051) + (xy 145.051588 74.101557) (xy 145.253757 74.167246) (xy 145.463713 74.2005) (xy 145.463714 74.2005) + (xy 145.676286 74.2005) (xy 145.676287 74.2005) (xy 145.886243 74.167246) (xy 146.088412 74.101557) + (xy 146.277816 74.005051) (xy 146.364138 73.942335) (xy 146.449786 73.880109) (xy 146.449788 73.880106) + (xy 146.449792 73.880104) (xy 146.600104 73.729792) (xy 146.600106 73.729788) (xy 146.600109 73.729786) + (xy 146.667515 73.637007) (xy 146.725051 73.557816) (xy 146.729793 73.548508) (xy 146.777763 73.497711) + (xy 146.845583 73.480911) (xy 146.911719 73.503445) (xy 146.950763 73.5485) (xy 146.955373 73.557547) + (xy 146.994728 73.611716) (xy 147.627037 72.979408) (xy 147.644075 73.042993) (xy 147.709901 73.157007) + (xy 147.802993 73.250099) (xy 147.917007 73.315925) (xy 147.98059 73.332962) (xy 147.348282 73.965269) + (xy 147.348282 73.96527) (xy 147.402449 74.004624) (xy 147.591782 74.101095) (xy 147.79387 74.166757) + (xy 148.003754 74.2) (xy 148.216246 74.2) (xy 148.426127 74.166757) (xy 148.42613 74.166757) (xy 148.628217 74.101095) + (xy 148.817554 74.004622) (xy 148.871716 73.96527) (xy 148.871717 73.96527) (xy 148.239408 73.332962) + (xy 148.302993 73.315925) (xy 148.417007 73.250099) (xy 148.510099 73.157007) (xy 148.575925 73.042993) + (xy 148.592962 72.979408) (xy 149.263181 73.649628) (xy 149.296666 73.710951) (xy 149.2995 73.7373) + (xy 149.2995 73.747865) (xy 149.299501 73.747876) (xy 149.305908 73.807483) (xy 149.356202 73.942328) + (xy 149.356206 73.942335) (xy 149.442452 74.057544) (xy 149.442455 74.057547) (xy 149.557664 74.143793) + (xy 149.557671 74.143797) (xy 149.692517 74.194091) (xy 149.692516 74.194091) (xy 149.699444 74.194835) + (xy 149.752127 74.2005) (xy 151.547872 74.200499) (xy 151.607483 74.194091) (xy 151.742331 74.143796) + (xy 151.857546 74.057546) (xy 151.943796 73.942331) (xy 151.994091 73.807483) (xy 152.0005 73.747873) + (xy 152.000499 71.952128) (xy 151.994091 71.892517) (xy 151.943796 71.757669) (xy 151.943795 71.757668) + (xy 151.943793 71.757664) (xy 151.857547 71.642455) (xy 151.857544 71.642452) (xy 151.742335 71.556206) + (xy 151.742328 71.556202) (xy 151.607482 71.505908) (xy 151.607483 71.505908) (xy 151.547883 71.499501) + (xy 151.547881 71.4995) (xy 151.547873 71.4995) (xy 151.547864 71.4995) (xy 149.752129 71.4995) + (xy 149.752123 71.499501) (xy 149.692516 71.505908) (xy 149.557671 71.556202) (xy 149.557664 71.556206) + (xy 149.442455 71.642452) (xy 149.442452 71.642455) (xy 149.356206 71.757664) (xy 149.356202 71.757671) + (xy 149.305908 71.892517) (xy 149.301639 71.932232) (xy 149.299501 71.952123) (xy 149.2995 71.952135) + (xy 149.2995 71.96269) (xy 149.279815 72.029729) (xy 149.263181 72.050371) (xy 148.592962 72.72059) + (xy 148.575925 72.657007) (xy 148.510099 72.542993) (xy 148.417007 72.449901) (xy 148.302993 72.384075) + (xy 148.239409 72.367037) (xy 148.871716 71.734728) (xy 148.81755 71.695375) (xy 148.628217 71.598904) + (xy 148.426129 71.533242) (xy 148.216246 71.5) (xy 148.003754 71.5) (xy 147.793872 71.533242) (xy 147.793869 71.533242) + (xy 147.591782 71.598904) (xy 147.402439 71.69538) (xy 147.348282 71.734727) (xy 147.348282 71.734728) + (xy 147.980591 72.367037) (xy 147.917007 72.384075) (xy 147.802993 72.449901) (xy 147.709901 72.542993) + (xy 147.644075 72.657007) (xy 147.627037 72.720591) (xy 146.994728 72.088282) (xy 146.994727 72.088282) + (xy 146.95538 72.14244) (xy 146.955376 72.142446) (xy 146.95076 72.151505) (xy 146.902781 72.202297) + (xy 146.834959 72.219087) (xy 146.768826 72.196543) (xy 146.729794 72.151493) (xy 146.725051 72.142184) + (xy 146.725049 72.142181) (xy 146.725048 72.142179) (xy 146.600109 71.970213) (xy 146.449786 71.81989) + (xy 146.27782 71.694951) (xy 146.088414 71.598444) (xy 146.088413 71.598443) (xy 146.088412 71.598443) + (xy 145.886243 71.532754) (xy 145.886241 71.532753) (xy 145.88624 71.532753) (xy 145.724957 71.507208) + (xy 145.676287 71.4995) (xy 145.463713 71.4995) (xy 145.415042 71.507208) (xy 145.25376 71.532753) + (xy 145.051585 71.598444) (xy 144.862179 71.694951) (xy 144.690213 71.81989) (xy 144.53989 71.970213) + (xy 144.414951 72.142179) (xy 144.318444 72.331585) (xy 144.252753 72.53376) (xy 144.2195 72.743713) + (xy 126.640319 72.743713) (xy 127.29365 72.617106) (xy 127.723757 72.533757) (xy 139.248047 70.3005) + (xy 139.265892 70.3005) (xy 139.312515 70.288006) (xy 139.316797 70.287177) (xy 139.316798 70.287177) + (xy 139.335235 70.283603) (xy 139.359907 70.278823) (xy 139.365246 70.276222) (xy 139.387445 70.26793) + (xy 139.393186 70.266392) (xy 139.434992 70.242254) (xy 139.478387 70.221121) (xy 139.491858 70.209421) + (xy 139.496314 70.206849) (xy 139.502171 70.203468) (xy 139.502173 70.203468) (xy 139.502179 70.203464) + (xy 139.507314 70.2005) (xy 139.541445 70.166368) (xy 139.577895 70.13472) (xy 139.587881 70.119932) + (xy 139.6005 70.107314) (xy 139.622468 70.069263) (xy 139.627057 70.061922) (xy 139.651651 70.025507) + (xy 139.657469 70.008639) (xy 139.666392 69.993186) (xy 139.678885 69.94656) (xy 139.694627 69.900928) + (xy 139.695044 69.895002) (xy 139.698965 69.871618) (xy 139.7005 69.865891) (xy 139.7005 69.817615) + (xy 139.703894 69.76947) (xy 139.7005 69.751955) (xy 139.7005 56.7245) (xy 139.720185 56.657461) (xy 139.772989 56.611706) (xy 139.8245 56.6005) (xy 151.573209 56.6005) ) ) diff --git a/kicad/teensy2-bottom-bmi088/teensy2-bottom-bmi088.kicad_pro b/kicad/teensy2-bottom-bmi088/teensy2-bottom-bmi088.kicad_pro index aee79a9c3c..e795ac570f 100644 --- a/kicad/teensy2-bottom-bmi088/teensy2-bottom-bmi088.kicad_pro +++ b/kicad/teensy2-bottom-bmi088/teensy2-bottom-bmi088.kicad_pro @@ -37,9 +37,9 @@ "other_text_thickness": 0.15, "other_text_upright": false, "pads": { - "drill": 1.0, - "height": 1.7, - "width": 1.7 + "drill": 2.5, + "height": 2.5, + "width": 2.5 }, "silk_line_width": 0.1, "silk_text_italic": false, @@ -451,7 +451,7 @@ "pinned_symbol_libs": [] }, "meta": { - "filename": "teensy2-bottom-small.kicad_pro", + "filename": "teensy2-bottom-bmi088.kicad_pro", "version": 3 }, "net_settings": { diff --git a/kicad/teensy2-bottom-small/teensy2-bottom-small.kicad_pcb b/kicad/teensy2-bottom-small/teensy2-bottom-small.kicad_pcb index fd7a112238..52df15c588 100644 --- a/kicad/teensy2-bottom-small/teensy2-bottom-small.kicad_pcb +++ b/kicad/teensy2-bottom-small/teensy2-bottom-small.kicad_pcb @@ -106,6 +106,65 @@ (net 26 "unconnected-(J2-Pin_6-Pad6)") (net 27 "unconnected-(J2-Pin_12-Pad12)") (net 28 "unconnected-(J2-Pin_13-Pad13)") + (footprint "" + (layer "F.Cu") + (uuid "18dae091-1f41-4866-961f-584d99bd4d14") + (at 137.4 66.7) + (property "Reference" "" + (at 0 0 0) + (layer "F.SilkS") + (uuid "f104b7b3-4822-46b1-8751-812715b8f22f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "" + (at 0 0 0) + (layer "F.Fab") + (uuid "f49b8cfb-78cd-407f-a7f0-f28d3fed923c") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "2fe7213b-65ad-4334-86ce-588a327f8f1c") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "a27862b8-2523-4c8e-99ff-fcd6a918584f") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "" np_thru_hole circle + (at -1.4 0) + (size 2.5 2.5) + (drill 2.5) + (layers "*.Cu" "*.Mask") + (uuid "61fa0ab9-bad8-4ddb-b035-d287296a28b3") + ) + (embedded_fonts no) + ) (footprint "MountingHole:MountingHole_2.5mm" (layer "F.Cu") (uuid "2135fbde-93de-4687-898f-77ded28967a7") @@ -166,7 +225,7 @@ (sheetfile "teensy2-bottom-small.kicad_sch") (attr exclude_from_pos_files exclude_from_bom) (pad "" np_thru_hole circle - (at 1.11 0.5) + (at 1.11 1.5) (size 2.5 2.5) (drill 2.5) (layers "*.Cu" "*.Mask") @@ -174,6 +233,65 @@ ) (embedded_fonts no) ) + (footprint "" + (layer "F.Cu") + (uuid "3135c92c-4476-49aa-8cae-a47810aa9c4f") + (at 154 66.8) + (property "Reference" "" + (at 0 0 0) + (layer "F.SilkS") + (uuid "cea75d6b-ddb2-488e-aaad-a80494073480") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Value" "" + (at 0 0 0) + (layer "F.Fab") + (uuid "dd5b1e46-e676-497c-aabb-5bae4c153e7c") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Datasheet" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "a55da770-5b21-44d0-97d4-54ec63eceb09") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (property "Description" "" + (at 0 0 0) + (layer "F.Fab") + (hide yes) + (uuid "820fbe12-ca38-45cb-8d74-a3bdb7155633") + (effects + (font + (size 1.27 1.27) + (thickness 0.15) + ) + ) + ) + (pad "" np_thru_hole circle + (at 1 0) + (size 2.5 2.5) + (drill 2.5) + (layers "*.Cu" "*.Mask") + (uuid "87d90436-65e3-42b8-aaf8-2fe6b9dab2ab") + ) + (embedded_fonts no) + ) (footprint "Connector_PinHeader_2.00mm:PinHeader_1x06_P2.00mm_Vertical" (layer "F.Cu") (uuid "42ed1cbd-cdd3-413a-b0ad-4ade5b8e5db3") @@ -422,7 +540,7 @@ (sheetfile "teensy2-bottom-small.kicad_sch") (attr exclude_from_pos_files exclude_from_bom) (pad "" np_thru_hole circle - (at 0.365 -0.11) + (at 0.365 -1.11) (size 2.5 2.5) (drill 2.5) (layers "*.Cu" "*.Mask") @@ -433,11 +551,11 @@ (footprint "Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical" (layer "F.Cu") (uuid "851f6f9a-cb4a-40db-8fc8-1a32585d0c2f") - (at 150.65 72.85 -90) + (at 153.6 62.54 180) (descr "Through hole straight pin header, 1x03, 2.54mm pitch, single row") (tags "Through hole pin header THT 1x03 2.54mm single row") (property "Reference" "J4" - (at 0 -2.38 90) + (at 0 -2.38 0) (layer "F.SilkS") (hide yes) (uuid "03c1f2e1-c934-474a-9a04-86a62a38cc42") @@ -449,7 +567,7 @@ ) ) (property "Value" "Conn_01x03_Socket" - (at 0 7.46 90) + (at 0 7.46 0) (layer "F.Fab") (hide yes) (uuid "aa143893-c0fc-4481-aca9-a924b386f2a4") @@ -461,7 +579,7 @@ ) ) (property "Datasheet" "~" - (at 0 0 90) + (at 0 0 0) (layer "F.Fab") (hide yes) (uuid "b6bc1bd3-dd5d-41bd-8197-5281bcd3acc0") @@ -473,7 +591,7 @@ ) ) (property "Description" "Generic connector, single row, 01x03, script generated" - (at 0 0 90) + (at 0 0 0) (layer "F.Fab") (hide yes) (uuid "6c36266f-ad03-4d20-940b-f1706e9373eb") @@ -490,57 +608,57 @@ (sheetfile "teensy2-bottom-small.kicad_sch") (attr through_hole) (fp_line - (start -1.27 6.35) - (end -1.27 -0.635) + (start 1.27 6.35) + (end -1.27 6.35) (stroke (width 0.1) (type solid) ) (layer "F.Fab") - (uuid "0c5278ab-c4ec-4aa9-ad9a-736df65ececf") + (uuid "4f23749d-a007-4449-b51a-638886b3f24c") ) (fp_line - (start 1.27 6.35) - (end -1.27 6.35) + (start 1.27 -1.27) + (end 1.27 6.35) (stroke (width 0.1) (type solid) ) (layer "F.Fab") - (uuid "4f23749d-a007-4449-b51a-638886b3f24c") + (uuid "ef6b8d5c-eb50-4ca4-9caa-c114949e7899") ) (fp_line - (start -1.27 -0.635) - (end -0.635 -1.27) + (start -0.635 -1.27) + (end 1.27 -1.27) (stroke (width 0.1) (type solid) ) (layer "F.Fab") - (uuid "eaad279e-3d41-4bb8-a045-4f79160e715c") + (uuid "5a01d790-264e-42d4-868b-386277d42a21") ) (fp_line - (start -0.635 -1.27) - (end 1.27 -1.27) + (start -1.27 6.35) + (end -1.27 -0.635) (stroke (width 0.1) (type solid) ) (layer "F.Fab") - (uuid "5a01d790-264e-42d4-868b-386277d42a21") + (uuid "0c5278ab-c4ec-4aa9-ad9a-736df65ececf") ) (fp_line - (start 1.27 -1.27) - (end 1.27 6.35) + (start -1.27 -0.635) + (end -0.635 -1.27) (stroke (width 0.1) (type solid) ) (layer "F.Fab") - (uuid "ef6b8d5c-eb50-4ca4-9caa-c114949e7899") + (uuid "eaad279e-3d41-4bb8-a045-4f79160e715c") ) (pad "1" thru_hole rect - (at 0 0 270) + (at 0 0 180) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") @@ -551,7 +669,7 @@ (uuid "10f8fe12-7359-4e31-bbb4-0964cc38b106") ) (pad "2" thru_hole circle - (at 0 2.54 270) + (at 0 2.54 180) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") @@ -562,7 +680,7 @@ (uuid "58d7b506-2272-4e27-93da-81d2789ce958") ) (pad "3" thru_hole circle - (at 0 5.08 270) + (at 0 5.08 180) (size 1.7 1.7) (drill 1) (layers "*.Cu" "*.Mask") @@ -1573,7 +1691,7 @@ (sheetfile "teensy2-bottom-small.kicad_sch") (attr exclude_from_pos_files exclude_from_bom) (pad "" np_thru_hole circle - (at 0.425 0.33) + (at 0.425 1.33) (size 2.5 2.5) (drill 2.5) (layers "*.Cu" "*.Mask") @@ -1641,7 +1759,7 @@ (sheetfile "teensy2-bottom-small.kicad_sch") (attr exclude_from_pos_files exclude_from_bom) (pad "" np_thru_hole circle - (at 1.23 -0.8) + (at 1.23 -1.8) (size 2.5 2.5) (drill 2.5) (layers "*.Cu" "*.Mask") @@ -1672,7 +1790,7 @@ (uuid "11cbb8f1-cda5-44ac-8f0f-457e4f0103a1") ) (gr_line - (start 139.2 69.8) + (start 137 55) (end 125.68 72.42) (stroke (width 0.2) @@ -1722,8 +1840,8 @@ (uuid "565197f1-9f27-43d7-9162-84b73c8c71c1") ) (gr_line - (start 139.2 56.1) - (end 152.2 56.1) + (start 137 55) + (end 155 55) (stroke (width 0.2) (type solid) @@ -1732,17 +1850,7 @@ (uuid "7bc54955-1609-4a3a-91dd-17b2e86a6848") ) (gr_line - (start 152.2 56.1) - (end 152.15 69.75) - (stroke - (width 0.2) - (type solid) - ) - (layer "Edge.Cuts") - (uuid "a6f0969d-6dfa-4092-b4e0-b7fc690f743d") - ) - (gr_line - (start 152.15 69.75) + (start 155 55) (end 165.66 72.42) (stroke (width 0.2) @@ -1761,16 +1869,6 @@ (layer "Edge.Cuts") (uuid "d9ea27f9-1664-432a-924f-bea6b0653ebb") ) - (gr_line - (start 139.2 56.1) - (end 139.2 69.8) - (stroke - (width 0.2) - (type solid) - ) - (layer "Edge.Cuts") - (uuid "e8bde646-0ec6-4e19-b35e-3420c4f6a177") - ) (gr_line (start 134.31 105.099139) (end 134.31 116) @@ -1842,7 +1940,7 @@ ) ) (gr_text "SI" - (at 145.97 85.91 270) + (at 145.97 85.5 270) (layer "F.SilkS") (uuid "3d2bab48-b6a6-4fdb-923b-296e7261f944") (effects @@ -1926,7 +2024,7 @@ ) ) (gr_text "VB" - (at 144.9 71.5 0) + (at 149.75 58 0) (layer "F.SilkS") (uuid "6e66e792-51c2-46d2-bfe7-85d71cca5112") (effects @@ -1986,7 +2084,7 @@ ) ) (gr_text "5V" - (at 149.9 71.4 0) + (at 149.75 63 0) (layer "F.SilkS") (uuid "8bf597a1-7328-4180-ad9e-fb3a61db75d7") (effects @@ -2106,7 +2204,7 @@ ) ) (gr_text "CS" - (at 143.91 85.41 270) + (at 148 85.25 270) (layer "F.SilkS") (uuid "bacaeae0-c411-4564-8f7e-80f9a69cbf78") (effects @@ -2118,7 +2216,7 @@ ) ) (gr_text "GD" - (at 147.25 71.45 0) + (at 149.75 60.5 0) (layer "F.SilkS") (uuid "bb719984-70ce-43fb-8be3-976b9a906fea") (effects @@ -2262,7 +2360,7 @@ ) ) (gr_text "SO" - (at 147.93 85.45 270) + (at 144 85.25 270) (layer "F.SilkS") (uuid "f52a00b7-0695-4179-b822-d5bf698c6df3") (effects @@ -2310,7 +2408,7 @@ ) ) (gr_text "CS" - (at 143.88 87.05 270) + (at 148 87 270) (layer "B.SilkS") (uuid "32cea446-2810-4452-9529-ffe9db9992dc") (effects @@ -2394,7 +2492,7 @@ ) ) (gr_text "SI" - (at 145.97 87.21 270) + (at 145.97 87 270) (layer "B.SilkS") (uuid "8ce5a58e-4a87-4b89-8d5c-de0849b92994") (effects @@ -2430,7 +2528,7 @@ ) ) (gr_text "SO" - (at 147.91 87.22 270) + (at 144 87 270) (layer "B.SilkS") (uuid "cdee91b0-cf45-46a4-9644-2afe901e933c") (effects @@ -2542,28 +2640,28 @@ (uuid "9401d924-0dc0-45f5-8945-d06eb080e0db") ) (segment - (start 143.963147 85.436903) - (end 139.436903 85.436903) + (start 131.52 78.484156) + (end 131.52 76.25) (width 0.2) (layer "F.Cu") (net 2) - (uuid "19fab7e3-e88a-47d6-adfd-f1ecef35113a") + (uuid "b6363b2d-fc9c-4b09-99f4-f081a8ee6526") ) (segment - (start 131.52 77.52) - (end 131.52 76.25) + (start 143.963147 85.436903) + (end 138.472747 85.436903) (width 0.2) (layer "F.Cu") (net 2) - (uuid "1a9c19fd-95e1-4caf-86d3-893111dde0b7") + (uuid "cbfd3843-acb1-4b48-8c49-70c582bfb7ae") ) (segment - (start 139.436903 85.436903) - (end 131.52 77.52) + (start 138.472747 85.436903) + (end 131.52 78.484156) (width 0.2) (layer "F.Cu") (net 2) - (uuid "496027c7-2289-44a2-a04d-b630d32960f6") + (uuid "dc02c14b-acc5-4bfb-818b-bd5b81f34435") ) (via (at 143.963147 85.436903) @@ -2621,14 +2719,6 @@ (net 3) (uuid "10fa8bac-904d-4255-817b-8243c7a574d8") ) - (segment - (start 160 74.25) - (end 149.51 74.25) - (width 0.4) - (layer "F.Cu") - (net 3) - (uuid "12a45a18-7f0d-4765-abb1-1ff99f39540e") - ) (segment (start 153.384423 80.41) (end 156.293423 77.501) @@ -2653,14 +2743,6 @@ (net 3) (uuid "7079ba51-263a-4c78-a3e4-4d27bac913ee") ) - (segment - (start 160 74.25) - (end 162 76.25) - (width 0.4) - (layer "F.Cu") - (net 3) - (uuid "71af8ea8-61ee-4a6e-a760-f240e54c4b7d") - ) (segment (start 149.98 80.41) (end 153.384423 80.41) @@ -2677,14 +2759,6 @@ (net 3) (uuid "a495234b-af5b-48db-891c-85d6e469c356") ) - (segment - (start 149.51 74.25) - (end 148.11 72.85) - (width 0.4) - (layer "F.Cu") - (net 3) - (uuid "cf022f4d-afc0-437c-bf6c-b6757dac71a1") - ) (segment (start 160.749 77.501) (end 162 76.25) @@ -2750,20 +2824,28 @@ (uuid "e4c4d240-ae4b-414b-803b-31028099ad4e") ) (segment - (start 128.98 76.25) - (end 138.898896 86.168896) + (start 128.98 84.98) + (end 128.98 76.25) (width 0.2) (layer "F.Cu") (net 4) - (uuid "b126d743-83c9-418d-8ce9-30eba67e87bb") + (uuid "4d2fa5ce-4dda-47ff-b323-d636a6af084d") ) (segment - (start 138.898896 86.168896) - (end 142.86454 86.168896) + (start 130.168896 86.168896) + (end 128.98 84.98) + (width 0.2) + (layer "F.Cu") + (net 4) + (uuid "80fb2c93-f71f-411e-ab5b-36a186767a82") + ) + (segment + (start 142.86454 86.168896) + (end 130.168896 86.168896) (width 0.2) (layer "F.Cu") (net 4) - (uuid "f174c04b-66b4-477f-a9e3-9752bf17ebcb") + (uuid "e329aa70-5f1c-4268-a92d-46fb65b734c9") ) (via (at 142.86454 86.168896) @@ -2822,28 +2904,36 @@ (uuid "eba1835f-8e80-41ba-b967-67185478b695") ) (segment - (start 156.92 82.42) - (end 144.22 82.42) + (start 144.22 82.42) + (end 138.38 88.26) (width 0.4) (layer "B.Cu") (net 5) - (uuid "1de51082-50ca-4492-aae2-8f501bec7168") + (uuid "20927433-16a6-440b-951c-0b8acc91002a") + ) + (segment + (start 156.92 90.648) + (end 156.92 91.25) + (width 0.4) + (layer "B.Cu") + (net 5) + (uuid "4e5e6130-5b61-4c8d-a23b-24d2a3a09c47") ) (segment (start 144.22 82.42) - (end 138.38 88.26) + (end 148.692 82.42) (width 0.4) (layer "B.Cu") (net 5) - (uuid "20927433-16a6-440b-951c-0b8acc91002a") + (uuid "8638fa41-6c70-45e8-bb6e-5218a46badcf") ) (segment - (start 156.92 82.42) - (end 156.92 91.25) + (start 148.692 82.42) + (end 156.92 90.648) (width 0.4) (layer "B.Cu") (net 5) - (uuid "2c3ec326-5450-4a29-a3b3-3e04bbef2672") + (uuid "a0997d57-0654-46dd-b447-e39a45eb7738") ) (segment (start 130.994 89.236) @@ -2877,22 +2967,6 @@ (net 13) (uuid "08470869-6e84-466b-a036-7a27489cf99d") ) - (segment - (start 158.171 75.731818) - (end 155.289182 72.85) - (width 0.4) - (layer "B.Cu") - (net 13) - (uuid "1a4eff35-68ba-409d-97c9-f71ab3b48080") - ) - (segment - (start 155.289182 72.85) - (end 150.65 72.85) - (width 0.4) - (layer "B.Cu") - (net 13) - (uuid "dba57bdf-8c83-46b5-8930-4d652e811529") - ) (segment (start 162 91.25) (end 158.171 87.421) @@ -2981,22 +3055,6 @@ (net 17) (uuid "726904cb-37f3-46f5-a404-ddb7ad43d03b") ) - (segment - (start 145.5 78.039) - (end 145.609 78.039) - (width 0.4) - (layer "B.Cu") - (net 18) - (uuid "29015d2e-d959-4f63-a012-ea3d33fc76d0") - ) - (segment - (start 145.5 78.039) - (end 145.5 75.27) - (width 0.4) - (layer "B.Cu") - (net 18) - (uuid "59b2614f-04cd-4f0b-b6c5-9d78840aa800") - ) (segment (start 147.98 80.41) (end 148.011 80.379) @@ -3005,30 +3063,6 @@ (net 18) (uuid "753a4cf9-eb61-4dc8-aa1f-cda42d742e3f") ) - (segment - (start 145.57 75.2) - (end 145.57 72.85) - (width 0.4) - (layer "B.Cu") - (net 18) - (uuid "764e3e53-d88f-4c4f-a606-fb5c26421148") - ) - (segment - (start 145.5 75.27) - (end 145.57 75.2) - (width 0.4) - (layer "B.Cu") - (net 18) - (uuid "ad9ebe0e-a4ff-4e5e-ae88-d0a7420bc76a") - ) - (segment - (start 145.609 78.039) - (end 147.98 80.41) - (width 0.4) - (layer "B.Cu") - (net 18) - (uuid "dbc1b062-9ffc-4695-97a4-934f0b54d353") - ) (segment (start 143.758 78.632) (end 141.98 80.41) @@ -3142,64 +3176,54 @@ ) (polygon (pts - (xy 139.2 56.05) (xy 152.15 56.15) (xy 152.35 69.75) (xy 165.73 72.57) (xy 165.65 93.96) (xy 157.08 105.14) - (xy 157.08 116.02) (xy 134.35 116.02) (xy 134.39 105.21) (xy 125.63 94.07) (xy 125.63 72.57) (xy 139.15 69.75) - (xy 139.2 56) + (xy 139.2 54.8) (xy 158 54.75) (xy 163.9 66.8) (xy 165.73 72.57) (xy 165.65 93.96) (xy 157.08 105.14) + (xy 157.08 116.02) (xy 134.35 116.02) (xy 134.39 105.21) (xy 125.63 94.07) (xy 125.63 72.57) (xy 133.75 55.25) + (xy 139.25 54.75) ) ) (filled_polygon (layer "F.Cu") (pts - (xy 151.640248 56.620185) (xy 151.686003 56.672989) (xy 151.697208 56.724954) (xy 151.649722 69.688202) - (xy 151.647372 69.711778) (xy 151.646221 69.7176) (xy 151.649148 69.761432) (xy 151.649147 69.761432) - (xy 151.649437 69.765788) (xy 151.649262 69.814058) (xy 151.653812 69.831295) (xy 151.654605 69.843162) - (xy 151.654607 69.843171) (xy 151.655003 69.849096) (xy 151.655004 69.8491) (xy 151.669167 69.890655) - (xy 151.671688 69.899002) (xy 151.682902 69.941473) (xy 151.682903 69.941477) (xy 151.685848 69.946622) - (xy 151.691764 69.956957) (xy 151.697517 69.973833) (xy 151.72438 70.013928) (xy 151.72655 70.017719) - (xy 151.726556 70.017728) (xy 151.748376 70.055844) (xy 151.748378 70.055847) (xy 151.75255 70.060049) - (xy 151.752554 70.060053) (xy 151.760943 70.068504) (xy 151.770868 70.083318) (xy 151.8072 70.115102) - (xy 151.810267 70.118191) (xy 151.826676 70.13472) (xy 151.841221 70.149372) (xy 151.856633 70.158345) - (xy 151.870055 70.170087) (xy 151.913377 70.191384) (xy 151.917146 70.193579) (xy 151.929034 70.2005) - (xy 151.955107 70.215681) (xy 151.972315 70.220359) (xy 151.988321 70.228228) (xy 152.035689 70.237589) - (xy 152.082275 70.250255) (xy 152.088193 70.250276) (xy 152.11178 70.252627) (xy 165.059544 72.81151) - (xy 165.121492 72.843818) (xy 165.156141 72.904491) (xy 165.1595 72.933156) (xy 165.1595 93.78578) - (xy 165.139815 93.852819) (xy 165.133391 93.861894) (xy 156.658774 104.761192) (xy 156.658773 104.761193) - (xy 156.654025 104.767298) (xy 156.6295 104.791825) (xy 156.613766 104.819074) (xy 156.608532 104.825806) - (xy 156.608532 104.825807) (xy 156.594439 104.843934) (xy 156.594437 104.843937) (xy 156.583957 104.868785) - (xy 156.583958 104.868786) (xy 156.580956 104.875905) (xy 156.563608 104.905953) (xy 156.55546 104.936358) - (xy 156.552149 104.944209) (xy 156.543227 104.965366) (xy 156.539536 104.992083) (xy 156.539535 104.992082) - (xy 156.538476 104.999744) (xy 156.5295 105.033247) (xy 156.5295 105.06472) (xy 156.528333 105.073168) - (xy 156.525191 105.095909) (xy 156.52854 105.122668) (xy 156.5295 105.138067) (xy 156.5295 115.3755) - (xy 156.509815 115.442539) (xy 156.457011 115.488294) (xy 156.4055 115.4995) (xy 134.9345 115.4995) - (xy 134.867461 115.479815) (xy 134.821706 115.427011) (xy 134.8105 115.3755) (xy 134.8105 105.130339) - (xy 134.814809 105.095911) (xy 134.8105 105.064722) (xy 134.8105 105.033247) (xy 134.803522 105.007204) - (xy 134.800464 104.992081) (xy 134.796773 104.965368) (xy 134.796773 104.965367) (xy 134.784538 104.936357) - (xy 134.776392 104.905953) (xy 134.759044 104.875907) (xy 134.745563 104.843939) (xy 134.731473 104.825817) - (xy 134.721978 104.811704) (xy 134.710504 104.791831) (xy 134.710501 104.791828) (xy 134.7105 104.791825) - (xy 134.691434 104.772759) (xy 134.681224 104.761192) (xy 131.720328 100.95315) (xy 131.66493 100.881902) - (xy 134.9995 100.881902) (xy 134.9995 101.118097) (xy 135.036446 101.351368) (xy 135.109433 101.575996) - (xy 135.216657 101.786433) (xy 135.355483 101.97751) (xy 135.52249 102.144517) (xy 135.713567 102.283343) - (xy 135.779941 102.317162) (xy 135.924003 102.390566) (xy 135.924005 102.390566) (xy 135.924008 102.390568) - (xy 136.044412 102.429689) (xy 136.148631 102.463553) (xy 136.381903 102.5005) (xy 136.381908 102.5005) - (xy 136.618097 102.5005) (xy 136.851368 102.463553) (xy 137.075992 102.390568) (xy 137.286433 102.283343) - (xy 137.47751 102.144517) (xy 137.644517 101.97751) (xy 137.783343 101.786433) (xy 137.890568 101.575992) - (xy 137.963553 101.351368) (xy 137.981562 101.237664) (xy 138.0005 101.118097) (xy 138.0005 100.881902) - (xy 137.963553 100.648631) (xy 137.890566 100.424003) (xy 137.783342 100.213566) (xy 137.644517 100.02249) - (xy 137.47751 99.855483) (xy 137.286433 99.716657) (xy 137.075996 99.609433) (xy 136.851368 99.536446) - (xy 136.618097 99.4995) (xy 136.618092 99.4995) (xy 136.381908 99.4995) (xy 136.381903 99.4995) - (xy 136.148631 99.536446) (xy 135.924003 99.609433) (xy 135.713566 99.716657) (xy 135.60455 99.795862) - (xy 135.52249 99.855483) (xy 135.522488 99.855485) (xy 135.522487 99.855485) (xy 135.355485 100.022487) - (xy 135.355485 100.022488) (xy 135.355483 100.02249) (xy 135.295862 100.10455) (xy 135.216657 100.213566) - (xy 135.109433 100.424003) (xy 135.036446 100.648631) (xy 134.9995 100.881902) (xy 131.66493 100.881902) - (xy 126.206609 93.861895) (xy 126.180998 93.796888) (xy 126.1805 93.785781) (xy 126.1805 76.143713) - (xy 127.6295 76.143713) (xy 127.6295 76.356286) (xy 127.662753 76.566239) (xy 127.728444 76.768414) - (xy 127.824951 76.95782) (xy 127.94989 77.129786) (xy 128.100213 77.280109) (xy 128.272179 77.405048) - (xy 128.272181 77.405049) (xy 128.272184 77.405051) (xy 128.461588 77.501557) (xy 128.663757 77.567246) - (xy 128.873713 77.6005) (xy 128.873714 77.6005) (xy 129.086286 77.6005) (xy 129.086287 77.6005) - (xy 129.296243 77.567246) (xy 129.338523 77.553507) (xy 129.408362 77.551511) (xy 129.464522 77.583757) - (xy 138.414035 86.53327) (xy 138.414045 86.533281) (xy 138.418375 86.537611) (xy 138.418376 86.537612) - (xy 138.53018 86.649416) (xy 138.581741 86.679184) (xy 138.616991 86.699535) (xy 138.616993 86.699537) - (xy 138.667109 86.728472) (xy 138.667111 86.728473) (xy 138.819838 86.769396) (xy 138.819839 86.769396) + (xy 154.717045 55.520185) (xy 154.755774 55.559776) (xy 161.500661 66.581908) (xy 165.105707 72.473081) + (xy 165.141268 72.531192) (xy 165.1595 72.595916) (xy 165.1595 93.78578) (xy 165.139815 93.852819) + (xy 165.133391 93.861894) (xy 156.658774 104.761192) (xy 156.658773 104.761193) (xy 156.654025 104.767298) + (xy 156.6295 104.791825) (xy 156.613766 104.819074) (xy 156.608532 104.825806) (xy 156.608532 104.825807) + (xy 156.594439 104.843934) (xy 156.594437 104.843937) (xy 156.583957 104.868785) (xy 156.583958 104.868786) + (xy 156.580956 104.875905) (xy 156.563608 104.905953) (xy 156.55546 104.936358) (xy 156.552149 104.944209) + (xy 156.543227 104.965366) (xy 156.539536 104.992083) (xy 156.539535 104.992082) (xy 156.538476 104.999744) + (xy 156.5295 105.033247) (xy 156.5295 105.06472) (xy 156.528333 105.073168) (xy 156.525191 105.095909) + (xy 156.52854 105.122668) (xy 156.5295 105.138067) (xy 156.5295 115.3755) (xy 156.509815 115.442539) + (xy 156.457011 115.488294) (xy 156.4055 115.4995) (xy 134.9345 115.4995) (xy 134.867461 115.479815) + (xy 134.821706 115.427011) (xy 134.8105 115.3755) (xy 134.8105 105.130339) (xy 134.814809 105.095911) + (xy 134.8105 105.064722) (xy 134.8105 105.033247) (xy 134.803522 105.007204) (xy 134.800464 104.992081) + (xy 134.796773 104.965368) (xy 134.796773 104.965367) (xy 134.784538 104.936357) (xy 134.776392 104.905953) + (xy 134.759044 104.875907) (xy 134.745563 104.843939) (xy 134.731473 104.825817) (xy 134.721978 104.811704) + (xy 134.710504 104.791831) (xy 134.710501 104.791828) (xy 134.7105 104.791825) (xy 134.691434 104.772759) + (xy 134.681224 104.761192) (xy 130.94279 99.95315) (xy 130.887392 99.881902) (xy 134.9995 99.881902) + (xy 134.9995 100.118097) (xy 135.036446 100.351368) (xy 135.109433 100.575996) (xy 135.216657 100.786433) + (xy 135.355483 100.97751) (xy 135.52249 101.144517) (xy 135.713567 101.283343) (xy 135.812991 101.334002) + (xy 135.924003 101.390566) (xy 135.924005 101.390566) (xy 135.924008 101.390568) (xy 136.044412 101.429689) + (xy 136.148631 101.463553) (xy 136.381903 101.5005) (xy 136.381908 101.5005) (xy 136.618097 101.5005) + (xy 136.851368 101.463553) (xy 137.075992 101.390568) (xy 137.286433 101.283343) (xy 137.47751 101.144517) + (xy 137.644517 100.97751) (xy 137.783343 100.786433) (xy 137.890568 100.575992) (xy 137.963553 100.351368) + (xy 138.0005 100.118097) (xy 138.0005 99.881902) (xy 137.963553 99.648631) (xy 137.890566 99.424003) + (xy 137.783342 99.213566) (xy 137.644517 99.02249) (xy 137.47751 98.855483) (xy 137.286433 98.716657) + (xy 137.075996 98.609433) (xy 136.851368 98.536446) (xy 136.618097 98.4995) (xy 136.618092 98.4995) + (xy 136.381908 98.4995) (xy 136.381903 98.4995) (xy 136.148631 98.536446) (xy 135.924003 98.609433) + (xy 135.713566 98.716657) (xy 135.60455 98.795862) (xy 135.52249 98.855483) (xy 135.522488 98.855485) + (xy 135.522487 98.855485) (xy 135.355485 99.022487) (xy 135.355485 99.022488) (xy 135.355483 99.02249) + (xy 135.295862 99.10455) (xy 135.216657 99.213566) (xy 135.109433 99.424003) (xy 135.036446 99.648631) + (xy 134.9995 99.881902) (xy 130.887392 99.881902) (xy 126.206609 93.861895) (xy 126.180998 93.796888) + (xy 126.1805 93.785781) (xy 126.1805 76.143713) (xy 127.6295 76.143713) (xy 127.6295 76.356286) + (xy 127.662753 76.566239) (xy 127.728444 76.768414) (xy 127.824951 76.95782) (xy 127.94989 77.129786) + (xy 128.100213 77.280109) (xy 128.272184 77.405051) (xy 128.272184 77.405052) (xy 128.311793 77.425233) + (xy 128.36259 77.473206) (xy 128.3795 77.535718) (xy 128.3795 84.89333) (xy 128.379499 84.893348) + (xy 128.379499 85.059054) (xy 128.379498 85.059054) (xy 128.420423 85.211785) (xy 128.449358 85.2619) + (xy 128.449359 85.261904) (xy 128.44936 85.261904) (xy 128.499479 85.348714) (xy 128.499481 85.348717) + (xy 128.618349 85.467585) (xy 128.618355 85.46759) (xy 129.684035 86.53327) (xy 129.684045 86.533281) + (xy 129.688375 86.537611) (xy 129.688376 86.537612) (xy 129.80018 86.649416) (xy 129.851741 86.679184) + (xy 129.886991 86.699535) (xy 129.886993 86.699537) (xy 129.925047 86.721507) (xy 129.937111 86.728473) + (xy 130.089839 86.769397) (xy 130.089842 86.769397) (xy 130.255549 86.769397) (xy 130.255565 86.769396) (xy 142.284774 86.769396) (xy 142.302917 86.774723) (xy 142.321827 86.775061) (xy 142.350044 86.788561) (xy 142.351813 86.789081) (xy 142.353665 86.790294) (xy 142.454093 86.857398) (xy 142.498898 86.91101) (xy 142.507605 86.980335) (xy 142.477451 87.043363) (xy 142.418008 87.080082) (xy 142.385202 87.0845) @@ -3317,185 +3341,185 @@ (xy 152.8505 109.843713) (xy 152.825715 109.687227) (xy 152.83467 109.617933) (xy 152.860502 109.580153) (xy 153.295114 109.145543) (xy 153.371775 109.030811) (xy 153.42458 108.903329) (xy 153.42458 108.903325) (xy 153.424582 108.903322) (xy 153.429934 108.876411) (xy 153.429934 108.876409) (xy 153.4515 108.767993) - (xy 153.4515 100.881902) (xy 154.4995 100.881902) (xy 154.4995 101.118097) (xy 154.536446 101.351368) - (xy 154.609433 101.575996) (xy 154.716657 101.786433) (xy 154.855483 101.97751) (xy 155.02249 102.144517) - (xy 155.213567 102.283343) (xy 155.279941 102.317162) (xy 155.424003 102.390566) (xy 155.424005 102.390566) - (xy 155.424008 102.390568) (xy 155.544412 102.429689) (xy 155.648631 102.463553) (xy 155.881903 102.5005) - (xy 155.881908 102.5005) (xy 156.118097 102.5005) (xy 156.351368 102.463553) (xy 156.575992 102.390568) - (xy 156.786433 102.283343) (xy 156.97751 102.144517) (xy 157.144517 101.97751) (xy 157.283343 101.786433) - (xy 157.390568 101.575992) (xy 157.463553 101.351368) (xy 157.481562 101.237664) (xy 157.5005 101.118097) - (xy 157.5005 100.881902) (xy 157.463553 100.648631) (xy 157.390566 100.424003) (xy 157.283342 100.213566) - (xy 157.144517 100.02249) (xy 156.97751 99.855483) (xy 156.786433 99.716657) (xy 156.575996 99.609433) - (xy 156.351368 99.536446) (xy 156.118097 99.4995) (xy 156.118092 99.4995) (xy 155.881908 99.4995) - (xy 155.881903 99.4995) (xy 155.648631 99.536446) (xy 155.424003 99.609433) (xy 155.213566 99.716657) - (xy 155.10455 99.795862) (xy 155.02249 99.855483) (xy 155.022488 99.855485) (xy 155.022487 99.855485) - (xy 154.855485 100.022487) (xy 154.855485 100.022488) (xy 154.855483 100.02249) (xy 154.795862 100.10455) - (xy 154.716657 100.213566) (xy 154.609433 100.424003) (xy 154.536446 100.648631) (xy 154.4995 100.881902) - (xy 153.4515 100.881902) (xy 153.4515 95.760517) (xy 153.471185 95.693478) (xy 153.487814 95.672841) - (xy 156.550149 92.610505) (xy 156.61147 92.577022) (xy 156.657226 92.575715) (xy 156.757451 92.591588) - (xy 156.813713 92.6005) (xy 156.813714 92.6005) (xy 157.026286 92.6005) (xy 157.026287 92.6005) - (xy 157.236243 92.567246) (xy 157.438412 92.501557) (xy 157.627816 92.405051) (xy 157.714138 92.342335) - (xy 157.799786 92.280109) (xy 157.799788 92.280106) (xy 157.799792 92.280104) (xy 157.950104 92.129792) - (xy 157.950106 92.129788) (xy 157.950109 92.129786) (xy 158.017515 92.037007) (xy 158.075051 91.957816) - (xy 158.079793 91.948508) (xy 158.127763 91.897711) (xy 158.195583 91.880911) (xy 158.261719 91.903445) - (xy 158.300763 91.9485) (xy 158.305373 91.957547) (xy 158.344728 92.011716) (xy 158.977037 91.379408) - (xy 158.994075 91.442993) (xy 159.059901 91.557007) (xy 159.152993 91.650099) (xy 159.267007 91.715925) - (xy 159.33059 91.732962) (xy 158.698282 92.365269) (xy 158.698282 92.36527) (xy 158.752449 92.404624) - (xy 158.941782 92.501095) (xy 159.14387 92.566757) (xy 159.353754 92.6) (xy 159.566246 92.6) (xy 159.776127 92.566757) - (xy 159.77613 92.566757) (xy 159.978217 92.501095) (xy 160.167554 92.404622) (xy 160.221716 92.36527) - (xy 160.221717 92.36527) (xy 159.589408 91.732962) (xy 159.652993 91.715925) (xy 159.767007 91.650099) - (xy 159.860099 91.557007) (xy 159.925925 91.442993) (xy 159.942962 91.379409) (xy 160.613181 92.049628) - (xy 160.646666 92.110951) (xy 160.6495 92.1373) (xy 160.6495 92.147865) (xy 160.649501 92.147876) - (xy 160.655908 92.207483) (xy 160.706202 92.342328) (xy 160.706206 92.342335) (xy 160.792452 92.457544) - (xy 160.792455 92.457547) (xy 160.907664 92.543793) (xy 160.907671 92.543797) (xy 161.042517 92.594091) - (xy 161.042516 92.594091) (xy 161.049444 92.594835) (xy 161.102127 92.6005) (xy 162.897872 92.600499) - (xy 162.957483 92.594091) (xy 163.092331 92.543796) (xy 163.207546 92.457546) (xy 163.293796 92.342331) - (xy 163.344091 92.207483) (xy 163.3505 92.147873) (xy 163.350499 90.352128) (xy 163.344091 90.292517) - (xy 163.293796 90.157669) (xy 163.293795 90.157668) (xy 163.293793 90.157664) (xy 163.207547 90.042455) - (xy 163.207544 90.042452) (xy 163.092335 89.956206) (xy 163.092328 89.956202) (xy 162.957482 89.905908) - (xy 162.957483 89.905908) (xy 162.897883 89.899501) (xy 162.897881 89.8995) (xy 162.897873 89.8995) - (xy 162.897864 89.8995) (xy 161.102129 89.8995) (xy 161.102123 89.899501) (xy 161.042516 89.905908) - (xy 160.907671 89.956202) (xy 160.907664 89.956206) (xy 160.792455 90.042452) (xy 160.792452 90.042455) - (xy 160.706206 90.157664) (xy 160.706202 90.157671) (xy 160.655908 90.292517) (xy 160.649501 90.352116) - (xy 160.649501 90.352123) (xy 160.6495 90.352135) (xy 160.6495 90.36269) (xy 160.629815 90.429729) - (xy 160.613181 90.450371) (xy 159.942962 91.12059) (xy 159.925925 91.057007) (xy 159.860099 90.942993) - (xy 159.767007 90.849901) (xy 159.652993 90.784075) (xy 159.589409 90.767037) (xy 160.221716 90.134728) - (xy 160.16755 90.095375) (xy 159.978217 89.998904) (xy 159.776129 89.933242) (xy 159.566246 89.9) - (xy 159.353754 89.9) (xy 159.143872 89.933242) (xy 159.143869 89.933242) (xy 158.941782 89.998904) - (xy 158.752439 90.09538) (xy 158.698282 90.134727) (xy 158.698282 90.134728) (xy 159.330591 90.767037) - (xy 159.267007 90.784075) (xy 159.152993 90.849901) (xy 159.059901 90.942993) (xy 158.994075 91.057007) - (xy 158.977037 91.120591) (xy 158.344728 90.488282) (xy 158.344727 90.488282) (xy 158.30538 90.54244) - (xy 158.305376 90.542446) (xy 158.30076 90.551505) (xy 158.252781 90.602297) (xy 158.184959 90.619087) - (xy 158.118826 90.596543) (xy 158.079794 90.551493) (xy 158.075051 90.542184) (xy 158.075049 90.542181) - (xy 158.075048 90.542179) (xy 157.950109 90.370213) (xy 157.799786 90.21989) (xy 157.62782 90.094951) - (xy 157.438414 89.998444) (xy 157.438413 89.998443) (xy 157.438412 89.998443) (xy 157.236243 89.932754) - (xy 157.236241 89.932753) (xy 157.23624 89.932753) (xy 157.074957 89.907208) (xy 157.026287 89.8995) - (xy 156.813713 89.8995) (xy 156.765042 89.907208) (xy 156.60376 89.932753) (xy 156.401585 89.998444) - (xy 156.212179 90.094951) (xy 156.040213 90.21989) (xy 155.88989 90.370213) (xy 155.764949 90.542182) - (xy 155.760484 90.550946) (xy 155.712509 90.601742) (xy 155.644688 90.618536) (xy 155.578553 90.595998) - (xy 155.539516 90.550946) (xy 155.53505 90.542182) (xy 155.410109 90.370213) (xy 155.259786 90.21989) - (xy 155.08782 90.094951) (xy 154.898414 89.998444) (xy 154.898413 89.998443) (xy 154.898412 89.998443) - (xy 154.696243 89.932754) (xy 154.696241 89.932753) (xy 154.69624 89.932753) (xy 154.534957 89.907208) - (xy 154.486287 89.8995) (xy 154.273713 89.8995) (xy 154.225042 89.907208) (xy 154.06376 89.932753) - (xy 153.861585 89.998444) (xy 153.672179 90.094951) (xy 153.500213 90.21989) (xy 153.34989 90.370213) - (xy 153.224949 90.542182) (xy 153.220484 90.550946) (xy 153.172509 90.601742) (xy 153.104688 90.618536) - (xy 153.038553 90.595998) (xy 152.999516 90.550946) (xy 152.99505 90.542182) (xy 152.870109 90.370213) - (xy 152.719786 90.21989) (xy 152.54782 90.094951) (xy 152.358414 89.998444) (xy 152.358413 89.998443) - (xy 152.358412 89.998443) (xy 152.156243 89.932754) (xy 152.156241 89.932753) (xy 152.15624 89.932753) - (xy 151.994957 89.907208) (xy 151.946287 89.8995) (xy 151.889096 89.8995) (xy 151.822057 89.879815) - (xy 151.776302 89.827011) (xy 151.766358 89.757853) (xy 151.795383 89.694297) (xy 151.801415 89.687819) - (xy 152.017416 89.471818) (xy 152.078739 89.438333) (xy 152.105097 89.435499) (xy 153.102871 89.435499) - (xy 153.102872 89.435499) (xy 153.162483 89.429091) (xy 153.297331 89.378796) (xy 153.412546 89.292546) - (xy 153.498796 89.177331) (xy 153.549091 89.042483) (xy 153.5555 88.982873) (xy 153.555499 87.537128) - (xy 153.549091 87.477517) (xy 153.535775 87.441816) (xy 153.498797 87.342671) (xy 153.498793 87.342664) - (xy 153.412547 87.227455) (xy 153.412544 87.227452) (xy 153.297335 87.141206) (xy 153.297328 87.141202) - (xy 153.162482 87.090908) (xy 153.162483 87.090908) (xy 153.102883 87.084501) (xy 153.102881 87.0845) - (xy 153.102873 87.0845) (xy 153.102864 87.0845) (xy 151.657129 87.0845) (xy 151.657123 87.084501) - (xy 151.597516 87.090908) (xy 151.462671 87.141202) (xy 151.462664 87.141206) (xy 151.347455 87.227452) - (xy 151.283758 87.312539) (xy 151.227823 87.35441) (xy 151.158132 87.359393) (xy 151.111607 87.338545) - (xy 150.996099 87.254624) (xy 150.996098 87.254623) (xy 150.996096 87.254622) (xy 150.942772 87.227452) - (xy 150.831235 87.17062) (xy 150.831232 87.170619) (xy 150.655265 87.113445) (xy 150.512972 87.090908) - (xy 150.472514 87.0845) (xy 150.287486 87.0845) (xy 150.247028 87.090908) (xy 150.104734 87.113445) - (xy 149.928767 87.170619) (xy 149.928764 87.17062) (xy 149.763903 87.254622) (xy 149.684188 87.312539) - (xy 149.614213 87.363379) (xy 149.614211 87.363381) (xy 149.61421 87.363381) (xy 149.483381 87.49421) - (xy 149.480314 87.498432) (xy 149.424981 87.541094) (xy 149.355367 87.547069) (xy 149.293574 87.514459) - (xy 149.279686 87.498432) (xy 149.276621 87.494213) (xy 149.145787 87.363379) (xy 148.996096 87.254622) - (xy 148.942778 87.227455) (xy 148.831235 87.17062) (xy 148.831232 87.170619) (xy 148.655265 87.113445) - (xy 148.512972 87.090908) (xy 148.472514 87.0845) (xy 148.287486 87.0845) (xy 148.247028 87.090908) - (xy 148.104734 87.113445) (xy 147.928767 87.170619) (xy 147.928764 87.17062) (xy 147.763903 87.254622) - (xy 147.684188 87.312539) (xy 147.614213 87.363379) (xy 147.614211 87.363381) (xy 147.61421 87.363381) - (xy 147.483381 87.49421) (xy 147.480314 87.498432) (xy 147.424981 87.541094) (xy 147.355367 87.547069) - (xy 147.293574 87.514459) (xy 147.279686 87.498432) (xy 147.276621 87.494213) (xy 147.145787 87.363379) - (xy 146.996096 87.254622) (xy 146.942778 87.227455) (xy 146.831235 87.17062) (xy 146.831232 87.170619) - (xy 146.655265 87.113445) (xy 146.512972 87.090908) (xy 146.472514 87.0845) (xy 146.287486 87.0845) - (xy 146.247028 87.090908) (xy 146.104734 87.113445) (xy 145.928767 87.170619) (xy 145.928764 87.17062) - (xy 145.763903 87.254622) (xy 145.684188 87.312539) (xy 145.614213 87.363379) (xy 145.614211 87.363381) - (xy 145.61421 87.363381) (xy 145.483381 87.49421) (xy 145.480314 87.498432) (xy 145.424981 87.541094) - (xy 145.355367 87.547069) (xy 145.293574 87.514459) (xy 145.279686 87.498432) (xy 145.276621 87.494213) - (xy 145.145787 87.363379) (xy 144.996096 87.254622) (xy 144.942778 87.227455) (xy 144.831235 87.17062) - (xy 144.831232 87.170619) (xy 144.655265 87.113445) (xy 144.512972 87.090908) (xy 144.472514 87.0845) - (xy 144.287486 87.0845) (xy 144.247028 87.090908) (xy 144.104734 87.113445) (xy 143.928767 87.170619) - (xy 143.928764 87.17062) (xy 143.763903 87.254622) (xy 143.684188 87.312539) (xy 143.614213 87.363379) - (xy 143.614211 87.363381) (xy 143.61421 87.363381) (xy 143.483381 87.49421) (xy 143.480314 87.498432) - (xy 143.424981 87.541094) (xy 143.355367 87.547069) (xy 143.293574 87.514459) (xy 143.279686 87.498432) - (xy 143.276621 87.494213) (xy 143.145787 87.363379) (xy 143.070941 87.309) (xy 142.996094 87.25462) - (xy 142.89597 87.203604) (xy 142.845175 87.15563) (xy 142.82838 87.087809) (xy 142.850918 87.021674) - (xy 142.905633 86.978223) (xy 142.940128 86.969716) (xy 142.943379 86.969396) (xy 142.943382 86.969396) - (xy 142.943385 86.969395) (xy 142.943389 86.969395) (xy 143.005074 86.957124) (xy 143.098037 86.938633) - (xy 143.243719 86.87829) (xy 143.374829 86.790685) (xy 143.486329 86.679185) (xy 143.573934 86.548075) - (xy 143.634277 86.402393) (xy 143.651172 86.317459) (xy 143.683557 86.255548) (xy 143.744273 86.220974) - (xy 143.796981 86.220033) (xy 143.804848 86.221597) (xy 143.884302 86.237403) (xy 143.884305 86.237403) - (xy 144.041991 86.237403) (xy 144.041992 86.237402) (xy 144.196644 86.20664) (xy 144.342326 86.146297) - (xy 144.473436 86.058692) (xy 144.584936 85.947192) (xy 144.672541 85.816082) (xy 144.732884 85.6704) - (xy 144.763647 85.515745) (xy 144.763647 85.358061) (xy 144.763647 85.358058) (xy 144.763646 85.358056) - (xy 144.732885 85.203413) (xy 144.732884 85.203406) (xy 144.703778 85.133139) (xy 144.696311 85.06367) - (xy 144.727587 85.001191) (xy 144.787676 84.965539) (xy 144.818341 84.961688) (xy 144.941496 84.961688) - (xy 144.941497 84.961687) (xy 145.096149 84.930925) (xy 145.241831 84.870582) (xy 145.372941 84.782977) - (xy 145.484441 84.671477) (xy 145.572046 84.540367) (xy 145.632389 84.394685) (xy 145.663152 84.24003) - (xy 145.663152 84.082346) (xy 145.663152 84.082343) (xy 145.663151 84.082341) (xy 145.63239 83.927698) - (xy 145.632389 83.927691) (xy 145.632387 83.927686) (xy 145.572049 83.782015) (xy 145.572042 83.782002) - (xy 145.484441 83.650899) (xy 145.484438 83.650895) (xy 145.372944 83.539401) (xy 145.37294 83.539398) - (xy 145.241837 83.451797) (xy 145.241824 83.45179) (xy 145.096153 83.391452) (xy 145.096141 83.391449) - (xy 144.941497 83.360688) (xy 144.941494 83.360688) (xy 144.78381 83.360688) (xy 144.783807 83.360688) - (xy 144.629162 83.391449) (xy 144.62915 83.391452) (xy 144.483479 83.45179) (xy 144.483466 83.451797) - (xy 144.351777 83.53979) (xy 144.285099 83.560668) (xy 144.282886 83.560688) (xy 142.271285 83.560688) - (xy 142.204246 83.541003) (xy 142.183604 83.524369) (xy 140.368553 81.709318) (xy 140.335068 81.647995) - (xy 140.340052 81.578303) (xy 140.381924 81.52237) (xy 140.417918 81.503705) (xy 140.431235 81.499379) - (xy 140.596096 81.415378) (xy 140.745787 81.306621) (xy 140.876621 81.175787) (xy 140.87968 81.171576) - (xy 140.935006 81.128909) (xy 141.004619 81.122926) (xy 141.066415 81.155529) (xy 141.080315 81.17157) - (xy 141.083379 81.175787) (xy 141.214213 81.306621) (xy 141.363904 81.415378) (xy 141.444763 81.456577) - (xy 141.528764 81.499379) (xy 141.528767 81.49938) (xy 141.61675 81.527967) (xy 141.704736 81.556555) - (xy 141.887486 81.5855) (xy 141.887487 81.5855) (xy 142.072513 81.5855) (xy 142.072514 81.5855) - (xy 142.255264 81.556555) (xy 142.431235 81.499379) (xy 142.596096 81.415378) (xy 142.745787 81.306621) - (xy 142.876621 81.175787) (xy 142.87968 81.171576) (xy 142.935006 81.128909) (xy 143.004619 81.122926) - (xy 143.066415 81.155529) (xy 143.080315 81.17157) (xy 143.083379 81.175787) (xy 143.214213 81.306621) - (xy 143.363904 81.415378) (xy 143.444763 81.456577) (xy 143.528764 81.499379) (xy 143.528767 81.49938) - (xy 143.61675 81.527967) (xy 143.704736 81.556555) (xy 143.887486 81.5855) (xy 143.887487 81.5855) - (xy 144.072513 81.5855) (xy 144.072514 81.5855) (xy 144.255264 81.556555) (xy 144.431235 81.499379) - (xy 144.596096 81.415378) (xy 144.745787 81.306621) (xy 144.876621 81.175787) (xy 144.87968 81.171576) - (xy 144.935006 81.128909) (xy 145.004619 81.122926) (xy 145.066415 81.155529) (xy 145.080315 81.17157) - (xy 145.083379 81.175787) (xy 145.214213 81.306621) (xy 145.363904 81.415378) (xy 145.444763 81.456577) - (xy 145.528764 81.499379) (xy 145.528767 81.49938) (xy 145.61675 81.527967) (xy 145.704736 81.556555) - (xy 145.887486 81.5855) (xy 145.887487 81.5855) (xy 146.072513 81.5855) (xy 146.072514 81.5855) - (xy 146.255264 81.556555) (xy 146.431235 81.499379) (xy 146.596096 81.415378) (xy 146.745787 81.306621) - (xy 146.876621 81.175787) (xy 146.87968 81.171576) (xy 146.935006 81.128909) (xy 147.004619 81.122926) - (xy 147.066415 81.155529) (xy 147.080315 81.17157) (xy 147.083379 81.175787) (xy 147.214213 81.306621) - (xy 147.363904 81.415378) (xy 147.444763 81.456577) (xy 147.528764 81.499379) (xy 147.528767 81.49938) - (xy 147.61675 81.527967) (xy 147.704736 81.556555) (xy 147.887486 81.5855) (xy 147.887487 81.5855) - (xy 148.072513 81.5855) (xy 148.072514 81.5855) (xy 148.255264 81.556555) (xy 148.431235 81.499379) - (xy 148.596096 81.415378) (xy 148.712013 81.331158) (xy 148.777816 81.30768) (xy 148.84587 81.323505) - (xy 148.884162 81.357166) (xy 148.947812 81.44219) (xy 149.062906 81.52835) (xy 149.062913 81.528354) - (xy 149.19762 81.578596) (xy 149.197627 81.578598) (xy 149.257155 81.584999) (xy 149.257172 81.585) - (xy 149.73 81.585) (xy 149.73 80.725686) (xy 149.734394 80.73008) (xy 149.825606 80.782741) (xy 149.927339 80.81) - (xy 150.032661 80.81) (xy 150.134394 80.782741) (xy 150.225606 80.73008) (xy 150.23 80.725686) (xy 150.23 81.585) - (xy 150.702828 81.585) (xy 150.702844 81.584999) (xy 150.762372 81.578598) (xy 150.762379 81.578596) - (xy 150.897086 81.528354) (xy 150.897093 81.52835) (xy 151.012187 81.44219) (xy 151.01219 81.442187) - (xy 151.09835 81.327093) (xy 151.098354 81.327086) (xy 151.148596 81.192379) (xy 151.148598 81.192372) - (xy 151.154999 81.132844) (xy 151.155 81.132827) (xy 151.155 80.66) (xy 150.295686 80.66) (xy 150.30008 80.655606) - (xy 150.352741 80.564394) (xy 150.38 80.462661) (xy 150.38 80.357339) (xy 150.352741 80.255606) + (xy 153.4515 99.881902) (xy 154.4995 99.881902) (xy 154.4995 100.118097) (xy 154.536446 100.351368) + (xy 154.609433 100.575996) (xy 154.716657 100.786433) (xy 154.855483 100.97751) (xy 155.02249 101.144517) + (xy 155.213567 101.283343) (xy 155.312991 101.334002) (xy 155.424003 101.390566) (xy 155.424005 101.390566) + (xy 155.424008 101.390568) (xy 155.544412 101.429689) (xy 155.648631 101.463553) (xy 155.881903 101.5005) + (xy 155.881908 101.5005) (xy 156.118097 101.5005) (xy 156.351368 101.463553) (xy 156.575992 101.390568) + (xy 156.786433 101.283343) (xy 156.97751 101.144517) (xy 157.144517 100.97751) (xy 157.283343 100.786433) + (xy 157.390568 100.575992) (xy 157.463553 100.351368) (xy 157.5005 100.118097) (xy 157.5005 99.881902) + (xy 157.463553 99.648631) (xy 157.390566 99.424003) (xy 157.283342 99.213566) (xy 157.144517 99.02249) + (xy 156.97751 98.855483) (xy 156.786433 98.716657) (xy 156.575996 98.609433) (xy 156.351368 98.536446) + (xy 156.118097 98.4995) (xy 156.118092 98.4995) (xy 155.881908 98.4995) (xy 155.881903 98.4995) + (xy 155.648631 98.536446) (xy 155.424003 98.609433) (xy 155.213566 98.716657) (xy 155.10455 98.795862) + (xy 155.02249 98.855483) (xy 155.022488 98.855485) (xy 155.022487 98.855485) (xy 154.855485 99.022487) + (xy 154.855485 99.022488) (xy 154.855483 99.02249) (xy 154.795862 99.10455) (xy 154.716657 99.213566) + (xy 154.609433 99.424003) (xy 154.536446 99.648631) (xy 154.4995 99.881902) (xy 153.4515 99.881902) + (xy 153.4515 95.760517) (xy 153.471185 95.693478) (xy 153.487814 95.672841) (xy 156.550149 92.610505) + (xy 156.61147 92.577022) (xy 156.657226 92.575715) (xy 156.757451 92.591588) (xy 156.813713 92.6005) + (xy 156.813714 92.6005) (xy 157.026286 92.6005) (xy 157.026287 92.6005) (xy 157.236243 92.567246) + (xy 157.438412 92.501557) (xy 157.627816 92.405051) (xy 157.714138 92.342335) (xy 157.799786 92.280109) + (xy 157.799788 92.280106) (xy 157.799792 92.280104) (xy 157.950104 92.129792) (xy 157.950106 92.129788) + (xy 157.950109 92.129786) (xy 158.017515 92.037007) (xy 158.075051 91.957816) (xy 158.079793 91.948508) + (xy 158.127763 91.897711) (xy 158.195583 91.880911) (xy 158.261719 91.903445) (xy 158.300763 91.9485) + (xy 158.305373 91.957547) (xy 158.344728 92.011716) (xy 158.977037 91.379408) (xy 158.994075 91.442993) + (xy 159.059901 91.557007) (xy 159.152993 91.650099) (xy 159.267007 91.715925) (xy 159.33059 91.732962) + (xy 158.698282 92.365269) (xy 158.698282 92.36527) (xy 158.752449 92.404624) (xy 158.941782 92.501095) + (xy 159.14387 92.566757) (xy 159.353754 92.6) (xy 159.566246 92.6) (xy 159.776127 92.566757) (xy 159.77613 92.566757) + (xy 159.978217 92.501095) (xy 160.167554 92.404622) (xy 160.221716 92.36527) (xy 160.221717 92.36527) + (xy 159.589408 91.732962) (xy 159.652993 91.715925) (xy 159.767007 91.650099) (xy 159.860099 91.557007) + (xy 159.925925 91.442993) (xy 159.942962 91.379409) (xy 160.613181 92.049628) (xy 160.646666 92.110951) + (xy 160.6495 92.1373) (xy 160.6495 92.147865) (xy 160.649501 92.147876) (xy 160.655908 92.207483) + (xy 160.706202 92.342328) (xy 160.706206 92.342335) (xy 160.792452 92.457544) (xy 160.792455 92.457547) + (xy 160.907664 92.543793) (xy 160.907671 92.543797) (xy 161.042517 92.594091) (xy 161.042516 92.594091) + (xy 161.049444 92.594835) (xy 161.102127 92.6005) (xy 162.897872 92.600499) (xy 162.957483 92.594091) + (xy 163.092331 92.543796) (xy 163.207546 92.457546) (xy 163.293796 92.342331) (xy 163.344091 92.207483) + (xy 163.3505 92.147873) (xy 163.350499 90.352128) (xy 163.344091 90.292517) (xy 163.293796 90.157669) + (xy 163.293795 90.157668) (xy 163.293793 90.157664) (xy 163.207547 90.042455) (xy 163.207544 90.042452) + (xy 163.092335 89.956206) (xy 163.092328 89.956202) (xy 162.957482 89.905908) (xy 162.957483 89.905908) + (xy 162.897883 89.899501) (xy 162.897881 89.8995) (xy 162.897873 89.8995) (xy 162.897864 89.8995) + (xy 161.102129 89.8995) (xy 161.102123 89.899501) (xy 161.042516 89.905908) (xy 160.907671 89.956202) + (xy 160.907664 89.956206) (xy 160.792455 90.042452) (xy 160.792452 90.042455) (xy 160.706206 90.157664) + (xy 160.706202 90.157671) (xy 160.655908 90.292517) (xy 160.649501 90.352116) (xy 160.649501 90.352123) + (xy 160.6495 90.352135) (xy 160.6495 90.36269) (xy 160.629815 90.429729) (xy 160.613181 90.450371) + (xy 159.942962 91.12059) (xy 159.925925 91.057007) (xy 159.860099 90.942993) (xy 159.767007 90.849901) + (xy 159.652993 90.784075) (xy 159.589409 90.767037) (xy 160.221716 90.134728) (xy 160.16755 90.095375) + (xy 159.978217 89.998904) (xy 159.776129 89.933242) (xy 159.566246 89.9) (xy 159.353754 89.9) (xy 159.143872 89.933242) + (xy 159.143869 89.933242) (xy 158.941782 89.998904) (xy 158.752439 90.09538) (xy 158.698282 90.134727) + (xy 158.698282 90.134728) (xy 159.330591 90.767037) (xy 159.267007 90.784075) (xy 159.152993 90.849901) + (xy 159.059901 90.942993) (xy 158.994075 91.057007) (xy 158.977037 91.120591) (xy 158.344728 90.488282) + (xy 158.344727 90.488282) (xy 158.30538 90.54244) (xy 158.305376 90.542446) (xy 158.30076 90.551505) + (xy 158.252781 90.602297) (xy 158.184959 90.619087) (xy 158.118826 90.596543) (xy 158.079794 90.551493) + (xy 158.075051 90.542184) (xy 158.075049 90.542181) (xy 158.075048 90.542179) (xy 157.950109 90.370213) + (xy 157.799786 90.21989) (xy 157.62782 90.094951) (xy 157.438414 89.998444) (xy 157.438413 89.998443) + (xy 157.438412 89.998443) (xy 157.236243 89.932754) (xy 157.236241 89.932753) (xy 157.23624 89.932753) + (xy 157.074957 89.907208) (xy 157.026287 89.8995) (xy 156.813713 89.8995) (xy 156.765042 89.907208) + (xy 156.60376 89.932753) (xy 156.401585 89.998444) (xy 156.212179 90.094951) (xy 156.040213 90.21989) + (xy 155.88989 90.370213) (xy 155.764949 90.542182) (xy 155.760484 90.550946) (xy 155.712509 90.601742) + (xy 155.644688 90.618536) (xy 155.578553 90.595998) (xy 155.539516 90.550946) (xy 155.53505 90.542182) + (xy 155.410109 90.370213) (xy 155.259786 90.21989) (xy 155.08782 90.094951) (xy 154.898414 89.998444) + (xy 154.898413 89.998443) (xy 154.898412 89.998443) (xy 154.696243 89.932754) (xy 154.696241 89.932753) + (xy 154.69624 89.932753) (xy 154.534957 89.907208) (xy 154.486287 89.8995) (xy 154.273713 89.8995) + (xy 154.225042 89.907208) (xy 154.06376 89.932753) (xy 153.861585 89.998444) (xy 153.672179 90.094951) + (xy 153.500213 90.21989) (xy 153.34989 90.370213) (xy 153.224949 90.542182) (xy 153.220484 90.550946) + (xy 153.172509 90.601742) (xy 153.104688 90.618536) (xy 153.038553 90.595998) (xy 152.999516 90.550946) + (xy 152.99505 90.542182) (xy 152.870109 90.370213) (xy 152.719786 90.21989) (xy 152.54782 90.094951) + (xy 152.358414 89.998444) (xy 152.358413 89.998443) (xy 152.358412 89.998443) (xy 152.156243 89.932754) + (xy 152.156241 89.932753) (xy 152.15624 89.932753) (xy 151.994957 89.907208) (xy 151.946287 89.8995) + (xy 151.889096 89.8995) (xy 151.822057 89.879815) (xy 151.776302 89.827011) (xy 151.766358 89.757853) + (xy 151.795383 89.694297) (xy 151.801415 89.687819) (xy 152.017416 89.471818) (xy 152.078739 89.438333) + (xy 152.105097 89.435499) (xy 153.102871 89.435499) (xy 153.102872 89.435499) (xy 153.162483 89.429091) + (xy 153.297331 89.378796) (xy 153.412546 89.292546) (xy 153.498796 89.177331) (xy 153.549091 89.042483) + (xy 153.5555 88.982873) (xy 153.555499 87.537128) (xy 153.549091 87.477517) (xy 153.535775 87.441816) + (xy 153.498797 87.342671) (xy 153.498793 87.342664) (xy 153.412547 87.227455) (xy 153.412544 87.227452) + (xy 153.297335 87.141206) (xy 153.297328 87.141202) (xy 153.162482 87.090908) (xy 153.162483 87.090908) + (xy 153.102883 87.084501) (xy 153.102881 87.0845) (xy 153.102873 87.0845) (xy 153.102864 87.0845) + (xy 151.657129 87.0845) (xy 151.657123 87.084501) (xy 151.597516 87.090908) (xy 151.462671 87.141202) + (xy 151.462664 87.141206) (xy 151.347455 87.227452) (xy 151.283758 87.312539) (xy 151.227823 87.35441) + (xy 151.158132 87.359393) (xy 151.111607 87.338545) (xy 150.996099 87.254624) (xy 150.996098 87.254623) + (xy 150.996096 87.254622) (xy 150.942772 87.227452) (xy 150.831235 87.17062) (xy 150.831232 87.170619) + (xy 150.655265 87.113445) (xy 150.512972 87.090908) (xy 150.472514 87.0845) (xy 150.287486 87.0845) + (xy 150.247028 87.090908) (xy 150.104734 87.113445) (xy 149.928767 87.170619) (xy 149.928764 87.17062) + (xy 149.763903 87.254622) (xy 149.684188 87.312539) (xy 149.614213 87.363379) (xy 149.614211 87.363381) + (xy 149.61421 87.363381) (xy 149.483381 87.49421) (xy 149.480314 87.498432) (xy 149.424981 87.541094) + (xy 149.355367 87.547069) (xy 149.293574 87.514459) (xy 149.279686 87.498432) (xy 149.276621 87.494213) + (xy 149.145787 87.363379) (xy 148.996096 87.254622) (xy 148.942778 87.227455) (xy 148.831235 87.17062) + (xy 148.831232 87.170619) (xy 148.655265 87.113445) (xy 148.512972 87.090908) (xy 148.472514 87.0845) + (xy 148.287486 87.0845) (xy 148.247028 87.090908) (xy 148.104734 87.113445) (xy 147.928767 87.170619) + (xy 147.928764 87.17062) (xy 147.763903 87.254622) (xy 147.684188 87.312539) (xy 147.614213 87.363379) + (xy 147.614211 87.363381) (xy 147.61421 87.363381) (xy 147.483381 87.49421) (xy 147.480314 87.498432) + (xy 147.424981 87.541094) (xy 147.355367 87.547069) (xy 147.293574 87.514459) (xy 147.279686 87.498432) + (xy 147.276621 87.494213) (xy 147.145787 87.363379) (xy 146.996096 87.254622) (xy 146.942778 87.227455) + (xy 146.831235 87.17062) (xy 146.831232 87.170619) (xy 146.655265 87.113445) (xy 146.512972 87.090908) + (xy 146.472514 87.0845) (xy 146.287486 87.0845) (xy 146.247028 87.090908) (xy 146.104734 87.113445) + (xy 145.928767 87.170619) (xy 145.928764 87.17062) (xy 145.763903 87.254622) (xy 145.684188 87.312539) + (xy 145.614213 87.363379) (xy 145.614211 87.363381) (xy 145.61421 87.363381) (xy 145.483381 87.49421) + (xy 145.480314 87.498432) (xy 145.424981 87.541094) (xy 145.355367 87.547069) (xy 145.293574 87.514459) + (xy 145.279686 87.498432) (xy 145.276621 87.494213) (xy 145.145787 87.363379) (xy 144.996096 87.254622) + (xy 144.942778 87.227455) (xy 144.831235 87.17062) (xy 144.831232 87.170619) (xy 144.655265 87.113445) + (xy 144.512972 87.090908) (xy 144.472514 87.0845) (xy 144.287486 87.0845) (xy 144.247028 87.090908) + (xy 144.104734 87.113445) (xy 143.928767 87.170619) (xy 143.928764 87.17062) (xy 143.763903 87.254622) + (xy 143.684188 87.312539) (xy 143.614213 87.363379) (xy 143.614211 87.363381) (xy 143.61421 87.363381) + (xy 143.483381 87.49421) (xy 143.480314 87.498432) (xy 143.424981 87.541094) (xy 143.355367 87.547069) + (xy 143.293574 87.514459) (xy 143.279686 87.498432) (xy 143.276621 87.494213) (xy 143.145787 87.363379) + (xy 143.070941 87.309) (xy 142.996094 87.25462) (xy 142.89597 87.203604) (xy 142.845175 87.15563) + (xy 142.82838 87.087809) (xy 142.850918 87.021674) (xy 142.905633 86.978223) (xy 142.940128 86.969716) + (xy 142.943379 86.969396) (xy 142.943382 86.969396) (xy 142.943385 86.969395) (xy 142.943389 86.969395) + (xy 143.005074 86.957124) (xy 143.098037 86.938633) (xy 143.243719 86.87829) (xy 143.374829 86.790685) + (xy 143.486329 86.679185) (xy 143.573934 86.548075) (xy 143.634277 86.402393) (xy 143.651172 86.317459) + (xy 143.683557 86.255548) (xy 143.744273 86.220974) (xy 143.796981 86.220033) (xy 143.804848 86.221597) + (xy 143.884302 86.237403) (xy 143.884305 86.237403) (xy 144.041991 86.237403) (xy 144.041992 86.237402) + (xy 144.196644 86.20664) (xy 144.342326 86.146297) (xy 144.473436 86.058692) (xy 144.584936 85.947192) + (xy 144.672541 85.816082) (xy 144.732884 85.6704) (xy 144.763647 85.515745) (xy 144.763647 85.358061) + (xy 144.763647 85.358058) (xy 144.763646 85.358056) (xy 144.744519 85.2619) (xy 144.732884 85.203406) + (xy 144.703778 85.133139) (xy 144.696311 85.06367) (xy 144.727587 85.001191) (xy 144.787676 84.965539) + (xy 144.818341 84.961688) (xy 144.941496 84.961688) (xy 144.941497 84.961687) (xy 145.096149 84.930925) + (xy 145.241831 84.870582) (xy 145.372941 84.782977) (xy 145.484441 84.671477) (xy 145.572046 84.540367) + (xy 145.632389 84.394685) (xy 145.663152 84.24003) (xy 145.663152 84.082346) (xy 145.663152 84.082343) + (xy 145.663151 84.082341) (xy 145.63239 83.927698) (xy 145.632389 83.927691) (xy 145.632387 83.927686) + (xy 145.572049 83.782015) (xy 145.572042 83.782002) (xy 145.484441 83.650899) (xy 145.484438 83.650895) + (xy 145.372944 83.539401) (xy 145.37294 83.539398) (xy 145.241837 83.451797) (xy 145.241824 83.45179) + (xy 145.096153 83.391452) (xy 145.096141 83.391449) (xy 144.941497 83.360688) (xy 144.941494 83.360688) + (xy 144.78381 83.360688) (xy 144.783807 83.360688) (xy 144.629162 83.391449) (xy 144.62915 83.391452) + (xy 144.483479 83.45179) (xy 144.483466 83.451797) (xy 144.351777 83.53979) (xy 144.285099 83.560668) + (xy 144.282886 83.560688) (xy 142.271285 83.560688) (xy 142.204246 83.541003) (xy 142.183604 83.524369) + (xy 140.368553 81.709318) (xy 140.335068 81.647995) (xy 140.340052 81.578303) (xy 140.381924 81.52237) + (xy 140.417918 81.503705) (xy 140.431235 81.499379) (xy 140.596096 81.415378) (xy 140.745787 81.306621) + (xy 140.876621 81.175787) (xy 140.87968 81.171576) (xy 140.935006 81.128909) (xy 141.004619 81.122926) + (xy 141.066415 81.155529) (xy 141.080315 81.17157) (xy 141.083379 81.175787) (xy 141.214213 81.306621) + (xy 141.363904 81.415378) (xy 141.444763 81.456577) (xy 141.528764 81.499379) (xy 141.528767 81.49938) + (xy 141.61675 81.527967) (xy 141.704736 81.556555) (xy 141.887486 81.5855) (xy 141.887487 81.5855) + (xy 142.072513 81.5855) (xy 142.072514 81.5855) (xy 142.255264 81.556555) (xy 142.431235 81.499379) + (xy 142.596096 81.415378) (xy 142.745787 81.306621) (xy 142.876621 81.175787) (xy 142.87968 81.171576) + (xy 142.935006 81.128909) (xy 143.004619 81.122926) (xy 143.066415 81.155529) (xy 143.080315 81.17157) + (xy 143.083379 81.175787) (xy 143.214213 81.306621) (xy 143.363904 81.415378) (xy 143.444763 81.456577) + (xy 143.528764 81.499379) (xy 143.528767 81.49938) (xy 143.61675 81.527967) (xy 143.704736 81.556555) + (xy 143.887486 81.5855) (xy 143.887487 81.5855) (xy 144.072513 81.5855) (xy 144.072514 81.5855) + (xy 144.255264 81.556555) (xy 144.431235 81.499379) (xy 144.596096 81.415378) (xy 144.745787 81.306621) + (xy 144.876621 81.175787) (xy 144.87968 81.171576) (xy 144.935006 81.128909) (xy 145.004619 81.122926) + (xy 145.066415 81.155529) (xy 145.080315 81.17157) (xy 145.083379 81.175787) (xy 145.214213 81.306621) + (xy 145.363904 81.415378) (xy 145.444763 81.456577) (xy 145.528764 81.499379) (xy 145.528767 81.49938) + (xy 145.61675 81.527967) (xy 145.704736 81.556555) (xy 145.887486 81.5855) (xy 145.887487 81.5855) + (xy 146.072513 81.5855) (xy 146.072514 81.5855) (xy 146.255264 81.556555) (xy 146.431235 81.499379) + (xy 146.596096 81.415378) (xy 146.745787 81.306621) (xy 146.876621 81.175787) (xy 146.87968 81.171576) + (xy 146.935006 81.128909) (xy 147.004619 81.122926) (xy 147.066415 81.155529) (xy 147.080315 81.17157) + (xy 147.083379 81.175787) (xy 147.214213 81.306621) (xy 147.363904 81.415378) (xy 147.444763 81.456577) + (xy 147.528764 81.499379) (xy 147.528767 81.49938) (xy 147.61675 81.527967) (xy 147.704736 81.556555) + (xy 147.887486 81.5855) (xy 147.887487 81.5855) (xy 148.072513 81.5855) (xy 148.072514 81.5855) + (xy 148.255264 81.556555) (xy 148.431235 81.499379) (xy 148.596096 81.415378) (xy 148.712013 81.331158) + (xy 148.777816 81.30768) (xy 148.84587 81.323505) (xy 148.884162 81.357166) (xy 148.947812 81.44219) + (xy 149.062906 81.52835) (xy 149.062913 81.528354) (xy 149.19762 81.578596) (xy 149.197627 81.578598) + (xy 149.257155 81.584999) (xy 149.257172 81.585) (xy 149.73 81.585) (xy 149.73 80.725686) (xy 149.734394 80.73008) + (xy 149.825606 80.782741) (xy 149.927339 80.81) (xy 150.032661 80.81) (xy 150.134394 80.782741) + (xy 150.225606 80.73008) (xy 150.23 80.725686) (xy 150.23 81.585) (xy 150.702828 81.585) (xy 150.702844 81.584999) + (xy 150.762372 81.578598) (xy 150.762379 81.578596) (xy 150.897086 81.528354) (xy 150.897093 81.52835) + (xy 151.012187 81.44219) (xy 151.01219 81.442187) (xy 151.09835 81.327093) (xy 151.098354 81.327086) + (xy 151.148596 81.192379) (xy 151.148598 81.192372) (xy 151.154999 81.132844) (xy 151.155 81.132827) + (xy 151.155 81.081902) (xy 154.4995 81.081902) (xy 154.4995 81.318097) (xy 154.536446 81.551368) + (xy 154.609433 81.775996) (xy 154.716657 81.986433) (xy 154.855483 82.17751) (xy 155.02249 82.344517) + (xy 155.213567 82.483343) (xy 155.312991 82.534002) (xy 155.424003 82.590566) (xy 155.424005 82.590566) + (xy 155.424008 82.590568) (xy 155.544412 82.629689) (xy 155.648631 82.663553) (xy 155.881903 82.7005) + (xy 155.881908 82.7005) (xy 156.118097 82.7005) (xy 156.351368 82.663553) (xy 156.351374 82.663551) + (xy 156.575992 82.590568) (xy 156.786433 82.483343) (xy 156.97751 82.344517) (xy 157.144517 82.17751) + (xy 157.283343 81.986433) (xy 157.390568 81.775992) (xy 157.463553 81.551368) (xy 157.471787 81.499379) + (xy 157.5005 81.318097) (xy 157.5005 81.081902) (xy 157.463553 80.848631) (xy 157.410471 80.685264) + (xy 157.390568 80.624008) (xy 157.390566 80.624005) (xy 157.390566 80.624003) (xy 157.328664 80.502514) + (xy 157.283343 80.413567) (xy 157.144517 80.22249) (xy 156.97751 80.055483) (xy 156.786433 79.916657) + (xy 156.771472 79.909034) (xy 156.575996 79.809433) (xy 156.351368 79.736446) (xy 156.118097 79.6995) + (xy 156.118092 79.6995) (xy 155.881908 79.6995) (xy 155.881903 79.6995) (xy 155.648631 79.736446) + (xy 155.424003 79.809433) (xy 155.213566 79.916657) (xy 155.185121 79.937324) (xy 155.02249 80.055483) + (xy 155.022488 80.055485) (xy 155.022487 80.055485) (xy 154.855485 80.222487) (xy 154.855485 80.222488) + (xy 154.855483 80.22249) (xy 154.831423 80.255606) (xy 154.716657 80.413566) (xy 154.609433 80.624003) + (xy 154.536446 80.848631) (xy 154.4995 81.081902) (xy 151.155 81.081902) (xy 151.155 80.66) (xy 150.295686 80.66) + (xy 150.30008 80.655606) (xy 150.352741 80.564394) (xy 150.38 80.462661) (xy 150.38 80.357339) (xy 150.352741 80.255606) (xy 150.30008 80.164394) (xy 150.295686 80.16) (xy 151.155 80.16) (xy 151.155 80.158501) (xy 151.174685 80.091462) - (xy 151.185718 80.081902) (xy 154.4995 80.081902) (xy 154.4995 80.318097) (xy 154.536446 80.551368) - (xy 154.609433 80.775996) (xy 154.652865 80.861235) (xy 154.716657 80.986433) (xy 154.855483 81.17751) - (xy 155.02249 81.344517) (xy 155.213567 81.483343) (xy 155.253528 81.503704) (xy 155.424003 81.590566) - (xy 155.424005 81.590566) (xy 155.424008 81.590568) (xy 155.544412 81.629689) (xy 155.648631 81.663553) - (xy 155.881903 81.7005) (xy 155.881908 81.7005) (xy 156.118097 81.7005) (xy 156.351368 81.663553) - (xy 156.39925 81.647995) (xy 156.575992 81.590568) (xy 156.786433 81.483343) (xy 156.97751 81.344517) - (xy 157.144517 81.17751) (xy 157.283343 80.986433) (xy 157.390568 80.775992) (xy 157.463553 80.551368) - (xy 157.477603 80.462661) (xy 157.5005 80.318097) (xy 157.5005 80.081902) (xy 157.463553 79.848631) - (xy 157.390566 79.624003) (xy 157.283342 79.413566) (xy 157.276844 79.404622) (xy 157.144517 79.22249) - (xy 156.97751 79.055483) (xy 156.786433 78.916657) (xy 156.575996 78.809433) (xy 156.351368 78.736446) - (xy 156.118097 78.6995) (xy 156.118092 78.6995) (xy 155.881908 78.6995) (xy 155.881903 78.6995) - (xy 155.648631 78.736446) (xy 155.424003 78.809433) (xy 155.213566 78.916657) (xy 155.10455 78.995862) - (xy 155.02249 79.055483) (xy 155.022488 79.055485) (xy 155.022487 79.055485) (xy 154.855485 79.222487) - (xy 154.855485 79.222488) (xy 154.855483 79.22249) (xy 154.821798 79.268853) (xy 154.716657 79.413566) - (xy 154.609433 79.624003) (xy 154.536446 79.848631) (xy 154.4995 80.081902) (xy 151.185718 80.081902) (xy 151.227489 80.045707) (xy 151.267195 80.037069) (xy 151.266997 80.035562) (xy 151.275054 80.034501) - (xy 151.275057 80.034501) (xy 151.427785 79.993577) (xy 151.488079 79.958765) (xy 151.488082 79.958765) + (xy 151.275057 80.034501) (xy 151.427785 79.993577) (xy 151.488081 79.958765) (xy 151.488082 79.958765) (xy 151.564709 79.914524) (xy 151.564708 79.914524) (xy 151.564716 79.91452) (xy 151.67652 79.802716) (xy 151.67652 79.802714) (xy 151.686724 79.792511) (xy 151.686728 79.792506) (xy 153.895478 77.583755) (xy 153.956799 77.550272) (xy 154.021473 77.553506) (xy 154.063757 77.567246) (xy 154.273713 77.6005) (xy 154.273714 77.6005) (xy 154.486286 77.6005) (xy 154.486287 77.6005) (xy 154.696243 77.567246) - (xy 154.898412 77.501557) (xy 155.087816 77.405051) (xy 155.109789 77.389086) (xy 155.259786 77.280109) + (xy 154.898412 77.501557) (xy 155.087816 77.405051) (xy 155.174478 77.342088) (xy 155.259786 77.280109) (xy 155.259788 77.280106) (xy 155.259792 77.280104) (xy 155.410104 77.129792) (xy 155.410106 77.129788) (xy 155.410109 77.129786) (xy 155.535048 76.95782) (xy 155.535047 76.95782) (xy 155.535051 76.957816) (xy 155.539514 76.949054) (xy 155.587488 76.898259) (xy 155.655308 76.881463) (xy 155.721444 76.903999) @@ -3503,7 +3527,7 @@ (xy 156.212179 77.405048) (xy 156.212181 77.405049) (xy 156.212184 77.405051) (xy 156.401588 77.501557) (xy 156.603757 77.567246) (xy 156.813713 77.6005) (xy 156.813714 77.6005) (xy 157.026286 77.6005) (xy 157.026287 77.6005) (xy 157.236243 77.567246) (xy 157.438412 77.501557) (xy 157.627816 77.405051) - (xy 157.649789 77.389086) (xy 157.799786 77.280109) (xy 157.799788 77.280106) (xy 157.799792 77.280104) + (xy 157.714478 77.342088) (xy 157.799786 77.280109) (xy 157.799788 77.280106) (xy 157.799792 77.280104) (xy 157.950104 77.129792) (xy 157.950106 77.129788) (xy 157.950109 77.129786) (xy 158.075048 76.95782) (xy 158.075047 76.95782) (xy 158.075051 76.957816) (xy 158.079514 76.949054) (xy 158.127488 76.898259) (xy 158.195308 76.881463) (xy 158.261444 76.903999) (xy 158.300486 76.949056) (xy 158.304951 76.95782) @@ -3610,61 +3634,83 @@ (xy 129.134957 74.907208) (xy 129.086287 74.8995) (xy 128.873713 74.8995) (xy 128.825042 74.907208) (xy 128.66376 74.932753) (xy 128.461585 74.998444) (xy 128.272179 75.094951) (xy 128.100213 75.21989) (xy 127.94989 75.370213) (xy 127.824951 75.542179) (xy 127.728444 75.731585) (xy 127.662753 75.93376) - (xy 127.6295 76.143713) (xy 126.1805 76.143713) (xy 126.1805 72.935097) (xy 126.200185 72.868058) - (xy 126.252989 72.822303) (xy 126.280909 72.813362) (xy 126.640319 72.743713) (xy 144.2195 72.743713) - (xy 144.2195 72.956286) (xy 144.252753 73.166239) (xy 144.318444 73.368414) (xy 144.414951 73.55782) - (xy 144.53989 73.729786) (xy 144.690213 73.880109) (xy 144.862179 74.005048) (xy 144.862181 74.005049) - (xy 144.862184 74.005051) (xy 145.051588 74.101557) (xy 145.253757 74.167246) (xy 145.463713 74.2005) - (xy 145.463714 74.2005) (xy 145.676286 74.2005) (xy 145.676287 74.2005) (xy 145.886243 74.167246) - (xy 146.088412 74.101557) (xy 146.277816 74.005051) (xy 146.364138 73.942335) (xy 146.449786 73.880109) - (xy 146.449788 73.880106) (xy 146.449792 73.880104) (xy 146.600104 73.729792) (xy 146.600106 73.729788) - (xy 146.600109 73.729786) (xy 146.667515 73.637007) (xy 146.725051 73.557816) (xy 146.729793 73.548508) - (xy 146.777763 73.497711) (xy 146.845583 73.480911) (xy 146.911719 73.503445) (xy 146.950763 73.5485) - (xy 146.955373 73.557547) (xy 146.994728 73.611716) (xy 147.627037 72.979408) (xy 147.644075 73.042993) - (xy 147.709901 73.157007) (xy 147.802993 73.250099) (xy 147.917007 73.315925) (xy 147.98059 73.332962) - (xy 147.348282 73.965269) (xy 147.348282 73.96527) (xy 147.402449 74.004624) (xy 147.591782 74.101095) - (xy 147.79387 74.166757) (xy 148.003754 74.2) (xy 148.216246 74.2) (xy 148.426127 74.166757) (xy 148.42613 74.166757) - (xy 148.628217 74.101095) (xy 148.817554 74.004622) (xy 148.871716 73.96527) (xy 148.871717 73.96527) - (xy 148.239408 73.332962) (xy 148.302993 73.315925) (xy 148.417007 73.250099) (xy 148.510099 73.157007) - (xy 148.575925 73.042993) (xy 148.592962 72.979408) (xy 149.263181 73.649628) (xy 149.296666 73.710951) - (xy 149.2995 73.7373) (xy 149.2995 73.747865) (xy 149.299501 73.747876) (xy 149.305908 73.807483) - (xy 149.356202 73.942328) (xy 149.356206 73.942335) (xy 149.442452 74.057544) (xy 149.442455 74.057547) - (xy 149.557664 74.143793) (xy 149.557671 74.143797) (xy 149.692517 74.194091) (xy 149.692516 74.194091) - (xy 149.699444 74.194835) (xy 149.752127 74.2005) (xy 151.547872 74.200499) (xy 151.607483 74.194091) - (xy 151.742331 74.143796) (xy 151.857546 74.057546) (xy 151.943796 73.942331) (xy 151.994091 73.807483) - (xy 152.0005 73.747873) (xy 152.000499 71.952128) (xy 151.994091 71.892517) (xy 151.943796 71.757669) - (xy 151.943795 71.757668) (xy 151.943793 71.757664) (xy 151.857547 71.642455) (xy 151.857544 71.642452) - (xy 151.742335 71.556206) (xy 151.742328 71.556202) (xy 151.607482 71.505908) (xy 151.607483 71.505908) - (xy 151.547883 71.499501) (xy 151.547881 71.4995) (xy 151.547873 71.4995) (xy 151.547864 71.4995) - (xy 149.752129 71.4995) (xy 149.752123 71.499501) (xy 149.692516 71.505908) (xy 149.557671 71.556202) - (xy 149.557664 71.556206) (xy 149.442455 71.642452) (xy 149.442452 71.642455) (xy 149.356206 71.757664) - (xy 149.356202 71.757671) (xy 149.305908 71.892517) (xy 149.301639 71.932232) (xy 149.299501 71.952123) - (xy 149.2995 71.952135) (xy 149.2995 71.96269) (xy 149.279815 72.029729) (xy 149.263181 72.050371) - (xy 148.592962 72.72059) (xy 148.575925 72.657007) (xy 148.510099 72.542993) (xy 148.417007 72.449901) - (xy 148.302993 72.384075) (xy 148.239409 72.367037) (xy 148.871716 71.734728) (xy 148.81755 71.695375) - (xy 148.628217 71.598904) (xy 148.426129 71.533242) (xy 148.216246 71.5) (xy 148.003754 71.5) (xy 147.793872 71.533242) - (xy 147.793869 71.533242) (xy 147.591782 71.598904) (xy 147.402439 71.69538) (xy 147.348282 71.734727) - (xy 147.348282 71.734728) (xy 147.980591 72.367037) (xy 147.917007 72.384075) (xy 147.802993 72.449901) - (xy 147.709901 72.542993) (xy 147.644075 72.657007) (xy 147.627037 72.720591) (xy 146.994728 72.088282) - (xy 146.994727 72.088282) (xy 146.95538 72.14244) (xy 146.955376 72.142446) (xy 146.95076 72.151505) - (xy 146.902781 72.202297) (xy 146.834959 72.219087) (xy 146.768826 72.196543) (xy 146.729794 72.151493) - (xy 146.725051 72.142184) (xy 146.725049 72.142181) (xy 146.725048 72.142179) (xy 146.600109 71.970213) - (xy 146.449786 71.81989) (xy 146.27782 71.694951) (xy 146.088414 71.598444) (xy 146.088413 71.598443) - (xy 146.088412 71.598443) (xy 145.886243 71.532754) (xy 145.886241 71.532753) (xy 145.88624 71.532753) - (xy 145.724957 71.507208) (xy 145.676287 71.4995) (xy 145.463713 71.4995) (xy 145.415042 71.507208) - (xy 145.25376 71.532753) (xy 145.051585 71.598444) (xy 144.862179 71.694951) (xy 144.690213 71.81989) - (xy 144.53989 71.970213) (xy 144.414951 72.142179) (xy 144.318444 72.331585) (xy 144.252753 72.53376) - (xy 144.2195 72.743713) (xy 126.640319 72.743713) (xy 127.29365 72.617106) (xy 127.723757 72.533757) - (xy 139.248047 70.3005) (xy 139.265892 70.3005) (xy 139.312515 70.288006) (xy 139.316797 70.287177) - (xy 139.316798 70.287177) (xy 139.335235 70.283603) (xy 139.359907 70.278823) (xy 139.365246 70.276222) - (xy 139.387445 70.26793) (xy 139.393186 70.266392) (xy 139.434992 70.242254) (xy 139.478387 70.221121) - (xy 139.491858 70.209421) (xy 139.496314 70.206849) (xy 139.502171 70.203468) (xy 139.502173 70.203468) - (xy 139.502179 70.203464) (xy 139.507314 70.2005) (xy 139.541445 70.166368) (xy 139.577895 70.13472) - (xy 139.587881 70.119932) (xy 139.6005 70.107314) (xy 139.622468 70.069263) (xy 139.627057 70.061922) - (xy 139.651651 70.025507) (xy 139.657469 70.008639) (xy 139.666392 69.993186) (xy 139.678885 69.94656) - (xy 139.694627 69.900928) (xy 139.695044 69.895002) (xy 139.698965 69.871618) (xy 139.7005 69.865891) - (xy 139.7005 69.817615) (xy 139.703894 69.76947) (xy 139.7005 69.751955) (xy 139.7005 56.7245) (xy 139.720185 56.657461) - (xy 139.772989 56.611706) (xy 139.8245 56.6005) (xy 151.573209 56.6005) + (xy 127.6295 76.143713) (xy 126.1805 76.143713) (xy 126.1805 72.605084) (xy 126.200185 72.538045) + (xy 126.200525 72.537518) (xy 130.070651 66.581902) (xy 134.4995 66.581902) (xy 134.4995 66.818097) + (xy 134.536446 67.051368) (xy 134.609433 67.275996) (xy 134.716657 67.486433) (xy 134.855483 67.67751) + (xy 135.02249 67.844517) (xy 135.213567 67.983343) (xy 135.312991 68.034002) (xy 135.424003 68.090566) + (xy 135.424005 68.090566) (xy 135.424008 68.090568) (xy 135.544412 68.129689) (xy 135.648631 68.163553) + (xy 135.881903 68.2005) (xy 135.881908 68.2005) (xy 136.118097 68.2005) (xy 136.351368 68.163553) + (xy 136.575992 68.090568) (xy 136.786433 67.983343) (xy 136.97751 67.844517) (xy 137.144517 67.67751) + (xy 137.283343 67.486433) (xy 137.390568 67.275992) (xy 137.463553 67.051368) (xy 137.484662 66.918092) + (xy 137.5005 66.818097) (xy 137.5005 66.681902) (xy 153.4995 66.681902) (xy 153.4995 66.918097) + (xy 153.536446 67.151368) (xy 153.609433 67.375996) (xy 153.665704 67.486433) (xy 153.716657 67.586433) + (xy 153.855483 67.77751) (xy 154.02249 67.944517) (xy 154.213567 68.083343) (xy 154.312991 68.134002) + (xy 154.424003 68.190566) (xy 154.424005 68.190566) (xy 154.424008 68.190568) (xy 154.544412 68.229689) + (xy 154.648631 68.263553) (xy 154.881903 68.3005) (xy 154.881908 68.3005) (xy 155.118097 68.3005) + (xy 155.351368 68.263553) (xy 155.575992 68.190568) (xy 155.786433 68.083343) (xy 155.97751 67.944517) + (xy 156.144517 67.77751) (xy 156.283343 67.586433) (xy 156.390568 67.375992) (xy 156.463553 67.151368) + (xy 156.5005 66.918097) (xy 156.5005 66.681902) (xy 156.463553 66.448631) (xy 156.390566 66.224003) + (xy 156.283342 66.013566) (xy 156.144517 65.82249) (xy 155.97751 65.655483) (xy 155.786433 65.516657) + (xy 155.575996 65.409433) (xy 155.351368 65.336446) (xy 155.118097 65.2995) (xy 155.118092 65.2995) + (xy 154.881908 65.2995) (xy 154.881903 65.2995) (xy 154.648631 65.336446) (xy 154.424003 65.409433) + (xy 154.213566 65.516657) (xy 154.10455 65.595862) (xy 154.02249 65.655483) (xy 154.022488 65.655485) + (xy 154.022487 65.655485) (xy 153.855485 65.822487) (xy 153.855485 65.822488) (xy 153.855483 65.82249) + (xy 153.795862 65.90455) (xy 153.716657 66.013566) (xy 153.609433 66.224003) (xy 153.536446 66.448631) + (xy 153.4995 66.681902) (xy 137.5005 66.681902) (xy 137.5005 66.581902) (xy 137.463553 66.348631) + (xy 137.390566 66.124003) (xy 137.283342 65.913566) (xy 137.217171 65.82249) (xy 137.144517 65.72249) + (xy 136.97751 65.555483) (xy 136.786433 65.416657) (xy 136.772253 65.409432) (xy 136.575996 65.309433) + (xy 136.351368 65.236446) (xy 136.118097 65.1995) (xy 136.118092 65.1995) (xy 135.881908 65.1995) + (xy 135.881903 65.1995) (xy 135.648631 65.236446) (xy 135.424003 65.309433) (xy 135.213566 65.416657) + (xy 135.10455 65.495862) (xy 135.02249 65.555483) (xy 135.022488 65.555485) (xy 135.022487 65.555485) + (xy 134.855485 65.722487) (xy 134.855485 65.722488) (xy 134.855483 65.72249) (xy 134.795862 65.80455) + (xy 134.716657 65.913566) (xy 134.609433 66.124003) (xy 134.536446 66.348631) (xy 134.4995 66.581902) + (xy 130.070651 66.581902) (xy 130.117719 66.50947) (xy 133.326718 61.57124) (xy 134.02284 60.5) + (xy 135.538358 58.167816) (xy 136.067385 57.353713) (xy 152.2495 57.353713) (xy 152.2495 57.566286) + (xy 152.282753 57.776239) (xy 152.348444 57.978414) (xy 152.444951 58.16782) (xy 152.56989 58.339786) + (xy 152.720213 58.490109) (xy 152.892179 58.615048) (xy 152.892181 58.615049) (xy 152.892184 58.615051) + (xy 152.901493 58.619794) (xy 152.95229 58.667766) (xy 152.969087 58.735587) (xy 152.946552 58.801722) + (xy 152.901505 58.84076) (xy 152.892446 58.845376) (xy 152.89244 58.84538) (xy 152.838282 58.884727) + (xy 152.838282 58.884728) (xy 153.470591 59.517037) (xy 153.407007 59.534075) (xy 153.292993 59.599901) + (xy 153.199901 59.692993) (xy 153.134075 59.807007) (xy 153.117037 59.870591) (xy 152.484728 59.238282) + (xy 152.484727 59.238282) (xy 152.44538 59.292439) (xy 152.348904 59.481782) (xy 152.283242 59.683869) + (xy 152.283242 59.683872) (xy 152.25 59.893753) (xy 152.25 60.106246) (xy 152.283242 60.316127) + (xy 152.283242 60.31613) (xy 152.348904 60.518217) (xy 152.445375 60.70755) (xy 152.484728 60.761716) + (xy 153.117037 60.129408) (xy 153.134075 60.192993) (xy 153.199901 60.307007) (xy 153.292993 60.400099) + (xy 153.407007 60.465925) (xy 153.47059 60.482962) (xy 152.80037 61.153181) (xy 152.739047 61.186666) + (xy 152.712698 61.1895) (xy 152.702134 61.1895) (xy 152.702123 61.189501) (xy 152.642516 61.195908) + (xy 152.507671 61.246202) (xy 152.507664 61.246206) (xy 152.392455 61.332452) (xy 152.392452 61.332455) + (xy 152.306206 61.447664) (xy 152.306202 61.447671) (xy 152.255908 61.582517) (xy 152.249501 61.642116) + (xy 152.249501 61.642123) (xy 152.2495 61.642135) (xy 152.2495 63.43787) (xy 152.249501 63.437876) + (xy 152.255908 63.497483) (xy 152.306202 63.632328) (xy 152.306206 63.632335) (xy 152.392452 63.747544) + (xy 152.392455 63.747547) (xy 152.507664 63.833793) (xy 152.507671 63.833797) (xy 152.642517 63.884091) + (xy 152.642516 63.884091) (xy 152.649444 63.884835) (xy 152.702127 63.8905) (xy 154.497872 63.890499) + (xy 154.557483 63.884091) (xy 154.692331 63.833796) (xy 154.807546 63.747546) (xy 154.893796 63.632331) + (xy 154.944091 63.497483) (xy 154.9505 63.437873) (xy 154.950499 61.642128) (xy 154.944091 61.582517) + (xy 154.893796 61.447669) (xy 154.893795 61.447668) (xy 154.893793 61.447664) (xy 154.807547 61.332455) + (xy 154.807544 61.332452) (xy 154.692335 61.246206) (xy 154.692328 61.246202) (xy 154.557482 61.195908) + (xy 154.557483 61.195908) (xy 154.497883 61.189501) (xy 154.497881 61.1895) (xy 154.497873 61.1895) + (xy 154.497865 61.1895) (xy 154.487309 61.1895) (xy 154.42027 61.169815) (xy 154.399628 61.153181) + (xy 153.729408 60.482962) (xy 153.792993 60.465925) (xy 153.907007 60.400099) (xy 154.000099 60.307007) + (xy 154.065925 60.192993) (xy 154.082962 60.129409) (xy 154.71527 60.761717) (xy 154.71527 60.761716) + (xy 154.754622 60.707554) (xy 154.851095 60.518217) (xy 154.916757 60.31613) (xy 154.916757 60.316127) + (xy 154.95 60.106246) (xy 154.95 59.893753) (xy 154.916757 59.683872) (xy 154.916757 59.683869) + (xy 154.851095 59.481782) (xy 154.754624 59.292449) (xy 154.71527 59.238282) (xy 154.715269 59.238282) + (xy 154.082962 59.87059) (xy 154.065925 59.807007) (xy 154.000099 59.692993) (xy 153.907007 59.599901) + (xy 153.792993 59.534075) (xy 153.729409 59.517037) (xy 154.361716 58.884728) (xy 154.307547 58.845373) + (xy 154.307547 58.845372) (xy 154.2985 58.840763) (xy 154.247706 58.792788) (xy 154.230912 58.724966) + (xy 154.253451 58.658832) (xy 154.298508 58.619793) (xy 154.307816 58.615051) (xy 154.387007 58.557515) + (xy 154.479786 58.490109) (xy 154.479788 58.490106) (xy 154.479792 58.490104) (xy 154.630104 58.339792) + (xy 154.630106 58.339788) (xy 154.630109 58.339786) (xy 154.755048 58.16782) (xy 154.755047 58.16782) + (xy 154.755051 58.167816) (xy 154.851557 57.978412) (xy 154.917246 57.776243) (xy 154.9505 57.566287) + (xy 154.9505 57.353713) (xy 154.917246 57.143757) (xy 154.851557 56.941588) (xy 154.755051 56.752184) + (xy 154.755049 56.752181) (xy 154.755048 56.752179) (xy 154.630109 56.580213) (xy 154.479786 56.42989) + (xy 154.30782 56.304951) (xy 154.118414 56.208444) (xy 154.118413 56.208443) (xy 154.118412 56.208443) + (xy 153.916243 56.142754) (xy 153.916241 56.142753) (xy 153.91624 56.142753) (xy 153.754957 56.117208) + (xy 153.706287 56.1095) (xy 153.493713 56.1095) (xy 153.445042 56.117208) (xy 153.28376 56.142753) + (xy 153.081585 56.208444) (xy 152.892179 56.304951) (xy 152.720213 56.42989) (xy 152.56989 56.580213) + (xy 152.444951 56.752179) (xy 152.348444 56.941585) (xy 152.282753 57.14376) (xy 152.2495 57.353713) + (xy 136.067385 57.353713) (xy 136.114457 57.281275) (xy 137.234982 55.556934) (xy 137.288016 55.511447) + (xy 137.338957 55.5005) (xy 154.650006 55.5005) ) ) ) diff --git a/simtest/.gitignore b/simtest/.gitignore index e4c50e6988..96b7e716eb 100644 --- a/simtest/.gitignore +++ b/simtest/.gitignore @@ -1,3 +1,4 @@ *.o simtest *.csv +__pycache__/ diff --git a/simtest/Makefile b/simtest/Makefile index 729ec620b8..ea86a450ec 100644 --- a/simtest/Makefile +++ b/simtest/Makefile @@ -14,10 +14,10 @@ simtest: main.o twoexit.o main.o: main.cpp *.hpp ../src/*.hpp ../src/pids/*.hpp \ $(SIMSENSORS)/parsers/webots/* $(SIMSENSORS)/sensors/* - g++ -Wall -c -I$(ROOT) -I../src main.cpp + g++ -std=c++17 -Wall -c -I$(ROOT) -I../src main.cpp twoexit.o: twoexit.cpp *.hpp - g++ -Wall -c -I$(ROOT) -I../src twoexit.cpp + g++ -std=c++17 -Wall -c -I$(ROOT) -I../src twoexit.cpp edit: vim main.cpp diff --git a/simtest/roboviz.py b/simtest/roboviz.py new file mode 100644 index 0000000000..1c29aa843a --- /dev/null +++ b/simtest/roboviz.py @@ -0,0 +1,185 @@ +''' +roboviz.py - Python classes for displaying maps and robots + +Requires: numpy, matplotlib + +Copyright (C) 2018 Simon D. Levy + +This file is part of PyRoboViz. + +PyRoboViz is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +PyRoboViz is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +''' + +# Essential imports +import matplotlib.pyplot as plt +import matplotlib.cm as colormap +import matplotlib.lines as mlines +import numpy as np + +# Use native macOS backend; fall back to TkAgg on other platforms +import matplotlib +import platform +if platform.system() == 'Darwin': + matplotlib.use('macosx') +else: + matplotlib.use('TkAgg') + + +class Visualizer(object): + + # Robot display params + ROBOT_HEIGHT_M = 0.5 + ROBOT_WIDTH_M = 0.3 + + def __init__(self, map_size_meters, map_size_pixels=800): + + # Store constants for display + self.map_size_meters = map_size_meters + self.map_size_pixels = map_size_pixels + + # Create a byte array to display the map with a color overlay + self.bgrbytes = bytearray(map_size_pixels * map_size_pixels * 3) + + # Make a nice big (10"x10") figure + fig = plt.figure(figsize=(10, 10)) + + # Store Python ID of figure to detect window close + self.figid = id(fig) + + # Use an "artist" to speed up map drawing + self.img_artist = None + + # No vehicle to show yet + self.vehicle = None + + # Create axes + self.ax = fig.gca() + self.ax.grid(False) + + # Store previous position for trajectory + self.prevpos = None + + self.rotate_angle = 0 + + def display(self, x_m, y_m, theta_deg, + start_angle=0, + title='', + flip_axes=False, + map_bytes=None, + show_trajectory=False, + obstacles=[]): + + # print(x_m, y_m) + + self._set_pose(x_m, y_m, theta_deg, start_angle, + show_trajectory, flip_axes) + + shift = -self.map_size_pixels / 2 if map_bytes is None else 0 + + # We base the axis on pixels, to support displaying the map + self.ax.set_xlim([shift, self.map_size_pixels+shift]) + self.ax.set_ylim([shift, self.map_size_pixels+shift]) + + if map_bytes is not None: + self._showMap(map_bytes) + + self._show_obstacles(obstacles, flip_axes) + + plt.title(title) + + self.ax.set_xlabel('Y (mm)' if flip_axes else 'X (mm)') + self.ax.set_ylabel('X (mm)' if flip_axes else 'Y (mm)') + + return self._refresh() + + def _showMap(self, map_bytes): + + mapimg = np.reshape(np.frombuffer(map_bytes, dtype=np.uint8), + (self.map_size_pixels, self.map_size_pixels)) + + if self.img_artist is None: + + self.img_artist = self.ax.imshow(mapimg, cmap=colormap.gray) + + else: + + self.img_artist.set_data(mapimg) + + def _show_obstacles(self, obstacles, flip_axes): + + for obst in obstacles: + xs = [x * 100 for x in obst['x']] # (0, 100, 100, 0, 0) + ys = [y * 100 for y in obst['y']] # (0, 0, 100, 100, 0) + plt.fill(xs, ys, color='black') + + + def _set_pose(self, x_m, y_m, theta_deg, start_angle, showtraj, flip_axes): + + # If zero-angle was indicated, grab first angle to compute rotation + if start_angle is None and self.zero_angle != 0: + start_angle = theta_deg + self.rotate_angle = self.zero_angle - self.start_angle + + # Flip axes if indicated + if flip_axes: + x_m, y_m = y_m, x_m + theta_deg = 90 - theta_deg + + # Rotate by computed angle, or zero if no zero-angle indicated + d = self.rotate_angle + a = np.radians(d) + c = np.cos(a) + s = np.sin(a) + x_m, y_m = x_m*c-y_m*s, y_m*c+x_m*s + + # Erase previous vehicle image after first iteration + if self.vehicle is not None: + self.vehicle.remove() + + # Use a very short arrow shaft to orient the head of the arrow + theta_rad = np.radians(theta_deg+d) + c = np.cos(theta_rad) + s = np.sin(theta_rad) + L = 0.1 + dx = L * c + dy = L * s + + s = self.map_size_meters / self.map_size_pixels + + self.vehicle = self.ax.arrow(x_m/s, y_m/s, dx, dy, + head_width=Visualizer.ROBOT_WIDTH_M/s, + head_length=Visualizer.ROBOT_HEIGHT_M/s, + fc='r', ec='r') + + # Show trajectory if indicated + currpos = x_m/s, y_m/s + if showtraj and self.prevpos is not None: + self.ax.add_line(mlines.Line2D((self.prevpos[0], currpos[0]), + (self.prevpos[1], currpos[1]))) + self.prevpos = currpos + + def _refresh(self): + + # If we have a new figure, something went wrong (closing figure failed) + if self.figid != id(plt.gcf()): + return False + + # Redraw current objects without blocking + plt.draw() + + # Refresh display, setting flag on window close or keyboard interrupt + try: + plt.pause(.01) # Arbitrary pause to force redraw + return True + except Exception: + return False + + return True diff --git a/simtest/simsensors/__init__.py b/simtest/simsensors/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/simtest/simsensors/parsers/__init__.py b/simtest/simsensors/parsers/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/simtest/simsensors/parsers/webots/__init__.py b/simtest/simsensors/parsers/webots/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/simtest/simsensors/parsers/webots/world.py b/simtest/simsensors/parsers/webots/world.py new file mode 100644 index 0000000000..4cbcf49a7e --- /dev/null +++ b/simtest/simsensors/parsers/webots/world.py @@ -0,0 +1,79 @@ +''' +Simple VRML parser for Webots .wbt world files + +Python port of the C++ WorldParser from simsensors. + +Copyright (C) 2025 Simon D. Levy + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, in version 3. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +''' + + +def parse(world_file_name): + ''' + Parse a Webots .wbt world file and return a dict with a 'walls' list. + Each wall has 'translation' (3-list), 'rotation' (4-list), 'size' (3-list), + and 'name' (string). + ''' + + walls = [] + current_wall = None + + with open(world_file_name) as f: + for line in f: + line = line.strip() + + if 'Wall {' in line: + current_wall = { + 'translation': [0.0, 0.0, 0.0], + 'rotation': [0.0, 0.0, 1.0, 0.0], + 'size': [0.0, 0.0, 0.0], + 'name': '', + } + + if current_wall is not None: + _try_parse_vec3(line, 'translation', current_wall) + _try_parse_rotation(line, 'rotation', current_wall) + _try_parse_vec3(line, 'size', current_wall) + _try_parse_name(line, current_wall) + + if '}' in line: + walls.append(current_wall) + current_wall = None + + return {'walls': walls} + + +def _try_parse_vec3(line, field_name, wall): + if field_name in line: + toks = line.split() + if len(toks) >= 4: + wall[field_name] = [float(toks[1]), float(toks[2]), float(toks[3])] + + +def _try_parse_rotation(line, field_name, wall): + if field_name in line: + toks = line.split() + if len(toks) >= 5: + wall[field_name] = [ + float(toks[1]), float(toks[2]), + float(toks[3]), float(toks[4]), + ] + + +def _try_parse_name(line, wall): + if 'name' in line: + toks = line.split() + if len(toks) >= 2: + # Remove surrounding quotes + wall['name'] = toks[1].strip('"') diff --git a/src/mixers/crazyflie.hpp b/src/mixers/crazyflie.hpp index 04a2ac9e7a..8ef2f01502 100644 --- a/src/mixers/crazyflie.hpp +++ b/src/mixers/crazyflie.hpp @@ -38,11 +38,6 @@ namespace hf { static constexpr int8_t pitch[4] = {-1, +1, +1, -1}; static constexpr int8_t yaw[4] = {+1, -1, +1, -1}; - static float * mix(const demands_t & demands) - { - return RotorMixer::mix(demands, roll, pitch, yaw, 4); - } - static void mix(const demands_t & demands, float motors[]) { RotorMixer::mix(demands, roll, pitch, yaw, 4, motors); diff --git a/src/simulator/message.h b/src/simulator/message.h deleted file mode 100644 index 32ea19868a..0000000000 --- a/src/simulator/message.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Simulation data message sent from slow (UI) to fast (PID / dynamics) threads - * - * Copyright (C) 2026 Simon D. Levy - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, in version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include -#include - -namespace hf { - - typedef struct { - - pose_t startingPose; - float framerate; - char path[200]; - char worldname[200]; - char poselogname[200]; - mode_e mode; - demands_t setpoint; - - } siminfo_t; -} diff --git a/src/simulator/simulator.hpp b/src/simulator/simulator.hpp index 4a0d0ed99b..4bbd3d9e9d 100644 --- a/src/simulator/simulator.hpp +++ b/src/simulator/simulator.hpp @@ -90,7 +90,8 @@ namespace hf { }; // Get motor RPMS from mixer - const auto * motors = Mixer::mix(new_demands); + float motors[4] = {}; + Mixer::mix(new_demands, motors); // Convert motor values to double for dynamics const auto * rpms = motors2doubless(motors, 4); @@ -98,8 +99,7 @@ namespace hf { // Run dynamics in inner loop ----------------------------- for (uint32_t k=0; k. -# Command-line variables; e.g. make run world=maze --------------------------- - - -# Command-line variables; e.g. make run world=maze --------------------------- +# Command-line variables; e.g.: +# make run world=simple logfile=../controller/log.csv +# world = twoexit logfile = ../../../simtest/log.csv -#----------------------------------------------------------------------------- + +WORLDS_DIR = ../../worlds run: - webots ../../worlds/$(world).wbt & + sed 's/physics.*//' $(WORLDS_DIR)/$(world).wbt > $(WORLDS_DIR)/$(world)_playback.wbt + webots $(WORLDS_DIR)/$(world)_playback.wbt & /usr/local/webots/webots-controller --stdout-redirect \ ./playback.py $(logfile) edit: - vim main.cpp + vim pyplayback.py ### Do not modify: this includes Webots global Makefile.include null := diff --git a/webots/controllers/playback/playback.py b/webots/controllers/playback/playback.py index 85157a2cb2..dade4d0c87 100644 --- a/webots/controllers/playback/playback.py +++ b/webots/controllers/playback/playback.py @@ -22,6 +22,13 @@ from controller import Supervisor +import numpy as np + +try: + import cv2 +except Exception: + cv2 = None + class DiyQuad(Supervisor): @@ -62,6 +69,32 @@ def start_motor(quad, motor_name, direction): motor.setVelocity(direction * 60) +def show_rangefinder_distances(distances_mm, width, height, + dmin_m=.01, dmax_m=4, scaleup=32): + + new_width = width * scaleup + new_height = height * scaleup + + img = np.zeros((new_height, new_width), dtype=np.uint8) + + for x in range(width): + + for y in range(height): + + d_mm = distances_mm[y * width + x] + + grayval = (255 if d_mm == -1 + else int((d_mm/1000. - dmin_m) / + (dmax_m - dmin_m) * 255)) + + cv2.rectangle(img, (x*scaleup, y*scaleup), + ((x+1)*scaleup, (y+1)*scaleup), + grayval, -1) + + cv2.imshow('lidar', img) + cv2.waitKey(1) + + def main(): quad = DiyQuad() @@ -93,7 +126,12 @@ def main(): rotation_field.setSFRotation( euler_to_rotation(vals[3], vals[4], -vals[5])) - # rangefinder_distances = vals[6:] + rangefinder_distances = vals[6:] + + if cv2 is None: + print(rangefinder_distances) + else: + show_rangefinder_distances(rangefinder_distances, 8, 1) main() diff --git a/webots/controllers/standard/.gitignore b/webots/controllers/standard/.gitignore new file mode 100644 index 0000000000..afed0735dc --- /dev/null +++ b/webots/controllers/standard/.gitignore @@ -0,0 +1 @@ +*.csv diff --git a/webots/controllers/standard/Makefile b/webots/controllers/standard/Makefile new file mode 100644 index 0000000000..475e3f6119 --- /dev/null +++ b/webots/controllers/standard/Makefile @@ -0,0 +1,40 @@ +# Copyright (C) 2026 Simon D. Levy + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, in version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Command-line variable; e.g. make run world=twoexit +world = simple + +WORLDS_DIR = ../../worlds + +# https://stackoverflow.com/a/49524393 +.EXPORT_ALL_VARIABLES: +WEBOTS_WORLD = $(world) +WEBOTS_PATH = $(shell pwd) + +FILES_TO_REMOVE += *.csv __pycache__/ + +run: + webots $(WORLDS_DIR)/$(world).wbt & + /usr/local/webots/webots-controller --stdout-redirect \ + ./standard.py $(world) + +edit: + vim standard.py + +### Do not modify: this includes Webots global Makefile.include +null := +space := $(null) $(null) +WEBOTS_HOME_PATH=$(subst $(space),\ ,$(strip $(subst \,/,$(WEBOTS_HOME)))) +include $(WEBOTS_HOME_PATH)/resources/Makefile.include + diff --git a/webots/controllers/standard/standard.py b/webots/controllers/standard/standard.py new file mode 100755 index 0000000000..6fecb5d14f --- /dev/null +++ b/webots/controllers/standard/standard.py @@ -0,0 +1,213 @@ +#!/usr/bin/env python +''' + Python flight simulator main for Hackflight with C++ custom physics plugin + + Copyright (C) 2026 Simon D. Levy + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, in version 3. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +''' + +import struct + +from controller import Robot + +JOYSTICK_AXIS_MAP = { + 'Logitech Gamepad F310': (-2, 4, -5, 1), + 'Microsoft X-Box 360 pad': (-2, 4, -5, 1) +} + +MODES = {'idle': 0, 'hovering': 2, 'autonomous': 3, 'landing': 4} + +ZDIST_LANDING_MAX_M = 0.01 + + +def startMotor(robot, motor_name, direction): + + motor = robot.getDevice(motor_name) + motor.setPosition(float('inf')) + motor.setVelocity(direction * 60) + + +def printKeyboardInstructions(): + print('Using keyboard instead:\n') + print('- Use Enter to take off and land\n') + print('- Use W and S to go up and down\n') + print('- Use arrow keys to move horizontally\n') + print('- Use Q and E to change heading\n') + + +def reportUnrecognizedJoystick(joystick): + print('Unrecognized joystick %s with axes ' % joystick.model, end='') + for k in range(joystick.number_of_axes): + print('%2d=%+6d |' % (k+1, joystick.getAxisValue(k)), end=' ') + print() + + +def switchMode(what, mode): + return ( + 'hovering' if mode == 'idle' and what == 'hover' else + 'landing' if mode == 'hovering' and what == 'hover' else + 'autonomous' if mode == 'hovering' and what == 'auto' else + 'hovering' if mode == 'autonomous' and what == 'auto' else + mode) + + +def checkPressed(button, target, what, buttons_down, mode): + if button == target: + if not buttons_down[what]: + mode = switchMode(what, mode) + buttons_down[what] = True + else: + buttons_down[what] = False + return mode + + +def normalizeJoystickAxis(rawval): + return 2 * rawval / (2**16) + + +def readJoystickRaw(joystick, index): + axis = abs(index) - 1 + sign = -1 if index < 0 else +1 + return sign * joystick.getAxisValue(axis) + + +def readJoystickAxis(joystick, index): + return normalizeJoystickAxis(readJoystickRaw(joystick, index)) + + +def getModeFromButton( + button, hover_button, auto_button, buttons_down, cmdinfo): + + mode = cmdinfo[0] + mode = checkPressed(button, hover_button, 'hover', buttons_down, mode) + return checkPressed(button, auto_button, 'auto', buttons_down, mode) + + +def getCommandInfoFromJoystick(joystick, buttons_down, cmdinfo): + + mode = getModeFromButton(joystick.getPressedButton(), 5, 4, buttons_down, + cmdinfo) + + axes = JOYSTICK_AXIS_MAP[joystick.model] + + thrust = readJoystickAxis(joystick, axes[0]) + roll = readJoystickAxis(joystick, axes[1]) + pitch = readJoystickAxis(joystick, axes[2]) + yaw = readJoystickAxis(joystick, axes[3]) + + return mode, thrust, roll, pitch, yaw + + +def getCommandInfoFromKeyboard(keyboard, keys_down, cmdinfo): + + key = keyboard.getKey() + + mode = getModeFromButton(key, 4, 32, keys_down, cmdinfo) + + thrust = +1 if key == ord('W') else -1 if key == ord('S') else 0 + + roll = (+1 if key == keyboard.RIGHT else + -1 if key == keyboard.LEFT else + 0) + + pitch = (+1 if key == keyboard.UP else + -1 if key == keyboard.DOWN else + 0) + + yaw = +0.5 if key == ord('E') else -0.5 if key == ord('Q') else 0 + + return mode, thrust, roll, pitch, yaw + + +def getAndEnableDevice(robot, timestep, device_name): + device = robot.getDevice(device_name) + device.enable(timestep) + return device + + +def main(): + + robot = Robot() + + timestep = int(robot.getBasicTimeStep()) + + joystick = robot.getJoystick() + joystick.enable(timestep) + + keyboard = robot.getKeyboard() + keyboard.enable(timestep) + + gps = getAndEnableDevice(robot, timestep, 'gps') + imu = getAndEnableDevice(robot, timestep, 'inertial unit') + emitter = robot.getDevice('emitter') + + robot.step(timestep) + + use_keyboard = False + + if joystick.is_connected: + + if joystick.model not in JOYSTICK_AXIS_MAP: + print('Unrecognized joystick %s' % joystick.model) + use_keyboard = True + + else: + use_keyboard = True + + if use_keyboard: + printKeyboardInstructions() + + buttons_down = {'hover': False, 'auto': False} + + xyz = gps.getValues() + rpy = imu.getRollPitchYaw() + + # Negate for leftward/nose-right positive + startpose = (xyz[0], -xyz[1], xyz[2], rpy[0], rpy[1], -rpy[2]) + + cmdinfo = 'idle', 0, 0, 0, 0 + + startMotor(robot, 'motor1', -1) + startMotor(robot, 'motor2', +1) + startMotor(robot, 'motor3', +1) + startMotor(robot, 'motor4', -1) + + while True: + + if robot.step(timestep) == -1: + break + + cmdinfo = (getCommandInfoFromKeyboard(keyboard, buttons_down, cmdinfo) + if use_keyboard + else getCommandInfoFromJoystick( + joystick, buttons_down, cmdinfo)) + + mode = cmdinfo[0] + + # On descent, switch mode to idle when close enough to ground + if (mode == 'landing' and + (gps.getValues()[2] - startpose[2]) < ZDIST_LANDING_MAX_M): + mode = 'idle' + + # Send siminfo to fast thread + emitter.send(struct.pack( + 'ddddddfIffff', + startpose[0], startpose[1], startpose[2], # starting pose + startpose[3], startpose[4], startpose[5], + timestep, # framerate + int(MODES[mode]), # mode + cmdinfo[1], cmdinfo[2], cmdinfo[3], cmdinfo[4])) # setpoint + + +main() diff --git a/webots/plugins/physics/common.hpp b/webots/plugins/physics/common.hpp index 36f7026acf..f2f7b93b0d 100644 --- a/webots/plugins/physics/common.hpp +++ b/webots/plugins/physics/common.hpp @@ -21,7 +21,8 @@ // Hackflight #define _MAIN -#include +#include +#include #include static constexpr char ROBOT_NAME[] = "diyquad"; @@ -58,7 +59,16 @@ class PhysicsPluginHelper { public: - static bool get_siminfo(hf::siminfo_t & siminfo) + typedef struct { + + hf::pose_t startingPose; + float framerate; + hf::mode_e mode; + hf::demands_t setpoint; + + } siminfo_t; + + static bool get_siminfo(siminfo_t & siminfo) { if (_robot == NULL) { return false; @@ -67,9 +77,9 @@ class PhysicsPluginHelper { int bytes_received = 0; // Get sim info from main program - const auto buffer = (hf::siminfo_t *)dWebotsReceive(&bytes_received); + const auto buffer = (siminfo_t *)dWebotsReceive(&bytes_received); - if (bytes_received == sizeof(hf::siminfo_t)) { + if (bytes_received == sizeof(siminfo_t)) { memcpy(&siminfo, buffer, sizeof(siminfo)); } @@ -77,7 +87,7 @@ class PhysicsPluginHelper { return siminfo.framerate > 0; } - static hf::pose_t get_pose_from_siminfo(const hf::siminfo_t & siminfo) + static hf::pose_t get_pose_from_siminfo(const siminfo_t & siminfo) { // Set pose first time around static bool _ready; diff --git a/webots/plugins/physics/experimental/experimental.cpp b/webots/plugins/physics/experimental/experimental.cpp index 20c5b1f4e2..6f5ec1a98f 100644 --- a/webots/plugins/physics/experimental/experimental.cpp +++ b/webots/plugins/physics/experimental/experimental.cpp @@ -16,6 +16,10 @@ * along with this program. If not, see . */ +// C +#include +#include + // Webots #include "../common.hpp" @@ -31,33 +35,43 @@ static const uint8_t RANGEFINDER_DISPLAY_SCALEUP = 64; +static const char * LOG_FILE_NAME = "log.csv"; + +static const char * PATH_VARIABLE_NAME = "WEBOTS_PATH"; +static const char * WORLD_VARIABLE_NAME = "WEBOTS_WORLD"; + static simsens::Rangefinder * _rangefinder; static simsens::RangefinderVisualizer * _rangefinderVisualizer; -static void load(const hf::siminfo_t & siminfo, - simsens::World & world, - simsens::Robot & robot, - FILE ** logfpp) +static char * worldname() { - char path[1000]; + return getenv(WORLD_VARIABLE_NAME); +} + +static void load( + simsens::World & world, simsens::Robot & robot, FILE ** logfpp) +{ + const auto pwd = getenv(PATH_VARIABLE_NAME); + + char path[1000] = {}; - sprintf(path, "%s/../../worlds/%s.wbt", siminfo.path, siminfo.worldname); + sprintf(path, "%s/../../worlds/%s.wbt", pwd, worldname()); simsens::WorldParser::parse(path, world); - sprintf(path, "%s/../../protos/DiyQuad.proto", siminfo.path); + sprintf(path, "%s/../../protos/DiyQuad.proto", pwd); simsens::RobotParser::parse(path, robot); _rangefinder = new simsens::Rangefinder(*robot.rangefinders[0]); _rangefinderVisualizer = new simsens::RangefinderVisualizer(_rangefinder); - sprintf(path, "%s/%s", siminfo.path, siminfo.poselogname); + sprintf(path, "%s/%s", pwd, LOG_FILE_NAME); *logfpp = fopen(path, "w"); } // Returns false on collision, true otherwise -static bool run_normal(hf::siminfo_t & siminfo) +static bool run_normal(PhysicsPluginHelper::siminfo_t & siminfo) { static simsens::World _world; static simsens::Robot _robot; @@ -69,13 +83,13 @@ static bool run_normal(hf::siminfo_t & siminfo) // In autonomous mode, use current pose to get setpoints if (autonomous) { - if (string(siminfo.worldname) == "twoexit") { + if (string(worldname()) == "twoexit") { hf::RangefinderSetpoint::runTwoExit( _rangefinder_distances_mm, siminfo.setpoint); } else { - printf("No autopilot for world %s\n", siminfo.worldname); + printf("No autopilot for world %s\n", worldname()); } } @@ -84,7 +98,7 @@ static bool run_normal(hf::siminfo_t & siminfo) // Load world and robot info first time around if (!_rangefinder) { - load(siminfo, _world, _robot, &_logfp); + load(_world, _robot, &_logfp); } // Get simulated rangefinder distances @@ -127,7 +141,7 @@ DLLEXPORT void webots_physics_step() else { - hf::siminfo_t siminfo = {}; + PhysicsPluginHelper::siminfo_t siminfo = {}; if (PhysicsPluginHelper::get_siminfo(siminfo)) { diff --git a/webots/plugins/physics/simple/simple.cpp b/webots/plugins/physics/simple/simple.cpp index bb3cea298a..4eb8b116b1 100644 --- a/webots/plugins/physics/simple/simple.cpp +++ b/webots/plugins/physics/simple/simple.cpp @@ -21,7 +21,7 @@ // This is called by Webots in the outer (display, kinematics) loop DLLEXPORT void webots_physics_step() { - hf::siminfo_t siminfo = {}; + PhysicsPluginHelper::siminfo_t siminfo = {}; if (PhysicsPluginHelper::get_siminfo(siminfo)) { diff --git a/webots/worlds/.gitignore b/webots/worlds/.gitignore index 6bc0ba1117..11b8e4a4e0 100644 --- a/webots/worlds/.gitignore +++ b/webots/worlds/.gitignore @@ -1,2 +1,2 @@ -tmp.wbt .*.jpg +*_playback.wbt diff --git a/webots/worlds/twoexit.wbt b/webots/worlds/twoexit.wbt index 6e4e390bba..1137a51717 100644 --- a/webots/worlds/twoexit.wbt +++ b/webots/worlds/twoexit.wbt @@ -8,8 +8,8 @@ EXTERNPROTO "../protos/DiyQuad.proto" WorldInfo { title "Hackflight" - #physics "experimental" gravity 0 + physics "experimental" contactProperties [ ContactProperties { coulombFriction [ @@ -21,13 +21,13 @@ WorldInfo { ] } Viewpoint { - orientation -0.007365968524207539 0.9998100918073269 -0.01804225118783057 1.4721798116781641 - position -0.9331254679963351 0.6384823031995971 5.00766176099283 + orientation -0.006243249098038479 0.999827300157543 -0.017504048114038242 1.5621635181989688 + position -0.4585315057596007 0.5629292671215622 6.724944923564715 follow "DiyQuad" } DEF diyquad DiyQuad { - translation -0.27 0.81 0.037985 - rotation 0 0 1 1.5707999514237778 + translation -0.560658 0.780204 0.00774505 + rotation -0.003500030644016716 -0.003062950563592598 0.9999891840011749 1.7038 } TexturedBackground { }