roby 0.8.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (644) hide show
  1. checksums.yaml +7 -0
  2. data/.deep-cover.rb +3 -0
  3. data/.gitattributes +1 -0
  4. data/.gitignore +24 -0
  5. data/.simplecov +10 -0
  6. data/.travis.yml +17 -0
  7. data/.yardopts +4 -0
  8. data/Gemfile +15 -0
  9. data/README.md +11 -0
  10. data/Rakefile +47 -177
  11. data/benchmark/{alloc_misc.rb → attic/alloc_misc.rb} +2 -2
  12. data/benchmark/{discovery_latency.rb → attic/discovery_latency.rb} +19 -19
  13. data/benchmark/{garbage_collection.rb → attic/garbage_collection.rb} +9 -9
  14. data/benchmark/{genom.rb → attic/genom.rb} +0 -0
  15. data/benchmark/attic/transactions.rb +62 -0
  16. data/benchmark/plan_basic_operations.rb +28 -0
  17. data/benchmark/relations/graph.rb +63 -0
  18. data/benchmark/ruby/identity.rb +18 -0
  19. data/benchmark/ruby/set_intersect_vs_hash_merge.rb +39 -0
  20. data/benchmark/ruby/yield_vs_block.rb +35 -0
  21. data/benchmark/run +5 -0
  22. data/benchmark/synthetic_plan_modifications_with_transactions.rb +79 -0
  23. data/benchmark/transactions.rb +99 -51
  24. data/bin/roby +38 -197
  25. data/bin/roby-display +14 -0
  26. data/bin/roby-log +3 -176
  27. data/doc/guide/{src → attic}/abstraction/achieve_with.page +1 -1
  28. data/doc/guide/{src → attic}/abstraction/forwarding.page +1 -1
  29. data/doc/guide/{src → attic}/abstraction/hierarchy.page +1 -1
  30. data/doc/guide/{src → attic}/abstraction/index.page +1 -1
  31. data/doc/guide/{src → attic}/abstraction/task_models.page +1 -1
  32. data/doc/guide/{overview.rdoc → attic/cycle/api_overview.rdoc} +6 -1
  33. data/doc/guide/{src → attic}/cycle/cycle-overview.png +0 -0
  34. data/doc/guide/{src → attic}/cycle/cycle-overview.svg +0 -0
  35. data/doc/guide/attic/cycle/error_handling.page +98 -0
  36. data/doc/guide/{src → attic}/cycle/error_instantaneous_repair.png +0 -0
  37. data/doc/guide/{src → attic}/cycle/error_instantaneous_repair.svg +0 -0
  38. data/doc/guide/{src/cycle/error_handling.page → attic/cycle/error_sources.page} +46 -89
  39. data/doc/guide/{src → attic}/cycle/garbage_collection.page +1 -1
  40. data/doc/guide/{src → attic}/cycle/index.page +1 -1
  41. data/doc/guide/{src → attic}/cycle/propagation.page +11 -1
  42. data/doc/guide/{src → attic}/cycle/propagation_diamond.png +0 -0
  43. data/doc/guide/{src → attic}/cycle/propagation_diamond.svg +0 -0
  44. data/doc/guide/attic/plans/building_plans.page +89 -0
  45. data/doc/guide/attic/plans/code.page +192 -0
  46. data/doc/guide/{src/basics → attic/plans}/events.page +3 -4
  47. data/doc/guide/attic/plans/index.page +7 -0
  48. data/doc/guide/{plan_modifications.rdoc → attic/plans/plan_modifications.rdoc} +5 -3
  49. data/doc/guide/{src/basics → attic/plans}/plan_objects.page +2 -1
  50. data/doc/guide/attic/plans/querying_plans.page +5 -0
  51. data/doc/guide/{src/basics → attic/plans}/tasks.page +20 -20
  52. data/doc/guide/config.yaml +7 -4
  53. data/doc/guide/ext/extended_menu.rb +29 -0
  54. data/doc/guide/ext/init.rb +6 -0
  55. data/doc/guide/ext/rdoc_links.rb +7 -6
  56. data/doc/guide/src/advanced_concepts/history.page +5 -0
  57. data/doc/guide/src/advanced_concepts/index.page +11 -0
  58. data/doc/guide/src/advanced_concepts/recognizing_patterns.page +83 -0
  59. data/doc/guide/src/advanced_concepts/scheduling.page +87 -0
  60. data/doc/guide/src/advanced_concepts/transactions.page +5 -0
  61. data/doc/guide/src/advanced_concepts/unreachability.page +42 -0
  62. data/doc/guide/src/base.template +96 -0
  63. data/doc/guide/src/basics_shell_header.txt +5 -7
  64. data/doc/guide/src/building/action_coordination.page +96 -0
  65. data/doc/guide/src/building/actions.page +124 -0
  66. data/doc/guide/src/building/file_layout.page +71 -0
  67. data/doc/guide/src/building/index.page +50 -0
  68. data/doc/guide/src/building/patterns.page +86 -0
  69. data/doc/guide/src/building/patterns_forwarding.png +0 -0
  70. data/doc/guide/src/building/patterns_forwarding.svg +277 -0
  71. data/doc/guide/src/building/runtime.page +95 -0
  72. data/doc/guide/src/building/task_models.page +94 -0
  73. data/doc/guide/src/building/tasks.page +284 -0
  74. data/doc/guide/src/concepts/error_handling.page +100 -0
  75. data/doc/guide/src/concepts/exception_propagation.png +0 -0
  76. data/doc/guide/src/concepts/exception_propagation.svg +445 -0
  77. data/doc/guide/src/concepts/execution.page +85 -0
  78. data/doc/guide/src/concepts/execution.png +0 -0
  79. data/doc/guide/src/concepts/execution.svg +573 -0
  80. data/doc/guide/src/concepts/execution_cycle.png +0 -0
  81. data/doc/guide/src/concepts/garbage_collection.page +57 -0
  82. data/doc/guide/src/concepts/index.page +27 -0
  83. data/doc/guide/src/concepts/plans.page +101 -0
  84. data/doc/guide/src/concepts/policy.page +31 -0
  85. data/doc/guide/src/concepts/reactor.page +61 -0
  86. data/doc/guide/src/concepts/simple_plan_example.png +0 -0
  87. data/doc/guide/src/concepts/simple_plan_example.svg +376 -0
  88. data/doc/guide/src/default.template +9 -74
  89. data/doc/guide/src/event_relations/forward.page +71 -0
  90. data/doc/guide/src/event_relations/index.page +12 -0
  91. data/doc/guide/src/event_relations/scheduling_constraints.page +43 -0
  92. data/doc/guide/src/event_relations/signal.page +55 -0
  93. data/doc/guide/src/event_relations/temporal_constraints.page +77 -0
  94. data/doc/guide/src/htmldoc.metainfo +21 -8
  95. data/doc/guide/src/index.page +8 -3
  96. data/doc/guide/src/{introduction/install.page → installation/index.page} +37 -25
  97. data/doc/guide/src/installation/publications.page +14 -0
  98. data/doc/guide/src/{introduction → installation}/videos.page +14 -7
  99. data/doc/guide/src/interacting/index.page +16 -0
  100. data/doc/guide/src/interacting/run.page +33 -0
  101. data/doc/guide/src/interacting/shell.page +95 -0
  102. data/doc/guide/src/plugins/creating_plugins.page +72 -0
  103. data/doc/guide/src/plugins/index.page +27 -5
  104. data/doc/guide/src/plugins/{fault_tolerance.page → standard_plugins/fault_tolerance.page} +2 -2
  105. data/doc/guide/src/plugins/standard_plugins/index.page +11 -0
  106. data/doc/guide/src/plugins/{subsystems.page → standard_plugins/subsystems.page} +2 -2
  107. data/doc/guide/src/style_screen.css +687 -0
  108. data/doc/guide/src/task_relations/dependency.page +107 -0
  109. data/doc/guide/src/task_relations/executed_by.page +77 -0
  110. data/doc/guide/src/task_relations/index.page +12 -0
  111. data/doc/guide/src/task_relations/new_relations.page +119 -0
  112. data/doc/guide/src/task_relations/planned_by.page +46 -0
  113. data/doc/guide/src/tutorial/app.page +117 -0
  114. data/doc/guide/src/{basics → tutorial}/code_examples.page +6 -5
  115. data/doc/guide/src/{basics → tutorial}/dry.page +15 -15
  116. data/doc/guide/src/{basics → tutorial}/errors.page +43 -68
  117. data/doc/guide/src/tutorial/events.page +195 -0
  118. data/doc/guide/src/{basics → tutorial}/hierarchy.page +53 -52
  119. data/doc/guide/src/tutorial/index.page +13 -0
  120. data/doc/guide/src/tutorial/log_replay/goForward_1.png +0 -0
  121. data/doc/guide/src/tutorial/log_replay/goForward_2.png +0 -0
  122. data/doc/guide/src/tutorial/log_replay/goForward_3.png +0 -0
  123. data/doc/guide/src/{basics → tutorial}/log_replay/goForward_4.png +0 -0
  124. data/doc/guide/src/tutorial/log_replay/goForward_5.png +0 -0
  125. data/doc/guide/src/{basics → tutorial}/log_replay/hierarchy_error_1.png +0 -0
  126. data/doc/guide/src/{basics → tutorial}/log_replay/hierarchy_error_2.png +0 -0
  127. data/doc/guide/src/{basics → tutorial}/log_replay/hierarchy_error_3.png +0 -0
  128. data/doc/guide/src/tutorial/log_replay/moveto_code_error.png +0 -0
  129. data/doc/guide/src/{basics → tutorial}/log_replay/plan_repair_1.png +0 -0
  130. data/doc/guide/src/{basics → tutorial}/log_replay/plan_repair_2.png +0 -0
  131. data/doc/guide/src/{basics → tutorial}/log_replay/plan_repair_3.png +0 -0
  132. data/doc/guide/src/tutorial/log_replay/plan_repair_4.png +0 -0
  133. data/doc/guide/src/tutorial/log_replay/roby_log_main_window.png +0 -0
  134. data/doc/guide/src/{basics → tutorial}/log_replay/roby_log_relation_window.png +0 -0
  135. data/doc/guide/src/{basics → tutorial}/log_replay/roby_replay_event_representation.png +0 -0
  136. data/doc/guide/src/tutorial/relations_display.page +153 -0
  137. data/doc/guide/src/{basics → tutorial}/roby_cycle_overview.png +0 -0
  138. data/doc/guide/src/tutorial/shell.page +121 -0
  139. data/doc/guide/src/{basics → tutorial}/summary.page +1 -1
  140. data/doc/guide/src/tutorial/tasks.page +374 -0
  141. data/lib/roby.rb +102 -47
  142. data/lib/roby/actions.rb +17 -0
  143. data/lib/roby/actions/action.rb +80 -0
  144. data/lib/roby/actions/interface.rb +45 -0
  145. data/lib/roby/actions/library.rb +23 -0
  146. data/lib/roby/actions/models/action.rb +224 -0
  147. data/lib/roby/actions/models/coordination_action.rb +58 -0
  148. data/lib/roby/actions/models/interface.rb +22 -0
  149. data/lib/roby/actions/models/interface_base.rb +294 -0
  150. data/lib/roby/actions/models/library.rb +12 -0
  151. data/lib/roby/actions/models/method_action.rb +90 -0
  152. data/lib/roby/actions/task.rb +114 -0
  153. data/lib/roby/and_generator.rb +125 -0
  154. data/lib/roby/app.rb +2795 -829
  155. data/lib/roby/app/autotest_console_reporter.rb +138 -0
  156. data/lib/roby/app/base.rb +21 -0
  157. data/lib/roby/app/cucumber.rb +2 -0
  158. data/lib/roby/app/cucumber/controller.rb +439 -0
  159. data/lib/roby/app/cucumber/helpers.rb +280 -0
  160. data/lib/roby/app/cucumber/world.rb +32 -0
  161. data/lib/roby/app/debug.rb +136 -0
  162. data/lib/roby/app/gen.rb +2 -0
  163. data/lib/roby/app/rake.rb +178 -38
  164. data/lib/roby/app/robot_config.rb +9 -0
  165. data/lib/roby/app/robot_names.rb +115 -0
  166. data/lib/roby/app/run.rb +3 -2
  167. data/lib/roby/app/scripts.rb +72 -0
  168. data/lib/roby/app/scripts/autotest.rb +173 -0
  169. data/lib/roby/app/scripts/display.rb +2 -0
  170. data/lib/roby/app/scripts/restart.rb +52 -0
  171. data/lib/roby/app/scripts/results.rb +17 -8
  172. data/lib/roby/app/scripts/run.rb +155 -24
  173. data/lib/roby/app/scripts/shell.rb +147 -62
  174. data/lib/roby/app/scripts/test.rb +107 -22
  175. data/lib/roby/app/test_reporter.rb +74 -0
  176. data/lib/roby/app/test_server.rb +159 -0
  177. data/lib/roby/app/vagrant.rb +47 -0
  178. data/lib/roby/backports.rb +16 -0
  179. data/lib/roby/cli/display.rb +190 -0
  180. data/lib/roby/cli/exceptions.rb +17 -0
  181. data/lib/roby/cli/gen/actions/class.rb +5 -0
  182. data/lib/roby/cli/gen/actions/test.rb +6 -0
  183. data/lib/roby/cli/gen/app/.yardopts +6 -0
  184. data/lib/roby/cli/gen/app/README.md +28 -0
  185. data/lib/roby/cli/gen/app/Rakefile +15 -0
  186. data/{app → lib/roby/cli/gen/app}/config/app.yml +29 -39
  187. data/lib/roby/cli/gen/app/models/.gitattributes +1 -0
  188. data/{app → lib/roby/cli/gen/app/scripts}/controllers/.gitattributes +0 -0
  189. data/{app/data/.gitattributes → lib/roby/cli/gen/app/test/.gitignore} +0 -0
  190. data/lib/roby/cli/gen/class/class.rb +6 -0
  191. data/lib/roby/cli/gen/class/test.rb +7 -0
  192. data/lib/roby/cli/gen/helpers.rb +203 -0
  193. data/lib/roby/cli/gen/module/module.rb +5 -0
  194. data/lib/roby/cli/gen/module/test.rb +6 -0
  195. data/lib/roby/cli/gen/roby_app/config/init.rb +17 -0
  196. data/lib/roby/cli/gen/roby_app/config/robots/robot.rb +40 -0
  197. data/lib/roby/cli/gen/task/class.rb +44 -0
  198. data/lib/roby/cli/gen/task/test.rb +6 -0
  199. data/lib/roby/cli/gen_main.rb +120 -0
  200. data/lib/roby/cli/log.rb +276 -0
  201. data/lib/roby/cli/log/flamegraph.html +499 -0
  202. data/lib/roby/cli/log/flamegraph_renderer.rb +88 -0
  203. data/lib/roby/cli/main.rb +153 -0
  204. data/lib/roby/coordination.rb +60 -0
  205. data/lib/roby/coordination/action_script.rb +25 -0
  206. data/lib/roby/coordination/action_state_machine.rb +125 -0
  207. data/lib/roby/coordination/actions.rb +106 -0
  208. data/lib/roby/coordination/base.rb +145 -0
  209. data/lib/roby/coordination/calculus.rb +40 -0
  210. data/lib/roby/coordination/child.rb +28 -0
  211. data/lib/roby/coordination/event.rb +29 -0
  212. data/lib/roby/coordination/fault_handler.rb +25 -0
  213. data/lib/roby/coordination/fault_handling_task.rb +13 -0
  214. data/lib/roby/coordination/fault_response_table.rb +110 -0
  215. data/lib/roby/coordination/models/action_script.rb +64 -0
  216. data/lib/roby/coordination/models/action_state_machine.rb +224 -0
  217. data/lib/roby/coordination/models/actions.rb +191 -0
  218. data/lib/roby/coordination/models/arguments.rb +55 -0
  219. data/lib/roby/coordination/models/base.rb +176 -0
  220. data/lib/roby/coordination/models/capture.rb +86 -0
  221. data/lib/roby/coordination/models/child.rb +35 -0
  222. data/lib/roby/coordination/models/event.rb +41 -0
  223. data/lib/roby/coordination/models/exceptions.rb +42 -0
  224. data/lib/roby/coordination/models/fault_handler.rb +219 -0
  225. data/lib/roby/coordination/models/fault_response_table.rb +77 -0
  226. data/lib/roby/coordination/models/root.rb +22 -0
  227. data/lib/roby/coordination/models/script.rb +283 -0
  228. data/lib/roby/coordination/models/task.rb +184 -0
  229. data/lib/roby/coordination/models/task_from_action.rb +50 -0
  230. data/lib/roby/coordination/models/task_from_as_plan.rb +33 -0
  231. data/lib/roby/coordination/models/task_from_instanciation_object.rb +31 -0
  232. data/lib/roby/coordination/models/task_from_variable.rb +27 -0
  233. data/lib/roby/coordination/models/task_with_dependencies.rb +48 -0
  234. data/lib/roby/coordination/models/variable.rb +32 -0
  235. data/lib/roby/coordination/script.rb +200 -0
  236. data/lib/roby/coordination/script_instruction.rb +12 -0
  237. data/lib/roby/coordination/task.rb +45 -0
  238. data/lib/roby/coordination/task_base.rb +69 -0
  239. data/lib/roby/coordination/task_script.rb +293 -0
  240. data/lib/roby/coordination/task_state_machine.rb +308 -0
  241. data/lib/roby/decision_control.rb +33 -21
  242. data/lib/roby/distributed_object.rb +76 -0
  243. data/lib/roby/droby.rb +17 -0
  244. data/lib/roby/droby/droby_id.rb +6 -0
  245. data/lib/roby/droby/enable.rb +153 -0
  246. data/lib/roby/droby/event_logger.rb +189 -0
  247. data/lib/roby/droby/event_logging.rb +57 -0
  248. data/lib/roby/droby/exceptions.rb +14 -0
  249. data/lib/roby/droby/identifiable.rb +22 -0
  250. data/lib/roby/droby/logfile.rb +141 -0
  251. data/lib/roby/droby/logfile/client.rb +176 -0
  252. data/lib/roby/droby/logfile/file_format.md +97 -0
  253. data/lib/roby/droby/logfile/index.rb +117 -0
  254. data/lib/roby/droby/logfile/reader.rb +139 -0
  255. data/lib/roby/droby/logfile/server.rb +199 -0
  256. data/lib/roby/droby/logfile/writer.rb +114 -0
  257. data/lib/roby/droby/marshal.rb +264 -0
  258. data/lib/roby/droby/marshallable.rb +12 -0
  259. data/lib/roby/droby/null_event_logger.rb +25 -0
  260. data/lib/roby/droby/object_manager.rb +205 -0
  261. data/lib/roby/droby/peer_id.rb +6 -0
  262. data/lib/roby/droby/plan_rebuilder.rb +373 -0
  263. data/lib/roby/droby/rebuilt_plan.rb +160 -0
  264. data/lib/roby/droby/remote_droby_id.rb +6 -0
  265. data/lib/roby/droby/timepoints.rb +205 -0
  266. data/lib/roby/droby/timepoints_ctf.metadata.erb +101 -0
  267. data/lib/roby/droby/timepoints_ctf.rb +125 -0
  268. data/lib/roby/droby/v5.rb +14 -0
  269. data/lib/roby/droby/v5/builtin.rb +120 -0
  270. data/lib/roby/droby/v5/droby_class.rb +45 -0
  271. data/lib/roby/droby/v5/droby_constant.rb +81 -0
  272. data/lib/roby/droby/v5/droby_dump.rb +1026 -0
  273. data/lib/roby/droby/v5/droby_id.rb +44 -0
  274. data/lib/roby/droby/v5/droby_model.rb +82 -0
  275. data/lib/roby/droby/v5/peer_id.rb +10 -0
  276. data/lib/roby/droby/v5/remote_droby_id.rb +42 -0
  277. data/lib/roby/event.rb +79 -957
  278. data/lib/roby/event_constraints.rb +835 -0
  279. data/lib/roby/event_generator.rb +1047 -0
  280. data/lib/roby/event_structure/causal_link.rb +6 -0
  281. data/lib/roby/event_structure/forwarding.rb +6 -0
  282. data/lib/roby/event_structure/precedence.rb +7 -0
  283. data/lib/roby/event_structure/signal.rb +8 -0
  284. data/lib/roby/event_structure/temporal_constraints.rb +640 -0
  285. data/lib/roby/exceptions.rb +446 -152
  286. data/lib/roby/executable_plan.rb +549 -0
  287. data/lib/roby/execution_engine.rb +1997 -950
  288. data/lib/roby/filter_generator.rb +26 -0
  289. data/lib/roby/gui/chronicle_view.rb +225 -0
  290. data/lib/roby/gui/chronicle_widget.rb +925 -0
  291. data/lib/roby/gui/dot_id.rb +11 -0
  292. data/lib/roby/gui/exception_view.rb +44 -0
  293. data/lib/roby/gui/log_display.rb +273 -0
  294. data/lib/roby/gui/model_views.rb +2 -0
  295. data/lib/roby/gui/model_views/action_interface.rb +53 -0
  296. data/lib/roby/gui/model_views/task.rb +47 -0
  297. data/lib/roby/gui/model_views/task.rhtml +41 -0
  298. data/lib/roby/gui/object_info_view.rb +89 -0
  299. data/lib/roby/gui/plan_dot_layout.rb +427 -0
  300. data/lib/roby/gui/plan_rebuilder_widget.rb +357 -0
  301. data/lib/roby/gui/qt4_toMSecsSinceEpoch.rb +8 -0
  302. data/lib/roby/gui/relations_view.rb +278 -0
  303. data/lib/roby/gui/relations_view/relations.ui +139 -0
  304. data/lib/roby/gui/relations_view/relations_canvas.rb +1088 -0
  305. data/lib/roby/gui/relations_view/relations_config.rb +292 -0
  306. data/lib/roby/gui/relations_view/relations_view.ui +53 -0
  307. data/lib/roby/gui/scheduler_view.css +24 -0
  308. data/lib/roby/gui/scheduler_view.rb +46 -0
  309. data/lib/roby/gui/scheduler_view.rhtml +53 -0
  310. data/lib/roby/gui/stepping.rb +93 -0
  311. data/lib/roby/gui/stepping.ui +181 -0
  312. data/lib/roby/gui/styles.rb +81 -0
  313. data/lib/roby/gui/task_display_configuration.rb +42 -0
  314. data/lib/roby/gui/task_state_at.rb +38 -0
  315. data/lib/roby/hooks.rb +26 -0
  316. data/lib/roby/interface.rb +136 -469
  317. data/lib/roby/interface/async.rb +20 -0
  318. data/lib/roby/interface/async/action_monitor.rb +188 -0
  319. data/lib/roby/interface/async/interface.rb +498 -0
  320. data/lib/roby/interface/async/job_monitor.rb +213 -0
  321. data/lib/roby/interface/async/log.rb +238 -0
  322. data/lib/roby/interface/async/new_job_listener.rb +79 -0
  323. data/lib/roby/interface/async/ui_connector.rb +183 -0
  324. data/lib/roby/interface/client.rb +553 -0
  325. data/lib/roby/interface/command.rb +24 -0
  326. data/lib/roby/interface/command_argument.rb +16 -0
  327. data/lib/roby/interface/command_library.rb +92 -0
  328. data/lib/roby/interface/droby_channel.rb +174 -0
  329. data/lib/roby/interface/exceptions.rb +22 -0
  330. data/lib/roby/interface/interface.rb +655 -0
  331. data/lib/roby/interface/job.rb +47 -0
  332. data/lib/roby/interface/rest.rb +10 -0
  333. data/lib/roby/interface/rest/api.rb +29 -0
  334. data/lib/roby/interface/rest/helpers.rb +24 -0
  335. data/lib/roby/interface/rest/server.rb +212 -0
  336. data/lib/roby/interface/server.rb +154 -0
  337. data/lib/roby/interface/shell_client.rb +468 -0
  338. data/lib/roby/interface/shell_subcommand.rb +24 -0
  339. data/lib/roby/interface/subcommand_client.rb +35 -0
  340. data/lib/roby/interface/tcp.rb +168 -0
  341. data/lib/roby/models/arguments.rb +112 -0
  342. data/lib/roby/models/plan_object.rb +83 -0
  343. data/lib/roby/models/task.rb +835 -0
  344. data/lib/roby/models/task_event.rb +62 -0
  345. data/lib/roby/models/task_service.rb +78 -0
  346. data/lib/roby/or_generator.rb +88 -0
  347. data/lib/roby/plan.rb +1751 -864
  348. data/lib/roby/plan_object.rb +611 -0
  349. data/lib/roby/plan_service.rb +200 -0
  350. data/lib/roby/promise.rb +332 -0
  351. data/lib/roby/queries.rb +23 -0
  352. data/lib/roby/queries/and_matcher.rb +32 -0
  353. data/lib/roby/queries/any.rb +27 -0
  354. data/lib/roby/queries/code_error_matcher.rb +58 -0
  355. data/lib/roby/queries/event_generator_matcher.rb +9 -0
  356. data/lib/roby/queries/execution_exception_matcher.rb +165 -0
  357. data/lib/roby/queries/index.rb +165 -0
  358. data/lib/roby/queries/localized_error_matcher.rb +149 -0
  359. data/lib/roby/queries/matcher_base.rb +107 -0
  360. data/lib/roby/queries/none.rb +27 -0
  361. data/lib/roby/queries/not_matcher.rb +30 -0
  362. data/lib/roby/queries/op_matcher.rb +8 -0
  363. data/lib/roby/queries/or_matcher.rb +30 -0
  364. data/lib/roby/queries/plan_object_matcher.rb +363 -0
  365. data/lib/roby/queries/query.rb +188 -0
  366. data/lib/roby/queries/task_event_generator_matcher.rb +86 -0
  367. data/lib/roby/queries/task_matcher.rb +344 -0
  368. data/lib/roby/relations.rb +42 -678
  369. data/lib/roby/relations/bidirectional_directed_adjacency_graph.rb +492 -0
  370. data/lib/roby/relations/directed_relation_support.rb +268 -0
  371. data/lib/roby/relations/event_relation_graph.rb +19 -0
  372. data/lib/roby/relations/fork_merge_visitor.rb +154 -0
  373. data/lib/roby/relations/graph.rb +533 -0
  374. data/lib/roby/relations/models/directed_relation_support.rb +11 -0
  375. data/lib/roby/relations/models/graph.rb +75 -0
  376. data/lib/roby/relations/models/task_relation_graph.rb +18 -0
  377. data/lib/roby/relations/space.rb +380 -0
  378. data/lib/roby/relations/task_relation_graph.rb +20 -0
  379. data/lib/roby/robot.rb +85 -38
  380. data/lib/roby/schedulers/basic.rb +155 -25
  381. data/lib/roby/schedulers/null.rb +20 -0
  382. data/lib/roby/schedulers/reporting.rb +31 -0
  383. data/lib/roby/schedulers/state.rb +129 -0
  384. data/lib/roby/schedulers/temporal.rb +91 -0
  385. data/lib/roby/singletons.rb +87 -0
  386. data/lib/roby/standalone.rb +4 -2
  387. data/lib/roby/standard_errors.rb +405 -82
  388. data/lib/roby/state.rb +6 -3
  389. data/lib/roby/state/conf_model.rb +5 -0
  390. data/lib/roby/state/events.rb +181 -95
  391. data/lib/roby/state/goal_model.rb +77 -0
  392. data/lib/roby/state/open_struct.rb +591 -0
  393. data/lib/roby/state/open_struct_model.rb +68 -0
  394. data/lib/roby/state/pos.rb +45 -45
  395. data/lib/roby/state/shapes.rb +11 -11
  396. data/lib/roby/state/state_model.rb +303 -0
  397. data/lib/roby/state/task.rb +43 -0
  398. data/lib/roby/support.rb +88 -148
  399. data/lib/roby/task.rb +1361 -1750
  400. data/lib/roby/task_arguments.rb +428 -0
  401. data/lib/roby/task_event.rb +127 -0
  402. data/lib/roby/task_event_generator.rb +337 -0
  403. data/lib/roby/task_service.rb +6 -0
  404. data/lib/roby/task_structure/conflicts.rb +104 -0
  405. data/lib/roby/task_structure/dependency.rb +932 -0
  406. data/lib/roby/task_structure/error_handling.rb +118 -0
  407. data/lib/roby/task_structure/executed_by.rb +234 -0
  408. data/lib/roby/task_structure/planned_by.rb +90 -0
  409. data/lib/roby/tasks/aggregator.rb +37 -0
  410. data/lib/roby/tasks/external_process.rb +275 -0
  411. data/lib/roby/tasks/group.rb +27 -0
  412. data/lib/roby/tasks/null.rb +19 -0
  413. data/lib/roby/tasks/parallel.rb +43 -0
  414. data/lib/roby/tasks/sequence.rb +88 -0
  415. data/lib/roby/tasks/simple.rb +21 -0
  416. data/lib/roby/{thread_task.rb → tasks/thread.rb} +50 -24
  417. data/lib/roby/tasks/timeout.rb +17 -0
  418. data/lib/roby/tasks/virtual.rb +55 -0
  419. data/lib/roby/template_plan.rb +7 -0
  420. data/lib/roby/test/aruba_minitest.rb +74 -0
  421. data/lib/roby/test/assertion.rb +16 -0
  422. data/lib/roby/test/assertions.rb +490 -0
  423. data/lib/roby/test/common.rb +368 -591
  424. data/lib/roby/test/dsl.rb +149 -0
  425. data/lib/roby/test/error.rb +18 -0
  426. data/lib/roby/test/event_reporter.rb +83 -0
  427. data/lib/roby/test/execution_expectations.rb +1134 -0
  428. data/lib/roby/test/expect_execution.rb +151 -0
  429. data/lib/roby/test/minitest_helpers.rb +166 -0
  430. data/lib/roby/test/roby_app_helpers.rb +200 -0
  431. data/lib/roby/test/run_planners.rb +155 -0
  432. data/lib/roby/test/self.rb +112 -0
  433. data/lib/roby/test/spec.rb +198 -0
  434. data/lib/roby/test/tasks/empty_task.rb +4 -4
  435. data/lib/roby/test/tasks/goto.rb +28 -27
  436. data/lib/roby/test/teardown_plans.rb +100 -0
  437. data/lib/roby/test/testcase.rb +239 -307
  438. data/lib/roby/test/tools.rb +159 -155
  439. data/lib/roby/test/validate_state_machine.rb +75 -0
  440. data/lib/roby/transaction.rb +1125 -0
  441. data/lib/roby/transaction/event_generator_proxy.rb +63 -0
  442. data/lib/roby/transaction/plan_object_proxy.rb +99 -0
  443. data/lib/roby/transaction/plan_service_proxy.rb +43 -0
  444. data/lib/roby/transaction/proxying.rb +120 -0
  445. data/lib/roby/transaction/task_event_generator_proxy.rb +19 -0
  446. data/lib/roby/transaction/task_proxy.rb +135 -0
  447. data/lib/roby/until_generator.rb +30 -0
  448. data/lib/roby/version.rb +5 -0
  449. data/lib/roby/yard.rb +169 -0
  450. data/lib/yard-roby.rb +1 -0
  451. data/manifest.xml +32 -6
  452. data/roby.gemspec +59 -0
  453. metadata +788 -587
  454. data/Manifest.txt +0 -321
  455. data/NOTES +0 -4
  456. data/README.txt +0 -166
  457. data/TODO.txt +0 -146
  458. data/app/README.txt +0 -24
  459. data/app/Rakefile +0 -8
  460. data/app/config/ROBOT.rb +0 -5
  461. data/app/config/init.rb +0 -33
  462. data/app/config/roby.yml +0 -3
  463. data/app/controllers/ROBOT.rb +0 -2
  464. data/app/planners/ROBOT/main.rb +0 -6
  465. data/app/planners/main.rb +0 -5
  466. data/app/scripts/distributed +0 -3
  467. data/app/scripts/generate/bookmarks +0 -3
  468. data/app/scripts/replay +0 -3
  469. data/app/scripts/results +0 -3
  470. data/app/scripts/run +0 -3
  471. data/app/scripts/server +0 -3
  472. data/app/scripts/shell +0 -3
  473. data/app/scripts/test +0 -3
  474. data/app/tasks/.gitattributes +0 -0
  475. data/app/tasks/ROBOT/.gitattributes +0 -0
  476. data/bin/roby-shell +0 -25
  477. data/doc/guide/src/basics/app.page +0 -139
  478. data/doc/guide/src/basics/index.page +0 -11
  479. data/doc/guide/src/basics/log_replay/goForward_1.png +0 -0
  480. data/doc/guide/src/basics/log_replay/goForward_2.png +0 -0
  481. data/doc/guide/src/basics/log_replay/goForward_3.png +0 -0
  482. data/doc/guide/src/basics/log_replay/goForward_5.png +0 -0
  483. data/doc/guide/src/basics/log_replay/plan_repair_4.png +0 -0
  484. data/doc/guide/src/basics/log_replay/roby_log_main_window.png +0 -0
  485. data/doc/guide/src/basics/relations_display.page +0 -203
  486. data/doc/guide/src/basics/shell.page +0 -102
  487. data/doc/guide/src/default.css +0 -319
  488. data/doc/guide/src/introduction/index.page +0 -29
  489. data/doc/guide/src/introduction/publications.page +0 -14
  490. data/doc/guide/src/relations/dependency.page +0 -89
  491. data/doc/guide/src/relations/index.page +0 -12
  492. data/ext/droby/dump.cc +0 -175
  493. data/ext/droby/extconf.rb +0 -3
  494. data/ext/graph/algorithm.cc +0 -746
  495. data/ext/graph/extconf.rb +0 -7
  496. data/ext/graph/graph.cc +0 -575
  497. data/ext/graph/graph.hh +0 -183
  498. data/ext/graph/iterator_sequence.hh +0 -102
  499. data/ext/graph/undirected_dfs.hh +0 -226
  500. data/ext/graph/undirected_graph.hh +0 -421
  501. data/lib/roby/app/scripts/generate/bookmarks.rb +0 -162
  502. data/lib/roby/app/scripts/replay.rb +0 -31
  503. data/lib/roby/app/scripts/server.rb +0 -18
  504. data/lib/roby/basic_object.rb +0 -151
  505. data/lib/roby/config.rb +0 -14
  506. data/lib/roby/distributed.rb +0 -36
  507. data/lib/roby/distributed/base.rb +0 -448
  508. data/lib/roby/distributed/communication.rb +0 -875
  509. data/lib/roby/distributed/connection_space.rb +0 -616
  510. data/lib/roby/distributed/distributed_object.rb +0 -206
  511. data/lib/roby/distributed/drb.rb +0 -62
  512. data/lib/roby/distributed/notifications.rb +0 -531
  513. data/lib/roby/distributed/peer.rb +0 -555
  514. data/lib/roby/distributed/protocol.rb +0 -529
  515. data/lib/roby/distributed/proxy.rb +0 -343
  516. data/lib/roby/distributed/subscription.rb +0 -311
  517. data/lib/roby/distributed/transaction.rb +0 -498
  518. data/lib/roby/external_process_task.rb +0 -225
  519. data/lib/roby/graph.rb +0 -160
  520. data/lib/roby/log.rb +0 -3
  521. data/lib/roby/log/chronicle.rb +0 -303
  522. data/lib/roby/log/console.rb +0 -74
  523. data/lib/roby/log/data_stream.rb +0 -275
  524. data/lib/roby/log/dot.rb +0 -279
  525. data/lib/roby/log/event_stream.rb +0 -161
  526. data/lib/roby/log/file.rb +0 -396
  527. data/lib/roby/log/gui/basic_display.ui +0 -83
  528. data/lib/roby/log/gui/basic_display_ui.rb +0 -89
  529. data/lib/roby/log/gui/chronicle.rb +0 -26
  530. data/lib/roby/log/gui/chronicle_view.rb +0 -40
  531. data/lib/roby/log/gui/chronicle_view.ui +0 -70
  532. data/lib/roby/log/gui/chronicle_view_ui.rb +0 -90
  533. data/lib/roby/log/gui/data_displays.rb +0 -171
  534. data/lib/roby/log/gui/data_displays.ui +0 -155
  535. data/lib/roby/log/gui/data_displays_ui.rb +0 -146
  536. data/lib/roby/log/gui/notifications.rb +0 -26
  537. data/lib/roby/log/gui/relations.rb +0 -269
  538. data/lib/roby/log/gui/relations.ui +0 -123
  539. data/lib/roby/log/gui/relations_ui.rb +0 -120
  540. data/lib/roby/log/gui/relations_view.rb +0 -185
  541. data/lib/roby/log/gui/relations_view.ui +0 -149
  542. data/lib/roby/log/gui/relations_view_ui.rb +0 -144
  543. data/lib/roby/log/gui/replay.rb +0 -366
  544. data/lib/roby/log/gui/replay_controls.rb +0 -206
  545. data/lib/roby/log/gui/replay_controls.ui +0 -282
  546. data/lib/roby/log/gui/replay_controls_ui.rb +0 -249
  547. data/lib/roby/log/gui/runtime.rb +0 -130
  548. data/lib/roby/log/hooks.rb +0 -186
  549. data/lib/roby/log/logger.rb +0 -203
  550. data/lib/roby/log/notifications.rb +0 -244
  551. data/lib/roby/log/plan_rebuilder.rb +0 -468
  552. data/lib/roby/log/relations.rb +0 -1084
  553. data/lib/roby/log/server.rb +0 -547
  554. data/lib/roby/log/sqlite.rb +0 -47
  555. data/lib/roby/log/timings.rb +0 -233
  556. data/lib/roby/plan-object.rb +0 -371
  557. data/lib/roby/planning.rb +0 -13
  558. data/lib/roby/planning/loops.rb +0 -309
  559. data/lib/roby/planning/model.rb +0 -1012
  560. data/lib/roby/planning/task.rb +0 -180
  561. data/lib/roby/query.rb +0 -655
  562. data/lib/roby/relations/conflicts.rb +0 -67
  563. data/lib/roby/relations/dependency.rb +0 -358
  564. data/lib/roby/relations/ensured.rb +0 -19
  565. data/lib/roby/relations/error_handling.rb +0 -22
  566. data/lib/roby/relations/events.rb +0 -7
  567. data/lib/roby/relations/executed_by.rb +0 -208
  568. data/lib/roby/relations/influence.rb +0 -10
  569. data/lib/roby/relations/planned_by.rb +0 -63
  570. data/lib/roby/state/information.rb +0 -55
  571. data/lib/roby/state/state.rb +0 -367
  572. data/lib/roby/task-operations.rb +0 -186
  573. data/lib/roby/task_index.rb +0 -80
  574. data/lib/roby/test/distributed.rb +0 -230
  575. data/lib/roby/test/tasks/simple_task.rb +0 -23
  576. data/lib/roby/transactions.rb +0 -507
  577. data/lib/roby/transactions/proxy.rb +0 -325
  578. data/plugins/fault_injection/History.txt +0 -4
  579. data/plugins/fault_injection/README.txt +0 -34
  580. data/plugins/fault_injection/Rakefile +0 -12
  581. data/plugins/fault_injection/TODO.txt +0 -0
  582. data/plugins/fault_injection/app.rb +0 -52
  583. data/plugins/fault_injection/fault_injection.rb +0 -89
  584. data/plugins/fault_injection/test/test_fault_injection.rb +0 -78
  585. data/plugins/subsystems/README.txt +0 -37
  586. data/plugins/subsystems/Rakefile +0 -13
  587. data/plugins/subsystems/app.rb +0 -182
  588. data/plugins/subsystems/test/app/README +0 -24
  589. data/plugins/subsystems/test/app/Rakefile +0 -8
  590. data/plugins/subsystems/test/app/config/app.yml +0 -71
  591. data/plugins/subsystems/test/app/config/init.rb +0 -12
  592. data/plugins/subsystems/test/app/config/roby.yml +0 -3
  593. data/plugins/subsystems/test/app/planners/main.rb +0 -20
  594. data/plugins/subsystems/test/app/scripts/distributed +0 -3
  595. data/plugins/subsystems/test/app/scripts/replay +0 -3
  596. data/plugins/subsystems/test/app/scripts/results +0 -3
  597. data/plugins/subsystems/test/app/scripts/run +0 -3
  598. data/plugins/subsystems/test/app/scripts/server +0 -3
  599. data/plugins/subsystems/test/app/scripts/shell +0 -3
  600. data/plugins/subsystems/test/app/scripts/test +0 -3
  601. data/plugins/subsystems/test/app/tasks/services.rb +0 -15
  602. data/plugins/subsystems/test/test_subsystems.rb +0 -78
  603. data/test/distributed/test_communication.rb +0 -195
  604. data/test/distributed/test_connection.rb +0 -284
  605. data/test/distributed/test_execution.rb +0 -378
  606. data/test/distributed/test_mixed_plan.rb +0 -341
  607. data/test/distributed/test_plan_notifications.rb +0 -238
  608. data/test/distributed/test_protocol.rb +0 -525
  609. data/test/distributed/test_query.rb +0 -106
  610. data/test/distributed/test_remote_plan.rb +0 -491
  611. data/test/distributed/test_transaction.rb +0 -466
  612. data/test/mockups/external_process +0 -28
  613. data/test/mockups/tasks.rb +0 -27
  614. data/test/planning/test_loops.rb +0 -432
  615. data/test/planning/test_model.rb +0 -427
  616. data/test/planning/test_task.rb +0 -126
  617. data/test/relations/test_conflicts.rb +0 -42
  618. data/test/relations/test_dependency.rb +0 -324
  619. data/test/relations/test_ensured.rb +0 -38
  620. data/test/relations/test_executed_by.rb +0 -224
  621. data/test/relations/test_planned_by.rb +0 -56
  622. data/test/suite_core.rb +0 -29
  623. data/test/suite_distributed.rb +0 -10
  624. data/test/suite_planning.rb +0 -4
  625. data/test/suite_relations.rb +0 -8
  626. data/test/tasks/test_external_process.rb +0 -126
  627. data/test/tasks/test_thread_task.rb +0 -70
  628. data/test/test_bgl.rb +0 -528
  629. data/test/test_event.rb +0 -969
  630. data/test/test_exceptions.rb +0 -591
  631. data/test/test_execution_engine.rb +0 -987
  632. data/test/test_gui.rb +0 -20
  633. data/test/test_interface.rb +0 -43
  634. data/test/test_log.rb +0 -125
  635. data/test/test_log_server.rb +0 -133
  636. data/test/test_plan.rb +0 -418
  637. data/test/test_query.rb +0 -424
  638. data/test/test_relations.rb +0 -260
  639. data/test/test_state.rb +0 -432
  640. data/test/test_support.rb +0 -16
  641. data/test/test_task.rb +0 -1181
  642. data/test/test_testcase.rb +0 -138
  643. data/test/test_transactions.rb +0 -610
  644. data/test/test_transactions_proxy.rb +0 -216
