summaryrefslogtreecommitdiffstats
path: root/signaling
diff options
context:
space:
mode:
authorRomain Forlot <romain.forlot@iot.bzh>2017-06-23 16:35:29 +0200
committerRomain Forlot <romain.forlot@iot.bzh>2017-06-23 16:35:29 +0200
commiteca44ae331bfe8bc4021541d5bf00c0fd8525f08 (patch)
treec9f779290ea46f6616c20ad00be4c49a3102735e /signaling
parent17d1a7899fcaea7c27c9a4d12395cc03f0f704db (diff)
Update signaling chapter
Change-Id: Icbaa18b740403a1e43ef6b61fbdc45ba3fad1437 Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
Diffstat (limited to 'signaling')
-rw-r--r--signaling/architecture.md558
-rw-r--r--signaling/high-level-viwi-service.md236
-rw-r--r--signaling/images/CAN_bindings_communication.pngbin0 -> 43504 bytes
-rw-r--r--signaling/images/CAN_level_mapping.pngbin0 -> 56087 bytes
-rw-r--r--signaling/images/OpenXC_to_AGL.pngbin0 -> 84031 bytes
-rw-r--r--signaling/images/can-generator.svg244
-rw-r--r--signaling/images/distributed-arch.pngbin0 -> 73736 bytes
-rwxr-xr-xsignaling/images/high-level-arch.pngbin0 -> 30810 bytes
-rw-r--r--signaling/images/iotbzh_logo_small.pngbin0 -> 6989 bytes
-rw-r--r--signaling/images/logo_iot_bzh.svg142
-rw-r--r--signaling/images/signal-agent-arch.svg439
-rw-r--r--signaling/images/signal-service-arch.svg296
-rw-r--r--signaling/index.md26
-rw-r--r--signaling/low-level-can-service-guide.md584
14 files changed, 1858 insertions, 667 deletions
diff --git a/signaling/architecture.md b/signaling/architecture.md
index 47d11bc..8c6064d 100644
--- a/signaling/architecture.md
+++ b/signaling/architecture.md
@@ -14,10 +14,9 @@ layout: techdoc
1. TOC
{:toc}
-
## Context
-Automotive applications need to understand in real time the context in which
+Automotive applications need to understand in real time the context in which
vehicles operate. In order to do so, it is critical for automotive application
to rely on a simple, fast and secure method to access data generated by the
multiple sensors/ECU embedded in modern cars.
@@ -25,55 +24,82 @@ multiple sensors/ECU embedded in modern cars.
This signaling problem is neither new, neither unique to the automotive and
multiple solutions often described as Message Broker or Signaling Gateway have
been around for a while.
-In the context of Linux for Automotive, the "Automotive Message Broker Daemon
-" (aka AMBd) has been around for few years and is pretty well known within the
-Linux Automotive community.
-The present discussion is a proposal to enhance existing signaling/message
-models. Our proposal relies on [[APbinder]] binder/bindings model to minimize
-complexity while keeping the system fast and secure.
-We propose a model with multiple transport options and a full set of security
-feature to protect the agent generating the signal as well as consuming them.
+The present document is the now implemented since AGL Daring Dab version, to
+handle existing signaling/message in a car. It relies on [[APbinder]]
+binder/bindings model to minimize complexity while keeping the system fast
+around secure. We propose a model with multiple transport options and a full set
+of security feature to protect the service generating the signal as well as
+consuming them.
## Objectives
-Our objectives are to solve following 3 key issues:
-
-1. reduce as much as possible the amount of exchanged data to the meaningful subset really used by applications
-2. offer a high level API that obfuscates low level and proprietary interface to improve stability in time of the code
-3. hide specificities of low level implementation as well as the chosen deployment distribution model.
+Our objectives are solving following 3 key issues:
-To reach first objective, events emission frequency should be controlled at the lowest level it possibly can.
-Aggregation, composition, treatment, filtering of signals should be supported at software level when
-not supported by the hardware.
+1. reduce as much as possible the amount of exchanged data to the meaningful
+ subset really used by applications
+2. offer a high level API that obfuscates low level and proprietary interface to
+ improve stability in time of the code
+3. hide specificities of low level implementation as well as the chosen
+ deployment distribution model.
-Second objectives of offering long term stable hight level API while allowing flexibility in changing low level implementation
-may look somehow conflicting. Nevertheless by isolating low level interface from high level and allowing dynamic composition
-it is possible to mitigate both objectives.
+To reach first objective, events emission frequency should be controlled at the
+lowest level it possibly can. Aggregation, composition, treatment, filtering of
+signals should be supported at software level when not supported by the hardware.
+Second objectives of offering long term stable hight level API while allowing
+flexibility in changing low level implementation may look somehow conflicting.
+Nevertheless by isolating low level interface from high level and allowing
+dynamic composition it is possible to mitigate both objectives.
## Architecture
-Good practice is often based on modularity with clearly separated components assembled within a common framework.
-Such modularity ensures separation of duties, robustness, resilience and achievable long term maintenance.
-
-This document uses the term "AGENT" to define a specific instance of this proposed common framework used to host a group
-of dedicated separated components that handle targeted signals/events. Each agent exposes to services/applications
-the signals/events it is responsible for.
-
-As an example, a CAN-bus agent may want to mix non-public proprietary API with CANopen compatible devices while hiding this
-complexity to applications. The goal is on one hand to isolate proprietary piece of code in such a way that it is
-as transparent as possible for the remaining part of the architecture. On a second hand isolation of code related
-to a specific device provides a better separation of responsibilities, keeping all specificity related to a given
-component clearly isolated and much easier to test or maintain. Last but not least if needed this model may also
-help to provide some proprietary code directly as binary and not as source code.
-
-![image](./images/signal-agent-arch.svg "Signal Agent Architecture")
-
-While in some cases it may be chosen to implement a single agent responsible for everything, other scenarii may chose
-to split responsibility between multiple agents. Those multiple agents may run on a single ECU or on multiple ECUs.
-Chosen deployment distribution strategy should not impact the development of components responsible for signals/events
-capture. As well as it should have a loose impact on applications/services consuming those events.
+Good practice is often based on modularity with clearly separated components
+assembled within a common framework. Such modularity ensures separation of
+duties, robustness, resilience and achievable long term maintenance.
+
+This document uses the term "**Service**" to define a specific instance of this
+proposed common framework used to host a group of dedicated separated components
+that handle targeted signals/events. Each service exposes to services/applications
+the signals/events it is responsible for.
+
+As an example, a CAN service may want to mix non-public proprietary API with
+CANopen compatible devices while hiding this complexity to applications. The
+goal is on one hand to isolate proprietary piece of code in such a way that it
+is as transparent as possible for the remaining part of the architecture. On a
+second hand isolation of code related to a specific device provides a better
+separation of responsibilities, keeping all specificity related to a given
+component clearly isolated and much easier to test or maintain. Last but not
+least if needed this model may also help to provide some proprietary code
+directly as binary and not as source code.
+
+Communicating between the car and regular apps should be done using a 2 levels
+AGL services which have two distincts roles:
+
+- low level should handle communication with CAN bus device (read, decoding,
+ basic and efficient filtering, caching, ...)
+- high level should handle more complex tasks (signals compositions, complex
+ algorythms like Kalman filter, business logic...)
+
+![image](./images/signal-service-arch.svg "Signal Agent Architecture")
+
+To do so, the choice has been to use a similar architecture than [[OpenXC]], a
+Ford project. Principle is simple, from a JSON file that describes all CAN
+signals wanted to be handled, in general a conversion from a **dbc** file, AGL
+generator convert it to a C++ source code file. This file which in turn is used
+as part of the low level CAN service which can now be compiled. This service
+reads, decodes and serves this CAN signals to a high level CAN service that
+holds business logic and high level features like described is the above
+chapter.
+
+![image](./images/can-generator.svg "AGL CAN generator")
+
+While in some cases it may be chosen to implement a single service responsible
+for everything, other scenarii may chose to split responsibility between
+multiple services. Those multiple services may run on a single ECU or on
+multiple ECUs. Chosen deployment distribution strategy should not impact the
+development of components responsible for signals/events capture. As well as it
+should have a loose impact on applications/services consuming those events.
A distributed capable architecture may provide multiple advantages:
@@ -82,16 +108,24 @@ A distributed capable architecture may provide multiple advantages:
- it simplifies security by enabling isolation and sandboxing
- it clearly separates responsibilities and simplifies resolution of conflicts
-![image](./images/distributed-arch.svg "Distributed Architecture")
+Distributed architecture has to be discussed and about now is not fully
+implemented. Low level CAN service isn't fully functional nor tested to assume
+this feature but its architecture let the possibility open and will be
+implemented later.
+
+![image](./images/distributed-arch.png "Distributed Architecture")
Performance matters. There is a trade-off between modularity and efficiency.
-This is specially critical for signals where propagation time from one module to the other
-should remain as short as possible and furthermore should consume as little computing resources as possible.
+This is specially critical for signals where propagation time from one module to
+the other should remain as short as possible and furthermore should consume as
+little computing resources as possible.
-A flexible solution should provide enough versatility to either compose modules in separate processes;
-either chose a model where everything is hosted within a single process. Chosen deployment model should have minor
-or no impact on development/integration processes. Deployment model should be something easy to change, it should remain
-a tactical decision and never become a structuring decision.
+A flexible solution should provide enough versatility to either compose modules
+in separate processes; either chose a model where everything is hosted within a
+single process. Chosen deployment model should have minor or no impact on
+development/integration processes. Deployment model should be something easy to
+change, it should remain a tactical decision and never become a structuring
+decision.
Nevertheless while grouping modules may improve performance and reduce resource consumption, on the other hand,
it has a clear impact on security. No one should forget that some signals have very different level of security from other ones.
@@ -107,21 +141,28 @@ Providing such flexibility constrains the communication model used by modules:
implementation shouldn't impact how it is used
- The cost of the abstraction for modules grouped in a same process
must be as little as possible
-- The cost of separating modules with the maximum of security must remain as minimal as possible
-
-Another point impacting performance relates to a smart limitation on the number of emitted signals.
-Improving the cost of sending a signal is one thing, reducing the number of signals is an other one.
-No one should forget that the faster you ignore a useless signal the better it is.
-The best way to achieve this is by doing the filtering of useless signal as close as possible
-of the component generating the signal and when possible directly at the hardware level.
-
-To enable the right component to filter useless signals, consumer clients must describe
-precisely the data they need. Then services and agent must organise their computing to provide
-only expected data at the expected rate. Also, any data not required by any client should at
-the minimum never be transmitted. Furthermore when possible then should even not be computed at all.
-
-Describing expected data in a precise but nevertheless simple manner remains a challenge.
-It implies to manage:
+- The cost of separating modules with the maximum of security must remain as
+ minimal as possible
+
+Another point impacting performance relates to a smart limitation on the number
+of emitted signals. Improving the cost of sending a signal is one thing,
+reducing the number of signals is an other one. No one should forget that the
+faster you ignore a useless signal the better it is. The best way to achieve
+this is by doing the filtering of useless signal as close as possible of the
+component generating the signal and when possible directly at the hardware level.
+
+To enable the right component to filter useless signals, consumer clients must
+describe precisely the data they need. A filter on frequency is provided since
+Daring Dab version, as well as minimum and maximum limits. These filters can be
+specified at subscription time. Also, any data not required by any client should
+at the minimum never be transmitted. So only changed data is transmitted and if
+another service needs to receive at a regular time, it has to assume that if no
+events are received then it is that the value hasn't change. Furthermore when
+possible then should even not be computed at all, a CAN signal received on
+socket is purely ignored if no one asks for it.
+
+Describing expected data in a precise but nevertheless simple manner remains a
+challenge. It implies to manage:
- requested frequency of expected data
- accuracy of data to avoid detection of inaccurate changes
@@ -132,225 +173,289 @@ It implies to manage:
subtracting, running logical operators like AND/OR/XOR, getting the mean, ...)
- etc...
-It is critical to enable multiple features in signal queries to enable modules
-to implement the best computing method. The best computing method may have an impact on
-which device to query as well as on which filters should be applied. Furthermore
-filtering should happen as soon as possible and obviously when possible directly at hardware level.
-
-## Leveraging Existing solutions
-
-Unfortunately, there is no existing solution ready to be integrated. Obviously some parts of required technologies to
-implement such solution exist, but a significant part of the work remains to be done. If we look at the main building
-blocks used in the proposed architecture.
+It is critical to enable multiple features in signal queries to enable modules
+to implement the best computing method. The best computing method may have an
+impact on which device to query as well as on which filters should be applied.
+Furthermore filtering should happen as soon as possible and obviously when
+possible directly at hardware level.
### Transport Solutions
-D-Bus is the standard choice for Linux, nevertheless it has some serious performance limitation due to
-internal verbosity. Nevertheless because it is available and pre-integrated with almost every Linux component, D-Bus may
-still remains an acceptable choice for signal with low rate of emission (i.e. HMI).
+D-Bus is the standard choice for Linux, nevertheless it has some serious
+performance limitation due to internal verbosity. Nevertheless because it is
+available and pre-integrated with almost every Linux component, D-Bus may still
+remains an acceptable choice for signal with low rate of emission (i.e. HMI).
-For a faster communication, Jaguar-Land-Rover proposes a memory shared signal infrastructure.
-Unfortunately this solution is far from solving all issues and has some drawbacks.
-Let check the open issues it has:
+For a faster communication, Jaguar-Land-Rover proposes a memory shared signal
+infrastructure. Unfortunately this solution is far from solving all issues and
+has some drawbacks. Let check the open issues it has:
- there is no management of what requested data are. This
-translate in computing data even when not needed.
-- on top of shared memory, an extra side channel is required for processes to communicate with the
-daemon.
+ translate in computing data even when not needed.
+- on top of shared memory, an extra side channel is required for processes
+ to communicate with the daemon.
- a single shared memory implies a lot of concurrency handling. This might
-introduce drawbacks that otherwise would be solved through communication buffering.
-
-ZeroMQ, NanoMSG and equivalent libraries focused on fast communication. Some (e.g. ZeroMQ) come with
-a commercial licensing model when others (e.g. NanoMSG) use an open source licensing.
-Those solutions are well suited for both communicating inside a unique ECU or across several ECUs.
-However, most of them are using Unix domain sockets and TCP sockets and typically do not use shared memory for inter-process communication.
-
-Last but not least Android binder, Kdbus and other leverage shared memory, zero copy and sit directly within Linux kernel.
-While this may boost information passing between local processes, it also has some limitations. The first one is
-the non support of a multi-ECU or vehicle to cloud distribution. The second one is that none of them is
-approved upstream in kernel tree. This last point may create some extra burden each time a new version
-of Linux kernel is needed or when porting toward a new hardware is required.
+ introduce drawbacks that otherwise would be solved through communication
+ buffering.
+
+ZeroMQ, NanoMSG and equivalent libraries focused on fast communication. Some
+(e.g. ZeroMQ) come with a commercial licensing model when others (e.g. NanoMSG)
+use an open source licensing. Those solutions are well suited for both
+communicating inside a unique ECU or across several ECUs. However, most of them
+are using Unix domain sockets and TCP sockets and typically do not use shared
+memory for inter-process communication.
+
+Last but not least Android binder, Kdbus and other leverage shared memory, zero
+copy and sit directly within Linux kernel. While this may boost information
+passing between local processes, it also has some limitations. The first one is
+the non support of a multi-ECU or vehicle to cloud distribution. The second one
+is that none of them is approved upstream in kernel tree. This last point may
+create some extra burden each time a new version of Linux kernel is needed or
+when porting toward a new hardware is required.
### Query and Filtering Language
-Description language for filtering of expected data remains an almost green field where nothing really fit signal agent requirements.
-Languages like Simulink or signal processing graphical languages are valuable modelling tools. Unfortunately they
-cannot be inserted in the car. Furthermore those languages have many features that are not useful in proposed signal agent
-context and cost of integrating such complex languages might not be justified for something as simple as a signal agent.
-The same remarks apply for automation languages.
-
-Further investigations would be needed. Even if there is no obvious solutions fit or need. Existing solution use a different context or industry may exist or nearby solutions
-might worse the value be adapted to our requirements.
+Description language for filtering of expected data remains an almost green
+field where nothing really fit signal service requirements. Languages like
+Simulink or signal processing graphical languages are valuable modelling tools.
+Unfortunately they cannot be inserted in the car. Furthermore those languages
+have many features that are not useful in proposed signal service context and
+cost of integrating such complex languages might not be justified for something
+as simple as a signal service. The same remarks apply for automation languages.
+
+Further investigations leads to some specifications already presents like the
+one from Jaguar Land Rover [[VISS]], for **Vehicule Information Service
+Specification** and another from Volkwagen AG named [[ViWi]], stand for
+**Volkwagen Infotainment Web Interface**. Each ones has their pro and cons.
+Let's see a little comparison:
+
+TODO: List of features not pro cons
+| VISS | ViWi |
+|-------------------------------------------------------|-------------------------------------------------------------------|
+| + Filtering on node (not possible on several nodes or branches) | | + Describe a protocol |
+| + Access restrictions to signals | + Ability to specify custom signals |
+| +/- Use high level development languages | + RESTful HTTP calls |
+| - One big Server that handle requests | + Stateless |
+| - Filtering | + Filtering, sorting |
+| - Static signals tree not extensible [[VSS]] | -/+ Use JSON objects to communicate |
+| - Use of AMB ? | - Identification of resources may be a bit heavy going using UUID |
+| - Use of Websocket | |
+
+About **[[VISS]]** specification, the major problem comes from the fact that
+signals are specified under the [[VSS]], **Vehicle Signal Specification**. So,
+problem is that it is difficult, if not impossible, to make a full inventory
+of all signals existing for each car. More important, each evolution in signals
+must be reported in the specification and it is without seeing the fact that
+car makers have their names and set of signals that would mostly don't
+comply with the [[VSS]]. VISS doesn't seems to be an valuable way to handle
+car's signals, a big component that responds requests, use of **Automotive
+Message Broker** that use DBus is a performance problem. Fujitsu Ten recent
+study[[1]] highlights that processor can't handle an heavy load on CAN bus and
+that Low level binding adopted for AGL is about 10 times[[2]] less impact on
+performance.
## Describing Signal Subscriptions using JSON
-JSON is a rich structured representation of data. For requested data, it allows the expression of multiple features and constraints.
-JSON is both very flexible and efficient.
-There are significant advantages in describing requested data at subscription time using a language like JSON.
-Another advantage of JSON is that no parser is required to analyse the request.
+JSON is a rich structured representation of data. For requested data, it allows
+the expression of multiple features and constraints. JSON is both very flexible
+and efficient. There are significant advantages in describing requested data at
+subscription time using a language like JSON. Another advantage of JSON is that
+no parser is required to analyse the request.
-Here is an example of what could be a subscription specification:
+Existing works exists to describe a signals that comes first from Vector with
+its proprietary database (`DBC`) which widely used in industry. Make a
+description based on this format appears to be a good solution and Open Source
+community already has existing tools that let you convert proprietary file
+format to an open one. So, a JSON description based on work from [[OpenXC]] is
+specified [here](https://github.com/openxc/vi-firmware/blob/master/docs/config/reference.rst)
+which in turn is used in Low level CAN service in AGL:
```json
-{
- "define": {
- "speed": {
- "signal": "average-wheel-speed",
- "unit": "km/h",
- "accuracy": 0.5,
- "filtered": "yes"
- },
- "expect": {
- "value": "speed",
- "when": {
- "cross": { "speed": [ 50, 90, 110, 130 ] }
- },
- "max-rate": 1
- }
+{ "name": "example",
+ "extra_sources": [],
+ "initializers": [],
+ "loopers": [],
+ "buses": {},
+ "commands": [],
+ "0x3D9": {
+ "bus": "hs",
+ "signals": {
+ "PT_FuelLevelPct": {
+ "generic_name": "fuel.level",
+ "bit_position": 8,
+ "bit_size": 8,
+ "factor": 0.392157,
+ "offset": 0
+ },
+ "PT_EngineSpeed": {
+ "generic_name": "engine.speed",
+ "bit_position": 16,
+ "bit_size": 16,
+ "factor": 0.25,
+ "offset": 0
+ },
+ "PT_FuelLevelLow": {
+ "generic_name": "fuel.level.low",
+ "bit_position": 55,
+ "bit_size": 1,
+ "factor": 1,
+ "offset": 0,
+ "decoder": "decoder_t::booleanDecoder"
+ }
+ }
+ }
}
```
-A generic library to handle such request definition should be provided.
-This library should allow the agent to process the request, search if its business logic or any of present low level modules support requested signal. Finally it should notify the concerned lower module to optimise signal generation.
-
-While such an approach might not be the most common approach, organisation like [Signal-K] already uses JSON to transmit NMEA-2000 signals on boats. Others might already used it as well and some further investigations on existing solutions would be needed before moving in such a direction.
+From a description like the above one, low level CAN generator will output
+a C++ source file which let low level CAN service that uses it to handle such
+signal definition.
## Naming Signal
-Naming and defining signals is something very complex.
-For example just ***speed***, as a signal, is difficult to define.
+Naming and defining signals is something very complex. For example just
+***speed***, as a signal, is difficult to define.
What unit is used (km/h, M/h, m/s, ...)?
From which source (wheels, GPS, AccelMeter)?
How was it captured (period of measure, instantaneous, mean, filtered)?
-In order to simplify application development we should nevertheless agree on some naming convention for key signals.
-Those names might be relatively complex and featured. They may include a unit, a rate, a precision, etc.
+In order to simplify application development we should nevertheless agree on
+some naming convention for key signals. Those names might be relatively complex
+and featured. They may include a unit, a rate, a precision, etc.
+
+How these names should be registered, documented and managed is out of scope of
+this document but extremely important and at some point in time should be
+addressed. Nevertheless this issue should not prevent from moving forward
+developing a modern architecture. Developers should be warned that naming is a
+complex task, and that in the future naming scheme should be redefined, and
+potential adjustments would be required.
+
+About Low level CAN signals naming a doted notation, like the one used by Jaguar
+Landrover, is a good compromise as it describe a path to an car element. It
+separates and organize names into hierarchy. From the left to right, you
+describe your names using the more common ancestor at the left then more you go
+to the right the more it will be accurate. Using this notation let you subscribe
+or unsubscribe several signals at once using a globbing expression.
+
+Example using OBD2 standard PID:
+
+```path
+engine.load
+engine.coolant.temperature
+fuel.pressure
+intake.manifold.pressure
+engine.speed
+vehicle.speed
+intake.air.temperature
+mass.airflow
+throttle.position
+running.time
+EGR.error
+fuel.level
+barometric.pressure
+commanded.throttle.position
+ethanol.fuel.percentage
+accelerator.pedal.position
+hybrid.battery-pack.remaining.life
+engine.oil.temperature
+engine.torque
+```
+
+Here you can chose to subscribe to all engine component using an expression
+like : `engine.*`
+
+## Reusing existing/legacy code
+
+About now provided services use:
+
+- **Low Level** [[OpenXC]] project provides logic and some useful libraries to
+ access a CAN bus. It is the choice for AGL.
-How these names should be registered, documented and managed is out of scope of this document but
-extremely important and at some point in time should be addressed. Nevertheless this issue should not prevent
-from moving forward developing a modern architecture.
-Developers should be warned that naming is a complex
-task, and that in the future naming scheme should be redefined, and potential adjustments would be required.
+- **High Level** In many cases accessing to low level signal is not enough.
+ Low level information might need to be composed (i.e. GPS+Gyro+Accel).
+ Writing this composition logic might be quite complex and reusing existing
+ libraries like: LibEkNav for Kalman filtering [[9]] or Vrgimbal for 3 axes
+ control[[10]] may help saving a lot of time. AGL apps should access CAN
+ signals through High Level service. High level can lean on as many low level
+ service as needed to compute its **Virtual signals** coming from differents
+ sources. Viwi protocol seems to be a good solution.
## Leveraging AGL binder
-Such a model is loosely coupled with AGL binder. Low level signal modules as well as virtual signal
-components may potentially run within any hosting environment that would provide the right API with corresponding required facilities.
-Nevertheless leveraging [[APbinder]] has multiple advantages. It already implements event notification to support
-a messaging/signaling model for distributed agents. It enables a subscribe model responding to the requirement and finally it uses JSON
-natively.
+Such a model is loosely coupled with AGL binder. Low level CAN service as well
+as virtual signal components may potentially run within any hosting environment
+that would provide the right API with corresponding required facilities.
+Nevertheless leveraging [[APbinder]] has multiple advantages. It already
+implements event notification to support a messaging/signaling model for
+distributed services. It enables a subscribe model responding to the
+requirement and finally it uses JSON natively.
-This messaging/signalling model already enforces the notion of subscription for receiving data.
-It implies that unexpected data are not sent and merely not computed.
-When expected data is available, it is pushed to all waiting subscriber only one time.
+This messaging/signalling model already enforces the notion of subscription for
+receiving data. It implies that unexpected data are not sent and merely not
+computed. When expected data is available, it is pushed to all waiting
+subscriber only one time.
The [[APbinder]] provides transparency of communication.
It currently implements the transparency over D-Bus/Kdbus and WebSocket.
Its transparency mechanism of communication is easy to extend to other
technologies: pools of shared memory or any proprietary transport model.
-When modules are loaded by the same service agent, the [[APbinder]] provides transparently "in-memory" communication.
-This in-memory communication is really efficient: on one hand, the exchanged
-JSON objects are not serialized (because not streamed), on the other hand,
-those JSON objects provide a high level of abstraction able to transfer any
-data.
+When bindings/services are loaded by the same binder, it provides transparently
+`in-memory` communication. This in-memory communication is really efficient: on
+one hand, the exchanged JSON objects are not serialized (because not streamed),
+on the other hand, those JSON objects provide a high level of abstraction able
+to transfer any data.
-Technically an agent is a standard [[APbinder]] service.
+Technically a service is a standard [[APbinder]] binding which is also handled
+by the system and launched as a daemon by systemD.
Therefore Signal/Agent inherits of security protection through SMACK, access
control through Cynara, transparency of API to transport layer, life cycle
-management, ... Like any other [[APbinder]] service Signal/Agent is composed of a set of bindings. In signal agent specific case, those bindings are in fact the "signal modules".
+management, ... Like any other [[APbinder]] process is composed of a set of
+bindings. In signal service specific case, those bindings are in fact the
+`signal modules`.
-The proposed model allows to implement low level dependencies as independent signal modules.
-Those modules when developed are somehow like "Lego Bricks".
-They can be spread or grouped within one or multiple agents depending on
-deployment constraints (performance, multi-ECU, security & isolation constraints,
-...).
+The proposed model allows to implement low level dependencies as independent
+signal modules. Those modules when developed are somehow like "Lego Bricks".
+They can be spread or grouped within one or multiple services depending on
+deployment constraints (performance, multi-ECU, security & isolation
+constraints,...).
+
+On top of that low level signal modules, you should use a high level service.
+A first implementation of [[ViWi]] is available [here](https://github.com/iotbzh/high-level-viwi-service)
+and can be use to integrate business logic and high level features.
The model naturally uses JSON to represent data.
-**Multi-ECU and Vehicule to Cloud interactions:** while this might not be a
-show stopper for current projects, it is obvious that in the near future
-Signal/Agent should support a fully distributed architectures.
-Some event may come from the cloud (i.e. request to start monitoring a given
-feature), some may come from SmartCity and nearby vehicles, and last but
-not least some may come from another ECU within the same vehicle or from a
-virtualized OS within the same ECU (e.g. cluster & IVI).
-In order to do so, Signal modules should enable composition within one or more
-[[APbinder]] inside the same ECU.
-Furthermore they should also support chaining with the outside world.
+## Multi-ECU and Vehicule to Cloud interactions
+
+While this might not be a show stopper for current projects, it is obvious that
+in the near future Signal/Agent should support a fully distributed
+architectures. Some event may come from the cloud (i.e. request to start
+monitoring a given feature), some may come from SmartCity and nearby vehicles,
+and last but not least some may come from another ECU within the same vehicle or
+from a virtualized OS within the same ECU (e.g. cluster & IVI). In order to do
+so, Signal modules should enable composition within one or more [[APbinder]]
+inside the same ECU. Furthermore they should also support chaining with the
+outside world.
-![image](./images/cloud-arch.svg "CLoud & Multi-ECU Architecture")
+![image](./images/cloud-arch.svg "Cloud & Multi-ECU Architecture")
1. Application requests Virtual Signal exactly like if it was a low level
signal
2. Agent Signal has direct relation to low level signal
-3. Agent needs to proxy to an other agent inside the same ECU to access the
+3. Agent needs to proxy to an other service inside the same ECU to access the
signal
4. Signal is not present on current ECU. Request has to be proxied to the
outside world
-## Work to be Done
-
-As stated before, the foundation for event signaling is already in place in
-development branch of [[APbinder]].
-Nevertheless in order to provide a real added value to developers missing
-components should be developed.
-
-- **Agent Core Components**
- - Create a simple configuration model to move from low level signal
- description to something more generic that could help to abstract the
- hardware.
- - Search for an already existing library that provide high level signal
- subscription and adapt it.
- If no such library exist, create it.
- - Implement some form of introspection to allow application to discover
- the list of signal supported by a given agent.
-- **Few Common Agents**
- - Provide at least a reference implementation for a generic CAN agent
- - Agent simulation, most developers may not have access to physical
- devices during development phase, some form of simulator would be more
- than welcome.
- - etc ...
-
-## Reusing existing/legacy code
-
-Whatever the final architecture will be, it is important not to forget how
-to leverage existing/legacy code within the new model.
-There are multiple sources for reusable code that can be classified in two
-main categories:
-
-- **Low Level** Typically those existing code interface with CAN-BUS or any
- other low level device.
- Some AMBd[[6]] plugins could be a good source of input for low level
- implementation.
- But also more community oriented projects like: ArduPilot/Rover[[7]]
- Barometer or Camera interfaces[[8]].
-
-- **Virtual Signal** In many cases accessing to low level signal is not enough.
- Low level information might need to be composed (i.e. GPS+Gyro+Accel).
- Raw value might need to be processed (i.e.: change unit, average on the
- last xx seconds, ...).
- Writing this composition logic might be quite complex and reusing existing
- libraries like: LibEkNav for Kalman filtering [[9]] or Vrgimbal for 3 axes
- control[[10]] may help saving a lot of time.
-
-## Proposal
-
-In order to start moving forward one option would be to take a concrete example
-with some existing can devices (i.e. the one from MicroChips use within ALS demo).
-
-An other option would be to leverage Porter+Cogent-Extension[[11]] that supports
-both a GPS and a 9 axis sensor to implement a smart geoposition agent.
-We could reuse some existing code like the one from Rover[[7]] to provide a
-fine grain positioning service and then interface this new GeoPositioning
-agent with an application like GpsNavi[[12]] to get a end-to-end demonstrator.
-
[AppFw]: http://iot.bzh/download/public/2016/appfw/01_Introduction-to-AppFW-for-AGL-1.0.pdf "Application Framework"
[APcore]: http://iot.bzh/download/public/2016/appfw/03_Documentation-AppFW-Core-1.0.pdf "AppFw Core"
[APmain]: https://gerrit.automotivelinux.org/gerrit/#/q/project:src/app-framework-main "AppFw Main"
[APbinder]: https://gerrit.automotivelinux.org/gerrit/#/q/project:src/app-framework-binder "AppFw Binder"
[APsamples]: https://gerrit.automotivelinux.org/gerrit/gitweb?p=src/app-framework-binder.git;a=tree;f=bindings/samples "AppFw Samples"
[Signal-K]: http://signalk.org/overview.html
+[1]: http://schd.ws/hosted_files/aglmmwinter2017/37/20170201_AGL-AMM_F10_kusakabe.pdf
+[2]: https://wiki.automotivelinux.org/_media/agl-distro/20170402_ften_can_kusakabe_v2.pdf
[6]: https://github.com/otcshare/automotive-message-broker
[7]: http://ardupilot.org/rover/index.html
[8]: https://github.com/ArduPilot/ardupilot/tree/master/libraries
@@ -358,4 +463,9 @@ agent with an application like GpsNavi[[12]] to get a end-to-end demonstrator.
[10]: http://ardupilot.org/rover/docs/common-vrgimbal.html
[11]: http://elinux.org/R-Car/Boards/Porter:PEXT01
[12]: https://github.com/gpsnavi/gpsnavi
-
+[VISS]: http://rawgit.com/w3c/automotive/gh-pages/vehicle_data/vehicle_information_service.html
+[VSS]: https://github.com/GENIVI/vehicle_signal_specification
+[ViWi]: https://www.w3.org/Submission/2016/SUBM-viwi-protocol-20161213/
+[OpenXC]: http://openxcplatform.com/
+[low level CAN service]: https://gerrit.automotivelinux.org/gerrit/#/admin/projects/src/low-level-can-generator
+[high level ViWi]: https://github.com/iotbzh/high-level-viwi-service \ No newline at end of file
diff --git a/signaling/high-level-viwi-service.md b/signaling/high-level-viwi-service.md
new file mode 100644
index 0000000..6b512b9
--- /dev/null
+++ b/signaling/high-level-viwi-service.md
@@ -0,0 +1,236 @@
+# AGL VIWI HIGH-CAN binding architecture
+
+This binding is intended to act between low-level binding(s) and clients. It
+builds ViWi resources as defined in a json configuration file. It implements
+subscribe/unsubscribe/get verbs for the clients accordingly with protocol
+specification.
+
+Each ViWi resource can be composed of several elements, for which subscriptions
+will be made to the low-level binding with configurable frequencies or filters.
+
+![ViWi High Level binding architecture](images/high-level-arch.png)
+
+# BRIEF VIWI DESCRIPTION
+
+ViWi (Volkswagen Infotainment Web Interface) protocol defines a serie of
+objects, which can be queried or updated via JSon messages.
+
+Each object is assigned with a unique URI.
+
+The depth of the URI tree is limited to 3, i.e.
+_/service/resource>/element/_, for instance
+**/car/doors/3901a278-ba17-44d6-9aef-f7ca67c04840**.
+
+To retrieve the list of elements for a given resource, one can use the get
+command, for instance **get /car/doors/**.
+
+It is also possible to subscribe to elements or group of elements, for
+instance **subscribe /car/doors/3901a278-ba17-44d6-9aef-f7ca67c04840**.
+Requests can also have various filters, or specify a frequency.
+
+More details in the [ViWi general documentation](https://www.w3.org/Submission/viwi-protocol/)
+and in the [ViWi.service.car documentation](https://www.w3.org/Submission/viwi-service-car/)
+
+# Installation
+
+## Prerequisites
+
+Low level CAN service (>=4.0) must be installed. Prerequisites are the same.
+Follow instructions from **Low level CAN service Guide**.
+
+```bash
+git clone --recursive https://gerrit.automotivelinux.org/gerrit/apps/low-level-can-service
+```
+
+## Clone
+
+```bash
+export WD=$(pwd)
+git clone --recusive https://github.com/iotbzh/high-level-viwi-service.git
+```
+
+## Build
+
+Use the classic build flow:
+
+```bash
+cd $WD/high-level-viwi-service
+mkdir build
+cd build
+cmake ..
+make
+```
+
+# Usage
+
+## JSON configuration file
+
+This file must be named *high.json*, and must accessible from afb-daemon.
+
+The json configuration file consists in 2 sections:
+
+### Definitions section
+
+This section describes each resources defined in the high-level binding. Each
+resource is composed with different properties having a name, a type and a
+description.
+
+Type can be boolean, double, string, or int. Properties "id", "uri" and "name"
+are compulsory.
+
+For instance:
+
+```json
+{
+ "name": "/car/demoboard/",
+ "properties": {
+ "id": {
+ "type": "string",
+ "description": "identifier"
+ },
+ "uri": {
+ "type": "string",
+ "description": "object uri"
+ },
+ "name": {
+ "type": "string",
+ "description": "name"
+ },
+ "unit": {
+ "type": "string",
+ "description": "units"
+ },
+ "speed": {
+ "type": "double",
+ "description": "vehicle centerpoint speed as shown by the instrument cluster"
+ },
+ "rpm": {
+ "type": "double",
+ "description": "engine rotations per minute"
+ },
+ "level": {
+ "type": "double",
+ "description": "level of tankage"
+ },
+ "load": {
+ "type": "double",
+ "description": "engine load"
+ }
+ }
+}
+```
+
+### Resources section
+
+This section defines which values should be assigned to resource's properties
+as defined in the definitions section. The link to the definitions section is
+made through the name of the resource.
+
+Some values are static, some are linked to low-level requests.
+
+In case a value is linked to a low-level request, the value will start with
+"${" and end with "}". In that case the value will consist in the name of the
+low-level signal, followed with the frequency of the signal in ms. -1 in the
+frequency means that high level binding should subscribe to low level binding
+for all changes, without specifying a frequency.
+
+For instance:
+
+```json
+{
+ "name": "/car/demoboard/",
+ "values": [{
+ "name": "vehicleSpeed",
+ "unit": "km/h",
+ "speed": "${diagnostic_messages.vehicle.speed,1000}"
+ }, {
+ "name": "engineSpeed",
+ "unit": "rpm",
+ "rpm": "${diagnostic_messages.engine.speed,1000}"
+ }, {
+ "name": "fuelLevel",
+ "unit": "litre",
+ "level": "${diagnostic_messages.fuel.level,1000}"
+ }, {
+ "name": "engineLoad",
+ "unit": "Nm",
+ "load": "${diagnostic_messages.engine.load,1000}"
+ }]
+}
+```
+
+## Running and testing
+
+### Launch the binder together with the two bindings
+
+The Json high level configuration file *high.json* must be placed in the
+directory where you launch afb-daemon.
+
+```bash
+cp $WD/high-level-viwi-service/high.json $WD
+ cd $WD
+```
+
+Then you can natively under linux you can launch afb-daemon with the low-level
+and high-level bindings with a command like:
+
+```bash
+cd $WD
+afb-daemon --rootdir=$WD/low-level-can-service/CAN-binder/build/package --binding=$WD/low-level-can-service/CAN-binder/build/package/lib/afb-low-can.so --binding=$WD/high-level-viwi-service/build/package/lib/afb-high-can.so --port=1234 --tracereq=common --token=1 --verbose
+```
+
+### Use afb-client-demo to test high level binding
+
+On another terminal, connect to the binding using previously installed
+_**AFB Websocket CLI**_ tool:
+
+```bash
+$ afb-client-demo ws://localhost:1234/api?token=1
+```
+
+You will be on an interactive session where you can communicate directly with
+the binding API.
+
+The binding provides at this moment 3 verbs, _get_, _subscribe_ and
+_unsubscribe_, which can take a JSON object as an argument.
+
+To use the _**AFB Websocket CLI**_ tool, a command line will be like the
+following:
+
+```
+<api> <verb> <arguments>
+```
+
+Where:
+
+* API : _**high-can**_.
+* Verb : _**get**_, _**subscribe**_ or _**unsubscribe**_
+* Arguments : _**{ "name": "/car/doors/" }**_
+
+You can therefore use commands such as:
+
+```
+high-can subscribe {"name":"/car/doors/","interval":10000}
+high-can unsubscribe {"name":"/car/doors/","interval":10000}
+high-can get {"name":"/car/demoboard/"}
+high-can get {"name":"/car/demoboard/","fields":["fuelLevel","engineLoad"]}
+```
+
+For instance the output of the third command should be:
+
+```
+high-can get {"name":"/car/demoboard/"}
+ON-REPLY 1:high-can/get: {"response":{"\/car\/demoboard\/2159e2-5b638a-39e242-7a2f5":{"id":"2159e2-5b638a-39e242-7a2f5","name":"vehicleSpeed","speed":0.000000,"unit":"km\/h","uri":"\/car\/demoboard\/2159e2-5b638a-39e242-7a2f5"},"\/car\/demoboard\/22ad2c-5a3c2b-50fabb-324c82":{"id":"22ad2c-5a3c2b-50fabb-324c82","level":0.000000,"name":"fuelLevel","unit":"litre","uri":"\/car\/demoboard\/22ad2c-5a3c2b-50fabb-324c82"},"\/car\/demoboard\/3a3ab9-2bd52c-11d30-689acf":{"id":"3a3ab9-2bd52c-11d30-689acf","name":"engineSpeed","rpm":0.000000,"unit":"rpm","uri":"\/car\/demoboard\/3a3ab9-2bd52c-11d30-689acf"},"\/car\/demoboard\/5ae808-8093cb-99716-30a605":{"id":"5ae808-8093cb-99716-30a605","load":0.000000,"name":"engineLoad","unit":"Nm","uri":"\/car\/demoboard\/5ae808-8093cb-99716-30a605"}},"jtype":"afb-reply","request":{"status":"success","uuid":"44ce03f9-a7ca-49e1-a62a-40c74db0caa0"}}
+```
+
+As you can see for the moment all values are 0, because we didn't inject any
+CAN data in the binder. To do this, you can use **canplayer** to feed the
+bindings with some data.
+
+You can find an example of data in high level binding, "samples" directory.
+
+For instance, on a third terminal:
+
+```bash
+$ canplayer -I candata
+``` \ No newline at end of file
diff --git a/signaling/images/CAN_bindings_communication.png b/signaling/images/CAN_bindings_communication.png
new file mode 100644
index 0000000..426e2f7
--- /dev/null
+++ b/signaling/images/CAN_bindings_communication.png
Binary files differ
diff --git a/signaling/images/CAN_level_mapping.png b/signaling/images/CAN_level_mapping.png
new file mode 100644
index 0000000..1f1d906
--- /dev/null
+++ b/signaling/images/CAN_level_mapping.png
Binary files differ
diff --git a/signaling/images/OpenXC_to_AGL.png b/signaling/images/OpenXC_to_AGL.png
new file mode 100644
index 0000000..6e40336
--- /dev/null
+++ b/signaling/images/OpenXC_to_AGL.png
Binary files differ
diff --git a/signaling/images/can-generator.svg b/signaling/images/can-generator.svg
new file mode 100644
index 0000000..f5a567c
--- /dev/null
+++ b/signaling/images/can-generator.svg
@@ -0,0 +1,244 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.2" width="297mm" height="210mm" viewBox="0 0 29700 21000" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:presentation="http://sun.com/xmlns/staroffice/presentation" xmlns:smil="http://www.w3.org/2001/SMIL20/" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xml:space="preserve">
+ <defs class="ClipPathGroup">
+ <clipPath id="presentation_clip_path" clipPathUnits="userSpaceOnUse">
+ <rect x="0" y="0" width="29700" height="21000"/>
+ </clipPath>
+ <clipPath id="presentation_clip_path_shrink" clipPathUnits="userSpaceOnUse">
+ <rect x="29" y="21" width="29641" height="20958"/>
+ </clipPath>
+ </defs>
+ <defs>
+ <font id="EmbeddedFont_1" horiz-adv-x="2048">
+ <font-face font-family="Liberation Sans embedded" units-per-em="2048" font-weight="normal" font-style="normal" ascent="1852" descent="423"/>
+ <missing-glyph horiz-adv-x="2048" d="M 0,0 L 2047,0 2047,2047 0,2047 0,0 Z"/>
+ <glyph unicode="y" horiz-adv-x="1033" d="M 604,1 C 579,-64 553,-123 527,-175 500,-227 471,-272 438,-309 405,-346 369,-374 329,-394 289,-413 243,-423 191,-423 168,-423 147,-423 128,-423 109,-423 88,-420 67,-414 L 67,-279 C 80,-282 94,-284 110,-284 126,-284 140,-284 151,-284 204,-284 253,-264 298,-225 343,-186 383,-124 417,-38 L 434,5 5,1082 197,1082 425,484 C 432,466 440,442 451,412 461,382 471,352 482,322 492,292 501,265 509,241 517,217 522,202 523,196 525,203 530,218 538,240 545,261 554,285 564,312 573,339 583,366 593,393 603,420 611,444 618,464 L 830,1082 1020,1082 604,1 Z"/>
+ <glyph unicode="w" horiz-adv-x="1509" d="M 1174,0 L 965,0 792,698 C 787,716 781,738 776,765 770,792 764,818 759,843 752,872 746,903 740,934 734,904 728,874 721,845 716,820 710,793 704,766 697,739 691,715 686,694 L 508,0 300,0 -3,1082 175,1082 358,347 C 363,332 367,313 372,291 377,268 381,246 386,225 391,200 396,175 401,149 406,174 412,199 418,223 423,244 429,265 434,286 439,307 444,325 448,339 L 644,1082 837,1082 1026,339 C 1031,322 1036,302 1041,280 1046,258 1051,237 1056,218 1061,195 1067,172 1072,149 1077,174 1083,199 1088,223 1093,244 1098,265 1103,288 1108,310 1112,330 1117,347 L 1308,1082 1484,1082 1174,0 Z"/>
+ <glyph unicode="v" horiz-adv-x="1033" d="M 613,0 L 400,0 7,1082 199,1082 437,378 C 442,363 447,346 454,325 460,304 466,282 473,259 480,236 486,215 492,194 497,173 502,155 506,141 510,155 515,173 522,194 528,215 534,236 541,258 548,280 555,302 562,323 569,344 575,361 580,376 L 826,1082 1017,1082 613,0 Z"/>
+ <glyph unicode="t" horiz-adv-x="531" d="M 554,8 C 527,1 499,-5 471,-10 442,-14 409,-16 372,-16 228,-16 156,66 156,229 L 156,951 31,951 31,1082 163,1082 216,1324 336,1324 336,1082 536,1082 536,951 336,951 336,268 C 336,216 345,180 362,159 379,138 408,127 450,127 467,127 484,128 501,131 517,134 535,137 554,141 L 554,8 Z"/>
+ <glyph unicode="s" horiz-adv-x="901" d="M 950,299 C 950,248 940,203 921,164 901,124 872,91 835,64 798,37 752,16 698,2 643,-13 581,-20 511,-20 448,-20 392,-15 342,-6 291,4 247,20 209,41 171,62 139,91 114,126 88,161 69,203 57,254 L 216,285 C 231,227 263,185 311,158 359,131 426,117 511,117 550,117 585,120 618,125 650,130 678,140 701,153 724,166 743,183 756,205 769,226 775,253 775,285 775,318 767,345 752,366 737,387 715,404 688,418 661,432 628,444 589,455 550,465 507,476 460,489 417,500 374,513 331,527 288,541 250,560 216,583 181,606 153,634 132,668 111,702 100,745 100,796 100,895 135,970 206,1022 276,1073 378,1099 513,1099 632,1099 727,1078 798,1036 868,994 912,927 931,834 L 769,814 C 763,842 752,866 736,885 720,904 701,919 678,931 655,942 630,951 602,956 573,961 544,963 513,963 432,963 372,951 333,926 294,901 275,864 275,814 275,785 282,761 297,742 311,723 331,707 357,694 382,681 413,669 449,660 485,650 525,640 568,629 597,622 626,614 656,606 686,597 715,587 744,576 772,564 799,550 824,535 849,519 870,500 889,478 908,456 923,430 934,401 945,372 950,338 950,299 Z"/>
+ <glyph unicode="r" horiz-adv-x="530" d="M 142,0 L 142,830 C 142,853 142,876 142,900 141,923 141,946 140,968 139,990 139,1011 138,1030 137,1049 137,1067 136,1082 L 306,1082 C 307,1067 308,1049 309,1030 310,1010 311,990 312,969 313,948 313,929 314,910 314,891 314,874 314,861 L 318,861 C 331,902 344,938 359,969 373,999 390,1024 409,1044 428,1063 451,1078 478,1088 505,1097 537,1102 575,1102 590,1102 604,1101 617,1099 630,1096 641,1094 648,1092 L 648,927 C 636,930 622,933 606,935 590,936 572,937 552,937 511,937 476,928 447,909 418,890 394,865 376,832 357,799 344,759 335,714 326,668 322,618 322,564 L 322,0 142,0 Z"/>
+ <glyph unicode="p" horiz-adv-x="953" d="M 1053,546 C 1053,464 1046,388 1033,319 1020,250 998,190 967,140 936,90 895,51 844,23 793,-6 730,-20 655,-20 578,-20 510,-5 452,24 394,53 350,101 319,168 L 314,168 C 315,167 315,161 316,150 316,139 316,126 317,110 317,94 317,76 318,57 318,37 318,17 318,-2 L 318,-425 138,-425 138,864 C 138,891 138,916 138,940 137,964 137,986 136,1005 135,1025 135,1042 134,1056 133,1070 133,1077 132,1077 L 306,1077 C 307,1075 308,1068 309,1057 310,1045 311,1031 312,1014 313,998 314,980 315,961 316,943 316,925 316,908 L 320,908 C 337,943 356,972 377,997 398,1021 423,1041 450,1057 477,1072 508,1084 542,1091 575,1098 613,1101 655,1101 730,1101 793,1088 844,1061 895,1034 936,997 967,949 998,900 1020,842 1033,774 1046,705 1053,629 1053,546 Z M 864,542 C 864,609 860,668 852,720 844,772 830,816 811,852 791,888 765,915 732,934 699,953 658,962 609,962 569,962 531,956 496,945 461,934 430,912 404,880 377,848 356,804 341,748 326,691 318,618 318,528 318,451 324,387 337,334 350,281 368,238 393,205 417,172 447,149 483,135 519,120 560,113 607,113 657,113 699,123 732,142 765,161 791,189 811,226 830,263 844,308 852,361 860,414 864,474 864,542 Z"/>
+ <glyph unicode="o" horiz-adv-x="980" d="M 1053,542 C 1053,353 1011,212 928,119 845,26 724,-20 565,-20 490,-20 422,-9 363,14 304,37 254,71 213,118 172,165 140,223 119,294 97,364 86,447 86,542 86,915 248,1102 571,1102 655,1102 728,1090 789,1067 850,1044 900,1009 939,962 978,915 1006,857 1025,787 1044,717 1053,635 1053,542 Z M 864,542 C 864,626 858,695 845,750 832,805 813,848 788,881 763,914 732,937 696,950 660,963 619,969 574,969 528,969 487,962 450,949 413,935 381,912 355,879 329,846 309,802 296,747 282,692 275,624 275,542 275,458 282,389 297,334 312,279 332,235 358,202 383,169 414,146 449,133 484,120 522,113 563,113 609,113 651,120 688,133 725,146 757,168 783,201 809,234 829,278 843,333 857,388 864,458 864,542 Z"/>
+ <glyph unicode="n" horiz-adv-x="874" d="M 825,0 L 825,686 C 825,739 821,783 814,818 806,853 793,882 776,904 759,925 736,941 708,950 679,959 644,963 602,963 559,963 521,956 487,941 452,926 423,904 399,876 374,847 355,812 342,771 329,729 322,681 322,627 L 322,0 142,0 142,853 C 142,876 142,900 142,925 141,950 141,974 140,996 139,1019 139,1038 138,1054 137,1070 137,1078 136,1078 L 306,1078 C 307,1075 307,1066 308,1052 309,1037 310,1021 311,1002 312,984 312,965 313,945 314,926 314,910 314,897 L 317,897 C 334,928 353,957 374,982 395,1007 419,1029 446,1047 473,1064 505,1078 540,1088 575,1097 616,1102 663,1102 723,1102 775,1095 818,1080 861,1065 897,1043 925,1012 953,981 974,942 987,894 1000,845 1006,788 1006,721 L 1006,0 825,0 Z"/>
+ <glyph unicode="m" horiz-adv-x="1457" d="M 768,0 L 768,686 C 768,739 765,783 758,818 751,853 740,882 725,904 709,925 688,941 663,950 638,959 607,963 570,963 532,963 498,956 467,941 436,926 410,904 389,876 367,847 350,812 339,771 327,729 321,681 321,627 L 321,0 142,0 142,853 C 142,876 142,900 142,925 141,950 141,974 140,996 139,1019 139,1038 138,1054 137,1070 137,1078 136,1078 L 306,1078 C 307,1075 307,1066 308,1052 309,1037 310,1021 311,1002 312,984 312,965 313,945 314,926 314,910 314,897 L 317,897 C 333,928 350,957 369,982 388,1007 410,1029 435,1047 460,1064 488,1078 521,1088 553,1097 590,1102 633,1102 715,1102 780,1086 828,1053 875,1020 908,968 927,897 L 930,897 C 946,928 964,957 984,982 1004,1007 1027,1029 1054,1047 1081,1064 1111,1078 1144,1088 1177,1097 1215,1102 1258,1102 1313,1102 1360,1095 1400,1080 1439,1065 1472,1043 1497,1012 1522,981 1541,942 1553,894 1565,845 1571,788 1571,721 L 1571,0 1393,0 1393,686 C 1393,739 1390,783 1383,818 1376,853 1365,882 1350,904 1334,925 1313,941 1288,950 1263,959 1232,963 1195,963 1157,963 1123,956 1092,942 1061,927 1035,906 1014,878 992,850 975,815 964,773 952,731 946,682 946,627 L 946,0 768,0 Z"/>
+ <glyph unicode="l" horiz-adv-x="187" d="M 138,0 L 138,1484 318,1484 318,0 138,0 Z"/>
+ <glyph unicode="i" horiz-adv-x="187" d="M 137,1312 L 137,1484 317,1484 317,1312 137,1312 Z M 137,0 L 137,1082 317,1082 317,0 137,0 Z"/>
+ <glyph unicode="h" horiz-adv-x="874" d="M 317,897 C 337,934 359,965 382,991 405,1016 431,1037 459,1054 487,1071 518,1083 551,1091 584,1098 622,1102 663,1102 732,1102 789,1093 834,1074 878,1055 913,1029 939,996 964,962 982,922 992,875 1001,828 1006,777 1006,721 L 1006,0 825,0 825,686 C 825,732 822,772 817,807 811,842 800,871 784,894 768,917 745,934 716,946 687,957 649,963 602,963 559,963 521,955 487,940 452,925 423,903 399,875 374,847 355,813 342,773 329,733 322,688 322,638 L 322,0 142,0 142,1484 322,1484 322,1098 C 322,1076 322,1054 321,1032 320,1010 320,990 319,971 318,952 317,937 316,924 315,911 315,902 314,897 L 317,897 Z"/>
+ <glyph unicode="g" horiz-adv-x="927" d="M 548,-425 C 486,-425 431,-419 383,-406 335,-393 294,-375 260,-352 226,-328 198,-300 177,-267 156,-234 140,-198 131,-158 L 312,-132 C 324,-182 351,-220 392,-248 433,-274 486,-288 553,-288 594,-288 631,-282 664,-271 697,-260 726,-241 749,-217 772,-191 790,-159 803,-119 816,-79 822,-30 822,27 L 822,201 820,201 C 807,174 790,148 771,123 751,98 727,75 699,56 670,37 637,21 600,10 563,-2 520,-8 472,-8 403,-8 345,4 296,27 247,50 207,84 176,130 145,176 122,233 108,302 93,370 86,449 86,539 86,626 93,704 108,773 122,842 145,901 178,950 210,998 252,1035 304,1061 355,1086 418,1099 492,1099 569,1099 635,1082 692,1047 748,1012 791,962 822,897 L 824,897 C 824,914 825,933 826,953 827,974 828,994 829,1012 830,1031 831,1046 832,1060 833,1073 835,1080 836,1080 L 1007,1080 C 1006,1074 1006,1064 1005,1050 1004,1035 1004,1018 1003,998 1002,978 1002,956 1002,932 1001,907 1001,882 1001,856 L 1001,30 C 1001,-121 964,-234 890,-311 815,-387 701,-425 548,-425 Z M 822,541 C 822,616 814,681 798,735 781,788 760,832 733,866 706,900 676,925 642,941 607,957 572,965 536,965 490,965 451,957 418,941 385,925 357,900 336,866 314,831 298,787 288,734 277,680 272,616 272,541 272,463 277,398 288,345 298,292 314,249 335,216 356,183 383,160 416,146 449,132 488,125 533,125 569,125 604,133 639,148 673,163 704,188 731,221 758,254 780,297 797,350 814,403 822,466 822,541 Z"/>
+ <glyph unicode="f" horiz-adv-x="557" d="M 361,951 L 361,0 181,0 181,951 29,951 29,1082 181,1082 181,1204 C 181,1243 185,1280 192,1314 199,1347 213,1377 233,1402 252,1427 279,1446 313,1461 347,1475 391,1482 445,1482 466,1482 489,1481 512,1479 535,1477 555,1474 572,1470 L 572,1333 C 561,1335 548,1337 533,1339 518,1340 504,1341 492,1341 465,1341 444,1337 427,1330 410,1323 396,1312 387,1299 377,1285 370,1268 367,1248 363,1228 361,1205 361,1179 L 361,1082 572,1082 572,951 361,951 Z"/>
+ <glyph unicode="e" horiz-adv-x="980" d="M 276,503 C 276,446 282,394 294,347 305,299 323,258 348,224 372,189 403,163 441,144 479,125 525,115 578,115 656,115 719,131 766,162 813,193 844,233 861,281 L 1019,236 C 1008,206 992,176 972,146 951,115 924,88 890,64 856,39 814,19 763,4 712,-12 650,-20 578,-20 418,-20 296,28 213,123 129,218 87,360 87,548 87,649 100,735 125,806 150,876 185,933 229,977 273,1021 324,1053 383,1073 442,1092 504,1102 571,1102 662,1102 738,1087 799,1058 860,1029 909,988 946,937 983,885 1009,824 1025,754 1040,684 1048,608 1048,527 L 1048,503 276,503 Z M 862,641 C 852,755 823,838 775,891 727,943 658,969 568,969 538,969 507,964 474,955 441,945 410,928 382,903 354,878 330,845 311,803 292,760 281,706 278,641 L 862,641 Z"/>
+ <glyph unicode="d" horiz-adv-x="927" d="M 821,174 C 788,105 744,55 689,25 634,-5 565,-20 484,-20 347,-20 247,26 183,118 118,210 86,349 86,536 86,913 219,1102 484,1102 566,1102 634,1087 689,1057 744,1027 788,979 821,914 L 823,914 C 823,921 823,931 823,946 822,960 822,975 822,991 821,1006 821,1021 821,1035 821,1049 821,1059 821,1065 L 821,1484 1001,1484 1001,219 C 1001,193 1001,168 1002,143 1002,119 1002,97 1003,77 1004,57 1004,40 1005,26 1006,11 1006,4 1007,4 L 835,4 C 834,11 833,20 832,32 831,44 830,58 829,73 828,89 827,105 826,123 825,140 825,157 825,174 L 821,174 Z M 275,542 C 275,467 280,403 289,350 298,297 313,253 334,219 355,184 381,159 413,143 445,127 484,119 530,119 577,119 619,127 656,142 692,157 722,182 747,217 771,251 789,296 802,351 815,406 821,474 821,554 821,631 815,696 802,749 789,802 771,844 746,877 721,910 691,933 656,948 620,962 579,969 532,969 488,969 450,961 418,946 386,931 359,906 338,872 317,838 301,794 291,740 280,685 275,619 275,542 Z"/>
+ <glyph unicode="c" horiz-adv-x="901" d="M 275,546 C 275,484 280,427 289,375 298,323 313,278 334,241 355,203 384,174 419,153 454,132 497,122 548,122 612,122 666,139 709,173 752,206 778,258 788,328 L 970,328 C 964,283 951,239 931,197 911,155 884,118 850,86 815,54 773,28 724,9 675,-10 618,-20 553,-20 468,-20 396,-6 337,23 278,52 230,91 193,142 156,192 129,251 112,320 95,388 87,462 87,542 87,615 93,679 105,735 117,790 134,839 156,881 177,922 203,957 232,986 261,1014 293,1037 328,1054 362,1071 398,1083 436,1091 474,1098 512,1102 551,1102 612,1102 666,1094 713,1077 760,1060 801,1038 836,1009 870,980 898,945 919,906 940,867 955,824 964,779 L 779,765 C 770,825 746,873 708,908 670,943 616,961 546,961 495,961 452,953 418,936 383,919 355,893 334,859 313,824 298,781 289,729 280,677 275,616 275,546 Z"/>
+ <glyph unicode="b" horiz-adv-x="953" d="M 1053,546 C 1053,169 920,-20 655,-20 573,-20 505,-5 451,25 396,54 352,102 318,168 L 316,168 C 316,150 316,132 315,113 314,94 313,77 312,61 311,45 310,31 309,19 308,8 307,2 306,2 L 132,2 C 133,8 133,18 134,32 135,47 135,64 136,84 137,104 137,126 138,150 138,174 138,199 138,225 L 138,1484 318,1484 318,1061 C 318,1041 318,1022 318,1004 317,985 317,969 316,955 315,938 315,923 314,908 L 318,908 C 351,977 396,1027 451,1057 506,1087 574,1102 655,1102 792,1102 892,1056 957,964 1021,872 1053,733 1053,546 Z M 864,540 C 864,615 859,679 850,732 841,785 826,829 805,864 784,898 758,923 726,939 694,955 655,963 609,963 562,963 520,955 484,940 447,925 417,900 393,866 368,832 350,787 337,732 324,677 318,609 318,529 318,452 324,387 337,334 350,281 368,239 393,206 417,173 447,149 483,135 519,120 560,113 607,113 651,113 689,121 721,136 753,151 780,176 801,210 822,244 838,288 849,343 859,397 864,463 864,540 Z"/>
+ <glyph unicode="a" horiz-adv-x="1060" d="M 414,-20 C 305,-20 224,9 169,66 114,124 87,203 87,303 87,375 101,434 128,480 155,526 190,562 234,588 277,614 327,632 383,642 439,652 496,657 554,657 L 797,657 797,717 C 797,762 792,800 783,832 774,863 759,889 740,908 721,928 697,942 668,951 639,960 604,965 565,965 530,965 499,963 471,958 443,953 419,944 398,931 377,918 361,900 348,878 335,855 327,827 323,793 L 135,810 C 142,853 154,892 173,928 192,963 218,994 253,1020 287,1046 330,1066 382,1081 433,1095 496,1102 569,1102 705,1102 807,1071 876,1009 945,946 979,856 979,738 L 979,272 C 979,219 986,179 1000,152 1014,125 1041,111 1080,111 1090,111 1100,112 1110,113 1120,114 1130,116 1139,118 L 1139,6 C 1116,1 1094,-3 1072,-6 1049,-9 1025,-10 1000,-10 966,-10 937,-5 913,4 888,13 868,26 853,45 838,63 826,86 818,113 810,140 805,171 803,207 L 797,207 C 778,172 757,141 734,113 711,85 684,61 653,42 622,22 588,7 549,-4 510,-15 465,-20 414,-20 Z M 455,115 C 512,115 563,125 606,146 649,167 684,194 713,226 741,259 762,294 776,332 790,371 797,408 797,443 L 797,531 600,531 C 556,531 514,528 475,522 435,517 400,506 370,489 340,472 316,449 299,418 281,388 272,349 272,300 272,241 288,195 320,163 351,131 396,115 455,115 Z"/>
+ <glyph unicode="X" horiz-adv-x="1298" d="M 1112,0 L 689,616 257,0 46,0 582,732 87,1409 298,1409 690,856 1071,1409 1282,1409 800,739 1323,0 1112,0 Z"/>
+ <glyph unicode="S" horiz-adv-x="1192" d="M 1272,389 C 1272,330 1261,275 1238,225 1215,175 1179,132 1131,96 1083,59 1023,31 950,11 877,-10 790,-20 690,-20 515,-20 378,11 280,72 182,133 120,222 93,338 L 278,375 C 287,338 302,305 321,275 340,245 367,219 400,198 433,176 473,159 522,147 571,135 629,129 697,129 754,129 806,134 853,144 900,153 941,168 975,188 1009,208 1036,234 1055,266 1074,297 1083,335 1083,379 1083,425 1073,462 1052,491 1031,520 1001,543 963,562 925,581 880,596 827,609 774,622 716,635 652,650 613,659 573,668 534,679 494,689 456,701 420,716 383,730 349,747 317,766 285,785 257,809 234,836 211,863 192,894 179,930 166,965 159,1006 159,1053 159,1120 173,1177 200,1225 227,1272 264,1311 312,1342 360,1373 417,1395 482,1409 547,1423 618,1430 694,1430 781,1430 856,1423 918,1410 980,1396 1032,1375 1075,1348 1118,1321 1152,1287 1178,1247 1203,1206 1224,1159 1239,1106 L 1051,1073 C 1042,1107 1028,1137 1011,1164 993,1191 970,1213 941,1231 912,1249 878,1263 837,1272 796,1281 747,1286 692,1286 627,1286 572,1280 528,1269 483,1257 448,1241 421,1221 394,1201 374,1178 363,1151 351,1124 345,1094 345,1063 345,1021 356,987 377,960 398,933 426,910 462,892 498,874 540,859 587,847 634,835 685,823 738,811 781,801 825,791 868,781 911,770 952,758 991,744 1030,729 1067,712 1102,693 1136,674 1166,650 1191,622 1216,594 1236,561 1251,523 1265,485 1272,440 1272,389 Z"/>
+ <glyph unicode="P" horiz-adv-x="1112" d="M 1258,985 C 1258,924 1248,867 1228,814 1207,761 1177,715 1137,676 1096,637 1046,606 985,583 924,560 854,549 773,549 L 359,549 359,0 168,0 168,1409 761,1409 C 844,1409 917,1399 979,1379 1041,1358 1093,1330 1134,1293 1175,1256 1206,1211 1227,1159 1248,1106 1258,1048 1258,985 Z M 1066,983 C 1066,1072 1039,1140 984,1187 929,1233 847,1256 738,1256 L 359,1256 359,700 746,700 C 856,700 937,724 989,773 1040,822 1066,892 1066,983 Z"/>
+ <glyph unicode="O" horiz-adv-x="1430" d="M 1495,711 C 1495,601 1479,501 1448,411 1416,321 1370,244 1310,180 1250,116 1177,67 1090,32 1003,-3 905,-20 795,-20 679,-20 577,-2 490,35 403,71 330,122 272,187 214,252 170,329 141,418 112,507 97,605 97,711 97,821 112,920 143,1009 174,1098 219,1173 278,1236 337,1298 411,1346 498,1380 585,1413 684,1430 797,1430 909,1430 1009,1413 1096,1379 1183,1345 1256,1297 1315,1234 1374,1171 1418,1096 1449,1007 1480,918 1495,820 1495,711 Z M 1300,711 C 1300,796 1289,873 1268,942 1246,1011 1214,1071 1172,1120 1129,1169 1077,1207 1014,1234 951,1261 879,1274 797,1274 713,1274 639,1261 576,1234 513,1207 460,1169 418,1120 375,1071 344,1011 323,942 302,873 291,796 291,711 291,626 302,549 324,479 345,408 377,348 420,297 462,246 515,206 578,178 641,149 713,135 795,135 883,135 959,149 1023,178 1086,207 1139,247 1180,298 1221,349 1251,409 1271,480 1290,551 1300,628 1300,711 Z"/>
+ <glyph unicode="N" horiz-adv-x="1165" d="M 1082,0 L 328,1200 C 329,1167 331,1135 333,1103 334,1076 336,1047 337,1017 338,986 338,959 338,936 L 338,0 168,0 168,1409 390,1409 1152,201 C 1150,234 1148,266 1146,299 1145,327 1143,358 1142,391 1141,424 1140,455 1140,485 L 1140,1409 1312,1409 1312,0 1082,0 Z"/>
+ <glyph unicode="M" horiz-adv-x="1377" d="M 1366,0 L 1366,940 C 1366,974 1366,1009 1367,1044 1368,1079 1369,1112 1370,1141 1371,1175 1373,1208 1375,1240 1366,1206 1356,1172 1346,1139 1337,1110 1328,1080 1318,1048 1307,1015 1297,986 1287,960 L 923,0 789,0 420,960 C 416,970 412,982 408,995 403,1008 399,1023 394,1038 389,1053 384,1068 379,1084 374,1099 369,1115 364,1130 353,1165 342,1202 331,1240 332,1203 333,1166 334,1129 335,1098 336,1065 337,1031 338,996 338,966 338,940 L 338,0 168,0 168,1409 419,1409 794,432 C 799,419 804,402 811,381 818,360 824,338 830,316 836,294 842,273 847,254 852,234 855,219 857,208 859,219 863,234 868,254 873,274 880,295 887,317 894,339 900,360 907,381 914,402 920,419 925,432 L 1293,1409 1538,1409 1538,0 1366,0 Z"/>
+ <glyph unicode="L" horiz-adv-x="927" d="M 168,0 L 168,1409 359,1409 359,156 1071,156 1071,0 168,0 Z"/>
+ <glyph unicode="J" horiz-adv-x="848" d="M 457,-20 C 343,-20 250,10 177,69 104,128 55,222 32,350 L 219,381 C 226,338 237,301 252,270 267,239 286,213 307,193 328,173 352,158 378,149 404,140 431,135 458,135 527,135 582,159 622,207 662,254 682,324 682,416 L 682,1253 411,1253 411,1409 872,1409 872,420 C 872,353 863,292 844,238 825,184 798,138 763,100 727,61 683,32 632,11 581,-10 522,-20 457,-20 Z"/>
+ <glyph unicode="H" horiz-adv-x="1165" d="M 1121,0 L 1121,653 359,653 359,0 168,0 168,1409 359,1409 359,813 1121,813 1121,1409 1312,1409 1312,0 1121,0 Z"/>
+ <glyph unicode="G" horiz-adv-x="1377" d="M 103,711 C 103,821 118,920 148,1009 177,1098 222,1173 281,1236 340,1298 413,1346 500,1380 587,1413 689,1430 804,1430 891,1430 967,1422 1032,1407 1097,1392 1154,1370 1202,1341 1250,1312 1291,1278 1324,1237 1357,1196 1386,1149 1409,1098 L 1227,1044 C 1210,1079 1189,1110 1165,1139 1140,1167 1111,1191 1076,1211 1041,1231 1001,1247 956,1258 910,1269 858,1274 799,1274 714,1274 640,1261 577,1234 514,1207 461,1169 420,1120 379,1071 348,1011 328,942 307,873 297,796 297,711 297,626 308,549 330,479 352,408 385,348 428,297 471,246 525,206 590,178 654,149 728,135 813,135 868,135 919,140 966,149 1013,158 1055,171 1093,186 1130,201 1163,217 1192,236 1221,254 1245,272 1264,291 L 1264,545 843,545 843,705 1440,705 1440,219 C 1409,187 1372,157 1330,128 1287,99 1240,73 1187,51 1134,29 1077,12 1014,-1 951,-14 884,-20 813,-20 694,-20 591,-2 502,35 413,71 340,122 281,187 222,252 177,329 148,418 118,507 103,605 103,711 Z"/>
+ <glyph unicode="E" horiz-adv-x="1138" d="M 168,0 L 168,1409 1237,1409 1237,1253 359,1253 359,801 1177,801 1177,647 359,647 359,156 1278,156 1278,0 168,0 Z"/>
+ <glyph unicode="D" horiz-adv-x="1218" d="M 1381,719 C 1381,602 1363,498 1328,409 1293,319 1244,244 1183,184 1122,123 1049,78 966,47 882,16 792,0 695,0 L 168,0 168,1409 634,1409 C 743,1409 843,1396 935,1369 1026,1342 1105,1300 1171,1244 1237,1187 1289,1116 1326,1029 1363,942 1381,839 1381,719 Z M 1189,719 C 1189,814 1175,896 1148,964 1121,1031 1082,1087 1033,1130 984,1173 925,1205 856,1226 787,1246 712,1256 630,1256 L 359,1256 359,153 673,153 C 747,153 816,165 879,189 942,213 996,249 1042,296 1088,343 1124,402 1150,473 1176,544 1189,626 1189,719 Z"/>
+ <glyph unicode="C" horiz-adv-x="1324" d="M 792,1274 C 712,1274 641,1261 580,1234 518,1207 466,1169 425,1120 383,1071 351,1011 330,942 309,873 298,796 298,711 298,626 310,549 333,479 356,408 389,348 432,297 475,246 527,207 590,179 652,151 722,137 800,137 855,137 905,144 950,159 995,173 1035,193 1072,219 1108,245 1140,276 1169,312 1198,347 1223,387 1245,430 L 1401,352 C 1376,299 1344,250 1307,205 1270,160 1226,120 1176,87 1125,54 1068,28 1005,9 941,-10 870,-20 791,-20 677,-20 577,-2 492,35 406,71 334,122 277,187 219,252 176,329 147,418 118,507 104,605 104,711 104,821 119,920 150,1009 180,1098 224,1173 283,1236 341,1298 413,1346 498,1380 583,1413 681,1430 790,1430 940,1430 1065,1401 1166,1342 1267,1283 1341,1196 1388,1081 L 1207,1021 C 1194,1054 1176,1086 1153,1117 1130,1147 1102,1174 1068,1197 1034,1220 994,1239 949,1253 903,1267 851,1274 792,1274 Z"/>
+ <glyph unicode="B" horiz-adv-x="1112" d="M 1258,397 C 1258,326 1244,265 1216,215 1188,164 1150,123 1103,92 1056,60 1001,37 938,22 875,7 809,0 740,0 L 168,0 168,1409 680,1409 C 758,1409 828,1403 889,1390 950,1377 1002,1356 1045,1328 1088,1300 1120,1265 1143,1222 1165,1179 1176,1127 1176,1067 1176,1028 1171,991 1160,956 1149,921 1132,890 1110,862 1087,833 1059,809 1026,789 992,768 953,753 908,743 965,736 1015,723 1059,704 1102,685 1139,660 1168,630 1197,600 1220,565 1235,526 1250,486 1258,443 1258,397 Z M 984,1044 C 984,1120 958,1174 906,1207 854,1240 779,1256 680,1256 L 359,1256 359,810 680,810 C 736,810 783,816 822,827 861,838 892,853 916,874 940,894 957,918 968,947 979,976 984,1008 984,1044 Z M 1065,412 C 1065,457 1057,495 1041,526 1024,557 1001,583 970,603 939,623 903,638 860,647 817,656 768,661 715,661 L 359,661 359,153 730,153 C 779,153 824,157 865,165 906,173 941,187 971,207 1000,227 1023,254 1040,287 1057,320 1065,362 1065,412 Z"/>
+ <glyph unicode="A" horiz-adv-x="1377" d="M 1167,0 L 1006,412 364,412 202,0 4,0 579,1409 796,1409 1362,0 1167,0 Z M 768,1026 C 757,1053 747,1080 738,1107 728,1134 719,1159 712,1182 705,1204 699,1223 694,1238 689,1253 686,1262 685,1265 684,1262 681,1252 676,1237 671,1222 665,1203 658,1180 650,1157 641,1132 632,1105 622,1078 612,1051 602,1024 L 422,561 949,561 768,1026 Z"/>
+ <glyph unicode="/" horiz-adv-x="583" d="M 0,-20 L 411,1484 569,1484 162,-20 0,-20 Z"/>
+ <glyph unicode="+" horiz-adv-x="1033" d="M 671,608 L 671,180 524,180 524,608 100,608 100,754 524,754 524,1182 671,1182 671,754 1095,754 1095,608 671,608 Z"/>
+ <glyph unicode=")" horiz-adv-x="557" d="M 555,528 C 555,435 548,346 534,262 520,177 498,96 468,18 438,-60 400,-136 353,-209 306,-282 251,-354 186,-424 L 12,-424 C 75,-354 129,-282 175,-209 220,-136 258,-60 287,19 316,98 338,179 353,264 367,349 374,437 374,530 374,623 367,711 353,796 338,881 316,962 287,1041 258,1119 220,1195 175,1269 129,1342 75,1414 12,1484 L 186,1484 C 251,1414 306,1342 353,1269 400,1196 438,1120 468,1042 498,964 520,883 534,798 548,713 555,625 555,532 L 555,528 Z"/>
+ <glyph unicode="(" horiz-adv-x="583" d="M 127,532 C 127,625 134,713 148,798 162,883 184,964 214,1042 244,1120 282,1196 329,1269 376,1342 431,1414 496,1484 L 670,1484 C 607,1414 553,1342 508,1269 462,1195 424,1119 395,1041 366,962 344,881 330,796 315,711 308,623 308,530 308,437 315,349 330,264 344,179 366,98 395,19 424,-60 462,-136 508,-209 553,-282 607,-354 670,-424 L 496,-424 C 431,-354 376,-282 329,-209 282,-136 244,-60 214,18 184,96 162,177 148,262 134,346 127,435 127,528 L 127,532 Z"/>
+ <glyph unicode=" " horiz-adv-x="556"/>
+ </font>
+ </defs>
+ <defs class="TextShapeIndex">
+ <g ooo:slide="id1" ooo:id-list="id3 id4 id5 id6 id7 id8 id9 id10 id11 id12 id13 id14"/>
+ </defs>
+ <defs class="EmbeddedBulletChars">
+ <g id="bullet-char-template(57356)" transform="scale(0.00048828125,-0.00048828125)">
+ <path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/>
+ </g>
+ <g id="bullet-char-template(57354)" transform="scale(0.00048828125,-0.00048828125)">
+ <path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/>
+ </g>
+ <g id="bullet-char-template(10146)" transform="scale(0.00048828125,-0.00048828125)">
+ <path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/>
+ </g>
+ <g id="bullet-char-template(10132)" transform="scale(0.00048828125,-0.00048828125)">
+ <path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/>
+ </g>
+ <g id="bullet-char-template(10007)" transform="scale(0.00048828125,-0.00048828125)">
+ <path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/>
+ </g>
+ <g id="bullet-char-template(10004)" transform="scale(0.00048828125,-0.00048828125)">
+ <path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/>
+ </g>
+ <g id="bullet-char-template(9679)" transform="scale(0.00048828125,-0.00048828125)">
+ <path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/>
+ </g>
+ <g id="bullet-char-template(8226)" transform="scale(0.00048828125,-0.00048828125)">
+ <path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/>
+ </g>
+ <g id="bullet-char-template(8211)" transform="scale(0.00048828125,-0.00048828125)">
+ <path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/>
+ </g>
+ <g id="bullet-char-template(61548)" transform="scale(0.00048828125,-0.00048828125)">
+ <path d="M 173,740 C 173,903 231,1043 346,1159 462,1274 601,1332 765,1332 928,1332 1067,1274 1183,1159 1299,1043 1357,903 1357,740 1357,577 1299,437 1183,322 1067,206 928,148 765,148 601,148 462,206 346,322 231,437 173,577 173,740 Z"/>
+ </g>
+ </defs>
+ <defs class="TextEmbeddedBitmaps"/>
+ <g>
+ <g id="id2" class="Master_Slide">
+ <g id="bg-id2" class="Background"/>
+ <g id="bo-id2" class="BackgroundObjects"/>
+ </g>
+ </g>
+ <g class="SlideGroup">
+ <g>
+ <g id="container-id1">
+ <g id="id1" class="Slide" clip-path="url(#presentation_clip_path)">
+ <g class="Page">
+ <g class="com.sun.star.drawing.CustomShape">
+ <g id="id3">
+ <rect class="BoundingBox" stroke="none" fill="none" x="19599" y="11199" width="7803" height="4303"/>
+ <path fill="rgb(35,255,35)" stroke="none" d="M 23500,15500 L 19600,15500 19600,11200 27400,11200 27400,15500 23500,15500 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 23500,15500 L 19600,15500 19600,11200 27400,11200 27400,15500 23500,15500 Z"/>
+ <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="21316" y="13261"><tspan fill="rgb(0,0,0)" stroke="none">CAN Low Level Bindng</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="21968" y="13735"><tspan fill="rgb(0,0,0)" stroke="none">(Shared Library)</tspan></tspan></tspan></text>
+ </g>
+ </g>
+ <g class="com.sun.star.drawing.CustomShape">
+ <g id="id4">
+ <rect class="BoundingBox" stroke="none" fill="none" x="2199" y="1999" width="2904" height="3704"/>
+ <path fill="rgb(221,241,247)" stroke="none" d="M 2200,2000 L 5101,2000 5101,5238 4738,5701 2200,5701 2200,2000 Z M 2200,2000 L 2200,2000 Z M 5101,5701 L 5101,5701 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 2200,2000 L 5101,2000 5101,5238 4738,5701 2200,5701 2200,2000 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 2200,2000 L 2200,2000 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 5101,5701 L 5101,5701 Z"/>
+ <path fill="rgb(177,193,198)" stroke="none" d="M 4738,5701 L 4832,5238 C 4923,5304 4919,5267 5101,5238 L 4738,5701 Z M 2200,2000 L 2200,2000 Z M 5101,5701 L 5101,5701 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 4738,5701 L 4832,5238 C 4923,5304 4919,5267 5101,5238 L 4738,5701 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 2200,2000 L 2200,2000 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 5101,5701 L 5101,5701 Z"/>
+ <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="2755" y="3071"><tspan fill="rgb(0,0,0)" stroke="none">OPENXC</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="3001" y="3545"><tspan fill="rgb(0,0,0)" stroke="none"> </tspan><tspan fill="rgb(0,0,0)" stroke="none">Signal</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="2590" y="4019"><tspan fill="rgb(0,0,0)" stroke="none">Description</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="2946" y="4493"><tspan fill="rgb(0,0,0)" stroke="none">(JSON)</tspan></tspan></tspan></text>
+ </g>
+ </g>
+ <g class="com.sun.star.drawing.ConnectorShape">
+ <g id="id5">
+ <rect class="BoundingBox" stroke="none" fill="none" x="3649" y="5699" width="536" height="3102"/>
+ <path fill="none" stroke="rgb(0,0,0)" d="M 3650,5700 L 4038,8374"/>
+ <path fill="rgb(0,0,0)" stroke="none" d="M 4100,8800 L 4184,8333 3887,8376 4100,8800 Z"/>
+ </g>
+ </g>
+ <g class="com.sun.star.drawing.CustomShape">
+ <g id="id6">
+ <rect class="BoundingBox" stroke="none" fill="none" x="5999" y="14299" width="7304" height="3204"/>
+ <path fill="rgb(204,204,204)" stroke="none" d="M 6000,14300 L 13300,14300 13300,17100 12388,17501 6000,17501 6000,14300 Z M 6000,14300 L 6000,14300 Z M 13301,17501 L 13301,17501 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 6000,14300 L 13300,14300 13300,17100 12388,17501 6000,17501 6000,14300 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 6000,14300 L 6000,14300 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 13301,17501 L 13301,17501 Z"/>
+ <path fill="rgb(163,163,163)" stroke="none" d="M 12388,17501 L 12624,17100 C 12853,17158 12844,17125 13300,17100 L 12388,17501 Z M 6000,14300 L 6000,14300 Z M 13301,17501 L 13301,17501 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 12388,17501 L 12624,17100 C 12853,17158 12844,17125 13300,17100 L 12388,17501 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 6000,14300 L 6000,14300 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 13301,17501 L 13301,17501 Z"/>
+ <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="8694" y="15150"><tspan fill="rgb(0,0,0)" stroke="none">Low Level</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="8941" y="15624"><tspan fill="rgb(0,0,0)" stroke="none">Binding</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="8552" y="16098"><tspan fill="rgb(0,0,0)" stroke="none">Static Code</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="9085" y="16572"><tspan fill="rgb(0,0,0)" stroke="none">(AGL)</tspan></tspan></tspan></text>
+ </g>
+ </g>
+ <g class="com.sun.star.drawing.CustomShape">
+ <g id="id7">
+ <rect class="BoundingBox" stroke="none" fill="none" x="5999" y="8399" width="2904" height="3704"/>
+ <path fill="rgb(204,204,204)" stroke="none" d="M 6000,8400 L 8901,8400 8901,11638 8538,12101 6000,12101 6000,8400 Z M 6000,8400 L 6000,8400 Z M 8901,12101 L 8901,12101 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 6000,8400 L 8901,8400 8901,11638 8538,12101 6000,12101 6000,8400 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 6000,8400 L 6000,8400 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 8901,12101 L 8901,12101 Z"/>
+ <path fill="rgb(163,163,163)" stroke="none" d="M 8538,12101 L 8632,11638 C 8723,11704 8719,11667 8901,11638 L 8538,12101 Z M 6000,8400 L 6000,8400 Z M 8901,12101 L 8901,12101 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 8538,12101 L 8632,11638 C 8723,11704 8719,11667 8901,11638 L 8538,12101 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 6000,8400 L 6000,8400 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 8901,12101 L 8901,12101 Z"/>
+ <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="7004" y="9234"><tspan fill="rgb(0,0,0)" stroke="none">CAN</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="6494" y="9708"><tspan fill="rgb(0,0,0)" stroke="none">Decoding/</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="6564" y="10182"><tspan fill="rgb(0,0,0)" stroke="none">Encoding</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="6486" y="10656"><tspan fill="rgb(0,0,0)" stroke="none">C++ Code</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="6661" y="11130"><tspan fill="rgb(0,0,0)" stroke="none">(vendor)</tspan></tspan></tspan></text>
+ </g>
+ </g>
+ <g class="com.sun.star.drawing.CustomShape">
+ <g id="id8">
+ <rect class="BoundingBox" stroke="none" fill="none" x="10399" y="8399" width="2904" height="3704"/>
+ <path fill="rgb(204,204,204)" stroke="none" d="M 10400,8400 L 13301,8400 13301,11638 12938,12101 10400,12101 10400,8400 Z M 10400,8400 L 10400,8400 Z M 13301,12101 L 13301,12101 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 10400,8400 L 13301,8400 13301,11638 12938,12101 10400,12101 10400,8400 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 10400,8400 L 10400,8400 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 13301,12101 L 13301,12101 Z"/>
+ <path fill="rgb(163,163,163)" stroke="none" d="M 12938,12101 L 13032,11638 C 13123,11704 13119,11667 13301,11638 L 12938,12101 Z M 10400,8400 L 10400,8400 Z M 13301,12101 L 13301,12101 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 12938,12101 L 13032,11638 C 13123,11704 13119,11667 13301,11638 L 12938,12101 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 10400,8400 L 10400,8400 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 13301,12101 L 13301,12101 Z"/>
+ <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="11059" y="9471"><tspan fill="rgb(0,0,0)" stroke="none">Optional</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="10989" y="9945"><tspan fill="rgb(0,0,0)" stroke="none">Message</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="11002" y="10419"><tspan fill="rgb(0,0,0)" stroke="none">Handlers</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="11061" y="10893"><tspan fill="rgb(0,0,0)" stroke="none">(vendor)</tspan></tspan></tspan></text>
+ </g>
+ </g>
+ <g class="com.sun.star.drawing.ConnectorShape">
+ <g id="id9">
+ <rect class="BoundingBox" stroke="none" fill="none" x="8899" y="10100" width="1502" height="301"/>
+ <path fill="none" stroke="rgb(0,0,0)" d="M 8900,10250 L 9970,10250"/>
+ <path fill="rgb(0,0,0)" stroke="none" d="M 10400,10250 L 9950,10100 9950,10400 10400,10250 Z"/>
+ </g>
+ </g>
+ <g class="com.sun.star.drawing.ConnectorShape">
+ <g id="id10">
+ <rect class="BoundingBox" stroke="none" fill="none" x="6384" y="12100" width="4312" height="2202"/>
+ <path fill="none" stroke="rgb(0,0,0)" d="M 9650,14300 L 7754,12404"/>
+ <path fill="rgb(0,0,0)" stroke="none" d="M 7450,12100 L 7662,12524 7874,12312 7450,12100 Z"/>
+ <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="6363" y="13348"><tspan fill="rgb(0,0,0)" stroke="none">Call for decode/encode</tspan></tspan></tspan></text>
+ </g>
+ </g>
+ <g class="com.sun.star.drawing.CustomShape">
+ <g id="id11">
+ <rect class="BoundingBox" stroke="none" fill="none" x="1749" y="8799" width="4704" height="3004"/>
+ <path fill="rgb(255,221,0)" stroke="none" d="M 1750,8800 L 4884,8800 4884,9925 5667,9925 5667,9550 6451,10300 5667,11050 5667,10675 4884,10675 4884,11801 1750,11801 1750,8800 Z M 1750,8800 L 1750,8800 Z M 6451,11801 L 6451,11801 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 1750,8800 L 4884,8800 4884,9925 5667,9925 5667,9550 6451,10300 5667,11050 5667,10675 4884,10675 4884,11801 1750,11801 1750,8800 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 1750,8800 L 1750,8800 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 6451,11801 L 6451,11801 Z"/>
+ <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="2871" y="9975"><tspan fill="rgb(0,0,0)" stroke="none">CAN</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="2703" y="10449"><tspan fill="rgb(0,0,0)" stroke="none">Config</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="2361" y="10923"><tspan fill="rgb(0,0,0)" stroke="none">Generator</tspan></tspan></tspan></text>
+ </g>
+ </g>
+ <g class="com.sun.star.drawing.CustomShape">
+ <g id="id12">
+ <rect class="BoundingBox" stroke="none" fill="none" x="14199" y="11699" width="4704" height="3004"/>
+ <path fill="rgb(255,221,0)" stroke="none" d="M 14200,11700 L 17334,11700 17334,12825 18117,12825 18117,12450 18901,13200 18117,13950 18117,13575 17334,13575 17334,14701 14200,14701 14200,11700 Z M 14200,11700 L 14200,11700 Z M 18901,14701 L 18901,14701 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 14200,11700 L 17334,11700 17334,12825 18117,12825 18117,12450 18901,13200 18117,13950 18117,13575 17334,13575 17334,14701 14200,14701 14200,11700 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 14200,11700 L 14200,11700 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 18901,14701 L 18901,14701 Z"/>
+ <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="15158" y="13112"><tspan fill="rgb(0,0,0)" stroke="none">C/C++</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="14921" y="13586"><tspan fill="rgb(0,0,0)" stroke="none">Compiler</tspan></tspan></tspan></text>
+ </g>
+ </g>
+ <g class="com.sun.star.drawing.CustomShape">
+ <g id="id13">
+ <rect class="BoundingBox" stroke="none" fill="none" x="2500" y="2300" width="2904" height="3704"/>
+ <path fill="rgb(221,241,247)" stroke="none" d="M 2501,2301 L 5402,2301 5402,5539 5039,6002 2501,6002 2501,2301 Z M 2501,2301 L 2501,2301 Z M 5402,6002 L 5402,6002 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 2501,2301 L 5402,2301 5402,5539 5039,6002 2501,6002 2501,2301 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 2501,2301 L 2501,2301 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 5402,6002 L 5402,6002 Z"/>
+ <path fill="rgb(177,193,198)" stroke="none" d="M 5039,6002 L 5133,5539 C 5224,5605 5220,5568 5402,5539 L 5039,6002 Z M 2501,2301 L 2501,2301 Z M 5402,6002 L 5402,6002 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 5039,6002 L 5133,5539 C 5224,5605 5220,5568 5402,5539 L 5039,6002 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 2501,2301 L 2501,2301 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 5402,6002 L 5402,6002 Z"/>
+ <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="3056" y="3372"><tspan fill="rgb(0,0,0)" stroke="none">OPENXC</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="3302" y="3846"><tspan fill="rgb(0,0,0)" stroke="none"> </tspan><tspan fill="rgb(0,0,0)" stroke="none">Signal</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="2891" y="4320"><tspan fill="rgb(0,0,0)" stroke="none">Description</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="3247" y="4794"><tspan fill="rgb(0,0,0)" stroke="none">(JSON)</tspan></tspan></tspan></text>
+ </g>
+ </g>
+ <g class="com.sun.star.drawing.CustomShape">
+ <g id="id14">
+ <rect class="BoundingBox" stroke="none" fill="none" x="2801" y="2601" width="2904" height="3704"/>
+ <path fill="rgb(221,241,247)" stroke="none" d="M 2802,2602 L 5703,2602 5703,5840 5340,6303 2802,6303 2802,2602 Z M 2802,2602 L 2802,2602 Z M 5703,6303 L 5703,6303 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 2802,2602 L 5703,2602 5703,5840 5340,6303 2802,6303 2802,2602 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 2802,2602 L 2802,2602 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 5703,6303 L 5703,6303 Z"/>
+ <path fill="rgb(177,193,198)" stroke="none" d="M 5340,6303 L 5434,5840 C 5525,5906 5521,5869 5703,5840 L 5340,6303 Z M 2802,2602 L 2802,2602 Z M 5703,6303 L 5703,6303 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 5340,6303 L 5434,5840 C 5525,5906 5521,5869 5703,5840 L 5340,6303 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 2802,2602 L 2802,2602 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 5703,6303 L 5703,6303 Z"/>
+ <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="3357" y="3673"><tspan fill="rgb(0,0,0)" stroke="none">OPENXC</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="3603" y="4147"><tspan fill="rgb(0,0,0)" stroke="none"> </tspan><tspan fill="rgb(0,0,0)" stroke="none">Signal</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="3192" y="4621"><tspan fill="rgb(0,0,0)" stroke="none">Description</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="3548" y="5095"><tspan fill="rgb(0,0,0)" stroke="none">(JSON)</tspan></tspan></tspan></text>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg> \ No newline at end of file
diff --git a/signaling/images/distributed-arch.png b/signaling/images/distributed-arch.png
new file mode 100644
index 0000000..3c4f4a0
--- /dev/null
+++ b/signaling/images/distributed-arch.png
Binary files differ
diff --git a/signaling/images/high-level-arch.png b/signaling/images/high-level-arch.png
new file mode 100755
index 0000000..b4a1e8c
--- /dev/null
+++ b/signaling/images/high-level-arch.png
Binary files differ
diff --git a/signaling/images/iotbzh_logo_small.png b/signaling/images/iotbzh_logo_small.png
new file mode 100644
index 0000000..6a98c60
--- /dev/null
+++ b/signaling/images/iotbzh_logo_small.png
Binary files differ
diff --git a/signaling/images/logo_iot_bzh.svg b/signaling/images/logo_iot_bzh.svg
new file mode 100644
index 0000000..aa23e84
--- /dev/null
+++ b/signaling/images/logo_iot_bzh.svg
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="201"
+ height="55"
+ id="svg4035"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="logo_iot_bzh.svg"
+ inkscape:export-filename="/shared/Templates/Logo/logo_iot_bzh_100dpi.png"
+ inkscape:export-xdpi="100"
+ inkscape:export-ydpi="100">
+ <defs
+ id="defs4037">
+ <filter
+ id="filter4000"
+ inkscape:label="Drop Shadow"
+ style="color-interpolation-filters:sRGB">
+ <feFlood
+ id="feFlood4002"
+ flood-opacity="0.475"
+ flood-color="rgb(0,0,0)"
+ result="flood" />
+ <feComposite
+ id="feComposite4004"
+ in2="SourceGraphic"
+ in="flood"
+ operator="in"
+ result="composite1" />
+ <feGaussianBlur
+ id="feGaussianBlur4006"
+ stdDeviation="5"
+ result="blur" />
+ <feOffset
+ id="feOffset4008"
+ dx="8"
+ dy="8"
+ result="offset" />
+ <feComposite
+ id="feComposite4010"
+ in2="offset"
+ in="SourceGraphic"
+ operator="over"
+ result="composite2" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.4"
+ inkscape:cx="58.845307"
+ inkscape:cy="11.584152"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1401"
+ inkscape:window-height="901"
+ inkscape:window-x="226"
+ inkscape:window-y="91"
+ inkscape:window-maximized="0" />
+ <metadata
+ id="metadata4040">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-49.874326,-541.49045)">
+ <g
+ id="g3091"
+ transform="matrix(0.33646024,0,0,0.33646024,52.43994,405.25569)"
+ inkscape:export-filename="/home/sdx/Pictures/Logo/logo_iot_bzh_100dpi.png"
+ inkscape:export-xdpi="100.22011"
+ inkscape:export-ydpi="100.22011"
+ style="display:inline;filter:url(#filter4000)">
+ <text
+ sodipodi:linespacing="125%"
+ id="text3557-5-3-7-0-7-3"
+ y="519.50671"
+ x="27.886671"
+ style="font-style:normal;font-weight:normal;font-size:97.09867096px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+ xml:space="preserve"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:97.09867096px;line-height:125%;font-family:FreeEuro;-inkscape-font-specification:'FreeEuro Bold';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="519.50671"
+ x="27.886671"
+ id="tspan3559-5-4-1-5-0-6"
+ sodipodi:role="line">IOT</tspan></text>
+ <path
+ inkscape:connector-curvature="0"
+ d="m 286.73007,473.23356 c 28.21686,16.29102 28.75566,58.73779 0.99693,78.53831 -7.67688,5.47598 -8.77935,4.91028 -1.99529,-1.0238 17.47377,-15.28453 17.98492,-42.17775 1.08522,-57.09786 l -3.91266,-3.45435 0.72312,-3.71053 c 0.39771,-2.04076 0.5997,-5.73115 0.44885,-8.20083 -0.33876,-5.54623 0.15803,-6.49185 2.65383,-5.05094 z m -64.76568,11.40332 c 7.06047,-7.74198 18.64659,-14.16089 29.04027,-16.08874 l 6.87489,-1.27521 0.87404,2.89709 c 0.4807,1.59343 0.67439,5.2245 0.43037,8.06906 l -0.44364,5.17195 -6.13887,1.6918 c -10.91241,3.00731 -20.4022,10.85909 -25.4533,21.05979 l -2.41633,4.87984 -2.74281,-0.41238 c -5.14252,-0.77316 -12.72985,-3.97645 -12.79123,-5.40033 -0.092,-2.13451 8.34659,-15.74625 12.76661,-20.59287 z m 33.20546,36.39493 c -28.21687,16.29101 -65.24624,-4.46574 -68.51461,-38.40577 -0.9039,-9.38637 0.13723,-10.0583 1.88428,-1.21608 4.49989,22.77499 27.53453,36.66428 48.90556,29.48876 l 4.94788,-1.66128 2.85184,2.48149 c 1.56852,1.36481 4.66349,3.38493 6.87772,4.48914 4.97257,2.47973 5.54308,3.38282 3.04733,4.82374 z m 22.50729,-61.79039 c 3.17451,9.98553 2.94038,23.22889 -0.58688,33.19399 l -2.33309,6.59143 -2.94597,-0.69161 c -1.6203,-0.38041 -4.86173,-2.02821 -7.2032,-3.6618 l -4.25721,-2.97018 1.60429,-6.16234 c 2.85178,-10.95404 0.79685,-23.09833 -5.51167,-32.57307 l -3.01788,-4.53253 1.72854,-2.16916 c 3.24083,-4.06698 9.80863,-9.03614 11.07242,-8.37738 1.89457,0.98756 9.46336,15.1015 11.45065,21.35265 z m -48.80223,10.31437 c 0,-32.58201 36.49058,-54.27201 67.51771,-40.1325 8.58077,3.9104 8.6421,5.148 0.11108,2.23988 -21.97368,-7.49048 -45.51946,5.51348 -49.99082,27.6091 l -1.03521,5.11561 -3.57498,1.22902 c -1.96621,0.67596 -5.26316,2.34622 -7.32655,3.71171 -4.63379,3.06649 -5.70115,3.10904 -5.70115,0.22718 z m 42.25842,50.3871 c -10.23499,-2.24356 -21.58699,-9.06801 -28.45341,-17.10525 l -4.5418,-5.31622 2.07194,-2.20549 c 1.13957,-1.21302 4.18733,-3.19628 6.77282,-4.40726 l 4.70085,-2.20176 4.53458,4.47053 c 8.06061,7.94674 19.60535,12.23927 30.96496,11.51329 l 5.43422,-0.34731 1.01427,2.58154 c 1.90169,4.84014 2.92124,13.01261 1.71883,13.77769 -1.80254,1.14695 -17.80995,0.64475 -24.21726,-0.75976 z"
+ style="display:inline;fill:#5a2ca0"
+ id="path3415-4-2-2-5-0-3-7-4-4-1-5" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text3557-5-3-7-46-7-3-7"
+ y="519.50671"
+ x="317.95816"
+ style="font-style:normal;font-weight:normal;font-size:97.09867096px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none"
+ xml:space="preserve"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:97.09867096px;line-height:125%;font-family:FreeEuro;-inkscape-font-specification:'FreeEuro Bold';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ y="519.50671"
+ x="317.95816"
+ id="tspan3559-5-4-1-90-0-2-9"
+ sodipodi:role="line">BZH</tspan></text>
+ </g>
+ <rect
+ style="display:inline;fill:none;stroke:none"
+ id="rect3098"
+ width="194.18564"
+ height="54.688999"
+ x="251.47862"
+ y="487.87482"
+ inkscape:export-filename="/home/sdx/Pictures/Logo/logo_iot_bzh_100dpi.png"
+ inkscape:export-xdpi="100.22011"
+ inkscape:export-ydpi="100.22011" />
+ </g>
+</svg>
diff --git a/signaling/images/signal-agent-arch.svg b/signaling/images/signal-agent-arch.svg
deleted file mode 100644
index 1a8677e..0000000
--- a/signaling/images/signal-agent-arch.svg
+++ /dev/null
@@ -1,439 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- xmlns:ooo="http://xml.openoffice.org/svg/export"
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- version="1.2"
- width="210mm"
- height="150mm"
- viewBox="0 0 21000.002 15000"
- preserveAspectRatio="xMidYMid"
- xml:space="preserve"
- id="svg2"
- inkscape:version="0.91 r13725"
- sodipodi:docname="signal-agent-arch.svg"
- style="fill-rule:evenodd;stroke-width:28.22200012;stroke-linejoin:round"><metadata
- id="metadata76"><rdf:RDF><cc:Work
- rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="0"
- inkscape:pageshadow="2"
- inkscape:window-width="640"
- inkscape:window-height="480"
- id="namedview74"
- showgrid="false"
- inkscape:zoom="1.5390519"
- inkscape:cx="373.34674"
- inkscape:cy="148.54213"
- inkscape:current-layer="svg2"
- showguides="false"
- units="mm"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0" /><defs
- class="ClipPathGroup"
- id="defs4"><clipPath
- id="presentation_clip_path"
- clipPathUnits="userSpaceOnUse"><rect
- x="0"
- y="0"
- width="29700"
- height="21000"
- id="rect7" /></clipPath></defs><defs
- class="TextShapeIndex"
- id="defs9"><g
- ooo:slide="id1"
- ooo:id-list="id3 id4"
- id="g11" /></defs><defs
- class="EmbeddedBulletChars"
- id="defs13"><g
- id="bullet-char-template(57356)"
- transform="scale(4.8828125e-4,-4.8828125e-4)"><path
- d="M 580,1141 1163,571 580,0 -4,571 580,1141 Z"
- id="path16"
- inkscape:connector-curvature="0" /></g><g
- id="bullet-char-template(57354)"
- transform="scale(4.8828125e-4,-4.8828125e-4)"><path
- d="m 8,1128 1129,0 L 1137,0 8,0 8,1128 Z"
- id="path19"
- inkscape:connector-curvature="0" /></g><g
- id="bullet-char-template(10146)"
- transform="scale(4.8828125e-4,-4.8828125e-4)"><path
- d="M 174,0 602,739 174,1481 1456,739 174,0 Z m 1184,739 -1049,607 350,-607 699,0 z"
- id="path22"
- inkscape:connector-curvature="0" /></g><g
- id="bullet-char-template(10132)"
- transform="scale(4.8828125e-4,-4.8828125e-4)"><path
- d="M 2015,739 1276,0 717,0 l 543,543 -1086,0 0,393 1086,0 -543,545 557,0 741,-742 z"
- id="path25"
- inkscape:connector-curvature="0" /></g><g
- id="bullet-char-template(10007)"
- transform="scale(4.8828125e-4,-4.8828125e-4)"><path
- d="m 0,-2 c -7,16 -16,29 -25,39 l 381,530 c -94,256 -141,385 -141,387 0,25 13,38 40,38 9,0 21,-2 34,-5 21,4 42,12 65,25 l 27,-13 111,-251 280,301 64,-25 24,25 c 21,-10 41,-24 62,-43 C 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 c 0,-27 -21,-55 -63,-84 l 16,-20 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 c -22,-34 -53,-51 -92,-51 -42,0 -63,17 -64,51 -7,9 -10,24 -10,44 0,9 1,19 2,30 z"
- id="path28"
- inkscape:connector-curvature="0" /></g><g
- id="bullet-char-template(10004)"
- transform="scale(4.8828125e-4,-4.8828125e-4)"><path
- d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 c 0,78 14,145 41,201 34,71 87,106 158,106 53,0 88,-31 106,-94 l 23,-176 c 8,-64 28,-97 59,-98 l 735,706 c 11,11 33,17 66,17 42,0 63,-15 63,-46 l 0,-122 c 0,-36 -10,-64 -30,-84 L 442,47 C 390,-6 338,-33 285,-33 Z"
- id="path31"
- inkscape:connector-curvature="0" /></g><g
- id="bullet-char-template(9679)"
- transform="scale(4.8828125e-4,-4.8828125e-4)"><path
- d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 c 0,181 53,324 160,431 106,107 249,161 430,161 179,0 323,-54 432,-161 108,-107 162,-251 162,-431 0,-180 -54,-324 -162,-431 C 1136,54 992,0 813,0 Z"
- id="path34"
- inkscape:connector-curvature="0" /></g><g
- id="bullet-char-template(8226)"
- transform="scale(4.8828125e-4,-4.8828125e-4)"><path
- d="m 346,457 c -73,0 -137,26 -191,78 -54,51 -81,114 -81,188 0,73 27,136 81,188 54,52 118,78 191,78 73,0 134,-26 185,-79 51,-51 77,-114 77,-187 0,-75 -25,-137 -76,-188 -50,-52 -112,-78 -186,-78 z"
- id="path37"
- inkscape:connector-curvature="0" /></g><g
- id="bullet-char-template(8211)"
- transform="scale(4.8828125e-4,-4.8828125e-4)"><path
- d="m -4,459 1139,0 0,147 -1139,0 0,-147 z"
- id="path40"
- inkscape:connector-curvature="0" /></g></defs><defs
- class="TextEmbeddedBitmaps"
- id="defs42" /><rect
- style="fill:#f9f9f9;fill-opacity:1;stroke:#0d46f0;stroke-width:20.35718918;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect4209"
- width="21002.145"
- height="14953.24"
- x="5.7676091"
- y="40.992584" /><g
- id="g44"
- transform="matrix(0.48517515,0,0,0.48669202,-1304.7386,5086.6828)"><g
- id="id2"
- class="Master_Slide"><g
- id="bg-id2"
- class="Background" /><g
- id="bo-id2"
- class="BackgroundObjects" /></g></g><flowRoot
- transform="matrix(11.168642,0,0,9.2397608,182.65622,6416.365)"
- style="font-style:normal;font-weight:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- id="flowRoot3412"
- xml:space="preserve"><flowRegion
- id="flowRegion3414"><rect
- y="418.03061"
- x="34.835884"
- height="229.91684"
- width="305.16235"
- id="rect3416" /></flowRegion><flowPara
- id="flowPara3418" /></flowRoot><flowRoot
- transform="matrix(11.168642,0,0,9.2397608,182.65622,6416.365)"
- style="font-style:normal;font-weight:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- id="flowRoot3469"
- xml:space="preserve"><flowRegion
- id="flowRegion3471"><rect
- y="422.21091"
- x="319.09671"
- height="231.31027"
- width="305.16235"
- id="rect3473" /></flowRegion><flowPara
- id="flowPara3475" /></flowRoot><flowRoot
- transform="matrix(11.168642,0,0,9.2397608,182.65622,6416.365)"
- style="font-style:normal;font-weight:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- id="flowRoot3585"
- xml:space="preserve"><flowRegion
- id="flowRegion3587"><rect
- y="551.80042"
- x="57.130852"
- height="29.262142"
- width="182.54004"
- id="rect3589" /></flowRegion><flowPara
- id="flowPara3591" /></flowRoot><flowRoot
- transform="matrix(11.168642,0,0,9.2397608,182.65622,6416.365)"
- style="font-style:normal;font-weight:normal;font-size:17.5px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- id="flowRoot3758"
- xml:space="preserve"><flowRegion
- id="flowRegion3760"><rect
- style="font-size:17.5px"
- y="535.07916"
- x="-37.622753"
- height="153.27789"
- width="1096.6337"
- id="rect3762" /></flowRegion><flowPara
- id="flowPara3764" /></flowRoot><flowRoot
- transform="matrix(11.168642,0,0,9.2397608,182.65622,6416.365)"
- style="font-style:normal;font-weight:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- id="flowRoot3795"
- xml:space="preserve"><flowRegion
- id="flowRegion3797"><rect
- y="429.1781"
- x="15.327789"
- height="253.60524"
- width="261.96585"
- id="rect3799" /></flowRegion><flowPara
- id="flowPara3801" /></flowRoot><flowRoot
- transform="matrix(11.168642,0,0,9.2397608,182.65622,6416.365)"
- style="font-style:normal;font-weight:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- id="flowRoot3803"
- xml:space="preserve"><flowRegion
- id="flowRegion3805"><rect
- y="429.1781"
- x="18.11466"
- height="264.75272"
- width="263.35928"
- id="rect3807" /></flowRegion><flowPara
- id="flowPara3809" /></flowRoot><rect
- y="3977.761"
- x="2672.7629"
- height="9934.5361"
- width="17511.309"
- id="rect3404-2-0-3-4"
- style="fill:#ececec;fill-opacity:1;stroke:#0d46f0;stroke-width:61.54545212;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><rect
- y="4574.5532"
- x="6627.748"
- height="5380.1162"
- width="13070.993"
- id="rect3601-6-5-40"
- style="fill:#c8b7b7;fill-opacity:1;stroke:#0d46f0;stroke-width:103.14982605;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><flowRoot
- transform="matrix(11.168642,0,0,9.2397608,182.65622,6416.365)"
- style="font-style:normal;font-weight:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- id="flowRoot3866"
- xml:space="preserve"><flowRegion
- id="flowRegion3868"><rect
- y="-1.3934354"
- x="-4.180306"
- height="254.99867"
- width="295.40829"
- id="rect3870" /></flowRegion><flowPara
- id="flowPara3872" /></flowRoot><flowRoot
- transform="matrix(11.168642,0,0,9.2397608,182.65622,6416.365)"
- style="font-style:normal;font-weight:normal;font-size:22.5px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- id="flowRoot3925"
- xml:space="preserve"><flowRegion
- id="flowRegion3927"><rect
- y="-12.540918"
- x="273.11334"
- height="278.68707"
- width="275.90021"
- id="rect3929" /></flowRegion><flowPara
- id="flowPara3931" /></flowRoot><text
- transform="scale(1.0789315,0.92684288)"
- sodipodi:linespacing="125%"
- id="text3984"
- y="15768.004"
- x="9721.9326"
- style="font-style:normal;font-weight:normal;font-size:403.37136841px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- xml:space="preserve"><tspan
- style="font-size:423.33337402px;text-align:center;text-anchor:middle;fill:#808080"
- y="15768.004"
- x="9721.9326"
- id="tspan3986"
- sodipodi:role="line">Generic CAN-Bus Signal Agent</tspan></text>
-<text
- transform="scale(1.352565,0.73933602)"
- sodipodi:linespacing="125%"
- id="text3603-9-2"
- y="7558.9971"
- x="9458.5166"
- style="font-style:normal;font-weight:normal;font-size:1304.71459961px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- xml:space="preserve"><tspan
- style="font-size:1014.77801514px;text-align:center;text-anchor:middle"
- y="7558.9971"
- x="9458.5166"
- id="tspan3605-9-6"
- sodipodi:role="line">Can Virtual Signal</tspan><tspan
- id="tspan3511"
- style="font-size:413.4994812px;text-align:center;text-anchor:middle"
- y="7942.4819"
- x="9458.5166"
- sodipodi:role="line">(Business Logic)</tspan></text>
-<rect
- y="4530.375"
- x="2974.5918"
- height="8563.5547"
- width="3387.0312"
- id="rect3601-4-3"
- style="fill:#c8b7b7;fill-opacity:1;stroke:#0d46f0;stroke-width:66.24529266;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><rect
- y="2487.4666"
- x="2780.7954"
- height="1339.1387"
- width="17326.658"
- id="rect3775"
- style="fill:#ececec;fill-opacity:1;stroke:#0d46f0;stroke-width:45.59245682;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><text
- transform="scale(0.98227196,1.018048)"
- sodipodi:linespacing="125%"
- id="text3771-3"
- y="3233.5654"
- x="7937.6274"
- style="font-style:normal;font-weight:normal;font-size:500.42831421px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- xml:space="preserve"><tspan
- y="3233.5654"
- x="7937.6274"
- id="tspan3773-2"
- sodipodi:role="line"
- style="font-size:705.55559374px">Transport + Access Control</tspan></text>
-<text
- transform="matrix(0,-1.1653654,0.85809993,0,0,0)"
- sodipodi:linespacing="125%"
- id="text3603-9-1"
- y="4743.6514"
- x="-7532.8291"
- style="font-style:normal;font-weight:normal;font-size:1024.6697998px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- xml:space="preserve"><tspan
- style="font-size:635.00004585px;text-align:center;text-anchor:middle"
- y="4743.6514"
- x="-7532.8291"
- sodipodi:role="line"
- id="tspan3608">Signals</tspan><tspan
- style="font-size:635.00004585px;text-align:center;text-anchor:middle"
- y="5230.8979"
- x="-7532.8291"
- sodipodi:role="line"
- id="tspan3427">Subscription</tspan></text>
-<flowRoot
- xml:space="preserve"
- id="flowRoot3416"
- style="font-style:normal;font-weight:normal;font-size:15px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- transform="translate(0,6673.3677)"><flowRegion
- id="flowRegion3418"><rect
- id="rect3420"
- width="267.57834"
- height="38.436668"
- x="121.22334"
- y="120.10205"
- style="font-size:15px" /></flowRegion><flowPara
- id="flowPara3422" /></flowRoot><g
- id="g3485"><g
- id="g3446"><rect
- y="10154.886"
- x="6701.6465"
- height="775.28577"
- width="13048.449"
- id="rect3601-4-38"
- style="fill:#c8b7b7;fill-opacity:1;fill-rule:evenodd;stroke:#0d46f0;stroke-width:39.12268829;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /></g><text
- xml:space="preserve"
- style="font-style:normal;font-weight:normal;font-size:941.5914917px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- x="6096.7612"
- y="12292.677"
- id="text3603-9-9"
- sodipodi:linespacing="125%"
- transform="scale(1.1528505,0.86741516)"><tspan
- sodipodi:role="line"
- id="tspan3605-9-7"
- x="6096.7612"
- y="12292.677"
- style="font-size:564.44445801px">Module-A: Open-APIs CAN-bus Dev-ABC</tspan></text>
-</g><text
- xml:space="preserve"
- style="font-style:normal;font-weight:normal;font-size:1031.8626709px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- x="11789.697"
- y="7140.6982"
- id="text3455-8"
- sodipodi:linespacing="125%"
- transform="scale(0.98186834,1.0184665)"><tspan
- sodipodi:role="line"
- id="tspan3457-6"
- x="11789.697"
- y="7140.6982"
- style="font-size:635.00003203px;-inkscape-font-specification:serif;font-family:serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal">isDoorOpen</tspan><tspan
- sodipodi:role="line"
- x="11789.697"
- y="7587.3408"
- id="tspan3459-3"
- style="font-size:635.00003203px;-inkscape-font-specification:serif;font-family:serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal">dimInternalLightOut</tspan><tspan
- sodipodi:role="line"
- x="11789.697"
- y="8033.9834"
- id="tspan3461-9"
- style="font-size:635.00003203px;-inkscape-font-specification:serif;font-family:serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal">etc...</tspan></text>
-<text
- xml:space="preserve"
- style="font-style:normal;font-weight:normal;font-size:1031.8626709px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- x="7553.7725"
- y="7071.6685"
- id="text3455-8-5"
- sodipodi:linespacing="125%"
- transform="scale(0.98186834,1.0184665)"><tspan
- sodipodi:role="line"
- id="tspan3457-6-2"
- x="7553.7725"
- y="7071.6685"
- style="font-size:635.00003203px;-inkscape-font-specification:serif;font-family:serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal">GetPosition</tspan><tspan
- sodipodi:role="line"
- x="7553.7725"
- y="7518.311"
- id="tspan3459-3-9"
- style="font-size:635.00003203px;-inkscape-font-specification:serif;font-family:serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal">GetSpeed</tspan><tspan
- sodipodi:role="line"
- x="7553.7725"
- y="7964.9536"
- id="tspan3461-9-6"
- style="font-size:635.00003203px;-inkscape-font-specification:serif;font-family:serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal">IsMoving...</tspan></text>
-<path
- style="fill:#ececec;fill-opacity:1;fill-rule:evenodd;stroke:#0d46f0;stroke-width:75.28009796;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 913.74471,462.67859 0,13450.56941 19350.72929,0 0,-13450.56941 -19350.72929,0 z m 1807.57219,1822.66201 17476.2671,0 0,11609.4354 -17476.2671,0 0,-11609.4354 z"
- id="rect3404-2-0-3-4-1"
- inkscape:connector-curvature="0" /><text
- xml:space="preserve"
- style="font-style:normal;font-weight:normal;font-size:1120.63903809px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- x="1349.3723"
- y="1673.9717"
- id="text4263"
- sodipodi:linespacing="125%"
- transform="scale(0.98135028,1.0190041)"><tspan
- sodipodi:role="line"
- id="tspan4265"
- x="1349.3723"
- y="1673.9717"
- style="font-size:846.66673175px">Common Signal Agent Framework</tspan></text>
-<g
- transform="translate(32.075489,881.67751)"
- style="fill-rule:evenodd;stroke-width:28.22200012;stroke-linejoin:round"
- id="g3485-2"><g
- id="g3446-3"><rect
- y="10154.886"
- x="6701.6465"
- height="775.28577"
- width="13048.449"
- id="rect3601-4-38-1"
- style="fill:#c8b7b7;fill-opacity:1;fill-rule:evenodd;stroke:#0d46f0;stroke-width:39.12268829;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /></g><text
- xml:space="preserve"
- style="font-style:normal;font-weight:normal;font-size:941.5914917px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- x="6096.7612"
- y="12292.677"
- id="text3603-9-9-8"
- sodipodi:linespacing="125%"
- transform="scale(1.1528505,0.86741516)"><tspan
- sodipodi:role="line"
- id="tspan3605-9-7-2"
- x="6096.7612"
- y="12292.677"
- style="font-size:564.44445801px">Module-B: Privat-APIs CAN-bus Dev-XX</tspan></text>
-</g><g
- transform="translate(50.41284,1816.8854)"
- style="fill-rule:evenodd;stroke-width:28.22200012;stroke-linejoin:round"
- id="g3485-2-4"><g
- id="g3446-3-7"><rect
- y="10154.886"
- x="6701.6465"
- height="775.28577"
- width="13048.449"
- id="rect3601-4-38-1-0"
- style="fill:#c8b7b7;fill-opacity:1;fill-rule:evenodd;stroke:#0d46f0;stroke-width:39.12268829;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /></g><text
- xml:space="preserve"
- style="font-style:normal;font-weight:normal;font-size:941.5914917px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- x="6096.7612"
- y="12292.677"
- id="text3603-9-9-8-0"
- sodipodi:linespacing="125%"
- transform="scale(1.1528505,0.86741516)"><tspan
- sodipodi:role="line"
- id="tspan3605-9-7-2-2"
- x="6096.7612"
- y="12292.677"
- style="font-size:564.44445801px">Module-C: Privat-APIs CAN-bus Dev-YY</tspan></text>
-</g></svg> \ No newline at end of file
diff --git a/signaling/images/signal-service-arch.svg b/signaling/images/signal-service-arch.svg
new file mode 100644
index 0000000..3dee802
--- /dev/null
+++ b/signaling/images/signal-service-arch.svg
@@ -0,0 +1,296 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.2" width="297mm" height="210mm" viewBox="0 0 29700 21000" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:presentation="http://sun.com/xmlns/staroffice/presentation" xmlns:smil="http://www.w3.org/2001/SMIL20/" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xml:space="preserve">
+ <defs class="ClipPathGroup">
+ <clipPath id="presentation_clip_path" clipPathUnits="userSpaceOnUse">
+ <rect x="0" y="0" width="29700" height="21000"/>
+ </clipPath>
+ <clipPath id="presentation_clip_path_shrink" clipPathUnits="userSpaceOnUse">
+ <rect x="29" y="21" width="29641" height="20958"/>
+ </clipPath>
+ </defs>
+ <defs>
+ <font id="EmbeddedFont_1" horiz-adv-x="2048">
+ <font-face font-family="Courier embedded" units-per-em="2048" font-weight="normal" font-style="normal" ascent="1693" descent="582"/>
+ <missing-glyph horiz-adv-x="2048" d="M 0,0 L 2047,0 2047,2047 0,2047 0,0 Z"/>
+ <glyph unicode=" " horiz-adv-x="1"/>
+ <glyph unicode="y" horiz-adv-x="1060" d="M 578,0 L 432,-297 172,-297 C 135,-297 117,-311 117,-338 117,-367 135,-381 172,-381 L 649,-381 C 686,-381 705,-367 705,-338 705,-311 686,-297 649,-297 L 516,-297 1040,770 1069,770 C 1106,770 1124,785 1124,813 1124,840 1106,854 1069,854 L 844,854 C 807,854 788,840 788,813 788,785 807,770 844,770 L 954,770 625,92 289,770 395,770 C 432,770 451,785 451,813 451,840 432,854 395,854 L 160,854 C 123,854 104,840 104,813 104,785 123,770 160,770 L 193,770 578,0 Z"/>
+ <glyph unicode="v" horiz-adv-x="1112" d="M 688,0 L 1028,770 1112,770 C 1149,770 1167,785 1167,813 1167,840 1149,854 1112,854 L 801,854 C 764,854 745,840 745,813 745,785 764,770 801,770 L 940,770 639,84 600,84 293,770 426,770 C 465,770 483,785 483,813 483,840 465,854 426,854 L 117,854 C 80,854 61,840 61,813 61,785 80,770 117,770 L 201,770 545,0 688,0 Z"/>
+ <glyph unicode="t" horiz-adv-x="954" d="M 381,854 L 381,1098 C 381,1137 369,1153 340,1153 311,1153 297,1135 297,1098 L 297,854 145,854 C 107,854 88,840 88,813 88,784 107,770 145,770 L 297,770 297,219 C 297,65 422,-33 614,-33 788,-33 1022,45 1022,104 1022,125 1004,145 983,145 973,145 967,143 950,133 870,86 725,51 610,51 469,51 381,119 381,223 L 381,770 831,770 C 868,770 887,784 887,813 887,840 868,854 831,854 L 381,854 Z"/>
+ <glyph unicode="s" horiz-adv-x="848" d="M 885,789 C 813,852 721,883 604,883 403,883 254,785 254,651 254,588 291,526 348,490 406,455 463,440 614,424 727,412 782,397 836,369 891,338 926,287 926,240 926,131 791,51 610,51 436,51 295,127 295,221 L 295,236 C 295,262 279,281 254,281 225,281 211,262 211,225 L 211,55 C 211,18 225,0 254,0 281,0 295,18 295,55 L 295,78 C 381,2 483,-33 616,-33 848,-33 1018,82 1018,238 1018,309 979,379 915,422 850,465 774,488 649,502 469,520 457,524 412,553 369,578 346,613 346,645 346,733 461,799 612,799 768,799 875,740 885,647 889,614 903,600 928,600 954,600 969,618 969,655 L 969,797 C 969,836 954,854 928,854 901,854 885,832 885,797 L 885,789 Z"/>
+ <glyph unicode="r" horiz-adv-x="953" d="M 508,854 L 270,854 C 236,854 215,838 215,813 215,786 236,770 270,770 L 424,770 424,84 227,84 C 193,84 172,68 172,43 172,16 193,0 227,0 L 875,0 C 909,0 930,16 930,41 930,68 909,84 875,84 L 508,84 508,537 C 733,744 805,791 897,791 942,791 983,768 1032,721 1047,707 1051,704 1065,704 1090,704 1108,723 1108,748 1108,766 1096,783 1061,811 1008,857 963,875 903,875 799,875 698,818 508,645 L 508,854 Z"/>
+ <glyph unicode="p" horiz-adv-x="1086" d="M 295,854 L 100,854 C 63,854 45,840 45,813 45,784 63,770 100,770 L 211,770 211,-297 100,-297 C 63,-297 45,-311 45,-338 45,-367 63,-381 100,-381 L 496,-381 C 532,-381 551,-367 551,-338 551,-311 532,-297 496,-297 L 295,-297 295,218 C 389,82 504,21 662,21 913,21 1108,209 1108,453 1108,697 915,883 662,883 506,883 403,828 295,686 L 295,854 Z M 659,799 C 866,799 1024,648 1024,449 1024,259 860,105 659,105 457,105 295,259 295,453 295,645 457,799 659,799 Z"/>
+ <glyph unicode="o" horiz-adv-x="954" d="M 614,883 C 354,883 147,678 147,426 147,170 354,-33 614,-33 872,-33 1081,170 1081,420 1081,680 877,883 614,883 Z M 614,799 C 829,799 997,635 997,420 997,217 825,51 614,51 401,51 231,217 231,426 231,633 401,799 614,799 Z"/>
+ <glyph unicode="n" horiz-adv-x="1006" d="M 342,854 L 188,854 C 152,854 133,840 133,813 133,784 152,770 188,770 L 258,770 258,84 166,84 C 127,84 109,70 109,43 109,14 127,0 166,0 L 434,0 C 471,0 489,14 489,43 489,70 471,84 434,84 L 342,84 342,602 C 408,686 428,709 459,731 516,778 575,799 653,799 733,799 772,787 821,746 872,703 899,652 899,590 L 899,84 829,84 C 793,84 774,70 774,43 774,14 793,0 829,0 L 1053,0 C 1090,0 1108,14 1108,43 1108,70 1090,84 1053,84 L 983,84 983,604 C 983,762 844,883 662,883 535,883 461,844 342,713 L 342,854 Z"/>
+ <glyph unicode="l" horiz-adv-x="874" d="M 655,1237 L 332,1237 C 295,1237 276,1223 276,1196 276,1167 295,1153 332,1153 L 571,1153 571,84 244,84 C 207,84 188,70 188,43 188,14 207,0 244,0 L 983,0 C 1020,0 1040,14 1040,43 1040,70 1022,84 983,84 L 655,84 655,1237 Z"/>
+ <glyph unicode="i" horiz-adv-x="874" d="M 655,854 L 330,854 C 293,854 274,840 274,813 274,784 293,770 330,770 L 571,770 571,84 244,84 C 207,84 188,70 188,43 188,14 207,0 244,0 L 983,0 C 1020,0 1040,14 1040,43 1040,70 1022,84 983,84 L 655,84 655,854 Z M 651,1278 L 530,1278 530,1065 651,1065 651,1278 Z"/>
+ <glyph unicode="h" horiz-adv-x="1060" d="M 338,1237 L 143,1237 C 107,1237 88,1223 88,1196 88,1167 107,1153 143,1153 L 254,1153 254,84 160,84 C 123,84 104,70 104,43 104,14 125,0 160,0 L 430,0 C 467,0 487,14 487,43 487,70 469,84 430,84 L 338,84 338,606 360,633 C 471,764 528,799 643,799 725,799 770,785 817,746 868,705 895,652 895,590 L 895,84 803,84 C 766,84 748,70 748,43 748,14 766,0 803,0 L 1071,0 C 1110,0 1128,14 1128,43 1128,70 1110,84 1071,84 L 979,84 979,596 C 979,762 844,883 653,883 528,883 442,836 338,711 L 338,1237 Z"/>
+ <glyph unicode="f" horiz-adv-x="900" d="M 555,770 L 942,770 C 979,770 997,784 997,813 997,840 979,854 942,854 L 555,854 555,979 C 555,1081 647,1153 782,1153 827,1153 907,1147 963,1141 1061,1128 1061,1128 1065,1128 1090,1128 1108,1145 1108,1169 1108,1190 1096,1204 1071,1210 1006,1223 864,1237 786,1237 602,1237 471,1128 471,979 L 471,854 291,854 C 254,854 236,840 236,813 236,784 254,770 291,770 L 471,770 471,84 270,84 C 233,84 215,70 215,43 215,14 233,0 270,0 L 920,0 C 954,0 975,14 975,43 975,70 956,84 920,84 L 555,84 555,770 Z"/>
+ <glyph unicode="e" horiz-adv-x="980" d="M 1065,407 C 1065,501 1059,540 1030,608 956,778 793,883 596,883 334,883 129,692 129,444 129,178 348,-33 625,-33 811,-33 1057,63 1057,135 1057,157 1038,176 1018,176 1008,176 999,172 985,161 903,96 754,51 627,51 406,51 242,192 213,407 L 1065,407 Z M 213,491 C 250,680 397,799 596,799 795,799 946,678 979,491 L 213,491 Z"/>
+ <glyph unicode="d" horiz-adv-x="1086" d="M 1028,1237 L 834,1237 C 797,1237 778,1223 778,1196 778,1167 797,1153 834,1153 L 944,1153 944,670 C 844,815 725,883 571,883 328,883 129,678 129,426 129,174 328,-33 571,-33 725,-33 848,39 944,182 L 944,0 1139,0 C 1176,0 1194,14 1194,43 1194,70 1176,84 1139,84 L 1028,84 1028,1237 Z M 578,799 C 784,799 944,635 944,422 944,217 780,51 580,51 375,51 213,217 213,426 213,633 375,799 578,799 Z"/>
+ <glyph unicode="c" horiz-adv-x="953" d="M 963,770 C 879,844 768,883 643,883 369,883 172,688 172,418 172,156 365,-33 633,-33 768,-33 903,8 1008,80 1065,119 1096,155 1096,180 1096,201 1077,219 1057,219 1042,219 1036,215 1020,199 913,100 786,51 637,51 414,51 256,205 256,420 256,645 412,799 637,799 809,799 954,713 963,604 967,569 979,555 1006,555 1032,555 1047,573 1047,610 L 1047,797 C 1047,836 1032,854 1006,854 977,854 963,836 963,797 L 963,770 Z"/>
+ <glyph unicode="a" horiz-adv-x="980" d="M 858,0 L 1053,0 C 1090,0 1108,14 1108,43 1108,70 1090,84 1053,84 L 942,84 942,631 C 942,776 803,883 612,883 537,883 403,856 291,817 268,809 256,795 256,774 256,752 274,733 295,733 299,733 307,735 315,737 475,787 532,799 606,799 756,799 858,731 858,631 L 858,485 C 737,518 674,528 580,528 324,528 147,407 147,229 147,73 276,-33 467,-33 610,-33 733,20 858,137 L 858,0 Z M 858,229 C 721,100 610,51 465,51 324,51 231,121 231,227 231,356 379,444 596,444 686,444 784,432 858,413 L 858,229 Z"/>
+ <glyph unicode="1" horiz-adv-x="794" d="M 657,1254 L 279,1135 C 246,1125 236,1113 236,1090 236,1069 256,1049 274,1049 279,1049 295,1053 303,1055 L 573,1141 573,84 289,84 C 250,84 231,70 231,43 231,14 252,0 289,0 L 942,0 C 979,0 997,14 997,43 997,70 979,84 942,84 L 657,84 657,1254 Z"/>
+ <glyph unicode="0" horiz-adv-x="794" d="M 997,719 C 997,1045 842,1266 614,1266 387,1266 231,1045 231,719 L 231,514 C 231,190 387,-31 614,-31 842,-31 997,190 997,514 L 997,719 Z M 315,709 C 315,840 352,979 414,1073 459,1143 528,1182 614,1182 700,1182 770,1143 815,1073 877,979 913,840 913,709 L 913,526 C 913,395 877,256 815,162 770,92 700,53 614,53 528,53 459,92 414,162 352,256 315,395 315,526 L 315,709 Z"/>
+ <glyph unicode="." horiz-adv-x="318" d="M 604,237 C 524,237 463,180 463,104 463,28 524,-31 604,-31 L 625,-31 C 705,-31 766,26 766,104 766,180 705,237 625,237 L 604,237 Z"/>
+ </font>
+ </defs>
+ <defs>
+ <font id="EmbeddedFont_2" horiz-adv-x="2048">
+ <font-face font-family="Liberation Sans embedded" units-per-em="2048" font-weight="normal" font-style="normal" ascent="1852" descent="423"/>
+ <missing-glyph horiz-adv-x="2048" d="M 0,0 L 2047,0 2047,2047 0,2047 0,0 Z"/>
+ <glyph unicode="…" horiz-adv-x="1509" d="M 1576,0 L 1576,219 1770,219 1770,0 1576,0 Z M 929,0 L 929,219 1121,219 1121,0 929,0 Z M 278,0 L 278,219 473,219 473,0 278,0 Z"/>
+ <glyph unicode="»" horiz-adv-x="980" d="M 718,141 L 550,141 550,170 888,537 552,909 552,940 718,940 1056,569 1056,506 718,141 Z M 253,141 L 83,141 83,170 421,537 85,909 85,940 253,940 588,569 588,506 253,141 Z"/>
+ <glyph unicode="«" horiz-adv-x="980" d="M 886,141 L 548,506 548,569 886,940 1054,940 1054,909 716,537 1056,170 1056,141 886,141 Z M 419,141 L 83,506 83,569 419,940 586,940 586,909 251,537 588,170 588,141 419,141 Z"/>
+ <glyph unicode=" " horiz-adv-x="1"/>
+ <glyph unicode="y" horiz-adv-x="1033" d="M 604,1 C 579,-64 553,-123 527,-175 500,-227 471,-272 438,-309 405,-346 369,-374 329,-394 289,-413 243,-423 191,-423 168,-423 147,-423 128,-423 109,-423 88,-420 67,-414 L 67,-279 C 80,-282 94,-284 110,-284 126,-284 140,-284 151,-284 204,-284 253,-264 298,-225 343,-186 383,-124 417,-38 L 434,5 5,1082 197,1082 425,484 C 432,466 440,442 451,412 461,382 471,352 482,322 492,292 501,265 509,241 517,217 522,202 523,196 525,203 530,218 538,240 545,261 554,285 564,312 573,339 583,366 593,393 603,420 611,444 618,464 L 830,1082 1020,1082 604,1 Z"/>
+ <glyph unicode="w" horiz-adv-x="1509" d="M 1174,0 L 965,0 792,698 C 787,716 781,738 776,765 770,792 764,818 759,843 752,872 746,903 740,934 734,904 728,874 721,845 716,820 710,793 704,766 697,739 691,715 686,694 L 508,0 300,0 -3,1082 175,1082 358,347 C 363,332 367,313 372,291 377,268 381,246 386,225 391,200 396,175 401,149 406,174 412,199 418,223 423,244 429,265 434,286 439,307 444,325 448,339 L 644,1082 837,1082 1026,339 C 1031,322 1036,302 1041,280 1046,258 1051,237 1056,218 1061,195 1067,172 1072,149 1077,174 1083,199 1088,223 1093,244 1098,265 1103,288 1108,310 1112,330 1117,347 L 1308,1082 1484,1082 1174,0 Z"/>
+ <glyph unicode="v" horiz-adv-x="1033" d="M 613,0 L 400,0 7,1082 199,1082 437,378 C 442,363 447,346 454,325 460,304 466,282 473,259 480,236 486,215 492,194 497,173 502,155 506,141 510,155 515,173 522,194 528,215 534,236 541,258 548,280 555,302 562,323 569,344 575,361 580,376 L 826,1082 1017,1082 613,0 Z"/>
+ <glyph unicode="u" horiz-adv-x="874" d="M 314,1082 L 314,396 C 314,343 318,299 326,264 333,229 346,200 363,179 380,157 403,142 432,133 460,124 495,119 537,119 580,119 618,127 653,142 687,157 716,178 741,207 765,235 784,270 797,312 810,353 817,401 817,455 L 817,1082 997,1082 997,228 C 997,205 997,181 998,156 998,131 998,107 999,85 1000,62 1000,43 1001,27 1002,11 1002,3 1003,3 L 833,3 C 832,6 832,15 831,30 830,44 830,61 829,79 828,98 827,117 826,136 825,156 825,172 825,185 L 822,185 C 805,154 786,125 765,100 744,75 720,53 693,36 666,18 634,4 599,-6 564,-15 523,-20 476,-20 416,-20 364,-13 321,2 278,17 242,39 214,70 186,101 166,140 153,188 140,236 133,294 133,361 L 133,1082 314,1082 Z"/>
+ <glyph unicode="t" horiz-adv-x="531" d="M 554,8 C 527,1 499,-5 471,-10 442,-14 409,-16 372,-16 228,-16 156,66 156,229 L 156,951 31,951 31,1082 163,1082 216,1324 336,1324 336,1082 536,1082 536,951 336,951 336,268 C 336,216 345,180 362,159 379,138 408,127 450,127 467,127 484,128 501,131 517,134 535,137 554,141 L 554,8 Z"/>
+ <glyph unicode="s" horiz-adv-x="901" d="M 950,299 C 950,248 940,203 921,164 901,124 872,91 835,64 798,37 752,16 698,2 643,-13 581,-20 511,-20 448,-20 392,-15 342,-6 291,4 247,20 209,41 171,62 139,91 114,126 88,161 69,203 57,254 L 216,285 C 231,227 263,185 311,158 359,131 426,117 511,117 550,117 585,120 618,125 650,130 678,140 701,153 724,166 743,183 756,205 769,226 775,253 775,285 775,318 767,345 752,366 737,387 715,404 688,418 661,432 628,444 589,455 550,465 507,476 460,489 417,500 374,513 331,527 288,541 250,560 216,583 181,606 153,634 132,668 111,702 100,745 100,796 100,895 135,970 206,1022 276,1073 378,1099 513,1099 632,1099 727,1078 798,1036 868,994 912,927 931,834 L 769,814 C 763,842 752,866 736,885 720,904 701,919 678,931 655,942 630,951 602,956 573,961 544,963 513,963 432,963 372,951 333,926 294,901 275,864 275,814 275,785 282,761 297,742 311,723 331,707 357,694 382,681 413,669 449,660 485,650 525,640 568,629 597,622 626,614 656,606 686,597 715,587 744,576 772,564 799,550 824,535 849,519 870,500 889,478 908,456 923,430 934,401 945,372 950,338 950,299 Z"/>
+ <glyph unicode="r" horiz-adv-x="530" d="M 142,0 L 142,830 C 142,853 142,876 142,900 141,923 141,946 140,968 139,990 139,1011 138,1030 137,1049 137,1067 136,1082 L 306,1082 C 307,1067 308,1049 309,1030 310,1010 311,990 312,969 313,948 313,929 314,910 314,891 314,874 314,861 L 318,861 C 331,902 344,938 359,969 373,999 390,1024 409,1044 428,1063 451,1078 478,1088 505,1097 537,1102 575,1102 590,1102 604,1101 617,1099 630,1096 641,1094 648,1092 L 648,927 C 636,930 622,933 606,935 590,936 572,937 552,937 511,937 476,928 447,909 418,890 394,865 376,832 357,799 344,759 335,714 326,668 322,618 322,564 L 322,0 142,0 Z"/>
+ <glyph unicode="q" horiz-adv-x="927" d="M 484,-20 C 347,-20 246,26 182,119 118,212 86,351 86,536 86,724 119,865 185,960 250,1055 350,1102 484,1102 529,1102 568,1098 603,1090 637,1082 668,1070 695,1055 722,1039 745,1019 766,996 786,973 804,945 821,914 L 823,914 C 823,931 824,949 825,970 826,990 827,1010 828,1028 829,1046 830,1061 831,1074 832,1087 834,1094 835,1094 L 1008,1094 C 1007,1083 1005,1053 1004,1005 1002,957 1001,889 1001,799 L 1001,-425 821,-425 821,14 C 821,31 821,49 822,68 822,87 822,104 823,121 824,140 824,159 825,178 L 823,178 C 806,144 787,115 766,90 745,65 720,44 693,28 666,11 635,-1 601,-9 566,-16 527,-20 484,-20 Z M 821,554 C 821,633 814,699 801,752 787,805 768,848 743,880 718,912 687,935 652,949 616,962 576,969 532,969 486,969 447,961 414,944 381,927 355,901 335,866 314,831 299,786 290,733 280,679 275,615 275,542 275,470 280,407 289,354 298,301 312,257 333,222 353,187 379,162 412,145 444,128 483,119 530,119 570,119 608,125 643,138 678,150 709,172 736,205 762,237 783,281 798,338 813,394 821,466 821,554 Z"/>
+ <glyph unicode="p" horiz-adv-x="953" d="M 1053,546 C 1053,464 1046,388 1033,319 1020,250 998,190 967,140 936,90 895,51 844,23 793,-6 730,-20 655,-20 578,-20 510,-5 452,24 394,53 350,101 319,168 L 314,168 C 315,167 315,161 316,150 316,139 316,126 317,110 317,94 317,76 318,57 318,37 318,17 318,-2 L 318,-425 138,-425 138,864 C 138,891 138,916 138,940 137,964 137,986 136,1005 135,1025 135,1042 134,1056 133,1070 133,1077 132,1077 L 306,1077 C 307,1075 308,1068 309,1057 310,1045 311,1031 312,1014 313,998 314,980 315,961 316,943 316,925 316,908 L 320,908 C 337,943 356,972 377,997 398,1021 423,1041 450,1057 477,1072 508,1084 542,1091 575,1098 613,1101 655,1101 730,1101 793,1088 844,1061 895,1034 936,997 967,949 998,900 1020,842 1033,774 1046,705 1053,629 1053,546 Z M 864,542 C 864,609 860,668 852,720 844,772 830,816 811,852 791,888 765,915 732,934 699,953 658,962 609,962 569,962 531,956 496,945 461,934 430,912 404,880 377,848 356,804 341,748 326,691 318,618 318,528 318,451 324,387 337,334 350,281 368,238 393,205 417,172 447,149 483,135 519,120 560,113 607,113 657,113 699,123 732,142 765,161 791,189 811,226 830,263 844,308 852,361 860,414 864,474 864,542 Z"/>
+ <glyph unicode="o" horiz-adv-x="980" d="M 1053,542 C 1053,353 1011,212 928,119 845,26 724,-20 565,-20 490,-20 422,-9 363,14 304,37 254,71 213,118 172,165 140,223 119,294 97,364 86,447 86,542 86,915 248,1102 571,1102 655,1102 728,1090 789,1067 850,1044 900,1009 939,962 978,915 1006,857 1025,787 1044,717 1053,635 1053,542 Z M 864,542 C 864,626 858,695 845,750 832,805 813,848 788,881 763,914 732,937 696,950 660,963 619,969 574,969 528,969 487,962 450,949 413,935 381,912 355,879 329,846 309,802 296,747 282,692 275,624 275,542 275,458 282,389 297,334 312,279 332,235 358,202 383,169 414,146 449,133 484,120 522,113 563,113 609,113 651,120 688,133 725,146 757,168 783,201 809,234 829,278 843,333 857,388 864,458 864,542 Z"/>
+ <glyph unicode="n" horiz-adv-x="874" d="M 825,0 L 825,686 C 825,739 821,783 814,818 806,853 793,882 776,904 759,925 736,941 708,950 679,959 644,963 602,963 559,963 521,956 487,941 452,926 423,904 399,876 374,847 355,812 342,771 329,729 322,681 322,627 L 322,0 142,0 142,853 C 142,876 142,900 142,925 141,950 141,974 140,996 139,1019 139,1038 138,1054 137,1070 137,1078 136,1078 L 306,1078 C 307,1075 307,1066 308,1052 309,1037 310,1021 311,1002 312,984 312,965 313,945 314,926 314,910 314,897 L 317,897 C 334,928 353,957 374,982 395,1007 419,1029 446,1047 473,1064 505,1078 540,1088 575,1097 616,1102 663,1102 723,1102 775,1095 818,1080 861,1065 897,1043 925,1012 953,981 974,942 987,894 1000,845 1006,788 1006,721 L 1006,0 825,0 Z"/>
+ <glyph unicode="m" horiz-adv-x="1457" d="M 768,0 L 768,686 C 768,739 765,783 758,818 751,853 740,882 725,904 709,925 688,941 663,950 638,959 607,963 570,963 532,963 498,956 467,941 436,926 410,904 389,876 367,847 350,812 339,771 327,729 321,681 321,627 L 321,0 142,0 142,853 C 142,876 142,900 142,925 141,950 141,974 140,996 139,1019 139,1038 138,1054 137,1070 137,1078 136,1078 L 306,1078 C 307,1075 307,1066 308,1052 309,1037 310,1021 311,1002 312,984 312,965 313,945 314,926 314,910 314,897 L 317,897 C 333,928 350,957 369,982 388,1007 410,1029 435,1047 460,1064 488,1078 521,1088 553,1097 590,1102 633,1102 715,1102 780,1086 828,1053 875,1020 908,968 927,897 L 930,897 C 946,928 964,957 984,982 1004,1007 1027,1029 1054,1047 1081,1064 1111,1078 1144,1088 1177,1097 1215,1102 1258,1102 1313,1102 1360,1095 1400,1080 1439,1065 1472,1043 1497,1012 1522,981 1541,942 1553,894 1565,845 1571,788 1571,721 L 1571,0 1393,0 1393,686 C 1393,739 1390,783 1383,818 1376,853 1365,882 1350,904 1334,925 1313,941 1288,950 1263,959 1232,963 1195,963 1157,963 1123,956 1092,942 1061,927 1035,906 1014,878 992,850 975,815 964,773 952,731 946,682 946,627 L 946,0 768,0 Z"/>
+ <glyph unicode="l" horiz-adv-x="187" d="M 138,0 L 138,1484 318,1484 318,0 138,0 Z"/>
+ <glyph unicode="k" horiz-adv-x="901" d="M 816,0 L 450,494 318,385 318,0 138,0 138,1484 318,1484 318,557 793,1082 1004,1082 565,617 1027,0 816,0 Z"/>
+ <glyph unicode="i" horiz-adv-x="187" d="M 137,1312 L 137,1484 317,1484 317,1312 137,1312 Z M 137,0 L 137,1082 317,1082 317,0 137,0 Z"/>
+ <glyph unicode="h" horiz-adv-x="874" d="M 317,897 C 337,934 359,965 382,991 405,1016 431,1037 459,1054 487,1071 518,1083 551,1091 584,1098 622,1102 663,1102 732,1102 789,1093 834,1074 878,1055 913,1029 939,996 964,962 982,922 992,875 1001,828 1006,777 1006,721 L 1006,0 825,0 825,686 C 825,732 822,772 817,807 811,842 800,871 784,894 768,917 745,934 716,946 687,957 649,963 602,963 559,963 521,955 487,940 452,925 423,903 399,875 374,847 355,813 342,773 329,733 322,688 322,638 L 322,0 142,0 142,1484 322,1484 322,1098 C 322,1076 322,1054 321,1032 320,1010 320,990 319,971 318,952 317,937 316,924 315,911 315,902 314,897 L 317,897 Z"/>
+ <glyph unicode="g" horiz-adv-x="927" d="M 548,-425 C 486,-425 431,-419 383,-406 335,-393 294,-375 260,-352 226,-328 198,-300 177,-267 156,-234 140,-198 131,-158 L 312,-132 C 324,-182 351,-220 392,-248 433,-274 486,-288 553,-288 594,-288 631,-282 664,-271 697,-260 726,-241 749,-217 772,-191 790,-159 803,-119 816,-79 822,-30 822,27 L 822,201 820,201 C 807,174 790,148 771,123 751,98 727,75 699,56 670,37 637,21 600,10 563,-2 520,-8 472,-8 403,-8 345,4 296,27 247,50 207,84 176,130 145,176 122,233 108,302 93,370 86,449 86,539 86,626 93,704 108,773 122,842 145,901 178,950 210,998 252,1035 304,1061 355,1086 418,1099 492,1099 569,1099 635,1082 692,1047 748,1012 791,962 822,897 L 824,897 C 824,914 825,933 826,953 827,974 828,994 829,1012 830,1031 831,1046 832,1060 833,1073 835,1080 836,1080 L 1007,1080 C 1006,1074 1006,1064 1005,1050 1004,1035 1004,1018 1003,998 1002,978 1002,956 1002,932 1001,907 1001,882 1001,856 L 1001,30 C 1001,-121 964,-234 890,-311 815,-387 701,-425 548,-425 Z M 822,541 C 822,616 814,681 798,735 781,788 760,832 733,866 706,900 676,925 642,941 607,957 572,965 536,965 490,965 451,957 418,941 385,925 357,900 336,866 314,831 298,787 288,734 277,680 272,616 272,541 272,463 277,398 288,345 298,292 314,249 335,216 356,183 383,160 416,146 449,132 488,125 533,125 569,125 604,133 639,148 673,163 704,188 731,221 758,254 780,297 797,350 814,403 822,466 822,541 Z"/>
+ <glyph unicode="f" horiz-adv-x="557" d="M 361,951 L 361,0 181,0 181,951 29,951 29,1082 181,1082 181,1204 C 181,1243 185,1280 192,1314 199,1347 213,1377 233,1402 252,1427 279,1446 313,1461 347,1475 391,1482 445,1482 466,1482 489,1481 512,1479 535,1477 555,1474 572,1470 L 572,1333 C 561,1335 548,1337 533,1339 518,1340 504,1341 492,1341 465,1341 444,1337 427,1330 410,1323 396,1312 387,1299 377,1285 370,1268 367,1248 363,1228 361,1205 361,1179 L 361,1082 572,1082 572,951 361,951 Z"/>
+ <glyph unicode="e" horiz-adv-x="980" d="M 276,503 C 276,446 282,394 294,347 305,299 323,258 348,224 372,189 403,163 441,144 479,125 525,115 578,115 656,115 719,131 766,162 813,193 844,233 861,281 L 1019,236 C 1008,206 992,176 972,146 951,115 924,88 890,64 856,39 814,19 763,4 712,-12 650,-20 578,-20 418,-20 296,28 213,123 129,218 87,360 87,548 87,649 100,735 125,806 150,876 185,933 229,977 273,1021 324,1053 383,1073 442,1092 504,1102 571,1102 662,1102 738,1087 799,1058 860,1029 909,988 946,937 983,885 1009,824 1025,754 1040,684 1048,608 1048,527 L 1048,503 276,503 Z M 862,641 C 852,755 823,838 775,891 727,943 658,969 568,969 538,969 507,964 474,955 441,945 410,928 382,903 354,878 330,845 311,803 292,760 281,706 278,641 L 862,641 Z"/>
+ <glyph unicode="d" horiz-adv-x="927" d="M 821,174 C 788,105 744,55 689,25 634,-5 565,-20 484,-20 347,-20 247,26 183,118 118,210 86,349 86,536 86,913 219,1102 484,1102 566,1102 634,1087 689,1057 744,1027 788,979 821,914 L 823,914 C 823,921 823,931 823,946 822,960 822,975 822,991 821,1006 821,1021 821,1035 821,1049 821,1059 821,1065 L 821,1484 1001,1484 1001,219 C 1001,193 1001,168 1002,143 1002,119 1002,97 1003,77 1004,57 1004,40 1005,26 1006,11 1006,4 1007,4 L 835,4 C 834,11 833,20 832,32 831,44 830,58 829,73 828,89 827,105 826,123 825,140 825,157 825,174 L 821,174 Z M 275,542 C 275,467 280,403 289,350 298,297 313,253 334,219 355,184 381,159 413,143 445,127 484,119 530,119 577,119 619,127 656,142 692,157 722,182 747,217 771,251 789,296 802,351 815,406 821,474 821,554 821,631 815,696 802,749 789,802 771,844 746,877 721,910 691,933 656,948 620,962 579,969 532,969 488,969 450,961 418,946 386,931 359,906 338,872 317,838 301,794 291,740 280,685 275,619 275,542 Z"/>
+ <glyph unicode="c" horiz-adv-x="901" d="M 275,546 C 275,484 280,427 289,375 298,323 313,278 334,241 355,203 384,174 419,153 454,132 497,122 548,122 612,122 666,139 709,173 752,206 778,258 788,328 L 970,328 C 964,283 951,239 931,197 911,155 884,118 850,86 815,54 773,28 724,9 675,-10 618,-20 553,-20 468,-20 396,-6 337,23 278,52 230,91 193,142 156,192 129,251 112,320 95,388 87,462 87,542 87,615 93,679 105,735 117,790 134,839 156,881 177,922 203,957 232,986 261,1014 293,1037 328,1054 362,1071 398,1083 436,1091 474,1098 512,1102 551,1102 612,1102 666,1094 713,1077 760,1060 801,1038 836,1009 870,980 898,945 919,906 940,867 955,824 964,779 L 779,765 C 770,825 746,873 708,908 670,943 616,961 546,961 495,961 452,953 418,936 383,919 355,893 334,859 313,824 298,781 289,729 280,677 275,616 275,546 Z"/>
+ <glyph unicode="b" horiz-adv-x="953" d="M 1053,546 C 1053,169 920,-20 655,-20 573,-20 505,-5 451,25 396,54 352,102 318,168 L 316,168 C 316,150 316,132 315,113 314,94 313,77 312,61 311,45 310,31 309,19 308,8 307,2 306,2 L 132,2 C 133,8 133,18 134,32 135,47 135,64 136,84 137,104 137,126 138,150 138,174 138,199 138,225 L 138,1484 318,1484 318,1061 C 318,1041 318,1022 318,1004 317,985 317,969 316,955 315,938 315,923 314,908 L 318,908 C 351,977 396,1027 451,1057 506,1087 574,1102 655,1102 792,1102 892,1056 957,964 1021,872 1053,733 1053,546 Z M 864,540 C 864,615 859,679 850,732 841,785 826,829 805,864 784,898 758,923 726,939 694,955 655,963 609,963 562,963 520,955 484,940 447,925 417,900 393,866 368,832 350,787 337,732 324,677 318,609 318,529 318,452 324,387 337,334 350,281 368,239 393,206 417,173 447,149 483,135 519,120 560,113 607,113 651,113 689,121 721,136 753,151 780,176 801,210 822,244 838,288 849,343 859,397 864,463 864,540 Z"/>
+ <glyph unicode="a" horiz-adv-x="1060" d="M 414,-20 C 305,-20 224,9 169,66 114,124 87,203 87,303 87,375 101,434 128,480 155,526 190,562 234,588 277,614 327,632 383,642 439,652 496,657 554,657 L 797,657 797,717 C 797,762 792,800 783,832 774,863 759,889 740,908 721,928 697,942 668,951 639,960 604,965 565,965 530,965 499,963 471,958 443,953 419,944 398,931 377,918 361,900 348,878 335,855 327,827 323,793 L 135,810 C 142,853 154,892 173,928 192,963 218,994 253,1020 287,1046 330,1066 382,1081 433,1095 496,1102 569,1102 705,1102 807,1071 876,1009 945,946 979,856 979,738 L 979,272 C 979,219 986,179 1000,152 1014,125 1041,111 1080,111 1090,111 1100,112 1110,113 1120,114 1130,116 1139,118 L 1139,6 C 1116,1 1094,-3 1072,-6 1049,-9 1025,-10 1000,-10 966,-10 937,-5 913,4 888,13 868,26 853,45 838,63 826,86 818,113 810,140 805,171 803,207 L 797,207 C 778,172 757,141 734,113 711,85 684,61 653,42 622,22 588,7 549,-4 510,-15 465,-20 414,-20 Z M 455,115 C 512,115 563,125 606,146 649,167 684,194 713,226 741,259 762,294 776,332 790,371 797,408 797,443 L 797,531 600,531 C 556,531 514,528 475,522 435,517 400,506 370,489 340,472 316,449 299,418 281,388 272,349 272,300 272,241 288,195 320,163 351,131 396,115 455,115 Z"/>
+ <glyph unicode="U" horiz-adv-x="1192" d="M 731,-20 C 654,-20 580,-10 511,11 442,32 381,64 329,108 276,151 235,207 204,274 173,341 158,420 158,512 L 158,1409 349,1409 349,528 C 349,457 359,396 378,347 397,297 423,256 457,225 491,194 531,171 578,157 624,142 675,135 730,135 785,135 836,142 885,157 934,172 976,195 1013,227 1050,259 1079,301 1100,353 1121,404 1131,467 1131,541 L 1131,1409 1321,1409 1321,530 C 1321,436 1306,355 1275,286 1244,217 1201,159 1148,114 1095,69 1032,35 961,13 889,-9 812,-20 731,-20 Z"/>
+ <glyph unicode="T" horiz-adv-x="1192" d="M 720,1253 L 720,0 530,0 530,1253 46,1253 46,1409 1204,1409 1204,1253 720,1253 Z"/>
+ <glyph unicode="S" horiz-adv-x="1192" d="M 1272,389 C 1272,330 1261,275 1238,225 1215,175 1179,132 1131,96 1083,59 1023,31 950,11 877,-10 790,-20 690,-20 515,-20 378,11 280,72 182,133 120,222 93,338 L 278,375 C 287,338 302,305 321,275 340,245 367,219 400,198 433,176 473,159 522,147 571,135 629,129 697,129 754,129 806,134 853,144 900,153 941,168 975,188 1009,208 1036,234 1055,266 1074,297 1083,335 1083,379 1083,425 1073,462 1052,491 1031,520 1001,543 963,562 925,581 880,596 827,609 774,622 716,635 652,650 613,659 573,668 534,679 494,689 456,701 420,716 383,730 349,747 317,766 285,785 257,809 234,836 211,863 192,894 179,930 166,965 159,1006 159,1053 159,1120 173,1177 200,1225 227,1272 264,1311 312,1342 360,1373 417,1395 482,1409 547,1423 618,1430 694,1430 781,1430 856,1423 918,1410 980,1396 1032,1375 1075,1348 1118,1321 1152,1287 1178,1247 1203,1206 1224,1159 1239,1106 L 1051,1073 C 1042,1107 1028,1137 1011,1164 993,1191 970,1213 941,1231 912,1249 878,1263 837,1272 796,1281 747,1286 692,1286 627,1286 572,1280 528,1269 483,1257 448,1241 421,1221 394,1201 374,1178 363,1151 351,1124 345,1094 345,1063 345,1021 356,987 377,960 398,933 426,910 462,892 498,874 540,859 587,847 634,835 685,823 738,811 781,801 825,791 868,781 911,770 952,758 991,744 1030,729 1067,712 1102,693 1136,674 1166,650 1191,622 1216,594 1236,561 1251,523 1265,485 1272,440 1272,389 Z"/>
+ <glyph unicode="P" horiz-adv-x="1112" d="M 1258,985 C 1258,924 1248,867 1228,814 1207,761 1177,715 1137,676 1096,637 1046,606 985,583 924,560 854,549 773,549 L 359,549 359,0 168,0 168,1409 761,1409 C 844,1409 917,1399 979,1379 1041,1358 1093,1330 1134,1293 1175,1256 1206,1211 1227,1159 1248,1106 1258,1048 1258,985 Z M 1066,983 C 1066,1072 1039,1140 984,1187 929,1233 847,1256 738,1256 L 359,1256 359,700 746,700 C 856,700 937,724 989,773 1040,822 1066,892 1066,983 Z"/>
+ <glyph unicode="O" horiz-adv-x="1430" d="M 1495,711 C 1495,601 1479,501 1448,411 1416,321 1370,244 1310,180 1250,116 1177,67 1090,32 1003,-3 905,-20 795,-20 679,-20 577,-2 490,35 403,71 330,122 272,187 214,252 170,329 141,418 112,507 97,605 97,711 97,821 112,920 143,1009 174,1098 219,1173 278,1236 337,1298 411,1346 498,1380 585,1413 684,1430 797,1430 909,1430 1009,1413 1096,1379 1183,1345 1256,1297 1315,1234 1374,1171 1418,1096 1449,1007 1480,918 1495,820 1495,711 Z M 1300,711 C 1300,796 1289,873 1268,942 1246,1011 1214,1071 1172,1120 1129,1169 1077,1207 1014,1234 951,1261 879,1274 797,1274 713,1274 639,1261 576,1234 513,1207 460,1169 418,1120 375,1071 344,1011 323,942 302,873 291,796 291,711 291,626 302,549 324,479 345,408 377,348 420,297 462,246 515,206 578,178 641,149 713,135 795,135 883,135 959,149 1023,178 1086,207 1139,247 1180,298 1221,349 1251,409 1271,480 1290,551 1300,628 1300,711 Z"/>
+ <glyph unicode="N" horiz-adv-x="1165" d="M 1082,0 L 328,1200 C 329,1167 331,1135 333,1103 334,1076 336,1047 337,1017 338,986 338,959 338,936 L 338,0 168,0 168,1409 390,1409 1152,201 C 1150,234 1148,266 1146,299 1145,327 1143,358 1142,391 1141,424 1140,455 1140,485 L 1140,1409 1312,1409 1312,0 1082,0 Z"/>
+ <glyph unicode="M" horiz-adv-x="1377" d="M 1366,0 L 1366,940 C 1366,974 1366,1009 1367,1044 1368,1079 1369,1112 1370,1141 1371,1175 1373,1208 1375,1240 1366,1206 1356,1172 1346,1139 1337,1110 1328,1080 1318,1048 1307,1015 1297,986 1287,960 L 923,0 789,0 420,960 C 416,970 412,982 408,995 403,1008 399,1023 394,1038 389,1053 384,1068 379,1084 374,1099 369,1115 364,1130 353,1165 342,1202 331,1240 332,1203 333,1166 334,1129 335,1098 336,1065 337,1031 338,996 338,966 338,940 L 338,0 168,0 168,1409 419,1409 794,432 C 799,419 804,402 811,381 818,360 824,338 830,316 836,294 842,273 847,254 852,234 855,219 857,208 859,219 863,234 868,254 873,274 880,295 887,317 894,339 900,360 907,381 914,402 920,419 925,432 L 1293,1409 1538,1409 1538,0 1366,0 Z"/>
+ <glyph unicode="L" horiz-adv-x="927" d="M 168,0 L 168,1409 359,1409 359,156 1071,156 1071,0 168,0 Z"/>
+ <glyph unicode="H" horiz-adv-x="1165" d="M 1121,0 L 1121,653 359,653 359,0 168,0 168,1409 359,1409 359,813 1121,813 1121,1409 1312,1409 1312,0 1121,0 Z"/>
+ <glyph unicode="F" horiz-adv-x="1006" d="M 359,1253 L 359,729 1145,729 1145,571 359,571 359,0 168,0 168,1409 1169,1409 1169,1253 359,1253 Z"/>
+ <glyph unicode="E" horiz-adv-x="1138" d="M 168,0 L 168,1409 1237,1409 1237,1253 359,1253 359,801 1177,801 1177,647 359,647 359,156 1278,156 1278,0 168,0 Z"/>
+ <glyph unicode="D" horiz-adv-x="1218" d="M 1381,719 C 1381,602 1363,498 1328,409 1293,319 1244,244 1183,184 1122,123 1049,78 966,47 882,16 792,0 695,0 L 168,0 168,1409 634,1409 C 743,1409 843,1396 935,1369 1026,1342 1105,1300 1171,1244 1237,1187 1289,1116 1326,1029 1363,942 1381,839 1381,719 Z M 1189,719 C 1189,814 1175,896 1148,964 1121,1031 1082,1087 1033,1130 984,1173 925,1205 856,1226 787,1246 712,1256 630,1256 L 359,1256 359,153 673,153 C 747,153 816,165 879,189 942,213 996,249 1042,296 1088,343 1124,402 1150,473 1176,544 1189,626 1189,719 Z"/>
+ <glyph unicode="C" horiz-adv-x="1324" d="M 792,1274 C 712,1274 641,1261 580,1234 518,1207 466,1169 425,1120 383,1071 351,1011 330,942 309,873 298,796 298,711 298,626 310,549 333,479 356,408 389,348 432,297 475,246 527,207 590,179 652,151 722,137 800,137 855,137 905,144 950,159 995,173 1035,193 1072,219 1108,245 1140,276 1169,312 1198,347 1223,387 1245,430 L 1401,352 C 1376,299 1344,250 1307,205 1270,160 1226,120 1176,87 1125,54 1068,28 1005,9 941,-10 870,-20 791,-20 677,-20 577,-2 492,35 406,71 334,122 277,187 219,252 176,329 147,418 118,507 104,605 104,711 104,821 119,920 150,1009 180,1098 224,1173 283,1236 341,1298 413,1346 498,1380 583,1413 681,1430 790,1430 940,1430 1065,1401 1166,1342 1267,1283 1341,1196 1388,1081 L 1207,1021 C 1194,1054 1176,1086 1153,1117 1130,1147 1102,1174 1068,1197 1034,1220 994,1239 949,1253 903,1267 851,1274 792,1274 Z"/>
+ <glyph unicode="B" horiz-adv-x="1112" d="M 1258,397 C 1258,326 1244,265 1216,215 1188,164 1150,123 1103,92 1056,60 1001,37 938,22 875,7 809,0 740,0 L 168,0 168,1409 680,1409 C 758,1409 828,1403 889,1390 950,1377 1002,1356 1045,1328 1088,1300 1120,1265 1143,1222 1165,1179 1176,1127 1176,1067 1176,1028 1171,991 1160,956 1149,921 1132,890 1110,862 1087,833 1059,809 1026,789 992,768 953,753 908,743 965,736 1015,723 1059,704 1102,685 1139,660 1168,630 1197,600 1220,565 1235,526 1250,486 1258,443 1258,397 Z M 984,1044 C 984,1120 958,1174 906,1207 854,1240 779,1256 680,1256 L 359,1256 359,810 680,810 C 736,810 783,816 822,827 861,838 892,853 916,874 940,894 957,918 968,947 979,976 984,1008 984,1044 Z M 1065,412 C 1065,457 1057,495 1041,526 1024,557 1001,583 970,603 939,623 903,638 860,647 817,656 768,661 715,661 L 359,661 359,153 730,153 C 779,153 824,157 865,165 906,173 941,187 971,207 1000,227 1023,254 1040,287 1057,320 1065,362 1065,412 Z"/>
+ <glyph unicode="A" horiz-adv-x="1377" d="M 1167,0 L 1006,412 364,412 202,0 4,0 579,1409 796,1409 1362,0 1167,0 Z M 768,1026 C 757,1053 747,1080 738,1107 728,1134 719,1159 712,1182 705,1204 699,1223 694,1238 689,1253 686,1262 685,1265 684,1262 681,1252 676,1237 671,1222 665,1203 658,1180 650,1157 641,1132 632,1105 622,1078 612,1051 602,1024 L 422,561 949,561 768,1026 Z"/>
+ <glyph unicode="/" horiz-adv-x="583" d="M 0,-20 L 411,1484 569,1484 162,-20 0,-20 Z"/>
+ <glyph unicode="." horiz-adv-x="213" d="M 187,0 L 187,219 382,219 382,0 187,0 Z"/>
+ <glyph unicode="-" horiz-adv-x="531" d="M 91,464 L 91,624 591,624 591,464 91,464 Z"/>
+ <glyph unicode="," horiz-adv-x="239" d="M 385,219 L 385,51 C 385,16 384,-16 381,-46 378,-74 373,-101 366,-127 359,-151 351,-175 342,-197 332,-219 320,-241 307,-262 L 184,-262 C 214,-219 237,-175 254,-131 270,-87 278,-43 278,0 L 190,0 190,219 385,219 Z"/>
+ <glyph unicode=")" horiz-adv-x="557" d="M 555,528 C 555,435 548,346 534,262 520,177 498,96 468,18 438,-60 400,-136 353,-209 306,-282 251,-354 186,-424 L 12,-424 C 75,-354 129,-282 175,-209 220,-136 258,-60 287,19 316,98 338,179 353,264 367,349 374,437 374,530 374,623 367,711 353,796 338,881 316,962 287,1041 258,1119 220,1195 175,1269 129,1342 75,1414 12,1484 L 186,1484 C 251,1414 306,1342 353,1269 400,1196 438,1120 468,1042 498,964 520,883 534,798 548,713 555,625 555,532 L 555,528 Z"/>
+ <glyph unicode="(" horiz-adv-x="583" d="M 127,532 C 127,625 134,713 148,798 162,883 184,964 214,1042 244,1120 282,1196 329,1269 376,1342 431,1414 496,1484 L 670,1484 C 607,1414 553,1342 508,1269 462,1195 424,1119 395,1041 366,962 344,881 330,796 315,711 308,623 308,530 308,437 315,349 330,264 344,179 366,98 395,19 424,-60 462,-136 508,-209 553,-282 607,-354 670,-424 L 496,-424 C 431,-354 376,-282 329,-209 282,-136 244,-60 214,18 184,96 162,177 148,262 134,346 127,435 127,528 L 127,532 Z"/>
+ <glyph unicode="&amp;" horiz-adv-x="1297" d="M 1193,-12 C 1129,-12 1073,-1 1025,21 977,43 934,74 895,115 875,98 852,81 827,65 802,49 774,35 743,22 712,9 678,-1 642,-9 605,-16 566,-20 523,-20 445,-20 378,-10 321,10 264,30 217,58 180,93 143,128 116,169 99,217 81,264 72,316 72,371 72,424 81,472 98,515 115,558 138,597 169,632 199,667 235,698 277,726 319,753 365,778 415,800 403,823 392,847 383,873 373,898 364,924 357,950 350,976 344,1002 340,1028 336,1054 334,1079 334,1102 334,1146 341,1187 354,1226 367,1264 388,1297 417,1326 445,1354 481,1376 526,1393 570,1409 623,1417 685,1417 734,1417 779,1411 820,1398 861,1385 896,1367 926,1343 956,1319 979,1289 996,1254 1013,1219 1021,1178 1021,1133 1021,1083 1010,1039 988,1000 966,961 936,926 899,895 862,864 818,837 769,812 720,787 667,763 612,741 653,665 698,594 747,527 796,460 848,394 905,329 946,389 980,452 1007,519 1034,585 1057,658 1076,739 L 1221,696 C 1198,603 1168,519 1133,444 1097,368 1056,296 1009,227 1044,191 1080,166 1115,151 1150,136 1184,129 1217,129 1238,129 1259,130 1279,133 1298,135 1317,139 1334,145 L 1334,10 C 1315,3 1294,-3 1269,-7 1244,-10 1218,-12 1193,-12 Z M 869,1133 C 869,1158 865,1180 856,1200 847,1220 834,1237 818,1252 802,1266 783,1277 760,1285 737,1292 711,1296 683,1296 619,1296 570,1279 537,1245 504,1210 487,1163 487,1102 487,1063 493,1022 506,979 518,936 533,895 552,858 595,875 636,893 675,912 714,930 747,950 776,972 805,993 827,1017 844,1044 861,1070 869,1100 869,1133 Z M 795,217 C 736,287 679,360 624,437 569,514 520,593 476,674 401,642 343,601 302,552 261,503 240,443 240,373 240,336 246,302 258,271 269,239 287,211 311,188 335,164 365,145 402,132 438,118 480,111 529,111 558,111 586,114 613,121 639,127 663,135 686,145 709,155 729,166 748,179 766,192 782,204 795,217 Z"/>
+ <glyph unicode=" " horiz-adv-x="556"/>
+ </font>
+ </defs>
+ <defs>
+ <font id="EmbeddedFont_3" horiz-adv-x="2048">
+ <font-face font-family="Liberation Sans embedded" units-per-em="2048" font-weight="normal" font-style="italic" ascent="1852" descent="423"/>
+ <missing-glyph horiz-adv-x="2048" d="M 0,0 L 2047,0 2047,2047 0,2047 0,0 Z"/>
+ <glyph unicode="r" horiz-adv-x="742" d="M 718,938 C 707,941 693,944 678,947 662,950 645,951 628,951 585,951 547,939 513,914 479,889 449,858 424,820 398,782 377,740 360,695 343,649 331,605 324,564 L 214,0 34,0 196,830 C 201,853 205,877 209,900 213,923 217,946 221,968 224,990 228,1011 231,1031 234,1050 237,1067 239,1082 L 409,1082 C 407,1067 405,1050 402,1030 399,1010 395,990 392,969 389,948 386,929 383,910 380,891 377,874 374,861 L 378,861 C 399,902 419,938 440,969 460,999 481,1024 503,1044 525,1063 549,1078 574,1088 599,1097 626,1102 656,1102 663,1102 671,1102 680,1101 689,1100 698,1098 707,1097 716,1096 724,1094 732,1093 740,1091 746,1089 751,1088 L 718,938 Z"/>
+ <glyph unicode="n" horiz-adv-x="1033" d="M 717,0 L 843,645 C 848,671 853,698 856,725 859,752 861,775 861,795 861,848 847,889 819,918 791,947 745,962 682,962 639,962 599,954 562,937 524,920 490,896 459,865 428,834 402,796 381,753 359,709 343,660 332,606 L 214,0 34,0 200,853 C 205,876 209,900 214,925 218,950 222,974 226,996 229,1019 232,1038 235,1054 237,1070 238,1078 239,1078 L 409,1078 C 409,1075 408,1066 406,1052 404,1037 402,1021 399,1002 396,984 393,965 390,945 387,926 384,910 381,897 L 384,897 C 407,928 430,957 454,982 478,1007 505,1029 534,1047 563,1064 595,1078 630,1087 665,1096 704,1101 749,1101 848,1101 922,1077 972,1028 1021,979 1046,909 1046,817 1046,793 1044,766 1040,736 1035,706 1030,678 1025,653 L 898,0 717,0 Z"/>
+ <glyph unicode="i" horiz-adv-x="478" d="M 287,1312 L 321,1484 501,1484 467,1312 287,1312 Z M 33,0 L 243,1082 423,1082 212,0 33,0 Z"/>
+ <glyph unicode="e" horiz-adv-x="1006" d="M 256,503 C 253,484 251,466 250,447 249,428 248,409 247,390 247,301 269,233 314,186 358,139 425,115 514,115 551,115 585,120 616,130 647,139 675,152 700,169 725,185 747,204 766,226 785,247 800,270 813,294 L 951,231 C 934,201 914,171 890,142 866,112 836,85 801,61 765,37 722,18 672,3 622,-12 562,-20 493,-20 426,-20 367,-10 314,9 261,28 217,55 181,92 144,128 117,172 98,225 79,278 69,338 69,405 69,510 83,606 112,692 140,778 179,851 230,912 280,973 339,1020 408,1053 476,1086 550,1102 630,1102 703,1102 767,1092 821,1073 875,1054 920,1027 956,992 992,957 1019,916 1037,868 1054,819 1063,766 1063,708 1063,694 1063,679 1062,662 1061,645 1059,628 1057,610 1055,592 1053,574 1050,556 1047,537 1043,520 1039,503 L 256,503 Z M 880,641 C 881,654 882,667 883,679 884,690 884,702 884,713 884,757 878,795 866,828 854,860 837,887 815,908 793,929 767,944 736,954 705,964 671,969 634,969 602,969 568,964 533,955 498,945 464,928 432,903 399,878 370,845 343,803 316,760 295,706 280,641 L 880,641 Z"/>
+ <glyph unicode="d" horiz-adv-x="1139" d="M 401,-21 C 348,-21 300,-13 259,4 218,21 183,44 155,75 127,106 106,143 91,187 76,230 69,279 69,333 69,363 71,399 74,440 77,481 82,523 90,565 108,660 132,741 161,809 190,876 226,932 267,975 308,1018 356,1050 409,1071 462,1091 522,1101 588,1101 670,1101 737,1084 789,1049 840,1014 877,966 898,903 L 903,903 C 904,910 906,921 909,936 912,951 915,968 918,985 921,1002 923,1018 926,1033 929,1048 930,1059 931,1065 L 1013,1484 1193,1484 948,219 C 943,193 938,168 934,143 929,119 925,97 922,77 919,57 916,40 914,26 912,11 911,4 910,4 L 738,4 C 738,17 740,38 744,66 747,95 752,126 759,160 L 754,160 C 730,129 706,102 681,79 656,56 629,38 601,23 573,8 543,-3 510,-11 477,-17 441,-21 401,-21 Z M 453,118 C 496,118 536,124 575,137 613,150 648,172 681,203 714,234 743,275 768,328 793,381 813,447 828,527 841,592 847,651 847,704 847,747 841,785 830,818 819,851 803,878 782,901 761,923 735,940 706,951 676,962 643,968 607,968 566,968 529,962 496,950 462,937 432,916 405,886 378,855 354,815 334,764 313,713 295,648 280,571 265,490 257,422 257,365 257,283 273,221 304,180 335,139 385,118 453,118 Z"/>
+ <glyph unicode="U" horiz-adv-x="1351" d="M 654,-20 C 585,-20 520,-11 459,7 398,25 344,53 299,90 254,127 218,174 192,231 166,288 153,354 153,431 153,445 154,461 155,480 156,498 158,516 161,535 163,554 165,572 168,590 171,607 173,622 176,635 L 326,1409 517,1409 355,566 C 350,542 346,517 343,492 340,466 338,443 338,423 338,374 346,331 363,295 380,259 403,229 432,206 461,182 496,164 537,153 578,141 622,135 670,135 728,135 782,142 832,157 881,172 926,195 966,227 1005,259 1039,301 1068,353 1096,404 1117,467 1131,541 L 1299,1409 1489,1409 1319,530 C 1300,436 1272,355 1234,286 1195,217 1148,159 1091,114 1034,69 969,35 896,13 823,-9 742,-20 654,-20 Z"/>
+ <glyph unicode="I" horiz-adv-x="478" d="M 81,0 L 355,1409 546,1409 272,0 81,0 Z"/>
+ <glyph unicode="B" horiz-adv-x="1244" d="M 336,1409 L 846,1409 C 915,1409 978,1402 1033,1387 1088,1372 1136,1351 1175,1324 1214,1296 1244,1262 1265,1222 1286,1182 1296,1137 1296,1087 1296,990 1267,913 1210,857 1153,800 1068,762 957,743 1004,735 1046,722 1083,704 1119,685 1149,663 1174,636 1198,609 1216,579 1229,546 1241,513 1247,477 1247,439 1247,384 1239,334 1224,291 1209,248 1187,210 1160,177 1133,144 1101,117 1064,95 1027,72 986,54 943,40 899,26 853,16 805,10 756,3 707,0 658,0 L 63,0 336,1409 Z M 411,810 L 742,810 C 863,810 952,832 1010,875 1068,918 1097,983 1097,1068 1097,1131 1074,1179 1029,1210 983,1241 916,1256 829,1256 L 498,1256 411,810 Z M 283,153 L 651,153 C 703,153 754,157 803,165 852,173 895,188 932,209 969,230 999,260 1022,297 1045,334 1056,383 1056,442 1056,513 1030,568 977,605 924,642 847,661 748,661 L 382,661 283,153 Z"/>
+ </font>
+ </defs>
+ <defs>
+ <font id="EmbeddedFont_4" horiz-adv-x="2048">
+ <font-face font-family="StarSymbol embedded" units-per-em="2048" font-weight="normal" font-style="normal" ascent="1879" descent="635"/>
+ <missing-glyph horiz-adv-x="2048" d="M 0,0 L 2047,0 2047,2047 0,2047 0,0 Z"/>
+ <glyph unicode="●" horiz-adv-x="1191" d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/>
+ </font>
+ </defs>
+ <defs class="TextShapeIndex">
+ <g ooo:slide="id1" ooo:id-list="id3 id4 id5 id6 id7 id8 id9 id10 id11 id12"/>
+ </defs>
+ <defs class="EmbeddedBulletChars">
+ <g id="bullet-char-template(57356)" transform="scale(0.00048828125,-0.00048828125)">
+ <path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/>
+ </g>
+ <g id="bullet-char-template(57354)" transform="scale(0.00048828125,-0.00048828125)">
+ <path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/>
+ </g>
+ <g id="bullet-char-template(10146)" transform="scale(0.00048828125,-0.00048828125)">
+ <path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/>
+ </g>
+ <g id="bullet-char-template(10132)" transform="scale(0.00048828125,-0.00048828125)">
+ <path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/>
+ </g>
+ <g id="bullet-char-template(10007)" transform="scale(0.00048828125,-0.00048828125)">
+ <path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/>
+ </g>
+ <g id="bullet-char-template(10004)" transform="scale(0.00048828125,-0.00048828125)">
+ <path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/>
+ </g>
+ <g id="bullet-char-template(9679)" transform="scale(0.00048828125,-0.00048828125)">
+ <path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/>
+ </g>
+ <g id="bullet-char-template(8226)" transform="scale(0.00048828125,-0.00048828125)">
+ <path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/>
+ </g>
+ <g id="bullet-char-template(8211)" transform="scale(0.00048828125,-0.00048828125)">
+ <path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/>
+ </g>
+ <g id="bullet-char-template(61548)" transform="scale(0.00048828125,-0.00048828125)">
+ <path d="M 173,740 C 173,903 231,1043 346,1159 462,1274 601,1332 765,1332 928,1332 1067,1274 1183,1159 1299,1043 1357,903 1357,740 1357,577 1299,437 1183,322 1067,206 928,148 765,148 601,148 462,206 346,322 231,437 173,577 173,740 Z"/>
+ </g>
+ </defs>
+ <defs class="TextEmbeddedBitmaps"/>
+ <g>
+ <g id="id2" class="Master_Slide">
+ <g id="bg-id2" class="Background"/>
+ <g id="bo-id2" class="BackgroundObjects"/>
+ </g>
+ </g>
+ <g class="SlideGroup">
+ <g>
+ <g id="container-id1">
+ <g id="id1" class="Slide" clip-path="url(#presentation_clip_path)">
+ <g class="Page">
+ <g class="com.sun.star.drawing.CustomShape">
+ <g id="id3">
+ <rect class="BoundingBox" stroke="none" fill="none" x="1399" y="5504" width="9003" height="13303"/>
+ <path fill="rgb(204,253,196)" stroke="none" d="M 5900,18805 L 1400,18805 1400,5505 10400,5505 10400,18805 5900,18805 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 5900,18805 L 1400,18805 1400,5505 10400,5505 10400,18805 5900,18805 Z"/>
+ <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-style="italic" font-weight="400"><tspan class="TextPosition" x="1650" y="6015"><tspan fill="rgb(0,0,0)" stroke="none">Binder</tspan></tspan></tspan></text>
+ </g>
+ </g>
+ <g class="com.sun.star.drawing.CustomShape">
+ <g id="id4">
+ <rect class="BoundingBox" stroke="none" fill="none" x="5399" y="13304" width="11503" height="4203"/>
+ <path fill="rgb(35,255,35)" stroke="none" d="M 11150,17505 L 5400,17505 5400,13305 16900,13305 16900,17505 11150,17505 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 11150,17505 L 5400,17505 5400,13305 16900,13305 16900,17505 11150,17505 Z"/>
+ <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="8674" y="13894"><tspan fill="rgb(0,0,0)" stroke="none">CAN Low Level Binding(s)</tspan></tspan></tspan><tspan ooo:numbering-type="bullet-style" class="ListItem" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="5650" y="14751"><tspan id="id13.bp" class="BulletPlaceholder"/></tspan><tspan class="TextPosition" x="6250" y="14842"><tspan fill="rgb(0,0,0)" stroke="none">Deco</tspan><tspan fill="rgb(0,0,0)" stroke="none">ding / Encoding</tspan></tspan></tspan><tspan ooo:numbering-type="bullet-style" class="ListItem" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="5650" y="15225"><tspan id="id14.bp" class="BulletPlaceholder"/></tspan><tspan class="TextPosition" x="6250" y="15316"><tspan fill="rgb(0,0,0)" stroke="none">Authentication / Crypto / Firewalling</tspan></tspan></tspan><tspan ooo:numbering-type="bullet-style" class="ListItem" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="5650" y="15699"><tspan id="id15.bp" class="BulletPlaceholder"/></tspan><tspan class="TextPosition" x="6250" y="15790"><tspan fill="rgb(0,0,0)" stroke="none">Transaction (set… ack ...)</tspan></tspan></tspan><tspan ooo:numbering-type="bullet-style" class="ListItem" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="5650" y="16173"><tspan id="id16.bp" class="BulletPlaceholder"/></tspan><tspan class="TextPosition" x="6250" y="16264"><tspan fill="rgb(0,0,0)" stroke="none">Stats &amp; Maths</tspan></tspan></tspan><tspan ooo:numbering-type="bullet-style" class="ListItem" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="5650" y="16647"><tspan id="id17.bp" class="BulletPlaceholder"/></tspan><tspan class="TextPosition" x="6250" y="16738"><tspan fill="rgb(0,0,0)" stroke="none">Caching (low freq. Signals, get() call)</tspan></tspan></tspan><tspan ooo:numbering-type="bullet-style" class="ListItem" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="5650" y="17121"><tspan id="id18.bp" class="BulletPlaceholder"/></tspan><tspan class="TextPosition" x="6250" y="17212"><tspan fill="rgb(0,0,0)" stroke="none">Debug</tspan></tspan></tspan></text>
+ <g class="BulletChars">
+ <g id="bullet-char(id18.bp)" class="BulletChar">
+ <g transform="translate(5650,17121)" fill="rgb(0,0,0)" stroke="none">
+ <use transform="scale(190,190)" xlink:href="#bullet-char-template(9679)"/>
+ </g>
+ </g>
+ <g id="bullet-char(id17.bp)" class="BulletChar">
+ <g transform="translate(5650,16647)" fill="rgb(0,0,0)" stroke="none">
+ <use transform="scale(190,190)" xlink:href="#bullet-char-template(9679)"/>
+ </g>
+ </g>
+ <g id="bullet-char(id13.bp)" class="BulletChar">
+ <g transform="translate(5650,14751)" fill="rgb(0,0,0)" stroke="none">
+ <use transform="scale(190,190)" xlink:href="#bullet-char-template(9679)"/>
+ </g>
+ </g>
+ <g id="bullet-char(id14.bp)" class="BulletChar">
+ <g transform="translate(5650,15225)" fill="rgb(0,0,0)" stroke="none">
+ <use transform="scale(190,190)" xlink:href="#bullet-char-template(9679)"/>
+ </g>
+ </g>
+ <g id="bullet-char(id15.bp)" class="BulletChar">
+ <g transform="translate(5650,15699)" fill="rgb(0,0,0)" stroke="none">
+ <use transform="scale(190,190)" xlink:href="#bullet-char-template(9679)"/>
+ </g>
+ </g>
+ <g id="bullet-char(id16.bp)" class="BulletChar">
+ <g transform="translate(5650,16173)" fill="rgb(0,0,0)" stroke="none">
+ <use transform="scale(190,190)" xlink:href="#bullet-char-template(9679)"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g class="com.sun.star.drawing.CustomShape">
+ <g id="id5">
+ <rect class="BoundingBox" stroke="none" fill="none" x="5399" y="6604" width="11503" height="4403"/>
+ <path fill="rgb(35,255,35)" stroke="none" d="M 11150,11005 L 5400,11005 5400,6605 16900,6605 16900,11005 11150,11005 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 11150,11005 L 5400,11005 5400,6605 16900,6605 16900,11005 11150,11005 Z"/>
+ <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="8627" y="7990"><tspan fill="rgb(0,0,0)" stroke="none">CAN High Level Binding(s)</tspan></tspan></tspan><tspan ooo:numbering-type="bullet-style" class="ListItem" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="5650" y="8847"><tspan id="id19.bp" class="BulletPlaceholder"/></tspan><tspan class="TextPosition" x="6250" y="8938"><tspan fill="rgb(0,0,0)" stroke="none">Logic</tspan></tspan></tspan><tspan ooo:numbering-type="bullet-style" class="ListItem" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="5650" y="9336"><tspan id="id20.bp" class="BulletPlaceholder"/></tspan><tspan class="TextPosition" x="6250" y="9412"><tspan fill="rgb(0,0,0)" stroke="none">Aggregation (« </tspan><tspan font-family="Courier, monospace" fill="rgb(0,0,0)" stroke="none">vehicle.doors.any.open</tspan><tspan fill="rgb(0,0,0)" stroke="none"> »)</tspan></tspan></tspan><tspan ooo:numbering-type="bullet-style" class="ListItem" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="5650" y="9825"><tspan id="id21.bp" class="BulletPlaceholder"/></tspan><tspan class="TextPosition" x="6250" y="9916"><tspan fill="rgb(0,0,0)" stroke="none">Advanced Ops</tspan></tspan></tspan></text>
+ <g class="BulletChars">
+ <g id="bullet-char(id21.bp)" class="BulletChar">
+ <g transform="translate(5650,9825)" fill="rgb(0,0,0)" stroke="none">
+ <use transform="scale(190,190)" xlink:href="#bullet-char-template(9679)"/>
+ </g>
+ </g>
+ <g id="bullet-char(id20.bp)" class="BulletChar">
+ <g transform="translate(5650,9336)" fill="rgb(0,0,0)" stroke="none">
+ <use transform="scale(190,190)" xlink:href="#bullet-char-template(9679)"/>
+ </g>
+ </g>
+ <g id="bullet-char(id19.bp)" class="BulletChar">
+ <g transform="translate(5650,8847)" fill="rgb(0,0,0)" stroke="none">
+ <use transform="scale(190,190)" xlink:href="#bullet-char-template(9679)"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g class="Group">
+ <g class="com.sun.star.drawing.LineShape">
+ <g id="id6">
+ <rect class="BoundingBox" stroke="none" fill="none" x="1699" y="19404" width="19603" height="390"/>
+ <path fill="none" stroke="rgb(0,0,0)" d="M 1700,19405 L 21300,19405"/>
+ <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="10558" y="19790"><tspan fill="rgb(0,0,0)" stroke="none">CAN BUS</tspan></tspan></tspan></text>
+ </g>
+ </g>
+ <g class="com.sun.star.drawing.CustomShape">
+ <g id="id7">
+ <rect class="BoundingBox" stroke="none" fill="none" x="14700" y="19205" width="402" height="402"/>
+ <path fill="rgb(0,0,0)" stroke="none" d="M 14900,19205 C 15013,19205 15100,19292 15100,19405 15100,19518 15013,19605 14900,19605 14787,19605 14700,19518 14700,19405 14700,19292 14787,19205 14900,19205 Z M 14700,19205 L 14700,19205 Z M 15101,19606 L 15101,19606 Z"/>
+ </g>
+ </g>
+ </g>
+ <g class="com.sun.star.drawing.ConnectorShape">
+ <g id="id8">
+ <rect class="BoundingBox" stroke="none" fill="none" x="12402" y="17505" width="4902" height="1701"/>
+ <path fill="none" stroke="rgb(0,0,0)" d="M 14851,17935 L 14882,18775"/>
+ <path fill="rgb(0,0,0)" stroke="none" d="M 14835,17505 L 14702,17960 15002,17949 14835,17505 Z"/>
+ <path fill="rgb(0,0,0)" stroke="none" d="M 14898,19205 L 15031,18750 14731,18761 14898,19205 Z"/>
+ <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="12381" y="18488"><tspan fill="rgb(0,0,0)" stroke="none">CAN frames - </tspan><tspan font-family="Courier, monospace" fill="rgb(0,0,0)" stroke="none">011010010</tspan></tspan></tspan></text>
+ </g>
+ </g>
+ <g class="com.sun.star.drawing.ConnectorShape">
+ <g id="id9">
+ <rect class="BoundingBox" stroke="none" fill="none" x="10919" y="11005" width="8422" height="2301"/>
+ <path fill="none" stroke="rgb(0,0,0)" d="M 15130,11435 L 15130,12875"/>
+ <path fill="rgb(0,0,0)" stroke="none" d="M 15130,11005 L 14980,11455 15280,11455 15130,11005 Z"/>
+ <path fill="rgb(0,0,0)" stroke="none" d="M 15130,13305 L 15280,12855 14980,12855 15130,13305 Z"/>
+ <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="10900" y="12051"><tspan fill="rgb(0,0,0)" stroke="none">Signals - «</tspan><tspan font-family="Courier, monospace" fill="rgb(0,0,0)" stroke="none"> vehicle.doors.left.open</tspan><tspan fill="rgb(0,0,0)" stroke="none"> »</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="13667" y="12555"><tspan fill="rgb(0,0,0)" stroke="none">(Binder Events)</tspan></tspan></tspan></text>
+ </g>
+ </g>
+ <g class="com.sun.star.drawing.CustomShape">
+ <g id="id10">
+ <rect class="BoundingBox" stroke="none" fill="none" x="1299" y="1104" width="15603" height="3003"/>
+ <path fill="rgb(204,253,196)" stroke="none" d="M 9100,4105 L 1300,4105 1300,1105 16900,1105 16900,4105 9100,4105 Z"/>
+ <path fill="none" stroke="rgb(52,101,164)" d="M 9100,4105 L 1300,4105 1300,1105 16900,1105 16900,4105 9100,4105 Z"/>
+ <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-style="italic" font-weight="400"><tspan class="TextPosition" x="1550" y="1615"><tspan fill="rgb(0,0,0)" stroke="none">UI</tspan></tspan></tspan></text>
+ </g>
+ </g>
+ <g class="com.sun.star.drawing.ConnectorShape">
+ <g id="id11">
+ <rect class="BoundingBox" stroke="none" fill="none" x="12794" y="4104" width="3808" height="2502"/>
+ <path fill="none" stroke="rgb(0,0,0)" d="M 14698,4105 L 14698,6175"/>
+ <path fill="rgb(0,0,0)" stroke="none" d="M 14698,6605 L 14848,6155 14548,6155 14698,6605 Z"/>
+ <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="423px" font-weight="400"><tspan class="TextPosition" x="12761" y="5503"><tspan fill="rgb(0,0,0)" stroke="none">Publish Subscribe</tspan></tspan></tspan></text>
+ </g>
+ </g>
+ <g class="com.sun.star.drawing.ConnectorShape">
+ <g id="id12">
+ <rect class="BoundingBox" stroke="none" fill="none" x="15448" y="4105" width="302" height="2502"/>
+ <path fill="none" stroke="rgb(0,0,0)" d="M 15599,6605 L 15598,4535"/>
+ <path fill="rgb(0,0,0)" stroke="none" d="M 15598,4105 L 15448,4555 15748,4555 15598,4105 Z"/>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg> \ No newline at end of file
diff --git a/signaling/index.md b/signaling/index.md
index d3ebcd0..cb466ae 100644
--- a/signaling/index.md
+++ b/signaling/index.md
@@ -1,8 +1,8 @@
-# AGL Message Signaling (proposal)
+# AGL Message Signaling
-## Architecture Proposal
+## Architecture
-This [document](./architecture.md) presents a proposal of architecture for message signaling in AGL.
+This [document](./architecture.md) presents an architecture for message signaling in AGL.
Also available as a [PDF Document](http://iot.bzh/download/public/2016/signaling/AGL-Message-Signaling-Architecture.pdf)
@@ -18,7 +18,19 @@ A reference HTML5 application has been developed: see [github:iotbzh/txc-demo](h
This application uses a [OpenXC trace file](http://openxcplatform.com/resources/traces.html) to display 4 different panels representing live vehicle data.
-It's available as an [AGL Application paclage](http://iot.bzh/download/public/2016/afb-demos/txc-demo_0.1.wgt) installable through AGL Application Framework.
+It's available as an [AGL Application package](http://iot.bzh/download/public/2016/afb-demos/txc-demo_0.1.wgt) installable through AGL Application Framework.
+
+## Low level CAN service
+
+A project to access and decode CAN bus has been developed and part of AGL since Daring Dab version: [Low level CAN service](https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/low-level-can-service)
+
+This rewrite of OpenXC to adapt the project to AGL.
+
+Must be used in conjunction with the [low level CAN generator](https://gerrit.automotivelinux.org/gerrit/#/admin/projects/src/low-level-can-generator) to custom your service.
+
+## High Level ViWi service
+
+An implementation of [ViWi](https://www.w3.org/Submission/2016/SUBM-viwi-protocol-20161213/) protocol has been made and available : [github.com:iotbzh/high-level-viwi-service](https://github.com/iotbzh/high-level-viwi-service)
## Benchmarks
@@ -28,5 +40,11 @@ Some tests to evaluate the performances of the framework have been done by simul
[Jose's presentation at AGL AMM Munich'16](http://iot.bzh/download/public/2016/build-agl-application-AMM-Munich-2016/)
+## AMM Tokyo'17 Presentation
+
+[Kusakabe-san from Fujitsu-Ten presentation at AGL AMM Tokyo'17](http://schd.ws/hosted_files/aglmmwinter2017/37/20170201_AGL-AMM_F10_kusakabe.pdf)
+## F2F Karslruhe'17 Presentation
+[Romain's presentation at AGL F2F Karslruhe'17](http://iot.bzh/download/public/2017/F2F-Karslruhe/AGL-Signaling.pdf)
+[Kusakabe-san from Fujitsu-Ten presentation at AGL F2F Karslruhe'17](https://wiki.automotivelinux.org/_media/agl-distro/20170402_ften_can_kusakabe_v2.pdf)
diff --git a/signaling/low-level-can-service-guide.md b/signaling/low-level-can-service-guide.md
new file mode 100644
index 0000000..6b3eb47
--- /dev/null
+++ b/signaling/low-level-can-service-guide.md
@@ -0,0 +1,584 @@
+# AGL CAN binding architecture
+
+It's meant to generate, from a JSON file describing CAN messages and diagnostic
+message \(OBD2 for now\), a cpp file to integrate with the project.
+
+Once generated binding is built with it and result will be a widget file to
+install on an AGL target system.
+
+![From OpenXC firmware to AGL binding](images/OpenXC_to_AGL.png)
+
+Bringing CAN management into the AGL project is more than allowing decode and
+print CAN messages, lot of tools can do that (Wireshark, CAN-utils, ...).
+
+The goal is to provide a common API and abstraction to the CAN bus then you can
+bring some more high level functionalities to the system.
+
+CAN binding will be separated in two parts:
+
+![CAN low and high level bindings mapping](images/CAN_level_mapping.png)
+
+- High level: Binding from which others applications will connect to.
+ It provides valuable access to the CAN bus by aggregate signals or providing
+ new signals from several originals. For example, a signal exposing whether or
+ not a door is open, no matter which one it is. Also, we can imagine an
+ application which supervise if there is no one in the car but moving (1m, 2m ?)
+ to alert the owner of an unexpected behavior. The high level binding will sends
+ a single event representing that behavior to the application which in turn will
+ send a phone message to.
+
+- Low level: Decode messages that transit and send event through **Application
+ Framework** to the subscribers with human readable message. It provides some
+ basic access to the bus + some basic mathematical, statistical features
+ (last_values, min, max, timestamps, averaging) as well as basic filter to get
+ discerning signal only (This part are not implemented yet in the low level).
+
+![Communication between CAN bindings and third applications](images/CAN_bindings_communication.png)
+
+Last but not least, the low level binding can be shipped as binary only using
+OpenXC inspired [AGL low level CAN binding Generator](http://github.com/iotbzh/can-config-generator).
+
+# Prerequisites
+
+- An AGL system installed with latest Daring Dab version with latest Application
+ framework version >= 0.6.
+- Make sure you built the AGL generator else you will not be able to generate
+ custom low-level CAN binding.
+It will produce a _application-generated.cpp_ file to paste in the source,
+ _CAN-binder/low-can-binding/binding/_, directory.
+- Make sure you already set up the AGL SDK using the following
+ [SDK Quick Setup Guide](http://docs.iot.bzh/docs/getting_started/en/dev/reference/setup-sdk-environment.html).
+ Alternatively, please refer to official guides available on [AGL Developer Site](http://docs.automotivelinux.org/docs/devguides/en/dev/#guides).
+
+If you need to have the graphic stack inside your SDK, you have to prepare your
+ environment with the **iotbzh**, or **Daring Dab** flavor using _prepare_meta_
+ tool. To do so, run the following command in your docker image in the step 4
+ in place of `... [ prepare build environment ] ...`:
+
+> **NOTE** These commands assume that proprietary graphic drivers for Renesas
+Porter board are located in _/home/devel/share/proprietary-renesas-rcar_ directory.
+
+```bash
+prepare_meta -f iotbzh -o /xdt -l /home/devel/mirror -p /home/devel/share/proprietary-renesas-rcar/ -t m3ulcb -e wipeconfig -e rm_work -e cleartemp
+/xdt/build/m3ulcb/agl-init-build-env
+```
+
+- (Optionnal) An [USB CAN adapter](http://shop.8devices.com/usb2can) connected to
+ connector through the [right cable](http://www.mouser.fr/ProductDetail/EasySync/OBD-M-DB9-F-ES/))
+if you want to connect to a real car through the OBD2 connector.
+
+# Getting started
+
+## CAN config generator usage
+
+### Build requirements
+
+- CMake version 3.3 or later
+- G++, Clang++ or any C++11 compliant compiler.
+
+### Compile
+
+```bash
+source /xdt/sdk/environment-setup-aarch64-agl-linux
+export PATH=$PATH:/xdt/sdk/sysroots/x86_64-aglsdk-linux/usr/bin
+export WD=$(pwd)
+git clone --recursive https://gerrit.automotivelinux.org/gerrit/apps/low-level-can-service -b Renesas_delivery_Q2
+git clone --recursive https://gerrit.automotivelinux.org/gerrit/apps/low-level-can-generator
+cd ${WD}/low-level-can-generator
+mkdir -p build
+cd build
+cmake -G "Unix Makefiles" ..
+make
+```
+
+### Naming convention
+
+We chose a doted naming convention because it's a well know schema.
+
+It separates and organize names into hierarchy. From the left to right, you
+describe your names using the more common ancestor at the left then more you go
+to the right the more it will be accurate.
+
+Let's take an example, here is an example about standard PID name following this
+convention:
+
+```
+engine.load
+engine.coolant.temperature
+fuel.pressure
+intake.manifold.pressure
+engine.speed
+vehicle.speed
+intake.air.temperature
+mass.airflow
+throttle.position
+running.time
+EGR.error
+fuel.level
+barometric.pressure
+commanded.throttle.position
+ethanol.fuel.percentage
+accelerator.pedal.position
+hybrid.battery-pack.remaining.life
+engine.oil.temperature
+engine.torque
+```
+
+> **NOTE** It's recommended that you follow this naming convention to named
+> your CAN signals.
+>
+> There is only character `*` that is forbidden in names because it's used as
+> wildcard for subscription and unsubscription.
+>
+> This described in the below chapter.
+
+### Available decoder
+
+You can use some basic decoder provided by default by the binding which are:
+
+- ***decoder_t::noopDecoder*** : Default decoder if not specified, return raw
+ value from signal's bitfield.
+- ***decoder_t::booleanDecoder*** : Coerces a numerical value to a boolean.
+- ***decoder_t::stateDecoder***s : Find and return the corresponding string
+ state for a CAN signal's raw integer value.
+
+### Generating JSON from Vector CANoe Database
+
+> **CAUTION** This chapter has not been tested since it haven't necessary
+> automotive tools for that.
+
+If you use CANoe to store your `gold standard` CAN signal definitions, you may
+be able to use the OpenXC `xml_to_json.py` script to make your JSON for you.
+First, export the Canoe .dbc file as XML - you can do this with Vector CANdb++.
+Next, create a JSON file according to the format defined above, but only define:
+
+- CAN messages.
+- Name of CAN signals within messages and their generic_name.
+- Optionnaly name of diagnostic messages and their name.
+
+To install the OpenXC utilities and runs `xml_to_json.py` script:
+
+```bash
+sudo pip install openxc
+cd /usr/local/lib/python2.7/dist-packages/openxc/generator
+```
+
+Assuming the data exported from Vector is in `signals.xml` and your minimal mapping
+file is `mapping.json`, run the script:
+
+```bash
+python -m openxc.utils ./xml_to_json.py signals.xml mapping.json signals.json
+```
+
+The script scans `mapping.json` to identify the CAN messages and signals that
+you want to use from the XML file. It pulls the neccessary details of the
+messages (bit position, bit size, offset, etc) and outputs the resulting subset
+as JSON into the output file, `signals.json`.
+
+The resulting file together with `mapping.json` will work as input to the code
+generation script.
+
+### Generate your config file
+
+To generate your config file you just have to run the generator using the `-m`
+option to specify your JSON file.
+
+```bash
+./can-config-generator -m ../tests/basic.json -o application-generated.cpp
+```
+
+If you omit the `-o` option, then code is generated on the stdout.
+You also can specify a header and a footer file.
+These files must be valid C++ fragment as long as they will be inserted as is.
+Use the `-h` option to display help.
+
+> **CAUTION:** Each `diagnostic_message` must define the same `bus` as the
+> binding will use only one bus.
+
+### Supported OpenXC items
+
+About now, compliance with OpenXC reference is in progress, can-config-generator
+and CAN\_signaling will implement them soon. `initializers`, `loopers`,
+`commands` and `handlers` nodes are ignored for now.
+
+This generator will follow OpenXC support status of the low level CAN signaling
+binding.
+
+> **NOTE**: The `buses` item will not be supported by this generator because
+> the binding use another way to declare and configure buses. Please refer to
+> the binding's documentation.
+
+## Compile and install the binding
+
+### Build requirements
+
+- Kernel >= 4.8
+- CMake version 3.3 or later
+- G++, Clang++ or any C++11 compliant compiler.
+
+### Compile
+
+Clone the binding repository, copy the generated file and updated the git
+submodules.
+
+Execute the following commands from this repository:
+
+```bash
+cd ${WD}/low-level-can-service
+cp ${WD}/low-level-can-generator/build/application-generated.cpp ../low-can-binding/binding
+```
+
+### Installation
+
+```bash
+cd ${WD}/low-level-can-service
+mkdir build
+cd build
+cmake ..
+make
+make widget
+```
+
+To install it manually, you need to copy the _low-can-service.wgt_ file on your
+target, then from it execute the following commands :
+
+On your host, to copy over the network :
+
+```bash
+scp low-can-service.wgt root@<target_IP>:~
+```
+
+On the target, assuming _**wgt**_ file is in the root home directory:
+
+```bash
+afm-util install low-can-service.wgt
+{ "added": "low-can-service@4.0" }
+```
+# Configure the AGL system
+
+## Virtual CAN device
+
+Connected to the target, here is how to load the virtual CAN device driver and
+set up a new vcan device :
+
+```bash
+modprobe vcan
+ip link add vcan0 type vcan
+ip link set vcan0 up
+```
+
+You also can named your linux CAN device like you want and if you need name it
+`can0` :
+
+```bash
+modprobe vcan
+ip link add can0 type vcan
+ip link set can0 up
+```
+
+## CAN device using the USB CAN adapter
+
+Using real connection to CAN bus of your car using the USB CAN adapter
+connected to the OBD2 connector.
+
+Once connected, launch `dmesg` command and search which device to use:
+
+```bash
+dmesg
+[...]
+[ 131.871441] usb 1-3: new full-speed USB device number 4 using ohci-pci
+[ 161.860504] can: controller area network core (rev 20120528 abi 9)
+[ 161.860522] NET: Registered protocol family 29
+[ 177.561620] usb 1-3: USB disconnect, device number 4
+[ 191.061423] usb 1-2: USB disconnect, device number 3
+[ 196.095325] usb 1-2: new full-speed USB device number 5 using ohci-pci
+[ 327.568882] usb 1-2: USB disconnect, device number 5
+[ 428.594177] CAN device driver interface
+[ 1872.551543] usb 1-2: new full-speed USB device number 6 using ohci-pci
+[ 1872.809302] usb_8dev 1-2:1.0 can0: firmware: 1.7, hardware: 1.0
+[ 1872.809356] usbcore: registered new interface driver usb_8dev
+```
+
+Here device is named `can0`.
+
+This instruction assuming a speed of 500000kbps for your CAN bus, you can try
+others supported bitrate like 125000, 250000 if 500000 doesn't work:
+
+```bash
+ip link set can0 type can bitrate 500000
+ip link set can0 up
+ip link show can0
+ can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN qlen 10
+ link/can
+ can state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 0
+ bitrate 500000 sample-point 0.875
+ tq 125 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1
+ sja1000: tseg1 1..16 tseg2 1..8 sjw 1..4 brp 1..64 brp-inc 1
+ clock 16000000
+```
+
+On a Rcar Gen3 board, you'll have your CAN device as `can1` because `can0`
+already exists as an embedded device.
+
+The instructions will be the same:
+
+```bash
+ip link set can1 type can bitrate 500000
+ip link set can1 up
+ip link show can1
+ can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN qlen 10
+ link/can
+ can state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 0
+ bitrate 500000 sample-point 0.875
+ tq 125 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1
+ sja1000: tseg1 1..16 tseg2 1..8 sjw 1..4 brp 1..64 brp-inc 1
+ clock 16000000
+```
+
+## Rename an existing CAN device
+
+You can rename an existing CAN device using following command and doing so move
+an existing `can0` device to anything else and then use another device as
+`can0`. For a Rcar Gen3 board do the following by example:
+
+```bash
+sudo ip link set can0 down
+sudo ip link set can0 name bsp-can0
+sudo ip link set bsp-can0 up
+```
+
+Then connect your USB CAN device that will be named `can0` by default.
+
+# Configure the binding
+
+The binding reads system configuration file _/etc/dev-mapping.conf_ at start to
+map logical name from signals described in JSON file to linux devices name
+initialized by the system. Edit file _/etc/dev-mappping.conf_ and add mapping
+in section `CANbus-mapping`.
+
+Default binding configuration use a CAN bus named `hs` so you need to map it to
+the real one, here are some examples:
+
+- Using virtual CAN device as described in the previous chapter:
+
+```ini
+[CANbus-mapping]
+hs="vcan0"
+ls="vcan1"
+```
+
+- Using real CAN device, this example assume CAN bus traffic will be on can0.
+
+```ini
+[CANbus-mapping]
+hs="can0"
+ls="can1"
+```
+
+- On a Rcar Gen3 board there is an embedded CAN device so `can0` already
+ exists. So you might want to use your USB CAN adapter plugged to the OBD2
+ connector, in this case use `can1`:
+
+```ini
+[CANbus-mapping]
+hs="can1"
+```
+
+> **CAUTION VERY IMPORTANT:** Make sure the CAN bus\(es\) you specify in your
+> configuration file match those specified in your generated source file with
+> the `CAN-config-generator`.
+
+# Run it, test it, use it !
+
+You can run the binding using **afm-util** tool, here is the classic way to go:
+
+```bash
+afm-util run low-can-service@4.0
+1
+```
+
+You can find instructions to use afm-util tool [here](http://docs.iot.bzh/docs/apis_services/en/dev/reference/af-main/afm-daemons.html#using-afm-util),
+as well as documentation about Application Framework.
+
+But you can't control nor interact with it because you don't know security
+token that **Application Framework** gaves it at launch.
+
+So, to test it, it is better to launch the binding manually. In the following
+example, it will use port **1234** and left empty security token for testing
+purpose:
+
+```bash
+afb-daemon --binding=/var/lib/afm/applications/low-can-service/4.0/lib/afb-low-can.so --rootdir=/var/lib/afm/applications/low-can-service/4.0/ --port=1234 --token=1
+NOTICE: binding [/usr/lib/afb/afb-dbus-binding.so] calling registering function afbBindingV1Register
+NOTICE: binding /usr/lib/afb/afb-dbus-binding.so loaded with API prefix dbus
+NOTICE: binding [/usr/lib/afb/authLogin.so] calling registering function afbBindingV1Register
+NOTICE: binding /usr/lib/afb/authLogin.so loaded with API prefix auth
+NOTICE: binding [/var/lib/afm/applications/low-can-service/4.0/libs//low-can-binding.so] calling registering function afbBindingV1Register
+NOTICE: binding /var/lib/afm/applications/low-can-service/4.0/libs//low-can-binding.so loaded with API prefix low-can
+NOTICE: Waiting port=1234 rootdir=/var/lib/afm/applications/low-can-service/4.0/
+NOTICE: Browser URL= http:/*localhost:1234
+```
+
+On another terminal, connect to the binding using previously installed
+_**AFB Websocket CLI**_ tool:
+
+```bash
+afb-client-demo ws://localhost:1234/api?token=1
+```
+
+You will be on an interactive session where you can communicate directly with
+the binding API.
+
+The binding provides at this moment 2 verbs, _subscribe_ and _unsubscribe_,
+which can take argument by a JSON **event** object.
+
+The argument value is the CAN message **generic\_name** as described in the
+JSON file used to generate cpp file for the binding.
+
+To use the _**AFB Websocket CLI**_ tool, a command line will be like the
+following :
+
+```
+<api> <verb> <arguments>
+```
+
+Where:
+
+* API : _**low-can**_.
+* Verb : _**subscribe**_ or _**unsubscribe**_
+* Arguments : _**{ "event": "driver.doors.open" }**_
+
+## Subscription and unsubscription
+
+You can ask to subscribe to chosen CAN event with a call to _subscribe_ API
+verb with the CAN messages name as JSON argument.
+
+> **NOTE:** If no argument is provided, then you'll subscribe to all signals at
+> once.
+
+For example from a websocket session:
+
+```json
+low-can subscribe { "event": "doors.driver.open" }
+ON-REPLY 1:low-can/subscribe: {"jtype":"afb-reply","request":{"status":"success","uuid":"a18fd375-b6fa-4c0e-a1d4-9d3955975ae8"}}
+```
+
+Subscription and unsubscription can take wildcard in their _event_ value.
+
+To receive all doors events :
+
+```json
+low-can subscribe { "event" : "doors*" }
+ON-REPLY 1:low-can/subscribe: {"jtype":"afb-reply","request":{"status":"success","uuid":"511c872e-d7f3-4f3b-89c2-aa9a3e9fbbdb"}}
+```
+
+Then you will receive an event each time a CAN message is decoded for the event
+named _doors.driver.open_
+
+```json
+ON-EVENT low-can/messages.doors.driver.open({"event":"low-can\/messages.doors.driver.open","data":{"name":"messages.doors.driver.open","value":true},"jtype":"afb-event"})
+```
+
+Notice that event shows you that the CAN event is named
+_messages.doors.driver.open_ but you ask for event about _doors.driver.open_.
+
+This is because all CAN messages or diagnostic messages are prefixed by the
+JSON parent node name, **messages** for CAN messages and
+**diagnostic\_messages** for diagnostic messages like OBD2.
+
+This will let you subscribe or unsubcribe to all signals at once, not
+recommended, and better make filter on subscribe operation based upon their
+type. Examples:
+
+```json
+low-can subscribe { "event" : "*speed*" } --> will subscribe to all messages with speed in their name. Search will be make without prefix for it.
+low-can subscribe { "event" : "speed*" } --> will subscribe to all messages begin by speed in their name. Search will be make without prefix for it.
+low-can subscribe { "event" : "messages*speed*" } --> will subscribe to all CAN messages with speed in their name. Search will be on prefixed messages here.
+low-can subscribe { "event" : "messages*speed" } --> will subscribe to all CAN messages ending with speed in their name. Search will be on prefixed messages here.
+low-can subscribe { "event" : "diagnostic*speed*" } --> will subscribe to all diagnostic messages with speed in their name. Search will be on prefixed messages here.
+low-can subscribe { "event" : "diagnostic*speed" } --> will subscribe to all diagnostic messages ending with speed in their name. Search will be on prefixed messages here.
+```
+
+You can stop receiving event from it by unsubscribe the signal the same way you
+did for subscribe
+
+```json
+low-can unsubscribe { "event": "doors.driver.open" }
+ON-REPLY 2:low-can/unsubscribe: {"jtype":"afb-reply","request":{"status":"success"}}
+low-can unsubscribe { "event" : "doors*" }
+ON-REPLY 3:low-can/unsubscribe: {"jtype":"afb-reply","request":{"status":"success"}}
+```
+
+### Filtering capabilities
+
+It is possible to limits received event notifications into minimum and maximum
+boundaries as well as doing frequency thinning. This is possible using the
+argument filter with one or more of the filters available :
+
+- frequency: specify in Hertz the frequency which will be used to getting
+ notified of new CAN events for the designated signal. If, during the
+ blocked time, further changed CAN messages are received, the last valid one
+ will be transferred after the lockout with a RX_CHANGED.
+- min: Minimum value that the decoded value needs to be above to get pushed
+ to the subscribed client(s).
+- max: Maximum value that the decoded value needs to be below to get pushed to
+ the subscribed client(s)
+
+Order doesn't matter neither the number of filters chosen, you can use one, two
+or all of them at once.
+
+Usage examples :
+
+```json
+low-can subscribe {"event": "messages.engine.speed", "filter": { "frequency": 3, "min": 1250, "max": 3500}}
+low-can subscribe {"event": "messages.engine.load", "filter": { "min": 30, "max": 100}}
+low-can subscribe {"event": "messages.vehicle.speed", "filter": { "frequency": 2}}
+```
+
+## Using CAN utils to monitor CAN activity
+
+You can watch CAN traffic and send custom CAN messages using can-utils
+preinstalled on AGL target.
+
+To watch watch going on a CAN bus use:
+
+```bash
+candump can0
+```
+
+Or for an USB CAN adapter connected to porter board:
+
+```bash
+candump can1
+```
+
+Send a custom message:
+
+```bash
+cansend can0 ID#DDDDAAAATTTTAAAA
+```
+
+You can also replay a previously dumped CAN logfiles. These logfiles can be
+found in _can_samples_ directory under Git repository. Following examples use a
+real trip from an Auris Toyota car.
+
+Trace has been recorded from a CAN device `can0` so you have to map it to the
+correct one you use for your tests.
+
+Replay on a virtual CAN device `vcan0`:
+
+```bash
+canplayer -I trip_test_with_obd2_vehicle_speed_requests vcan0=can0
+```
+
+Replay on a CAN device `can0`:
+
+```bash
+canplayer -I trip_test_with_obd2_vehicle_speed_requests can0
+```
+
+Replay on a CAN device `can1` (porter by example):
+
+```bash
+canplayer -I trip_test_with_obd2_vehicle_speed_requests can1=can0
+```