@@ -0,0 +1,100 @@
1
+ ---
2
+ title: Error Handling
3
+ sort_info: 50
4
+ ---
5
+
6
+ Error representation and handling is a very important aspect of Roby. It is
7
+ tightly integrated and -- by default -- is meant to let __nothing pass__.
8
+ Obviously, the "handling" part being there, and pretty powerful to allow errors
9
+ to pass unnoticed ... by the external observer (a.k.a., safely).
10
+
11
+ This page will outline the general principles of error handling in Roby.
12
+
13
+ Errors in Roby
14
+ --------------
15
+ There is mostly three sources of errors in Roby:
16
+
17
+ 1. constraint violations in the plan. Each relation allows to define
18
+ constraints on what is acceptable and what is not. These constraints are
19
+ checked at the end of each execution cycles, and corresponding errors are
20
+ generated.
21
+ 2. code errors (i.e. Ruby exceptions) raised by the code blocks that are
22
+ part of the Roby application (event commands, event handlers, ...)
23
+ 3. code errors (i.e. Ruby exceptions) raised by the framework itself
24
+
25
+ The last case is a pretty hard one. The error is registered as a framework
26
+ error and, as we will see, not much can be done. In effect, the Roby application
27
+ will shutdown, trying to stop as much things as possible in the process.
28
+
29
+ In the first two cases, Roby will create a __localized error__. I.e., an error
30
+ is created and registered, and assigned to a _Roby plan object_. This plan
31
+ object is considered to be the source of the error. Which object is associated
32
+ with the error will be described in the documentation for each error that gets
33
+ generated. These types of errors will not cause the Roby application to stop, as
34
+ they are an integral part of the framework's error handling mechanisms.
35
+ There are actuall two: events and exceptions.
36
+
37
+ What is an error is a relative concept
38
+ --------------------------------------
39
+ The concept of expressing constraints through relations means that what can be
40
+ an error for a given relation is not for another. For instance, the dependency
41
+ relation can specify in one case that the failure event is an error, while in
42
+ another case it might be an expected outcome of the task (it sounds weird, but
43
+ it is possible as long as the emission of the failure event does not change
44
+ the overall system's ability to reach its goal).
45
+
46
+ Ruby exceptions in tasks
47
+ ------------------------
48
+ Whenever an exception is raised from within a "user" code block that is
49
+ associated with a task (i.e. an event command, event handler, ...), this
50
+ exception is isolated from the rest of the framework by Roby. It then causes the
51
+ emission of an internal_error event on the task. This emission causes the task
52
+ to be stopped if the error was not within the task's own stopping mechanism. If
53
+ the error **was** within the task's own stopping mechanism, then it is
54
+ quarantined...
55
+
56
+ Quarantined tasks are tasks that failed to be stopped. Roby puts then
57
+ "on the side" and removes all relations from them. These tasks are a bit of a
58
+ stingy thing, as they are still running and could therefore cause problems.
59
+ However, it is up to the system designer to decide how to handle them, as there
60
+ are no generic ways to handle the problem.
61
+
62
+ Localized errors
63
+ ----------
64
+ Exceptions are generated either by code errors in free events, or by constraint
65
+ violations from the relations (since core errors in tasks are expressed through
66
+ the task's event mechanism).
67
+
68
+ As stated before, localized errors are all assigned a source. This source can be
69
+ an event or a task. They are handled by looking for __exception handlers__
70
+ across the task hierarchy. This propagation involves the
71
+ [dependency](../task_relations/dependency.html) and
72
+ [planned_by](../task_relations/planned_by.html) relations. The lookup goes up in the
73
+ dependency relation and looks for each task it finds for (1) a handler in the
74
+ task itself or (2) a handler in the planning task of that task (i.e. in the
75
+ child in the planned_by relation).
76
+
77
+ The diagram below, for instance, shows in which order the exception handlers
78
+ are looked for when the dependency relation between the task in red and its
79
+ parent generates a dependency constraint violation. The black arrows between
80
+ tasks are dependencies, the green arrow planned_by relations.
81
+
82
+ ![Lookup order for exception handler](exception_propagation.png)
83
+
84
+ Handling constraint errors "on the spot"
85
+ ----------------------------------------
86
+ Since constraint violations are checked at the end of the execution cycle, no
87
+ error is going to be generated if a constraint is violated but **in the same
88
+ cycle** the plan is changed to repair that fault. This is actually a very
89
+ important error handling mechanism is Roby: modifying the plan "on the spot" to
90
+ avoid errors. For instance, this is why restarting a process that crashed with
91
+ a segmentation fault works, since the "old" faulty plan (where the process
92
+ crashed) is, in the same cycle, replaced by a "new" repaired plan.
93
+
94
+ Conclusion
95
+ ----------
96
+ Well, that's almost all ...
97
+
98
+ There is one thing left to talk about: default policies, and how to override
99
+ them. That's the subject of the [next page](policy.html)
100
+
@@ -0,0 +1,445 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <svg
3
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
4
+ xmlns:cc="http://creativecommons.org/ns#"
5
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
6
+ xmlns:svg="http://www.w3.org/2000/svg"
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
9
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
10
+ width="1789.64mm"
11
+ height="547.511mm"
12
+ viewBox="0 0 5073 1552"
13
+ version="1.2"
14
+ id="svg9570"
15
+ sodipodi:version="0.32"
16
+ inkscape:version="0.48.2 r9819"
17
+ sodipodi:docname="exception_propagation.svg"
18
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
19
+ inkscape:export-filename="/media/Data/rock/imoby/tools/roby/doc/guide/src/concepts/exception_propagation.png"
20
+ inkscape:export-xdpi="74.851677"
21
+ inkscape:export-ydpi="74.851677">
22
+ <sodipodi:namedview
23
+ inkscape:window-height="729"
24
+ inkscape:window-width="1016"
25
+ inkscape:pageshadow="2"
26
+ inkscape:pageopacity="0.0"
27
+ guidetolerance="10.0"
28
+ gridtolerance="10.0"
29
+ objecttolerance="10.0"
30
+ borderopacity="1.0"
31
+ bordercolor="#666666"
32
+ pagecolor="#ffffff"
33
+ id="base"
34
+ inkscape:zoom="1.4059074"
35
+ inkscape:cx="3207.3464"
36
+ inkscape:cy="1312.6771"
37
+ inkscape:window-x="0"
38
+ inkscape:window-y="15"
39
+ inkscape:current-layer="layer1"
40
+ showgrid="false"
41
+ inkscape:window-maximized="0" />
42
+ <metadata
43
+ id="metadata10489">
44
+ <rdf:RDF>
45
+ <cc:Work
46
+ rdf:about="">
47
+ <dc:format>image/svg+xml</dc:format>
48
+ <dc:type
49
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
50
+ <dc:title>Qt Svg Document</dc:title>
51
+ </cc:Work>
52
+ </rdf:RDF>
53
+ </metadata>
54
+ <title
55
+ id="title9572">Qt Svg Document</title>
56
+ <desc
57
+ id="desc9574">Generated with Qt</desc>
58
+ <defs
59
+ id="defs9576" />
60
+ <g
61
+ inkscape:groupmode="layer"
62
+ id="layer2"
63
+ inkscape:label="Background">
64
+ <path
65
+ id="path4458"
66
+ d="M 2723.5456,574.15476 L 2714.7334,572.65805 L 2719.4557,566.20702 L 2723.5456,574.15476"
67
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:#bfbfbf;fill-opacity:1;fill-rule:evenodd;stroke:#bfbfbf;stroke-width:0.79947054;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif" />
68
+ <polyline
69
+ transform="matrix(0.4428554,0.3484874,-0.201539,0.7657556,2727.9435,577.80116)"
70
+ id="polyline4464"
71
+ points="-172.493,0 0,0 "
72
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:none;fill-rule:evenodd;stroke:#bfbfbf;stroke-width:1.24954975;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif" />
73
+ <path
74
+ id="path4518"
75
+ d="M 2547.0555,531.72201 L 2553.9794,526.06938 L 2555.7319,533.86965 L 2547.0555,531.72201"
76
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:#bfbfbf;fill-opacity:1;fill-rule:evenodd;stroke:#bfbfbf;stroke-width:0.79947084;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif" />
77
+ <polyline
78
+ transform="matrix(-0.2923258,3.9117307e-2,-6.240655e-2,-0.183234,2547.5645,530.96034)"
79
+ id="polyline4524"
80
+ points="-353.797,0 0,0 "
81
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:none;fill-rule:evenodd;stroke:#bfbfbf;stroke-width:3.37822461;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif" />
82
+ <path
83
+ id="path4814"
84
+ d="M 2723.2398,574.45246 L 2739.2292,574.45246 L 2739.2292,582.44716 L 2723.2398,582.44716 L 2723.2398,574.45246"
85
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:#b6f8ff;fill-opacity:1;fill-rule:evenodd;stroke:#b6f8ff;stroke-width:0.79947102;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif" />
86
+ <text
87
+ font-style="normal"
88
+ font-weight="400"
89
+ x="2690.8835"
90
+ y="592.83319"
91
+ id="text4826"
92
+ style="font-size:8.99404907px;font-style:normal;font-weight:400;fill:#7f7f7f;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif"
93
+ font-size="9pt">Bitmap::Perception</text>
94
+ <text
95
+ font-style="normal"
96
+ font-weight="400"
97
+ x="2504.999"
98
+ y="548.86316"
99
+ id="text4982"
100
+ style="font-size:8.99404907px;font-style:normal;font-weight:400;fill:#7f7f7f;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif"
101
+ font-size="9pt">Dtm::Mapping</text>
102
+ <path
103
+ id="path12820"
104
+ d="M 2461.8199,527.13845 L 2457.8203,519.13921 L 2465.8195,519.13921 L 2461.8199,527.13845"
105
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:#bfbfbf;fill-opacity:1;fill-rule:evenodd;stroke:#bfbfbf;stroke-width:0.79992402;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif" />
106
+ <polyline
107
+ transform="matrix(0,0.799924,-0.799924,0,2461.8199,527.13845)"
108
+ id="polyline12824"
109
+ points="-71,0 0,0 "
110
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:none;fill-rule:evenodd;stroke:#bfbfbf;stroke-width:1;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif" />
111
+ <path
112
+ id="path12828"
113
+ d="M 2414.445,495.35175 L 2419.6103,488.05078 L 2423.385,495.10342 L 2414.445,495.35175"
114
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:#bfbfbf;fill-opacity:1;fill-rule:evenodd;stroke:#bfbfbf;stroke-width:0.79992318;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif" />
115
+ <polyline
116
+ transform="matrix(-0.2880935,0.1555089,-0.1541908,-0.2905563,2418.4686,493.74225)"
117
+ id="polyline12832"
118
+ points="-150.463,0 0,0 "
119
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:none;fill-rule:evenodd;stroke:#bfbfbf;stroke-width:2.43764114;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif" />
120
+ <path
121
+ id="path12836"
122
+ d="M 2467.7765,465.23057 L 2470.5652,456.73306 L 2476.2477,462.36304 L 2467.7765,465.23057"
123
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:#bfbfbf;fill-opacity:1;fill-rule:evenodd;stroke:#bfbfbf;stroke-width:0.79992372;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif" />
124
+ <path
125
+ id="path12840"
126
+ d="M 2453.8207,527.13883 L 2469.8191,527.13883 L 2469.8191,535.13807 L 2453.8207,535.13807 L 2453.8207,527.13883"
127
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:#d7fed2;fill-opacity:1;fill-rule:evenodd;stroke:#d7fed2;stroke-width:0.79992402;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif" />
128
+ <text
129
+ font-style="normal"
130
+ font-weight="400"
131
+ x="2437.8198"
132
+ y="543.93695"
133
+ id="text12844"
134
+ style="font-size:8.99914455px;font-style:normal;font-weight:400;fill:#7f7f7f;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif"
135
+ font-size="9pt">P3d::Track</text>
136
+ <path
137
+ id="path12848"
138
+ d="M 2398.9758,495.35213 L 2414.9742,495.35213 L 2414.9742,503.35137 L 2398.9758,503.35137 L 2398.9758,495.35213"
139
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:#d7fed2;fill-opacity:1;fill-rule:evenodd;stroke:#d7fed2;stroke-width:0.79992402;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif" />
140
+ <text
141
+ font-style="normal"
142
+ font-weight="400"
143
+ x="2350.585"
144
+ y="512.15021"
145
+ id="text12852"
146
+ style="font-size:8.99914455px;font-style:normal;font-weight:400;fill:#7f7f7f;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif"
147
+ font-size="9pt">Rflex::TrackSpeedStart</text>
148
+ <text
149
+ font-style="normal"
150
+ font-weight="400"
151
+ x="2425.8198"
152
+ y="483.14694"
153
+ id="text12860"
154
+ style="font-size:8.99914455px;font-style:normal;font-weight:400;fill:#7f7f7f;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif"
155
+ font-size="9pt">P3d::TrackPath</text>
156
+ <polyline
157
+ transform="matrix(-0.3267512,0.2811949,-0.1748808,-0.5253908,2469.1758,464.04002)"
158
+ id="polyline12872"
159
+ points="-150.463,0 0,0 "
160
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:none;fill-rule:evenodd;stroke:#bfbfbf;stroke-width:1.70216584;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif" />
161
+ <polyline
162
+ transform="matrix(0.4577391,0.3795657,0.244987,-0.7091891,2530.4374,527.07023)"
163
+ id="polyline12884"
164
+ points="-150.463,0 0,0 "
165
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:none;fill-rule:evenodd;stroke:#bfbfbf;stroke-width:1.23783183;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif" />
166
+ <path
167
+ id="path12888"
168
+ d="M 2534.1481,530.05069 L 2525.5752,527.52081 L 2531.0283,521.67447 L 2534.1481,530.05069"
169
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:#bfbfbf;fill-opacity:1;fill-rule:evenodd;stroke:#bfbfbf;stroke-width:0.7994709;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif" />
170
+ <path
171
+ id="path4970"
172
+ d="M 2530.9655,530.48241 L 2546.9549,530.48241 L 2546.9549,538.47712 L 2530.9655,538.47712 L 2530.9655,530.48241"
173
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:#d7fed2;fill-opacity:1;fill-rule:evenodd;stroke:#d7fed2;stroke-width:0.79947102;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif" />
174
+ <path
175
+ id="path12856"
176
+ d="M 2453.8207,466.34883 L 2469.8191,466.34883 L 2469.8191,474.34807 L 2453.8207,474.34807 L 2453.8207,466.34883"
177
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:#d7fed2;fill-opacity:1;fill-rule:evenodd;stroke:#d7fed2;stroke-width:0.79992402;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif" />
178
+ </g>
179
+ <g
180
+ inkscape:groupmode="layer"
181
+ id="layer1"
182
+ inkscape:label="Active">
183
+ <polyline
184
+ transform="matrix(-0.4741391,0.3608743,-0.2170756,-0.788226,2570.1986,579.60633)"
185
+ id="polyline4500"
186
+ points="-171.572,0 0,0 "
187
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:none;fill-rule:evenodd;stroke:#808080;stroke-width:1.18905449;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif" />
188
+ <path
189
+ id="path4840"
190
+ d="M 2563.3229,575.59052 L 2579.3123,575.59052 L 2579.3123,583.58522 L 2563.3229,583.58522 L 2563.3229,575.59052"
191
+ style="font-size:11.25px;font-style:normal;font-weight:400;opacity:1;color:#000000;fill:#e2a8a8;fill-opacity:1;fill-rule:evenodd;stroke:#e2a8a8;stroke-width:0.79763776;stroke-linecap:square;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans Serif" />
192
+ <path
193
+ id="path4494"
194
+ d="M 2574.7366,575.59554 L 2578.6063,567.53829 L 2583.5042,573.85699 L 2574.7366,575.59554"
195
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:0.7994706;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif" />
196
+ <text
197
+ id="text4956"
198
+ font-weight="400"
199
+ x="2531.4473"
200
+ y="593.12714"
201
+ font-style="normal"
202
+ font-size="9pt"
203
+ style="font-size:8.99404907px;font-style:normal;font-weight:400;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif">Pom::Localization</text>
204
+ <path
205
+ id="path4650"
206
+ d="M 2651.5506,574.45181 L 2647.5532,566.4571 L 2655.548,566.4571 L 2651.5506,574.45181"
207
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:#32ba21;fill-opacity:1;fill-rule:evenodd;stroke:#32ba21;stroke-width:0.79947102;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif" />
208
+ <polyline
209
+ transform="matrix(0,0.799471,-0.799471,0,2651.5506,574.45181)"
210
+ id="polyline4656"
211
+ points="-71,0 0,0 "
212
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:none;fill-rule:evenodd;stroke:#32ba21;stroke-width:1;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif" />
213
+ <text
214
+ font-style="normal"
215
+ font-weight="400"
216
+ x="2616.3796"
217
+ y="592.83319"
218
+ id="text4852"
219
+ style="font-size:8.99404907px;font-style:normal;font-weight:400;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif"
220
+ font-size="9pt">PlanningLoop</text>
221
+ <path
222
+ id="path4480"
223
+ d="M 2642.7671,574.45246 L 2658.7565,574.45246 L 2658.7565,582.44716 L 2642.7671,582.44716 L 2642.7671,574.45246"
224
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:#b0ffa6;fill-opacity:1;fill-rule:evenodd;stroke:#b0ffa6;stroke-width:0.79947102;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif;opacity:1;color:#000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
225
+ <polyline
226
+ transform="matrix(0.1579588,0.1145535,0.1866044,-9.696833e-2,2651.3002,517.41903)"
227
+ id="polyline4416"
228
+ points="-292.168,0 0,0 "
229
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:none;fill-rule:evenodd;stroke:#808080;stroke-width:4.17359114;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif" />
230
+ <path
231
+ id="path4410"
232
+ d="M 2646.1957,513.56338 L 2637.4774,511.59216 L 2642.5417,505.40606 L 2646.1957,513.56338"
233
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:0.79947084;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif" />
234
+ <g
235
+ id="g4081">
236
+ <path
237
+ d="M 2643.5559,513.69238 L 2659.5453,513.69238 L 2659.5453,521.6871 L 2643.5559,521.6871 L 2643.5559,513.69238"
238
+ id="path4892"
239
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:#b0ffa6;fill-opacity:1;fill-rule:evenodd;stroke:#b0ffa6;stroke-width:0.79947102;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif" />
240
+ <text
241
+ id="text4904"
242
+ font-weight="400"
243
+ x="2588.7825"
244
+ y="532.99805"
245
+ font-style="normal"
246
+ font-size="9pt"
247
+ style="font-size:8.99404907px;font-style:normal;font-weight:400;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif">Genom::Bitmap::Mapping</text>
248
+ </g>
249
+ <path
250
+ id="path12800"
251
+ d="M 2551.8081,449.45119 L 2543.2316,446.9159 L 2548.6904,441.06878 L 2551.8081,449.45119"
252
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:0.79992372;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif" />
253
+ <polyline
254
+ transform="matrix(0.6432101,0.4305429,-0.9603687,0.2883576,2605.7585,484.273)"
255
+ id="polyline12864"
256
+ points="-71,0 0,0 "
257
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:none;fill-rule:evenodd;stroke:#32ba21;stroke-width:1.03359842;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif" />
258
+ <g
259
+ transform="translate(-16.26311,-16.428211)"
260
+ id="g4073">
261
+ <text
262
+ id="text12816"
263
+ font-weight="400"
264
+ x="2554.3665"
265
+ y="482.345"
266
+ font-style="normal"
267
+ font-size="9pt"
268
+ style="font-size:8.99914455px;font-style:normal;font-weight:400;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif">Nav::Path</text>
269
+ <path
270
+ d="M 2567.9006,465.5469 L 2583.899,465.5469 L 2583.899,473.54614 L 2567.9006,473.54614 L 2567.9006,465.5469"
271
+ id="path12812"
272
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:#b0ffa6;fill-opacity:1;fill-rule:evenodd;stroke:#b0ffa6;stroke-width:0.79992402;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif" />
273
+ </g>
274
+ <polyline
275
+ transform="matrix(0.202448,0.1739448,0.1083524,-0.3250024,2550.1157,447.90285)"
276
+ id="polyline12880"
277
+ points="-150.463,0 0,0 "
278
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:none;fill-rule:evenodd;stroke:#808080;stroke-width:2.74948716;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif" />
279
+ <g
280
+ id="g4077">
281
+ <text
282
+ id="text12808"
283
+ font-weight="400"
284
+ x="2490.417"
285
+ y="432.56717"
286
+ font-style="normal"
287
+ font-size="9pt"
288
+ style="font-size:8.99914455px;font-style:normal;font-weight:400;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif">Nav::MoveTo</text>
289
+ <path
290
+ d="M 2511.0015,415.76906 L 2526.9999,415.76906 L 2526.9999,423.7683 L 2511.0015,423.7683 L 2511.0015,415.76906"
291
+ id="path12804"
292
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:#b0ffa6;fill-opacity:1;fill-rule:evenodd;stroke:#b0ffa6;stroke-width:0.79992402;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif" />
293
+ </g>
294
+ <path
295
+ id="path12868"
296
+ d="M 2600.3739,481.40568 L 2591.5683,479.8709 L 2596.3183,473.44033 L 2600.3739,481.40568"
297
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:#32ba21;fill-opacity:1;fill-rule:evenodd;stroke:#32ba21;stroke-width:0.79947066;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif" />
298
+ <g
299
+ transform="translate(-26.375362,-83.681503)"
300
+ id="g4069">
301
+ <text
302
+ id="text4748"
303
+ font-weight="400"
304
+ x="2590.7195"
305
+ y="583.60962"
306
+ font-style="normal"
307
+ font-size="9pt"
308
+ style="font-size:8.99404907px;font-style:normal;font-weight:400;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif">Nav::PathPlanning</text>
309
+ <path
310
+ d="M 2623.6086,563.74449 L 2639.598,563.74449 L 2639.598,571.73919 L 2623.6086,571.73919 L 2623.6086,563.74449"
311
+ id="path4736"
312
+ style="font-size:11.25px;font-style:normal;font-weight:400;fill:#b0ffa6;fill-opacity:1;fill-rule:evenodd;stroke:#b0ffa6;stroke-width:0.79947102;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:Sans Serif" />
313
+ </g>
314
+ <g
315
+ id="g7390"
316
+ transform="translate(225.3351,-141.11895)">
317
+ <path
318
+ transform="matrix(0.84,0,0,0.84,383.98842,82.018577)"
319
+ d="m 2451.199,678.46918 c 0,5.55548 -4.5036,10.05909 -10.0591,10.05909 -5.5555,0 -10.0591,-4.50361 -10.0591,-10.05909 0,-5.55548 4.5036,-10.05909 10.0591,-10.05909 5.5555,0 10.0591,4.50361 10.0591,10.05909 z"
320
+ sodipodi:ry="10.05909"
321
+ sodipodi:rx="10.05909"
322
+ sodipodi:cy="678.46918"
323
+ sodipodi:cx="2441.1399"
324
+ id="path6338"
325
+ style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.38095474;stroke-linecap:square;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
326
+ sodipodi:type="arc" />
327
+ <text
328
+ sodipodi:linespacing="125%"
329
+ id="text6334"
330
+ y="655.57776"
331
+ x="2434.3237"
332
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
333
+ xml:space="preserve"><tspan
334
+ style="font-weight:bold"
335
+ y="655.57776"
336
+ x="2434.3237"
337
+ id="tspan6336"
338
+ sodipodi:role="line">1</tspan></text>
339
+ </g>
340
+ <g
341
+ id="g7395"
342
+ transform="translate(188.31765,-80.909065)">
343
+ <path
344
+ transform="matrix(0.84,0,0,0.84,421.00587,82.018577)"
345
+ d="m 2451.199,678.46918 c 0,5.55548 -4.5036,10.05909 -10.0591,10.05909 -5.5555,0 -10.0591,-4.50361 -10.0591,-10.05909 0,-5.55548 4.5036,-10.05909 10.0591,-10.05909 5.5555,0 10.0591,4.50361 10.0591,10.05909 z"
346
+ sodipodi:ry="10.05909"
347
+ sodipodi:rx="10.05909"
348
+ sodipodi:cy="678.46918"
349
+ sodipodi:cx="2441.1399"
350
+ id="path7315"
351
+ style="opacity:1;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.38095474;stroke-linecap:square;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
352
+ sodipodi:type="arc" />
353
+ <text
354
+ sodipodi:linespacing="125%"
355
+ id="text7311"
356
+ y="655.57776"
357
+ x="2471.3411"
358
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
359
+ xml:space="preserve"><tspan
360
+ style="font-weight:bold"
361
+ y="655.57776"
362
+ x="2471.3411"
363
+ id="tspan7313"
364
+ sodipodi:role="line">2</tspan></text>
365
+ </g>
366
+ <g
367
+ id="g7400"
368
+ transform="translate(107.08436,-174.79869)">
369
+ <path
370
+ transform="matrix(0.84,0,0,0.84,455.48254,82.026305)"
371
+ d="m 2451.199,678.46918 c 0,5.55548 -4.5036,10.05909 -10.0591,10.05909 -5.5555,0 -10.0591,-4.50361 -10.0591,-10.05909 0,-5.55548 4.5036,-10.05909 10.0591,-10.05909 5.5555,0 10.0591,4.50361 10.0591,10.05909 z"
372
+ sodipodi:ry="10.05909"
373
+ sodipodi:rx="10.05909"
374
+ sodipodi:cy="678.46918"
375
+ sodipodi:cx="2441.1399"
376
+ id="path7326"
377
+ style="opacity:1;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.38095474;stroke-linecap:square;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
378
+ sodipodi:type="arc" />
379
+ <text
380
+ sodipodi:linespacing="125%"
381
+ id="text7322"
382
+ y="655.58551"
383
+ x="2505.8176"
384
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
385
+ xml:space="preserve"><tspan
386
+ style="font-weight:bold"
387
+ y="655.58551"
388
+ x="2505.8176"
389
+ id="tspan7324"
390
+ sodipodi:role="line">3</tspan></text>
391
+ </g>
392
+ <g
393
+ id="g7405"
394
+ transform="translate(29.02043,-204.28107)">
395
+ <path
396
+ transform="matrix(0.84,0,0,0.84,488.77068,80.603736)"
397
+ d="m 2451.199,678.46918 c 0,5.55548 -4.5036,10.05909 -10.0591,10.05909 -5.5555,0 -10.0591,-4.50361 -10.0591,-10.05909 0,-5.55548 4.5036,-10.05909 10.0591,-10.05909 5.5555,0 10.0591,4.50361 10.0591,10.05909 z"
398
+ sodipodi:ry="10.05909"
399
+ sodipodi:rx="10.05909"
400
+ sodipodi:cy="678.46918"
401
+ sodipodi:cx="2441.1399"
402
+ id="path7332"
403
+ style="opacity:1;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.38095474;stroke-linecap:square;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
404
+ sodipodi:type="arc" />
405
+ <text
406
+ sodipodi:linespacing="125%"
407
+ id="text7328"
408
+ y="654.16296"
409
+ x="2539.1057"
410
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
411
+ xml:space="preserve"><tspan
412
+ style="font-weight:bold"
413
+ y="654.16296"
414
+ x="2539.1057"
415
+ id="tspan7330"
416
+ sodipodi:role="line">4</tspan></text>
417
+ </g>
418
+ <g
419
+ id="g7410"
420
+ transform="translate(-44.739049,-238.42275)">
421
+ <path
422
+ transform="matrix(0.84,0,0,0.84,521.20528,80.603744)"
423
+ d="m 2451.199,678.46918 c 0,5.55548 -4.5036,10.05909 -10.0591,10.05909 -5.5555,0 -10.0591,-4.50361 -10.0591,-10.05909 0,-5.55548 4.5036,-10.05909 10.0591,-10.05909 5.5555,0 10.0591,4.50361 10.0591,10.05909 z"
424
+ sodipodi:ry="10.05909"
425
+ sodipodi:rx="10.05909"
426
+ sodipodi:cy="678.46918"
427
+ sodipodi:cx="2441.1399"
428
+ id="path7338"
429
+ style="opacity:1;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.38095474;stroke-linecap:square;stroke-linejoin:bevel;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
430
+ sodipodi:type="arc" />
431
+ <text
432
+ sodipodi:linespacing="125%"
433
+ id="text7334"
434
+ y="654.16296"
435
+ x="2571.5403"
436
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
437
+ xml:space="preserve"><tspan
438
+ style="font-weight:bold"
439
+ y="654.16296"
440
+ x="2571.5403"
441
+ id="tspan7336"
442
+ sodipodi:role="line">5</tspan></text>
443
+ </g>
444
+ </g>
445
+ </svg>