DPDK-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v19 05/11] drivers: add base driver probe skeleton
From: liujie5 @ 2026-05-20  2:18 UTC (permalink / raw)
  To: stephen; +Cc: dev, Jie Liu
In-Reply-To: <20260520021809.4019054-1-liujie5@linkdatatechnology.com>

From: Jie Liu <liujie5@linkdatatechnology.com>

Initialize the eth_dev_ops for the sxe2 PMD. This includes the
implementation of mandatory ethdev operations such as dev_configure,
dev_start, dev_stop, and dev_infos_get.

Set up the basic infrastructure for device initialization to allow
the driver to be recognized as a valid ethernet device within the
DPDK framework.

Signed-off-by: Jie Liu <liujie5@linkdatatechnology.com>
---
 drivers/common/sxe2/sxe2_ioctl_chnl.c      |  27 +
 drivers/common/sxe2/sxe2_ioctl_chnl_func.h |   9 +
 drivers/common/sxe2/sxe2_osal.h            |   1 +
 drivers/net/meson.build                    |   1 +
 drivers/net/sxe2/meson.build               |  23 +
 drivers/net/sxe2/sxe2_cmd_chnl.c           | 323 +++++++++++
 drivers/net/sxe2/sxe2_cmd_chnl.h           |  37 ++
 drivers/net/sxe2/sxe2_drv_cmd.h            | 388 +++++++++++++
 drivers/net/sxe2/sxe2_ethdev.c             | 613 +++++++++++++++++++++
 drivers/net/sxe2/sxe2_ethdev.h             | 293 ++++++++++
 drivers/net/sxe2/sxe2_irq.h                |  48 ++
 drivers/net/sxe2/sxe2_queue.c              |  38 ++
 drivers/net/sxe2/sxe2_queue.h              | 191 +++++++
 drivers/net/sxe2/sxe2_txrx_common.h        | 540 ++++++++++++++++++
 drivers/net/sxe2/sxe2_txrx_poll.h          |  16 +
 drivers/net/sxe2/sxe2_vsi.c                | 214 +++++++
 drivers/net/sxe2/sxe2_vsi.h                | 204 +++++++
 17 files changed, 2966 insertions(+)
 create mode 100644 drivers/net/sxe2/meson.build
 create mode 100644 drivers/net/sxe2/sxe2_cmd_chnl.c
 create mode 100644 drivers/net/sxe2/sxe2_cmd_chnl.h
 create mode 100644 drivers/net/sxe2/sxe2_drv_cmd.h
 create mode 100644 drivers/net/sxe2/sxe2_ethdev.c
 create mode 100644 drivers/net/sxe2/sxe2_ethdev.h
 create mode 100644 drivers/net/sxe2/sxe2_irq.h
 create mode 100644 drivers/net/sxe2/sxe2_queue.c
 create mode 100644 drivers/net/sxe2/sxe2_queue.h
 create mode 100644 drivers/net/sxe2/sxe2_txrx_common.h
 create mode 100644 drivers/net/sxe2/sxe2_txrx_poll.h
 create mode 100644 drivers/net/sxe2/sxe2_vsi.c
 create mode 100644 drivers/net/sxe2/sxe2_vsi.h

diff --git a/drivers/common/sxe2/sxe2_ioctl_chnl.c b/drivers/common/sxe2/sxe2_ioctl_chnl.c
index c2b2ec6dad..36de2b91d8 100644
--- a/drivers/common/sxe2/sxe2_ioctl_chnl.c
+++ b/drivers/common/sxe2/sxe2_ioctl_chnl.c
@@ -158,3 +158,30 @@ sxe2_drv_dev_handshake(struct sxe2_common_device *cdev)
 l_end:
 	return ret;
 }
+
+RTE_EXPORT_INTERNAL_SYMBOL(sxe2_drv_dev_munmap)
+int32_t
+sxe2_drv_dev_munmap(struct sxe2_common_device *cdev, void *virt, uint64_t len)
+{
+	int32_t ret = 0;
+
+	if (cdev->config.kernel_reset) {
+		ret = -EPERM;
+		PMD_LOG_WARN(COM, "kernel reset, need restart app.");
+		goto l_end;
+	}
+
+	PMD_LOG_DEBUG(COM, "Munmap virt=%p, len=0x%zx",
+		virt, len);
+
+	ret = munmap(virt, len);
+	if (ret < 0) {
+		PMD_LOG_ERR(COM, "Failed to munmap, virt=%p, len=0x%zx, err:%s",
+			virt, len, strerror(errno));
+		ret = -errno;
+		goto l_end;
+	}
+
+l_end:
+	return ret;
+}
diff --git a/drivers/common/sxe2/sxe2_ioctl_chnl_func.h b/drivers/common/sxe2/sxe2_ioctl_chnl_func.h
index ce3ae9a083..483b8f820c 100644
--- a/drivers/common/sxe2/sxe2_ioctl_chnl_func.h
+++ b/drivers/common/sxe2/sxe2_ioctl_chnl_func.h
@@ -37,6 +37,15 @@ __rte_internal
 int32_t
 sxe2_drv_dev_handshake(struct sxe2_common_device *cdev);
 
+__rte_internal
+void
+*sxe2_drv_dev_mmap(struct sxe2_common_device *cdev, uint8_t bar_idx,
+		uint64_t len, uint64_t offset);
+
+__rte_internal
+int32_t
+sxe2_drv_dev_munmap(struct sxe2_common_device *cdev, void *virt, uint64_t len);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/drivers/common/sxe2/sxe2_osal.h b/drivers/common/sxe2/sxe2_osal.h
index 930498f3c2..3040aa98a8 100644
--- a/drivers/common/sxe2/sxe2_osal.h
+++ b/drivers/common/sxe2/sxe2_osal.h
@@ -46,6 +46,7 @@ enum sxe2_itr_idx {
 };
 
 #define SXE2_ETH_ALEN 6
+
 #define SXE2_BITS_PER_BYTE 8
 #define BITS_TO_LONGS(nr) SXE2_DIV_ROUND_UP(nr, SXE2_BITS_PER_BYTE * sizeof(unsigned long))
 #define BITS_TO_U32(nr) SXE2_DIV_ROUND_UP(nr, 32)
diff --git a/drivers/net/meson.build b/drivers/net/meson.build
index c7dae4ad27..4e8ccb945f 100644
--- a/drivers/net/meson.build
+++ b/drivers/net/meson.build
@@ -58,6 +58,7 @@ drivers = [
         'rnp',
         'sfc',
         'softnic',
+        'sxe2',
         'tap',
         'thunderx',
         'txgbe',
diff --git a/drivers/net/sxe2/meson.build b/drivers/net/sxe2/meson.build
new file mode 100644
index 0000000000..00c38b147c
--- /dev/null
+++ b/drivers/net/sxe2/meson.build
@@ -0,0 +1,23 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright (C), 2025, Wuxi Stars Micro System Technologies Co., Ltd.
+
+if is_windows
+        build = false
+        reason = 'only supported on Linux'
+        subdir_done()
+endif
+
+cflags += ['-g']
+
+deps += ['common_sxe2', 'hash','cryptodev','security']
+
+includes += include_directories('../../common/sxe2')
+
+sources += files(
+        'sxe2_ethdev.c',
+        'sxe2_cmd_chnl.c',
+        'sxe2_vsi.c',
+        'sxe2_queue.c',
+)
+
+allow_internal_get_api = true
diff --git a/drivers/net/sxe2/sxe2_cmd_chnl.c b/drivers/net/sxe2/sxe2_cmd_chnl.c
new file mode 100644
index 0000000000..d16b6528d0
--- /dev/null
+++ b/drivers/net/sxe2/sxe2_cmd_chnl.c
@@ -0,0 +1,323 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (C), 2025, Wuxi Stars Micro System Technologies Co., Ltd.
+ */
+
+#include "sxe2_ioctl_chnl_func.h"
+#include "sxe2_drv_cmd.h"
+#include "sxe2_cmd_chnl.h"
+#include "sxe2_ethdev.h"
+#include "sxe2_common_log.h"
+
+static union sxe2_drv_trace_info sxe2_drv_trace_id;
+
+static void sxe2_drv_trace_id_alloc(uint64_t *trace_id)
+{
+	union sxe2_drv_trace_info *trace = NULL;
+	uint64_t trace_id_count = 0;
+
+	trace = &sxe2_drv_trace_id;
+
+	trace_id_count = trace->sxe2_drv_trace_id_param.count;
+	++trace_id_count;
+	trace->sxe2_drv_trace_id_param.count =
+			(trace_id_count & SXE2_DRV_TRACE_ID_COUNT_MASK);
+
+	*trace_id = trace->id;
+}
+
+static void __sxe2_drv_cmd_params_fill(struct sxe2_adapter *adapter,
+		struct sxe2_drv_cmd_params *cmd, uint32_t opc, const char *opc_str,
+		void *in_data, uint32_t in_len, void *out_data, uint32_t out_len)
+{
+	PMD_DEV_LOG_DEBUG(adapter, DRV, "cmd opcode:%s", opc_str);
+	cmd->timeout = SXE2_DRV_CMD_DFLT_TIMEOUT;
+	cmd->opcode  = opc;
+	cmd->vsi_id  = adapter->vsi_ctxt.dpdk_vsi_id;
+	cmd->repr_id = (adapter->repr_priv_data != NULL) ?
+			adapter->repr_priv_data->repr_id : 0xFFFF;
+	cmd->req_len = in_len;
+	cmd->req_data = in_data;
+	cmd->resp_len = out_len;
+	cmd->resp_data = out_data;
+
+	sxe2_drv_trace_id_alloc(&cmd->trace_id);
+}
+
+#define sxe2_drv_cmd_params_fill(adapter, cmd, opc, in_data, in_len, out_data, out_len) \
+	__sxe2_drv_cmd_params_fill(adapter, cmd, opc, #opc, in_data, in_len, out_data, out_len)
+
+
+int32_t sxe2_drv_dev_caps_get(struct sxe2_adapter *adapter, struct sxe2_drv_dev_caps_resp *dev_caps)
+{
+	int32_t ret = 0;
+	struct sxe2_common_device *cdev = adapter->cdev;
+	struct sxe2_drv_cmd_params param = {0};
+
+	sxe2_drv_cmd_params_fill(adapter, &param, SXE2_DRV_CMD_DEV_GET_CAPS,
+			NULL, 0, dev_caps,
+			sizeof(struct sxe2_drv_dev_caps_resp));
+
+	ret = sxe2_drv_cmd_exec(cdev, &param);
+	if (ret)
+		PMD_DEV_LOG_ERR(adapter, DRV, "get dev caps failed, ret=%d", ret);
+
+	return ret;
+}
+
+int32_t sxe2_drv_dev_info_get(struct sxe2_adapter *adapter,
+				struct sxe2_drv_dev_info_resp *dev_info_resp)
+{
+	int32_t ret = 0;
+	struct sxe2_common_device *cdev = adapter->cdev;
+	struct sxe2_drv_cmd_params param = {0};
+
+	sxe2_drv_cmd_params_fill(adapter, &param, SXE2_DRV_CMD_DEV_GET_INFO,
+			NULL, 0, dev_info_resp,
+			sizeof(struct sxe2_drv_dev_info_resp));
+
+	ret = sxe2_drv_cmd_exec(cdev, &param);
+	if (ret)
+		PMD_DEV_LOG_ERR(adapter, DRV, "get dev info failed, ret=%d", ret);
+
+	return ret;
+}
+
+int32_t sxe2_drv_dev_fw_info_get(struct sxe2_adapter *adapter,
+				struct sxe2_drv_dev_fw_info_resp *dev_fw_info_resp)
+{
+	int32_t ret = 0;
+	struct sxe2_common_device *cdev = adapter->cdev;
+	struct sxe2_drv_cmd_params param = {0};
+
+	sxe2_drv_cmd_params_fill(adapter, &param, SXE2_DRV_CMD_DEV_GET_FW_INFO,
+			NULL, 0, dev_fw_info_resp,
+			sizeof(struct sxe2_drv_dev_fw_info_resp));
+
+	ret = sxe2_drv_cmd_exec(cdev, &param);
+	if (ret)
+		PMD_DEV_LOG_ERR(adapter, DRV, "get dev fw info failed, ret=%d", ret);
+
+	return ret;
+}
+
+int32_t sxe2_drv_vsi_add(struct sxe2_adapter *adapter, struct sxe2_vsi *vsi)
+{
+	int32_t ret = 0;
+	struct sxe2_common_device *cdev = adapter->cdev;
+	struct sxe2_drv_cmd_params param = {0};
+	struct sxe2_drv_vsi_create_req_resp vsi_req = {0};
+	struct sxe2_drv_vsi_create_req_resp vsi_resp = {0};
+
+	vsi_req.vsi_id = vsi->vsi_id;
+
+	vsi_req.used_queues.queues_cnt = RTE_MIN(vsi->txqs.q_cnt, vsi->rxqs.q_cnt);
+	vsi_req.used_queues.base_idx_in_pf = vsi->txqs.base_idx_in_func;
+	vsi_req.used_msix.msix_vectors_cnt = vsi->irqs.avail_cnt;
+	vsi_req.used_msix.base_idx_in_func = vsi->irqs.base_idx_in_pf;
+
+	sxe2_drv_cmd_params_fill(adapter, &param, SXE2_DRV_CMD_VSI_CREATE,
+			&vsi_req,  sizeof(struct sxe2_drv_vsi_create_req_resp),
+			&vsi_resp, sizeof(struct sxe2_drv_vsi_create_req_resp));
+
+	ret = sxe2_drv_cmd_exec(cdev, &param);
+	if (ret) {
+		PMD_DEV_LOG_ERR(adapter, DRV, "dev add vsi failed, ret=%d", ret);
+		goto l_end;
+	}
+
+	vsi->vsi_id = vsi_resp.vsi_id;
+	vsi->vsi_type = vsi_resp.vsi_type;
+
+l_end:
+	return ret;
+}
+
+int32_t sxe2_drv_vsi_del(struct sxe2_adapter *adapter, struct sxe2_vsi *vsi)
+{
+	int32_t ret = 0;
+	struct sxe2_common_device *cdev = adapter->cdev;
+	struct sxe2_drv_cmd_params param = {0};
+	struct sxe2_drv_vsi_free_req vsi_req = {0};
+
+	vsi_req.vsi_id = vsi->vsi_id;
+
+	sxe2_drv_cmd_params_fill(adapter, &param, SXE2_DRV_CMD_VSI_FREE,
+				&vsi_req, sizeof(struct sxe2_drv_vsi_free_req),
+				NULL, 0);
+
+	ret = sxe2_drv_cmd_exec(cdev, &param);
+	if (ret)
+		PMD_DEV_LOG_ERR(adapter, DRV, "dev del vsi failed, ret=%d", ret);
+
+	return ret;
+}
+
+#define SXE2_RXQ_CTXT_CFG_BUF_LEN_ALIGN  (1 << 7)
+#define SXE2_RX_HDR_SIZE 256
+
+static int32_t sxe2_rxq_ctxt_cfg_fill(struct sxe2_rx_queue *rxq,
+		struct sxe2_drv_rxq_cfg_req *req, uint16_t rxq_cnt)
+{
+	struct sxe2_adapter *adapter = rxq->vsi->adapter;
+	struct sxe2_drv_rxq_ctxt *ctxt = req->cfg;
+	struct rte_eth_dev_data *dev_data = adapter->dev_info.dev_data;
+	int32_t ret = 0;
+
+	req->vsi_id = adapter->vsi_ctxt.main_vsi->vsi_id;
+	req->q_cnt = rxq_cnt;
+	req->max_frame_size = dev_data->mtu + SXE2_ETH_OVERHEAD;
+
+	ctxt->queue_id = rxq->queue_id;
+	ctxt->depth = rxq->ring_depth;
+	ctxt->buf_len = RTE_ALIGN(rxq->rx_buf_len, SXE2_RXQ_CTXT_CFG_BUF_LEN_ALIGN);
+	ctxt->dma_addr = rxq->base_addr;
+
+	if (rxq->offloads & RTE_ETH_RX_OFFLOAD_TCP_LRO) {
+		ctxt->lro_en = 1;
+		ctxt->max_lro_size = dev_data->dev_conf.rxmode.max_lro_pkt_size;
+	} else {
+		ctxt->lro_en = 0;
+	}
+
+	if (rxq->offloads & RTE_ETH_RX_OFFLOAD_KEEP_CRC)
+		ctxt->keep_crc_en = 1;
+	else
+		ctxt->keep_crc_en = 0;
+
+	ctxt->desc_size = sizeof(union sxe2_rx_desc);
+	return ret;
+}
+
+int32_t sxe2_drv_rxq_ctxt_cfg(struct sxe2_adapter *adapter,
+			      struct sxe2_rx_queue *rxq,
+			      uint16_t rxq_cnt)
+{
+	int32_t ret = 0;
+	struct sxe2_common_device *cdev = adapter->cdev;
+	struct sxe2_drv_cmd_params param = {0};
+	struct sxe2_drv_rxq_cfg_req *req = NULL;
+	uint16_t len = 0;
+
+	len = sizeof(*req) + rxq_cnt * sizeof(struct sxe2_drv_rxq_ctxt);
+	req = rte_zmalloc("sxe2_rxq_cfg", len, 0);
+	if (req == NULL) {
+		PMD_LOG_ERR(RX, "rxq cfg mem alloc failed");
+		ret = -ENOMEM;
+		goto l_end;
+	}
+
+	ret = sxe2_rxq_ctxt_cfg_fill(rxq, req, rxq_cnt);
+	if (ret) {
+		PMD_DEV_LOG_ERR(adapter, DRV, "rxq cfg failed, ret=%d", ret);
+		ret = -EINVAL;
+		goto l_end;
+	}
+
+	sxe2_drv_cmd_params_fill(adapter, &param, SXE2_DRV_CMD_RXQ_CFG_ENABLE,
+			req, len, NULL, 0);
+
+	ret = sxe2_drv_cmd_exec(cdev, &param);
+	if (ret)
+		PMD_DEV_LOG_ERR(adapter, DRV, "rxq cfg failed, ret=%d", ret);
+
+l_end:
+	if (req)
+		rte_free(req);
+	return ret;
+}
+
+static void sxe2_txq_ctxt_cfg_fill(struct sxe2_tx_queue *txq,
+				   struct sxe2_drv_txq_cfg_req *req,
+				   uint16_t txq_cnt)
+{
+	struct sxe2_drv_txq_ctxt *ctxt = req->cfg;
+	uint16_t q_idx = 0;
+
+	req->vsi_id = txq->vsi->vsi_id;
+	req->q_cnt = txq_cnt;
+
+	for (q_idx = 0; q_idx < txq_cnt; q_idx++) {
+		ctxt = &req->cfg[q_idx];
+		ctxt->depth = txq[q_idx].ring_depth;
+		ctxt->dma_addr = txq[q_idx].base_addr;
+		ctxt->queue_id = txq[q_idx].queue_id;
+	}
+}
+
+int32_t sxe2_drv_txq_ctxt_cfg(struct sxe2_adapter *adapter,
+			      struct sxe2_tx_queue *txq,
+			      uint16_t txq_cnt)
+{
+	int32_t ret = 0;
+	struct sxe2_common_device *cdev = adapter->cdev;
+	struct sxe2_drv_cmd_params param = {0};
+	struct sxe2_drv_txq_cfg_req *req;
+	uint16_t len = 0;
+
+	len = sizeof(*req) + txq_cnt * sizeof(struct sxe2_drv_txq_ctxt);
+	req = rte_zmalloc("sxe2_txq_cfg", len, 0);
+	if (req == NULL) {
+		PMD_LOG_ERR(TX, "txq cfg mem alloc failed");
+		ret = -ENOMEM;
+		goto l_end;
+	}
+
+	sxe2_txq_ctxt_cfg_fill(txq, req, txq_cnt);
+
+	sxe2_drv_cmd_params_fill(adapter, &param, SXE2_DRV_CMD_TXQ_CFG_ENABLE,
+			req, len, NULL, 0);
+
+	ret = sxe2_drv_cmd_exec(cdev, &param);
+	if (ret)
+		PMD_DEV_LOG_ERR(adapter, DRV, "txq cfg failed, ret=%d", ret);
+
+l_end:
+	if (req)
+		rte_free(req);
+	return ret;
+}
+
+int32_t sxe2_drv_rxq_switch(struct sxe2_adapter *adapter, struct sxe2_rx_queue *rxq, bool enable)
+{
+	int32_t ret = 0;
+	struct sxe2_common_device *cdev = adapter->cdev;
+	struct sxe2_drv_cmd_params param = {0};
+	struct sxe2_drv_q_switch_req req;
+
+	req.vsi_id = rte_cpu_to_le_16(rxq->vsi->vsi_id);
+	req.q_idx = rxq->queue_id;
+
+	req.is_enable  = (uint8_t)enable;
+	sxe2_drv_cmd_params_fill(adapter, &param, SXE2_DRV_CMD_RXQ_DISABLE,
+			&req, sizeof(req), NULL, 0);
+
+	ret = sxe2_drv_cmd_exec(cdev, &param);
+	if (ret)
+		PMD_DEV_LOG_ERR(adapter, DRV, "rxq switch failed, enable: %d, ret:%d",
+			enable, ret);
+
+	return ret;
+}
+
+int32_t sxe2_drv_txq_switch(struct sxe2_adapter *adapter, struct sxe2_tx_queue *txq, bool enable)
+{
+	int32_t ret = 0;
+	struct sxe2_common_device *cdev = adapter->cdev;
+	struct sxe2_drv_cmd_params param = {0};
+	struct sxe2_drv_q_switch_req req;
+
+	req.vsi_id = rte_cpu_to_le_16(txq->vsi->vsi_id);
+	req.q_idx = txq->queue_id;
+
+	req.is_enable  = (uint8_t)enable;
+	sxe2_drv_cmd_params_fill(adapter, &param, SXE2_DRV_CMD_TXQ_DISABLE,
+			&req, sizeof(req), NULL, 0);
+
+	ret = sxe2_drv_cmd_exec(cdev, &param);
+	if (ret) {
+		PMD_DEV_LOG_ERR(adapter, DRV, "txq switch failed, enable: %d, ret:%d",
+				enable, ret);
+	}
+
+	return ret;
+}
diff --git a/drivers/net/sxe2/sxe2_cmd_chnl.h b/drivers/net/sxe2/sxe2_cmd_chnl.h
new file mode 100644
index 0000000000..cd41cd9e8d
--- /dev/null
+++ b/drivers/net/sxe2/sxe2_cmd_chnl.h
@@ -0,0 +1,37 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (C), 2025, Wuxi Stars Micro System Technologies Co., Ltd.
+ */
+
+#ifndef __SXE2_CMD_CHNL_H__
+#define __SXE2_CMD_CHNL_H__
+
+#include "sxe2_ethdev.h"
+#include "sxe2_drv_cmd.h"
+#include "sxe2_ioctl_chnl_func.h"
+
+int32_t sxe2_drv_dev_caps_get(struct sxe2_adapter *adapter,
+		struct sxe2_drv_dev_caps_resp *dev_caps);
+
+int32_t sxe2_drv_dev_info_get(struct sxe2_adapter *adapter,
+		struct sxe2_drv_dev_info_resp *dev_info_resp);
+
+int32_t sxe2_drv_dev_fw_info_get(struct sxe2_adapter *adapter,
+		struct sxe2_drv_dev_fw_info_resp *dev_fw_info_resp);
+
+int32_t sxe2_drv_vsi_add(struct sxe2_adapter *adapter, struct sxe2_vsi *vsi);
+
+int32_t sxe2_drv_vsi_del(struct sxe2_adapter *adapter, struct sxe2_vsi *vsi);
+
+int32_t sxe2_drv_rxq_switch(struct sxe2_adapter *adapter, struct sxe2_rx_queue *rxq, bool enable);
+
+int32_t sxe2_drv_txq_switch(struct sxe2_adapter *adapter, struct sxe2_tx_queue *txq, bool enable);
+
+int32_t sxe2_drv_rxq_ctxt_cfg(struct sxe2_adapter *adapter,
+			      struct sxe2_rx_queue *rxq,
+			      uint16_t rxq_cnt);
+
+int32_t sxe2_drv_txq_ctxt_cfg(struct sxe2_adapter *adapter,
+			      struct sxe2_tx_queue *txq,
+			      uint16_t txq_cnt);
+
+#endif /* __SXE2_CMD_CHNL_H__ */
diff --git a/drivers/net/sxe2/sxe2_drv_cmd.h b/drivers/net/sxe2/sxe2_drv_cmd.h
new file mode 100644
index 0000000000..a16087c6bf
--- /dev/null
+++ b/drivers/net/sxe2/sxe2_drv_cmd.h
@@ -0,0 +1,388 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (C), 2025, Wuxi Stars Micro System Technologies Co., Ltd.
+ */
+
+#ifndef __SXE2_DRV_CMD_H__
+#define __SXE2_DRV_CMD_H__
+
+#include "sxe2_osal.h"
+
+#define SXE2_DRV_CMD_MODULE_S        (16)
+#define SXE2_MK_DRV_CMD(module, cmd) (((module) << SXE2_DRV_CMD_MODULE_S) | ((cmd) & 0xFFFF))
+
+#define SXE2_DEV_CAPS_OFFLOAD_L2    RTE_BIT32(0)
+#define SXE2_DEV_CAPS_OFFLOAD_VLAN  RTE_BIT32(1)
+#define SXE2_DEV_CAPS_OFFLOAD_RSS   RTE_BIT32(2)
+#define SXE2_DEV_CAPS_OFFLOAD_IPSEC RTE_BIT32(3)
+#define SXE2_DEV_CAPS_OFFLOAD_FNAV  RTE_BIT32(4)
+#define SXE2_DEV_CAPS_OFFLOAD_TM    RTE_BIT32(5)
+#define SXE2_DEV_CAPS_OFFLOAD_PTP   RTE_BIT32(6)
+#define SXE2_DEV_CAPS_OFFLOAD_Q_MAP RTE_BIT32(7)
+#define SXE2_DEV_CAPS_OFFLOAD_FC_STATE RTE_BIT32(8)
+
+#define SXE2_TXQ_STATS_MAP_MAX_NUM 16
+#define SXE2_RXQ_STATS_MAP_MAX_NUM 4
+#define SXE2_RXQ_MAP_Q_MAX_NUM 256
+
+#define SXE2_STAT_MAP_INVALID_QID 0xFFFF
+
+#define SXE2_SCHED_MODE_DEFAULT			0
+#define SXE2_SCHED_MODE_TM			1
+#define SXE2_SCHED_MODE_HIGH_PERFORMANCE	2
+#define SXE2_SCHED_MODE_INVALID			3
+
+#define SXE2_SRCVSI_PRUNE_MAX_NUM		2
+
+#define SXE2_PTYPE_UNKNOWN                   RTE_BIT32(0)
+#define SXE2_PTYPE_L2_ETHER                  RTE_BIT32(1)
+#define SXE2_PTYPE_L3_IPV4                   RTE_BIT32(2)
+#define SXE2_PTYPE_L3_IPV6                   RTE_BIT32(4)
+#define SXE2_PTYPE_L4_TCP                    RTE_BIT32(6)
+#define SXE2_PTYPE_L4_UDP                    RTE_BIT32(7)
+#define SXE2_PTYPE_L4_SCTP                   RTE_BIT32(8)
+#define SXE2_PTYPE_INNER_L2_ETHER            RTE_BIT32(9)
+#define SXE2_PTYPE_INNER_L3_IPV4             RTE_BIT32(10)
+#define SXE2_PTYPE_INNER_L3_IPV6             RTE_BIT32(12)
+#define SXE2_PTYPE_INNER_L4_TCP              RTE_BIT32(14)
+#define SXE2_PTYPE_INNER_L4_UDP              RTE_BIT32(15)
+#define SXE2_PTYPE_INNER_L4_SCTP             RTE_BIT32(16)
+#define SXE2_PTYPE_TUNNEL_GRENAT             RTE_BIT32(17)
+
+#define SXE2_PTYPE_L2_MASK       (SXE2_PTYPE_L2_ETHER)
+#define SXE2_PTYPE_L3_MASK       (SXE2_PTYPE_L3_IPV4 | SXE2_PTYPE_L3_IPV6)
+#define SXE2_PTYPE_L4_MASK       (SXE2_PTYPE_L4_TCP | SXE2_PTYPE_L4_UDP | \
+		SXE2_PTYPE_L4_SCTP)
+#define SXE2_PTYPE_INNER_L2_MASK (SXE2_PTYPE_INNER_L2_ETHER)
+#define SXE2_PTYPE_INNER_L3_MASK (SXE2_PTYPE_INNER_L3_IPV4 | \
+		SXE2_PTYPE_INNER_L3_IPV6)
+#define SXE2_PTYPE_INNER_L4_MASK (SXE2_PTYPE_INNER_L4_TCP | \
+		SXE2_PTYPE_INNER_L4_UDP | \
+		SXE2_PTYPE_INNER_L4_SCTP)
+#define SXE2_PTYPE_TUNNEL_MASK   (SXE2_PTYPE_TUNNEL_GRENAT)
+
+enum sxe2_dev_type {
+	SXE2_DEV_T_PF = 0,
+	SXE2_DEV_T_VF,
+	SXE2_DEV_T_PF_BOND,
+	SXE2_DEV_T_MAX,
+};
+
+struct sxe2_drv_queue_caps {
+	uint16_t queues_cnt;
+	uint16_t base_idx_in_pf;
+};
+
+struct sxe2_drv_msix_caps {
+	uint16_t msix_vectors_cnt;
+	uint16_t base_idx_in_func;
+};
+
+struct sxe2_drv_rss_hash_caps {
+	uint16_t hash_key_size;
+	uint16_t lut_key_size;
+};
+
+enum sxe2_vf_vsi_valid {
+	SXE2_VF_VSI_BOTH = 0,
+	SXE2_VF_VSI_ONLY_DPDK,
+	SXE2_VF_VSI_ONLY_KERNEL,
+	SXE2_VF_VSI_MAX,
+};
+
+struct sxe2_drv_vsi_caps {
+	uint16_t func_id;
+	uint16_t dpdk_vsi_id;
+	uint16_t kernel_vsi_id;
+	uint16_t vsi_type;
+};
+
+struct sxe2_drv_representor_caps {
+	uint16_t cnt_repr_vf;
+	uint8_t rsv[2];
+	struct sxe2_drv_vsi_caps repr_vf_id[256];
+};
+
+enum sxe2_phys_port_name_type {
+	SXE2_PHYS_PORT_NAME_TYPE_NOTSET = 0,
+	SXE2_PHYS_PORT_NAME_TYPE_LEGACY,
+	SXE2_PHYS_PORT_NAME_TYPE_UPLINK,
+	SXE2_PHYS_PORT_NAME_TYPE_PFVF,
+
+	SXE2_PHYS_PORT_NAME_TYPE_UNKNOWN,
+};
+
+struct sxe2_switchdev_mode_info {
+	uint8_t pf_id;
+	uint8_t is_switchdev;
+	uint8_t rsv[2];
+};
+
+struct sxe2_switchdev_cpvsi_info {
+	uint16_t cp_vsi_id;
+	uint8_t rsv[2];
+};
+
+struct sxe2_txsch_caps {
+	uint8_t layer_cap;
+	uint8_t tm_mid_node_num;
+	uint8_t prio_num;
+	uint8_t rev;
+};
+
+struct sxe2_drv_dev_caps_resp {
+	struct sxe2_drv_queue_caps queue_caps;
+	struct sxe2_drv_msix_caps msix_caps;
+	struct sxe2_drv_rss_hash_caps rss_hash_caps;
+	struct sxe2_drv_vsi_caps vsi_caps;
+	struct sxe2_txsch_caps   txsch_caps;
+	struct sxe2_drv_representor_caps repr_caps;
+	uint8_t port_idx;
+	uint8_t pf_idx;
+	uint8_t dev_type;
+	uint8_t rev;
+	uint32_t cap_flags;
+};
+
+struct sxe2_drv_dev_info_resp {
+	uint64_t dsn;
+	uint16_t vsi_id;
+	uint8_t rsv[2];
+	uint8_t mac_addr[SXE2_ETH_ALEN];
+	uint8_t rsv2[2];
+};
+
+struct sxe2_drv_dev_fw_info_resp {
+	uint8_t main_version_id;
+	uint8_t sub_version_id;
+	uint8_t fix_version_id;
+	uint8_t build_id;
+};
+
+struct sxe2_drv_rxq_ctxt {
+	uint64_t dma_addr;
+	uint32_t max_lro_size;
+	uint32_t split_type_mask;
+	uint16_t hdr_len;
+	uint16_t buf_len;
+	uint16_t depth;
+	uint16_t queue_id;
+	uint8_t lro_en;
+	uint8_t keep_crc_en;
+	uint8_t split_en;
+	uint8_t desc_size;
+};
+
+struct sxe2_drv_rxq_cfg_req {
+	uint16_t q_cnt;
+	uint16_t vsi_id;
+	uint16_t max_frame_size;
+	uint8_t rsv[2];
+	struct sxe2_drv_rxq_ctxt cfg[];
+};
+
+struct sxe2_drv_txq_ctxt {
+	uint64_t dma_addr;
+	uint32_t sched_mode;
+	uint16_t queue_id;
+	uint16_t depth;
+	uint16_t vsi_id;
+	uint8_t rsv[2];
+};
+
+struct sxe2_drv_txq_cfg_req {
+	uint16_t q_cnt;
+	uint16_t vsi_id;
+	struct sxe2_drv_txq_ctxt cfg[];
+};
+
+struct sxe2_drv_q_switch_req {
+	uint16_t q_idx;
+	uint16_t vsi_id;
+	uint8_t is_enable;
+	uint8_t sched_mode;
+	uint8_t rsv[2];
+};
+
+struct sxe2_drv_vsi_create_req_resp {
+	uint16_t vsi_id;
+	uint16_t vsi_type;
+	struct sxe2_drv_queue_caps used_queues;
+	struct sxe2_drv_msix_caps used_msix;
+};
+
+struct sxe2_drv_vsi_free_req {
+	uint16_t vsi_id;
+	uint8_t rsv[2];
+};
+
+struct sxe2_drv_vsi_info_get_req {
+	uint16_t vsi_id;
+	uint8_t rsv[2];
+};
+
+struct sxe2_drv_vsi_info_get_resp {
+	uint16_t vsi_id;
+	uint16_t vsi_type;
+	struct sxe2_drv_queue_caps used_queues;
+	struct sxe2_drv_msix_caps used_msix;
+};
+
+enum sxe2_drv_cmd_module {
+	SXE2_DRV_CMD_MODULE_HANDSHAKE = 0,
+	SXE2_DRV_CMD_MODULE_DEV = 1,
+	SXE2_DRV_CMD_MODULE_VSI = 2,
+	SXE2_DRV_CMD_MODULE_QUEUE = 3,
+	SXE2_DRV_CMD_MODULE_STATS = 4,
+	SXE2_DRV_CMD_MODULE_SUBSCRIBE = 5,
+	SXE2_DRV_CMD_MODULE_RSS = 6,
+	SXE2_DRV_CMD_MODULE_FLOW = 7,
+	SXE2_DRV_CMD_MODULE_TM = 8,
+	SXE2_DRV_CMD_MODULE_IPSEC = 9,
+	SXE2_DRV_CMD_MODULE_PTP = 10,
+
+	SXE2_DRV_CMD_MODULE_VLAN = 11,
+	SXE2_DRV_CMD_MODULE_RDMA = 12,
+	SXE2_DRV_CMD_MODULE_LINK = 13,
+	SXE2_DRV_CMD_MODULE_MACADDR = 14,
+	SXE2_DRV_CMD_MODULE_PROMISC = 15,
+
+	SXE2_DRV_CMD_MODULE_LED = 16,
+	SXE2_DEV_CMD_MODULE_OPT = 17,
+	SXE2_DEV_CMD_MODULE_SWITCH = 18,
+	SXE2_DRV_CMD_MODULE_ACL = 19,
+	SXE2_DRV_CMD_MODULE_UDPTUNEEL = 20,
+	SXE2_DRV_CMD_MODULE_QUEUE_MAP = 21,
+
+	SXE2_DRV_CMD_MODULE_SCHED = 22,
+
+	SXE2_DRV_CMD_MODULE_IRQ = 23,
+
+	SXE2_DRV_CMD_MODULE_OPT = 24,
+};
+
+enum sxe2_drv_cmd_code {
+	SXE2_DRV_CMD_HANDSHAKE_ENABLE =
+		SXE2_MK_DRV_CMD(SXE2_DRV_CMD_MODULE_HANDSHAKE, 1),
+	SXE2_DRV_CMD_HANDSHAKE_DISABLE,
+
+	SXE2_DRV_CMD_DEV_GET_CAPS =
+		SXE2_MK_DRV_CMD(SXE2_DRV_CMD_MODULE_DEV, 1),
+	SXE2_DRV_CMD_DEV_GET_INFO,
+	SXE2_DRV_CMD_DEV_GET_FW_INFO,
+	SXE2_DRV_CMD_DEV_RESET,
+	SXE2_DRV_CMD_DEV_GET_SWITCHDEV_INFO,
+
+	SXE2_DRV_CMD_VSI_CREATE =
+		SXE2_MK_DRV_CMD(SXE2_DRV_CMD_MODULE_VSI, 1),
+	SXE2_DRV_CMD_VSI_FREE,
+	SXE2_DRV_CMD_VSI_INFO_GET,
+	SXE2_DRV_CMD_VSI_SRCVSI_PRUNE,
+	SXE2_DRV_CMD_VSI_FC_GET,
+
+	SXE2_DRV_CMD_RX_MAP_SET =
+		SXE2_MK_DRV_CMD(SXE2_DRV_CMD_MODULE_QUEUE_MAP, 1),
+	SXE2_DRV_CMD_TX_MAP_SET,
+	SXE2_DRV_CMD_TX_RX_MAP_GET,
+	SXE2_DRV_CMD_TX_RX_MAP_RESET,
+	SXE2_DRV_CMD_TX_RX_MAP_INFO_CLEAR,
+
+	SXE2_DRV_CMD_SCHED_ROOT_TREE_ALLOC =
+		SXE2_MK_DRV_CMD(SXE2_DRV_CMD_MODULE_SCHED, 1),
+	SXE2_DRV_CMD_SCHED_ROOT_TREE_RELEASE,
+	SXE2_DRV_CMD_SCHED_ROOT_CHILDREN_DELETE,
+	SXE2_DRV_CMD_SCHED_TM_ADD_MID_NODE,
+	SXE2_DRV_CMD_SCHED_TM_ADD_QUEUE_NODE,
+
+	SXE2_DRV_CMD_RXQ_CFG_ENABLE =
+		SXE2_MK_DRV_CMD(SXE2_DRV_CMD_MODULE_QUEUE, 1),
+	SXE2_DRV_CMD_TXQ_CFG_ENABLE,
+	SXE2_DRV_CMD_RXQ_DISABLE,
+	SXE2_DRV_CMD_TXQ_DISABLE,
+
+	SXE2_DRV_CMD_VSI_STATS_GET =
+		SXE2_MK_DRV_CMD(SXE2_DRV_CMD_MODULE_STATS, 1),
+	SXE2_DRV_CMD_VSI_STATS_CLEAR,
+	SXE2_DRV_CMD_MAC_STATS_GET,
+	SXE2_DRV_CMD_MAC_STATS_CLEAR,
+
+	SXE2_DRV_CMD_RSS_KEY_SET =
+		SXE2_MK_DRV_CMD(SXE2_DRV_CMD_MODULE_RSS, 1),
+	SXE2_DRV_CMD_RSS_LUT_SET,
+	SXE2_DRV_CMD_RSS_FUNC_SET,
+	SXE2_DRV_CMD_RSS_HF_ADD,
+	SXE2_DRV_CMD_RSS_HF_DEL,
+	SXE2_DRV_CMD_RSS_HF_CLEAR,
+
+	SXE2_DRV_CMD_FLOW_FILTER_ADD =
+		SXE2_MK_DRV_CMD(SXE2_DRV_CMD_MODULE_FLOW, 1),
+	SXE2_DRV_CMD_FLOW_FILTER_DEL,
+	SXE2_DRV_CMD_FLOW_FILTER_CLEAR,
+	SXE2_DRV_CMD_FLOW_FNAV_STAT_ALLOC,
+	SXE2_DRV_CMD_FLOW_FNAV_STAT_FREE,
+	SXE2_DRV_CMD_FLOW_FNAV_STAT_QUERY,
+
+	SXE2_DRV_CMD_DEL_TM_ROOT =
+		SXE2_MK_DRV_CMD(SXE2_DRV_CMD_MODULE_TM, 1),
+	SXE2_DRV_CMD_ADD_TM_ROOT,
+	SXE2_DRV_CMD_ADD_TM_NODE,
+	SXE2_DRV_CMD_ADD_TM_QUEUE,
+
+	SXE2_DRV_CMD_GET_PTP_CLOCK =
+		SXE2_MK_DRV_CMD(SXE2_DRV_CMD_MODULE_PTP, 1),
+
+	SXE2_DRV_CMD_VLAN_FILTER_ADD_DEL =
+		SXE2_MK_DRV_CMD(SXE2_DRV_CMD_MODULE_VLAN, 1),
+	SXE2_DRV_CMD_VLAN_FILTER_SWITCH,
+	SXE2_DRV_CMD_VLAN_OFFLOAD_CFG,
+	SXE2_DRV_CMD_VLAN_PORTVLAN_CFG,
+	SXE2_DRV_CMD_VLAN_CFG_QUERY,
+
+	SXE2_DRV_CMD_RDMA_DUMP_PCAP =
+		SXE2_MK_DRV_CMD(SXE2_DRV_CMD_MODULE_RDMA, 1),
+
+	SXE2_DRV_CMD_LINK_STATUS_GET =
+		SXE2_MK_DRV_CMD(SXE2_DRV_CMD_MODULE_LINK, 1),
+
+	SXE2_DRV_CMD_MAC_ADDR_UC =
+		SXE2_MK_DRV_CMD(SXE2_DRV_CMD_MODULE_MACADDR, 1),
+	SXE2_DRV_CMD_MAC_ADDR_MC,
+
+	SXE2_DRV_CMD_PROMISC_CFG =
+		SXE2_MK_DRV_CMD(SXE2_DRV_CMD_MODULE_PROMISC, 1),
+	SXE2_DRV_CMD_ALLMULTI_CFG,
+
+	SXE2_DRV_CMD_LED_CTRL =
+		SXE2_MK_DRV_CMD(SXE2_DRV_CMD_MODULE_LED, 1),
+
+	SXE2_DRV_CMD_OPT_EEP =
+		SXE2_MK_DRV_CMD(SXE2_DEV_CMD_MODULE_OPT, 1),
+
+	SXE2_DRV_CMD_SWITCH =
+		SXE2_MK_DRV_CMD(SXE2_DEV_CMD_MODULE_SWITCH, 1),
+	SXE2_DRV_CMD_SWITCH_UPLINK,
+	SXE2_DRV_CMD_SWITCH_REPR,
+	SXE2_DRV_CMD_SWITCH_MODE,
+	SXE2_DRV_CMD_SWITCH_CPVSI,
+
+	SXE2_DRV_CMD_UDPTUNNEL_ADD =
+		SXE2_MK_DRV_CMD(SXE2_DRV_CMD_MODULE_UDPTUNEEL, 1),
+	SXE2_DRV_CMD_UDPTUNNEL_DEL,
+	SXE2_DRV_CMD_UDPTUNNEL_GET,
+
+	SXE2_DRV_CMD_IPSEC_CAP_GET =
+		SXE2_MK_DRV_CMD(SXE2_DRV_CMD_MODULE_IPSEC, 1),
+	SXE2_DRV_CMD_IPSEC_TXSA_ADD,
+	SXE2_DRV_CMD_IPSEC_RXSA_ADD,
+	SXE2_DRV_CMD_IPSEC_TXSA_DEL,
+	SXE2_DRV_CMD_IPSEC_RXSA_DEL,
+	SXE2_DRV_CMD_IPSEC_RESOURCE_CLEAR,
+
+	SXE2_DRV_CMD_EVT_IRQ_BAND_RXQ =
+		SXE2_MK_DRV_CMD(SXE2_DRV_CMD_MODULE_IRQ, 1),
+
+	SXE2_DRV_CMD_OPT_EEP_GET =
+		SXE2_MK_DRV_CMD(SXE2_DRV_CMD_MODULE_OPT, 1),
+
+};
+
+#endif /* __SXE2_DRV_CMD_H__ */
diff --git a/drivers/net/sxe2/sxe2_ethdev.c b/drivers/net/sxe2/sxe2_ethdev.c
new file mode 100644
index 0000000000..f0bdda38a7
--- /dev/null
+++ b/drivers/net/sxe2/sxe2_ethdev.c
@@ -0,0 +1,613 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (C), 2025, Wuxi Stars Micro System Technologies Co., Ltd.
+ */
+
+#include <rte_string_fns.h>
+#include <ethdev_pci.h>
+#include <ctype.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <rte_tailq.h>
+#include <rte_version.h>
+#include <bus_pci_driver.h>
+#include <dev_driver.h>
+#include <ethdev_driver.h>
+#include <rte_ethdev.h>
+#include <rte_alarm.h>
+#include <rte_dev_info.h>
+#include <rte_pci.h>
+#include <rte_mbuf_dyn.h>
+#include <rte_cycles.h>
+#include <rte_eal_paging.h>
+
+#include "sxe2_ethdev.h"
+#include "sxe2_drv_cmd.h"
+#include "sxe2_cmd_chnl.h"
+#include "sxe2_common.h"
+#include "sxe2_common_log.h"
+#include "sxe2_host_regs.h"
+#include "sxe2_ioctl_chnl_func.h"
+
+#define SXE2_PCI_VENDOR_ID_1    0x1ff2
+#define SXE2_PCI_DEVICE_ID_PF_1 0x10b1
+#define SXE2_PCI_DEVICE_ID_VF_1 0x10b2
+
+#define SXE2_PCI_VENDOR_ID_2    0x1d94
+#define SXE2_PCI_DEVICE_ID_PF_2 0x1260
+#define SXE2_PCI_DEVICE_ID_VF_2 0x126f
+
+#define SXE2_PCI_DEVICE_ID_PF_3 0x10b3
+#define SXE2_PCI_DEVICE_ID_VF_3 0x10b4
+
+#define SXE2_PCI_VENDOR_ID_206F 0x206f
+
+static const struct rte_pci_id pci_id_sxe2_tbl[] = {
+	{ RTE_PCI_DEVICE(SXE2_PCI_VENDOR_ID_1, SXE2_PCI_DEVICE_ID_PF_1)},
+	{ RTE_PCI_DEVICE(SXE2_PCI_VENDOR_ID_1, SXE2_PCI_DEVICE_ID_VF_1)},
+	{ RTE_PCI_DEVICE(SXE2_PCI_VENDOR_ID_2, SXE2_PCI_DEVICE_ID_PF_2)},
+	{ RTE_PCI_DEVICE(SXE2_PCI_VENDOR_ID_2, SXE2_PCI_DEVICE_ID_VF_2)},
+	{ RTE_PCI_DEVICE(SXE2_PCI_VENDOR_ID_1, SXE2_PCI_DEVICE_ID_PF_3)},
+	{ RTE_PCI_DEVICE(SXE2_PCI_VENDOR_ID_1, SXE2_PCI_DEVICE_ID_VF_3)},
+	{ RTE_PCI_DEVICE(SXE2_PCI_VENDOR_ID_206F, SXE2_PCI_DEVICE_ID_PF_1)},
+	{ RTE_PCI_DEVICE(SXE2_PCI_VENDOR_ID_206F, SXE2_PCI_DEVICE_ID_VF_1)},
+	{ .vendor_id = 0, },
+};
+
+static int32_t sxe2_dev_configure(struct rte_eth_dev *dev)
+{
+	int32_t ret = 0;
+	PMD_INIT_FUNC_TRACE();
+
+	if (dev->data->dev_conf.rxmode.mq_mode  & RTE_ETH_MQ_RX_RSS_FLAG)
+		dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
+
+	return ret;
+}
+
+static void __rte_cold sxe2_txqs_all_stop(struct rte_eth_dev *dev __rte_unused)
+{
+}
+
+static void __rte_cold sxe2_rxqs_all_stop(struct rte_eth_dev *dev __rte_unused)
+{
+}
+
+static int32_t sxe2_dev_stop(struct rte_eth_dev *dev)
+{
+	int32_t ret = 0;
+	struct sxe2_adapter *adapter = SXE2_DEV_PRIVATE_TO_ADAPTER(dev);
+	PMD_INIT_FUNC_TRACE();
+
+	if (adapter->started == 0)
+		goto l_end;
+
+	sxe2_txqs_all_stop(dev);
+	sxe2_rxqs_all_stop(dev);
+
+	dev->data->dev_started = 0;
+	adapter->started = 0;
+l_end:
+	return ret;
+}
+
+static int32_t __rte_cold sxe2_txqs_all_start(struct rte_eth_dev *dev __rte_unused)
+{
+	return 0;
+}
+
+static int32_t __rte_cold sxe2_rxqs_all_start(struct rte_eth_dev *dev __rte_unused)
+{
+	return 0;
+}
+
+static int32_t sxe2_queues_start(struct rte_eth_dev *dev)
+{
+	int32_t ret = 0;
+	ret = sxe2_txqs_all_start(dev);
+	if (ret) {
+		PMD_LOG_ERR(INIT, "Failed to start tx queue.");
+		goto l_end;
+	}
+
+	ret = sxe2_rxqs_all_start(dev);
+	if (ret) {
+		PMD_LOG_ERR(INIT, "Failed to start rx queue.");
+		sxe2_txqs_all_stop(dev);
+	}
+
+l_end:
+	return ret;
+}
+
+static int32_t sxe2_dev_start(struct rte_eth_dev *dev)
+{
+	int32_t ret = 0;
+	struct sxe2_adapter *adapter = SXE2_DEV_PRIVATE_TO_ADAPTER(dev);
+	PMD_INIT_FUNC_TRACE();
+
+	ret = sxe2_queues_init(dev);
+	if (ret) {
+		PMD_LOG_ERR(INIT, "Failed to init queues.");
+		goto l_end;
+	}
+
+	ret = sxe2_queues_start(dev);
+	if (ret) {
+		PMD_LOG_ERR(INIT, "enable queues failed");
+		goto l_end;
+	}
+
+	dev->data->dev_started = 1;
+	adapter->started = 1;
+	goto l_end;
+
+l_end:
+	return ret;
+}
+
+static int32_t sxe2_dev_close(struct rte_eth_dev *dev)
+{
+	(void)sxe2_dev_stop(dev);
+
+	sxe2_vsi_uninit(dev);
+
+	return 0;
+}
+
+static int32_t sxe2_dev_infos_get(struct rte_eth_dev *dev,
+			struct rte_eth_dev_info *dev_info)
+{
+	struct sxe2_adapter *adapter = SXE2_DEV_PRIVATE_TO_ADAPTER(dev);
+	struct sxe2_vsi *vsi = adapter->vsi_ctxt.main_vsi;
+
+	dev_info->max_rx_queues = vsi->rxqs.q_cnt;
+	dev_info->max_tx_queues = vsi->txqs.q_cnt;
+	dev_info->min_rx_bufsize = SXE2_MIN_BUF_SIZE;
+	dev_info->max_rx_pktlen = SXE2_FRAME_SIZE_MAX;
+	dev_info->max_lro_pkt_size = SXE2_FRAME_SIZE_MAX * SXE2_RX_LRO_DESC_MAX_NUM;
+	dev_info->max_mtu = dev_info->max_rx_pktlen - SXE2_ETH_OVERHEAD;
+	dev_info->min_mtu = RTE_ETHER_MIN_MTU;
+
+	dev_info->rx_offload_capa =
+		RTE_ETH_RX_OFFLOAD_KEEP_CRC |
+		RTE_ETH_RX_OFFLOAD_SCATTER |
+		RTE_ETH_RX_OFFLOAD_IPV4_CKSUM |
+		RTE_ETH_RX_OFFLOAD_UDP_CKSUM |
+		RTE_ETH_RX_OFFLOAD_TCP_CKSUM |
+		RTE_ETH_RX_OFFLOAD_SCTP_CKSUM |
+		RTE_ETH_RX_OFFLOAD_OUTER_IPV4_CKSUM |
+		RTE_ETH_RX_OFFLOAD_BUFFER_SPLIT |
+		RTE_ETH_RX_OFFLOAD_TCP_LRO;
+
+	dev_info->tx_offload_capa =
+		RTE_ETH_TX_OFFLOAD_MULTI_SEGS |
+		RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE |
+		RTE_ETH_TX_OFFLOAD_IPV4_CKSUM |
+		RTE_ETH_TX_OFFLOAD_UDP_CKSUM |
+		RTE_ETH_TX_OFFLOAD_TCP_CKSUM |
+		RTE_ETH_TX_OFFLOAD_SCTP_CKSUM |
+		RTE_ETH_TX_OFFLOAD_OUTER_IPV4_CKSUM |
+		RTE_ETH_TX_OFFLOAD_OUTER_UDP_CKSUM |
+		RTE_ETH_TX_OFFLOAD_TCP_TSO |
+		RTE_ETH_TX_OFFLOAD_UDP_TSO |
+		RTE_ETH_TX_OFFLOAD_VXLAN_TNL_TSO |
+		RTE_ETH_TX_OFFLOAD_GRE_TNL_TSO |
+		RTE_ETH_TX_OFFLOAD_IPIP_TNL_TSO |
+		RTE_ETH_TX_OFFLOAD_GENEVE_TNL_TSO;
+
+	dev_info->rx_queue_offload_capa =
+		RTE_ETH_RX_OFFLOAD_BUFFER_SPLIT |
+		RTE_ETH_RX_OFFLOAD_KEEP_CRC |
+		RTE_ETH_RX_OFFLOAD_SCATTER |
+		RTE_ETH_RX_OFFLOAD_IPV4_CKSUM |
+		RTE_ETH_RX_OFFLOAD_UDP_CKSUM |
+		RTE_ETH_RX_OFFLOAD_TCP_CKSUM |
+		RTE_ETH_RX_OFFLOAD_SCTP_CKSUM |
+		RTE_ETH_RX_OFFLOAD_OUTER_IPV4_CKSUM |
+		RTE_ETH_RX_OFFLOAD_TCP_LRO;
+	dev_info->tx_queue_offload_capa =
+		RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE |
+		RTE_ETH_TX_OFFLOAD_TCP_TSO |
+		RTE_ETH_TX_OFFLOAD_UDP_TSO |
+		RTE_ETH_TX_OFFLOAD_MULTI_SEGS |
+		RTE_ETH_TX_OFFLOAD_IPV4_CKSUM |
+		RTE_ETH_TX_OFFLOAD_UDP_CKSUM |
+		RTE_ETH_TX_OFFLOAD_TCP_CKSUM |
+		RTE_ETH_TX_OFFLOAD_SCTP_CKSUM |
+		RTE_ETH_TX_OFFLOAD_OUTER_IPV4_CKSUM |
+		RTE_ETH_TX_OFFLOAD_OUTER_UDP_CKSUM |
+		RTE_ETH_TX_OFFLOAD_VXLAN_TNL_TSO |
+		RTE_ETH_TX_OFFLOAD_GRE_TNL_TSO |
+		RTE_ETH_TX_OFFLOAD_IPIP_TNL_TSO |
+		RTE_ETH_TX_OFFLOAD_GENEVE_TNL_TSO;
+
+	dev_info->default_rxconf = (struct rte_eth_rxconf) {
+		.rx_thresh = {
+			.pthresh = SXE2_DEFAULT_RX_PTHRESH,
+			.hthresh = SXE2_DEFAULT_RX_HTHRESH,
+			.wthresh = SXE2_DEFAULT_RX_WTHRESH,
+		},
+		.rx_free_thresh = SXE2_DEFAULT_RX_FREE_THRESH,
+		.rx_drop_en = 0,
+		.offloads = 0,
+	};
+
+	dev_info->default_txconf = (struct rte_eth_txconf) {
+		.tx_thresh = {
+			.pthresh = SXE2_DEFAULT_TX_PTHRESH,
+			.hthresh = SXE2_DEFAULT_TX_HTHRESH,
+			.wthresh = SXE2_DEFAULT_TX_WTHRESH,
+		},
+		.tx_free_thresh = SXE2_DEFAULT_TX_FREE_THRESH,
+		.tx_rs_thresh = SXE2_DEFAULT_TX_RSBIT_THRESH,
+		.offloads = 0,
+	};
+
+	dev_info->rx_desc_lim = (struct rte_eth_desc_lim) {
+		.nb_max = SXE2_MAX_RING_DESC,
+		.nb_min = SXE2_MIN_RING_DESC,
+		.nb_align = SXE2_ALIGN,
+	};
+
+	dev_info->tx_desc_lim = (struct rte_eth_desc_lim) {
+		.nb_max = SXE2_MAX_RING_DESC,
+		.nb_min = SXE2_MIN_RING_DESC,
+		.nb_align = SXE2_ALIGN,
+		.nb_mtu_seg_max = SXE2_TX_MTU_SEG_MAX,
+		.nb_seg_max = SXE2_MAX_RING_DESC,
+	};
+
+	dev_info->speed_capa = RTE_ETH_LINK_SPEED_10G | RTE_ETH_LINK_SPEED_25G |
+				RTE_ETH_LINK_SPEED_50G | RTE_ETH_LINK_SPEED_100G;
+
+	dev_info->default_rxportconf.burst_size = SXE2_RX_MAX_BURST;
+	dev_info->default_txportconf.burst_size = SXE2_TX_MAX_BURST;
+	dev_info->default_rxportconf.nb_queues = 1;
+	dev_info->default_txportconf.nb_queues = 1;
+	dev_info->default_rxportconf.ring_size = SXE2_RING_SIZE_MIN;
+	dev_info->default_txportconf.ring_size = SXE2_RING_SIZE_MIN;
+
+	dev_info->rx_seg_capa.max_nseg = SXE2_RX_MAX_NSEG;
+
+	dev_info->rx_seg_capa.multi_pools = true;
+
+	dev_info->rx_seg_capa.offset_allowed = false;
+
+	dev_info->rx_seg_capa.offset_align_log2 = false;
+
+	return 0;
+}
+
+static const struct eth_dev_ops sxe2_eth_dev_ops = {
+	.dev_configure              = sxe2_dev_configure,
+	.dev_start                  = sxe2_dev_start,
+	.dev_stop                   = sxe2_dev_stop,
+	.dev_close                  = sxe2_dev_close,
+	.dev_infos_get              = sxe2_dev_infos_get,
+};
+
+static void sxe2_drv_dev_caps_set(struct sxe2_adapter *adapter,
+			struct sxe2_drv_dev_caps_resp *dev_caps)
+{
+	adapter->port_idx = dev_caps->port_idx;
+
+	adapter->cap_flags = 0;
+
+	if (dev_caps->cap_flags & SXE2_DEV_CAPS_OFFLOAD_L2)
+		adapter->cap_flags |= SXE2_DEV_CAPS_OFFLOAD_L2;
+
+	if (dev_caps->cap_flags & SXE2_DEV_CAPS_OFFLOAD_VLAN)
+		adapter->cap_flags |= SXE2_DEV_CAPS_OFFLOAD_VLAN;
+
+	if (dev_caps->cap_flags & SXE2_DEV_CAPS_OFFLOAD_RSS)
+		adapter->cap_flags |= SXE2_DEV_CAPS_OFFLOAD_RSS;
+
+	if (dev_caps->cap_flags & SXE2_DEV_CAPS_OFFLOAD_IPSEC)
+		adapter->cap_flags |= SXE2_DEV_CAPS_OFFLOAD_IPSEC;
+
+	if (dev_caps->cap_flags & SXE2_DEV_CAPS_OFFLOAD_FNAV)
+		adapter->cap_flags |= SXE2_DEV_CAPS_OFFLOAD_FNAV;
+
+	if (dev_caps->cap_flags & SXE2_DEV_CAPS_OFFLOAD_TM)
+		adapter->cap_flags |= SXE2_DEV_CAPS_OFFLOAD_TM;
+
+	if (dev_caps->cap_flags & SXE2_DEV_CAPS_OFFLOAD_PTP)
+		adapter->cap_flags |= SXE2_DEV_CAPS_OFFLOAD_PTP;
+
+	if (dev_caps->cap_flags & SXE2_DEV_CAPS_OFFLOAD_Q_MAP)
+		adapter->cap_flags |= SXE2_DEV_CAPS_OFFLOAD_Q_MAP;
+
+	if (dev_caps->cap_flags & SXE2_DEV_CAPS_OFFLOAD_FC_STATE)
+		adapter->cap_flags |= SXE2_DEV_CAPS_OFFLOAD_FC_STATE;
+}
+
+static int32_t sxe2_func_caps_get(struct sxe2_adapter *adapter)
+{
+	int32_t ret = -1;
+	struct sxe2_drv_dev_caps_resp dev_caps = {0};
+
+	ret = sxe2_drv_dev_caps_get(adapter, &dev_caps);
+	if (ret)
+		goto l_end;
+
+	adapter->dev_type = dev_caps.dev_type;
+
+	sxe2_drv_dev_caps_set(adapter,  &dev_caps);
+
+	sxe2_sw_queue_ctx_hw_cap_set(adapter, &dev_caps.queue_caps);
+
+	sxe2_sw_vsi_ctx_hw_cap_set(adapter, &dev_caps.vsi_caps);
+
+l_end:
+	return ret;
+}
+
+static int32_t sxe2_dev_caps_get(struct sxe2_adapter *adapter)
+{
+	int32_t ret = -1;
+
+	ret = sxe2_func_caps_get(adapter);
+	if (ret)
+		PMD_LOG_ERR(INIT, "get function caps failed, ret=%d", ret);
+
+	return ret;
+}
+
+static int32_t sxe2_hw_init(struct rte_eth_dev *dev)
+{
+	struct sxe2_adapter *adapter = SXE2_DEV_PRIVATE_TO_ADAPTER(dev);
+	int32_t ret = -1;
+
+	PMD_INIT_FUNC_TRACE();
+
+	ret = sxe2_dev_caps_get(adapter);
+	if (ret)
+		PMD_LOG_ERR(INIT, "Failed to get device caps, ret=[%d]", ret);
+
+	return ret;
+}
+
+static int32_t sxe2_dev_info_init(struct rte_eth_dev *dev)
+{
+	struct sxe2_adapter *adapter =
+		SXE2_DEV_PRIVATE_TO_ADAPTER(dev);
+	struct rte_pci_device *pci_dev = RTE_DEV_TO_PCI(dev->device);
+	struct sxe2_dev_info *dev_info = &adapter->dev_info;
+	struct sxe2_drv_dev_info_resp dev_info_resp = {0};
+	struct sxe2_drv_dev_fw_info_resp dev_fw_info_resp = {0};
+	int32_t ret = 0;
+
+	dev_info->pci.bus_devid = pci_dev->addr.devid;
+	dev_info->pci.bus_function = pci_dev->addr.function;
+
+	ret = sxe2_drv_dev_info_get(adapter, &dev_info_resp);
+	if (ret) {
+		PMD_LOG_ERR(INIT, "Failed to get device info, ret=[%d]", ret);
+		goto l_end;
+	}
+	dev_info->pci.serial_number = dev_info_resp.dsn;
+
+	ret = sxe2_drv_dev_fw_info_get(adapter, &dev_fw_info_resp);
+	if (ret) {
+		PMD_LOG_ERR(INIT, "Failed to get device fw info, ret=[%d]", ret);
+		goto l_end;
+	}
+	dev_info->fw.build_id = dev_fw_info_resp.build_id;
+	dev_info->fw.fix_version_id = dev_fw_info_resp.fix_version_id;
+	dev_info->fw.sub_version_id = dev_fw_info_resp.sub_version_id;
+	dev_info->fw.main_version_id = dev_fw_info_resp.main_version_id;
+
+	if (rte_is_valid_assigned_ether_addr((struct rte_ether_addr *)dev_info_resp.mac_addr))
+		rte_ether_addr_copy((struct rte_ether_addr *)dev_info_resp.mac_addr,
+						(struct rte_ether_addr *)dev_info->mac.perm_addr);
+	else
+		rte_eth_random_addr(dev_info->mac.perm_addr);
+
+l_end:
+	return ret;
+}
+
+static int32_t sxe2_dev_init(struct rte_eth_dev *dev,
+			     struct sxe2_dev_kvargs_info *kvargs __rte_unused)
+{
+	int32_t ret = 0;
+
+	PMD_INIT_FUNC_TRACE();
+
+	dev->dev_ops = &sxe2_eth_dev_ops;
+
+	if (rte_eal_process_type() != RTE_PROC_PRIMARY)
+		goto l_end;
+
+	ret = sxe2_hw_init(dev);
+	if (ret) {
+		PMD_LOG_ERR(INIT, "Failed to initialize hw, ret=[%d]", ret);
+		goto l_end;
+	}
+
+	ret = sxe2_vsi_init(dev);
+	if (ret) {
+		PMD_LOG_ERR(INIT, "create main vsi failed, ret=%d", ret);
+		goto init_vsi_err;
+	}
+
+	ret = sxe2_dev_info_init(dev);
+	if (ret) {
+		PMD_LOG_ERR(INIT, "Failed to get device info, ret=[%d]", ret);
+		goto init_dev_info_err;
+	}
+
+	goto l_end;
+
+init_dev_info_err:
+	sxe2_vsi_uninit(dev);
+init_vsi_err:
+l_end:
+	return ret;
+}
+
+static int32_t sxe2_dev_uninit(struct rte_eth_dev *dev)
+{
+	int32_t ret = 0;
+	if (rte_eal_process_type() != RTE_PROC_PRIMARY)
+		goto l_end;
+
+	ret = sxe2_dev_close(dev);
+	if (ret) {
+		PMD_LOG_ERR(INIT, "Sxe2 dev close failed, ret=%d", ret);
+		goto l_end;
+	}
+
+l_end:
+	return ret;
+}
+
+static int32_t sxe2_eth_pmd_remove(struct sxe2_common_device *cdev)
+{
+	struct rte_eth_dev *eth_dev;
+	struct rte_pci_device *pci_dev = RTE_DEV_TO_PCI(cdev->dev);
+	int32_t ret = 0;
+
+	eth_dev = rte_eth_dev_allocated(pci_dev->device.name);
+	if (!eth_dev) {
+		PMD_LOG_INFO(INIT, "Sxe2 dev allocated failed");
+		goto l_end;
+	}
+
+	ret = sxe2_dev_uninit(eth_dev);
+	if (ret) {
+		PMD_LOG_ERR(INIT, "Sxe2 dev uninit failed, ret=%d", ret);
+		goto l_end;
+	}
+	(void)rte_eth_dev_release_port(eth_dev);
+
+l_end:
+	return ret;
+}
+
+static int32_t sxe2_eth_pmd_probe_pf(struct sxe2_common_device *cdev,
+		struct rte_eth_devargs *req_eth_da __rte_unused,
+		uint16_t owner_id __rte_unused,
+		struct sxe2_dev_kvargs_info *kvargs)
+{
+	struct rte_pci_device *pci_dev = RTE_DEV_TO_PCI(cdev->dev);
+	struct rte_eth_dev *eth_dev = NULL;
+	struct sxe2_adapter *adapter = NULL;
+	int32_t ret = 0;
+
+	if (!cdev) {
+		ret = -EINVAL;
+		goto l_end;
+	}
+
+	eth_dev = rte_eth_dev_pci_allocate(pci_dev, sizeof(struct sxe2_adapter));
+	if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
+		if (eth_dev == NULL) {
+			PMD_LOG_ERR(INIT, "Can not allocate ethdev");
+			ret = -ENOMEM;
+			goto l_end;
+		}
+	} else {
+		if (!eth_dev) {
+			PMD_LOG_DEBUG(INIT, "Can not attach secondary ethdev");
+			ret = -EINVAL;
+			goto l_end;
+		}
+	}
+
+	adapter = SXE2_DEV_PRIVATE_TO_ADAPTER(eth_dev);
+	adapter->dev_port_id = eth_dev->data->port_id;
+	if (rte_eal_process_type() == RTE_PROC_PRIMARY)
+		adapter->cdev = cdev;
+
+	ret = sxe2_dev_init(eth_dev, kvargs);
+	if (ret != 0) {
+		PMD_DEV_LOG_ERR(adapter, INIT, "Sxe2 dev init failed, ret=%d", ret);
+		goto l_release_port;
+	}
+
+	rte_eth_dev_probing_finish(eth_dev);
+	PMD_DEV_LOG_DEBUG(adapter, INIT, "Sxe2 eth pmd probe successful!");
+	goto l_end;
+
+l_release_port:
+	(void)rte_eth_dev_release_port(eth_dev);
+l_end:
+	return ret;
+}
+
+static int32_t sxe2_parse_eth_devargs(struct rte_device *dev,
+			  struct rte_eth_devargs *eth_da)
+{
+	int ret = 0;
+
+	if (dev->devargs == NULL)
+		return 0;
+
+	memset(eth_da, 0, sizeof(*eth_da));
+
+	if (dev->devargs->cls_str) {
+		ret = rte_eth_devargs_parse(dev->devargs->cls_str, eth_da, 1);
+		if (ret != 0) {
+			PMD_LOG_ERR(INIT, "Failed to parse device arguments: %s",
+				dev->devargs->cls_str);
+			return -rte_errno;
+		}
+	}
+
+	if (eth_da->type == RTE_ETH_REPRESENTOR_NONE && dev->devargs->args) {
+		ret = rte_eth_devargs_parse(dev->devargs->args, eth_da, 1);
+		if (ret) {
+			PMD_LOG_ERR(INIT, "Failed to parse device arguments: %s",
+				dev->devargs->args);
+			return -rte_errno;
+		}
+	}
+
+	return 0;
+}
+
+static int32_t sxe2_eth_pmd_probe(struct sxe2_common_device *cdev,
+				  struct sxe2_dev_kvargs_info *kvargs)
+{
+	struct rte_eth_devargs eth_da = { .nb_ports = 0 };
+	int32_t ret = 0;
+
+	ret = sxe2_parse_eth_devargs(cdev->dev, &eth_da);
+	if (ret != 0) {
+		ret = -EINVAL;
+		goto l_end;
+	}
+
+	ret = sxe2_eth_pmd_probe_pf(cdev, &eth_da, 0, kvargs);
+
+l_end:
+	return ret;
+}
+
+static struct sxe2_class_driver sxe2_eth_pmd = {
+	.drv_class = SXE2_CLASS_TYPE_ETH,
+	.name = "SXE2_ETH_PMD_DRIVER_NAME",
+	.probe = sxe2_eth_pmd_probe,
+	.remove = sxe2_eth_pmd_remove,
+	.id_table = pci_id_sxe2_tbl,
+	.intr_lsc = 1,
+	.intr_rmv = 1,
+};
+
+RTE_INIT(rte_sxe2_pmd_init)
+{
+	sxe2_common_init();
+	sxe2_class_driver_register(&sxe2_eth_pmd);
+}
+
+RTE_PMD_EXPORT_NAME(net_sxe2);
+RTE_PMD_REGISTER_PCI_TABLE(net_sxe2, pci_id_sxe2_tbl);
+RTE_PMD_REGISTER_KMOD_DEP(net_sxe2, "* sxe2");
+
+RTE_LOG_REGISTER_SUFFIX(sxe2_log_init, init, NOTICE);
+RTE_LOG_REGISTER_SUFFIX(sxe2_log_driver, driver, NOTICE);
+RTE_LOG_REGISTER_SUFFIX(sxe2_log_rx, rx, NOTICE);
+RTE_LOG_REGISTER_SUFFIX(sxe2_log_tx, tx, NOTICE);
+RTE_LOG_REGISTER_SUFFIX(sxe2_log_hw, hw, NOTICE);
diff --git a/drivers/net/sxe2/sxe2_ethdev.h b/drivers/net/sxe2/sxe2_ethdev.h
new file mode 100644
index 0000000000..c4634685e6
--- /dev/null
+++ b/drivers/net/sxe2/sxe2_ethdev.h
@@ -0,0 +1,293 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (C), 2025, Wuxi Stars Micro System Technologies Co., Ltd.
+ */
+#ifndef __SXE2_ETHDEV_H__
+#define __SXE2_ETHDEV_H__
+#include <rte_compat.h>
+#include <rte_kvargs.h>
+#include <rte_time.h>
+#include <ethdev_driver.h>
+#include <ethdev_pci.h>
+#include <rte_tm_driver.h>
+#include <rte_io.h>
+
+#include "sxe2_common.h"
+#include "sxe2_vsi.h"
+#include "sxe2_queue.h"
+#include "sxe2_irq.h"
+#include "sxe2_osal.h"
+
+struct sxe2_link_msg {
+	uint32_t speed;
+	uint8_t status;
+};
+
+enum sxe2_fnav_tunnel_flag_type {
+	SXE2_FNAV_TUN_FLAG_NO_TUNNEL,
+	SXE2_FNAV_TUN_FLAG_TUNNEL,
+	SXE2_FNAV_TUN_FLAG_ANY,
+};
+
+#define SXE2_VF_MAX_NUM        256
+#define SXE2_VSI_MAX_NUM       768
+#define SXE2_FRAME_SIZE_MAX    9832
+#define SXE2_VLAN_TAG_SIZE     4
+#define SXE2_ETH_OVERHEAD \
+	(RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN + SXE2_VLAN_TAG_SIZE)
+#define SXE2_ETH_MAX_LEN (RTE_ETHER_MTU + SXE2_ETH_OVERHEAD)
+
+#ifdef SXE2_TEST
+#define SXE2_RESET_ACTIVE_WAIT_COUNT   (5)
+#else
+#define SXE2_RESET_ACTIVE_WAIT_COUNT   (10000)
+#endif
+#define SXE2_NO_ACTIVE_CNT           (10)
+
+#define SXE2_WOKER_DELAY_5MS         (5)
+#define SXE2_WOKER_DELAY_10MS        (10)
+#define SXE2_WOKER_DELAY_20MS        (20)
+#define SXE2_WOKER_DELAY_30MS        (30)
+
+#define SXE2_RESET_DETEC_WAIT_COUNT    (100)
+#define SXE2_RESET_DONE_WAIT_COUNT     (250)
+#define SXE2_RESET_WAIT_MS             (10)
+
+#define SXE2_RESET_WAIT_MIN   (10)
+#define SXE2_RESET_WAIT_MAX   (20)
+#define upper_32_bits(n) ((uint32_t)(((n) >> 16) >> 16))
+#define lower_32_bits(n) ((uint32_t)((n) & 0xffffffff))
+
+#define SXE2_I2C_EEPROM_DEV_ADDR	0xA0
+#define SXE2_I2C_EEPROM_DEV_ADDR2	0xA2
+#define SXE2_MODULE_TYPE_SFP		0x03
+#define SXE2_MODULE_TYPE_QSFP_PLUS	0x0D
+#define SXE2_MODULE_TYPE_QSFP28	0x11
+#define SXE2_MODULE_SFF_ADDR_MODE	0x04
+#define SXE2_MODULE_SFF_DIAG_CAPAB	0x40
+#define SXE2_MODULE_REVISION_ADDR	0x01
+#define SXE2_MODULE_SFF_8472_COMP	0x5E
+#define SXE2_MODULE_SFF_8472_SWAP	0x5C
+#define SXE2_MODULE_QSFP_MAX_LEN	640
+#define SXE2_MODULE_SFF_8472_UNSUP	0x0
+#define SXE2_MODULE_SFF_DDM_IMPLEMENTED	0x40
+#define SXE2_MODULE_SFF_SFP_TYPE   0x03
+#define SXE2_MODULE_TYPE_QSFP_PLUS	0x0D
+#define SXE2_MODULE_TYPE_QSFP28	0x11
+
+#define SXE2_MODULE_SFF_8079		0x1
+#define SXE2_MODULE_SFF_8079_LEN	256
+#define SXE2_MODULE_SFF_8472		0x2
+#define SXE2_MODULE_SFF_8472_LEN	512
+#define SXE2_MODULE_SFF_8636		0x3
+#define SXE2_MODULE_SFF_8636_LEN	256
+#define SXE2_MODULE_SFF_8636_MAX_LEN     640
+#define SXE2_MODULE_SFF_8436		0x4
+#define SXE2_MODULE_SFF_8436_LEN	256
+#define SXE2_MODULE_SFF_8436_MAX_LEN     640
+
+enum sxe2_wk_type {
+	SXE2_WK_MONITOR,
+	SXE2_WK_MONITOR_IM,
+	SXE2_WK_POST,
+	SXE2_WK_MBX,
+};
+
+enum {
+	SXE2_FLAG_LEGACY_RX_ENABLE   = 0,
+	SXE2_FLAG_LRO_ENABLE = 1,
+	SXE2_FLAG_RXQ_DISABLED = 2,
+	SXE2_FLAG_TXQ_DISABLED = 3,
+	SXE2_FLAG_DRV_REMOVING = 4,
+	SXE2_FLAG_RESET_DETECTED = 5,
+	SXE2_FLAG_CORE_RESET_DONE = 6,
+	SXE2_FLAG_RESET_ACTIVED = 7,
+	SXE2_FLAG_RESET_PENDING = 8,
+	SXE2_FLAG_RESET_REQUEST = 9,
+	SXE2_FLAGS_RESET_PROCESS_DONE = 10,
+	SXE2_FLAG_RESET_FAILED = 11,
+	SXE2_FLAG_DRV_PROBE_DONE = 12,
+	SXE2_FLAG_NETDEV_REGISTED = 13,
+	SXE2_FLAG_DRV_UP = 15,
+	SXE2_FLAG_DCB_ENABLE = 16,
+	SXE2_FLAG_FLTR_SYNC = 17,
+
+	SXE2_FLAG_EVENT_IRQ_DISABLED = 18,
+	SXE2_FLAG_SUSPEND = 19,
+	SXE2_FLAG_FNAV_ENABLE = 20,
+
+	SXE2_FLAGS_NBITS
+};
+
+struct sxe2_link_context {
+	rte_spinlock_t link_lock;
+	bool link_up;
+	uint32_t  speed;
+};
+
+struct sxe2_devargs {
+	uint8_t flow_dup_pattern_mode;
+	uint8_t func_flow_direct_en;
+	uint8_t fnav_stat_type;
+	uint8_t high_performance_mode;
+	uint8_t sched_layer_mode;
+	uint8_t sw_stats_en;
+	uint8_t rx_low_latency;
+};
+
+#define SXE2_PCI_MAP_BAR_INVALID ((uint8_t)0xff)
+#define SXE2_PCI_MAP_INVALID_VAL ((uint32_t)0xffffffff)
+
+enum sxe2_pci_map_resource {
+	SXE2_PCI_MAP_RES_INVALID = 0,
+	SXE2_PCI_MAP_RES_DOORBELL_TX,
+	SXE2_PCI_MAP_RES_DOORBELL_RX_TAIL,
+	SXE2_PCI_MAP_RES_IRQ_DYN,
+	SXE2_PCI_MAP_RES_IRQ_ITR,
+	SXE2_PCI_MAP_RES_IRQ_MSIX,
+	SXE2_PCI_MAP_RES_PTP,
+	SXE2_PCI_MAP_RES_MAX_COUNT,
+};
+
+enum sxe2_udp_tunnel_protocol {
+	SXE2_UDP_TUNNEL_PROTOCOL_VXLAN = 0,
+	SXE2_UDP_TUNNEL_PROTOCOL_VXLAN_GPE,
+	SXE2_UDP_TUNNEL_PROTOCOL_GENEVE,
+	SXE2_UDP_TUNNEL_PROTOCOL_GTP_C = 4,
+	SXE2_UDP_TUNNEL_PROTOCOL_GTP_U,
+	SXE2_UDP_TUNNEL_PROTOCOL_PFCP,
+	SXE2_UDP_TUNNEL_PROTOCOL_ECPRI,
+	SXE2_UDP_TUNNEL_PROTOCOL_MPLS,
+	SXE2_UDP_TUNNEL_PROTOCOL_NVGRE = 10,
+	SXE2_UDP_TUNNEL_PROTOCOL_L2TP,
+	SXE2_UDP_TUNNEL_PROTOCOL_TEREDO,
+	SXE2_UDP_TUNNEL_MAX,
+};
+
+struct sxe2_pci_map_addr_info {
+	uint64_t addr_base;
+	uint8_t bar_idx;
+	uint8_t reg_width;
+};
+
+struct sxe2_pci_map_segment_info {
+	enum sxe2_pci_map_resource	type;
+	void				*addr;
+	uint64_t			page_inner_offset;
+	uint64_t			len;
+};
+
+struct sxe2_pci_map_bar_info {
+	uint8_t    bar_idx;
+	uint8_t    map_cnt;
+	struct sxe2_pci_map_segment_info    *seg_info;
+};
+
+struct sxe2_pci_map_context {
+	uint8_t    bar_cnt;
+	struct sxe2_pci_map_bar_info *bar_info;
+	struct sxe2_pci_map_addr_info *addr_info;
+};
+
+struct sxe2_dev_mac_info {
+	uint8_t perm_addr[SXE2_ETH_ALEN];
+};
+
+struct sxe2_pci_info {
+	uint64_t                     serial_number;
+	uint8_t                      bus_devid;
+	uint8_t                      bus_function;
+	uint16_t                     max_vfs;
+};
+
+struct sxe2_fw_info {
+	uint8_t                      main_version_id;
+	uint8_t                      sub_version_id;
+	uint8_t                      fix_version_id;
+	uint8_t                      build_id;
+};
+
+struct sxe2_dev_info {
+	struct rte_eth_dev_data        *dev_data;
+	struct sxe2_pci_info           pci;
+	struct sxe2_fw_info            fw;
+	struct sxe2_dev_mac_info       mac;
+};
+
+enum sxe2_udp_tunnel_status {
+	SXE2_UDP_TUNNEL_DISABLE = 0x0,
+	SXE2_UDP_TUNNEL_ENABLE,
+};
+
+struct sxe2_udp_tunnel_cfg {
+	uint8_t			protocol;
+	uint8_t			dev_status;
+	uint16_t			dev_port;
+	uint16_t			dev_ref_cnt;
+
+	uint16_t			fw_port;
+	uint8_t			fw_status;
+	uint8_t			fw_dst_en;
+	uint8_t			fw_src_en;
+	uint8_t			fw_used;
+};
+
+struct sxe2_udp_tunnel_ctx {
+	struct sxe2_udp_tunnel_cfg   tunnel_conf[SXE2_UDP_TUNNEL_MAX];
+	rte_spinlock_t                lock;
+};
+
+struct sxe2_repr_context {
+	uint16_t nb_vf;
+	uint16_t nb_repr_vf;
+	struct rte_eth_dev **vf_rep_eth_dev;
+	struct sxe2_drv_vsi_caps repr_vf_id[SXE2_VF_MAX_NUM];
+};
+
+struct sxe2_repr_private_data {
+	struct rte_eth_dev *rep_eth_dev;
+	struct sxe2_adapter *parent_adapter;
+
+	struct sxe2_vsi *cp_vsi;
+	uint16_t repr_q_id;
+
+	uint16_t repr_id;
+	uint16_t repr_pf_id;
+	uint16_t repr_vf_id;
+	uint16_t repr_vf_vsi_id;
+	uint16_t repr_vf_k_vsi_id;
+	uint16_t repr_vf_u_vsi_id;
+};
+
+struct sxe2_sched_hw_cap {
+	uint32_t tm_layers;
+	uint8_t root_max_children;
+	uint8_t prio_max;
+	uint8_t adj_lvl;
+};
+
+struct sxe2_adapter {
+	struct sxe2_common_device      *cdev;
+	struct sxe2_dev_info            dev_info;
+	struct rte_pci_device            *pci_dev;
+	struct sxe2_repr_private_data  *repr_priv_data;
+	struct sxe2_pci_map_context   map_ctxt;
+	struct sxe2_irq_context       irq_ctxt;
+	struct sxe2_queue_context     q_ctxt;
+	struct sxe2_vsi_context       vsi_ctxt;
+	struct sxe2_devargs			  devargs;
+	uint16_t                           dev_port_id;
+	uint64_t                           cap_flags;
+	enum sxe2_dev_type            dev_type;
+	uint32_t    ptype_tbl[SXE2_MAX_PTYPE_NUM];
+	struct rte_ether_addr           mac_addr;
+	uint8_t                              port_idx;
+	uint8_t                              pf_idx;
+	uint32_t                             tx_mode_flags;
+	uint32_t                             rx_mode_flags;
+	uint8_t                              started;
+};
+
+#define SXE2_DEV_PRIVATE_TO_ADAPTER(dev) \
+	((struct sxe2_adapter *)(dev)->data->dev_private)
+
+#endif /* __SXE2_ETHDEV_H__ */
diff --git a/drivers/net/sxe2/sxe2_irq.h b/drivers/net/sxe2/sxe2_irq.h
new file mode 100644
index 0000000000..bb96c6d842
--- /dev/null
+++ b/drivers/net/sxe2/sxe2_irq.h
@@ -0,0 +1,48 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (C), 2025, Wuxi Stars Micro System Technologies Co., Ltd.
+ */
+
+#ifndef __SXE2_IRQ_H__
+#define __SXE2_IRQ_H__
+
+#include <ethdev_driver.h>
+
+#include "sxe2_drv_cmd.h"
+
+#define SXE2_IRQ_MAX_CNT 2048
+
+#define SXE2_LAN_MSIX_MIN_CNT 1
+
+#define SXE2_EVENT_IRQ_IDX 0
+
+#define SXE2_MAX_INTR_QUEUE_NUM   256
+
+#define SXE2_IRQ_NAME_MAX_LEN     (IFNAMSIZ + 16)
+
+#define SXE2_ITR_1000K  1
+#define SXE2_ITR_500K   2
+#define SXE2_ITR_50K    20
+
+#define SXE2_ITR_INTERVAL_NORMAL  (SXE2_ITR_50K)
+#define SXE2_ITR_INTERVAL_LOW     (SXE2_ITR_1000K)
+
+struct sxe2_fwc_msix_caps;
+struct sxe2_adapter;
+
+struct sxe2_irq_context {
+	struct rte_intr_handle *reset_handle;
+	int32_t reset_event_fd;
+	int32_t other_event_fd;
+
+	uint16_t max_cnt_hw;
+	uint16_t base_idx_in_func;
+
+	uint16_t rxq_avail_cnt;
+	uint16_t rxq_base_idx_in_pf;
+
+	uint16_t rxq_irq_cnt;
+	uint32_t *rxq_msix_idx;
+	int32_t *rxq_event_fd;
+};
+
+#endif /* __SXE2_IRQ_H__ */
diff --git a/drivers/net/sxe2/sxe2_queue.c b/drivers/net/sxe2/sxe2_queue.c
new file mode 100644
index 0000000000..93f8236381
--- /dev/null
+++ b/drivers/net/sxe2/sxe2_queue.c
@@ -0,0 +1,38 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (C), 2025, Wuxi Stars Micro System Technologies Co., Ltd.
+ */
+
+#include "sxe2_ethdev.h"
+#include "sxe2_queue.h"
+#include "sxe2_common_log.h"
+
+void sxe2_sw_queue_ctx_hw_cap_set(struct sxe2_adapter *adapter,
+		struct sxe2_drv_queue_caps *q_caps)
+{
+	adapter->q_ctxt.qp_cnt_assign = q_caps->queues_cnt;
+	adapter->q_ctxt.base_idx_in_pf = q_caps->base_idx_in_pf;
+}
+
+int32_t sxe2_queues_init(struct rte_eth_dev *dev)
+{
+	int32_t ret = 0;
+	uint16_t buf_size;
+	uint16_t frame_size;
+	struct sxe2_rx_queue *rxq;
+	uint16_t nb_rxq;
+
+	frame_size = dev->data->mtu + SXE2_ETH_OVERHEAD;
+	for (nb_rxq = 0; nb_rxq < dev->data->nb_rx_queues; nb_rxq++) {
+		rxq = dev->data->rx_queues[nb_rxq];
+		if (!rxq)
+			continue;
+
+		buf_size = rte_pktmbuf_data_room_size(rxq->mb_pool) - RTE_PKTMBUF_HEADROOM;
+		rxq->rx_buf_len = RTE_ALIGN_FLOOR(buf_size, (1 << SXE2_RXQ_CTX_DBUFF_SHIFT));
+		rxq->rx_buf_len = RTE_MIN(rxq->rx_buf_len, SXE2_RX_MAX_DATA_BUF_SIZE);
+		if (frame_size > rxq->rx_buf_len)
+			dev->data->scattered_rx = 1;
+	}
+
+	return ret;
+}
diff --git a/drivers/net/sxe2/sxe2_queue.h b/drivers/net/sxe2/sxe2_queue.h
new file mode 100644
index 0000000000..e587e582fa
--- /dev/null
+++ b/drivers/net/sxe2/sxe2_queue.h
@@ -0,0 +1,191 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (C), 2025, Wuxi Stars Micro System Technologies Co., Ltd.
+ */
+
+#ifndef __SXE2_QUEUE_H__
+#define __SXE2_QUEUE_H__
+#include <rte_ethdev.h>
+#include <rte_io.h>
+#include <rte_stdatomic.h>
+#include <ethdev_driver.h>
+
+#include "sxe2_drv_cmd.h"
+#include "sxe2_txrx_common.h"
+
+#define SXE2_PCI_REG_READ(reg)			\
+		rte_read32(reg)
+#define SXE2_PCI_REG_WRITE_WC(reg, value)			\
+		rte_write32_wc((rte_cpu_to_le_32(value)), reg)
+#define SXE2_PCI_REG_WRITE_WC_RELAXED(reg, value)		\
+		rte_write32_wc_relaxed((rte_cpu_to_le_32(value)), reg)
+
+struct sxe2_queue_context {
+	uint16_t qp_cnt_assign;
+	uint16_t base_idx_in_pf;
+
+	uint32_t tx_mode_flags;
+	uint32_t rx_mode_flags;
+};
+
+struct sxe2_tx_buffer {
+	struct rte_mbuf *mbuf;
+
+	uint16_t next_id;
+	uint16_t last_id;
+};
+
+struct sxe2_tx_buffer_vec {
+	struct rte_mbuf *mbuf;
+};
+
+struct sxe2_txq_stats {
+	uint64_t tx_restart;
+	uint64_t tx_busy;
+
+	uint64_t tx_linearize;
+	uint64_t tx_tso_linearize_chk;
+	uint64_t tx_vlan_insert;
+	uint64_t tx_tso_packets;
+	uint64_t tx_tso_bytes;
+	uint64_t tx_csum_none;
+	uint64_t tx_csum_partial;
+	uint64_t tx_csum_partial_inner;
+	uint64_t tx_queue_dropped;
+	uint64_t tx_xmit_more;
+	uint64_t tx_pkts_num;
+	uint64_t tx_desc_not_done;
+};
+
+struct sxe2_tx_queue;
+struct sxe2_txq_ops {
+	void (*queue_reset)(struct sxe2_tx_queue *txq);
+	void (*mbufs_release)(struct sxe2_tx_queue *txq);
+	void (*buffer_ring_free)(struct sxe2_tx_queue *txq);
+};
+struct sxe2_tx_queue {
+	volatile union sxe2_tx_data_desc *desc_ring;
+	struct sxe2_tx_buffer *buffer_ring;
+	volatile uint32_t *tdt_reg_addr;
+
+	uint64_t offloads;
+	uint16_t ring_depth;
+	uint16_t desc_free_num;
+
+	uint16_t free_thresh;
+
+	uint16_t rs_thresh;
+	uint16_t next_use;
+	uint16_t next_clean;
+
+	uint16_t desc_used_num;
+	uint16_t next_dd;
+	uint16_t next_rs;
+	uint16_t ipsec_pkt_md_offset;
+
+	uint16_t port_id;
+	uint16_t queue_id;
+	uint16_t idx_in_func;
+	bool tx_deferred_start;
+	uint8_t pthresh;
+	uint8_t hthresh;
+	uint8_t wthresh;
+	uint16_t reg_idx;
+	uint64_t base_addr;
+	struct sxe2_vsi *vsi;
+	const struct rte_memzone *mz;
+	struct sxe2_txq_ops ops;
+	uint8_t  vlan_flag;
+	uint8_t  use_ctx:1,
+		res:7;
+};
+struct sxe2_rx_queue;
+struct sxe2_rxq_ops {
+	void (*queue_reset)(struct sxe2_rx_queue *rxq);
+	void (*mbufs_release)(struct sxe2_rx_queue *txq);
+};
+struct sxe2_rxq_stats {
+	uint64_t rx_pkts_num;
+	uint64_t rx_rss_pkt_num;
+	uint64_t rx_fnav_pkt_num;
+	uint64_t rx_ptp_pkt_num;
+	uint32_t rx_vec_align_drop;
+
+	uint32_t rxdid_1588_err;
+	uint32_t ip_csum_err;
+	uint32_t l4_csum_err;
+	uint32_t outer_ip_csum_err;
+	uint32_t outer_l4_csum_err;
+	uint32_t macsec_err;
+	uint32_t ipsec_err;
+
+	uint64_t ptype_pkts[SXE2_MAX_PTYPE_NUM];
+};
+
+struct sxe2_rxq_sw_stats {
+	RTE_ATOMIC(uint64_t)pkts;
+	RTE_ATOMIC(uint64_t)bytes;
+	RTE_ATOMIC(uint64_t)drop_pkts;
+	RTE_ATOMIC(uint64_t)drop_bytes;
+	RTE_ATOMIC(uint64_t)unicast_pkts;
+	RTE_ATOMIC(uint64_t)multicast_pkts;
+	RTE_ATOMIC(uint64_t)broadcast_pkts;
+};
+
+struct sxe2_rx_queue {
+	volatile union sxe2_rx_desc *desc_ring;
+	volatile uint32_t *rdt_reg_addr;
+	struct rte_mempool *mb_pool;
+	struct rte_mbuf **buffer_ring;
+	struct sxe2_vsi *vsi;
+
+	uint64_t offloads;
+	uint16_t ring_depth;
+	uint16_t rx_free_thresh;
+	uint16_t processing_idx;
+	uint16_t hold_num;
+	uint16_t next_ret_pkt;
+	uint16_t batch_alloc_trigger;
+	uint16_t completed_pkts_num;
+	uint64_t update_time;
+	uint32_t desc_ts;
+	uint64_t ts_high;
+	uint32_t ts_low;
+	uint32_t ts_need_update;
+	uint8_t  crc_len;
+	bool fnav_enable;
+
+	struct rte_eth_rxseg_split rx_seg[SXE2_RX_SEG_NUM];
+
+	struct rte_mbuf *completed_buf[SXE2_RX_PKTS_BURST_BATCH_NUM * 2];
+	struct rte_mbuf *pkt_first_seg;
+	struct rte_mbuf *pkt_last_seg;
+	uint64_t mbuf_init_value;
+	uint16_t realloc_num;
+	uint16_t realloc_start;
+	struct rte_mbuf fake_mbuf;
+
+	const struct rte_memzone *mz;
+	struct sxe2_rxq_ops ops;
+	rte_iova_t base_addr;
+	uint16_t reg_idx;
+	uint32_t low_desc_waterline : 16;
+	uint32_t ldw_event_pending : 1;
+	struct sxe2_rxq_sw_stats sw_stats;
+	uint16_t port_id;
+	uint16_t queue_id;
+	uint16_t idx_in_func;
+	uint16_t rx_buf_len;
+	uint16_t rx_hdr_len;
+	uint16_t max_pkt_len;
+	bool rx_deferred_start;
+	uint8_t drop_en;
+};
+
+struct sxe2_adapter;
+
+void sxe2_sw_queue_ctx_hw_cap_set(struct sxe2_adapter *adapter,
+		struct sxe2_drv_queue_caps *q_caps);
+
+int32_t sxe2_queues_init(struct rte_eth_dev *dev);
+
+#endif /* __SXE2_QUEUE_H__ */
diff --git a/drivers/net/sxe2/sxe2_txrx_common.h b/drivers/net/sxe2/sxe2_txrx_common.h
new file mode 100644
index 0000000000..0df401ca56
--- /dev/null
+++ b/drivers/net/sxe2/sxe2_txrx_common.h
@@ -0,0 +1,540 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (C), 2025, Wuxi Stars Micro System Technologies Co., Ltd.
+ */
+
+#ifndef _SXE2_TXRX_COMMON_H_
+#define _SXE2_TXRX_COMMON_H_
+#include <stdbool.h>
+
+#define SXE2_ALIGN_RING_DESC      32
+#define SXE2_MIN_RING_DESC        64
+#define SXE2_MAX_RING_DESC        4096
+
+#define SXE2_VECTOR_PATH               0
+#define SXE2_VECTOR_OFFLOAD_PATH       1
+#define SXE2_VECTOR_CTX_OFFLOAD_PATH   2
+
+#define SXE2_MAX_PTYPE_NUM     1024
+#define SXE2_MIN_BUF_SIZE      1024
+
+#define SXE2_ALIGN                32
+#define SXE2_DESC_ADDR_ALIGN      128
+
+#define SXE2_MIN_TSO_MSS       88
+#define SXE2_MAX_TSO_MSS       9728
+
+#define SXE2_TX_MTU_SEG_MAX      15
+
+#define SXE2_TX_MIN_PKT_LEN    17
+#define SXE2_TX_MAX_BURST      32
+#define SXE2_TX_MAX_FREE_BUF   64
+#define SXE2_TX_TSO_PKTLEN_MAX        (256ULL * 1024)
+
+#define DEFAULT_TX_RS_THRESH   32
+#define DEFAULT_TX_FREE_THRESH 32
+
+#define SXE2_TX_FLAGS_VLAN_TAG_LOC_L2TAG1	RTE_BIT32(0)
+#define SXE2_TX_FLAGS_VLAN_TAG_LOC_L2TAG2	RTE_BIT32(1)
+
+#define SXE2_TX_PKTS_BURST_BATCH_NUM	32
+
+union sxe2_tx_offload_info {
+	uint64_t data;
+	struct {
+		uint64_t l2_len:7;
+		uint64_t l3_len:9;
+		uint64_t l4_len:8;
+		uint64_t tso_segsz:16;
+		uint64_t outer_l2_len:8;
+		uint64_t outer_l3_len:16;
+	};
+};
+
+#define SXE2_TX_OFFLOAD_CTXT_NEEDCK_MASK (RTE_MBUF_F_TX_TCP_SEG | \
+				RTE_MBUF_F_TX_UDP_SEG | \
+				RTE_MBUF_F_TX_QINQ | \
+				RTE_MBUF_F_TX_OUTER_IP_CKSUM | \
+				RTE_MBUF_F_TX_OUTER_UDP_CKSUM | \
+				RTE_MBUF_F_TX_SEC_OFFLOAD | \
+				RTE_MBUF_F_TX_IEEE1588_TMST)
+
+#define SXE2_TX_OFFLOAD_CKSUM_MASK (RTE_MBUF_F_TX_IP_CKSUM | \
+				RTE_MBUF_F_TX_L4_MASK | \
+				RTE_MBUF_F_TX_TCP_SEG | \
+				RTE_MBUF_F_TX_UDP_SEG | \
+				RTE_MBUF_F_TX_OUTER_UDP_CKSUM | \
+				RTE_MBUF_F_TX_OUTER_IP_CKSUM)
+
+struct sxe2_tx_context_desc {
+	uint32_t tunneling_params;
+	uint16_t l2tag2;
+	uint16_t ipsec_offset;
+	uint64_t type_cmd_tso_mss;
+};
+
+#define SXE2_TX_CTXT_DESC_EIPLEN_SHIFT	2
+#define SXE2_TX_CTXT_DESC_L4TUNT_SHIFT	9
+#define SXE2_TX_CTXT_DESC_NATLEN_SHIFT	12
+#define SXE2_TX_CTXT_DESC_L4T_CS_SHIFT	23
+
+#define SXE2_TX_CTXT_DESC_CMD_SHIFT			4
+#define SXE2_TX_CTXT_DESC_IPSEC_MODE_SHIFT	11
+#define SXE2_TX_CTXT_DESC_IPSEC_EN_SHIFT		12
+#define SXE2_TX_CTXT_DESC_IPSEC_ENGINE_SHIFT	13
+#define SXE2_TX_CTXT_DESC_IPSEC_SA_SHIFT		16
+#define SXE2_TX_CTXT_DESC_TSO_LEN_SHIFT		30
+#define SXE2_TX_CTXT_DESC_MSS_SHIFT			50
+#define SXE2_TX_CTXT_DESC_VSI_SHIFT	        50
+
+#define SXE2_TX_CTXT_DESC_L4T_CS_MASK  RTE_BIT64(SXE2_TX_CTXT_DESC_L4T_CS_SHIFT)
+
+#define SXE2_TX_CTXT_DESC_EIPLEN_VAL(val) \
+		(((val) >> 2) << SXE2_TX_CTXT_DESC_EIPLEN_SHIFT)
+#define SXE2_TX_CTXT_DESC_NATLEN_VAL(val) \
+		(((val) >> 1) << SXE2_TX_CTXT_DESC_NATLEN_SHIFT)
+
+enum sxe2_tx_ctxt_desc_eipt_bits {
+	SXE2_TX_CTXT_DESC_EIPT_NONE         = 0x0,
+	SXE2_TX_CTXT_DESC_EIPT_IPV6         = 0x1,
+	SXE2_TX_CTXT_DESC_EIPT_IPV4_NO_CSUM = 0x2,
+	SXE2_TX_CTXT_DESC_EIPT_IPV4         = 0x3,
+};
+
+enum sxe2_tx_ctxt_desc_l4tunt_bits {
+	SXE2_TX_CTXT_DESC_UDP_TUNNE = 0x1 << SXE2_TX_CTXT_DESC_L4TUNT_SHIFT,
+	SXE2_TX_CTXT_DESC_GRE_TUNNE = 0x2 << SXE2_TX_CTXT_DESC_L4TUNT_SHIFT,
+};
+
+enum sxe2_tx_ctxt_desc_cmd_bits {
+	SXE2_TX_CTXT_DESC_CMD_TSO          = 0x01,
+	SXE2_TX_CTXT_DESC_CMD_TSYN         = 0x02,
+	SXE2_TX_CTXT_DESC_CMD_IL2TAG2      = 0x04,
+	SXE2_TX_CTXT_DESC_CMD_IL2TAG2_IL2H = 0x08,
+	SXE2_TX_CTXT_DESC_CMD_SWTCH_NOTAG  = 0x00,
+	SXE2_TX_CTXT_DESC_CMD_SWTCH_UPLINK = 0x10,
+	SXE2_TX_CTXT_DESC_CMD_SWTCH_LOCAL  = 0x20,
+	SXE2_TX_CTXT_DESC_CMD_SWTCH_VSI    = 0x30,
+	SXE2_TX_CTXT_DESC_CMD_RESERVED     = 0x40
+};
+#define SXE2_TX_CTXT_DESC_IPSEC_MODE		RTE_BIT64(SXE2_TX_CTXT_DESC_IPSEC_MODE_SHIFT)
+#define SXE2_TX_CTXT_DESC_IPSEC_EN		RTE_BIT64(SXE2_TX_CTXT_DESC_IPSEC_EN_SHIFT)
+#define SXE2_TX_CTXT_DESC_IPSEC_ENGINE	RTE_BIT64(SXE2_TX_CTXT_DESC_IPSEC_ENGINE_SHIFT)
+#define SXE2_TX_CTXT_DESC_CMD_TSYN_MASK   \
+		(((uint64_t)SXE2_TX_CTXT_DESC_CMD_TSYN) << SXE2_TX_CTXT_DESC_CMD_SHIFT)
+#define SXE2_TX_CTXT_DESC_CMD_IL2TAG2_MASK   \
+		(((uint64_t)SXE2_TX_CTXT_DESC_CMD_IL2TAG2) << SXE2_TX_CTXT_DESC_CMD_SHIFT)
+
+union sxe2_tx_data_desc {
+	struct {
+		uint64_t buf_addr;
+		uint64_t type_cmd_off_bsz_l2t;
+	} read;
+	struct {
+		uint64_t rsvd;
+		uint64_t dd;
+	} wb;
+};
+
+#define SXE2_TX_DATA_DESC_CMD_SHIFT	4
+#define SXE2_TX_DATA_DESC_OFFSET_SHIFT	16
+#define SXE2_TX_DATA_DESC_BUF_SZ_SHIFT	34
+#define SXE2_TX_DATA_DESC_L2TAG1_SHIFT	48
+
+#define SXE2_TX_DATA_DESC_CMD_MASK	\
+		(0xFFFULL   << SXE2_TX_DATA_DESC_CMD_SHIFT)
+#define SXE2_TX_DATA_DESC_OFFSET_MASK	\
+		(0x3FFFFULL << SXE2_TX_DATA_DESC_OFFSET_SHIFT)
+#define SXE2_TX_DATA_DESC_BUF_SZ_MASK	\
+		(0x3FFFULL  << SXE2_TX_DATA_DESC_BUF_SZ_SHIFT)
+#define SXE2_TX_DATA_DESC_L2TAG1_MASK	\
+		(0xFFFFULL  << SXE2_TX_DATA_DESC_L2TAG1_SHIFT)
+
+#define SXE2_TX_DESC_LENGTH_MACLEN_SHIFT		 (0)
+#define SXE2_TX_DESC_LENGTH_IPLEN_SHIFT		 (7)
+#define SXE2_TX_DESC_LENGTH_L4_FC_LEN_SHIFT	 (14)
+
+#define SXE2_TX_DESC_DTYPE_MASK	0xF
+#define SXE2_TX_DATA_DESC_MACLEN_MASK \
+		(0x7FULL << SXE2_TX_DESC_LENGTH_MACLEN_SHIFT)
+#define SXE2_TX_DATA_DESC_IPLEN_MASK  \
+		(0x7FULL << SXE2_TX_DESC_LENGTH_IPLEN_SHIFT)
+#define SXE2_TX_DATA_DESC_L4LEN_MASK  \
+		(0xFULL  << SXE2_TX_DESC_LENGTH_L4_FC_LEN_SHIFT)
+
+#define SXE2_TX_DATA_DESC_MACLEN_VAL(val)	\
+	(((val) >> 1) << SXE2_TX_DESC_LENGTH_MACLEN_SHIFT)
+#define SXE2_TX_DATA_DESC_IPLEN_VAL(val)	\
+	(((val) >> 2) << SXE2_TX_DESC_LENGTH_IPLEN_SHIFT)
+#define SXE2_TX_DATA_DESC_L4LEN_VAL(val)	\
+	(((val) >> 2) << SXE2_TX_DESC_LENGTH_L4_FC_LEN_SHIFT)
+
+enum sxe2_tx_desc_type {
+	SXE2_TX_DESC_DTYPE_DATA      = 0x0,
+	SXE2_TX_DESC_DTYPE_CTXT      = 0x1,
+	SXE2_TX_DESC_DTYPE_FLTR_PROG = 0x8,
+	SXE2_TX_DESC_DTYPE_DESC_DONE = 0xF,
+};
+
+enum sxe2_tx_data_desc_cmd_bits {
+	SXE2_TX_DATA_DESC_CMD_EOP            = 0x0001,
+	SXE2_TX_DATA_DESC_CMD_RS             = 0x0002,
+	SXE2_TX_DATA_DESC_CMD_MACSEC         = 0x0004,
+	SXE2_TX_DATA_DESC_CMD_IL2TAG1        = 0x0008,
+	SXE2_TX_DATA_DESC_CMD_DUMMY          = 0x0010,
+	SXE2_TX_DATA_DESC_CMD_IIPT_IPV6      = 0x0020,
+	SXE2_TX_DATA_DESC_CMD_IIPT_IPV4      = 0x0040,
+	SXE2_TX_DATA_DESC_CMD_IIPT_IPV4_CSUM = 0x0060,
+	SXE2_TX_DATA_DESC_CMD_L4T_EOFT_TCP   = 0x0100,
+	SXE2_TX_DATA_DESC_CMD_L4T_EOFT_SCTP  = 0x0200,
+	SXE2_TX_DATA_DESC_CMD_L4T_EOFT_UDP   = 0x0300,
+	SXE2_TX_DATA_DESC_CMD_RE             = 0x0400
+};
+#define SXE2_TX_DATA_DESC_CMD_RS_MASK	\
+		(((uint64_t)SXE2_TX_DATA_DESC_CMD_RS) << SXE2_TX_DATA_DESC_CMD_SHIFT)
+
+#define SXE2_TX_MAX_DATA_NUM_PER_DESC	0X3FFFUL
+
+#define SXE2_TX_DESC_RING_ALIGN	\
+	(SXE2_ALIGN_RING_DESC / sizeof(union sxe2_tx_data_desc))
+
+#define SXE2_TX_DESC_DTYPE_DESC_MASK 0xF
+
+#define SXE2_TX_FILL_PER_LOOP          4
+#define SXE2_TX_FILL_PER_LOOP_MASK     (SXE2_TX_FILL_PER_LOOP - 1)
+#define SXE2_TX_FREE_BUFFER_SIZE_MAX  (64)
+
+#define SXE2_RX_MAX_BURST              32
+#define SXE2_RING_SIZE_MIN             1024
+#define SXE2_RX_MAX_NSEG               2
+
+#define SXE2_RX_PKTS_BURST_BATCH_NUM	  SXE2_RX_MAX_BURST
+#define SXE2_VPMD_RX_MAX_BURST         SXE2_RX_MAX_BURST
+
+#define SXE2_RXQ_CTX_DBUFF_SHIFT       7
+
+#define SXE2_RX_NUM_PER_LOOP			8
+
+#define SXE2_RX_FLEX_DESC_PTYPE_S      (16)
+#define SXE2_RX_FLEX_DESC_PTYPE_M      (0x3FFULL)
+
+#define SXE2_RX_HBUF_LEN_UNIT          6
+#define SXE2_RX_LDW_LEN_UNIT           6
+#define SXE2_RX_DBUF_LEN_UNIT          7
+#define SXE2_RX_DBUF_LEN_MASK          (~0x7F)
+
+#define SXE2_RX_PKTS_TS_TIMEOUT_VAL	200
+
+#define SXE2_RX_VECTOR_OFFLOAD (			 \
+		RTE_ETH_RX_OFFLOAD_CHECKSUM   |		 \
+		RTE_ETH_RX_OFFLOAD_SCTP_CKSUM |		 \
+		RTE_ETH_RX_OFFLOAD_VLAN       |		 \
+		RTE_ETH_RX_OFFLOAD_RSS_HASH   |		 \
+		RTE_ETH_RX_OFFLOAD_TIMESTAMP)
+
+#define SXE2_DEFAULT_RX_FREE_THRESH  32
+#define SXE2_DEFAULT_RX_PTHRESH      8
+#define SXE2_DEFAULT_RX_HTHRESH      8
+#define SXE2_DEFAULT_RX_WTHRESH      0
+
+#define SXE2_DEFAULT_TX_FREE_THRESH  32
+#define SXE2_DEFAULT_TX_PTHRESH      32
+#define SXE2_DEFAULT_TX_HTHRESH      0
+#define SXE2_DEFAULT_TX_WTHRESH      0
+#define SXE2_DEFAULT_TX_RSBIT_THRESH 32
+
+#define SXE2_RX_SEG_NUM          2
+
+#ifdef RTE_LIBRTE_SXE2_16BYTE_RX_DESC
+#define sxe2_rx_desc sxe2_rx_16b_desc
+#else
+#define sxe2_rx_desc sxe2_rx_32b_desc
+#endif
+
+union sxe2_rx_16b_desc {
+	struct {
+		uint64_t pkt_addr;
+		uint64_t hdr_addr;
+	} read;
+	struct {
+		uint8_t rxdid_src;
+		uint8_t mirror;
+		uint16_t l2tag1;
+		uint32_t filter_status;
+
+		uint64_t status_err_ptype_len;
+	} wb;
+};
+
+union sxe2_rx_32b_desc {
+	struct {
+		uint64_t pkt_addr;
+		uint64_t hdr_addr;
+		uint64_t rsvd1;
+		uint64_t rsvd2;
+	} read;
+	struct {
+		uint8_t rxdid_src;
+		uint8_t mirror;
+		uint16_t l2tag1;
+		uint32_t filter_status;
+
+		uint64_t status_err_ptype_len;
+
+		uint32_t status_lrocnt_fdpf_id;
+		uint16_t l2tag2_1st;
+		uint16_t l2tag2_2nd;
+
+		uint8_t acl_pf_id;
+		uint8_t sw_pf_id;
+		uint16_t flow_id;
+
+		uint32_t fd_filter_id;
+
+	} wb;
+	struct {
+		uint8_t rxdid_src_fd_eudpe;
+		uint8_t mirror;
+		uint16_t l2_tag1;
+		uint32_t filter_status;
+
+		uint64_t status_err_ptype_len;
+
+		uint32_t ext_status_ts_low;
+		uint16_t l2tag2_1st;
+		uint16_t l2tag2_2nd;
+
+		uint32_t ts_h;
+		uint32_t fd_filter_id;
+
+	} wb_ts;
+};
+
+enum sxe2_rx_lro_desc_max_num {
+	SXE2_RX_LRO_DESC_MAX_1   = 1,
+	SXE2_RX_LRO_DESC_MAX_4   = 4,
+	SXE2_RX_LRO_DESC_MAX_8   = 8,
+	SXE2_RX_LRO_DESC_MAX_16  = 16,
+	SXE2_RX_LRO_DESC_MAX_32  = 32,
+	SXE2_RX_LRO_DESC_MAX_48  = 48,
+	SXE2_RX_LRO_DESC_MAX_64  = 64,
+	SXE2_RX_LRO_DESC_MAX_NUM = SXE2_RX_LRO_DESC_MAX_64,
+};
+
+enum sxe2_rx_desc_rxdid {
+	SXE2_RX_DESC_RXDID_16B   = 0,
+	SXE2_RX_DESC_RXDID_32B,
+	SXE2_RX_DESC_RXDID_1588,
+	SXE2_RX_DESC_RXDID_FD,
+};
+
+#define SXE2_RX_DESC_RXDID_SHIFT     (0)
+#define SXE2_RX_DESC_RXDID_MASK      (0x7 << SXE2_RX_DESC_RXDID_SHIFT)
+#define SXE2_RX_DESC_RXDID_VAL_GET(rxdid_src) \
+		(((rxdid_src) & SXE2_RX_DESC_RXDID_MASK) >> SXE2_RX_DESC_RXDID_SHIFT)
+
+#define SXE2_RX_DESC_PKT_SRC_SHIFT     (3)
+#define SXE2_RX_DESC_PKT_SRC_MASK      (0x3 << SXE2_RX_DESC_PKT_SRC_SHIFT)
+#define SXE2_RX_DESC_PKT_SRC_VAL_GET(rxdid_src) \
+		(((rxdid_src) & SXE2_RX_DESC_PKT_SRC_MASK) >> SXE2_RX_DESC_PKT_SRC_SHIFT)
+
+#define SXE2_RX_DESC_FD_VLD_SHIFT     (5)
+#define SXE2_RX_DESC_FD_VLD_MASK      (0x1 << SXE2_RX_DESC_FD_VLD_SHIFT)
+#define SXE2_RX_DESC_FD_VLD_VAL_GET(rxdid_src) \
+		(((rxdid_src) & SXE2_RX_DESC_FD_VLD_MASK) >> SXE2_RX_DESC_FD_VLD_SHIFT)
+
+#define SXE2_RX_DESC_EUDPE_SHIFT     (6)
+#define SXE2_RX_DESC_EUDPE_MASK      (0x1 << SXE2_RX_DESC_EUDPE_SHIFT)
+#define SXE2_RX_DESC_EUDPE_VAL_GET(rxdid_src) \
+		(((rxdid_src) & SXE2_RX_DESC_EUDPE_MASK) >> SXE2_RX_DESC_EUDPE_SHIFT)
+
+#define SXE2_RX_DESC_UDP_NET_SHIFT     (7)
+#define SXE2_RX_DESC_UDP_NET_MASK      (0x1 << SXE2_RX_DESC_UDP_NET_SHIFT)
+#define SXE2_RX_DESC_UDP_NET_VAL_GET(rxdid_src) \
+		(((rxdid_src) & SXE2_RX_DESC_UDP_NET_MASK) >> SXE2_RX_DESC_UDP_NET_SHIFT)
+
+#define SXE2_RX_DESC_MIRR_ID_SHIFT   (0)
+#define SXE2_RX_DESC_MIRR_ID_MASK    (0x3F << SXE2_RX_DESC_MIRR_ID_SHIFT)
+#define SXE2_RX_DESC_MIRR_ID_VAL_GET(mirr) \
+		(((mirr) & SXE2_RX_DESC_MIRR_ID_MASK) >> SXE2_RX_DESC_MIRR_ID_SHIFT)
+
+#define SXE2_RX_DESC_MIRR_TYPE_SHIFT   (6)
+#define SXE2_RX_DESC_MIRR_TYPE_MASK    (0x3 << SXE2_RX_DESC_MIRR_TYPE_SHIFT)
+#define SXE2_RX_DESC_MIRR_TYPE_VAL_GET(mirr) \
+		(((mirr) & SXE2_RX_DESC_MIRR_TYPE_MASK) >> SXE2_RX_DESC_MIRR_TYPE_SHIFT)
+
+#define SXE2_RX_DESC_PKT_LEN_SHIFT   (32)
+#define SXE2_RX_DESC_PKT_LEN_MASK    (0x3FFFULL << SXE2_RX_DESC_PKT_LEN_SHIFT)
+#define SXE2_RX_DESC_PKT_LEN_VAL_GET(qw1) \
+		(((qw1) & SXE2_RX_DESC_PKT_LEN_MASK) >> SXE2_RX_DESC_PKT_LEN_SHIFT)
+
+#define SXE2_RX_DESC_HDR_LEN_SHIFT   (46)
+#define SXE2_RX_DESC_HDR_LEN_MASK    (0x7FFULL << SXE2_RX_DESC_HDR_LEN_SHIFT)
+#define SXE2_RX_DESC_HDR_LEN_VAL_GET(qw1) \
+		(((qw1) & SXE2_RX_DESC_HDR_LEN_MASK) >> SXE2_RX_DESC_HDR_LEN_SHIFT)
+
+#define SXE2_RX_DESC_SPH_SHIFT    (57)
+#define SXE2_RX_DESC_SPH_MASK     (0x1ULL << SXE2_RX_DESC_SPH_SHIFT)
+#define SXE2_RX_DESC_SPH_VAL_GET(qw1) \
+		(((qw1) & SXE2_RX_DESC_SPH_MASK) >> SXE2_RX_DESC_SPH_SHIFT)
+
+#define SXE2_RX_DESC_PTYPE_SHIFT    (16)
+#define SXE2_RX_DESC_PTYPE_MASK     (0x3FFULL << SXE2_RX_DESC_PTYPE_SHIFT)
+#define SXE2_RX_DESC_PTYPE_MASK_NO_SHIFT (0x3FFULL)
+#define SXE2_RX_DESC_PTYPE_VAL_GET(qw1) \
+		(((qw1) & SXE2_RX_DESC_PTYPE_MASK) >> SXE2_RX_DESC_PTYPE_SHIFT)
+
+#define SXE2_RX_DESC_FILTER_STATUS_SHIFT   (32)
+#define SXE2_RX_DESC_FILTER_STATUS_MASK    (0xFFFFUL)
+
+#define SXE2_RX_DESC_LROCNT_SHIFT   (0)
+#define SXE2_RX_DESC_LROCNT_MASK    (0xF)
+
+enum sxe2_rx_desc_status_shift {
+	SXE2_RX_DESC_STATUS_DD_SHIFT        = 0,
+	SXE2_RX_DESC_STATUS_EOP_SHIFT       = 1,
+	SXE2_RX_DESC_STATUS_L2TAG1_P_SHIFT  = 2,
+
+	SXE2_RX_DESC_STATUS_L3L4_P_SHIFT    = 3,
+	SXE2_RX_DESC_STATUS_CRCP_SHIFT      = 4,
+	SXE2_RX_DESC_STATUS_SECP_SHIFT      = 5,
+	SXE2_RX_DESC_STATUS_SECTAG_SHIFT    = 6,
+	SXE2_RX_DESC_STATUS_SECE_SHIFT      = 26,
+	SXE2_RX_DESC_STATUS_EXT_UDP_0_SHIFT = 27,
+	SXE2_RX_DESC_STATUS_UMBCAST_SHIFT   = 28,
+	SXE2_RX_DESC_STATUS_PHY_PORT_SHIFT  = 30,
+	SXE2_RX_DESC_STATUS_LPBK_SHIFT      = 59,
+	SXE2_RX_DESC_STATUS_IPV6_EXADD_SHIFT = 60,
+	SXE2_RX_DESC_STATUS_RSS_VLD_SHIFT   = 61,
+	SXE2_RX_DESC_STATUS_ACL_HIT_SHIFT   = 62,
+	SXE2_RX_DESC_STATUS_INT_UDP_0_SHIFT = 63,
+};
+
+#define SXE2_RX_DESC_STATUS_DD_MASK \
+		(0x1ULL << SXE2_RX_DESC_STATUS_DD_SHIFT)
+#define SXE2_RX_DESC_STATUS_EOP_MASK \
+		(0x1ULL << SXE2_RX_DESC_STATUS_EOP_SHIFT)
+#define SXE2_RX_DESC_STATUS_L2TAG1_P_MASK \
+		(0x1ULL << SXE2_RX_DESC_STATUS_L2TAG1_P_SHIFT)
+#define SXE2_RX_DESC_STATUS_L3L4_P_MASK \
+		(0x1ULL << SXE2_RX_DESC_STATUS_L3L4_P_SHIFT)
+#define SXE2_RX_DESC_STATUS_CRCP_MASK \
+		(0x1ULL << SXE2_RX_DESC_STATUS_CRCP_SHIFT)
+#define SXE2_RX_DESC_STATUS_SECP_MASK \
+		(0x1ULL << SXE2_RX_DESC_STATUS_SECP_SHIFT)
+#define SXE2_RX_DESC_STATUS_SECTAG_MASK \
+		(0x1ULL << SXE2_RX_DESC_STATUS_SECTAG_SHIFT)
+#define SXE2_RX_DESC_STATUS_SECE_MASK \
+		(0x1ULL << SXE2_RX_DESC_STATUS_SECE_SHIFT)
+#define SXE2_RX_DESC_STATUS_EXT_UDP_0_MASK \
+		(0x1ULL << SXE2_RX_DESC_STATUS_EXT_UDP_0_SHIFT)
+#define SXE2_RX_DESC_STATUS_UMBCAST_MASK \
+		(0x3ULL << SXE2_RX_DESC_STATUS_UMBCAST_SHIFT)
+#define SXE2_RX_DESC_STATUS_PHY_PORT_MASK \
+		(0x3ULL << SXE2_RX_DESC_STATUS_PHY_PORT_SHIFT)
+#define SXE2_RX_DESC_STATUS_LPBK_MASK \
+		(0x1ULL << SXE2_RX_DESC_STATUS_LPBK_SHIFT)
+#define SXE2_RX_DESC_STATUS_IPV6_EXADD_MASK \
+		(0x1ULL << SXE2_RX_DESC_STATUS_IPV6_EXADD_SHIFT)
+#define SXE2_RX_DESC_STATUS_RSS_VLD_MASK \
+		(0x1ULL << SXE2_RX_DESC_STATUS_RSS_VLD_SHIFT)
+#define SXE2_RX_DESC_STATUS_ACL_HIT_MASK \
+		(0x1ULL << SXE2_RX_DESC_STATUS_ACL_HIT_SHIFT)
+#define SXE2_RX_DESC_STATUS_INT_UDP_0_MASK \
+		(0x1ULL << SXE2_RX_DESC_STATUS_INT_UDP_0_SHIFT)
+
+enum sxe2_rx_desc_umbcast_val {
+	SXE2_RX_DESC_STATUS_UNICAST = 0,
+	SXE2_RX_DESC_STATUS_MULTICAST = 1,
+	SXE2_RX_DESC_STATUS_BROADCAST = 2,
+};
+
+#define SXE2_RX_DESC_STATUS_UMBCAST_VAL_GET(qw1) \
+		(((qw1) & SXE2_RX_DESC_STATUS_UMBCAST_MASK) >> SXE2_RX_DESC_STATUS_UMBCAST_SHIFT)
+
+enum sxe2_rx_desc_error_shift {
+	SXE2_RX_DESC_ERROR_RXE_SHIFT        = 7,
+	SXE2_RX_DESC_ERROR_PKT_ECC_SHIFT    = 8,
+	SXE2_RX_DESC_ERROR_PKT_HBO_SHIFT    = 9,
+
+	SXE2_RX_DESC_ERROR_CSUM_IPE_SHIFT   = 10,
+
+	SXE2_RX_DESC_ERROR_CSUM_L4_SHIFT    = 11,
+
+	SXE2_RX_DESC_ERROR_CSUM_EIP_SHIFT   = 12,
+	SXE2_RX_DESC_ERROR_OVERSIZE_SHIFT   = 13,
+	SXE2_RX_DESC_ERROR_SEC_ERR_SHIFT    = 14,
+};
+
+#define SXE2_RX_DESC_ERROR_RXE_MASK \
+		(0x1ULL << SXE2_RX_DESC_ERROR_RXE_SHIFT)
+#define SXE2_RX_DESC_ERROR_PKT_ECC_MASK \
+		(0x1ULL << SXE2_RX_DESC_ERROR_PKT_ECC_SHIFT)
+#define SXE2_RX_DESC_ERROR_PKT_HBO_MASK \
+		(0x1ULL << SXE2_RX_DESC_ERROR_PKT_HBO_SHIFT)
+#define SXE2_RX_DESC_ERROR_CSUM_IPE_MASK \
+		(0x1ULL << SXE2_RX_DESC_ERROR_CSUM_IPE_SHIFT)
+#define SXE2_RX_DESC_ERROR_CSUM_L4_MASK \
+		(0x1ULL << SXE2_RX_DESC_ERROR_CSUM_L4_SHIFT)
+#define SXE2_RX_DESC_ERROR_CSUM_EIP_MASK \
+		(0x1ULL << SXE2_RX_DESC_ERROR_CSUM_EIP_SHIFT)
+#define SXE2_RX_DESC_ERROR_OVERSIZE_MASK \
+		(0x1ULL << SXE2_RX_DESC_ERROR_OVERSIZE_SHIFT)
+
+#define SXE2_RX_DESC_QW1_ERRORS_MASK \
+		(SXE2_RX_DESC_ERROR_CSUM_IPE_MASK | \
+			SXE2_RX_DESC_ERROR_CSUM_L4_MASK | \
+			SXE2_RX_DESC_ERROR_CSUM_EIP_MASK)
+
+enum sxe2_rx_desc_ext_status_shift {
+	SXE2_RX_DESC_EXT_STATUS_L2TAG2P_SHIFT	= 4,
+	SXE2_RX_DESC_EXT_STATUS_RSVD	= 5,
+	SXE2_RX_DESC_EXT_STATUS_PKT_REE_SHIFT	= 7,
+	SXE2_RX_DESC_EXT_STATUS_ROCE_SHIFT	= 13,
+};
+#define SXE2_RX_DESC_EXT_STATUS_L2TAG2P_MASK \
+			(0x1ULL << SXE2_RX_DESC_EXT_STATUS_L2TAG2P_SHIFT)
+#define SXE2_RX_DESC_EXT_STATUS_PKT_REE_MASK \
+			(0x3FULL << SXE2_RX_DESC_EXT_STATUS_PKT_REE_SHIFT)
+#define SXE2_RX_DESC_EXT_STATUS_ROCE_MASK \
+			(0x1ULL << SXE2_RX_DESC_EXT_STATUS_ROCE_SHIFT)
+
+enum sxe2_rx_desc_ipsec_shift {
+	SXE2_RX_DESC_IPSEC_PKT_S             = 21,
+	SXE2_RX_DESC_IPSEC_ENGINE_S          = 22,
+	SXE2_RX_DESC_IPSEC_MODE_S            = 23,
+	SXE2_RX_DESC_IPSEC_STATUS_S          = 24,
+
+	SXE2_RX_DESC_IPSEC_LAST
+};
+
+enum sxe2_rx_desc_ipsec_status {
+	SXE2_RX_DESC_IPSEC_STATUS_SUCCESS           = 0x0,
+	SXE2_RX_DESC_IPSEC_STATUS_PKG_OVER_2K       = 0x1,
+	SXE2_RX_DESC_IPSEC_STATUS_SPI_IP_INVALID    = 0x2,
+	SXE2_RX_DESC_IPSEC_STATUS_SA_INVALID        = 0x3,
+	SXE2_RX_DESC_IPSEC_STATUS_NOT_ALIGN         = 0x4,
+	SXE2_RX_DESC_IPSEC_STATUS_ICV_ERROR         = 0x5,
+	SXE2_RX_DESC_IPSEC_STATUS_BY_PASSH          = 0x6,
+	SXE2_RX_DESC_IPSEC_STATUS_MAC_BY_PASSH      = 0x7,
+};
+
+#define SXE2_RX_DESC_IPSEC_PKT_MASK \
+		(0x1ULL << SXE2_RX_DESC_IPSEC_PKT_S)
+#define SXE2_RX_DESC_IPSEC_STATUS_MASK		(0x7)
+#define SXE2_RX_DESC_IPSEC_STATUS_VAL_GET(qw2) \
+		(((qw2) >> SXE2_RX_DESC_IPSEC_STATUS_S) & \
+		SXE2_RX_DESC_IPSEC_STATUS_MASK)
+
+#define SXE2_RX_ERR_BITS 0x3f
+
+#define SXE2_RX_QUEUE_CHECK_INTERVAL_NUM 4
+
+#define SXE2_RX_DESC_RING_ALIGN	\
+	(SXE2_ALIGN / sizeof(union sxe2_rx_desc))
+
+#define SXE2_RX_RING_SIZE \
+	((SXE2_MAX_RING_DESC + SXE2_RX_PKTS_BURST_BATCH_NUM) * sizeof(union sxe2_rx_desc))
+
+#define SXE2_RX_MAX_DATA_BUF_SIZE	(16 * 1024 - 128)
+
+#endif /* __SXE2_TXRX_COMMON_H__ */
diff --git a/drivers/net/sxe2/sxe2_txrx_poll.h b/drivers/net/sxe2/sxe2_txrx_poll.h
new file mode 100644
index 0000000000..f45e33f9b7
--- /dev/null
+++ b/drivers/net/sxe2/sxe2_txrx_poll.h
@@ -0,0 +1,16 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (C), 2025, Wuxi Stars Micro System Technologies Co., Ltd.
+ */
+
+#ifndef SXE2_TXRX_POLL_H
+#define SXE2_TXRX_POLL_H
+
+#include "sxe2_queue.h"
+
+uint16_t sxe2_tx_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts);
+
+uint16_t sxe2_rx_pkts_scattered(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts);
+
+uint16_t sxe2_rx_pkts_scattered_split(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts);
+
+#endif /* __SXE2_TXRX_POLL_H__ */
diff --git a/drivers/net/sxe2/sxe2_vsi.c b/drivers/net/sxe2/sxe2_vsi.c
new file mode 100644
index 0000000000..baaa20c02e
--- /dev/null
+++ b/drivers/net/sxe2/sxe2_vsi.c
@@ -0,0 +1,214 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (C), 2025, Wuxi Stars Micro System Technologies Co., Ltd.
+ */
+
+#include <rte_os.h>
+#include <rte_tailq.h>
+#include <rte_malloc.h>
+#include "sxe2_ethdev.h"
+#include "sxe2_vsi.h"
+#include "sxe2_common_log.h"
+#include "sxe2_cmd_chnl.h"
+
+void sxe2_sw_vsi_ctx_hw_cap_set(struct sxe2_adapter *adapter,
+		struct sxe2_drv_vsi_caps *vsi_caps)
+{
+	adapter->vsi_ctxt.dpdk_vsi_id = vsi_caps->dpdk_vsi_id;
+	adapter->vsi_ctxt.kernel_vsi_id = vsi_caps->kernel_vsi_id;
+	adapter->vsi_ctxt.vsi_type = vsi_caps->vsi_type;
+}
+
+static struct sxe2_vsi *
+sxe2_vsi_node_alloc(struct sxe2_adapter *adapter, uint16_t vsi_id, uint16_t vsi_type)
+{
+	struct sxe2_vsi *vsi = NULL;
+	vsi = rte_zmalloc("sxe2_vsi", sizeof(*vsi), 0);
+	if (vsi == NULL) {
+		PMD_LOG_ERR(DRV, "Failed to malloc vf vsi struct.");
+		goto l_end;
+	}
+	vsi->adapter = adapter;
+
+	vsi->vsi_id = vsi_id;
+	vsi->vsi_type = vsi_type;
+
+l_end:
+	return vsi;
+}
+
+static void sxe2_vsi_queues_num_set(struct sxe2_vsi *vsi, uint16_t num_queues, uint16_t base_idx)
+{
+	vsi->txqs.q_cnt = num_queues;
+	vsi->rxqs.q_cnt = num_queues;
+	vsi->txqs.base_idx_in_func = base_idx;
+	vsi->rxqs.base_idx_in_func = base_idx;
+}
+
+static void sxe2_vsi_queues_cfg(struct sxe2_vsi *vsi)
+{
+	vsi->txqs.depth = vsi->txqs.depth ? : SXE2_DFLT_NUM_TX_DESC;
+	vsi->rxqs.depth = vsi->rxqs.depth ? : SXE2_DFLT_NUM_RX_DESC;
+
+	PMD_LOG_INFO(DRV, "vsi:%u queue_cnt:%u txq_depth:%u rxq_depth:%u.",
+			vsi->vsi_id, vsi->txqs.q_cnt,
+			vsi->txqs.depth, vsi->rxqs.depth);
+}
+
+static void sxe2_vsi_irqs_cfg(struct sxe2_vsi *vsi, uint16_t num_irqs, uint16_t base_idx)
+{
+	vsi->irqs.avail_cnt = num_irqs;
+	vsi->irqs.base_idx_in_pf = base_idx;
+}
+
+static struct sxe2_vsi *sxe2_vsi_node_create(struct sxe2_adapter *adapter,
+					     uint16_t vsi_id,
+					     uint16_t vsi_type)
+{
+	struct sxe2_vsi *vsi = NULL;
+	uint16_t num_queues = 0;
+	uint16_t queue_base_idx = 0;
+	uint16_t num_irqs = 0;
+	uint16_t irq_base_idx = 0;
+
+	vsi = sxe2_vsi_node_alloc(adapter, vsi_id, vsi_type);
+	if (vsi == NULL)
+		goto l_end;
+
+	if (vsi_type == SXE2_VSI_T_DPDK_PF ||
+			vsi_type == SXE2_VSI_T_DPDK_VF) {
+		num_queues = adapter->q_ctxt.qp_cnt_assign;
+		queue_base_idx = adapter->q_ctxt.base_idx_in_pf;
+
+		num_irqs = adapter->irq_ctxt.max_cnt_hw;
+		irq_base_idx = adapter->irq_ctxt.base_idx_in_func;
+	} else if (vsi_type == SXE2_VSI_T_DPDK_ESW) {
+		num_queues = 1;
+		num_irqs = 1;
+	}
+
+	sxe2_vsi_queues_num_set(vsi, num_queues, queue_base_idx);
+
+	sxe2_vsi_queues_cfg(vsi);
+
+	sxe2_vsi_irqs_cfg(vsi, num_irqs, irq_base_idx);
+
+l_end:
+	return vsi;
+}
+
+static void sxe2_vsi_node_free(struct sxe2_vsi *vsi)
+{
+	if (!vsi)
+		return;
+
+	rte_free(vsi);
+	vsi = NULL;
+}
+
+static int32_t sxe2_vsi_destroy(struct sxe2_adapter *adapter, struct sxe2_vsi *vsi)
+{
+	int32_t ret = 0;
+
+	if (vsi == NULL) {
+		PMD_LOG_INFO(DRV, "vsi is not created, no need to destroy.");
+		goto l_end;
+	}
+
+	if (vsi->vsi_type != SXE2_VSI_T_DPDK_ESW) {
+		ret = sxe2_drv_vsi_del(adapter, vsi);
+		if (ret) {
+			PMD_LOG_ERR(DRV, "Failed to del vsi from fw, ret=%d", ret);
+			if (ret == -EPERM)
+				goto l_free;
+			goto l_end;
+		}
+	}
+
+l_free:
+	rte_free(vsi);
+	vsi = NULL;
+
+	PMD_LOG_DEBUG(DRV, "vsi destroyed.");
+l_end:
+	return ret;
+}
+
+static int32_t sxe2_main_vsi_create(struct sxe2_adapter *adapter)
+{
+	int32_t ret = 0;
+	uint16_t vsi_id = adapter->vsi_ctxt.dpdk_vsi_id;
+	uint16_t vsi_type = adapter->vsi_ctxt.vsi_type;
+	bool is_reused = (vsi_id != SXE2_INVALID_VSI_ID);
+
+	PMD_INIT_FUNC_TRACE();
+
+	if (!is_reused)
+		vsi_type = SXE2_VSI_T_DPDK_PF;
+	else
+		PMD_LOG_INFO(DRV, "Reusing existing HW vsi_id:%u", vsi_id);
+
+	adapter->vsi_ctxt.main_vsi = sxe2_vsi_node_create(adapter, vsi_id, vsi_type);
+	if (adapter->vsi_ctxt.main_vsi == NULL) {
+		PMD_LOG_ERR(DRV, "Failed to create vsi struct, ret=%d", ret);
+		ret = -ENOMEM;
+		goto l_end;
+	}
+
+	if (!is_reused) {
+		ret = sxe2_drv_vsi_add(adapter, adapter->vsi_ctxt.main_vsi);
+		if (ret) {
+			PMD_LOG_ERR(DRV, "Failed to config vsi to fw, ret=%d", ret);
+			goto l_free_vsi;
+		}
+
+		adapter->vsi_ctxt.dpdk_vsi_id = adapter->vsi_ctxt.main_vsi->vsi_id;
+		PMD_LOG_DEBUG(DRV, "Successfully created and synced new VSI");
+	}
+
+	goto l_end;
+
+l_free_vsi:
+	sxe2_vsi_node_free(adapter->vsi_ctxt.main_vsi);
+	adapter->vsi_ctxt.main_vsi = NULL;
+l_end:
+	return ret;
+}
+
+int32_t sxe2_vsi_init(struct rte_eth_dev *dev)
+{
+	struct sxe2_adapter *adapter = SXE2_DEV_PRIVATE_TO_ADAPTER(dev);
+	int32_t ret = 0;
+
+	PMD_INIT_FUNC_TRACE();
+
+	ret = sxe2_main_vsi_create(adapter);
+	if (ret) {
+		PMD_LOG_ERR(DRV, "Failed to create main VSI, ret=%d", ret);
+		goto l_end;
+	}
+
+l_end:
+	return ret;
+}
+
+void sxe2_vsi_uninit(struct rte_eth_dev *dev)
+{
+	struct sxe2_adapter *adapter = SXE2_DEV_PRIVATE_TO_ADAPTER(dev);
+	int32_t ret;
+
+	if (adapter->vsi_ctxt.main_vsi == NULL) {
+		PMD_LOG_INFO(DRV, "vsi is not created, no need to destroy.");
+		goto l_end;
+	}
+
+	ret = sxe2_vsi_destroy(adapter, adapter->vsi_ctxt.main_vsi);
+	if (ret) {
+		PMD_LOG_ERR(DRV, "Failed to del vsi from fw, ret=%d", ret);
+		goto l_end;
+	}
+
+	PMD_LOG_DEBUG(DRV, "vsi destroyed.");
+
+l_end:
+	return;
+}
diff --git a/drivers/net/sxe2/sxe2_vsi.h b/drivers/net/sxe2/sxe2_vsi.h
new file mode 100644
index 0000000000..e712f738f1
--- /dev/null
+++ b/drivers/net/sxe2/sxe2_vsi.h
@@ -0,0 +1,204 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (C), 2025, Wuxi Stars Micro System Technologies Co., Ltd.
+ */
+
+#ifndef __sxe2_VSI_H__
+#define __sxe2_VSI_H__
+#include <rte_os.h>
+#include "sxe2_drv_cmd.h"
+
+#define SXE2_MAX_BOND_MEMBER_CNT   4
+
+enum sxe2_drv_type {
+	SXE2_MAX_DRV_TYPE_DPDK = 0,
+	SXE2_MAX_DRV_TYPE_KERNEL,
+	SXE2_MAX_DRV_TYPE_CNT,
+};
+
+#define SXE2_MAX_USER_PRIORITY        (8)
+
+#define SXE2_DFLT_NUM_RX_DESC 512
+#define SXE2_DFLT_NUM_TX_DESC 512
+
+#define SXE2_DFLT_Q_NUM_OTHER_VSI 1
+#define SXE2_INVALID_VSI_ID    0xFFFF
+
+struct sxe2_adapter;
+struct sxe2_drv_vsi_caps;
+struct rte_eth_dev;
+
+enum sxe2_vsi_type {
+	SXE2_VSI_T_PF = 0,
+	SXE2_VSI_T_VF,
+	SXE2_VSI_T_CTRL,
+	SXE2_VSI_T_LB,
+	SXE2_VSI_T_MACVLAN,
+	SXE2_VSI_T_ESW,
+	SXE2_VSI_T_RDMA,
+	SXE2_VSI_T_DPDK_PF,
+	SXE2_VSI_T_DPDK_VF,
+	SXE2_VSI_T_DPDK_ESW,
+	SXE2_VSI_T_NR,
+};
+
+struct sxe2_queue_info {
+	uint16_t base_idx_in_nic;
+	uint16_t base_idx_in_func;
+	uint16_t q_cnt;
+	uint16_t depth;
+	uint16_t rx_buf_len;
+	uint16_t max_frame_len;
+	struct sxe2_queue **queues;
+};
+
+struct sxe2_vsi_irqs {
+	uint16_t avail_cnt;
+	uint16_t used_cnt;
+	uint16_t base_idx_in_pf;
+};
+
+enum {
+	sxe2_VSI_DOWN = 0,
+	sxe2_VSI_CLOSE,
+	sxe2_VSI_DISABLE,
+	sxe2_VSI_MAX,
+};
+
+struct sxe2_stats {
+	uint64_t ipackets;
+
+	uint64_t opackets;
+
+	uint64_t ibytes;
+
+	uint64_t obytes;
+
+	uint64_t ierrors;
+
+	uint64_t imissed;
+
+	uint64_t rx_out_of_buffer;
+	uint64_t rx_qblock_drop;
+
+	uint64_t tx_frame_good;
+	uint64_t rx_frame_good;
+	uint64_t rx_crc_errors;
+	uint64_t tx_bytes_good;
+	uint64_t rx_bytes_good;
+	uint64_t tx_multicast_good;
+	uint64_t tx_broadcast_good;
+	uint64_t rx_multicast_good;
+	uint64_t rx_broadcast_good;
+	uint64_t rx_len_errors;
+	uint64_t rx_out_of_range_errors;
+	uint64_t rx_oversize_pkts_phy;
+	uint64_t rx_symbol_err;
+	uint64_t rx_pause_frame;
+	uint64_t tx_pause_frame;
+
+	uint64_t rx_discards_phy;
+	uint64_t rx_discards_ips_phy;
+
+	uint64_t tx_dropped_link_down;
+	uint64_t rx_undersize_good;
+	uint64_t rx_runt_error;
+	uint64_t tx_bytes_good_bad;
+	uint64_t tx_frame_good_bad;
+	uint64_t rx_jabbers;
+	uint64_t rx_size_64;
+	uint64_t rx_size_65_127;
+	uint64_t rx_size_128_255;
+	uint64_t rx_size_256_511;
+	uint64_t rx_size_512_1023;
+	uint64_t rx_size_1024_1522;
+	uint64_t rx_size_1523_max;
+	uint64_t rx_pcs_symbol_err_phy;
+	uint64_t rx_corrected_bits_phy;
+	uint64_t rx_err_lane_0_phy;
+	uint64_t rx_err_lane_1_phy;
+	uint64_t rx_err_lane_2_phy;
+	uint64_t rx_err_lane_3_phy;
+
+	uint64_t rx_prio_buf_discard[SXE2_MAX_USER_PRIORITY];
+	uint64_t rx_illegal_bytes;
+	uint64_t rx_oversize_good;
+	uint64_t tx_unicast;
+	uint64_t tx_broadcast;
+	uint64_t tx_multicast;
+	uint64_t tx_vlan_packet_good;
+	uint64_t tx_size_64;
+	uint64_t tx_size_65_127;
+	uint64_t tx_size_128_255;
+	uint64_t tx_size_256_511;
+	uint64_t tx_size_512_1023;
+	uint64_t tx_size_1024_1522;
+	uint64_t tx_size_1523_max;
+	uint64_t tx_underflow_error;
+	uint64_t rx_byte_good_bad;
+	uint64_t rx_frame_good_bad;
+	uint64_t rx_unicast_good;
+	uint64_t rx_vlan_packets;
+
+	uint64_t prio_xoff_rx[SXE2_MAX_USER_PRIORITY];
+	uint64_t prio_xon_rx[SXE2_MAX_USER_PRIORITY];
+	uint64_t prio_xon_tx[SXE2_MAX_USER_PRIORITY];
+	uint64_t prio_xoff_tx[SXE2_MAX_USER_PRIORITY];
+	uint64_t prio_xon_2_xoff[SXE2_MAX_USER_PRIORITY];
+
+	uint64_t rx_vsi_unicast_packets;
+	uint64_t rx_vsi_bytes;
+	uint64_t tx_vsi_unicast_packets;
+	uint64_t tx_vsi_bytes;
+	uint64_t rx_vsi_multicast_packets;
+	uint64_t tx_vsi_multicast_packets;
+	uint64_t rx_vsi_broadcast_packets;
+	uint64_t tx_vsi_broadcast_packets;
+
+	uint64_t rx_sw_unicast_packets;
+	uint64_t rx_sw_broadcast_packets;
+	uint64_t rx_sw_multicast_packets;
+	uint64_t rx_sw_drop_packets;
+	uint64_t rx_sw_drop_bytes;
+};
+
+struct sxe2_vsi_stats {
+	struct sxe2_stats        vsi_sw_stats;
+	struct sxe2_stats        vsi_sw_stats_prev;
+	struct sxe2_stats        vsi_hw_stats;
+	struct sxe2_stats        stats;
+};
+
+struct sxe2_vsi {
+	TAILQ_ENTRY(sxe2_vsi) next;
+	struct sxe2_adapter *adapter;
+	uint16_t vsi_id;
+	uint16_t vsi_type;
+	struct sxe2_vsi_irqs irqs;
+	struct sxe2_queue_info txqs;
+	struct sxe2_queue_info rxqs;
+	uint16_t budget;
+	struct sxe2_vsi_stats vsi_stats;
+};
+
+TAILQ_HEAD(sxe2_vsi_list_head, sxe2_vsi);
+
+struct sxe2_vsi_context {
+	uint16_t func_id;
+	uint16_t dpdk_vsi_id;
+	uint16_t kernel_vsi_id;
+	uint16_t vsi_type;
+
+	uint16_t bond_member_kernel_vsi_id[SXE2_MAX_BOND_MEMBER_CNT];
+	uint16_t bond_member_dpdk_vsi_id[SXE2_MAX_BOND_MEMBER_CNT];
+
+	struct sxe2_vsi *main_vsi;
+};
+
+void sxe2_sw_vsi_ctx_hw_cap_set(struct sxe2_adapter *adapter,
+		struct sxe2_drv_vsi_caps *vsi_caps);
+
+int32_t sxe2_vsi_init(struct rte_eth_dev *dev);
+
+void sxe2_vsi_uninit(struct rte_eth_dev *dev);
+
+#endif /* __SXE2_VSI_H__ */
-- 
2.47.3


^ permalink raw reply related

* [PATCH v19 06/11] drivers: support PCI BAR mapping
From: liujie5 @ 2026-05-20  2:18 UTC (permalink / raw)
  To: stephen; +Cc: dev, Jie Liu
In-Reply-To: <20260520021809.4019054-1-liujie5@linkdatatechnology.com>

From: Jie Liu <liujie5@linkdatatechnology.com>

Implement PCI BAR (Base Address Register) mapping and unmapping
logic to enable MMIO (Memory Mapped I/O) access to hardware
registers.

The driver retrieves the BAR0 virtual address from the PCI resource
during the probing phase. This mapping is used for subsequent
register-level operations. Proper cleanup is implemented in the
device close path.

Signed-off-by: Jie Liu <liujie5@linkdatatechnology.com>
---
 drivers/common/sxe2/sxe2_ioctl_chnl.c |  34 +++
 drivers/net/sxe2/sxe2_ethdev.c        | 326 +++++++++++++++++++++++++-
 drivers/net/sxe2/sxe2_ethdev.h        |  18 ++
 3 files changed, 375 insertions(+), 3 deletions(-)

diff --git a/drivers/common/sxe2/sxe2_ioctl_chnl.c b/drivers/common/sxe2/sxe2_ioctl_chnl.c
index 36de2b91d8..eb1c4cabc7 100644
--- a/drivers/common/sxe2/sxe2_ioctl_chnl.c
+++ b/drivers/common/sxe2/sxe2_ioctl_chnl.c
@@ -159,6 +159,40 @@ sxe2_drv_dev_handshake(struct sxe2_common_device *cdev)
 	return ret;
 }
 
+RTE_EXPORT_INTERNAL_SYMBOL(sxe2_drv_dev_mmap)
+void
+*sxe2_drv_dev_mmap(struct sxe2_common_device *cdev, uint8_t bar_idx, uint64_t len, uint64_t offset)
+{
+	int32_t cmd_fd = 0;
+	void *virt = NULL;
+
+	if (cdev->config.kernel_reset) {
+		PMD_LOG_WARN(COM, "kernel reset, need restart app.");
+		goto l_err;
+	}
+
+	cmd_fd = SXE2_CDEV_TO_CMD_FD(cdev);
+	if (cmd_fd < 0) {
+		PMD_LOG_ERR(COM, "Failed to exec cmd, fd=%d", cmd_fd);
+		goto l_err;
+	}
+
+	PMD_LOG_DEBUG(COM, "fd=%d, bar idx=%d, len=0x%zx, src=0x%"PRIx64", offset=0x%"PRIx64"",
+		bar_idx, cmd_fd, len, offset, SXE2_COM_PCI_OFFSET_GEN(bar_idx, offset));
+
+	virt = mmap(NULL, len, PROT_READ | PROT_WRITE,
+		MAP_SHARED, cmd_fd, SXE2_COM_PCI_OFFSET_GEN(bar_idx, offset));
+	if (virt == MAP_FAILED) {
+		PMD_LOG_ERR(COM, "Failed mmap, cmd_fd=%d, len=0x%zx, offset=0x%"PRIx64", err:%s",
+			cmd_fd, len, offset, strerror(errno));
+		goto l_err;
+	}
+
+	return virt;
+l_err:
+	return NULL;
+}
+
 RTE_EXPORT_INTERNAL_SYMBOL(sxe2_drv_dev_munmap)
 int32_t
 sxe2_drv_dev_munmap(struct sxe2_common_device *cdev, void *virt, uint64_t len)
diff --git a/drivers/net/sxe2/sxe2_ethdev.c b/drivers/net/sxe2/sxe2_ethdev.c
index f0bdda38a7..204add9c98 100644
--- a/drivers/net/sxe2/sxe2_ethdev.c
+++ b/drivers/net/sxe2/sxe2_ethdev.c
@@ -54,6 +54,27 @@ static const struct rte_pci_id pci_id_sxe2_tbl[] = {
 	{ .vendor_id = 0, },
 };
 
+static struct sxe2_pci_map_addr_info sxe2_net_map_addr_info_pf[SXE2_PCI_MAP_RES_MAX_COUNT] = {
+	[SXE2_PCI_MAP_RES_INVALID] = {.addr_base = 0,
+				      .bar_idx = 0,
+				      .reg_width = 0},
+	[SXE2_PCI_MAP_RES_DOORBELL_TX] = {.addr_base = SXE2_TXQ_LEGACY_DBLL(0),
+				      .bar_idx = 0,
+				      .reg_width = 4},
+	[SXE2_PCI_MAP_RES_DOORBELL_RX_TAIL] = {.addr_base = SXE2_RXQ_TAIL(0),
+				      .bar_idx = 0,
+				      .reg_width = 4},
+	[SXE2_PCI_MAP_RES_IRQ_DYN] = {.addr_base = SXE2_VF_DYN_CTL(0),
+				      .bar_idx = 0,
+				      .reg_width = 4},
+	[SXE2_PCI_MAP_RES_IRQ_ITR] = {.addr_base = SXE2_VF_INT_ITR(0, 0),
+				      .bar_idx = 0,
+				      .reg_width = 4},
+	[SXE2_PCI_MAP_RES_IRQ_MSIX] = {.addr_base = SXE2_BAR4_MSIX_CTL(0),
+				      .bar_idx = 4,
+				      .reg_width = 10},
+};
+
 static int32_t sxe2_dev_configure(struct rte_eth_dev *dev)
 {
 	int32_t ret = 0;
@@ -151,6 +172,7 @@ static int32_t sxe2_dev_close(struct rte_eth_dev *dev)
 	(void)sxe2_dev_stop(dev);
 
 	sxe2_vsi_uninit(dev);
+	sxe2_dev_pci_map_uinit(dev);
 
 	return 0;
 }
@@ -287,6 +309,31 @@ static const struct eth_dev_ops sxe2_eth_dev_ops = {
 	.dev_infos_get              = sxe2_dev_infos_get,
 };
 
+struct sxe2_pci_map_bar_info *sxe2_dev_get_bar_info(struct sxe2_adapter *adapter,
+		enum sxe2_pci_map_resource res_type)
+{
+	struct sxe2_pci_map_context *map_ctxt = &adapter->map_ctxt;
+	struct sxe2_pci_map_bar_info *bar_info = NULL;
+	uint8_t bar_idx = SXE2_PCI_MAP_BAR_INVALID;
+	uint8_t i;
+
+	bar_idx = map_ctxt->addr_info[res_type].bar_idx;
+	if (bar_idx == SXE2_PCI_MAP_BAR_INVALID) {
+		PMD_DEV_LOG_ERR(adapter, INIT, "Invalid bar index with resource type %d", res_type);
+		goto l_end;
+	}
+
+	for (i = 0; i < map_ctxt->bar_cnt; i++) {
+		if (bar_idx == map_ctxt->bar_info[i].bar_idx) {
+			bar_info = &map_ctxt->bar_info[i];
+			break;
+		}
+	}
+
+l_end:
+	return bar_info;
+}
+
 static void sxe2_drv_dev_caps_set(struct sxe2_adapter *adapter,
 			struct sxe2_drv_dev_caps_resp *dev_caps)
 {
@@ -354,6 +401,69 @@ static int32_t sxe2_dev_caps_get(struct sxe2_adapter *adapter)
 	return ret;
 }
 
+int32_t sxe2_dev_pci_seg_map(struct sxe2_adapter *adapter,
+		enum sxe2_pci_map_resource res_type, uint64_t org_len, uint64_t org_offset)
+{
+	struct sxe2_pci_map_bar_info *bar_info = NULL;
+	struct sxe2_pci_map_segment_info *seg_info = NULL;
+	void *map_addr = NULL;
+	int32_t ret = 0;
+	size_t page_size = 0;
+	size_t aligned_len = 0;
+	size_t page_inner_offset = 0;
+	off_t aligned_offset = 0;
+	uint8_t i = 0;
+
+	if (org_len == 0) {
+		PMD_DEV_LOG_ERR(adapter, INIT, "Invalid length, ori_len = 0");
+		ret = -EFAULT;
+		goto l_end;
+	}
+
+	bar_info = sxe2_dev_get_bar_info(adapter, res_type);
+	if (!bar_info) {
+		PMD_LOG_ERR(INIT, "Failed to get bar info, res_type=[%d]", res_type);
+		ret = -EFAULT;
+		goto l_end;
+	}
+	seg_info = bar_info->seg_info;
+
+	page_size = rte_mem_page_size();
+
+	aligned_offset = RTE_ALIGN_FLOOR(org_offset, page_size);
+	page_inner_offset = org_offset - aligned_offset;
+	aligned_len = RTE_ALIGN(page_inner_offset + org_len, page_size);
+
+	map_addr = sxe2_drv_dev_mmap(adapter->cdev, bar_info->bar_idx,
+				     aligned_len, aligned_offset);
+	if (!map_addr) {
+		PMD_LOG_ERR(INIT, "Failed to mmap BAR space, type=%d, len=%" PRIu64
+			    ", offset=%" PRIu64 ", page_size=%zu",
+			    res_type, org_len, org_offset, page_size);
+		ret = -EFAULT;
+		goto l_end;
+	}
+
+	for (i = 0; i < bar_info->map_cnt; i++) {
+		if (seg_info[i].type != SXE2_PCI_MAP_RES_INVALID)
+			continue;
+		seg_info[i].type = res_type;
+		seg_info[i].addr = map_addr;
+		seg_info[i].page_inner_offset = page_inner_offset;
+		seg_info[i].len = aligned_len;
+		break;
+	}
+	if (i == bar_info->map_cnt) {
+		PMD_LOG_ERR(INIT, "No memory to save resource, res_type=%d", res_type);
+		ret = -ENOMEM;
+		sxe2_drv_dev_munmap(adapter->cdev, map_addr, aligned_len);
+		goto l_end;
+	}
+
+l_end:
+	return ret;
+}
+
 static int32_t sxe2_hw_init(struct rte_eth_dev *dev)
 {
 	struct sxe2_adapter *adapter = SXE2_DEV_PRIVATE_TO_ADAPTER(dev);
@@ -368,6 +478,55 @@ static int32_t sxe2_hw_init(struct rte_eth_dev *dev)
 	return ret;
 }
 
+int32_t sxe2_dev_pci_res_seg_map(struct sxe2_adapter *adapter, uint32_t res_type,
+				 uint32_t item_cnt, uint32_t item_base)
+{
+	struct sxe2_pci_map_addr_info *addr_info = NULL;
+	int32_t ret = 0;
+
+	addr_info = &adapter->map_ctxt.addr_info[res_type];
+	if (!addr_info || addr_info->bar_idx == SXE2_PCI_MAP_BAR_INVALID) {
+		PMD_DEV_LOG_ERR(adapter, INIT, "Invalid bar index with resource type %d", res_type);
+		ret = -EFAULT;
+		goto l_end;
+	}
+
+	ret = sxe2_dev_pci_seg_map(adapter, res_type, item_cnt * addr_info->reg_width,
+			addr_info->addr_base + item_base * addr_info->reg_width);
+	if (ret != 0) {
+		PMD_DEV_LOG_ERR(adapter, INIT, "Failed to map resource, res_type=%d", res_type);
+		goto l_end;
+	}
+l_end:
+	return ret;
+}
+
+void sxe2_dev_pci_seg_unmap(struct sxe2_adapter *adapter, uint32_t res_type)
+{
+	struct sxe2_pci_map_bar_info *bar_info = NULL;
+	struct sxe2_pci_map_segment_info *seg_info = NULL;
+	uint32_t i = 0;
+
+	bar_info = sxe2_dev_get_bar_info(adapter, res_type);
+	if (bar_info == NULL) {
+		PMD_DEV_LOG_WARN(adapter, INIT, "Failed to get bar info, res_type=[%d]", res_type);
+		goto l_end;
+	}
+	seg_info = bar_info->seg_info;
+
+	for (i = 0; i < bar_info->map_cnt; i++) {
+		if (res_type == seg_info[i].type) {
+			(void)sxe2_drv_dev_munmap(adapter->cdev, seg_info[i].addr,
+						  seg_info[i].len);
+			memset(&seg_info[i], 0, sizeof(struct sxe2_pci_map_segment_info));
+			break;
+		}
+	}
+
+l_end:
+	return;
+}
+
 static int32_t sxe2_dev_info_init(struct rte_eth_dev *dev)
 {
 	struct sxe2_adapter *adapter =
@@ -408,6 +567,157 @@ static int32_t sxe2_dev_info_init(struct rte_eth_dev *dev)
 	return ret;
 }
 
+int32_t sxe2_dev_pci_map_init(struct rte_eth_dev *dev)
+{
+	struct sxe2_adapter *adapter  = SXE2_DEV_PRIVATE_TO_ADAPTER(dev);
+	struct rte_pci_device *pci_dev = RTE_DEV_TO_PCI(dev->device);
+	struct sxe2_pci_map_context *map_ctxt = &adapter->map_ctxt;
+	struct sxe2_pci_map_bar_info *bar_info = NULL;
+	struct sxe2_pci_map_segment_info *seg_info = NULL;
+	uint16_t txq_cnt = adapter->q_ctxt.qp_cnt_assign;
+	uint16_t txq_base = adapter->q_ctxt.base_idx_in_pf;
+	uint16_t rxq_cnt = adapter->q_ctxt.qp_cnt_assign;
+	uint16_t irq_cnt = adapter->irq_ctxt.max_cnt_hw;
+	uint16_t irq_base = adapter->irq_ctxt.base_idx_in_func;
+	uint16_t rxq_base = adapter->q_ctxt.base_idx_in_pf;
+	int32_t ret = 0;
+
+	PMD_INIT_FUNC_TRACE();
+
+	adapter->dev_info.dev_data = dev->data;
+
+	if (!pci_dev->mem_resource[0].phys_addr) {
+		PMD_LOG_ERR(INIT, "Physical address not scanned");
+		ret = -ENXIO;
+		goto l_end;
+	}
+
+	map_ctxt->bar_cnt = 2;
+
+	bar_info = rte_zmalloc(NULL, sizeof(*bar_info) * map_ctxt->bar_cnt, 0);
+	if (!bar_info) {
+		PMD_LOG_ERR(INIT, "Failed to alloc bar_info");
+		ret = -ENOMEM;
+		goto l_end;
+	}
+	bar_info[0].bar_idx = 0;
+	bar_info[0].map_cnt = SXE2_PCI_MAP_RES_MAX_COUNT;
+	seg_info = rte_zmalloc(NULL, sizeof(*seg_info) * bar_info[0].map_cnt, 0);
+	if (!seg_info) {
+		PMD_LOG_ERR(INIT, "Failed to alloc seg_info");
+		ret = -ENOMEM;
+		goto l_free_bar;
+	}
+
+	bar_info[0].seg_info = seg_info;
+
+	bar_info[1].bar_idx = 4;
+	bar_info[1].map_cnt = SXE2_PCI_MAP_RES_MAX_COUNT;
+	seg_info = rte_zmalloc(NULL, sizeof(*seg_info) * bar_info[1].map_cnt, 0);
+	if (!seg_info) {
+		PMD_LOG_ERR(INIT, "Failed to alloc seg_info");
+		ret = -ENOMEM;
+		goto l_free_seg0;
+	}
+
+	bar_info[1].seg_info = seg_info;
+	map_ctxt->bar_info = bar_info;
+
+	map_ctxt->addr_info = sxe2_net_map_addr_info_pf;
+
+	ret = sxe2_dev_pci_res_seg_map(adapter, SXE2_PCI_MAP_RES_DOORBELL_TX,
+				       txq_cnt, txq_base);
+	if (ret) {
+		PMD_LOG_ERR(INIT, "Failed to map txq doorbell addr, ret=%d", ret);
+		goto l_free_seg1;
+	}
+
+	ret = sxe2_dev_pci_res_seg_map(adapter, SXE2_PCI_MAP_RES_DOORBELL_RX_TAIL,
+				       rxq_cnt, rxq_base);
+	if (ret) {
+		PMD_LOG_ERR(INIT, "Failed to map rxq tail doorbell addr, ret=%d", ret);
+		goto l_free_txq;
+	}
+
+	ret = sxe2_dev_pci_res_seg_map(adapter, SXE2_PCI_MAP_RES_IRQ_DYN,
+				       irq_cnt, irq_base);
+	if (ret) {
+		PMD_LOG_ERR(INIT, "Failed to map irq dyn addr, ret=%d", ret);
+		goto l_free_rxq_tail;
+	}
+
+	ret = sxe2_dev_pci_res_seg_map(adapter, SXE2_PCI_MAP_RES_IRQ_ITR,
+				       irq_cnt, irq_base);
+	if (ret) {
+		PMD_LOG_ERR(INIT, "Failed to map irq itr addr, ret=%d", ret);
+		goto l_free_irq_dyn;
+	}
+
+	ret = sxe2_dev_pci_res_seg_map(adapter, SXE2_PCI_MAP_RES_IRQ_MSIX,
+				       irq_cnt, irq_base);
+	if (ret) {
+		PMD_LOG_ERR(INIT, "Failed to map irq msix addr, ret=%d", ret);
+		goto l_free_irq_itr;
+	}
+	goto l_end;
+
+l_free_irq_itr:
+	(void)sxe2_dev_pci_seg_unmap(adapter, SXE2_PCI_MAP_RES_IRQ_ITR);
+l_free_irq_dyn:
+	(void)sxe2_dev_pci_seg_unmap(adapter, SXE2_PCI_MAP_RES_IRQ_DYN);
+l_free_rxq_tail:
+	(void)sxe2_dev_pci_seg_unmap(adapter, SXE2_PCI_MAP_RES_DOORBELL_RX_TAIL);
+l_free_txq:
+	(void)sxe2_dev_pci_seg_unmap(adapter, SXE2_PCI_MAP_RES_DOORBELL_TX);
+l_free_seg1:
+	if (bar_info[1].seg_info) {
+		rte_free(bar_info[1].seg_info);
+		bar_info[1].seg_info = NULL;
+	}
+l_free_seg0:
+	if (bar_info[0].seg_info) {
+		rte_free(bar_info[0].seg_info);
+		bar_info[0].seg_info = NULL;
+	}
+l_free_bar:
+	if (bar_info) {
+		rte_free(bar_info);
+		bar_info = NULL;
+	}
+l_end:
+	return ret;
+}
+
+void sxe2_dev_pci_map_uinit(struct rte_eth_dev *dev)
+{
+	struct sxe2_adapter *adapter  = SXE2_DEV_PRIVATE_TO_ADAPTER(dev);
+	struct sxe2_pci_map_context *map_ctxt = &adapter->map_ctxt;
+	struct sxe2_pci_map_bar_info *bar_info = NULL;
+	uint8_t i = 0;
+
+	PMD_INIT_FUNC_TRACE();
+
+	(void)sxe2_dev_pci_seg_unmap(adapter, SXE2_PCI_MAP_RES_DOORBELL_RX_TAIL);
+	(void)sxe2_dev_pci_seg_unmap(adapter, SXE2_PCI_MAP_RES_DOORBELL_TX);
+	(void)sxe2_dev_pci_seg_unmap(adapter, SXE2_PCI_MAP_RES_IRQ_DYN);
+	(void)sxe2_dev_pci_seg_unmap(adapter, SXE2_PCI_MAP_RES_IRQ_ITR);
+	(void)sxe2_dev_pci_seg_unmap(adapter, SXE2_PCI_MAP_RES_IRQ_MSIX);
+
+	if (map_ctxt != NULL && map_ctxt->bar_info != NULL) {
+		for (i = 0; i < map_ctxt->bar_cnt; i++) {
+			bar_info = &map_ctxt->bar_info[i];
+			if (bar_info != NULL && bar_info->seg_info != NULL) {
+				rte_free(bar_info->seg_info);
+				bar_info->seg_info = NULL;
+			}
+		}
+		rte_free(map_ctxt->bar_info);
+		map_ctxt->bar_info = NULL;
+	}
+
+	adapter->dev_info.dev_data = NULL;
+}
+
 static int32_t sxe2_dev_init(struct rte_eth_dev *dev,
 			     struct sxe2_dev_kvargs_info *kvargs __rte_unused)
 {
@@ -426,6 +736,12 @@ static int32_t sxe2_dev_init(struct rte_eth_dev *dev,
 		goto l_end;
 	}
 
+	ret = sxe2_dev_pci_map_init(dev);
+	if (ret) {
+		PMD_LOG_ERR(INIT, "Failed to pci addr map, ret=[%d]", ret);
+		goto l_end;
+	}
+
 	ret = sxe2_vsi_init(dev);
 	if (ret) {
 		PMD_LOG_ERR(INIT, "create main vsi failed, ret=%d", ret);
@@ -548,8 +864,10 @@ static int32_t sxe2_parse_eth_devargs(struct rte_device *dev,
 	memset(eth_da, 0, sizeof(*eth_da));
 
 	if (dev->devargs->cls_str) {
-		ret = rte_eth_devargs_parse(dev->devargs->cls_str, eth_da, 1);
-		if (ret != 0) {
+		ret = rte_eth_devargs_parse(dev->devargs->cls_str,
+					    eth_da,
+					    1);
+		if (ret) {
 			PMD_LOG_ERR(INIT, "Failed to parse device arguments: %s",
 				dev->devargs->cls_str);
 			return -rte_errno;
@@ -557,7 +875,9 @@ static int32_t sxe2_parse_eth_devargs(struct rte_device *dev,
 	}
 
 	if (eth_da->type == RTE_ETH_REPRESENTOR_NONE && dev->devargs->args) {
-		ret = rte_eth_devargs_parse(dev->devargs->args, eth_da, 1);
+		ret = rte_eth_devargs_parse(dev->devargs->args,
+					    eth_da,
+					    1);
 		if (ret) {
 			PMD_LOG_ERR(INIT, "Failed to parse device arguments: %s",
 				dev->devargs->args);
diff --git a/drivers/net/sxe2/sxe2_ethdev.h b/drivers/net/sxe2/sxe2_ethdev.h
index c4634685e6..843e652616 100644
--- a/drivers/net/sxe2/sxe2_ethdev.h
+++ b/drivers/net/sxe2/sxe2_ethdev.h
@@ -290,4 +290,22 @@ struct sxe2_adapter {
 #define SXE2_DEV_PRIVATE_TO_ADAPTER(dev) \
 	((struct sxe2_adapter *)(dev)->data->dev_private)
 
+#define SXE2_DEV_TO_PCI(eth_dev) \
+		RTE_DEV_TO_PCI((eth_dev)->device)
+
+struct sxe2_pci_map_bar_info *sxe2_dev_get_bar_info(struct sxe2_adapter *adapter,
+		enum sxe2_pci_map_resource res_type);
+
+int32_t sxe2_dev_pci_seg_map(struct sxe2_adapter *adapter,
+		enum sxe2_pci_map_resource res_type, uint64_t org_len, uint64_t org_offset);
+
+int32_t sxe2_dev_pci_res_seg_map(struct sxe2_adapter *adapter, uint32_t res_type,
+		uint32_t item_cnt, uint32_t item_base);
+
+void sxe2_dev_pci_seg_unmap(struct sxe2_adapter *adapter, uint32_t res_type);
+
+int32_t sxe2_dev_pci_map_init(struct rte_eth_dev *dev);
+
+void sxe2_dev_pci_map_uinit(struct rte_eth_dev *dev);
+
 #endif /* __SXE2_ETHDEV_H__ */
-- 
2.47.3


^ permalink raw reply related

* [PATCH v19 02/11] doc: add sxe2 guide and release notes
From: liujie5 @ 2026-05-20  2:18 UTC (permalink / raw)
  To: stephen; +Cc: dev, Jie Liu
In-Reply-To: <20260520021809.4019054-1-liujie5@linkdatatechnology.com>

From: Jie Liu <liujie5@linkdatatechnology.com>

Add a new guide for SXE2 PMD in the nics directory.
The guide contains driver capabilities, prerequisites,
and compilation/usage instructions.

Update the release notes to announce the addition of the
sxe2 network driver.

Signed-off-by: Jie Liu <liujie5@linkdatatechnology.com>
---
 doc/guides/nics/features/sxe2.ini      | 23 +++++++++++++++++
 doc/guides/nics/index.rst              |  1 +
 doc/guides/nics/sxe2.rst               | 34 ++++++++++++++++++++++++++
 doc/guides/rel_notes/release_26_07.rst |  4 +++
 4 files changed, 62 insertions(+)
 create mode 100644 doc/guides/nics/features/sxe2.ini
 create mode 100644 doc/guides/nics/sxe2.rst

diff --git a/doc/guides/nics/features/sxe2.ini b/doc/guides/nics/features/sxe2.ini
new file mode 100644
index 0000000000..09ba2f558c
--- /dev/null
+++ b/doc/guides/nics/features/sxe2.ini
@@ -0,0 +1,23 @@
+;
+; Supported features of the 'sxe2' network poll mode driver.
+;
+; Refer to default.ini for the full list of available PMD features.
+;
+; A feature with "P" indicates only be supported when non-vector path
+; is selected.
+;
+[Features]
+Fast mbuf free       = P
+Free Tx mbuf on demand = Y
+Burst mode info      = Y
+Queue start/stop     = Y
+Buffer split on Rx   = P
+Scattered Rx         = Y
+CRC offload          = Y
+L3 checksum offload  = Y
+L4 checksum offload  = Y
+Rx descriptor status = Y
+Tx descriptor status = Y
+Linux                = Y
+x86-32               = Y
+x86-64               = Y
diff --git a/doc/guides/nics/index.rst b/doc/guides/nics/index.rst
index cb818284fe..e20be478f8 100644
--- a/doc/guides/nics/index.rst
+++ b/doc/guides/nics/index.rst
@@ -68,6 +68,7 @@ Network Interface Controller Drivers
     rnp
     sfc_efx
     softnic
+    sxe2
     tap
     thunderx
     txgbe
diff --git a/doc/guides/nics/sxe2.rst b/doc/guides/nics/sxe2.rst
new file mode 100644
index 0000000000..7fcf9c085b
--- /dev/null
+++ b/doc/guides/nics/sxe2.rst
@@ -0,0 +1,34 @@
+..  SPDX-License-Identifier: BSD-3-Clause
+    Copyright (C), 2025, Wuxi Stars Micro System Technologies Co., Ltd.
+
+SXE2 Poll Mode Driver
+======================
+
+The sxe2 PMD (**librte_net_sxe2**) provides poll mode driver support for
+10/25/50/100 Gbps Network Adapters.
+The embedded switch, Physical Functions (PF),
+and SR-IOV Virtual Functions (VF) are supported.
+
+Implementation details
+----------------------
+
+The sxe2 PMD is designed to operate alongside the sxe2 kernel network driver.
+For management and control operations, the PMD communicates with the kernel
+driver via ioctl interfaces. These commands are processed by the kernel
+driver and subsequently dispatched to the hardware firmware for execution.
+
+For security and robustness, the driver's data path is optimized to operate
+using virtual addresses (IOVA as VA mode). However, to ensure full
+compatibility in system environments where an IOMMU is absent or disabled,
+the driver also provides an explicit path to support physical addressing
+(IOVA as PA mode).
+
+The hardware is capable of handling the corresponding IOVA addresses (either
+VA or PA) directly, as provided by the DPDK memory subsystem. This ensures
+that DPDK applications can only access memory segments explicitly allocated
+to the current process, preventing unauthorized access to random physical
+memory.
+
+This capability allows the PMD to coexist with kernel network interfaces
+which remain functional, although they stop receiving unicast packets as
+long as they share the same MAC address.
diff --git a/doc/guides/rel_notes/release_26_07.rst b/doc/guides/rel_notes/release_26_07.rst
index f012d47a4b..fa0f0f5cca 100644
--- a/doc/guides/rel_notes/release_26_07.rst
+++ b/doc/guides/rel_notes/release_26_07.rst
@@ -64,6 +64,10 @@ New Features
   * ``--auto-probing`` enables the initial bus probing, which is the current default behavior.
 
 
+* **Added Linkdata sxe2 ethernet driver.**
+
+  Added network driver for the Linkdata Network Adapters.
+
 Removed Items
 -------------
 
-- 
2.47.3


^ permalink raw reply related

* [PATCH v19 07/11] common/sxe2: add ioctl interface for DMA map and unmap
From: liujie5 @ 2026-05-20  2:18 UTC (permalink / raw)
  To: stephen; +Cc: dev, Jie Liu
In-Reply-To: <20260520021809.4019054-1-liujie5@linkdatatechnology.com>

From: Jie Liu <liujie5@linkdatatechnology.com>

Implement DMA mapping and unmapping functionality using ioctl
calls. This allows the driver to configure the hardware's IOMMU/DMA
tables, ensuring the device can safely access memory buffers
allocated by the userspace.

The mapping is established during device initialization or queue
setup and is revoked during device closure to prevent memory
leaks and ensure hardware security.

Signed-off-by: Jie Liu <liujie5@linkdatatechnology.com>
---
 drivers/common/sxe2/sxe2_common.c          |  50 +++++++++-
 drivers/common/sxe2/sxe2_ioctl_chnl.c      | 104 +++++++++++++++++++++
 drivers/common/sxe2/sxe2_ioctl_chnl_func.h |   9 ++
 3 files changed, 162 insertions(+), 1 deletion(-)

diff --git a/drivers/common/sxe2/sxe2_common.c b/drivers/common/sxe2/sxe2_common.c
index 4a67ececc8..f34427c569 100644
--- a/drivers/common/sxe2/sxe2_common.c
+++ b/drivers/common/sxe2/sxe2_common.c
@@ -442,7 +442,7 @@ static int32_t sxe2_common_pci_remove(struct rte_pci_device *pci_dev)
 	cdev = sxe2_rtedev_to_cdev(&pci_dev->device);
 	if (cdev == NULL) {
 		ret = -ENODEV;
-		PMD_LOG_ERR(COM, "Fail to get remove device.");
+		PMD_LOG_ERR(COM, "Fail to get device when remove.");
 		goto l_end;
 	}
 
@@ -466,12 +466,60 @@ static int32_t sxe2_common_pci_remove(struct rte_pci_device *pci_dev)
 	return ret;
 }
 
+static int32_t sxe2_common_pci_dma_map(struct rte_pci_device *pci_dev,
+		void *addr,	uint64_t iova, size_t len)
+{
+	struct sxe2_common_device *cdev;
+	int32_t ret = -1;
+
+	cdev = sxe2_rtedev_to_cdev(&pci_dev->device);
+	if (cdev == NULL) {
+		ret = -ENODEV;
+		PMD_LOG_ERR(COM, "Fail to get device when dma map.");
+		goto l_end;
+	}
+
+	ret = sxe2_drv_dev_dma_map(cdev, (uint64_t)(uintptr_t)addr, iova, len);
+	if (ret) {
+		PMD_LOG_ERR(COM, "Fail to map dma map, ret=%d", ret);
+		goto l_end;
+	}
+
+l_end:
+	return ret;
+}
+
+static int32_t sxe2_common_pci_dma_unmap(struct rte_pci_device *pci_dev,
+		void *addr __rte_unused, uint64_t iova, size_t len __rte_unused)
+{
+	struct sxe2_common_device *cdev;
+	int32_t ret = -1;
+
+	cdev = sxe2_rtedev_to_cdev(&pci_dev->device);
+	if (cdev == NULL) {
+		ret = -ENODEV;
+		PMD_LOG_ERR(COM, "Fail to get device when dma unmap.");
+		goto l_end;
+	}
+
+	ret = sxe2_drv_dev_dma_unmap(cdev, iova);
+	if (ret) {
+		PMD_LOG_ERR(COM, "Fail to unmap dma map, ret=%d", ret);
+		goto l_end;
+	}
+
+l_end:
+	return ret;
+}
+
 static struct rte_pci_driver sxe2_common_pci_driver = {
 	.driver = {
 		   .name = SXE2_COMMON_PCI_DRIVER_NAME,
 	},
 	.probe = sxe2_common_pci_probe,
 	.remove = sxe2_common_pci_remove,
+	.dma_map = sxe2_common_pci_dma_map,
+	.dma_unmap = sxe2_common_pci_dma_unmap,
 };
 
 static uint32_t sxe2_common_pci_id_table_size_get(const struct rte_pci_id *id_table)
diff --git a/drivers/common/sxe2/sxe2_ioctl_chnl.c b/drivers/common/sxe2/sxe2_ioctl_chnl.c
index eb1c4cabc7..9a2c15432a 100644
--- a/drivers/common/sxe2/sxe2_ioctl_chnl.c
+++ b/drivers/common/sxe2/sxe2_ioctl_chnl.c
@@ -219,3 +219,107 @@ sxe2_drv_dev_munmap(struct sxe2_common_device *cdev, void *virt, uint64_t len)
 l_end:
 	return ret;
 }
+
+RTE_EXPORT_INTERNAL_SYMBOL(sxe2_drv_dev_dma_map)
+int32_t
+sxe2_drv_dev_dma_map(struct sxe2_common_device *cdev, uint64_t vaddr,
+			uint64_t iova, uint64_t size)
+{
+	struct sxe2_ioctl_iommu_dma_map cmd_params;
+	enum rte_iova_mode iova_mode;
+	int32_t ret = 0;
+	int32_t cmd_fd = 0;
+
+	if (cdev->config.kernel_reset) {
+		ret = -EPERM;
+		PMD_LOG_WARN(COM, "kernel reset, need restart app.");
+		goto l_end;
+	}
+
+	iova_mode = rte_eal_iova_mode();
+	if (iova_mode == RTE_IOVA_PA) {
+		if (cdev->config.support_iommu) {
+			PMD_LOG_ERR(COM, "iommu not support pa mode");
+			ret = -EIO;
+		}
+		goto l_end;
+	} else if (iova_mode == RTE_IOVA_VA) {
+		if (!cdev->config.support_iommu) {
+			PMD_LOG_ERR(COM, "no iommu not support va mode, please use pa mode.");
+			ret = -EIO;
+			goto l_end;
+		}
+	}
+
+	cmd_fd = SXE2_CDEV_TO_CMD_FD(cdev);
+	if (cmd_fd < 0) {
+		ret = -EBADF;
+		PMD_LOG_ERR(COM, "Failed to exec cmd, fd=%d", cmd_fd);
+		goto l_end;
+	}
+
+	memset(&cmd_params, 0, sizeof(struct sxe2_ioctl_iommu_dma_map));
+	cmd_params.vaddr = vaddr;
+	cmd_params.iova = iova;
+	cmd_params.size = size;
+
+	pthread_mutex_lock(&cdev->config.lock);
+	ret = ioctl(cmd_fd, SXE2_COM_CMD_DMA_MAP, &cmd_params);
+	if (ret < 0) {
+		PMD_LOG_ERR(COM, "Failed to dma map, fd=%d, ret=%d, err:%s",
+				cmd_fd, ret, strerror(errno));
+		ret = -EIO;
+		pthread_mutex_unlock(&cdev->config.lock);
+		goto l_end;
+	}
+	pthread_mutex_unlock(&cdev->config.lock);
+
+l_end:
+	return ret;
+}
+
+RTE_EXPORT_INTERNAL_SYMBOL(sxe2_drv_dev_dma_unmap)
+int32_t
+sxe2_drv_dev_dma_unmap(struct sxe2_common_device *cdev, uint64_t iova)
+{
+	int32_t ret = 0;
+	int32_t cmd_fd = 0;
+	struct sxe2_ioctl_iommu_dma_unmap cmd_params;
+
+	if (cdev->config.kernel_reset) {
+		ret = -EPERM;
+		PMD_LOG_WARN(COM, "kernel reset, need restart app.");
+		goto l_end;
+	}
+
+	if (!cdev->config.support_iommu)
+		goto l_end;
+
+	cmd_fd = SXE2_CDEV_TO_CMD_FD(cdev);
+	if (cmd_fd < 0) {
+		ret = -EBADF;
+		PMD_LOG_ERR(COM, "Failed to exec cmd, fd=%d", cmd_fd);
+		goto l_end;
+	}
+
+	PMD_LOG_DEBUG(COM, "fd %d dma unmap iova=0x%"PRIX64"",
+		cmd_fd, iova);
+
+	memset(&cmd_params, 0, sizeof(struct sxe2_ioctl_iommu_dma_unmap));
+	cmd_params.iova = iova;
+
+	pthread_mutex_lock(&cdev->config.lock);
+	ret = ioctl(cmd_fd, SXE2_COM_CMD_DMA_UNMAP, &cmd_params);
+	if (ret < 0) {
+		PMD_LOG_INFO(COM, "Failed to dma unmap, fd=%d, ret=%d, err:%s",
+				cmd_fd, ret, strerror(errno));
+		ret = -EIO;
+		pthread_mutex_unlock(&cdev->config.lock);
+		goto l_end;
+	}
+	pthread_mutex_unlock(&cdev->config.lock);
+
+l_end:
+	return ret;
+}
+
diff --git a/drivers/common/sxe2/sxe2_ioctl_chnl_func.h b/drivers/common/sxe2/sxe2_ioctl_chnl_func.h
index 483b8f820c..aed5a5b50d 100644
--- a/drivers/common/sxe2/sxe2_ioctl_chnl_func.h
+++ b/drivers/common/sxe2/sxe2_ioctl_chnl_func.h
@@ -46,6 +46,15 @@ __rte_internal
 int32_t
 sxe2_drv_dev_munmap(struct sxe2_common_device *cdev, void *virt, uint64_t len);
 
+__rte_internal
+int32_t
+sxe2_drv_dev_dma_map(struct sxe2_common_device *cdev, uint64_t vaddr,
+		uint64_t iova, uint64_t size);
+
+__rte_internal
+int32_t
+sxe2_drv_dev_dma_unmap(struct sxe2_common_device *cdev, uint64_t iova);
+
 #ifdef __cplusplus
 }
 #endif
-- 
2.47.3


^ permalink raw reply related

* [PATCH v19 01/11] mailmap: add Jie Liu
From: liujie5 @ 2026-05-20  2:17 UTC (permalink / raw)
  To: stephen; +Cc: dev, Jie Liu
In-Reply-To: <20260520021809.4019054-1-liujie5@linkdatatechnology.com>

From: Jie Liu <liujie5@linkdatatechnology.com>

Signed-off-by: Jie Liu <liujie5@linkdatatechnology.com>
---
 .mailmap | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.mailmap b/.mailmap
index 895412e568..d2c4485636 100644
--- a/.mailmap
+++ b/.mailmap
@@ -739,6 +739,7 @@ Jiawen Wu <jiawenwu@trustnetic.com>
 Jiayu Hu <hujiayu.hu@foxmail.com> <jiayu.hu@intel.com>
 Jie Hai <haijie1@huawei.com>
 Jie Liu <jie2.liu@hxt-semitech.com>
+Jie Liu <liujie5@linkdatatechnology.com>
 Jie Pan <panjie5@jd.com>
 Jie Wang <jie1x.wang@intel.com>
 Jie Zhou <jizh@linux.microsoft.com> <jizh@microsoft.com>
-- 
2.47.3


^ permalink raw reply related

* [PATCH v19 03/11] common/sxe2: add sxe2 basic structures
From: liujie5 @ 2026-05-20  2:18 UTC (permalink / raw)
  To: stephen; +Cc: dev, Jie Liu
In-Reply-To: <20260520021809.4019054-1-liujie5@linkdatatechnology.com>

From: Jie Liu <liujie5@linkdatatechnology.com>

This patch adds the base infrastructure for the sxe2 common
library. It includes the mandatory OS abstraction layer (OSAL),
common structure definitions, error codes, and the logging
system implementation.

Specifically, this commit:
 - Implements the logging stream management using RTE_LOG_LINE.
 - Defines device-specific error codes and status registers.
 - Adds the initial meson build configuration for the common library.

Signed-off-by: Jie Liu <liujie5@linkdatatechnology.com>
---
 drivers/common/sxe2/sxe2_common_log.h   |  81 +++
 drivers/common/sxe2/sxe2_host_regs.h    | 707 ++++++++++++++++++++++++
 drivers/common/sxe2/sxe2_internal_ver.h |  33 ++
 drivers/common/sxe2/sxe2_osal.h         | 152 +++++
 4 files changed, 973 insertions(+)
 create mode 100644 drivers/common/sxe2/sxe2_common_log.h
 create mode 100644 drivers/common/sxe2/sxe2_host_regs.h
 create mode 100644 drivers/common/sxe2/sxe2_internal_ver.h
 create mode 100644 drivers/common/sxe2/sxe2_osal.h

diff --git a/drivers/common/sxe2/sxe2_common_log.h b/drivers/common/sxe2/sxe2_common_log.h
new file mode 100644
index 0000000000..e7a9a5f8d0
--- /dev/null
+++ b/drivers/common/sxe2/sxe2_common_log.h
@@ -0,0 +1,81 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (C), 2025, Wuxi Stars Micro System Technologies Co., Ltd.
+ */
+
+#ifndef __SXE2_COMMON_LOG_H__
+#define __SXE2_COMMON_LOG_H__
+
+extern int32_t sxe2_common_log;
+extern int32_t sxe2_log_init;
+extern int32_t sxe2_log_driver;
+extern int32_t sxe2_log_rx;
+extern int32_t sxe2_log_tx;
+extern int32_t sxe2_log_hw;
+
+#define RTE_LOGTYPE_SXE2_COM  sxe2_common_log
+#define RTE_LOGTYPE_SXE2_INIT sxe2_log_init
+#define RTE_LOGTYPE_SXE2_DRV  sxe2_log_driver
+#define RTE_LOGTYPE_SXE2_RX   sxe2_log_rx
+#define RTE_LOGTYPE_SXE2_TX   sxe2_log_tx
+#define RTE_LOGTYPE_SXE2_HW   sxe2_log_hw
+
+#define SXE2_PMD_LOG(level, log_type, ...) \
+	RTE_LOG_LINE_PREFIX(level, log_type, "%s(): ", \
+		__func__, __VA_ARGS__)
+
+#define SXE2_PMD_DRV_LOG(level, log_type, adapter, ...) \
+	RTE_LOG_LINE_PREFIX(level, log_type, "%s(): port:%u ", \
+		__func__ RTE_LOG_COMMA \
+		adapter->dev_port_id, __VA_ARGS__)
+
+#define PMD_LOG_DEBUG(logtype, fmt, ...) \
+	SXE2_PMD_LOG(DEBUG, SXE2_##logtype, fmt, ##__VA_ARGS__)
+
+#define PMD_LOG_INFO(logtype, fmt, ...) \
+	SXE2_PMD_LOG(INFO, SXE2_##logtype, fmt, ##__VA_ARGS__)
+
+#define PMD_LOG_NOTICE(logtype, fmt, ...) \
+	SXE2_PMD_LOG(NOTICE, SXE2_##logtype, fmt, ##__VA_ARGS__)
+
+#define PMD_LOG_WARN(logtype, fmt, ...) \
+	SXE2_PMD_LOG(WARNING, SXE2_##logtype, fmt, ##__VA_ARGS__)
+
+#define PMD_LOG_ERR(logtype, fmt, ...) \
+	SXE2_PMD_LOG(ERR, SXE2_##logtype, fmt, ##__VA_ARGS__)
+
+#define PMD_LOG_CRIT(logtype, fmt, ...) \
+	SXE2_PMD_LOG(CRIT, SXE2_##logtype, fmt, ##__VA_ARGS__)
+
+#define PMD_LOG_ALERT(logtype, fmt, ...) \
+	SXE2_PMD_LOG(ALERT, SXE2_##logtype, fmt, ##__VA_ARGS__)
+
+#define PMD_LOG_EMERG(logtype, fmt, ...) \
+	SXE2_PMD_LOG(EMERG, SXE2_##logtype, fmt, ##__VA_ARGS__)
+
+#define PMD_DEV_LOG_DEBUG(adapter, logtype, fmt, ...) \
+	SXE2_PMD_DRV_LOG(DEBUG, SXE2_##logtype, adapter, fmt, ##__VA_ARGS__)
+
+#define PMD_DEV_LOG_INFO(adapter, logtype, fmt, ...) \
+	SXE2_PMD_DRV_LOG(INFO, SXE2_##logtype, adapter, fmt, ##__VA_ARGS__)
+
+#define PMD_DEV_LOG_NOTICE(adapter, logtype, fmt, ...) \
+	SXE2_PMD_DRV_LOG(NOTICE, SXE2_##logtype, adapter, fmt, ##__VA_ARGS__)
+
+#define PMD_DEV_LOG_WARN(adapter, logtype, fmt, ...) \
+	SXE2_PMD_DRV_LOG(WARNING, SXE2_##logtype, adapter, fmt, ##__VA_ARGS__)
+
+#define PMD_DEV_LOG_ERR(adapter, logtype, fmt, ...) \
+	SXE2_PMD_DRV_LOG(ERR, SXE2_##logtype, adapter, fmt, ##__VA_ARGS__)
+
+#define PMD_DEV_LOG_CRIT(adapter, logtype, fmt, ...) \
+	SXE2_PMD_DRV_LOG(CRIT, SXE2_##logtype, adapter, fmt, ##__VA_ARGS__)
+
+#define PMD_DEV_LOG_ALERT(adapter, logtype, fmt, ...) \
+	SXE2_PMD_DRV_LOG(ALERT, SXE2_##logtype, adapter, fmt, ##__VA_ARGS__)
+
+#define PMD_DEV_LOG_EMERG(adapter, logtype, fmt, ...) \
+	SXE2_PMD_DRV_LOG(EMERG, SXE2_##logtype, adapter, fmt, ##__VA_ARGS__)
+
+#define PMD_INIT_FUNC_TRACE() PMD_LOG_DEBUG(INIT, " >>")
+
+#endif /* __SXE2_COMMON_LOG_H__ */
diff --git a/drivers/common/sxe2/sxe2_host_regs.h b/drivers/common/sxe2/sxe2_host_regs.h
new file mode 100644
index 0000000000..984ea6214c
--- /dev/null
+++ b/drivers/common/sxe2/sxe2_host_regs.h
@@ -0,0 +1,707 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (C), 2025, Wuxi Stars Micro System Technologies Co., Ltd.
+ */
+
+#ifndef __SXE2_HOST_REGS_H__
+#define __SXE2_HOST_REGS_H__
+
+#define SXE2_BITS_MASK(m, s)		((m ## UL) << (s))
+
+#define SXE2_RXQ_CTXT(_i, _QRX)             (0x0050000 + ((_i) * 4 + (_QRX) * 0x20))
+#define SXE2_RXQ_HEAD(_QRX)                 (0x0060000 + ((_QRX) * 4))
+#define SXE2_RXQ_TAIL(_QRX)                 (0x0070000 + ((_QRX) * 4))
+#define SXE2_RXQ_CTRL(_QRX)                 (0x006d000 + ((_QRX) * 4))
+#define SXE2_RXQ_WB(_QRX)                   (0x006B000 + ((_QRX) * 4))
+
+#define SXE2_RXQ_CTRL_STATUS_ACTIVE       0x00000004
+#define SXE2_RXQ_CTRL_ENABLED             0x00000001
+#define SXE2_RXQ_CTRL_CDE_ENABLE		BIT(3)
+
+#define SXE2_PCIEPROC_BASE         0x002d6000
+
+#define SXE2_PF_INT_BASE         0x00260000
+#define SXE2_PF_INT_ALLOC        (SXE2_PF_INT_BASE + 0x0000)
+#define SXE2_PF_INT_ALLOC_FIRST  0x7FF
+#define SXE2_PF_INT_ALLOC_LAST_S 12
+#define SXE2_PF_INT_ALLOC_LAST \
+	(0x7FF << SXE2_PF_INT_ALLOC_LAST_S)
+#define SXE2_PF_INT_ALLOC_VALID BIT(31)
+
+#define SXE2_PF_INT_OICR                  (SXE2_PF_INT_BASE + 0x0040)
+#define SXE2_PF_INT_OICR_PCIE_TIMEOUT     BIT(0)
+#define SXE2_PF_INT_OICR_UR               BIT(1)
+#define SXE2_PF_INT_OICR_CA               BIT(2)
+#define SXE2_PF_INT_OICR_VFLR             BIT(3)
+#define SXE2_PF_INT_OICR_VFR_DONE         BIT(4)
+#define SXE2_PF_INT_OICR_LAN_TX_ERR       BIT(5)
+#define SXE2_PF_INT_OICR_BFDE             BIT(6)
+#define SXE2_PF_INT_OICR_LAN_RX_ERR       BIT(7)
+#define SXE2_PF_INT_OICR_ECC_ERR          BIT(8)
+#define SXE2_PF_INT_OICR_GPIO             BIT(9)
+#define SXE2_PF_INT_OICR_TSYN_TX          BIT(11)
+#define SXE2_PF_INT_OICR_TSYN_EVENT       BIT(12)
+#define SXE2_PF_INT_OICR_TSYN_TGT         BIT(13)
+#define SXE2_PF_INT_OICR_EXHAUST          BIT(14)
+#define SXE2_PF_INT_OICR_FW               BIT(15)
+#define SXE2_PF_INT_OICR_SWINT            BIT(16)
+#define SXE2_PF_INT_OICR_LINKSEC_CHG      BIT(17)
+#define SXE2_PF_INT_OICR_INT_CFG_ADDR_ERR BIT(18)
+#define SXE2_PF_INT_OICR_INT_CFG_DATA_ERR BIT(19)
+#define SXE2_PF_INT_OICR_INT_CFG_ADR_UNRANGE BIT(20)
+#define SXE2_PF_INT_OICR_INT_RAM_CONFLICT BIT(21)
+#define SXE2_PF_INT_OICR_GRST             BIT(22)
+#define SXE2_PF_INT_OICR_FWQ_INT          BIT(29)
+#define SXE2_PF_INT_OICR_FWQ_TOOL_INT     BIT(30)
+#define SXE2_PF_INT_OICR_MBXQ_INT         BIT(31)
+
+#define SXE2_PF_INT_OICR_ENABLE (SXE2_PF_INT_BASE + 0x0020)
+
+#define SXE2_PF_INT_FW_EVENT (SXE2_PF_INT_BASE + 0x0100)
+#define SXE2_PF_INT_FW_ABNORMAL BIT(0)
+#define SXE2_PF_INT_RDMA_AEQ_OVERFLOW BIT(1)
+#define SXE2_PF_INT_CGMAC_LINK_CHG BIT(18)
+#define SXE2_PF_INT_VFLR_DONE         BIT(2)
+
+#define SXE2_PF_INT_OICR_CTL           (SXE2_PF_INT_BASE + 0x0060)
+#define SXE2_PF_INT_OICR_CTL_MSIX_IDX  0x7FF
+#define SXE2_PF_INT_OICR_CTL_ITR_IDX_S 11
+#define SXE2_PF_INT_OICR_CTL_ITR_IDX \
+	(0x3 << SXE2_PF_INT_OICR_CTL_ITR_IDX_S)
+#define SXE2_PF_INT_OICR_CTL_CAUSE_ENABLE BIT(30)
+
+#define SXE2_PF_INT_FWQ_CTL           (SXE2_PF_INT_BASE + 0x00C0)
+#define SXE2_PF_INT_FWQ_CTL_MSIX_IDX  0x7FFF
+#define SXE2_PF_INT_FWQ_CTL_ITR_IDX_S 11
+#define SXE2_PF_INT_FWQ_CTL_ITR_IDX \
+	(0x3 << SXE2_PF_INT_FWQ_CTL_ITR_IDX_S)
+#define SXE2_PF_INT_FWQ_CTL_CAUSE_ENABLE BIT(30)
+
+#define SXE2_PF_INT_MBX_CTL           (SXE2_PF_INT_BASE + 0x00A0)
+#define SXE2_PF_INT_MBX_CTL_MSIX_IDX  0x7FF
+#define SXE2_PF_INT_MBX_CTL_ITR_IDX_S 11
+#define SXE2_PF_INT_MBX_CTL_ITR_IDX   (0x3 << SXE2_PF_INT_MBX_CTL_ITR_IDX_S)
+#define SXE2_PF_INT_MBX_CTL_CAUSE_ENABLE BIT(30)
+
+#define SXE2_PF_INT_GPIO_ENA      (SXE2_PF_INT_BASE + 0x0100)
+#define SXE2_PF_INT_GPIO_X_ENA(x) BIT(x)
+
+#define SXE2_PFG_INT_CTL               (SXE2_PF_INT_BASE + 0x0120)
+#define SXE2_PFG_INT_CTL_ITR_GRAN      0x7
+#define SXE2_PFG_INT_CTL_ITR_GRAN_0    (2)
+#define SXE2_PFG_INT_CTL_CREDIT_GRAN   BIT(4)
+#define SXE2_PFG_INT_CTL_CREDIT_GRAN_0 (4)
+#define SXE2_PFG_INT_CTL_CREDIT_GRAN_1 (8)
+
+#define SXE2_VFG_RAM_INIT_DONE \
+	(SXE2_PF_INT_BASE + 0x0128)
+#define SXE2_VFG_RAM_INIT_DONE_0 BIT(0)
+#define SXE2_VFG_RAM_INIT_DONE_1 BIT(1)
+#define SXE2_VFG_RAM_INIT_DONE_2 BIT(2)
+
+#define SXE2_LINK_REG_GET_10G_VALUE   4
+#define SXE2_LINK_REG_GET_25G_VALUE   1
+#define SXE2_LINK_REG_GET_50G_VALUE   2
+#define SXE2_LINK_REG_GET_100G_VALUE  3
+
+#define SXE2_PORT0_CNT 0
+#define SXE2_PORT1_CNT 1
+#define SXE2_PORT2_CNT 2
+#define SXE2_PORT3_CNT 3
+
+#define SXE2_LINK_STATUS_BASE		(0x002ac200)
+#define SXE2_LINK_STATUS_PORT0_POS		3
+#define SXE2_LINK_STATUS_PORT1_POS		11
+#define SXE2_LINK_STATUS_PORT2_POS		19
+#define SXE2_LINK_STATUS_PORT3_POS		27
+#define SXE2_LINK_STATUS_MASK			1
+
+#define SXE2_LINK_SPEED_BASE		(0x002ac200)
+#define SXE2_LINK_SPEED_PORT0_POS		0
+#define SXE2_LINK_SPEED_PORT1_POS		8
+#define SXE2_LINK_SPEED_PORT2_POS		16
+#define SXE2_LINK_SPEED_PORT3_POS		24
+#define SXE2_LINK_SPEED_MASK			7
+
+#define SXE2_PFVP_INT_ALLOC(vf_idx)        (SXE2_PF_INT_BASE + 0x012C + ((vf_idx) * 4))
+#define SXE2_PFVP_INT_ALLOC_FIRST_S  0
+
+#define SXE2_PFVP_INT_ALLOC_FIRST_M  (0x7FF << SXE2_PFVP_INT_ALLOC_FIRST_S)
+#define SXE2_PFVP_INT_ALLOC_LAST_S 12
+#define SXE2_PFVP_INT_ALLOC_LAST_M \
+	(0x7FF << SXE2_PFVP_INT_ALLOC_LAST_S)
+#define SXE2_PFVP_INT_ALLOC_VALID BIT(31)
+
+#define SXE2_PCI_PFVP_INT_ALLOC(vf_idx)  (SXE2_PCIEPROC_BASE + 0x5800 + ((vf_idx) * 4))
+#define SXE2_PCI_PFVP_INT_ALLOC_FIRST_S  0
+
+#define SXE2_PCI_PFVP_INT_ALLOC_FIRST_M  (0x7FF << SXE2_PCI_PFVP_INT_ALLOC_FIRST_S)
+#define SXE2_PCI_PFVP_INT_ALLOC_LAST_S 12
+
+#define SXE2_PCI_PFVP_INT_ALLOC_LAST_M \
+		(0x7FF << SXE2_PCI_PFVP_INT_ALLOC_LAST_S)
+#define SXE2_PCI_PFVP_INT_ALLOC_VALID BIT(31)
+
+#define SXE2_PCIEPROC_INT2FUNC(_INT)		   (SXE2_PCIEPROC_BASE + 0xe000 + ((_INT) * 4))
+#define SXE2_PCIEPROC_INT2FUNC_VF_NUM_S		0
+#define SXE2_PCIEPROC_INT2FUNC_VF_NUM_M		(0xFF << SXE2_PCIEPROC_INT2FUNC_VF_NUM_S)
+#define SXE2_PCIEPROC_INT2FUNC_PF_NUM_S		12
+#define SXE2_PCIEPROC_INT2FUNC_PF_NUM_M		(0x7 << SXE2_PCIEPROC_INT2FUNC_PF_NUM_S)
+#define SXE2_PCIEPROC_INT2FUNC_IS_PF_S       16
+#define SXE2_PCIEPROC_INT2FUNC_IS_PF_M       BIT(16)
+
+#define SXE2_VSI_PF(vf_idx)                (SXE2_PF_INT_BASE + 0x14000 + ((vf_idx) * 4))
+#define SXE2_VSI_PF_ID_S		   0
+#define SXE2_VSI_PF_ID_M		  (0x7 << SXE2_VSI_PF_ID_S)
+#define SXE2_VSI_PF_EN_M		  BIT(3)
+
+#define SXE2_MBX_CTL(_VSI)			(0x0026692C + ((_VSI) * 4))
+#define SXE2_MBX_CTL_MSIX_INDX_S		0
+#define SXE2_MBX_CTL_MSIX_INDX_M		(0x7FF << SXE2_MBX_CTL_MSIX_INDX_S)
+#define SXE2_MBX_CTL_CAUSE_ENA_M		BIT(30)
+
+#define SXE2_PF_INT_TQCTL(q_idx)    (SXE2_PF_INT_BASE + 0x092C + 4 * (q_idx))
+#define SXE2_PF_INT_TQCTL_MSIX_IDX  0x7FF
+#define SXE2_PF_INT_TQCTL_ITR_IDX_S 11
+#define SXE2_PF_INT_TQCTL_ITR_IDX \
+	(0x3 << SXE2_PF_INT_TQCTL_ITR_IDX_S)
+#define SXE2_PF_INT_TQCTL_CAUSE_ENABLE BIT(30)
+
+#define SXE2_PF_INT_RQCTL(q_idx)    (SXE2_PF_INT_BASE + 0x292C + 4 * (q_idx))
+#define SXE2_PF_INT_RQCTL_MSIX_IDX  0x7FF
+#define SXE2_PF_INT_RQCTL_ITR_IDX_S 11
+#define SXE2_PF_INT_RQCTL_ITR_IDX \
+	(0x3 << SXE2_PF_INT_RQCTL_ITR_IDX_S)
+#define SXE2_PF_INT_RQCTL_CAUSE_ENABLE BIT(30)
+
+#define SXE2_PF_INT_RATE(irq_idx)        (SXE2_PF_INT_BASE + 0x7530 + 4 * (irq_idx))
+#define SXE2_PF_INT_RATE_CREDIT_INTERVAL (0x3F)
+#define SXE2_PF_INT_RATE_CREDIT_INTERVAL_MAX \
+	(0x3F)
+#define SXE2_PF_INT_RATE_INTRL_ENABLE           (BIT(6))
+#define SXE2_PF_INT_RATE_CREDIT_MAX_VALUE_SHIFT (7)
+#define SXE2_PF_INT_RATE_CREDIT_MAX_VALUE \
+	(0x3F << SXE2_PF_INT_RATE_CREDIT_MAX_VALUE_SHIFT)
+
+#define SXE2_VF_INT_ITR(itr_idx, irq_idx) \
+	(SXE2_PF_INT_BASE + 0xB530 + 0x2000 * (itr_idx) + 4 * (irq_idx))
+#define SXE2_VF_INT_ITR_INTERVAL 0xFFF
+
+#define SXE2_VF_DYN_CTL(irq_idx)   (SXE2_PF_INT_BASE + 0x9530 + 4 * (irq_idx))
+#define SXE2_VF_DYN_CTL_INTENABLE     BIT(0)
+#define SXE2_VF_DYN_CTL_CLEARPBA   BIT(1)
+#define SXE2_VF_DYN_CTL_SWINT_TRIG BIT(2)
+#define SXE2_VF_DYN_CTL_ITR_IDX_S \
+	3
+#define SXE2_VF_DYN_CTL_ITR_IDX_M      0x3
+#define SXE2_VF_DYN_CTL_INTERVAL_S     5
+#define SXE2_VF_DYN_CTL_INTERVAL_M     0xFFF
+#define SXE2_VF_DYN_CTL_SW_ITR_IDX_ENABLE BIT(24)
+#define SXE2_VF_DYN_CTL_SW_ITR_IDX_S   25
+#define SXE2_VF_DYN_CTL_SW_ITR_IDX_M   0x3
+
+#define SXE2_VF_DYN_CTL_INTENABLE_MSK \
+	BIT(31)
+
+#define SXE2_BAR4_MSIX_BASE 0
+#define SXE2_BAR4_MSIX_CTL(_idx) (SXE2_BAR4_MSIX_BASE + 0xC + ((_idx) * 0x10))
+#define SXE2_BAR4_MSIX_ENABLE 0
+#define SXE2_BAR4_MSIX_DISABLE 1
+
+#define SXE2_TXQ_LEGACY_DBLL(_DBQM)	(0x1000 + ((_DBQM) * 4))
+
+#define SXE2_TXQ_CONTEXT0(_pfIdx)	(0x10040 + ((_pfIdx) * 0x100))
+#define SXE2_TXQ_CONTEXT1(_pfIdx)	(0x10044 + ((_pfIdx) * 0x100))
+#define SXE2_TXQ_CONTEXT2(_pfIdx)	(0x10048 + ((_pfIdx) * 0x100))
+#define SXE2_TXQ_CONTEXT3(_pfIdx)	(0x1004C + ((_pfIdx) * 0x100))
+#define SXE2_TXQ_CONTEXT4(_pfIdx)	(0x10050 + ((_pfIdx) * 0x100))
+#define SXE2_TXQ_CONTEXT7(_pfIdx)	(0x1005C + ((_pfIdx) * 0x100))
+#define SXE2_TXQ_CONTEXT7_HEAD_S      0
+#define SXE2_TXQ_CONTEXT7_HEAD_M      SXE2_BITS_MASK(0xFFF, SXE2_TXQ_CONTEXT7_HEAD_S)
+#define SXE2_TXQ_CONTEXT7_READ_HEAD_S 16
+#define SXE2_TXQ_CONTEXT7_READ_HEAD_M SXE2_BITS_MASK(0xFFF, SXE2_TXQ_CONTEXT7_READ_HEAD_S)
+
+#define SXE2_TXQ_CTRL(_pfIdx)          (0x10064 + ((_pfIdx) * 0x100))
+#define SXE2_TXQ_CTXT_CTRL(_pfIdx)     (0x100C8 + ((_pfIdx) * 0x100))
+#define SXE2_TXQ_DIS_CNT(_pfIdx)       (0x100D0 + ((_pfIdx) * 0x100))
+
+#define SXE2_TXQ_CTXT_CTRL_USED_MASK   0x00000800
+#define SXE2_TXQ_CTRL_SW_EN_M		BIT(0)
+#define SXE2_TXQ_CTRL_HW_EN_M		BIT(1)
+
+#define	SXE2_TXQ_CTXT2_PROT_IDX_S	0
+#define	SXE2_TXQ_CTXT2_PROT_IDX_M	SXE2_BITS_MASK(0x7, 0)
+#define	SXE2_TXQ_CTXT2_CGD_IDX_S	4
+#define	SXE2_TXQ_CTXT2_CGD_IDX_M	SXE2_BITS_MASK(0x1F, 4)
+#define	SXE2_TXQ_CTXT2_PF_IDX_S	9
+#define	SXE2_TXQ_CTXT2_PF_IDX_M	SXE2_BITS_MASK(0x7, 9)
+#define	SXE2_TXQ_CTXT2_VMVF_IDX_S	12
+#define	SXE2_TXQ_CTXT2_VMVF_IDX_M	SXE2_BITS_MASK(0x3FF, 12)
+#define	SXE2_TXQ_CTXT2_VMVF_TYPE_S	23
+#define	SXE2_TXQ_CTXT2_VMVF_TYPE_M	SXE2_BITS_MASK(0x3, 23)
+#define	SXE2_TXQ_CTXT2_TSYN_ENA_S	25
+#define	SXE2_TXQ_CTXT2_TSYN_ENA_M	BIT(25)
+#define	SXE2_TXQ_CTXT2_ALT_VLAN_S	26
+#define	SXE2_TXQ_CTXT2_ALT_VLAN_M	BIT(26)
+#define	SXE2_TXQ_CTXT2_WB_MODE_S	27
+#define	SXE2_TXQ_CTXT2_WB_MODE_M	BIT(27)
+#define	SXE2_TXQ_CTXT2_ITR_WB_S	28
+#define	SXE2_TXQ_CTXT2_ITR_WB_M	BIT(28)
+#define	SXE2_TXQ_CTXT2_LEGACY_EN_S	29
+#define	SXE2_TXQ_CTXT2_LEGACY_EN_M	BIT(29)
+#define	SXE2_TXQ_CTXT2_SSO_EN_S	30
+#define	SXE2_TXQ_CTXT2_SSO_EN_M	BIT(30)
+
+#define	SXE2_TXQ_CTXT3_SRC_VSI_S	0
+#define	SXE2_TXQ_CTXT3_SRC_VSI_M	SXE2_BITS_MASK(0x3FF, 0)
+#define	SXE2_TXQ_CTXT3_CPU_ID_S	12
+#define	SXE2_TXQ_CTXT3_CPU_ID_M	SXE2_BITS_MASK(0xFF, 12)
+#define	SXE2_TXQ_CTXT3_TPH_RDDESC_S	20
+#define	SXE2_TXQ_CTXT3_TPH_RDDESC_M	BIT(20)
+#define	SXE2_TXQ_CTXT3_TPH_RDDATA_S	21
+#define	SXE2_TXQ_CTXT3_TPH_RDDATA_M	BIT(21)
+#define	SXE2_TXQ_CTXT3_TPH_WRDESC_S	22
+#define	SXE2_TXQ_CTXT3_TPH_WRDESC_M	BIT(22)
+
+#define	SXE2_TXQ_CTXT3_QID_IN_FUNC_S	0
+#define	SXE2_TXQ_CTXT3_QID_IN_FUNC_M	SXE2_BITS_MASK(0x7FF, 0)
+#define	SXE2_TXQ_CTXT3_RDDESC_RO_S	13
+#define	SXE2_TXQ_CTXT3_RDDESC_RO_M	BIT(13)
+#define	SXE2_TXQ_CTXT3_WRDESC_RO_S	14
+#define	SXE2_TXQ_CTXT3_WRDESC_RO_M	BIT(14)
+#define	SXE2_TXQ_CTXT3_RDDATA_RO_S	15
+#define	SXE2_TXQ_CTXT3_RDDATA_RO_M	BIT(15)
+#define	SXE2_TXQ_CTXT3_QLEN_S		16
+#define	SXE2_TXQ_CTXT3_QLEN_M		SXE2_BITS_MASK(0x1FFF, 16)
+
+#define SXE2_RX_BUF_CHAINED_MAX        10
+#define SXE2_RX_DESC_BASE_ADDR_UNIT    7
+#define SXE2_RX_HBUF_LEN_UNIT          6
+#define SXE2_RX_DBUF_LEN_UNIT          7
+#define SXE2_RX_DBUF_LEN_MASK          (~0x7F)
+#define SXE2_RX_HWTAIL_VALUE_MASK      (~0x7)
+
+enum {
+	SXE2_RX_CTXT0 = 0,
+	SXE2_RX_CTXT1,
+	SXE2_RX_CTXT2,
+	SXE2_RX_CTXT3,
+	SXE2_RX_CTXT4,
+	SXE2_RX_CTXT_CNT,
+};
+
+#define SXE2_RX_CTXT_BASE_L_S                 0
+#define SXE2_RX_CTXT_BASE_L_W                 32
+
+#define SXE2_RX_CTXT_BASE_H_S                 0
+#define SXE2_RX_CTXT_BASE_H_W                 25
+#define SXE2_RX_CTXT_DEPTH_L_S                25
+#define SXE2_RX_CTXT_DEPTH_L_W		       7
+
+#define SXE2_RX_CTXT_DEPTH_H_S                0
+#define SXE2_RX_CTXT_DEPTH_H_W		       6
+
+#define SXE2_RX_CTXT_DBUFF_S                  6
+#define SXE2_RX_CTXT_DBUFF_W                  7
+
+#define SXE2_RX_CTXT_HBUFF_S                  13
+#define SXE2_RX_CTXT_HBUFF_W                  5
+
+#define SXE2_RX_CTXT_HSPLT_TYPE_S             18
+#define SXE2_RX_CTXT_HSPLT_TYPE_W             2
+
+#define SXE2_RX_CTXT_DESC_TYPE_S              20
+#define SXE2_RX_CTXT_DESC_TYPE_W              1
+
+#define SXE2_RX_CTXT_CRC_S                    21
+#define SXE2_RX_CTXT_CRC_W                    1
+
+#define SXE2_RX_CTXT_L2TAG_FLAG_S             23
+#define SXE2_RX_CTXT_L2TAG_FLAG_W             1
+
+#define SXE2_RX_CTXT_HSPLT_0_S                24
+#define SXE2_RX_CTXT_HSPLT_0_W                4
+
+#define SXE2_RX_CTXT_HSPLT_1_S                28
+#define SXE2_RX_CTXT_HSPLT_1_W                2
+
+#define SXE2_RX_CTXT_INVALN_STP_S             31
+#define SXE2_RX_CTXT_INVALN_STP_W             1
+
+#define SXE2_RX_CTXT_LRO_ENABLE_S             0
+#define SXE2_RX_CTXT_LRO_ENABLE_W             1
+
+#define SXE2_RX_CTXT_CPUID_S                  3
+#define SXE2_RX_CTXT_CPUID_W                  8
+
+#define SXE2_RX_CTXT_MAX_FRAME_SIZE_S         11
+#define SXE2_RX_CTXT_MAX_FRAME_SIZE_W         14
+
+#define SXE2_RX_CTXT_LRO_DESC_MAX_S           25
+#define SXE2_RX_CTXT_LRO_DESC_MAX_W           4
+
+#define SXE2_RX_CTXT_RELAX_DATA_S             29
+#define SXE2_RX_CTXT_RELAX_DATA_W             1
+
+#define SXE2_RX_CTXT_RELAX_WB_S               30
+#define SXE2_RX_CTXT_RELAX_WB_W               1
+
+#define SXE2_RX_CTXT_RELAX_RD_S               31
+#define SXE2_RX_CTXT_RELAX_RD_W               1
+
+#define SXE2_RX_CTXT_THPRDESC_ENABLE_S        1
+#define SXE2_RX_CTXT_THPRDESC_ENABLE_W        1
+
+#define SXE2_RX_CTXT_THPWDESC_ENABLE_S        2
+#define SXE2_RX_CTXT_THPWDESC_ENABLE_W        1
+
+#define SXE2_RX_CTXT_THPRDATA_ENABLE_S        3
+#define SXE2_RX_CTXT_THPRDATA_ENABLE_W        1
+
+#define SXE2_RX_CTXT_THPHEAD_ENABLE_S         4
+#define SXE2_RX_CTXT_THPHEAD_ENABLE_W         1
+
+#define SXE2_RX_CTXT_LOW_DESC_LINE_S          6
+#define SXE2_RX_CTXT_LOW_DESC_LINE_W          3
+
+#define SXE2_RX_CTXT_VF_ID_S                  9
+#define SXE2_RX_CTXT_VF_ID_W                  8
+
+#define SXE2_RX_CTXT_PF_ID_S                  17
+#define SXE2_RX_CTXT_PF_ID_W                  3
+
+#define SXE2_RX_CTXT_VF_ENABLE_S              20
+#define SXE2_RX_CTXT_VF_ENABLE_W              1
+
+#define SXE2_RX_CTXT_VSI_ID_S                 21
+#define SXE2_RX_CTXT_VSI_ID_W                 10
+
+#define SXE2_PF_CTRLQ_FW_BASE      0x00312000
+#define SXE2_PF_CTRLQ_FW_ATQBAL (SXE2_PF_CTRLQ_FW_BASE + 0x0000)
+#define SXE2_PF_CTRLQ_FW_ARQBAL (SXE2_PF_CTRLQ_FW_BASE + 0x0080)
+#define SXE2_PF_CTRLQ_FW_ATQBAH (SXE2_PF_CTRLQ_FW_BASE + 0x0100)
+#define SXE2_PF_CTRLQ_FW_ARQBAH (SXE2_PF_CTRLQ_FW_BASE + 0x0180)
+#define SXE2_PF_CTRLQ_FW_ATQLEN (SXE2_PF_CTRLQ_FW_BASE + 0x0200)
+#define SXE2_PF_CTRLQ_FW_ARQLEN (SXE2_PF_CTRLQ_FW_BASE + 0x0280)
+#define SXE2_PF_CTRLQ_FW_ATQH   (SXE2_PF_CTRLQ_FW_BASE + 0x0300)
+#define SXE2_PF_CTRLQ_FW_ARQH   (SXE2_PF_CTRLQ_FW_BASE + 0x0380)
+#define SXE2_PF_CTRLQ_FW_ATQT   (SXE2_PF_CTRLQ_FW_BASE + 0x0400)
+#define SXE2_PF_CTRLQ_FW_ARQT   (SXE2_PF_CTRLQ_FW_BASE + 0x0480)
+
+#define SXE2_PF_CTRLQ_MBX_BASE      0x00316000
+#define SXE2_PF_CTRLQ_MBX_ATQBAL (SXE2_PF_CTRLQ_MBX_BASE + 0xE100)
+#define SXE2_PF_CTRLQ_MBX_ATQBAH (SXE2_PF_CTRLQ_MBX_BASE + 0xE180)
+#define SXE2_PF_CTRLQ_MBX_ATQLEN (SXE2_PF_CTRLQ_MBX_BASE + 0xE200)
+#define SXE2_PF_CTRLQ_MBX_ATQH   (SXE2_PF_CTRLQ_MBX_BASE + 0xE280)
+#define SXE2_PF_CTRLQ_MBX_ATQT   (SXE2_PF_CTRLQ_MBX_BASE + 0xE300)
+#define SXE2_PF_CTRLQ_MBX_ARQBAL (SXE2_PF_CTRLQ_MBX_BASE + 0xE380)
+#define SXE2_PF_CTRLQ_MBX_ARQBAH (SXE2_PF_CTRLQ_MBX_BASE + 0xE400)
+#define SXE2_PF_CTRLQ_MBX_ARQLEN (SXE2_PF_CTRLQ_MBX_BASE + 0xE480)
+#define SXE2_PF_CTRLQ_MBX_ARQH   (SXE2_PF_CTRLQ_MBX_BASE + 0xE500)
+#define SXE2_PF_CTRLQ_MBX_ARQT   (SXE2_PF_CTRLQ_MBX_BASE + 0xE580)
+
+#define SXE2_CMD_REG_LEN_M      0x3FF
+#define SXE2_CMD_REG_LEN_VFE_M  BIT(28)
+#define SXE2_CMD_REG_LEN_OVFL_M BIT(29)
+#define SXE2_CMD_REG_LEN_CRIT_M BIT(30)
+#define SXE2_CMD_REG_LEN_ENABLE_M  BIT(31)
+
+#define SXE2_CMD_REG_HEAD_M     0x3FF
+
+#define SXE2_PF_CTRLQ_FW_HW_STS (SXE2_PF_CTRLQ_FW_BASE + 0x0500)
+#define SXE2_PF_CTRLQ_FW_ATQ_IDLE_MASK BIT(0)
+#define SXE2_PF_CTRLQ_FW_ARQ_IDLE_MASK BIT(1)
+
+#define SXE2_TOP_CFG_BASE      0x00292000
+#define SXE2_HW_VER (SXE2_TOP_CFG_BASE + 0x48c)
+#define	SXE2_HW_FPGA_VER_M	SXE2_BITS_MASK(0xFFF, 0)
+
+#define SXE2_FW_VER (SXE2_TOP_CFG_BASE + 0x214)
+#define	SXE2_FW_VER_BUILD_M	SXE2_BITS_MASK(0xFF, 0)
+#define	SXE2_FW_VER_FIX_M	SXE2_BITS_MASK(0xFF, 8)
+#define	SXE2_FW_VER_SUB_M	SXE2_BITS_MASK(0xFF, 16)
+#define	SXE2_FW_VER_MAIN_M	SXE2_BITS_MASK(0xFF, 24)
+#define	SXE2_FW_VER_FIX_SHIFT	(8)
+#define	SXE2_FW_VER_SUB_SHIFT	(16)
+#define	SXE2_FW_VER_MAIN_SHIFT	(24)
+
+#define SXE2_FW_COMP_VER_ADDR (SXE2_TOP_CFG_BASE + 0x20c)
+
+#define SXE2_STATUS SXE2_FW_VER
+
+#define SXE2_FW_STATE     (SXE2_TOP_CFG_BASE + 0x210)
+
+#define SXE2_FW_HEARTBEAT (SXE2_TOP_CFG_BASE + 0x218)
+
+#define SXE2_FW_MISC (SXE2_TOP_CFG_BASE + 0x21c)
+#define	SXE2_FW_MISC_MODE_M	SXE2_BITS_MASK(0xF, 0)
+#define	SXE2_FW_MISC_POP_M	SXE2_BITS_MASK(0x80000000, 0)
+
+#define SXE2_TX_OE_BASE		0x00030000
+#define SXE2_RX_OE_BASE		0x00050000
+
+#define SXE2_PFP_L2TAGSEN(_i)	(SXE2_TX_OE_BASE + 0x00300 + ((_i) * 4))
+#define SXE2_VSI_L2TAGSTXVALID(_i)	\
+	(SXE2_TX_OE_BASE + 0x01000 + ((_i) * 4))
+#define SXE2_VSI_TIR0(_i)		(SXE2_TX_OE_BASE + 0x01C00 + ((_i) * 4))
+#define SXE2_VSI_TIR1(_i)		(SXE2_TX_OE_BASE + 0x02800 + ((_i) * 4))
+#define SXE2_VSI_TAR(_i)		(SXE2_TX_OE_BASE + 0x04C00 + ((_i) * 4))
+#define SXE2_VSI_TSR(_i)		(SXE2_RX_OE_BASE + 0x18000 + ((_i) * 4))
+
+#define SXE2_STATS_TX_LAN_CONFIG(_i)			(SXE2_TX_OE_BASE + 0x08300 + ((_i) * 4))
+#define SXE2_STATS_TX_LAN_PKT_CNT_GET(_i)		(SXE2_TX_OE_BASE + 0x08340 + ((_i) * 4))
+#define SXE2_STATS_TX_LAN_BYTE_CNT_GET(_i)		(SXE2_TX_OE_BASE + 0x08380 + ((_i) * 4))
+
+#define SXE2_STATS_RX_CONFIG(_i)	(SXE2_RX_OE_BASE + 0x230B0 + ((_i) * 4))
+#define SXE2_STATS_RX_LAN_PKT_CNT_GET(_i)	(SXE2_RX_OE_BASE + 0x230C0 + ((_i) * 8))
+#define SXE2_STATS_RX_LAN_BYTE_CNT_GET(_i)	(SXE2_RX_OE_BASE + 0x23120 + ((_i) * 8))
+#define SXE2_STATS_RX_FD_PKT_CNT_GET(_i)	(SXE2_RX_OE_BASE + 0x230E0 + ((_i) * 8))
+#define SXE2_STATS_RX_MNG_IN_PKT_CNT_GET(_i)	(SXE2_RX_OE_BASE + 0x23100 + ((_i) * 8))
+#define SXE2_STATS_RX_MNG_IN_BYTE_CNT_GET(_i)	(SXE2_RX_OE_BASE + 0x23140 + ((_i) * 8))
+#define SXE2_STATS_RX_MNG_OUT_PKT_CNT_GET(_i)	(SXE2_RX_OE_BASE + 0x23160 + ((_i) * 8))
+
+#define SXE2_L2TAG_ID_STAG		0
+#define SXE2_L2TAG_ID_OUT_VLAN1	1
+#define SXE2_L2TAG_ID_OUT_VLAN2	2
+#define SXE2_L2TAG_ID_VLAN		3
+
+#define SXE2_PFP_L2TAGSEN_ALL_TAG	0xFF
+#define SXE2_PFP_L2TAGSEN_DVM		BIT(10)
+
+#define SXE2_VSI_TSR_STRIP_TAG_S	0
+#define SXE2_VSI_TSR_SHOW_TAG_S	4
+
+#define SXE2_VSI_TSR_ID_STAG		BIT(0)
+#define SXE2_VSI_TSR_ID_OUT_VLAN1	BIT(1)
+#define SXE2_VSI_TSR_ID_OUT_VLAN2	BIT(2)
+#define SXE2_VSI_TSR_ID_VLAN		BIT(3)
+
+#define SXE2_VSI_L2TAGSTXVALID_L2TAG1_ID_S	0
+#define SXE2_VSI_L2TAGSTXVALID_L2TAG1_ID_M	0x7
+#define SXE2_VSI_L2TAGSTXVALID_L2TAG1_VALID	BIT(3)
+#define SXE2_VSI_L2TAGSTXVALID_L2TAG2_ID_S	4
+#define SXE2_VSI_L2TAGSTXVALID_L2TAG2_ID_M	0x7
+#define SXE2_VSI_L2TAGSTXVALID_L2TAG2_VALID	BIT(7)
+#define SXE2_VSI_L2TAGSTXVALID_TIR0_ID_S	16
+#define SXE2_VSI_L2TAGSTXVALID_TIR0_VALID	BIT(19)
+#define SXE2_VSI_L2TAGSTXVALID_TIR1_ID_S	20
+#define SXE2_VSI_L2TAGSTXVALID_TIR1_VALID	BIT(23)
+
+#define SXE2_VSI_L2TAGSTXVALID_ID_STAG		0
+#define SXE2_VSI_L2TAGSTXVALID_ID_OUT_VLAN1	2
+#define SXE2_VSI_L2TAGSTXVALID_ID_OUT_VLAN2	3
+#define SXE2_VSI_L2TAGSTXVALID_ID_VLAN		4
+
+#define SXE2_SWITCH_OG_BASE		0x00140000
+#define SXE2_SWITCH_SWE_BASE		0x00150000
+#define SXE2_SWITCH_RG_BASE		0x00160000
+
+#define SXE2_VSI_RX_SWITCH_CTRL(_i)	(SXE2_SWITCH_RG_BASE + 0x01074 + ((_i) * 4))
+#define SXE2_VSI_TX_SWITCH_CTRL(_i)	(SXE2_SWITCH_RG_BASE + 0x01C74 + ((_i) * 4))
+
+#define SXE2_VSI_RX_SW_CTRL_VLAN_PRUNE	BIT(9)
+
+#define SXE2_VSI_TX_SW_CTRL_LOOPBACK_EN	BIT(1)
+#define SXE2_VSI_TX_SW_CTRL_LAN_EN		BIT(2)
+#define SXE2_VSI_TX_SW_CTRL_MACAS_EN		BIT(3)
+#define SXE2_VSI_TX_SW_CTRL_VLAN_PRUNE		BIT(9)
+
+#define SXE2_VSI_TAR_UNTAGGED_SHIFT		(16)
+
+#define SXE2_PCIE_SYS_READY                    0x38c
+#define SXE2_PCIE_SYS_READY_CORER_ASSERT       BIT(0)
+#define SXE2_PCIE_SYS_READY_STOP_DROP_DONE     BIT(2)
+#define SXE2_PCIE_SYS_READY_R5                 BIT(3)
+#define SXE2_PCIE_SYS_READY_STOP_DROP          BIT(16)
+
+#define SXE2_PCIE_DEV_CTRL_DEV_STATUS               0x78
+#define SXE2_PCIE_DEV_CTRL_DEV_STATUS_TRANS_PENDING BIT(21)
+
+#define SXE2_TOP_CFG_CORE            (SXE2_TOP_CFG_BASE + 0x0630)
+#define SXE2_TOP_CFG_CORE_RST_CODE   0x09FBD586
+
+#define SXE2_PFGEN_CTRL       (0x00336000)
+#define SXE2_PFGEN_CTRL_PFSWR BIT(0)
+
+#define SXE2_VFGEN_CTRL(_vf)       (0x00337000 + ((_vf) * 4))
+#define SXE2_VFGEN_CTRL_VFSWR      BIT(0)
+
+#define SXE2_VF_VRC_VFGEN_RSTAT(_vf)        (0x00338000 + (_vf)*4)
+#define SXE2_VF_VRC_VFGEN_VFRSTAT           (0x3)
+#define SXE2_VF_VRC_VFGEN_VFRSTAT_VFR       (0)
+#define SXE2_VF_VRC_VFGEN_VFRSTAT_COMPLETE  (BIT(0))
+#define SXE2_VF_VRC_VFGEN_VFRSTAT_VF_ACTIVE (BIT(1))
+#define SXE2_VF_VRC_VFGEN_VFRSTAT_MASK (BIT(2))
+#define SXE2_VF_VRC_VFGEN_VFRSTAT_FORVF (0x300)
+#define SXE2_VF_VRC_VFGEN_VFRSTAT_FORVF_NO_VFR (0)
+#define SXE2_VF_VRC_VFGEN_VFRSTAT_FORVF_VFR (1)
+#define SXE2_VF_VRC_VFGEN_VFRSTAT_FORVF_MASK (BIT(10))
+
+#define SXE2_GLGEN_VFLRSTAT(_reg) (0x0033A000 + ((_reg)*4))
+
+#define SXE2_ACCEPT_RULE_TAGGED_S      0
+#define SXE2_ACCEPT_RULE_UNTAGGED_S    16
+
+#define SXE2_VF_RXQ_BASE(_VF)			(0x000b0800 + ((_VF) * 4))
+#define SXE2_VF_RXQ_BASE_FIRST_Q_S		0
+#define SXE2_VF_RXQ_BASE_FIRST_Q_M		(0x7FF << SXE2_VF_RXQ_BASE_FIRST_Q_S)
+#define SXE2_VF_RXQ_BASE_Q_NUM_S		16
+#define SXE2_VF_RXQ_BASE_Q_NUM_M		(0x7FF << SXE2_VF_RXQ_BASE_Q_NUM_S)
+
+#define SXE2_VF_RXQ_MAPENA(_VF)		(0x000b0400 + ((_VF) * 4))
+#define SXE2_VF_RXQ_MAPENA_M		        BIT(0)
+
+#define SXE2_VF_TXQ_BASE(_VF)			(0x00040400 + ((_VF) * 4))
+#define SXE2_VF_TXQ_BASE_FIRST_Q_S		0
+#define SXE2_VF_TXQ_BASE_FIRST_Q_M		(0x3FFF << SXE2_VF_TXQ_BASE_FIRST_Q_S)
+#define SXE2_VF_TXQ_BASE_Q_NUM_S		16
+#define SXE2_VF_TXQ_BASE_Q_NUM_M		(0xFF << SXE2_VF_TXQ_BASE_Q_NUM_S)
+
+#define SXE2_VF_TXQ_MAPENA(_VF)		(0x00045000 + ((_VF) * 4))
+#define SXE2_VF_TXQ_MAPENA_M		        BIT(0)
+
+#define PRI_PTP_BASEADDR 0x2a8000
+
+#define GLTSYN (PRI_PTP_BASEADDR + 0x0)
+#define GLTSYN_ENA_M BIT(0)
+
+#define GLTSYN_CMD (PRI_PTP_BASEADDR + 0x4)
+#define GLTSYN_CMD_INIT_TIME 0x01
+#define GLTSYN_CMD_INIT_INCVAL 0x02
+#define GLTSYN_CMD_ADJ_TIME 0x04
+#define GLTSYN_CMD_ADJ_TIME_AT_TIME 0x0C
+#define GLTSYN_CMD_LATCHING_SHTIME 0x80
+
+#define GLTSYN_SYNC (PRI_PTP_BASEADDR + 0x8)
+#define GLTSYN_SYNC_PLUS_1NS 0x1
+#define GLTSYN_SYNC_MINUS_1NS 0x2
+#define GLTSYN_SYNC_EXEC 0x3
+#define GLTSYN_SYNC_GEN_PULSE 0x4
+
+#define GLTSYN_SEM (PRI_PTP_BASEADDR + 0xC)
+#define GLTSYN_SEM_BUSY_M BIT(0)
+
+#define GLTSYN_STAT (PRI_PTP_BASEADDR + 0x10)
+#define GLTSYN_STAT_EVENT0_M			BIT(0)
+#define GLTSYN_STAT_EVENT1_M			BIT(1)
+#define GLTSYN_STAT_EVENT2_M			BIT(2)
+
+#define GLTSYN_TIME_SUBNS (PRI_PTP_BASEADDR + 0x20)
+#define GLTSYN_TIME_NS (PRI_PTP_BASEADDR + 0x24)
+#define GLTSYN_TIME_S_H (PRI_PTP_BASEADDR + 0x28)
+#define GLTSYN_TIME_S_L (PRI_PTP_BASEADDR + 0x2C)
+
+#define GLTSYN_SHTIME_SUBNS (PRI_PTP_BASEADDR + 0x30)
+#define GLTSYN_SHTIME_NS (PRI_PTP_BASEADDR + 0x34)
+#define GLTSYN_SHTIME_S_H (PRI_PTP_BASEADDR + 0x38)
+#define GLTSYN_SHTIME_S_L (PRI_PTP_BASEADDR + 0x3C)
+
+#define GLTSYN_SHADJ_SUBNS (PRI_PTP_BASEADDR + 0x40)
+#define GLTSYN_SHADJ_NS (PRI_PTP_BASEADDR + 0x44)
+
+#define GLTSYN_INCVAL_NS (PRI_PTP_BASEADDR + 0x50)
+#define GLTSYN_INCVAL_SUBNS (PRI_PTP_BASEADDR + 0x54)
+
+#define GLTSYN_TGT_NS(_i) \
+	(PRI_PTP_BASEADDR + 0x60 + ((_i) * 16))
+#define GLTSYN_TGT_S_H(_i) (PRI_PTP_BASEADDR + 0x64 + ((_i) * 16))
+#define GLTSYN_TGT_S_L(_i) (PRI_PTP_BASEADDR + 0x68 + ((_i) * 16))
+
+#define GLTSYN_EVENT_NS(_i) \
+	(PRI_PTP_BASEADDR + 0xA0 + ((_i) * 16))
+
+#define GLTSYN_EVENT_S_H(_i) (PRI_PTP_BASEADDR + 0xA4 + ((_i) * 16))
+#define GLTSYN_EVENT_S_H_MASK (0xFFFF)
+
+#define GLTSYN_EVENT_S_L(_i) (PRI_PTP_BASEADDR + 0xA8 + ((_i) * 16))
+
+#define GLTSYN_AUXOUT(_i) \
+	(PRI_PTP_BASEADDR + 0xD0 + ((_i) * 4))
+#define GLTSYN_AUXOUT_OUT_ENA BIT(0)
+#define GLTSYN_AUXOUT_OUT_MOD (0x03 << 1)
+#define GLTSYN_AUXOUT_OUTLVL BIT(3)
+#define GLTSYN_AUXOUT_INT_ENA BIT(4)
+#define GLTSYN_AUXOUT_PULSEW (0x1fff << 3)
+
+#define GLTSYN_CLKO(_i) \
+	(PRI_PTP_BASEADDR + 0xE0 + ((_i) * 4))
+
+#define GLTSYN_AUXIN(_i) (PRI_PTP_BASEADDR + 0xF4 + ((_i) * 4))
+#define GLTSYN_AUXIN_RISING_EDGE BIT(0)
+#define GLTSYN_AUXIN_FALLING_EDGE BIT(1)
+#define GLTSYN_AUXIN_ENABLE BIT(4)
+
+#define CGMAC_CSR_BASE 0x2B4000
+
+#define CGMAC_PORT_OFFSET         0x00004000
+
+#define PFP_CGM_TX_TSMEM(_port, _i)        \
+	(CGMAC_CSR_BASE + 0x100 + \
+	 + CGMAC_PORT_OFFSET * _port + ((_i) * 4))
+
+#define PFP_CGM_TX_TXHI(_port, _i) (CGMAC_CSR_BASE + CGMAC_PORT_OFFSET * _port + 0x108 + ((_i) * 8))
+#define PFP_CGM_TX_TXLO(_port, _i) (CGMAC_CSR_BASE + CGMAC_PORT_OFFSET * _port + 0x10C + ((_i) * 8))
+
+#define CGMAC_CSR_MAC0_OFFSET 0x2B4000
+#define CGMAC_CSR_MAC_OFFSET(_i) (CGMAC_CSR_MAC0_OFFSET + ((_i) * 0x4000))
+
+#define PFP_CGM_MAC_TX_TSMEM(_phy, _i)        \
+	(CGMAC_CSR_MAC_OFFSET(_phy) + 0x100 + \
+	 ((_i) * 4))
+
+#define PFP_CGM_MAC_TX_TXHI(_phy, _i) (CGMAC_CSR_MAC_OFFSET(_phy) + 0x108 + ((_i) * 8))
+#define PFP_CGM_MAC_TX_TXLO(_phy, _i) (CGMAC_CSR_MAC_OFFSET(_phy) + 0x10C + ((_i) * 8))
+
+#define SXE2_VF_GLINT_CEQCTL_MSIX_INDX_M	SXE2_BITS_MASK(0x7FF, 0)
+#define SXE2_VF_GLINT_CEQCTL_ITR_INDX_S	11
+#define SXE2_VF_GLINT_CEQCTL_ITR_INDX_M	SXE2_BITS_MASK(0x3, 11)
+#define SXE2_VF_GLINT_CEQCTL_CAUSE_ENA_M	BIT(30)
+#define SXE2_VF_GLINT_CEQCTL(_INT)			(0x0026492C + ((_INT) * 4))
+
+#define SXE2_VF_PFINT_AEQCTL_MSIX_INDX_M	SXE2_BITS_MASK(0x7FF, 0)
+#define SXE2_VF_VPINT_AEQCTL_ITR_INDX_S	11
+#define SXE2_VF_VPINT_AEQCTL_ITR_INDX_M	SXE2_BITS_MASK(0x3, 11)
+#define SXE2_VF_VPINT_AEQCTL_CAUSE_ENA_M	BIT(30)
+#define SXE2_VF_VPINT_AEQCTL(_VF)			(0x0026052c + ((_VF) * 4))
+
+#define SXE2_IPSEC_TX_BASE (0x2A0000)
+#define SXE2_IPSEC_RX_BASE (0x2A2000)
+
+#define SXE2_IPSEC_RX_IPSIDX_ADDR (SXE2_IPSEC_RX_BASE + 0x0084)
+#define SXE2_IPSEC_RX_IPSIDX_RST (0x00040000)
+#define SXE2_IPSEC_RX_IPSIDX_VBI_SHIFT (18)
+#define SXE2_IPSEC_RX_IPSIDX_VBI_MASK (0x00040000)
+#define SXE2_IPSEC_RX_IPSIDX_SWRITE_SHIFT (17)
+#define SXE2_IPSEC_RX_IPSIDX_SWRITE_MASK (0x00020000)
+#define SXE2_IPSEC_RX_IPSIDX_SA_IDX_SHIFT (4)
+#define SXE2_IPSEC_RX_IPSIDX_SA_IDX_MASK (0x0000fff0)
+#define SXE2_IPSEC_RX_IPSIDX_TABLE_SHIFT (2)
+#define SXE2_IPSEC_RX_IPSIDX_TABLE_MASK (0x0000000c)
+
+#define SXE2_IPSEC_RX_IPSIPID_ADDR (SXE2_IPSEC_RX_BASE + 0x0088)
+#define SXE2_IPSEC_RX_IPSIPID_IP_ID_X_SHIFT (0)
+#define SXE2_IPSEC_RX_IPSIPID_IP_ID_X_MASK (0x000000ff)
+
+#define SXE2_IPSEC_RX_IPSSPI0_ADDR (SXE2_IPSEC_RX_BASE + 0x008c)
+#define SXE2_IPSEC_RX_IPSSPI0_SPI_X_SHIFT (0)
+#define SXE2_IPSEC_RX_IPSSPI0_SPI_X_MASK (0xffffffff)
+
+#define SXE2_IPSEC_RX_IPSSPI1_ADDR (SXE2_IPSEC_RX_BASE + 0x0090)
+#define SXE2_IPSEC_RX_IPSSPI1_SPI_Y_MASK (0xffffffff)
+
+#define SXE2_PAUSE_STATS_BASE(port)		(0x002b2000 + port * 0x4000)
+#define SXE2_TXPAUSEXONFRAMES_LO(port)	(SXE2_PAUSE_STATS_BASE(port) + 0x0894)
+#define SXE2_TXPAUSEXOFFFRAMES_LO(port)	(SXE2_PAUSE_STATS_BASE(port) + 0x0a18)
+#define SXE2_TXPFCXONFRAMES_LO(port, pri)	(SXE2_PAUSE_STATS_BASE(port) + \
+						(0x0a20 + 8 * (pri)))
+#define SXE2_TXPFCXOFFFRAMES_LO(port, pri)	(SXE2_PAUSE_STATS_BASE(port) + \
+						(0x0a60 + 8 * (pri)))
+#define SXE2_TXPFCXONTOXOFFFRAMES_LO(port, pri)	(SXE2_PAUSE_STATS_BASE(port) + \
+							(0x0aa0 + 8 * (pri)))
+#define SXE2_RXPAUSEXONFRAMES_LO(port)	(SXE2_PAUSE_STATS_BASE(port) + 0x0988)
+#define SXE2_RXPAUSEXOFFFRAMES_LO(port)	(SXE2_PAUSE_STATS_BASE(port) + 0x0b28)
+#define SXE2_RXPFCXONFRAMES_LO(port, pri)	(SXE2_PAUSE_STATS_BASE(port) + \
+						(0x0b30 + 8 * (pri)))
+#define SXE2_RXPFCXOFFFRAMES_LO(port, pri)	(SXE2_PAUSE_STATS_BASE(port) + \
+						(0x0b70 + 8 * (pri)))
+
+#endif
diff --git a/drivers/common/sxe2/sxe2_internal_ver.h b/drivers/common/sxe2/sxe2_internal_ver.h
new file mode 100644
index 0000000000..92f49e7a20
--- /dev/null
+++ b/drivers/common/sxe2/sxe2_internal_ver.h
@@ -0,0 +1,33 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (C), 2025, Wuxi Stars Micro System Technologies Co., Ltd.
+ */
+
+#ifndef __SXE2_INTERNAL_VER_H__
+#define __SXE2_INTERNAL_VER_H__
+
+#define SXE2_VER_MAJOR_OFFSET (16)
+#define SXE2_MK_VER(major, minor) \
+	(major << SXE2_VER_MAJOR_OFFSET | minor)
+#define SXE2_MK_VER_MAJOR(ver) (((ver) >> SXE2_VER_MAJOR_OFFSET) & 0xff)
+#define SXE2_MK_VER_MINOR(ver) ((ver) & 0xff)
+
+#define SXE2_ITR_VER_MAJOR_V100    1
+#define SXE2_ITR_VER_MAJOR_V200    2
+
+#define SXE2_ITR_VER_MAJOR      1
+#define SXE2_ITR_VER_MINOR      1
+#define SXE2_ITR_VER SXE2_MK_VER(SXE2_ITR_VER_MAJOR, SXE2_ITR_VER_MINOR)
+
+#define SXE2_CTRL_VER_IS_V100(ver)  (SXE2_MK_VER_MAJOR(ver) == SXE2_ITR_VER_MAJOR_V100)
+#define SXE2_CTRL_VER_IS_V200(ver)  (SXE2_MK_VER_MAJOR(ver) == SXE2_ITR_VER_MAJOR_V200)
+
+#define SXE2LIB_ITR_VER_MAJOR      1
+#define SXE2LIB_ITR_VER_MINOR      1
+#define SXE2LIB_ITR_VER     SXE2_MK_VER(SXE2LIB_ITR_VER_MAJOR, SXE2LIB_ITR_VER_MINOR)
+
+#define SXE2_DRV_CLI_VER_MAJOR      1
+#define SXE2_DRV_CLI_VER_MINOR      1
+#define SXE2_DRV_CLI_VER \
+	SXE2_MK_VER(SXE2_DRV_CLI_VER_MAJOR, SXE2_DRV_CLI_VER_MINOR)
+
+#endif /* __SXE2_INTERNAL_VER_H__ */
diff --git a/drivers/common/sxe2/sxe2_osal.h b/drivers/common/sxe2/sxe2_osal.h
new file mode 100644
index 0000000000..930498f3c2
--- /dev/null
+++ b/drivers/common/sxe2/sxe2_osal.h
@@ -0,0 +1,152 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright (C), 2025, Wuxi Stars Micro System Technologies Co., Ltd.
+ */
+
+#ifndef __SXE2_OSAL_H__
+#define __SXE2_OSAL_H__
+#include <string.h>
+#include <stdint.h>
+#include <stdarg.h>
+#include <inttypes.h>
+#include <stdbool.h>
+
+#include <rte_common.h>
+#include <rte_cycles.h>
+#include <rte_malloc.h>
+#include <rte_ether.h>
+#include <rte_version.h>
+#include <rte_bitops.h>
+
+#ifndef __BITS_PER_LONG
+#define __BITS_PER_LONG   (__SIZEOF_LONG__ * 8)
+#endif
+#define BIT_WORD(nr)      ((nr) / __BITS_PER_LONG)
+#define BIT_MASK(nr)      (1UL << ((nr) % __BITS_PER_LONG))
+
+#ifndef TAILQ_FOREACH_SAFE
+#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \
+	for ((var) = TAILQ_FIRST((head)); \
+		(var) && ((tvar) = TAILQ_NEXT((var), field), 1); \
+		(var) = (tvar))
+#endif
+
+#define upper_32_bits(n) ((uint32_t)(((n) >> 16) >> 16))
+#define lower_32_bits(n) ((uint32_t)((n) & 0xffffffff))
+
+#ifndef SXE2_DIV_ROUND_UP
+#define SXE2_DIV_ROUND_UP(n, d) \
+			(((n) + (typeof(n))(d) - (typeof(n))1) / (typeof(n))(d))
+#endif
+
+enum sxe2_itr_idx {
+	SXE2_ITR_IDX_0 = 0,
+	SXE2_ITR_IDX_1,
+	SXE2_ITR_IDX_2,
+	SXE2_ITR_IDX_NONE,
+};
+
+#define SXE2_ETH_ALEN 6
+#define SXE2_BITS_PER_BYTE 8
+#define BITS_TO_LONGS(nr) SXE2_DIV_ROUND_UP(nr, SXE2_BITS_PER_BYTE * sizeof(unsigned long))
+#define BITS_TO_U32(nr) SXE2_DIV_ROUND_UP(nr, 32)
+
+#define BITMAP_LAST_WORD_MASK(nbits) (~0UL >> (-(nbits) & (__BITS_PER_LONG - 1)))
+
+#define DECLARE_BITMAP(name, bits) \
+				unsigned long name[BITS_TO_LONGS(bits)]
+#define BITMAP_TYPE unsigned long
+
+static inline void sxe2_set_bit(uint32_t nr, unsigned long *addr)
+{
+	addr[nr / __BITS_PER_LONG] |= 1UL << (nr % __BITS_PER_LONG);
+}
+
+static inline void sxe2_clear_bit(uint32_t nr, unsigned long *addr)
+{
+	addr[nr / __BITS_PER_LONG] &= ~(1UL << (nr % __BITS_PER_LONG));
+}
+
+static inline uint32_t sxe2_test_bit(uint32_t nr, const unsigned long *addr)
+{
+	return 1UL & (addr[BIT_WORD(nr)] >> (nr & (__BITS_PER_LONG-1)));
+}
+
+static inline uint32_t sxe2_bitmap_weight(const unsigned long *src, uint32_t nbits)
+{
+	uint32_t cnt = 0;
+	uint16_t i;
+
+	for (i = 0; i < nbits; i++) {
+		if (sxe2_test_bit(i, src))
+			cnt++;
+	}
+	return cnt;
+}
+
+static inline bool sxe2_bitmap_empty(const unsigned long *src, uint32_t nbits)
+{
+	uint16_t i;
+
+	for (i = 0; i < nbits; i++) {
+		if (sxe2_test_bit(i, src))
+			return false;
+	}
+	return true;
+}
+
+static inline void sxe2_bitmap_zero(unsigned long *dst, uint32_t nbits)
+{
+	uint32_t len = BITS_TO_LONGS(nbits) * sizeof(unsigned long);
+	memset(dst, 0, len);
+}
+
+static inline void sxe2_bitmap_copy(unsigned long *dst, const unsigned long *src,
+			uint32_t nbits)
+{
+	uint32_t len = BITS_TO_LONGS(nbits) * sizeof(unsigned long);
+	memcpy(dst, src, len);
+}
+
+#define sxe2_small_const_nbits(nbits) \
+	((nbits) && (nbits) <= __BITS_PER_LONG && (nbits) > 0)
+
+#define SXE2_BITMAP_LAST_WORD_MASK(nbits) \
+	(((nbits) % __BITS_PER_LONG) ? \
+	 ((1UL << ((nbits) % __BITS_PER_LONG)) - 1UL) : ~0UL)
+
+static inline bool
+__sxe2_bitmap_equal_generic(const unsigned long *src1,
+			    const unsigned long *src2, uint32_t nbits)
+{
+	uint32_t i;
+	uint32_t words = nbits / __BITS_PER_LONG;
+	uint32_t trailing = nbits % __BITS_PER_LONG;
+
+	for (i = 0; i < words; i++) {
+		if (src1[i] != src2[i])
+			return false;
+	}
+
+	if (trailing) {
+		unsigned long mask = (1UL << trailing) - 1UL;
+		if ((src1[words] & mask) != (src2[words] & mask))
+			return false;
+	}
+
+	return true;
+}
+
+static inline bool
+sxe2_bitmap_equal(const unsigned long *src1,
+		  const unsigned long *src2, uint32_t nbits)
+{
+	if (sxe2_small_const_nbits(nbits))
+		return !((*src1 ^ *src2) & SXE2_BITMAP_LAST_WORD_MASK(nbits));
+
+	if (__rte_constant(nbits & 7) && (nbits % 8 == 0))
+		return !memcmp(src1, src2, nbits / 8);
+
+	return __sxe2_bitmap_equal_generic(src1, src2, nbits);
+}
+
+#endif /* __SXE2_OSAL_H__ */
-- 
2.47.3


^ permalink raw reply related

* Re: [PATCH v18 00/11] net/sxe2: fix logic errors and address feedback
From: Stephen Hemminger @ 2026-05-20  0:32 UTC (permalink / raw)
  To: liujie5; +Cc: dev
In-Reply-To: <20260519144810.3951202-1-liujie5@linkdatatechnology.com>

On Tue, 19 May 2026 22:47:59 +0800
liujie5@linkdatatechnology.com wrote:

> From: Jie Liu <liujie5@linkdatatechnology.com>
> 
> This patch set addresses the feedback received on the v10 submission
> for the sxe2 PMD. The primary focus is on fixing vector path selection,
> ensuring memory safety during mbuf initialization, and cleaning up
> redundant logic in the configuration functions.

Great a couple more things to address before merge.

Review of [PATCH v18 00/11] sxe2 PMD
====================================

The v17 addendum issues are addressed in v18:

  - sxe2.ini features matrix now matches what the code advertises.
    VLAN offload, QinQ offload, Timestamp offload, Inner L3
    checksum, Inner L4 checksum, and FreeBSD rows are removed.
    All remaining "Y" / "P" rows correspond to entries in
    {rx,tx}_offload_capa or registered dev_ops callbacks.

  - sxe2_{rx,tx}_desciptor_status renamed to
    sxe2_{rx,tx}_descriptor_status throughout.

One new style issue and one general cleanup request:


Patch 09/11: drivers: add data path for Rx and Tx
-------------------------------------------------

Info: blank line added between function signature and opening
brace.  In the same hunk that renames the function:

  static int32_t sxe2_tx_descriptor_status(void *tx_queue, uint16_t offset)
  +
   {

There should be no blank line between the prototype line and
the body brace.  Looks like an editing artifact in this respin.


All patches: unnecessary (void) casts on void-returning calls
-------------------------------------------------------------

Warning: (void) casts on pthread_mutex_lock / pthread_mutex_unlock.

  (void)pthread_mutex_lock(&cdev->config.lock);
  ...
  (void)pthread_mutex_unlock(&cdev->config.lock);

These calls do return int, but in practice never fail when the
mutex is initialised with pthread_mutex_init(&m, NULL) — the
documented errors (EINVAL, EAGAIN, EDEADLK) all require either
an uninitialised mutex (programmer bug) or non-default
attributes (recursive / error-checking, neither of which is in
use here).  The cast is redundant noise.  Just write:

  pthread_mutex_lock(&cdev->config.lock);
  ...
  pthread_mutex_unlock(&cdev->config.lock);

This is inconsistently applied even within the same file:
sxe2_common_dev_create_by_pci() uses a bare pthread_mutex_unlock()
two lines after a (void)-cast pthread_mutex_lock() on the same
mutex.  Pick one style — bare calls — and apply it everywhere.

DPDK convention for void-returning callers is to call without
the (void) cast (see rte_spinlock_lock / rte_pktmbuf_free
usage across the tree).  The cast adds nothing and visually
clutters the lock/unlock pairs that are already busy enough.
Please drop all of them.

Series hygiene
--------------

The descriptor-status rename should be folded back into the
patch that introduces the function (patch 08), so the function
is correctly named at the commit it first appears.  Currently
patch 08 introduces sxe2_{rx,tx}_descriptor_status (good, fixed
from v17) but patch 09 still touches the function and its
hunks would have been cleaner if no rename was ever needed.  In
this case the fix landed in patch 08 already so it's fine —
just calling out the pattern.

^ permalink raw reply

* [PATCH dpdk v2 2/2] graph: replace circular buffer with priority-based bitmap
From: Robin Jarry @ 2026-05-19 21:38 UTC (permalink / raw)
  To: dev, Jerin Jacob, Kiran Kumar K, Nithin Dabilpuram, Zhirun Yan
  Cc: Vladimir Medvedkin, Christophe Fontaine, David Marchand,
	Konstantin Ananyev, Maxime Leroy
In-Reply-To: <20260519213822.735891-1-rjarry@redhat.com>

Replace the FIFO circular buffer used to track pending nodes with
a bitmap and a priority-sorted schedule table. Each node can have
a scheduling priority (int16_t, default 0, lower value means visited
first). Source nodes are forced to INT16_MIN so they always run first.

At graph creation time, nodes are sorted by (priority, topo_order,
node_id) and assigned a bit position (sched_idx). The topological depth
is computed via BFS from source nodes so that upstream nodes naturally
come before downstream ones, matching the old FIFO behavior when all
priorities are equal.

This enables reduced node visits in fan-out-then-converge topologies. In
the diamond perf test, the branch node has priority -1 so it runs before
the converge node. With the old circular buffer, the converge node is
visited twice at 128 objs/call (~970M objs/sec). With bitmap scheduling,
it is visited once at 256 objs/call (~1064M objs/sec), a ~10% throughput
improvement.

perf stat on a server CPU shows ~7% more instructions executed but ~7%
higher IPC (1.32 vs 1.23), 16% fewer L1 cache misses, and 8% fewer
branch mispredictions. The bitmap (16 bytes for <64 nodes) is more
cache-friendly than the circular buffer (256+ bytes). Net cycle count
and elapsed time are neutral.

Existing linear and tree topologies show no measurable regression.

Update documentation and memory layout diagrams to reflect the new
bitmap and scheduling table system.

Suggested-by: Vladimir Medvedkin <vladimir.medvedkin@intel.com>
Signed-off-by: Robin Jarry <rjarry@redhat.com>
Cc: Christophe Fontaine <cfontain@redhat.com>
Cc: David Marchand <david.marchand@redhat.com>
Cc: Konstantin Ananyev <konstantin.ananyev@huawei.com>
Cc: Maxime Leroy <maxime@leroys.fr>
---
 app/test/test_graph_perf.c                    |   12 +-
 doc/guides/prog_guide/graph_lib.rst           |   37 +-
 .../prog_guide/img/graph_mem_layout.svg       | 1823 +++++++----------
 lib/graph/graph.c                             |   27 +-
 lib/graph/graph_debug.c                       |   12 +-
 lib/graph/graph_ops.c                         |   46 +
 lib/graph/graph_populate.c                    |  119 +-
 lib/graph/graph_private.h                     |   42 +-
 lib/graph/node.c                              |    2 +
 lib/graph/rte_graph.h                         |    1 +
 lib/graph/rte_graph_model_mcore_dispatch.h    |   34 +-
 lib/graph/rte_graph_model_rtc.h               |   65 +-
 lib/graph/rte_graph_worker.h                  |    2 +-
 lib/graph/rte_graph_worker_common.h           |   79 +-
 14 files changed, 1066 insertions(+), 1235 deletions(-)

diff --git a/app/test/test_graph_perf.c b/app/test/test_graph_perf.c
index c509d364b826..8cfae06ef7fc 100644
--- a/app/test/test_graph_perf.c
+++ b/app/test/test_graph_perf.c
@@ -32,6 +32,7 @@ test_graph_perf_func(void)
 #define TEST_GRAPH_SRC_NAME	     "test_graph_perf_source"
 #define TEST_GRAPH_SRC_BRST_ONE_NAME "test_graph_perf_source_one"
 #define TEST_GRAPH_WRK_NAME	     "test_graph_perf_worker"
+#define TEST_GRAPH_WRK_HIPRIO_NAME   "test_graph_perf_worker_hiprio"
 #define TEST_GRAPH_SNK_NAME	     "test_graph_perf_sink"
 
 #define SOURCES(map)	     RTE_DIM(map)
@@ -225,6 +226,15 @@ static struct rte_node_register test_graph_perf_worker = {
 
 RTE_NODE_REGISTER(test_graph_perf_worker);
 
+static struct rte_node_register test_graph_perf_worker_hiprio = {
+	.name = TEST_GRAPH_WRK_HIPRIO_NAME,
+	.process = test_perf_node_worker,
+	.init = test_node_ctx_init,
+	.priority = -1,
+};
+
+RTE_NODE_REGISTER(test_graph_perf_worker_hiprio);
+
 /* Last node in graph a.k.a sink node */
 static uint16_t
 test_perf_node_sink(struct rte_graph *graph, struct rte_node *node, void **objs,
@@ -1083,7 +1093,7 @@ graph_init_diamond(void)
 	fan_out = graph_node_get(TEST_GRAPH_WRK_NAME, "fan");
 	/* converge must be edge 0 from fan_out so FIFO visits it first */
 	converge = graph_node_get(TEST_GRAPH_WRK_NAME, "conv");
-	branch = graph_node_get(TEST_GRAPH_WRK_NAME, "br");
+	branch = graph_node_get(TEST_GRAPH_WRK_HIPRIO_NAME, "br");
 	snk = graph_node_get(TEST_GRAPH_SNK_NAME, "0");
 
 	if (src == RTE_NODE_ID_INVALID || fan_out == RTE_NODE_ID_INVALID ||
diff --git a/doc/guides/prog_guide/graph_lib.rst b/doc/guides/prog_guide/graph_lib.rst
index 8409e7666e85..9c6d8679b686 100644
--- a/doc/guides/prog_guide/graph_lib.rst
+++ b/doc/guides/prog_guide/graph_lib.rst
@@ -117,13 +117,22 @@ next_node[]:
 The dynamic array to store the downstream nodes connected to this node. Downstream
 node should not be current node itself or a source node.
 
+priority:
+^^^^^^^^^
+
+The scheduling priority of the node (``int16_t``, default 0). Nodes with lower
+priority values are visited first during the graph walk. This allows control
+over the order in which pending nodes are processed, which can improve packet
+batching in topologies where multiple paths converge on the same node.
+
 Source node:
 ^^^^^^^^^^^^
 
 Source nodes are static nodes created using ``RTE_NODE_REGISTER`` by passing
 ``flags`` as ``RTE_NODE_SOURCE_F``.
-While performing the graph walk, the ``process()`` function of all the source
-nodes will be called first. So that these nodes can be used as input nodes for a graph.
+Source nodes are automatically assigned the lowest possible priority
+(``INT16_MIN``) so that their ``process()`` function is always called first
+during the graph walk. This ensures they act as input nodes for a graph.
 
 nb_xstats:
 ^^^^^^^^^^
@@ -396,12 +405,26 @@ Graph object memory layout
 Understanding the memory layout helps to debug the graph library and
 improve the performance if needed.
 
-Graph object consists of a header, circular buffer to store the pending stream
-when walking over the graph, variable-length memory to store the ``rte_node`` objects,
-and variable-length memory to store the xstat reported by each ``rte_node``.
+A graph object consists of a header, a scheduling table mapping bit positions to
+node offsets, pending and source bitmaps for tracking which nodes need
+processing, variable-length memory to store the ``rte_node`` objects, and
+variable-length memory to store the xstat reported by each ``rte_node``.
 
-The graph_nodes_mem_create() creates and populate this memory. The functions
-such as ``rte_graph_walk()`` and ``rte_node_enqueue_*`` use this memory
+Nodes are sorted by ``(priority, node_id)`` at graph creation time and each
+node is assigned a bit position in the pending bitmap. During the graph walk,
+the bitmap is scanned from the lowest bit, so nodes with lower priority values
+are visited first. Source nodes are always assigned the lowest priority
+(``INT16_MIN``) to ensure they run before any processing node.
+
+This priority-based ordering improves batching in fan-out-then-converge
+topologies. For example, if ``eth_input`` classifies packets to both
+``mpls_input`` and ``ipv4_input``, giving ``mpls_input`` a lower priority value
+ensures it runs first. Its output accumulates in ``ipv4_input`` which is then
+visited only once with all packets, instead of being visited twice (before and
+after MPLS label popping).
+
+The ``graph_fp_mem_create()`` function creates and populates this memory. The
+functions such as ``rte_graph_walk()`` and ``rte_node_enqueue_*`` use this memory
 to enable fastpath services.
 
 Graph feature arc
diff --git a/doc/guides/prog_guide/img/graph_mem_layout.svg b/doc/guides/prog_guide/img/graph_mem_layout.svg
index 3f3a4f3a808e..853987907dec 100644
--- a/doc/guides/prog_guide/img/graph_mem_layout.svg
+++ b/doc/guides/prog_guide/img/graph_mem_layout.svg
@@ -1,65 +1,22 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
 <!-- SPDX-License-Identifier: BSD-3-Clause -->
+
 <!-- Copyright(C) 2020 Marvell International Ltd. -->
+
 <svg
-   width="960"
-   height="600"
-   viewBox="0 0 960 600"
+   width="820"
+   height="540"
+   viewBox="0 0 819.99998 540"
    version="1.1"
-   id="svg1"
-   inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
+   id="svg56"
    sodipodi:docname="graph_mem_layout.svg"
+   inkscape:version="1.4.4 (dcaf3e7d9e, 2026-05-05)"
    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:svg="http://www.w3.org/2000/svg">
-  <sodipodi:namedview
-     id="namedview1"
-     pagecolor="#ffffff"
-     bordercolor="#000000"
-     borderopacity="0.25"
-     inkscape:showpageshadow="2"
-     inkscape:pageopacity="0.0"
-     inkscape:pagecheckerboard="0"
-     inkscape:deskcolor="#d1d1d1"
-     inkscape:document-units="px"
-     showgrid="true"
-     inkscape:zoom="6.1531386"
-     inkscape:cx="753.51789"
-     inkscape:cy="469.11019"
-     inkscape:window-width="1920"
-     inkscape:window-height="1057"
-     inkscape:window-x="-8"
-     inkscape:window-y="-8"
-     inkscape:window-maximized="1"
-     inkscape:current-layer="layer1">
-    <inkscape:grid
-       id="grid18"
-       units="px"
-       originx="0"
-       originy="0"
-       spacingx="1"
-       spacingy="1"
-       empcolor="#0099e5"
-       empopacity="0.30196078"
-       color="#0099e5"
-       opacity="0.14901961"
-       empspacing="5"
-       dotted="false"
-       gridanglex="30"
-       gridanglez="30"
-       visible="true" />
-  </sodipodi:namedview>
   <defs
-     id="defs1">
-    <rect
-       x="569.30411"
-       y="433.24112"
-       width="99.519047"
-       height="22.294105"
-       id="rect22" />
+     id="defs56">
     <marker
        style="overflow:visible"
        id="Triangle"
@@ -67,8 +24,8 @@
        refY="0"
        orient="auto-start-reverse"
        inkscape:stockid="Triangle arrow"
-       markerWidth="1"
-       markerHeight="1"
+       markerWidth="2"
+       markerHeight="2"
        viewBox="0 0 1 1"
        inkscape:isstock="true"
        inkscape:collect="always"
@@ -79,1065 +36,705 @@
          d="M 5.77,0 -2.88,5 V -5 Z"
          id="path135" />
     </marker>
-    <rect
-       x="656.57551"
-       y="399.79598"
-       width="185.92138"
-       height="16.251869"
-       id="rect19" />
-    <rect
-       x="765.814"
-       y="425.65652"
-       width="104.80528"
-       height="23.902958"
-       id="rect18" />
-    <rect
-       x="650.43626"
-       y="461.97063"
-       width="56.999362"
-       height="17.927219"
-       id="rect16" />
-    <linearGradient
-       id="swatch10"
-       inkscape:swatch="solid">
-      <stop
-         style="stop-color:#090608;stop-opacity:1;"
-         offset="0"
-         id="stop10" />
-    </linearGradient>
-    <rect
-       x="451.39817"
-       y="509.77655"
-       width="136.52266"
-       height="74.007236"
-       id="rect7" />
-    <rect
-       x="334.18174"
-       y="450.01915"
-       width="51.483294"
-       height="22.064269"
-       id="rect6" />
-    <rect
-       x="332.80272"
-       y="483.11556"
-       width="57.918706"
-       height="32.177059"
-       id="rect5" />
-    <rect
-       x="361.3024"
-       y="464.26899"
-       width="133.30496"
-       height="49.644605"
-       id="rect4" />
-    <rect
-       x="155.8289"
-       y="426.57587"
-       width="103.88593"
-       height="13.330496"
-       id="rect2" />
-    <marker
-       style="overflow:visible"
-       id="Triangle-0"
-       refX="0"
-       refY="0"
-       orient="auto-start-reverse"
-       inkscape:stockid="Triangle arrow"
-       markerWidth="1"
-       markerHeight="1"
-       viewBox="0 0 1 1"
-       inkscape:isstock="true"
-       inkscape:collect="always"
-       preserveAspectRatio="xMidYMid">
-      <path
-         transform="scale(0.5)"
-         style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
-         d="M 5.77,0 -2.88,5 V -5 Z"
-         id="path135-2" />
-    </marker>
-    <rect
-       x="656.5755"
-       y="399.79599"
-       width="186.38106"
-       height="37.396793"
-       id="rect19-5" />
   </defs>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1">
-    <path
-       stroke="#1155cc"
-       stroke-width="1.13576"
-       stroke-linecap="butt"
-       d="M 144.20018,75.514867 V 521.03057"
-       fill-rule="nonzero"
-       id="path232" />
-    <path
-       stroke="#1155cc"
-       stroke-width="1.13545"
-       stroke-linecap="butt"
-       d="M 272.64375,75.629785 V 520.91592"
-       fill-rule="nonzero"
-       id="path234" />
-    <path
-       stroke="#1155cc"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="M 143.70149,76.013557 H 273.14244"
-       fill-rule="nonzero"
-       id="path236" />
-    <path
-       stroke="#1155cc"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="M 143.70149,127.21041 H 273.14244"
-       fill-rule="nonzero"
-       id="path238" />
-    <path
-       stroke="#1155cc"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="M 143.70149,180.40726 H 273.14244"
-       fill-rule="nonzero"
-       id="path240" />
-    <path
-       stroke="#1155cc"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="M 143.70149,215.60412 H 273.14244"
-       fill-rule="nonzero"
-       id="path242" />
-    <path
-       stroke="#1155cc"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="M 143.70149,266.80095 H 273.14244"
-       fill-rule="nonzero"
-       id="path244" />
-    <path
-       stroke="#1155cc"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="M 143.70149,317.99782 H 273.14244"
-       fill-rule="nonzero"
-       id="path246" />
-    <path
-       stroke="#1155cc"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="M 143.70149,369.19466 H 273.14244"
-       fill-rule="nonzero"
-       id="path248" />
-    <path
-       stroke="#1155cc"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="M 143.70149,420.3915 H 273.14244"
-       fill-rule="nonzero"
-       id="path250" />
-    <path
-       stroke="#1155cc"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="M 143.59745,445.61126 H 273.0384"
-       fill-rule="nonzero"
-       id="path250-4" />
-    <path
-       stroke="#1155cc"
-       stroke-width="0.998115"
-       stroke-linecap="butt"
-       d="M 143.86386,470.4766 H 272.81725"
-       fill-rule="nonzero"
-       id="path250-4-4" />
-    <path
-       stroke="#1155cc"
-       stroke-width="0.998115"
-       stroke-linecap="butt"
-       d="M 144.33823,495.4898 H 273.29162"
-       fill-rule="nonzero"
-       id="path250-4-4-6" />
-    <path
-       stroke="#1155cc"
-       stroke-width="0.999778"
-       stroke-linecap="butt"
-       d="M 143.81154,520.51707 H 273.19503"
-       fill-rule="nonzero"
-       id="path250-7" />
-    <path
-       fill="#000000"
-       d="m 173.54384,94.079177 v -1.125 l 4.03125,-0.0156 v 3.54688 q -0.92188,0.75 -1.92188,1.125 -0.98437,0.35937 -2.03125,0.35937 -1.40625,0 -2.5625,-0.59375 -1.14062,-0.60937 -1.73437,-1.73437 -0.57813,-1.14063 -0.57813,-2.54688 0,-1.40625 0.57813,-2.60937 0.59375,-1.20313 1.6875,-1.78125 1.09375,-0.59375 2.51562,-0.59375 1.03125,0 1.85938,0.34375 0.84375,0.32812 1.3125,0.9375 0.48437,0.59375 0.73437,1.54687 l -1.14062,0.3125 q -0.21875,-0.71875 -0.53125,-1.14062 -0.3125,-0.42188 -0.90625,-0.67188 -0.59375,-0.25 -1.3125,-0.25 -0.875,0 -1.51563,0.26563 -0.625,0.26562 -1.01562,0.70312 -0.375,0.42188 -0.59375,0.9375 -0.35938,0.875 -0.35938,1.92188 0,1.26562 0.4375,2.125 0.4375,0.85937 1.26563,1.28125 0.84375,0.42187 1.79687,0.42187 0.8125,0 1.59375,-0.3125 0.78125,-0.32812 1.1875,-0.6875 v -1.76562 z m 5.72643,3.73437 v -6.90625 h 1.0625 v 1.04688 q 0.40625,-0.73438 0.73437,-0.96875 0.34375,-0.23438 0.76563,-0.23438 0.59375,0 1.20312,0.375 l -0.40625,1.07813 q -0.4375,-0.25 -0.85937,-0.25 -0.39063,0 -0.70313,0.23437 -0.29687,0.23438 -0.42187,0.64063 -0.20313,0.625 -0.20313,1.35937 v 3.625 z m 8.96961,-0.85937 q -0.65625,0.5625 -1.26562,0.79687 -0.59375,0.21875 -1.28125,0.21875 -1.14063,0 -1.75,-0.54687 -0.60938,-0.5625 -0.60938,-1.4375 0,-0.5 0.21875,-0.92188 0.23438,-0.42187 0.60938,-0.67187 0.375,-0.25 0.84375,-0.39063 0.34375,-0.0781 1.04687,-0.17187 1.42188,-0.17188 2.09375,-0.40625 0,-0.23438 0,-0.29688 0,-0.71875 -0.32812,-1.01562 -0.45313,-0.39063 -1.34375,-0.39063 -0.8125,0 -1.21875,0.29688 -0.39063,0.28125 -0.57813,1.01562 l -1.14062,-0.15625 q 0.15625,-0.73437 0.51562,-1.1875 0.35938,-0.45312 1.03125,-0.6875 0.67188,-0.25 1.5625,-0.25 0.89063,0 1.4375,0.20313 0.5625,0.20312 0.8125,0.53125 0.26563,0.3125 0.375,0.79687 0.0469,0.29688 0.0469,1.07813 v 1.5625 q 0,1.625 0.0781,2.0625 0.0781,0.4375 0.29688,0.82812 h -1.21875 q -0.1875,-0.35937 -0.23438,-0.85937 z m -0.0937,-2.60938 q -0.64062,0.26563 -1.92187,0.4375 -0.71875,0.10938 -1.01563,0.25 -0.29687,0.125 -0.46875,0.375 -0.15625,0.25 -0.15625,0.54688 0,0.46875 0.34375,0.78125 0.35938,0.3125 1.04688,0.3125 0.67187,0 1.20312,-0.29688 0.53125,-0.29687 0.78125,-0.8125 0.1875,-0.39062 0.1875,-1.17187 z m 2.99061,6.125003 v -9.562503 h 1.07812 v 0.89063 q 0.375,-0.53125 0.84375,-0.78125 0.48438,-0.26563 1.15625,-0.26563 0.875,0 1.54688,0.45313 0.6875,0.45312 1.03125,1.28125 0.34375,0.82812 0.34375,1.82812 0,1.04688 -0.375,1.90625 -0.375,0.84375 -1.10938,1.29688 -0.71875,0.45312 -1.53125,0.45312 -0.57812,0 -1.04687,-0.25 -0.46875,-0.25 -0.76563,-0.625 v 3.375003 z m 1.0625,-6.078123 q 0,1.34375 0.53125,1.98437 0.54687,0.625 1.3125,0.625 0.78125,0 1.34375,-0.65625 0.5625,-0.65625 0.5625,-2.04687 0,-1.3125 -0.54688,-1.96875 -0.54687,-0.67188 -1.29687,-0.67188 -0.75,0 -1.32813,0.70313 -0.57812,0.70312 -0.57812,2.03125 z m 6.34997,3.42187 v -9.54687 h 1.17188 v 3.42187 q 0.82812,-0.9375 2.07812,-0.9375 0.76563,0 1.32813,0.29688 0.5625,0.29687 0.8125,0.84375 0.25,0.53125 0.25,1.54687 v 4.375 h -1.17188 v -4.375 q 0,-0.89062 -0.39062,-1.28125 -0.375,-0.40625 -1.07813,-0.40625 -0.51562,0 -0.98437,0.28125 -0.45313,0.26563 -0.65625,0.73438 -0.1875,0.45312 -0.1875,1.26562 v 3.78125 z m 11.30296,0 v -9.54687 h 1.26563 v 3.92187 h 4.95312 v -3.92187 h 1.26563 v 9.54687 h -1.26563 v -4.5 h -4.95312 v 4.5 z m 14.17203,-2.21875 1.20313,0.14063 q -0.28125,1.0625 -1.0625,1.65625 -0.76563,0.57812 -1.96875,0.57812 -1.51563,0 -2.40625,-0.9375 -0.89063,-0.9375 -0.89063,-2.60937 0,-1.75 0.89063,-2.70313 0.90625,-0.96875 2.34375,-0.96875 1.39062,0 2.26562,0.9375 0.875,0.9375 0.875,2.65625 0,0.10938 0,0.3125 H 220.118 q 0.0625,1.14063 0.64063,1.75 0.57812,0.59375 1.4375,0.59375 0.65625,0 1.10937,-0.32812 0.45313,-0.34375 0.71875,-1.07813 z m -3.84375,-1.90625 h 3.85938 q -0.0781,-0.85937 -0.4375,-1.29687 -0.5625,-0.6875 -1.45313,-0.6875 -0.8125,0 -1.35937,0.54687 -0.54688,0.53125 -0.60938,1.4375 z m 11.03748,3.26563 q -0.65625,0.5625 -1.26563,0.79687 -0.59375,0.21875 -1.28125,0.21875 -1.14062,0 -1.75,-0.54687 -0.60937,-0.5625 -0.60937,-1.4375 0,-0.5 0.21875,-0.92188 0.23437,-0.42187 0.60937,-0.67187 0.375,-0.25 0.84375,-0.39063 0.34375,-0.0781 1.04688,-0.17187 1.42187,-0.17188 2.09375,-0.40625 0,-0.23438 0,-0.29688 0,-0.71875 -0.32813,-1.01562 -0.45312,-0.39063 -1.34375,-0.39063 -0.8125,0 -1.21875,0.29688 -0.39062,0.28125 -0.57812,1.01562 l -1.14063,-0.15625 q 0.15625,-0.73437 0.51563,-1.1875 0.35937,-0.45312 1.03125,-0.6875 0.67187,-0.25 1.5625,-0.25 0.89062,0 1.4375,0.20313 0.5625,0.20312 0.8125,0.53125 0.26562,0.3125 0.375,0.79687 0.0469,0.29688 0.0469,1.07813 v 1.5625 q 0,1.625 0.0781,2.0625 0.0781,0.4375 0.29687,0.82812 h -1.21875 q -0.1875,-0.35937 -0.23437,-0.85937 z m -0.0937,-2.60938 q -0.64063,0.26563 -1.92188,0.4375 -0.71875,0.10938 -1.01562,0.25 -0.29688,0.125 -0.46875,0.375 -0.15625,0.25 -0.15625,0.54688 0,0.46875 0.34375,0.78125 0.35937,0.3125 1.04687,0.3125 0.67188,0 1.20313,-0.29688 0.53125,-0.29687 0.78125,-0.8125 0.1875,-0.39062 0.1875,-1.17187 z m 7.47497,3.46875 v -0.875 q -0.65625,1.03125 -1.9375,1.03125 -0.8125,0 -1.51562,-0.45312 -0.6875,-0.45313 -1.07813,-1.26563 -0.375,-0.82812 -0.375,-1.89062 0,-1.03125 0.34375,-1.875 0.34375,-0.84375 1.03125,-1.28125 0.70313,-0.45313 1.54688,-0.45313 0.625,0 1.10937,0.26563 0.5,0.25 0.79688,0.67187 v -3.42187 h 1.17187 v 9.54687 z m -3.70312,-3.45312 q 0,1.32812 0.5625,1.98437 0.5625,0.65625 1.32812,0.65625 0.76563,0 1.29688,-0.625 0.53125,-0.625 0.53125,-1.90625 0,-1.42187 -0.54688,-2.07812 -0.54687,-0.67188 -1.34375,-0.67188 -0.78125,0 -1.3125,0.64063 -0.51562,0.625 -0.51562,2 z m 11.3656,1.23437 1.20312,0.14063 q -0.28125,1.0625 -1.0625,1.65625 -0.76562,0.57812 -1.96875,0.57812 -1.51562,0 -2.40625,-0.9375 -0.89062,-0.9375 -0.89062,-2.60937 0,-1.75 0.89062,-2.70313 0.90625,-0.96875 2.34375,-0.96875 1.39063,0 2.26563,0.9375 0.875,0.9375 0.875,2.65625 0,0.10938 0,0.3125 h -5.15625 q 0.0625,1.14063 0.64062,1.75 0.57813,0.59375 1.4375,0.59375 0.65625,0 1.10938,-0.32812 0.45312,-0.34375 0.71875,-1.07813 z m -3.84375,-1.90625 h 3.85937 q -0.0781,-0.85937 -0.4375,-1.29687 -0.5625,-0.6875 -1.45312,-0.6875 -0.8125,0 -1.35938,0.54687 -0.54687,0.53125 -0.60937,1.4375 z m 6.50623,4.125 v -6.90625 h 1.0625 v 1.04688 q 0.40625,-0.73438 0.73437,-0.96875 0.34375,-0.23438 0.76563,-0.23438 0.59375,0 1.20312,0.375 l -0.40625,1.07813 q -0.4375,-0.25 -0.85937,-0.25 -0.39063,0 -0.70313,0.23437 -0.29687,0.23438 -0.42187,0.64063 -0.20313,0.625 -0.20313,1.35937 v 3.625 z"
-       fill-rule="nonzero"
-       id="path252" />
-    <path
-       fill="#000000"
-       d="m 162.29759,111.45418 1.1875,-0.0781 q 0,0.51563 0.15625,0.875 0.15625,0.35938 0.57812,0.59375 0.42188,0.21875 0.96875,0.21875 0.78125,0 1.17188,-0.3125 0.39062,-0.3125 0.39062,-0.73437 0,-0.3125 -0.23437,-0.57813 -0.23438,-0.28125 -1.17188,-0.67187 -0.9375,-0.40625 -1.1875,-0.57813 -0.4375,-0.26562 -0.67187,-0.625 -0.21875,-0.35937 -0.21875,-0.82812 0,-0.8125 0.65625,-1.39063 0.65625,-0.59375 1.82812,-0.59375 1.29688,0 1.96875,0.60938 0.6875,0.59375 0.71875,1.57812 l -1.15625,0.0781 q -0.0312,-0.625 -0.45312,-0.98438 -0.40625,-0.375 -1.17188,-0.375 -0.60937,0 -0.95312,0.28125 -0.32813,0.28125 -0.32813,0.60938 0,0.3125 0.29688,0.5625 0.1875,0.17187 1,0.53125 1.35937,0.57812 1.70312,0.92187 0.5625,0.53125 0.5625,1.3125 0,0.51563 -0.3125,1.01563 -0.3125,0.48437 -0.96875,0.78125 -0.64062,0.29687 -1.51562,0.29687 -1.20313,0 -2.04688,-0.59375 -0.84375,-0.59375 -0.79687,-1.92187 z m 9.32031,1.40625 -0.20312,0.95312 q -0.42188,0.10938 -0.8125,0.10938 -0.70313,0 -1.125,-0.34375 -0.3125,-0.25 -0.3125,-0.70313 0,-0.23437 0.17187,-1.04687 l 0.82813,-4.01563 h -0.92188 l 0.1875,-0.90625 h 0.9375 l 0.34375,-1.70312 1.35938,-0.8125 -0.53125,2.51562 h 1.15625 l -0.1875,0.90625 h -1.15625 l -0.79688,3.8125 q -0.15625,0.73438 -0.15625,0.875 0,0.21875 0.10938,0.32813 0.125,0.10937 0.40625,0.10937 0.39062,0 0.70312,-0.0781 z m 0.93737,0.95312 1.45312,-6.90625 h 1.03125 l -0.28125,1.40625 q 0.53125,-0.79687 1.03125,-1.17187 0.51563,-0.39063 1.04688,-0.39063 0.35937,0 0.875,0.25 l -0.48438,1.09375 q -0.3125,-0.21875 -0.67187,-0.21875 -0.625,0 -1.28125,0.6875 -0.64063,0.6875 -1.01563,2.48438 l -0.57812,2.76562 z m 9.15712,-1.25 q -1.23438,1.40625 -2.54688,1.40625 -0.79687,0 -1.29687,-0.45312 -0.48438,-0.46875 -0.48438,-1.125 0,-0.4375 0.21875,-1.5 l 0.84375,-3.98438 h 1.17188 l -0.92188,4.40625 q -0.10937,0.5625 -0.10937,0.85938 0,0.39062 0.23437,0.60937 0.23438,0.21875 0.70313,0.21875 0.48437,0 0.95312,-0.23437 0.48438,-0.23438 0.8125,-0.64063 0.34375,-0.42187 0.5625,-0.98437 0.14063,-0.35938 0.32813,-1.25 l 0.625,-2.98438 h 1.1875 l -1.45313,6.90625 h -1.07812 z m 7.47497,-1.26562 1.17188,0.125 q -0.4375,1.29687 -1.26563,1.92187 -0.8125,0.625 -1.84375,0.625 -1.14062,0 -1.84375,-0.71875 -0.6875,-0.73437 -0.6875,-2.04687 0,-1.125 0.4375,-2.21875 0.45313,-1.09375 1.28125,-1.65625 0.84375,-0.57813 1.92188,-0.57813 1.10937,0 1.76562,0.625 0.65625,0.625 0.65625,1.65625 l -1.15625,0.0781 q -0.0156,-0.65625 -0.39062,-1.01563 -0.375,-0.375 -0.98438,-0.375 -0.70312,0 -1.23437,0.45313 -0.51563,0.4375 -0.8125,1.35937 -0.29688,0.90625 -0.29688,1.75 0,0.89063 0.39063,1.34375 0.39062,0.4375 0.96875,0.4375 0.5625,0 1.07812,-0.4375 0.53125,-0.4375 0.84375,-1.32812 z m 4.64844,1.5625 -0.20313,0.95312 q -0.42187,0.10938 -0.8125,0.10938 -0.70312,0 -1.125,-0.34375 -0.3125,-0.25 -0.3125,-0.70313 0,-0.23437 0.17188,-1.04687 l 0.82812,-4.01563 h -0.92187 l 0.1875,-0.90625 h 0.9375 l 0.34375,-1.70312 1.35937,-0.8125 -0.53125,2.51562 h 1.15625 l -0.1875,0.90625 h -1.15625 l -0.79687,3.8125 q -0.15625,0.73438 -0.15625,0.875 0,0.21875 0.10937,0.32813 0.125,0.10937 0.40625,0.10937 0.39063,0 0.70313,-0.0781 z m 4.64035,0.95312 1.45312,-6.90625 h 1.03125 l -0.28125,1.40625 q 0.53125,-0.79687 1.03125,-1.17187 0.51563,-0.39063 1.04688,-0.39063 0.35937,0 0.875,0.25 l -0.48438,1.09375 q -0.3125,-0.21875 -0.67187,-0.21875 -0.625,0 -1.28125,0.6875 -0.64063,0.6875 -1.01563,2.48438 l -0.57812,2.76562 z m 7.20399,-0.95312 -0.20312,0.95312 q -0.42188,0.10938 -0.8125,0.10938 -0.70313,0 -1.125,-0.34375 -0.3125,-0.25 -0.3125,-0.70313 0,-0.23437 0.17187,-1.04687 l 0.82813,-4.01563 h -0.92188 l 0.1875,-0.90625 h 0.9375 l 0.34375,-1.70312 1.35938,-0.8125 -0.53125,2.51562 h 1.15625 l -0.1875,0.90625 h -1.15625 l -0.79688,3.8125 q -0.15625,0.73438 -0.15625,0.875 0,0.21875 0.10938,0.32813 0.125,0.10937 0.40625,0.10937 0.39062,0 0.70312,-0.0781 z m 6.01549,-1.39063 1.15625,0.10938 q -0.25,0.85937 -1.14062,1.625 -0.89063,0.76562 -2.125,0.76562 -0.76563,0 -1.40625,-0.34375 -0.64063,-0.35937 -0.98438,-1.03125 -0.32812,-0.6875 -0.32812,-1.54687 0,-1.14063 0.51562,-2.20313 0.53125,-1.0625 1.35938,-1.57812 0.84375,-0.51563 1.8125,-0.51563 1.23437,0 1.96875,0.76563 0.75,0.76562 0.75,2.09375 0,0.5 -0.0937,1.04687 h -5.09375 q -0.0312,0.1875 -0.0312,0.35938 0,0.96875 0.4375,1.48437 0.45312,0.5 1.10937,0.5 0.59375,0 1.17188,-0.39062 0.59375,-0.39063 0.92187,-1.14063 z m -3.42187,-1.71875 h 3.875 q 0.0156,-0.1875 0.0156,-0.26562 0,-0.875 -0.45312,-1.34375 -0.4375,-0.48438 -1.125,-0.48438 -0.76563,0 -1.39063,0.53125 -0.60937,0.51563 -0.92187,1.5625 z m 4.47497,6.71875 v -0.85937 h 7.76563 v 0.85937 z m 8.63123,-2.03125 1.1875,0.10938 q 0,0.40625 0.10937,0.60937 0.10938,0.20313 0.34375,0.3125 0.32813,0.14063 0.82813,0.14063 1.0625,0 1.53125,-0.54688 0.3125,-0.375 0.57812,-1.625 l 0.10938,-0.5625 q -0.92188,0.9375 -1.95313,0.9375 -1.04687,0 -1.75,-0.76562 -0.70312,-0.78125 -0.70312,-2.1875 0,-1.17188 0.54687,-2.14063 0.5625,-0.98437 1.32813,-1.46875 0.76562,-0.5 1.57812,-0.5 1.35938,0 2.09375,1.28125 l 0.23438,-1.125 h 1.07812 l -1.39062,6.67188 q -0.21875,1.09375 -0.59375,1.70312 -0.375,0.625 -1.03125,0.95313 -0.65625,0.34375 -1.53125,0.34375 -0.82813,0 -1.4375,-0.21875 -0.59375,-0.20313 -0.89063,-0.625 -0.29687,-0.40625 -0.29687,-0.95313 0,-0.15625 0.0312,-0.34375 z m 1.46875,-3.6875 q 0,0.71875 0.14062,1.07813 0.20313,0.5 0.5625,0.76562 0.35938,0.25 0.79688,0.25 0.57812,0 1.14062,-0.40625 0.57813,-0.40625 0.9375,-1.25 0.35938,-0.85937 0.35938,-1.625 0,-0.85937 -0.48438,-1.35937 -0.46875,-0.51563 -1.15625,-0.51563 -0.4375,0 -0.84375,0.23438 -0.39062,0.23437 -0.75,0.70312 -0.34375,0.46875 -0.53125,1.14063 -0.17187,0.65625 -0.17187,0.98437 z m 6.00622,3.0625 1.45313,-6.90625 h 1.03125 l -0.28125,1.40625 q 0.53125,-0.79687 1.03125,-1.17187 0.51562,-0.39063 1.04687,-0.39063 0.35938,0 0.875,0.25 l -0.48437,1.09375 q -0.3125,-0.21875 -0.67188,-0.21875 -0.625,0 -1.28125,0.6875 -0.64062,0.6875 -1.01562,2.48438 l -0.57813,2.76562 z m 9.11025,-0.85937 q -0.625,0.53125 -1.1875,0.78125 -0.5625,0.23437 -1.20313,0.23437 -0.96875,0 -1.5625,-0.5625 -0.57812,-0.5625 -0.57812,-1.4375 0,-0.57812 0.26562,-1.01562 0.26563,-0.45313 0.70313,-0.71875 0.4375,-0.28125 1.0625,-0.39063 0.40625,-0.0781 1.51562,-0.125 1.10938,-0.0469 1.59375,-0.23437 0.125,-0.48438 0.125,-0.8125 0,-0.40625 -0.29687,-0.64063 -0.40625,-0.32812 -1.1875,-0.32812 -0.75,0 -1.21875,0.32812 -0.46875,0.32813 -0.6875,0.9375 l -1.1875,-0.10937 q 0.35937,-1.01563 1.14062,-1.5625 0.79688,-0.54688 2,-0.54688 1.28125,0 2.03125,0.60938 0.57813,0.45312 0.57813,1.1875 0,0.54687 -0.15625,1.28125 l -0.39063,1.71875 q -0.1875,0.8125 -0.1875,1.32812 0,0.32813 0.15625,0.9375 h -1.20312 q -0.0937,-0.34375 -0.125,-0.85937 z m 0.42187,-2.64063 q -0.23437,0.0937 -0.53125,0.15625 -0.28125,0.0469 -0.9375,0.10938 -1.03125,0.0781 -1.45312,0.21875 -0.42188,0.14062 -0.64063,0.45312 -0.21875,0.29688 -0.21875,0.67188 0,0.5 0.34375,0.82812 0.34375,0.3125 0.98438,0.3125 0.57812,0 1.10937,-0.3125 0.54688,-0.3125 0.85938,-0.85937 0.3125,-0.5625 0.48437,-1.57813 z m 1.7406,6.15625 2,-9.5625 h 1.09375 l -0.20312,0.95313 q 0.59375,-0.625 1.07812,-0.85938 0.48438,-0.25 1.01563,-0.25 0.98437,0 1.625,0.71875 0.65625,0.71875 0.65625,2.0625 0,1.07813 -0.35938,1.96875 -0.34375,0.875 -0.875,1.42188 -0.51562,0.54687 -1.04687,0.79687 -0.53125,0.25 -1.09375,0.25 -1.25,0 -1.92188,-1.26562 l -0.78125,3.76562 z m 2.32813,-5.48437 q 0,0.78125 0.10937,1.07812 0.17188,0.42188 0.53125,0.6875 0.375,0.25 0.875,0.25 1.01563,0 1.64063,-1.14062 0.625,-1.14063 0.625,-2.32813 0,-0.875 -0.42188,-1.35937 -0.42187,-0.48438 -1.04687,-0.48438 -0.45313,0 -0.84375,0.25 -0.375,0.23438 -0.70313,0.70313 -0.32812,0.46875 -0.54687,1.15625 -0.21875,0.6875 -0.21875,1.1875 z m 5.66247,2.82812 2,-9.54687 h 1.17188 l -0.76563,3.67187 q 0.65625,-0.64062 1.21875,-0.90625 0.57813,-0.28125 1.17188,-0.28125 0.85937,0 1.32812,0.45313 0.48438,0.45312 0.48438,1.1875 0,0.35937 -0.20313,1.34375 l -0.85937,4.07812 h -1.17188 l 0.875,-4.1875 q 0.1875,-0.90625 0.1875,-1.14062 0,-0.34375 -0.23437,-0.54688 -0.23438,-0.21875 -0.67188,-0.21875 -0.64062,0 -1.21875,0.34375 -0.57812,0.32813 -0.90625,0.90625 -0.32812,0.57813 -0.60937,1.875 l -0.60938,2.96875 z"
-       fill-rule="nonzero"
-       id="path254" />
-    <path
-       fill="#000000"
-       d="m 190.99429,149.01041 v -9.54688 h 6.4375 v 1.125 h -5.17188 v 2.96875 h 4.46875 v 1.125 h -4.46875 v 4.32813 z m 12.65698,-2.21875 1.20313,0.14062 q -0.28125,1.0625 -1.0625,1.65625 -0.76563,0.57813 -1.96875,0.57813 -1.51563,0 -2.40625,-0.9375 -0.89063,-0.9375 -0.89063,-2.60938 0,-1.75 0.89063,-2.70312 0.90625,-0.96875 2.34375,-0.96875 1.39062,0 2.26562,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.15625 q 0.0625,1.14062 0.64063,1.75 0.57812,0.59375 1.4375,0.59375 0.65625,0 1.10937,-0.32813 0.45313,-0.34375 0.71875,-1.07812 z m -3.84375,-1.90625 h 3.85938 q -0.0781,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.45313,-0.6875 -0.8125,0 -1.35937,0.54688 -0.54688,0.53125 -0.60938,1.4375 z m 6.52185,4.125 v -6.90625 h 1.0625 v 0.98437 q 0.75,-1.14062 2.1875,-1.14062 0.625,0 1.15625,0.21875 0.53125,0.21875 0.78125,0.59375 0.26563,0.35937 0.375,0.85937 0.0625,0.32813 0.0625,1.14063 v 4.25 h -1.17187 v -4.20313 q 0,-0.71875 -0.14063,-1.0625 -0.14062,-0.35937 -0.48437,-0.5625 -0.34375,-0.21875 -0.8125,-0.21875 -0.75,0 -1.29688,0.46875 -0.54687,0.46875 -0.54687,1.79688 v 3.78125 z m 11.9281,-2.53125 1.15625,0.15625 q -0.1875,1.1875 -0.96875,1.85937 -0.78125,0.67188 -1.92187,0.67188 -1.40625,0 -2.28125,-0.92188 -0.85938,-0.9375 -0.85938,-2.65625 0,-1.125 0.375,-1.96875 0.375,-0.84375 1.125,-1.25 0.76563,-0.42187 1.65625,-0.42187 1.125,0 1.84375,0.57812 0.71875,0.5625 0.92188,1.60938 l -1.14063,0.17187 q -0.17187,-0.70312 -0.59375,-1.04687 -0.40625,-0.35938 -0.98437,-0.35938 -0.89063,0 -1.45313,0.64063 -0.54687,0.64062 -0.54687,2 0,1.40625 0.53125,2.03125 0.54687,0.625 1.40625,0.625 0.6875,0 1.14062,-0.42188 0.46875,-0.42187 0.59375,-1.29687 z m 6.88282,0.3125 1.20312,0.14062 q -0.28125,1.0625 -1.0625,1.65625 -0.76562,0.57813 -1.96875,0.57813 -1.51562,0 -2.40625,-0.9375 -0.89062,-0.9375 -0.89062,-2.60938 0,-1.75 0.89062,-2.70312 0.90625,-0.96875 2.34375,-0.96875 1.39063,0 2.26563,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.15625 q 0.0625,1.14062 0.64062,1.75 0.57813,0.59375 1.4375,0.59375 0.65625,0 1.10938,-0.32813 0.45312,-0.34375 0.71875,-1.07812 z m -3.84375,-1.90625 h 3.85937 q -0.0781,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.45312,-0.6875 -0.8125,0 -1.35938,0.54688 -0.54687,0.53125 -0.60937,1.4375 z"
-       fill-rule="nonzero"
-       id="path256" />
-    <path
-       fill="#000000"
-       d="m 161.95064,158.35416 q 0,0.45312 -0.125,0.85937 -0.125,0.39063 -0.39063,0.73438 -0.25,0.34375 -0.64062,0.60937 -0.375,0.25 -0.89063,0.42188 0.34375,0.125 0.54688,0.51562 0.21875,0.39063 0.34375,1.04688 l 0.34375,1.85937 q 0.0156,0.125 0.0312,0.23438 0.0156,0.10937 0.0156,0.1875 0,0.0625 -0.0312,0.10937 -0.0312,0.0469 -0.10937,0.0781 -0.0625,0.0156 -0.1875,0.0156 -0.125,0.0156 -0.3125,0.0156 -0.17188,0 -0.28125,-0.0156 -0.0937,0 -0.15625,-0.0312 -0.0469,-0.0312 -0.0781,-0.0781 -0.0156,-0.0625 -0.0312,-0.14063 l -0.32812,-1.98437 q -0.0625,-0.34375 -0.15625,-0.625 -0.0937,-0.28125 -0.26563,-0.48438 -0.15625,-0.20312 -0.42187,-0.3125 -0.26563,-0.10937 -0.64063,-0.10937 h -0.75 l -0.71875,3.59375 q -0.0156,0.0469 -0.0469,0.0937 -0.0312,0.0312 -0.10938,0.0469 -0.0781,0.0156 -0.1875,0.0312 -0.10937,0.0156 -0.26562,0.0156 -0.15625,0 -0.26563,-0.0156 -0.0937,0 -0.15625,-0.0156 -0.0625,-0.0312 -0.0937,-0.0625 -0.0156,-0.0469 0,-0.0937 l 1.5625,-7.8125 q 0.0469,-0.25 0.20313,-0.34375 0.15625,-0.10938 0.34375,-0.10938 h 1.82812 q 0.60938,0 1.0625,0.125 0.45313,0.10938 0.75,0.34375 0.3125,0.21875 0.45313,0.54688 0.15625,0.32812 0.15625,0.75 z m -1.20313,0.17187 q 0,-0.21875 -0.0781,-0.40625 -0.0781,-0.1875 -0.25,-0.32812 -0.15625,-0.14063 -0.4375,-0.20313 -0.26563,-0.0781 -0.64063,-0.0781 h -1.15625 l -0.57812,2.84375 h 0.98437 q 0.57813,0 0.98438,-0.15625 0.42187,-0.15625 0.67187,-0.40625 0.25,-0.26563 0.375,-0.59375 0.125,-0.32813 0.125,-0.67188 z m 8.93988,-1.70312 q 0,0.0312 0,0.10937 0,0.0625 -0.0156,0.14063 -0.0156,0.0781 -0.0469,0.17187 -0.0156,0.0781 -0.0625,0.14063 -0.0312,0.0625 -0.0937,0.10937 -0.0625,0.0469 -0.125,0.0469 h -2.35937 l -1.46875,7.29687 q -0.0156,0.0625 -0.0469,0.10938 -0.0312,0.0312 -0.10937,0.0469 -0.0625,0.0156 -0.17188,0.0312 -0.10937,0.0156 -0.28125,0.0156 -0.15625,0 -0.26562,-0.0156 -0.0937,-0.0156 -0.15625,-0.0312 -0.0625,-0.0156 -0.0781,-0.0469 -0.0156,-0.0469 -0.0156,-0.10938 l 1.46875,-7.29687 h -2.35938 q -0.0937,0 -0.125,-0.0625 -0.0312,-0.0625 -0.0312,-0.15625 0,-0.0469 0,-0.10938 0.0156,-0.0781 0.0312,-0.15625 0.0156,-0.0937 0.0469,-0.17187 0.0312,-0.0781 0.0625,-0.14063 0.0469,-0.0781 0.0937,-0.10937 0.0469,-0.0469 0.10937,-0.0469 h 5.85938 q 0.0781,0 0.10937,0.0625 0.0312,0.0625 0.0312,0.17188 z m 5.83861,-0.0156 q 0,0.0312 0,0.10938 0,0.0625 -0.0156,0.14062 -0.0156,0.0781 -0.0469,0.15625 -0.0156,0.0781 -0.0625,0.15625 -0.0312,0.0625 -0.0937,0.10938 -0.0469,0.0469 -0.10937,0.0469 h -3.29688 l -0.53125,2.64063 h 2.82813 q 0.0781,0 0.10937,0.0469 0.0469,0.0469 0.0469,0.15625 0,0.0312 -0.0156,0.10938 0,0.0625 -0.0156,0.14062 -0.0156,0.0781 -0.0469,0.15625 -0.0156,0.0781 -0.0469,0.14063 -0.0312,0.0625 -0.0937,0.10937 -0.0469,0.0469 -0.10938,0.0469 H 171.198 l -0.60938,3 h 3.34375 q 0.0625,0 0.10938,0.0625 0.0469,0.0469 0.0469,0.15625 0,0.0469 -0.0156,0.125 0,0.0625 -0.0156,0.14062 -0.0156,0.0781 -0.0469,0.15625 -0.0156,0.0781 -0.0625,0.15625 -0.0312,0.0625 -0.0937,0.10938 -0.0469,0.0312 -0.10938,0.0312 h -4.04687 q -0.0781,0 -0.15625,-0.0156 -0.0625,-0.0312 -0.10938,-0.0781 -0.0469,-0.0625 -0.0625,-0.14063 -0.0156,-0.0937 0.0156,-0.21875 l 1.5,-7.51562 q 0.0469,-0.25 0.20312,-0.34375 0.15625,-0.10938 0.29688,-0.10938 h 4 q 0.14062,0 0.14062,0.21875 z m 5.44538,9.9375 q 0,0.0469 0,0.10938 0,0.0625 -0.0156,0.125 -0.0156,0.0625 -0.0469,0.14062 -0.0312,0.0781 -0.0781,0.125 -0.0312,0.0625 -0.0781,0.0937 -0.0469,0.0469 -0.10938,0.0469 h -6.26562 q -0.0781,0 -0.10938,-0.0625 -0.0312,-0.0625 -0.0312,-0.15625 0,-0.0312 0,-0.0937 0,-0.0625 0.0156,-0.14063 0.0156,-0.0625 0.0469,-0.14062 0.0156,-0.0625 0.0625,-0.14063 0.0312,-0.0625 0.0781,-0.0937 0.0469,-0.0312 0.10937,-0.0312 h 6.26563 q 0.0781,0 0.10937,0.0625 0.0469,0.0625 0.0469,0.15625 z m 9.27865,-9.23437 q 0,0.0469 -0.0156,0.10937 -0.0156,0.0625 -0.0312,0.14063 -0.0156,0.0781 -0.0469,0.15625 -0.0156,0.0781 -0.0469,0.14062 -0.0312,0.0625 -0.0781,0.10938 -0.0312,0.0312 -0.0781,0.0312 -0.0937,0 -0.26563,-0.10938 -0.17187,-0.125 -0.45312,-0.26562 -0.26563,-0.15625 -0.67188,-0.26563 -0.39062,-0.125 -0.9375,-0.125 -0.57812,0 -1.09375,0.17188 -0.5,0.17187 -0.92187,0.48437 -0.42188,0.29688 -0.75,0.70313 -0.32813,0.40625 -0.5625,0.90625 -0.23438,0.48437 -0.35938,1.01562 -0.10937,0.53125 -0.10937,1.07813 0,0.5625 0.15625,1.01562 0.17187,0.4375 0.48437,0.73438 0.3125,0.29687 0.75,0.45312 0.4375,0.15625 0.98438,0.15625 0.40625,0 0.84375,-0.0937 0.45312,-0.0937 0.82812,-0.29687 l 0.48438,-2.4375 h -1.95313 q -0.0781,0 -0.125,-0.0469 -0.0312,-0.0625 -0.0312,-0.17187 0,-0.0469 0,-0.10938 0.0156,-0.0781 0.0312,-0.15625 0.0156,-0.0781 0.0469,-0.15625 0.0312,-0.0781 0.0625,-0.14062 0.0469,-0.0625 0.0937,-0.0937 0.0469,-0.0469 0.10937,-0.0469 h 2.67188 q 0.1875,0 0.26562,0.125 0.0781,0.125 0.0312,0.32813 l -0.64062,3.25 q -0.0312,0.125 -0.0781,0.20312 -0.0312,0.0625 -0.0937,0.125 -0.0469,0.0625 -0.29687,0.17188 -0.23438,0.10937 -0.59375,0.23437 -0.35938,0.10938 -0.8125,0.1875 -0.45313,0.0937 -0.95313,0.0937 -0.84375,0 -1.48437,-0.20312 -0.64063,-0.21875 -1.07813,-0.64063 -0.4375,-0.42187 -0.67187,-1.01562 -0.21875,-0.59375 -0.21875,-1.32813 0,-0.70312 0.15625,-1.375 0.15625,-0.67187 0.45312,-1.28125 0.3125,-0.60937 0.75,-1.10937 0.4375,-0.51563 1,-0.89063 0.57813,-0.375 1.25,-0.57812 0.6875,-0.21875 1.48438,-0.21875 0.45312,0 0.84375,0.0781 0.40625,0.0781 0.71875,0.20313 0.3125,0.10937 0.51562,0.25 0.21875,0.125 0.29688,0.20312 0.0781,0.0625 0.10937,0.14063 0.0312,0.0625 0.0312,0.15625 z m 6.9863,0.84375 q 0,0.45312 -0.125,0.85937 -0.125,0.39063 -0.39062,0.73438 -0.25,0.34375 -0.64063,0.60937 -0.375,0.25 -0.89062,0.42188 0.34375,0.125 0.54687,0.51562 0.21875,0.39063 0.34375,1.04688 l 0.34375,1.85937 q 0.0156,0.125 0.0312,0.23438 0.0156,0.10937 0.0156,0.1875 0,0.0625 -0.0312,0.10937 -0.0312,0.0469 -0.10938,0.0781 -0.0625,0.0156 -0.1875,0.0156 -0.125,0.0156 -0.3125,0.0156 -0.17187,0 -0.28125,-0.0156 -0.0937,0 -0.15625,-0.0312 -0.0469,-0.0312 -0.0781,-0.0781 -0.0156,-0.0625 -0.0312,-0.14063 l -0.32813,-1.98437 q -0.0625,-0.34375 -0.15625,-0.625 -0.0937,-0.28125 -0.26562,-0.48438 -0.15625,-0.20312 -0.42188,-0.3125 -0.26562,-0.10937 -0.64062,-0.10937 h -0.75 l -0.71875,3.59375 q -0.0156,0.0469 -0.0469,0.0937 -0.0312,0.0312 -0.10937,0.0469 -0.0781,0.0156 -0.1875,0.0312 -0.10938,0.0156 -0.26563,0.0156 -0.15625,0 -0.26562,-0.0156 -0.0937,0 -0.15625,-0.0156 -0.0625,-0.0312 -0.0937,-0.0625 -0.0156,-0.0469 0,-0.0937 l 1.5625,-7.8125 q 0.0469,-0.25 0.20312,-0.34375 0.15625,-0.10938 0.34375,-0.10938 h 1.82813 q 0.60937,0 1.0625,0.125 0.45312,0.10938 0.75,0.34375 0.3125,0.21875 0.45312,0.54688 0.15625,0.32812 0.15625,0.75 z m -1.20312,0.17187 q 0,-0.21875 -0.0781,-0.40625 -0.0781,-0.1875 -0.25,-0.32812 -0.15625,-0.14063 -0.4375,-0.20313 -0.26562,-0.0781 -0.64062,-0.0781 h -1.15625 l -0.57813,2.84375 h 0.98438 q 0.57812,0 0.98437,-0.15625 0.42188,-0.15625 0.67188,-0.40625 0.25,-0.26563 0.375,-0.59375 0.125,-0.32813 0.125,-0.67188 z m 8.42425,6.09375 q 0.0312,0.14063 0.0156,0.23438 -0.0156,0.0781 -0.0781,0.125 -0.0469,0.0469 -0.1875,0.0469 -0.125,0.0156 -0.34375,0.0156 -0.14062,0 -0.25,-0.0156 -0.10937,0 -0.17187,-0.0156 -0.0469,-0.0312 -0.0781,-0.0625 -0.0156,-0.0469 -0.0312,-0.0937 l -0.3125,-2.0625 h -3.5 l -1.09375,2.03125 q -0.0469,0.0781 -0.0937,0.125 -0.0312,0.0312 -0.10937,0.0625 -0.0781,0.0156 -0.20313,0.0156 -0.10937,0.0156 -0.28125,0.0156 -0.20312,0 -0.3125,-0.0156 -0.125,-0.0156 -0.15625,-0.0469 -0.0469,-0.0469 -0.0312,-0.14063 0.0156,-0.0937 0.0937,-0.23437 l 4.375,-7.8125 q 0.0469,-0.0781 0.0937,-0.125 0.0625,-0.0469 0.14063,-0.0625 0.0937,-0.0312 0.21875,-0.0312 0.125,-0.0156 0.3125,-0.0156 0.21875,0 0.34375,0.0156 0.14062,0 0.21875,0.0312 0.0937,0.0156 0.125,0.0625 0.0312,0.0469 0.0469,0.125 z m -2.1875,-6.90625 v 0 l -2.28125,4.1875 h 2.92188 z m 9.93059,0.85938 q 0,0.34375 -0.0781,0.71875 -0.0781,0.375 -0.26562,0.73437 -0.17188,0.35938 -0.4375,0.6875 -0.26563,0.32813 -0.65625,0.57813 -0.375,0.23437 -0.875,0.375 -0.5,0.14062 -1.1875,0.14062 h -1.15625 l -0.59375,3.04688 q -0.0156,0.0469 -0.0469,0.0937 -0.0312,0.0312 -0.10937,0.0469 -0.0781,0.0156 -0.1875,0.0312 -0.10938,0.0156 -0.26563,0.0156 -0.15625,0 -0.26562,-0.0156 -0.0937,0 -0.15625,-0.0156 -0.0625,-0.0312 -0.0937,-0.0625 -0.0156,-0.0469 0,-0.0937 l 1.54687,-7.78125 q 0.0469,-0.26563 0.20313,-0.375 0.17187,-0.10938 0.39062,-0.10938 h 1.65625 q 0.32813,0 0.57813,0.0312 0.25,0.0156 0.48437,0.0625 0.35938,0.0781 0.64063,0.25 0.28125,0.15625 0.46875,0.40625 0.20312,0.23438 0.29687,0.54688 0.10938,0.3125 0.10938,0.6875 z m -1.1875,0.10937 q 0,-0.40625 -0.20313,-0.6875 -0.1875,-0.29687 -0.60937,-0.40625 -0.15625,-0.0469 -0.34375,-0.0625 -0.1875,-0.0156 -0.40625,-0.0156 h -1.04688 l -0.67187,3.375 h 1.0625 q 0.46875,0 0.78125,-0.0937 0.32812,-0.10938 0.5625,-0.28125 0.25,-0.17188 0.40625,-0.39063 0.17187,-0.23437 0.26562,-0.46875 0.10938,-0.25 0.15625,-0.5 0.0469,-0.25 0.0469,-0.46875 z m 7.76033,6.17188 q -0.0156,0.0469 -0.0469,0.0937 -0.0312,0.0312 -0.10937,0.0469 -0.0625,0.0156 -0.17188,0.0312 -0.10937,0.0156 -0.28125,0.0156 -0.15625,0 -0.26562,-0.0156 -0.0937,-0.0156 -0.15625,-0.0312 -0.0625,-0.0156 -0.0781,-0.0469 -0.0156,-0.0469 0,-0.0937 l 0.73438,-3.75 h -3.82813 l -0.73437,3.75 q -0.0156,0.0469 -0.0469,0.0937 -0.0312,0.0312 -0.10937,0.0469 -0.0781,0.0156 -0.1875,0.0312 -0.10938,0.0156 -0.26563,0.0156 -0.17187,0 -0.28125,-0.0156 -0.0937,-0.0156 -0.15625,-0.0312 -0.0469,-0.0156 -0.0781,-0.0469 -0.0156,-0.0469 0,-0.0937 l 1.60937,-8.10938 q 0.0156,-0.0312 0.0469,-0.0625 0.0469,-0.0469 0.10937,-0.0625 0.0781,-0.0312 0.1875,-0.0469 0.10938,-0.0156 0.26563,-0.0156 0.15625,0 0.26562,0.0156 0.10938,0.0156 0.15625,0.0469 0.0625,0.0156 0.0781,0.0625 0.0156,0.0312 0.0156,0.0625 l -0.67187,3.39063 h 3.82812 l 0.67188,-3.39063 q 0.0156,-0.0312 0.0469,-0.0625 0.0312,-0.0469 0.0937,-0.0625 0.0781,-0.0312 0.1875,-0.0469 0.10938,-0.0156 0.28125,-0.0156 0.15625,0 0.25,0.0156 0.10938,0.0156 0.17188,0.0469 0.0625,0.0156 0.0781,0.0625 0.0156,0.0312 0,0.0625 z m 7.38217,1.89062 q 0,0.0469 0,0.10938 0,0.0625 -0.0156,0.125 -0.0156,0.0625 -0.0469,0.14062 -0.0312,0.0781 -0.0781,0.125 -0.0312,0.0625 -0.0781,0.0937 -0.0469,0.0469 -0.10938,0.0469 h -6.26562 q -0.0781,0 -0.10938,-0.0625 -0.0312,-0.0625 -0.0312,-0.15625 0,-0.0312 0,-0.0937 0,-0.0625 0.0156,-0.14063 0.0156,-0.0625 0.0469,-0.14062 0.0156,-0.0625 0.0625,-0.14063 0.0312,-0.0625 0.0781,-0.0937 0.0469,-0.0312 0.10937,-0.0312 h 6.26563 q 0.0781,0 0.10937,0.0625 0.0469,0.0625 0.0469,0.15625 z m 7.49741,-9.9375 q 0,0.0469 0,0.10938 0,0.0625 -0.0156,0.14062 -0.0156,0.0781 -0.0469,0.17188 -0.0312,0.0781 -0.0781,0.15625 -0.0312,0.0625 -0.0781,0.10937 -0.0469,0.0469 -0.125,0.0469 h -3.07813 l -0.5625,2.85937 h 2.90625 q 0.0781,0 0.10938,0.0625 0.0469,0.0469 0.0469,0.14063 0,0.0625 -0.0156,0.14062 0,0.0625 -0.0156,0.14063 -0.0156,0.0625 -0.0469,0.15625 -0.0156,0.0781 -0.0625,0.14062 -0.0312,0.0625 -0.0937,0.10938 -0.0469,0.0469 -0.10938,0.0469 h -2.90625 l -0.70312,3.5 q -0.0156,0.0625 -0.0469,0.10938 -0.0312,0.0312 -0.10937,0.0469 -0.0625,0.0156 -0.17188,0.0312 -0.10937,0.0156 -0.28125,0.0156 -0.15625,0 -0.26562,-0.0156 -0.10938,-0.0156 -0.17188,-0.0312 -0.0469,-0.0156 -0.0781,-0.0469 -0.0156,-0.0469 0,-0.10938 l 1.5625,-7.79687 q 0.0469,-0.25 0.20312,-0.34375 0.15625,-0.10938 0.29688,-0.10938 h 3.78125 q 0.0937,0 0.125,0.0625 0.0312,0.0625 0.0312,0.15625 z m 6.32704,0 q 0,0.0312 0,0.10938 0,0.0625 -0.0156,0.14062 -0.0156,0.0781 -0.0469,0.15625 -0.0156,0.0781 -0.0625,0.15625 -0.0312,0.0625 -0.0937,0.10938 -0.0469,0.0469 -0.10938,0.0469 h -3.29687 l -0.53125,2.64063 h 2.82812 q 0.0781,0 0.10938,0.0469 0.0469,0.0469 0.0469,0.15625 0,0.0312 -0.0156,0.10938 0,0.0625 -0.0156,0.14062 -0.0156,0.0781 -0.0469,0.15625 -0.0156,0.0781 -0.0469,0.14063 -0.0312,0.0625 -0.0937,0.10937 -0.0469,0.0469 -0.10937,0.0469 H 235.652 l -0.60937,3 h 3.34375 q 0.0625,0 0.10937,0.0625 0.0469,0.0469 0.0469,0.15625 0,0.0469 -0.0156,0.125 0,0.0625 -0.0156,0.14062 -0.0156,0.0781 -0.0469,0.15625 -0.0156,0.0781 -0.0625,0.15625 -0.0312,0.0625 -0.0937,0.10938 -0.0469,0.0312 -0.10937,0.0312 h -4.04688 q -0.0781,0 -0.15625,-0.0156 -0.0625,-0.0312 -0.10937,-0.0781 -0.0469,-0.0625 -0.0625,-0.14063 -0.0156,-0.0937 0.0156,-0.21875 l 1.5,-7.51562 q 0.0469,-0.25 0.20313,-0.34375 0.15625,-0.10938 0.29687,-0.10938 h 4 q 0.14063,0 0.14063,0.21875 z m 6.711,7.73438 q -0.0156,0.14062 -0.0781,0.23437 -0.0625,0.0781 -0.14062,0.14063 -0.0625,0.0625 -0.15625,0.0937 -0.0781,0.0156 -0.17188,0.0156 h -0.42187 q -0.17188,0 -0.29688,-0.0312 -0.10937,-0.0469 -0.20312,-0.14062 -0.0781,-0.0937 -0.15625,-0.23438 -0.0625,-0.15625 -0.14063,-0.39062 l -1.57812,-4.48438 q -0.15625,-0.48437 -0.32813,-0.95312 -0.15625,-0.48438 -0.29687,-0.96875 h -0.0156 q -0.0781,0.53125 -0.1875,1.0625 -0.0937,0.51562 -0.20312,1.04687 l -0.96875,4.90625 q -0.0156,0.0625 -0.0625,0.10938 -0.0312,0.0312 -0.0937,0.0469 -0.0625,0.0156 -0.17188,0.0312 -0.10937,0.0156 -0.26562,0.0156 -0.14063,0 -0.25,-0.0156 -0.0937,-0.0156 -0.15625,-0.0312 -0.0469,-0.0156 -0.0625,-0.0469 -0.0156,-0.0469 0,-0.10938 l 1.54687,-7.76562 q 0.0469,-0.26563 0.21875,-0.375 0.17188,-0.10938 0.34375,-0.10938 h 0.5 q 0.15625,0 0.26563,0.0312 0.125,0.0312 0.20312,0.125 0.0937,0.0781 0.15625,0.21875 0.0781,0.125 0.15625,0.32813 l 1.59375,4.5625 q 0.14063,0.42187 0.28125,0.84375 0.15625,0.42187 0.29688,0.84375 h 0.0156 q 0.0937,-0.53125 0.20313,-1.09375 0.10937,-0.57813 0.20312,-1.10938 l 0.92188,-4.5625 q 0.0156,-0.0625 0.0469,-0.0937 0.0312,-0.0312 0.0937,-0.0625 0.0625,-0.0312 0.15625,-0.0312 0.10938,-0.0156 0.26563,-0.0156 0.15625,0 0.25,0.0156 0.10937,0 0.15625,0.0312 0.0625,0.0312 0.0781,0.0625 0.0156,0.0312 0.0156,0.0937 z m 9.09039,-7.09375 q 0,0.14062 -0.0469,0.34375 -0.0469,0.20312 -0.125,0.32812 -0.0781,0.10938 -0.15625,0.10938 -0.0937,0 -0.21875,-0.125 -0.125,-0.125 -0.32812,-0.26563 -0.20313,-0.14062 -0.53125,-0.25 -0.32813,-0.125 -0.82813,-0.125 -0.54687,0 -1,0.20313 -0.4375,0.20312 -0.8125,0.5625 -0.35937,0.34375 -0.64062,0.79687 -0.26563,0.45313 -0.45313,0.95313 -0.17187,0.5 -0.26562,1.01562 -0.0781,0.5 -0.0781,0.95313 0,0.51562 0.125,0.92187 0.125,0.40625 0.375,0.6875 0.25,0.28125 0.60938,0.42188 0.35937,0.14062 0.8125,0.14062 0.51562,0 0.875,-0.10937 0.375,-0.10938 0.625,-0.25 0.26562,-0.14063 0.4375,-0.25 0.1875,-0.125 0.29687,-0.125 0.0781,0 0.10938,0.0625 0.0312,0.0469 0.0312,0.15625 0,0.0312 -0.0156,0.0937 -0.0156,0.0625 -0.0312,0.14062 0,0.0625 -0.0156,0.15625 -0.0156,0.0781 -0.0469,0.15625 -0.0312,0.0625 -0.0625,0.125 -0.0156,0.0625 -0.0937,0.125 -0.0625,0.0625 -0.28125,0.20313 -0.21875,0.125 -0.53125,0.23437 -0.3125,0.10938 -0.71875,0.1875 -0.39062,0.0937 -0.82812,0.0937 -0.67188,0 -1.20313,-0.20312 -0.53125,-0.20313 -0.90625,-0.57813 -0.375,-0.39062 -0.57812,-0.96875 -0.20313,-0.57812 -0.20313,-1.32812 0,-0.60938 0.125,-1.26563 0.14063,-0.65625 0.39063,-1.26562 0.25,-0.625 0.625,-1.17188 0.39062,-0.54687 0.89062,-0.95312 0.5,-0.42188 1.125,-0.65625 0.64063,-0.25 1.39063,-0.25 0.48437,0 0.89062,0.10937 0.42188,0.10938 0.70313,0.28125 0.29687,0.15625 0.42187,0.28125 0.14063,0.125 0.14063,0.29688 z m 6.26028,-0.64063 q 0,0.0312 0,0.10938 0,0.0625 -0.0156,0.14062 -0.0156,0.0781 -0.0469,0.15625 -0.0156,0.0781 -0.0625,0.15625 -0.0312,0.0625 -0.0937,0.10938 -0.0469,0.0469 -0.10937,0.0469 h -3.29688 l -0.53125,2.64063 h 2.82813 q 0.0781,0 0.10937,0.0469 0.0469,0.0469 0.0469,0.15625 0,0.0312 -0.0156,0.10938 0,0.0625 -0.0156,0.14062 -0.0156,0.0781 -0.0469,0.15625 -0.0156,0.0781 -0.0469,0.14063 -0.0312,0.0625 -0.0937,0.10937 -0.0469,0.0469 -0.10938,0.0469 h -2.82812 l -0.60936,3 h 3.34373 q 0.0625,0 0.10938,0.0625 0.0469,0.0469 0.0469,0.15625 0,0.0469 -0.0156,0.125 0,0.0625 -0.0156,0.14062 -0.0156,0.0781 -0.0469,0.15625 -0.0156,0.0781 -0.0625,0.15625 -0.0312,0.0625 -0.0937,0.10938 -0.0469,0.0312 -0.10938,0.0312 h -4.04686 q -0.0781,0 -0.15625,-0.0156 -0.0625,-0.0312 -0.10937,-0.0781 -0.0469,-0.0625 -0.0625,-0.14063 -0.0156,-0.0937 0.0156,-0.21875 l 1.49999,-7.51562 q 0.0469,-0.25 0.20312,-0.34375 0.15625,-0.10938 0.29688,-0.10938 h 4 q 0.14062,0 0.14062,0.21875 z"
-       fill-rule="nonzero"
-       id="path258" />
-    <path
-       fill="#000000"
-       d="m 173.78297,198.86352 1.26562,0.3125 q -0.39062,1.5625 -1.42187,2.375 -1.03125,0.8125 -2.53125,0.8125 -1.53125,0 -2.5,-0.625 -0.96875,-0.625 -1.48438,-1.8125 -0.5,-1.1875 -0.5,-2.5625 0,-1.48438 0.5625,-2.59375 0.57813,-1.10938 1.625,-1.6875 1.0625,-0.57813 2.32813,-0.57813 1.42187,0 2.39062,0.73438 0.98438,0.71875 1.375,2.04687 l -1.25,0.29688 q -0.32812,-1.04688 -0.96875,-1.51563 -0.625,-0.48437 -1.57812,-0.48437 -1.09375,0 -1.84375,0.53125 -0.73438,0.53125 -1.03125,1.42187 -0.29688,0.875 -0.29688,1.82813 0,1.21875 0.34375,2.125 0.35938,0.90625 1.10938,1.35937 0.75,0.4375 1.625,0.4375 1.0625,0 1.79687,-0.60937 0.73438,-0.60938 0.98438,-1.8125 z m 2.68765,-4.84375 v -1.35938 h 1.17188 v 1.35938 z m 0,8.1875 v -6.90625 h 1.17188 v 6.90625 z m 2.92984,0 v -6.90625 h 1.0625 v 1.04687 q 0.40625,-0.73437 0.73438,-0.96875 0.34375,-0.23437 0.76562,-0.23437 0.59375,0 1.20313,0.375 l -0.40625,1.07812 q -0.4375,-0.25 -0.85938,-0.25 -0.39062,0 -0.70312,0.23438 -0.29688,0.23437 -0.42188,0.64062 -0.20312,0.625 -0.20312,1.35938 v 3.625 z m 8.96962,-2.53125 1.15625,0.15625 q -0.1875,1.1875 -0.96875,1.85937 -0.78125,0.67188 -1.92187,0.67188 -1.40625,0 -2.28125,-0.92188 -0.85938,-0.9375 -0.85938,-2.65625 0,-1.125 0.375,-1.96875 0.375,-0.84375 1.125,-1.25 0.76563,-0.42187 1.65625,-0.42187 1.125,0 1.84375,0.57812 0.71875,0.5625 0.92188,1.60938 l -1.14063,0.17187 q -0.17187,-0.70312 -0.59375,-1.04687 -0.40625,-0.35938 -0.98437,-0.35938 -0.89063,0 -1.45313,0.64063 -0.54687,0.64062 -0.54687,2 0,1.40625 0.53125,2.03125 0.54687,0.625 1.40625,0.625 0.6875,0 1.14062,-0.42188 0.46875,-0.42187 0.59375,-1.29687 z m 6.67969,2.53125 v -1.01563 q -0.8125,1.17188 -2.1875,1.17188 -0.60937,0 -1.14062,-0.23438 -0.53125,-0.23437 -0.79688,-0.57812 -0.25,-0.35938 -0.35937,-0.875 -0.0625,-0.34375 -0.0625,-1.09375 v -4.28125 h 1.17187 v 3.82812 q 0,0.92188 0.0625,1.23438 0.10938,0.46875 0.46875,0.73437 0.35938,0.25 0.89063,0.25 0.51562,0 0.98437,-0.26562 0.46875,-0.26563 0.65625,-0.73438 0.1875,-0.46875 0.1875,-1.34375 v -3.70312 h 1.17188 v 6.90625 z m 2.8656,0 v -9.54688 h 1.17188 v 9.54688 z m 7.49234,-0.85938 q -0.65625,0.5625 -1.26562,0.79688 -0.59375,0.21875 -1.28125,0.21875 -1.14063,0 -1.75,-0.54688 -0.60938,-0.5625 -0.60938,-1.4375 0,-0.5 0.21875,-0.92187 0.23438,-0.42188 0.60938,-0.67188 0.375,-0.25 0.84375,-0.39062 0.34375,-0.0781 1.04687,-0.17188 1.42188,-0.17187 2.09375,-0.40625 0,-0.23437 0,-0.29687 0,-0.71875 -0.32812,-1.01563 -0.45313,-0.39062 -1.34375,-0.39062 -0.8125,0 -1.21875,0.29687 -0.39063,0.28125 -0.57813,1.01563 l -1.14062,-0.15625 q 0.15625,-0.73438 0.51562,-1.1875 0.35938,-0.45313 1.03125,-0.6875 0.67188,-0.25 1.5625,-0.25 0.89063,0 1.4375,0.20312 0.5625,0.20313 0.8125,0.53125 0.26563,0.3125 0.375,0.79688 0.0469,0.29687 0.0469,1.07812 v 1.5625 q 0,1.625 0.0781,2.0625 0.0781,0.4375 0.29688,0.82813 h -1.21875 q -0.1875,-0.35938 -0.23438,-0.85938 z m -0.0937,-2.60937 q -0.64062,0.26562 -1.92187,0.4375 -0.71875,0.10937 -1.01563,0.25 -0.29687,0.125 -0.46875,0.375 -0.15625,0.25 -0.15625,0.54687 0,0.46875 0.34375,0.78125 0.35938,0.3125 1.04688,0.3125 0.67187,0 1.20312,-0.29687 0.53125,-0.29688 0.78125,-0.8125 0.1875,-0.39063 0.1875,-1.17188 z m 2.97498,3.46875 v -6.90625 h 1.0625 v 1.04687 q 0.40625,-0.73437 0.73437,-0.96875 0.34375,-0.23437 0.76563,-0.23437 0.59375,0 1.20312,0.375 l -0.40625,1.07812 q -0.4375,-0.25 -0.85937,-0.25 -0.39063,0 -0.70313,0.23438 -0.29687,0.23437 -0.42187,0.64062 -0.20313,0.625 -0.20313,1.35938 v 3.625 z m 8.25073,0 v -9.54688 h 3.59375 q 1.09375,0 1.75,0.29688 0.65625,0.28125 1.03125,0.89062 0.375,0.60938 0.375,1.26563 0,0.60937 -0.34375,1.15625 -0.32813,0.53125 -0.98438,0.85937 0.85938,0.25 1.32813,0.875 0.46875,0.60938 0.46875,1.4375 0,0.67188 -0.29688,1.25 -0.28125,0.57813 -0.70312,0.89063 -0.40625,0.3125 -1.03125,0.46875 -0.625,0.15625 -1.54688,0.15625 z m 1.26562,-5.53125 h 2.0625 q 0.84375,0 1.20313,-0.10938 0.48437,-0.14062 0.71875,-0.46875 0.25,-0.34375 0.25,-0.84375 0,-0.46875 -0.23438,-0.82812 -0.21875,-0.35938 -0.64062,-0.5 -0.42188,-0.14063 -1.45313,-0.14063 h -1.90625 z m 0,4.40625 h 2.375 q 0.60938,0 0.85938,-0.0469 0.4375,-0.0781 0.73437,-0.25 0.29688,-0.1875 0.48438,-0.53125 0.1875,-0.35937 0.1875,-0.8125 0,-0.53125 -0.28125,-0.92187 -0.26563,-0.40625 -0.75,-0.5625 -0.48438,-0.15625 -1.40625,-0.15625 h -2.20313 z m 12.06163,1.125 v -1.01563 q -0.8125,1.17188 -2.1875,1.17188 -0.60937,0 -1.14062,-0.23438 -0.53125,-0.23437 -0.79688,-0.57812 -0.25,-0.35938 -0.35937,-0.875 -0.0625,-0.34375 -0.0625,-1.09375 v -4.28125 h 1.17187 v 3.82812 q 0,0.92188 0.0625,1.23438 0.10938,0.46875 0.46875,0.73437 0.35938,0.25 0.89063,0.25 0.51562,0 0.98437,-0.26562 0.46875,-0.26563 0.65625,-0.73438 0.1875,-0.46875 0.1875,-1.34375 v -3.70312 h 1.17188 v 6.90625 z m 3.16248,0 v -6 h -1.03125 v -0.90625 h 1.03125 v -0.73438 q 0,-0.70312 0.125,-1.04687 0.17187,-0.45313 0.59375,-0.73438 0.42187,-0.28125 1.20312,-0.28125 0.48438,0 1.09375,0.10938 l -0.1875,1.03125 q -0.35937,-0.0625 -0.6875,-0.0625 -0.53125,0 -0.75,0.23437 -0.21875,0.21875 -0.21875,0.84375 v 0.64063 h 1.34375 v 0.90625 h -1.34375 v 6 z m 3.4621,0 v -6 h -1.03125 v -0.90625 h 1.03125 v -0.73438 q 0,-0.70312 0.125,-1.04687 0.17187,-0.45313 0.59375,-0.73438 0.42187,-0.28125 1.20312,-0.28125 0.48438,0 1.09375,0.10938 l -0.1875,1.03125 q -0.35937,-0.0625 -0.6875,-0.0625 -0.53125,0 -0.75,0.23437 -0.21875,0.21875 -0.21875,0.84375 v 0.64063 h 1.34375 v 0.90625 h -1.34375 v 6 z m 8.15611,-2.21875 1.20312,0.14062 q -0.28125,1.0625 -1.0625,1.65625 -0.76562,0.57813 -1.96875,0.57813 -1.51562,0 -2.40625,-0.9375 -0.89062,-0.9375 -0.89062,-2.60938 0,-1.75 0.89062,-2.70312 0.90625,-0.96875 2.34375,-0.96875 1.39063,0 2.26563,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.15625 q 0.0625,1.14062 0.64062,1.75 0.57813,0.59375 1.4375,0.59375 0.65625,0 1.10938,-0.32813 0.45312,-0.34375 0.71875,-1.07812 z m -3.84375,-1.90625 h 3.85937 q -0.0781,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.45312,-0.6875 -0.8125,0 -1.35938,0.54688 -0.54687,0.53125 -0.60937,1.4375 z m 6.50622,4.125 v -6.90625 h 1.0625 v 1.04687 q 0.40625,-0.73437 0.73438,-0.96875 0.34375,-0.23437 0.76562,-0.23437 0.59375,0 1.20313,0.375 l -0.40625,1.07812 q -0.4375,-0.25 -0.85938,-0.25 -0.39062,0 -0.70312,0.23438 -0.29688,0.23437 -0.42188,0.64062 -0.20312,0.625 -0.20312,1.35938 v 3.625 z"
-       fill-rule="nonzero"
-       id="path260" />
-    <path
-       fill="#000000"
-       d="m 187.94858,237.4041 v -9.54687 h 1.29687 l 5.01563,7.5 v -7.5 h 1.20312 v 9.54687 h -1.29687 l -5.01563,-7.5 v 7.5 z m 9.04703,-3.45312 q 0,-1.92188 1.07812,-2.84375 0.89063,-0.76563 2.17188,-0.76563 1.42187,0 2.32812,0.9375 0.90625,0.92188 0.90625,2.57813 0,1.32812 -0.40625,2.09375 -0.39062,0.76562 -1.15625,1.1875 -0.76562,0.42187 -1.67187,0.42187 -1.45313,0 -2.35938,-0.92187 -0.89062,-0.9375 -0.89062,-2.6875 z m 1.20312,0 q 0,1.32812 0.57813,1.98437 0.59375,0.65625 1.46875,0.65625 0.875,0 1.45312,-0.65625 0.57813,-0.67187 0.57813,-2.03125 0,-1.28125 -0.59375,-1.9375 -0.57813,-0.65625 -1.4375,-0.65625 -0.875,0 -1.46875,0.65625 -0.57813,0.65625 -0.57813,1.98438 z m 11.13123,3.45312 v -0.875 q -0.65625,1.03125 -1.9375,1.03125 -0.8125,0 -1.51563,-0.45312 -0.6875,-0.45313 -1.07812,-1.26563 -0.375,-0.82812 -0.375,-1.89062 0,-1.03125 0.34375,-1.875 0.34375,-0.84375 1.03125,-1.28125 0.70312,-0.45313 1.54687,-0.45313 0.625,0 1.10938,0.26563 0.5,0.25 0.79687,0.67187 v -3.42187 h 1.17188 v 9.54687 z m -3.70313,-3.45312 q 0,1.32812 0.5625,1.98437 0.5625,0.65625 1.32813,0.65625 0.76562,0 1.29687,-0.625 0.53125,-0.625 0.53125,-1.90625 0,-1.42187 -0.54687,-2.07812 -0.54688,-0.67188 -1.34375,-0.67188 -0.78125,0 -1.3125,0.64063 -0.51563,0.625 -0.51563,2 z m 11.36561,1.23437 1.20312,0.14063 q -0.28125,1.0625 -1.0625,1.65625 -0.76562,0.57812 -1.96875,0.57812 -1.51562,0 -2.40625,-0.9375 -0.89062,-0.9375 -0.89062,-2.60937 0,-1.75 0.89062,-2.70313 0.90625,-0.96875 2.34375,-0.96875 1.39063,0 2.26563,0.9375 0.875,0.9375 0.875,2.65625 0,0.10938 0,0.3125 h -5.15625 q 0.0625,1.14063 0.64062,1.75 0.57813,0.59375 1.4375,0.59375 0.65625,0 1.10938,-0.32812 0.45312,-0.34375 0.71875,-1.07813 z m -3.84375,-1.90625 h 3.85937 q -0.0781,-0.85937 -0.4375,-1.29687 -0.5625,-0.6875 -1.45312,-0.6875 -0.8125,0 -1.35938,0.54687 -0.54687,0.53125 -0.60937,1.4375 z m 9.89671,-0.57812 q 0,-1.6875 0.34375,-2.71875 0.35937,-1.03125 1.04687,-1.59375 0.6875,-0.5625 1.71875,-0.5625 0.78125,0 1.35938,0.3125 0.57812,0.29687 0.95312,0.89062 0.375,0.57813 0.59375,1.42188 0.21875,0.82812 0.21875,2.25 0,1.67187 -0.35937,2.70312 -0.34375,1.03125 -1.03125,1.59375 -0.67188,0.5625 -1.73438,0.5625 -1.375,0 -2.15625,-0.98437 -0.95312,-1.1875 -0.95312,-3.875 z m 1.20312,0 q 0,2.34375 0.54688,3.125 0.5625,0.78125 1.35937,0.78125 0.8125,0 1.35938,-0.78125 0.5625,-0.78125 0.5625,-3.125 0,-2.35938 -0.5625,-3.125 -0.54688,-0.78125 -1.35938,-0.78125 -0.8125,0 -1.29687,0.6875 -0.60938,0.875 -0.60938,3.21875 z"
-       fill-rule="nonzero"
-       id="path262" />
-    <path
-       fill="#000000"
-       d="m 164.51677,251.04473 1.1875,-0.0781 q 0,0.51562 0.15625,0.875 0.15625,0.35937 0.57812,0.59375 0.42188,0.21875 0.96875,0.21875 0.78125,0 1.17188,-0.3125 0.39062,-0.3125 0.39062,-0.73438 0,-0.3125 -0.23437,-0.57812 -0.23438,-0.28125 -1.17188,-0.67188 -0.9375,-0.40625 -1.1875,-0.57812 -0.4375,-0.26563 -0.67187,-0.625 -0.21875,-0.35938 -0.21875,-0.82813 0,-0.8125 0.65625,-1.39062 0.65625,-0.59375 1.82812,-0.59375 1.29688,0 1.96875,0.60937 0.6875,0.59375 0.71875,1.57813 l -1.15625,0.0781 q -0.0312,-0.625 -0.45312,-0.98437 -0.40625,-0.375 -1.17188,-0.375 -0.60937,0 -0.95312,0.28125 -0.32813,0.28125 -0.32813,0.60937 0,0.3125 0.29688,0.5625 0.1875,0.17188 1,0.53125 1.35937,0.57813 1.70312,0.92188 0.5625,0.53125 0.5625,1.3125 0,0.51562 -0.3125,1.01562 -0.3125,0.48438 -0.96875,0.78125 -0.64062,0.29688 -1.51562,0.29688 -1.20313,0 -2.04688,-0.59375 -0.84375,-0.59375 -0.79687,-1.92188 z m 9.32031,1.40625 -0.20312,0.95313 q -0.42188,0.10937 -0.8125,0.10937 -0.70313,0 -1.125,-0.34375 -0.3125,-0.25 -0.3125,-0.70312 0,-0.23438 0.17187,-1.04688 l 0.82813,-4.01562 h -0.92188 l 0.1875,-0.90625 h 0.9375 l 0.34375,-1.70313 1.35938,-0.8125 -0.53125,2.51563 h 1.15625 l -0.1875,0.90625 h -1.15625 l -0.79688,3.8125 q -0.15625,0.73437 -0.15625,0.875 0,0.21875 0.10938,0.32812 0.125,0.10938 0.40625,0.10938 0.39062,0 0.70312,-0.0781 z m 0.93737,0.95313 1.45312,-6.90625 h 1.03125 l -0.28125,1.40625 q 0.53125,-0.79688 1.03125,-1.17188 0.51563,-0.39062 1.04688,-0.39062 0.35937,0 0.875,0.25 l -0.48438,1.09375 q -0.3125,-0.21875 -0.67187,-0.21875 -0.625,0 -1.28125,0.6875 -0.64063,0.6875 -1.01563,2.48437 l -0.57812,2.76563 z m 9.15712,-1.25 q -1.23438,1.40625 -2.54688,1.40625 -0.79687,0 -1.29687,-0.45313 -0.48438,-0.46875 -0.48438,-1.125 0,-0.4375 0.21875,-1.5 l 0.84375,-3.98437 h 1.17188 l -0.92188,4.40625 q -0.10937,0.5625 -0.10937,0.85937 0,0.39063 0.23437,0.60938 0.23438,0.21875 0.70313,0.21875 0.48437,0 0.95312,-0.23438 0.48438,-0.23437 0.8125,-0.64062 0.34375,-0.42188 0.5625,-0.98438 0.14063,-0.35937 0.32813,-1.25 l 0.625,-2.98437 h 1.1875 l -1.45313,6.90625 h -1.07812 z m 7.47497,-1.26563 1.17188,0.125 q -0.4375,1.29688 -1.26563,1.92188 -0.8125,0.625 -1.84375,0.625 -1.14062,0 -1.84375,-0.71875 -0.6875,-0.73438 -0.6875,-2.04688 0,-1.125 0.4375,-2.21875 0.45313,-1.09375 1.28125,-1.65625 0.84375,-0.57812 1.92188,-0.57812 1.10937,0 1.76562,0.625 0.65625,0.625 0.65625,1.65625 l -1.15625,0.0781 q -0.0156,-0.65625 -0.39062,-1.01562 -0.375,-0.375 -0.98438,-0.375 -0.70312,0 -1.23437,0.45312 -0.51563,0.4375 -0.8125,1.35938 -0.29688,0.90625 -0.29688,1.75 0,0.89062 0.39063,1.34375 0.39062,0.4375 0.96875,0.4375 0.5625,0 1.07812,-0.4375 0.53125,-0.4375 0.84375,-1.32813 z m 4.64844,1.5625 -0.20313,0.95313 q -0.42187,0.10937 -0.8125,0.10937 -0.70312,0 -1.125,-0.34375 -0.3125,-0.25 -0.3125,-0.70312 0,-0.23438 0.17188,-1.04688 l 0.82812,-4.01562 h -0.92187 l 0.1875,-0.90625 h 0.9375 l 0.34375,-1.70313 1.35937,-0.8125 -0.53125,2.51563 h 1.15625 l -0.1875,0.90625 h -1.15625 l -0.79687,3.8125 q -0.15625,0.73437 -0.15625,0.875 0,0.21875 0.10937,0.32812 0.125,0.10938 0.40625,0.10938 0.39063,0 0.70313,-0.0781 z m 4.64035,0.95313 1.45312,-6.90625 h 1.03125 l -0.28125,1.40625 q 0.53125,-0.79688 1.03125,-1.17188 0.51563,-0.39062 1.04688,-0.39062 0.35937,0 0.875,0.25 l -0.48438,1.09375 q -0.3125,-0.21875 -0.67187,-0.21875 -0.625,0 -1.28125,0.6875 -0.64063,0.6875 -1.01563,2.48437 l -0.57812,2.76563 z m 7.20399,-0.95313 -0.20312,0.95313 q -0.42188,0.10937 -0.8125,0.10937 -0.70313,0 -1.125,-0.34375 -0.3125,-0.25 -0.3125,-0.70312 0,-0.23438 0.17187,-1.04688 l 0.82813,-4.01562 h -0.92188 l 0.1875,-0.90625 h 0.9375 l 0.34375,-1.70313 1.35938,-0.8125 -0.53125,2.51563 h 1.15625 l -0.1875,0.90625 h -1.15625 l -0.79688,3.8125 q -0.15625,0.73437 -0.15625,0.875 0,0.21875 0.10938,0.32812 0.125,0.10938 0.40625,0.10938 0.39062,0 0.70312,-0.0781 z m 6.01549,-1.39062 1.15625,0.10937 q -0.25,0.85938 -1.14062,1.625 -0.89063,0.76563 -2.125,0.76563 -0.76563,0 -1.40625,-0.34375 -0.64063,-0.35938 -0.98438,-1.03125 -0.32812,-0.6875 -0.32812,-1.54688 0,-1.14062 0.51562,-2.20312 0.53125,-1.0625 1.35938,-1.57813 0.84375,-0.51562 1.8125,-0.51562 1.23437,0 1.96875,0.76562 0.75,0.76563 0.75,2.09375 0,0.5 -0.0937,1.04688 h -5.09375 q -0.0312,0.1875 -0.0312,0.35937 0,0.96875 0.4375,1.48438 0.45312,0.5 1.10937,0.5 0.59375,0 1.17188,-0.39063 0.59375,-0.39062 0.92187,-1.14062 z m -3.42187,-1.71875 h 3.875 q 0.0156,-0.1875 0.0156,-0.26563 0,-0.875 -0.45312,-1.34375 -0.4375,-0.48437 -1.125,-0.48437 -0.76563,0 -1.39063,0.53125 -0.60937,0.51562 -0.92187,1.5625 z m 4.47497,6.71875 v -0.85938 h 7.76563 v 0.85938 z m 8.69373,-2.65625 1.45312,-6.90625 h 1.0625 l -0.25,1.20312 q 0.6875,-0.71875 1.29688,-1.03125 0.60937,-0.32812 1.23437,-0.32812 0.84375,0 1.3125,0.45312 0.48438,0.45313 0.48438,1.21875 0,0.375 -0.17188,1.20313 l -0.875,4.1875 h -1.17187 l 0.92187,-4.375 q 0.125,-0.64063 0.125,-0.95313 0,-0.34375 -0.23437,-0.54687 -0.23438,-0.21875 -0.6875,-0.21875 -0.90625,0 -1.60938,0.65625 -0.70312,0.64062 -1.03125,2.21875 l -0.67187,3.21875 z m 7.63122,-2.625 q 0,-2.01563 1.1875,-3.34375 0.98438,-1.09375 2.57813,-1.09375 1.25,0 2.01562,0.78125 0.76563,0.78125 0.76563,2.10937 0,1.1875 -0.48438,2.21875 -0.48437,1.01563 -1.375,1.5625 -0.89062,0.54688 -1.875,0.54688 -0.79687,0 -1.46875,-0.34375 -0.65625,-0.34375 -1,-0.96875 -0.34375,-0.64063 -0.34375,-1.46875 z m 1.17188,-0.10938 q 0,0.96875 0.46875,1.48438 0.46875,0.5 1.1875,0.5 0.375,0 0.75,-0.15625 0.375,-0.15625 0.6875,-0.46875 0.32812,-0.3125 0.54687,-0.70313 0.21875,-0.40625 0.35938,-0.875 0.20312,-0.64062 0.20312,-1.23437 0,-0.9375 -0.46875,-1.45313 -0.46875,-0.51562 -1.1875,-0.51562 -0.5625,0 -1.01562,0.26562 -0.45313,0.26563 -0.82813,0.78125 -0.35937,0.5 -0.53125,1.17188 -0.17187,0.67187 -0.17187,1.20312 z m 10.69372,1.73438 q -1.01562,1.15625 -2.10937,1.15625 -0.98438,0 -1.64063,-0.71875 -0.65625,-0.73438 -0.65625,-2.10938 0,-1.26562 0.51563,-2.3125 0.51562,-1.04687 1.29687,-1.5625 0.78125,-0.51562 1.5625,-0.51562 1.28125,0 1.9375,1.23437 l 0.78125,-3.71875 h 1.17188 l -1.98438,9.54688 h -1.09375 z m -3.23437,-1.89063 q 0,0.71875 0.14062,1.14063 0.14063,0.40625 0.48438,0.6875 0.34375,0.28125 0.82812,0.28125 0.79688,0 1.45313,-0.84375 0.875,-1.10938 0.875,-2.73438 0,-0.8125 -0.4375,-1.26562 -0.42188,-0.46875 -1.07813,-0.46875 -0.42187,0 -0.76562,0.1875 -0.34375,0.1875 -0.6875,0.64062 -0.34375,0.45313 -0.57813,1.15625 -0.23437,0.6875 -0.23437,1.21875 z m 11.0531,0.54688 1.15625,0.10937 q -0.25,0.85938 -1.14062,1.625 -0.89063,0.76563 -2.125,0.76563 -0.76563,0 -1.40625,-0.34375 -0.64063,-0.35938 -0.98438,-1.03125 -0.32812,-0.6875 -0.32812,-1.54688 0,-1.14062 0.51562,-2.20312 0.53125,-1.0625 1.35938,-1.57813 0.84375,-0.51562 1.8125,-0.51562 1.23437,0 1.96875,0.76562 0.75,0.76563 0.75,2.09375 0,0.5 -0.0937,1.04688 h -5.09375 q -0.0312,0.1875 -0.0312,0.35937 0,0.96875 0.4375,1.48438 0.45312,0.5 1.10937,0.5 0.59375,0 1.17188,-0.39063 0.59375,-0.39062 0.92187,-1.14062 z m -3.42187,-1.71875 h 3.875 q 0.0156,-0.1875 0.0156,-0.26563 0,-0.875 -0.45312,-1.34375 -0.4375,-0.48437 -1.125,-0.48437 -0.76563,0 -1.39063,0.53125 -0.60937,0.51562 -0.92187,1.5625 z"
-       fill-rule="nonzero"
-       id="path264" />
-    <path
-       fill="#000000"
-       d="m 187.94858,288.60097 v -9.54687 h 1.29687 l 5.01563,7.5 v -7.5 h 1.20312 v 9.54687 h -1.29687 l -5.01563,-7.5 v 7.5 z m 9.04703,-3.45312 q 0,-1.92188 1.07812,-2.84375 0.89063,-0.76563 2.17188,-0.76563 1.42187,0 2.32812,0.9375 0.90625,0.92188 0.90625,2.57813 0,1.32812 -0.40625,2.09375 -0.39062,0.76562 -1.15625,1.1875 -0.76562,0.42187 -1.67187,0.42187 -1.45313,0 -2.35938,-0.92187 -0.89062,-0.9375 -0.89062,-2.6875 z m 1.20312,0 q 0,1.32812 0.57813,1.98437 0.59375,0.65625 1.46875,0.65625 0.875,0 1.45312,-0.65625 0.57813,-0.67187 0.57813,-2.03125 0,-1.28125 -0.59375,-1.9375 -0.57813,-0.65625 -1.4375,-0.65625 -0.875,0 -1.46875,0.65625 -0.57813,0.65625 -0.57813,1.98438 z m 11.13123,3.45312 v -0.875 q -0.65625,1.03125 -1.9375,1.03125 -0.8125,0 -1.51563,-0.45312 -0.6875,-0.45313 -1.07812,-1.26563 -0.375,-0.82812 -0.375,-1.89062 0,-1.03125 0.34375,-1.875 0.34375,-0.84375 1.03125,-1.28125 0.70312,-0.45313 1.54687,-0.45313 0.625,0 1.10938,0.26563 0.5,0.25 0.79687,0.67187 v -3.42187 h 1.17188 v 9.54687 z m -3.70313,-3.45312 q 0,1.32812 0.5625,1.98437 0.5625,0.65625 1.32813,0.65625 0.76562,0 1.29687,-0.625 0.53125,-0.625 0.53125,-1.90625 0,-1.42187 -0.54687,-2.07812 -0.54688,-0.67188 -1.34375,-0.67188 -0.78125,0 -1.3125,0.64063 -0.51563,0.625 -0.51563,2 z m 11.36561,1.23437 1.20312,0.14063 q -0.28125,1.0625 -1.0625,1.65625 -0.76562,0.57812 -1.96875,0.57812 -1.51562,0 -2.40625,-0.9375 -0.89062,-0.9375 -0.89062,-2.60937 0,-1.75 0.89062,-2.70313 0.90625,-0.96875 2.34375,-0.96875 1.39063,0 2.26563,0.9375 0.875,0.9375 0.875,2.65625 0,0.10938 0,0.3125 h -5.15625 q 0.0625,1.14063 0.64062,1.75 0.57813,0.59375 1.4375,0.59375 0.65625,0 1.10938,-0.32812 0.45312,-0.34375 0.71875,-1.07813 z m -3.84375,-1.90625 h 3.85937 q -0.0781,-0.85937 -0.4375,-1.29687 -0.5625,-0.6875 -1.45312,-0.6875 -0.8125,0 -1.35938,0.54687 -0.54687,0.53125 -0.60937,1.4375 z m 14.31858,4.125 h -1.17187 v -7.46875 q -0.42188,0.40625 -1.10938,0.8125 -0.6875,0.40625 -1.23437,0.60938 v -1.14063 q 0.98437,-0.45312 1.71875,-1.10937 0.73437,-0.67188 1.03125,-1.28125 h 0.76562 z"
-       fill-rule="nonzero"
-       id="path266" />
-    <path
-       fill="#000000"
-       d="m 164.51677,302.2416 1.1875,-0.0781 q 0,0.51563 0.15625,0.875 0.15625,0.35938 0.57812,0.59375 0.42188,0.21875 0.96875,0.21875 0.78125,0 1.17188,-0.3125 0.39062,-0.3125 0.39062,-0.73437 0,-0.3125 -0.23437,-0.57813 -0.23438,-0.28125 -1.17188,-0.67187 -0.9375,-0.40625 -1.1875,-0.57813 -0.4375,-0.26562 -0.67187,-0.625 -0.21875,-0.35937 -0.21875,-0.82812 0,-0.8125 0.65625,-1.39063 0.65625,-0.59375 1.82812,-0.59375 1.29688,0 1.96875,0.60938 0.6875,0.59375 0.71875,1.57812 l -1.15625,0.0781 q -0.0312,-0.625 -0.45312,-0.98438 -0.40625,-0.375 -1.17188,-0.375 -0.60937,0 -0.95312,0.28125 -0.32813,0.28125 -0.32813,0.60938 0,0.3125 0.29688,0.5625 0.1875,0.17187 1,0.53125 1.35937,0.57812 1.70312,0.92187 0.5625,0.53125 0.5625,1.3125 0,0.51563 -0.3125,1.01563 -0.3125,0.48437 -0.96875,0.78125 -0.64062,0.29687 -1.51562,0.29687 -1.20313,0 -2.04688,-0.59375 -0.84375,-0.59375 -0.79687,-1.92187 z m 9.32031,1.40625 -0.20312,0.95312 q -0.42188,0.10938 -0.8125,0.10938 -0.70313,0 -1.125,-0.34375 -0.3125,-0.25 -0.3125,-0.70313 0,-0.23437 0.17187,-1.04687 l 0.82813,-4.01563 h -0.92188 l 0.1875,-0.90625 h 0.9375 l 0.34375,-1.70312 1.35938,-0.8125 -0.53125,2.51562 h 1.15625 l -0.1875,0.90625 h -1.15625 l -0.79688,3.8125 q -0.15625,0.73438 -0.15625,0.875 0,0.21875 0.10938,0.32813 0.125,0.10937 0.40625,0.10937 0.39062,0 0.70312,-0.0781 z m 0.93737,0.95312 1.45312,-6.90625 h 1.03125 l -0.28125,1.40625 q 0.53125,-0.79687 1.03125,-1.17187 0.51563,-0.39063 1.04688,-0.39063 0.35937,0 0.875,0.25 l -0.48438,1.09375 q -0.3125,-0.21875 -0.67187,-0.21875 -0.625,0 -1.28125,0.6875 -0.64063,0.6875 -1.01563,2.48438 l -0.57812,2.76562 z m 9.15712,-1.25 q -1.23438,1.40625 -2.54688,1.40625 -0.79687,0 -1.29687,-0.45312 -0.48438,-0.46875 -0.48438,-1.125 0,-0.4375 0.21875,-1.5 l 0.84375,-3.98438 h 1.17188 l -0.92188,4.40625 q -0.10937,0.5625 -0.10937,0.85938 0,0.39062 0.23437,0.60937 0.23438,0.21875 0.70313,0.21875 0.48437,0 0.95312,-0.23437 0.48438,-0.23438 0.8125,-0.64063 0.34375,-0.42187 0.5625,-0.98437 0.14063,-0.35938 0.32813,-1.25 l 0.625,-2.98438 h 1.1875 l -1.45313,6.90625 h -1.07812 z m 7.47497,-1.26562 1.17188,0.125 q -0.4375,1.29687 -1.26563,1.92187 -0.8125,0.625 -1.84375,0.625 -1.14062,0 -1.84375,-0.71875 -0.6875,-0.73437 -0.6875,-2.04687 0,-1.125 0.4375,-2.21875 0.45313,-1.09375 1.28125,-1.65625 0.84375,-0.57813 1.92188,-0.57813 1.10937,0 1.76562,0.625 0.65625,0.625 0.65625,1.65625 l -1.15625,0.0781 q -0.0156,-0.65625 -0.39062,-1.01563 -0.375,-0.375 -0.98438,-0.375 -0.70312,0 -1.23437,0.45313 -0.51563,0.4375 -0.8125,1.35937 -0.29688,0.90625 -0.29688,1.75 0,0.89063 0.39063,1.34375 0.39062,0.4375 0.96875,0.4375 0.5625,0 1.07812,-0.4375 0.53125,-0.4375 0.84375,-1.32812 z m 4.64844,1.5625 -0.20313,0.95312 q -0.42187,0.10938 -0.8125,0.10938 -0.70312,0 -1.125,-0.34375 -0.3125,-0.25 -0.3125,-0.70313 0,-0.23437 0.17188,-1.04687 l 0.82812,-4.01563 h -0.92187 l 0.1875,-0.90625 h 0.9375 l 0.34375,-1.70312 1.35937,-0.8125 -0.53125,2.51562 h 1.15625 l -0.1875,0.90625 h -1.15625 l -0.79687,3.8125 q -0.15625,0.73438 -0.15625,0.875 0,0.21875 0.10937,0.32813 0.125,0.10937 0.40625,0.10937 0.39063,0 0.70313,-0.0781 z m 4.64035,0.95312 1.45312,-6.90625 h 1.03125 l -0.28125,1.40625 q 0.53125,-0.79687 1.03125,-1.17187 0.51563,-0.39063 1.04688,-0.39063 0.35937,0 0.875,0.25 l -0.48438,1.09375 q -0.3125,-0.21875 -0.67187,-0.21875 -0.625,0 -1.28125,0.6875 -0.64063,0.6875 -1.01563,2.48438 l -0.57812,2.76562 z m 7.20399,-0.95312 -0.20312,0.95312 q -0.42188,0.10938 -0.8125,0.10938 -0.70313,0 -1.125,-0.34375 -0.3125,-0.25 -0.3125,-0.70313 0,-0.23437 0.17187,-1.04687 l 0.82813,-4.01563 h -0.92188 l 0.1875,-0.90625 h 0.9375 l 0.34375,-1.70312 1.35938,-0.8125 -0.53125,2.51562 h 1.15625 l -0.1875,0.90625 h -1.15625 l -0.79688,3.8125 q -0.15625,0.73438 -0.15625,0.875 0,0.21875 0.10938,0.32813 0.125,0.10937 0.40625,0.10937 0.39062,0 0.70312,-0.0781 z m 6.01549,-1.39063 1.15625,0.10938 q -0.25,0.85937 -1.14062,1.625 -0.89063,0.76562 -2.125,0.76562 -0.76563,0 -1.40625,-0.34375 -0.64063,-0.35937 -0.98438,-1.03125 -0.32812,-0.6875 -0.32812,-1.54687 0,-1.14063 0.51562,-2.20313 0.53125,-1.0625 1.35938,-1.57812 0.84375,-0.51563 1.8125,-0.51563 1.23437,0 1.96875,0.76563 0.75,0.76562 0.75,2.09375 0,0.5 -0.0937,1.04687 h -5.09375 q -0.0312,0.1875 -0.0312,0.35938 0,0.96875 0.4375,1.48437 0.45312,0.5 1.10937,0.5 0.59375,0 1.17188,-0.39062 0.59375,-0.39063 0.92187,-1.14063 z m -3.42187,-1.71875 h 3.875 q 0.0156,-0.1875 0.0156,-0.26562 0,-0.875 -0.45312,-1.34375 -0.4375,-0.48438 -1.125,-0.48438 -0.76563,0 -1.39063,0.53125 -0.60937,0.51563 -0.92187,1.5625 z m 4.47497,6.71875 v -0.85937 h 7.76563 v 0.85937 z m 8.69373,-2.65625 1.45312,-6.90625 h 1.0625 l -0.25,1.20313 q 0.6875,-0.71875 1.29688,-1.03125 0.60937,-0.32813 1.23437,-0.32813 0.84375,0 1.3125,0.45313 0.48438,0.45312 0.48438,1.21875 0,0.375 -0.17188,1.20312 l -0.875,4.1875 h -1.17187 l 0.92187,-4.375 q 0.125,-0.64062 0.125,-0.95312 0,-0.34375 -0.23437,-0.54688 -0.23438,-0.21875 -0.6875,-0.21875 -0.90625,0 -1.60938,0.65625 -0.70312,0.64063 -1.03125,2.21875 l -0.67187,3.21875 z m 7.63122,-2.625 q 0,-2.01562 1.1875,-3.34375 0.98438,-1.09375 2.57813,-1.09375 1.25,0 2.01562,0.78125 0.76563,0.78125 0.76563,2.10938 0,1.1875 -0.48438,2.21875 -0.48437,1.01562 -1.375,1.5625 -0.89062,0.54687 -1.875,0.54687 -0.79687,0 -1.46875,-0.34375 -0.65625,-0.34375 -1,-0.96875 -0.34375,-0.64062 -0.34375,-1.46875 z m 1.17188,-0.10937 q 0,0.96875 0.46875,1.48437 0.46875,0.5 1.1875,0.5 0.375,0 0.75,-0.15625 0.375,-0.15625 0.6875,-0.46875 0.32812,-0.3125 0.54687,-0.70312 0.21875,-0.40625 0.35938,-0.875 0.20312,-0.64063 0.20312,-1.23438 0,-0.9375 -0.46875,-1.45312 -0.46875,-0.51563 -1.1875,-0.51563 -0.5625,0 -1.01562,0.26563 -0.45313,0.26562 -0.82813,0.78125 -0.35937,0.5 -0.53125,1.17187 -0.17187,0.67188 -0.17187,1.20313 z m 10.69372,1.73437 q -1.01562,1.15625 -2.10937,1.15625 -0.98438,0 -1.64063,-0.71875 -0.65625,-0.73437 -0.65625,-2.10937 0,-1.26563 0.51563,-2.3125 0.51562,-1.04688 1.29687,-1.5625 0.78125,-0.51563 1.5625,-0.51563 1.28125,0 1.9375,1.23438 l 0.78125,-3.71875 h 1.17188 l -1.98438,9.54687 h -1.09375 z m -3.23437,-1.89062 q 0,0.71875 0.14062,1.14062 0.14063,0.40625 0.48438,0.6875 0.34375,0.28125 0.82812,0.28125 0.79688,0 1.45313,-0.84375 0.875,-1.10937 0.875,-2.73437 0,-0.8125 -0.4375,-1.26563 -0.42188,-0.46875 -1.07813,-0.46875 -0.42187,0 -0.76562,0.1875 -0.34375,0.1875 -0.6875,0.64063 -0.34375,0.45312 -0.57813,1.15625 -0.23437,0.6875 -0.23437,1.21875 z m 11.0531,0.54687 1.15625,0.10938 q -0.25,0.85937 -1.14062,1.625 -0.89063,0.76562 -2.125,0.76562 -0.76563,0 -1.40625,-0.34375 -0.64063,-0.35937 -0.98438,-1.03125 -0.32812,-0.6875 -0.32812,-1.54687 0,-1.14063 0.51562,-2.20313 0.53125,-1.0625 1.35938,-1.57812 0.84375,-0.51563 1.8125,-0.51563 1.23437,0 1.96875,0.76563 0.75,0.76562 0.75,2.09375 0,0.5 -0.0937,1.04687 h -5.09375 q -0.0312,0.1875 -0.0312,0.35938 0,0.96875 0.4375,1.48437 0.45312,0.5 1.10937,0.5 0.59375,0 1.17188,-0.39062 0.59375,-0.39063 0.92187,-1.14063 z m -3.42187,-1.71875 h 3.875 q 0.0156,-0.1875 0.0156,-0.26562 0,-0.875 -0.45312,-1.34375 -0.4375,-0.48438 -1.125,-0.48438 -0.76563,0 -1.39063,0.53125 -0.60937,0.51563 -0.92187,1.5625 z"
-       fill-rule="nonzero"
-       id="path268" />
-    <path
-       fill="#000000"
-       d="m 187.94858,339.7978 v -9.54688 h 1.29687 l 5.01563,7.5 v -7.5 h 1.20312 v 9.54688 h -1.29687 l -5.01563,-7.5 v 7.5 z m 9.04703,-3.45313 q 0,-1.92187 1.07812,-2.84375 0.89063,-0.76562 2.17188,-0.76562 1.42187,0 2.32812,0.9375 0.90625,0.92187 0.90625,2.57812 0,1.32813 -0.40625,2.09375 -0.39062,0.76563 -1.15625,1.1875 -0.76562,0.42188 -1.67187,0.42188 -1.45313,0 -2.35938,-0.92188 -0.89062,-0.9375 -0.89062,-2.6875 z m 1.20312,0 q 0,1.32813 0.57813,1.98438 0.59375,0.65625 1.46875,0.65625 0.875,0 1.45312,-0.65625 0.57813,-0.67188 0.57813,-2.03125 0,-1.28125 -0.59375,-1.9375 -0.57813,-0.65625 -1.4375,-0.65625 -0.875,0 -1.46875,0.65625 -0.57813,0.65625 -0.57813,1.98437 z m 11.13123,3.45313 v -0.875 q -0.65625,1.03125 -1.9375,1.03125 -0.8125,0 -1.51563,-0.45313 -0.6875,-0.45312 -1.07812,-1.26562 -0.375,-0.82813 -0.375,-1.89063 0,-1.03125 0.34375,-1.875 0.34375,-0.84375 1.03125,-1.28125 0.70312,-0.45312 1.54687,-0.45312 0.625,0 1.10938,0.26562 0.5,0.25 0.79687,0.67188 v -3.42188 h 1.17188 v 9.54688 z m -3.70313,-3.45313 q 0,1.32813 0.5625,1.98438 0.5625,0.65625 1.32813,0.65625 0.76562,0 1.29687,-0.625 0.53125,-0.625 0.53125,-1.90625 0,-1.42188 -0.54687,-2.07813 -0.54688,-0.67187 -1.34375,-0.67187 -0.78125,0 -1.3125,0.64062 -0.51563,0.625 -0.51563,2 z m 11.36561,1.23438 1.20312,0.14062 q -0.28125,1.0625 -1.0625,1.65625 -0.76562,0.57813 -1.96875,0.57813 -1.51562,0 -2.40625,-0.9375 -0.89062,-0.9375 -0.89062,-2.60938 0,-1.75 0.89062,-2.70312 0.90625,-0.96875 2.34375,-0.96875 1.39063,0 2.26563,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.15625 q 0.0625,1.14062 0.64062,1.75 0.57813,0.59375 1.4375,0.59375 0.65625,0 1.10938,-0.32813 0.45312,-0.34375 0.71875,-1.07812 z m -3.84375,-1.90625 h 3.85937 q -0.0781,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.45312,-0.6875 -0.8125,0 -1.35938,0.54688 -0.54687,0.53125 -0.60937,1.4375 z m 16.05296,3 v 1.125 h -6.29688 q -0.0156,-0.42188 0.14063,-0.8125 0.23437,-0.64063 0.76562,-1.26563 0.53125,-0.625 1.53125,-1.45312 1.5625,-1.26563 2.10938,-2.01563 0.54687,-0.75 0.54687,-1.40625 0,-0.70312 -0.5,-1.17187 -0.5,-0.48438 -1.29687,-0.48438 -0.85938,0 -1.375,0.51563 -0.5,0.5 -0.5,1.39062 l -1.20313,-0.10937 q 0.125,-1.35938 0.92188,-2.0625 0.8125,-0.70313 2.17187,-0.70313 1.375,0 2.17188,0.76563 0.8125,0.75 0.8125,1.875 0,0.57812 -0.23438,1.14062 -0.23437,0.54688 -0.78125,1.15625 -0.54687,0.60938 -1.8125,1.67188 -1.04687,0.89062 -1.35937,1.21875 -0.29688,0.3125 -0.48438,0.625 z"
-       fill-rule="nonzero"
-       id="path270" />
-    <path
-       fill="#000000"
-       d="m 164.51677,353.43844 1.1875,-0.0781 q 0,0.51562 0.15625,0.875 0.15625,0.35937 0.57812,0.59375 0.42188,0.21875 0.96875,0.21875 0.78125,0 1.17188,-0.3125 0.39062,-0.3125 0.39062,-0.73438 0,-0.3125 -0.23437,-0.57812 -0.23438,-0.28125 -1.17188,-0.67188 -0.9375,-0.40625 -1.1875,-0.57812 -0.4375,-0.26563 -0.67187,-0.625 -0.21875,-0.35938 -0.21875,-0.82813 0,-0.8125 0.65625,-1.39062 0.65625,-0.59375 1.82812,-0.59375 1.29688,0 1.96875,0.60937 0.6875,0.59375 0.71875,1.57813 l -1.15625,0.0781 q -0.0312,-0.625 -0.45312,-0.98437 -0.40625,-0.375 -1.17188,-0.375 -0.60937,0 -0.95312,0.28125 -0.32813,0.28125 -0.32813,0.60937 0,0.3125 0.29688,0.5625 0.1875,0.17188 1,0.53125 1.35937,0.57813 1.70312,0.92188 0.5625,0.53125 0.5625,1.3125 0,0.51562 -0.3125,1.01562 -0.3125,0.48438 -0.96875,0.78125 -0.64062,0.29688 -1.51562,0.29688 -1.20313,0 -2.04688,-0.59375 -0.84375,-0.59375 -0.79687,-1.92188 z m 9.32031,1.40625 -0.20312,0.95313 q -0.42188,0.10937 -0.8125,0.10937 -0.70313,0 -1.125,-0.34375 -0.3125,-0.25 -0.3125,-0.70312 0,-0.23438 0.17187,-1.04688 l 0.82813,-4.01562 h -0.92188 l 0.1875,-0.90625 h 0.9375 l 0.34375,-1.70313 1.35938,-0.8125 -0.53125,2.51563 h 1.15625 l -0.1875,0.90625 h -1.15625 l -0.79688,3.8125 q -0.15625,0.73437 -0.15625,0.875 0,0.21875 0.10938,0.32812 0.125,0.10938 0.40625,0.10938 0.39062,0 0.70312,-0.0781 z m 0.93737,0.95313 1.45312,-6.90625 h 1.03125 l -0.28125,1.40625 q 0.53125,-0.79688 1.03125,-1.17188 0.51563,-0.39062 1.04688,-0.39062 0.35937,0 0.875,0.25 l -0.48438,1.09375 q -0.3125,-0.21875 -0.67187,-0.21875 -0.625,0 -1.28125,0.6875 -0.64063,0.6875 -1.01563,2.48437 l -0.57812,2.76563 z m 9.15712,-1.25 q -1.23438,1.40625 -2.54688,1.40625 -0.79687,0 -1.29687,-0.45313 -0.48438,-0.46875 -0.48438,-1.125 0,-0.4375 0.21875,-1.5 l 0.84375,-3.98437 h 1.17188 l -0.92188,4.40625 q -0.10937,0.5625 -0.10937,0.85937 0,0.39063 0.23437,0.60938 0.23438,0.21875 0.70313,0.21875 0.48437,0 0.95312,-0.23438 0.48438,-0.23437 0.8125,-0.64062 0.34375,-0.42188 0.5625,-0.98438 0.14063,-0.35937 0.32813,-1.25 l 0.625,-2.98437 h 1.1875 l -1.45313,6.90625 h -1.07812 z m 7.47497,-1.26563 1.17188,0.125 q -0.4375,1.29688 -1.26563,1.92188 -0.8125,0.625 -1.84375,0.625 -1.14062,0 -1.84375,-0.71875 -0.6875,-0.73438 -0.6875,-2.04688 0,-1.125 0.4375,-2.21875 0.45313,-1.09375 1.28125,-1.65625 0.84375,-0.57812 1.92188,-0.57812 1.10937,0 1.76562,0.625 0.65625,0.625 0.65625,1.65625 l -1.15625,0.0781 q -0.0156,-0.65625 -0.39062,-1.01562 -0.375,-0.375 -0.98438,-0.375 -0.70312,0 -1.23437,0.45312 -0.51563,0.4375 -0.8125,1.35938 -0.29688,0.90625 -0.29688,1.75 0,0.89062 0.39063,1.34375 0.39062,0.4375 0.96875,0.4375 0.5625,0 1.07812,-0.4375 0.53125,-0.4375 0.84375,-1.32813 z m 4.64844,1.5625 -0.20313,0.95313 q -0.42187,0.10937 -0.8125,0.10937 -0.70312,0 -1.125,-0.34375 -0.3125,-0.25 -0.3125,-0.70312 0,-0.23438 0.17188,-1.04688 l 0.82812,-4.01562 h -0.92187 l 0.1875,-0.90625 h 0.9375 l 0.34375,-1.70313 1.35937,-0.8125 -0.53125,2.51563 h 1.15625 l -0.1875,0.90625 h -1.15625 l -0.79687,3.8125 q -0.15625,0.73437 -0.15625,0.875 0,0.21875 0.10937,0.32812 0.125,0.10938 0.40625,0.10938 0.39063,0 0.70313,-0.0781 z m 4.64035,0.95313 1.45312,-6.90625 h 1.03125 l -0.28125,1.40625 q 0.53125,-0.79688 1.03125,-1.17188 0.51563,-0.39062 1.04688,-0.39062 0.35937,0 0.875,0.25 l -0.48438,1.09375 q -0.3125,-0.21875 -0.67187,-0.21875 -0.625,0 -1.28125,0.6875 -0.64063,0.6875 -1.01563,2.48437 l -0.57812,2.76563 z m 7.20399,-0.95313 -0.20312,0.95313 q -0.42188,0.10937 -0.8125,0.10937 -0.70313,0 -1.125,-0.34375 -0.3125,-0.25 -0.3125,-0.70312 0,-0.23438 0.17187,-1.04688 l 0.82813,-4.01562 h -0.92188 l 0.1875,-0.90625 h 0.9375 l 0.34375,-1.70313 1.35938,-0.8125 -0.53125,2.51563 h 1.15625 l -0.1875,0.90625 h -1.15625 l -0.79688,3.8125 q -0.15625,0.73437 -0.15625,0.875 0,0.21875 0.10938,0.32812 0.125,0.10938 0.40625,0.10938 0.39062,0 0.70312,-0.0781 z m 6.01549,-1.39062 1.15625,0.10937 q -0.25,0.85938 -1.14062,1.625 -0.89063,0.76563 -2.125,0.76563 -0.76563,0 -1.40625,-0.34375 -0.64063,-0.35938 -0.98438,-1.03125 -0.32812,-0.6875 -0.32812,-1.54688 0,-1.14062 0.51562,-2.20312 0.53125,-1.0625 1.35938,-1.57813 0.84375,-0.51562 1.8125,-0.51562 1.23437,0 1.96875,0.76562 0.75,0.76563 0.75,2.09375 0,0.5 -0.0937,1.04688 h -5.09375 q -0.0312,0.1875 -0.0312,0.35937 0,0.96875 0.4375,1.48438 0.45312,0.5 1.10937,0.5 0.59375,0 1.17188,-0.39063 0.59375,-0.39062 0.92187,-1.14062 z m -3.42187,-1.71875 h 3.875 q 0.0156,-0.1875 0.0156,-0.26563 0,-0.875 -0.45312,-1.34375 -0.4375,-0.48437 -1.125,-0.48437 -0.76563,0 -1.39063,0.53125 -0.60937,0.51562 -0.92187,1.5625 z m 4.47497,6.71875 v -0.85938 h 7.76563 v 0.85938 z m 8.69373,-2.65625 1.45312,-6.90625 h 1.0625 l -0.25,1.20312 q 0.6875,-0.71875 1.29688,-1.03125 0.60937,-0.32812 1.23437,-0.32812 0.84375,0 1.3125,0.45312 0.48438,0.45313 0.48438,1.21875 0,0.375 -0.17188,1.20313 l -0.875,4.1875 h -1.17187 l 0.92187,-4.375 q 0.125,-0.64063 0.125,-0.95313 0,-0.34375 -0.23437,-0.54687 -0.23438,-0.21875 -0.6875,-0.21875 -0.90625,0 -1.60938,0.65625 -0.70312,0.64062 -1.03125,2.21875 l -0.67187,3.21875 z m 7.63122,-2.625 q 0,-2.01563 1.1875,-3.34375 0.98438,-1.09375 2.57813,-1.09375 1.25,0 2.01562,0.78125 0.76563,0.78125 0.76563,2.10937 0,1.1875 -0.48438,2.21875 -0.48437,1.01563 -1.375,1.5625 -0.89062,0.54688 -1.875,0.54688 -0.79687,0 -1.46875,-0.34375 -0.65625,-0.34375 -1,-0.96875 -0.34375,-0.64063 -0.34375,-1.46875 z m 1.17188,-0.10938 q 0,0.96875 0.46875,1.48438 0.46875,0.5 1.1875,0.5 0.375,0 0.75,-0.15625 0.375,-0.15625 0.6875,-0.46875 0.32812,-0.3125 0.54687,-0.70313 0.21875,-0.40625 0.35938,-0.875 0.20312,-0.64062 0.20312,-1.23437 0,-0.9375 -0.46875,-1.45313 -0.46875,-0.51562 -1.1875,-0.51562 -0.5625,0 -1.01562,0.26562 -0.45313,0.26563 -0.82813,0.78125 -0.35937,0.5 -0.53125,1.17188 -0.17187,0.67187 -0.17187,1.20312 z m 10.69372,1.73438 q -1.01562,1.15625 -2.10937,1.15625 -0.98438,0 -1.64063,-0.71875 -0.65625,-0.73438 -0.65625,-2.10938 0,-1.26562 0.51563,-2.3125 0.51562,-1.04687 1.29687,-1.5625 0.78125,-0.51562 1.5625,-0.51562 1.28125,0 1.9375,1.23437 l 0.78125,-3.71875 h 1.17188 l -1.98438,9.54688 h -1.09375 z m -3.23437,-1.89063 q 0,0.71875 0.14062,1.14063 0.14063,0.40625 0.48438,0.6875 0.34375,0.28125 0.82812,0.28125 0.79688,0 1.45313,-0.84375 0.875,-1.10938 0.875,-2.73438 0,-0.8125 -0.4375,-1.26562 -0.42188,-0.46875 -1.07813,-0.46875 -0.42187,0 -0.76562,0.1875 -0.34375,0.1875 -0.6875,0.64062 -0.34375,0.45313 -0.57813,1.15625 -0.23437,0.6875 -0.23437,1.21875 z m 11.0531,0.54688 1.15625,0.10937 q -0.25,0.85938 -1.14062,1.625 -0.89063,0.76563 -2.125,0.76563 -0.76563,0 -1.40625,-0.34375 -0.64063,-0.35938 -0.98438,-1.03125 -0.32812,-0.6875 -0.32812,-1.54688 0,-1.14062 0.51562,-2.20312 0.53125,-1.0625 1.35938,-1.57813 0.84375,-0.51562 1.8125,-0.51562 1.23437,0 1.96875,0.76562 0.75,0.76563 0.75,2.09375 0,0.5 -0.0937,1.04688 h -5.09375 q -0.0312,0.1875 -0.0312,0.35937 0,0.96875 0.4375,1.48438 0.45312,0.5 1.10937,0.5 0.59375,0 1.17188,-0.39063 0.59375,-0.39062 0.92187,-1.14062 z m -3.42187,-1.71875 h 3.875 q 0.0156,-0.1875 0.0156,-0.26563 0,-0.875 -0.45312,-1.34375 -0.4375,-0.48437 -1.125,-0.48437 -0.76563,0 -1.39063,0.53125 -0.60937,0.51562 -0.92187,1.5625 z"
-       fill-rule="nonzero"
-       id="path272" />
-    <path
-       fill="#000000"
-       d="m 186.84224,390.99465 v -9.54688 h 1.29687 l 5.01563,7.5 v -7.5 h 1.20312 v 9.54688 h -1.29687 l -5.01563,-7.5 v 7.5 z m 9.04703,-3.45313 q 0,-1.92187 1.07812,-2.84375 0.89063,-0.76562 2.17188,-0.76562 1.42187,0 2.32812,0.9375 0.90625,0.92187 0.90625,2.57812 0,1.32813 -0.40625,2.09375 -0.39062,0.76563 -1.15625,1.1875 -0.76562,0.42188 -1.67187,0.42188 -1.45313,0 -2.35938,-0.92188 -0.89062,-0.9375 -0.89062,-2.6875 z m 1.20312,0 q 0,1.32813 0.57813,1.98438 0.59375,0.65625 1.46875,0.65625 0.875,0 1.45312,-0.65625 0.57813,-0.67188 0.57813,-2.03125 0,-1.28125 -0.59375,-1.9375 -0.57813,-0.65625 -1.4375,-0.65625 -0.875,0 -1.46875,0.65625 -0.57813,0.65625 -0.57813,1.98437 z m 11.13123,3.45313 v -0.875 q -0.65625,1.03125 -1.9375,1.03125 -0.8125,0 -1.51563,-0.45313 -0.6875,-0.45312 -1.07812,-1.26562 -0.375,-0.82813 -0.375,-1.89063 0,-1.03125 0.34375,-1.875 0.34375,-0.84375 1.03125,-1.28125 0.70312,-0.45312 1.54687,-0.45312 0.625,0 1.10938,0.26562 0.5,0.25 0.79687,0.67188 v -3.42188 h 1.17188 v 9.54688 z m -3.70313,-3.45313 q 0,1.32813 0.5625,1.98438 0.5625,0.65625 1.32813,0.65625 0.76562,0 1.29687,-0.625 0.53125,-0.625 0.53125,-1.90625 0,-1.42188 -0.54687,-2.07813 -0.54688,-0.67187 -1.34375,-0.67187 -0.78125,0 -1.3125,0.64062 -0.51563,0.625 -0.51563,2 z m 11.3656,1.23438 1.20313,0.14062 q -0.28125,1.0625 -1.0625,1.65625 -0.76563,0.57813 -1.96875,0.57813 -1.51563,0 -2.40625,-0.9375 -0.89063,-0.9375 -0.89063,-2.60938 0,-1.75 0.89063,-2.70312 0.90625,-0.96875 2.34375,-0.96875 1.39062,0 2.26562,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.15625 q 0.0625,1.14062 0.64063,1.75 0.57812,0.59375 1.4375,0.59375 0.65625,0 1.10937,-0.32813 0.45313,-0.34375 0.71875,-1.07812 z m -3.84375,-1.90625 h 3.85938 q -0.0781,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.45313,-0.6875 -0.8125,0 -1.35937,0.54688 -0.54688,0.53125 -0.60938,1.4375 z m 10.36547,4.125 v -9.54688 h 1.29687 l 5.01563,7.5 v -7.5 h 1.20312 v 9.54688 h -1.29687 l -5.01563,-7.5 v 7.5 z"
-       fill-rule="nonzero"
-       id="path274" />
-    <path
-       fill="#000000"
-       d="m 164.51677,404.63527 1.1875,-0.0781 q 0,0.51563 0.15625,0.875 0.15625,0.35938 0.57812,0.59375 0.42188,0.21875 0.96875,0.21875 0.78125,0 1.17188,-0.3125 0.39062,-0.3125 0.39062,-0.73437 0,-0.3125 -0.23437,-0.57813 -0.23438,-0.28125 -1.17188,-0.67187 -0.9375,-0.40625 -1.1875,-0.57813 -0.4375,-0.26562 -0.67187,-0.625 -0.21875,-0.35937 -0.21875,-0.82812 0,-0.8125 0.65625,-1.39063 0.65625,-0.59375 1.82812,-0.59375 1.29688,0 1.96875,0.60938 0.6875,0.59375 0.71875,1.57812 l -1.15625,0.0781 q -0.0312,-0.625 -0.45312,-0.98438 -0.40625,-0.375 -1.17188,-0.375 -0.60937,0 -0.95312,0.28125 -0.32813,0.28125 -0.32813,0.60938 0,0.3125 0.29688,0.5625 0.1875,0.17187 1,0.53125 1.35937,0.57812 1.70312,0.92187 0.5625,0.53125 0.5625,1.3125 0,0.51563 -0.3125,1.01563 -0.3125,0.48437 -0.96875,0.78125 -0.64062,0.29687 -1.51562,0.29687 -1.20313,0 -2.04688,-0.59375 -0.84375,-0.59375 -0.79687,-1.92187 z m 9.32031,1.40625 -0.20312,0.95312 q -0.42188,0.10938 -0.8125,0.10938 -0.70313,0 -1.125,-0.34375 -0.3125,-0.25 -0.3125,-0.70313 0,-0.23437 0.17187,-1.04687 l 0.82813,-4.01563 h -0.92188 l 0.1875,-0.90625 h 0.9375 l 0.34375,-1.70312 1.35938,-0.8125 -0.53125,2.51562 h 1.15625 l -0.1875,0.90625 h -1.15625 l -0.79688,3.8125 q -0.15625,0.73438 -0.15625,0.875 0,0.21875 0.10938,0.32813 0.125,0.10937 0.40625,0.10937 0.39062,0 0.70312,-0.0781 z m 0.93737,0.95312 1.45312,-6.90625 h 1.03125 l -0.28125,1.40625 q 0.53125,-0.79687 1.03125,-1.17187 0.51563,-0.39063 1.04688,-0.39063 0.35937,0 0.875,0.25 l -0.48438,1.09375 q -0.3125,-0.21875 -0.67187,-0.21875 -0.625,0 -1.28125,0.6875 -0.64063,0.6875 -1.01563,2.48438 l -0.57812,2.76562 z m 9.15712,-1.25 q -1.23438,1.40625 -2.54688,1.40625 -0.79687,0 -1.29687,-0.45312 -0.48438,-0.46875 -0.48438,-1.125 0,-0.4375 0.21875,-1.5 l 0.84375,-3.98438 h 1.17188 l -0.92188,4.40625 q -0.10937,0.5625 -0.10937,0.85938 0,0.39062 0.23437,0.60937 0.23438,0.21875 0.70313,0.21875 0.48437,0 0.95312,-0.23437 0.48438,-0.23438 0.8125,-0.64063 0.34375,-0.42187 0.5625,-0.98437 0.14063,-0.35938 0.32813,-1.25 l 0.625,-2.98438 h 1.1875 l -1.45313,6.90625 h -1.07812 z m 7.47497,-1.26562 1.17188,0.125 q -0.4375,1.29687 -1.26563,1.92187 -0.8125,0.625 -1.84375,0.625 -1.14062,0 -1.84375,-0.71875 -0.6875,-0.73437 -0.6875,-2.04687 0,-1.125 0.4375,-2.21875 0.45313,-1.09375 1.28125,-1.65625 0.84375,-0.57813 1.92188,-0.57813 1.10937,0 1.76562,0.625 0.65625,0.625 0.65625,1.65625 l -1.15625,0.0781 q -0.0156,-0.65625 -0.39062,-1.01563 -0.375,-0.375 -0.98438,-0.375 -0.70312,0 -1.23437,0.45313 -0.51563,0.4375 -0.8125,1.35937 -0.29688,0.90625 -0.29688,1.75 0,0.89063 0.39063,1.34375 0.39062,0.4375 0.96875,0.4375 0.5625,0 1.07812,-0.4375 0.53125,-0.4375 0.84375,-1.32812 z m 4.64844,1.5625 -0.20313,0.95312 q -0.42187,0.10938 -0.8125,0.10938 -0.70312,0 -1.125,-0.34375 -0.3125,-0.25 -0.3125,-0.70313 0,-0.23437 0.17188,-1.04687 l 0.82812,-4.01563 h -0.92187 l 0.1875,-0.90625 h 0.9375 l 0.34375,-1.70312 1.35937,-0.8125 -0.53125,2.51562 h 1.15625 l -0.1875,0.90625 h -1.15625 l -0.79687,3.8125 q -0.15625,0.73438 -0.15625,0.875 0,0.21875 0.10937,0.32813 0.125,0.10937 0.40625,0.10937 0.39063,0 0.70313,-0.0781 z m 4.64035,0.95312 1.45312,-6.90625 h 1.03125 l -0.28125,1.40625 q 0.53125,-0.79687 1.03125,-1.17187 0.51563,-0.39063 1.04688,-0.39063 0.35937,0 0.875,0.25 l -0.48438,1.09375 q -0.3125,-0.21875 -0.67187,-0.21875 -0.625,0 -1.28125,0.6875 -0.64063,0.6875 -1.01563,2.48438 l -0.57812,2.76562 z m 7.20399,-0.95312 -0.20312,0.95312 q -0.42188,0.10938 -0.8125,0.10938 -0.70313,0 -1.125,-0.34375 -0.3125,-0.25 -0.3125,-0.70313 0,-0.23437 0.17187,-1.04687 l 0.82813,-4.01563 h -0.92188 l 0.1875,-0.90625 h 0.9375 l 0.34375,-1.70312 1.35938,-0.8125 -0.53125,2.51562 h 1.15625 l -0.1875,0.90625 h -1.15625 l -0.79688,3.8125 q -0.15625,0.73438 -0.15625,0.875 0,0.21875 0.10938,0.32813 0.125,0.10937 0.40625,0.10937 0.39062,0 0.70312,-0.0781 z m 6.01549,-1.39063 1.15625,0.10938 q -0.25,0.85937 -1.14062,1.625 -0.89063,0.76562 -2.125,0.76562 -0.76563,0 -1.40625,-0.34375 -0.64063,-0.35937 -0.98438,-1.03125 -0.32812,-0.6875 -0.32812,-1.54687 0,-1.14063 0.51562,-2.20313 0.53125,-1.0625 1.35938,-1.57812 0.84375,-0.51563 1.8125,-0.51563 1.23437,0 1.96875,0.76563 0.75,0.76562 0.75,2.09375 0,0.5 -0.0937,1.04687 h -5.09375 q -0.0312,0.1875 -0.0312,0.35938 0,0.96875 0.4375,1.48437 0.45312,0.5 1.10937,0.5 0.59375,0 1.17188,-0.39062 0.59375,-0.39063 0.92187,-1.14063 z m -3.42187,-1.71875 h 3.875 q 0.0156,-0.1875 0.0156,-0.26562 0,-0.875 -0.45312,-1.34375 -0.4375,-0.48438 -1.125,-0.48438 -0.76563,0 -1.39063,0.53125 -0.60937,0.51563 -0.92187,1.5625 z m 4.47497,6.71875 v -0.85937 h 7.76563 v 0.85937 z m 8.69373,-2.65625 1.45312,-6.90625 h 1.0625 l -0.25,1.20313 q 0.6875,-0.71875 1.29688,-1.03125 0.60937,-0.32813 1.23437,-0.32813 0.84375,0 1.3125,0.45313 0.48438,0.45312 0.48438,1.21875 0,0.375 -0.17188,1.20312 l -0.875,4.1875 h -1.17187 l 0.92187,-4.375 q 0.125,-0.64062 0.125,-0.95312 0,-0.34375 -0.23437,-0.54688 -0.23438,-0.21875 -0.6875,-0.21875 -0.90625,0 -1.60938,0.65625 -0.70312,0.64063 -1.03125,2.21875 l -0.67187,3.21875 z m 7.63122,-2.625 q 0,-2.01562 1.1875,-3.34375 0.98438,-1.09375 2.57813,-1.09375 1.25,0 2.01562,0.78125 0.76563,0.78125 0.76563,2.10938 0,1.1875 -0.48438,2.21875 -0.48437,1.01562 -1.375,1.5625 -0.89062,0.54687 -1.875,0.54687 -0.79687,0 -1.46875,-0.34375 -0.65625,-0.34375 -1,-0.96875 -0.34375,-0.64062 -0.34375,-1.46875 z m 1.17188,-0.10937 q 0,0.96875 0.46875,1.48437 0.46875,0.5 1.1875,0.5 0.375,0 0.75,-0.15625 0.375,-0.15625 0.6875,-0.46875 0.32812,-0.3125 0.54687,-0.70312 0.21875,-0.40625 0.35938,-0.875 0.20312,-0.64063 0.20312,-1.23438 0,-0.9375 -0.46875,-1.45312 -0.46875,-0.51563 -1.1875,-0.51563 -0.5625,0 -1.01562,0.26563 -0.45313,0.26562 -0.82813,0.78125 -0.35937,0.5 -0.53125,1.17187 -0.17187,0.67188 -0.17187,1.20313 z m 10.69372,1.73437 q -1.01562,1.15625 -2.10937,1.15625 -0.98438,0 -1.64063,-0.71875 -0.65625,-0.73437 -0.65625,-2.10937 0,-1.26563 0.51563,-2.3125 0.51562,-1.04688 1.29687,-1.5625 0.78125,-0.51563 1.5625,-0.51563 1.28125,0 1.9375,1.23438 l 0.78125,-3.71875 h 1.17188 l -1.98438,9.54687 h -1.09375 z m -3.23437,-1.89062 q 0,0.71875 0.14062,1.14062 0.14063,0.40625 0.48438,0.6875 0.34375,0.28125 0.82812,0.28125 0.79688,0 1.45313,-0.84375 0.875,-1.10937 0.875,-2.73437 0,-0.8125 -0.4375,-1.26563 -0.42188,-0.46875 -1.07813,-0.46875 -0.42187,0 -0.76562,0.1875 -0.34375,0.1875 -0.6875,0.64063 -0.34375,0.45312 -0.57813,1.15625 -0.23437,0.6875 -0.23437,1.21875 z m 11.0531,0.54687 1.15625,0.10938 q -0.25,0.85937 -1.14062,1.625 -0.89063,0.76562 -2.125,0.76562 -0.76563,0 -1.40625,-0.34375 -0.64063,-0.35937 -0.98438,-1.03125 -0.32812,-0.6875 -0.32812,-1.54687 0,-1.14063 0.51562,-2.20313 0.53125,-1.0625 1.35938,-1.57812 0.84375,-0.51563 1.8125,-0.51563 1.23437,0 1.96875,0.76563 0.75,0.76562 0.75,2.09375 0,0.5 -0.0937,1.04687 h -5.09375 q -0.0312,0.1875 -0.0312,0.35938 0,0.96875 0.4375,1.48437 0.45312,0.5 1.10937,0.5 0.59375,0 1.17188,-0.39062 0.59375,-0.39063 0.92187,-1.14063 z m -3.42187,-1.71875 h 3.875 q 0.0156,-0.1875 0.0156,-0.26562 0,-0.875 -0.45312,-1.34375 -0.4375,-0.48438 -1.125,-0.48438 -0.76563,0 -1.39063,0.53125 -0.60937,0.51563 -0.92187,1.5625 z"
-       fill-rule="nonzero"
-       id="path276" />
-    <path
-       fill="#000000"
-       fill-opacity="0"
-       d="M 93.256612,37.783637 H 323.58733 v 27.46456 H 93.256612 Z"
-       fill-rule="evenodd"
-       id="path278" />
-    <path
-       fill="#000000"
-       d="m 115.56788,59.583637 v -6.90625 h 1.0625 v 1.04687 q 0.40625,-0.73437 0.73438,-0.96875 0.34375,-0.23437 0.76562,-0.23437 0.59375,0 1.20313,0.375 l -0.40625,1.07812 q -0.4375,-0.25 -0.85938,-0.25 -0.39062,0 -0.70312,0.23438 -0.29688,0.23437 -0.42188,0.64062 -0.20312,0.625 -0.20312,1.35938 v 3.625 z m 7.01649,-1.04688 0.17188,1.03125 q -0.5,0.10938 -0.89063,0.10938 -0.64062,0 -1,-0.20313 -0.34375,-0.20312 -0.48437,-0.53125 -0.14063,-0.32812 -0.14063,-1.39062 v -3.96875 h -0.85937 v -0.90625 h 0.85937 v -1.71875 l 1.17188,-0.70313 v 2.42188 h 1.17187 v 0.90625 h -1.17187 v 4.04687 q 0,0.5 0.0469,0.64063 0.0625,0.14062 0.20313,0.23437 0.14062,0.0781 0.40625,0.0781 0.20312,0 0.51562,-0.0469 z m 5.87487,-1.17187 1.20311,0.14062 q -0.28125,1.0625 -1.06249,1.65625 -0.76562,0.57813 -1.96875,0.57813 -1.51562,0 -2.40625,-0.9375 -0.89062,-0.9375 -0.89062,-2.60938 0,-1.75 0.89062,-2.70312 0.90625,-0.96875 2.34375,-0.96875 1.39063,0 2.26563,0.9375 0.87499,0.9375 0.87499,2.65625 0,0.10937 0,0.3125 h -5.15624 q 0.0625,1.14062 0.64062,1.75 0.57813,0.59375 1.4375,0.59375 0.65625,0 1.10938,-0.32813 0.45312,-0.34375 0.71875,-1.07812 z m -3.84375,-1.90625 h 3.85937 q -0.0781,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.45312,-0.6875 -0.8125,0 -1.35938,0.54688 -0.54687,0.53125 -0.60937,1.4375 z m 5.44372,6.78125 v -0.85938 h 7.76562 v 0.85938 z m 8.27185,-2.07813 1.14062,0.15625 q 0.0781,0.53125 0.40625,0.78125 0.4375,0.3125 1.1875,0.3125 0.8125,0 1.25,-0.32812 0.45313,-0.3125 0.60938,-0.90625 0.0937,-0.35938 0.0781,-1.5 -0.76562,0.90625 -1.90625,0.90625 -1.4375,0 -2.21875,-1.03125 -0.78125,-1.03125 -0.78125,-2.46875 0,-0.98438 0.35938,-1.8125 0.35937,-0.84375 1.03125,-1.29688 0.6875,-0.45312 1.60937,-0.45312 1.21875,0 2.01563,0.98437 v -0.82812 h 1.07812 v 5.96875 q 0,1.60937 -0.32812,2.28125 -0.32813,0.6875 -1.04688,1.07812 -0.70312,0.39063 -1.75,0.39063 -1.23437,0 -2,-0.5625 -0.75,-0.5625 -0.73437,-1.67188 z m 0.98437,-4.15625 q 0,1.35938 0.53125,1.98438 0.54688,0.625 1.35938,0.625 0.79687,0 1.34375,-0.625 0.54687,-0.625 0.54687,-1.95313 0,-1.26562 -0.5625,-1.90625 -0.5625,-0.64062 -1.35937,-0.64062 -0.76563,0 -1.3125,0.64062 -0.54688,0.625 -0.54688,1.875 z m 6.63123,3.57813 v -6.90625 h 1.0625 v 1.04687 q 0.40625,-0.73437 0.73437,-0.96875 0.34375,-0.23437 0.76563,-0.23437 0.59375,0 1.20312,0.375 l -0.40625,1.07812 q -0.4375,-0.25 -0.85937,-0.25 -0.39063,0 -0.70313,0.23438 -0.29687,0.23437 -0.42187,0.64062 -0.20313,0.625 -0.20313,1.35938 v 3.625 z m 8.96962,-0.85938 q -0.65625,0.5625 -1.26563,0.79688 -0.59375,0.21875 -1.28125,0.21875 -1.14062,0 -1.75,-0.54688 -0.60937,-0.5625 -0.60937,-1.4375 0,-0.5 0.21875,-0.92187 0.23437,-0.42188 0.60937,-0.67188 0.375,-0.25 0.84375,-0.39062 0.34375,-0.0781 1.04688,-0.17188 1.42187,-0.17187 2.09375,-0.40625 0,-0.23437 0,-0.29687 0,-0.71875 -0.32813,-1.01563 -0.45312,-0.39062 -1.34375,-0.39062 -0.8125,0 -1.21875,0.29687 -0.39062,0.28125 -0.57812,1.01563 l -1.14063,-0.15625 q 0.15625,-0.73438 0.51563,-1.1875 0.35937,-0.45313 1.03125,-0.6875 0.67187,-0.25 1.5625,-0.25 0.89062,0 1.4375,0.20312 0.5625,0.20313 0.8125,0.53125 0.26562,0.3125 0.375,0.79688 0.0469,0.29687 0.0469,1.07812 v 1.5625 q 0,1.625 0.0781,2.0625 0.0781,0.4375 0.29687,0.82813 h -1.21875 q -0.1875,-0.35938 -0.23437,-0.85938 z m -0.0937,-2.60937 q -0.64063,0.26562 -1.92188,0.4375 -0.71875,0.10937 -1.01562,0.25 -0.29688,0.125 -0.46875,0.375 -0.15625,0.25 -0.15625,0.54687 0,0.46875 0.34375,0.78125 0.35937,0.3125 1.04687,0.3125 0.67188,0 1.20313,-0.29687 0.53125,-0.29688 0.78125,-0.8125 0.1875,-0.39063 0.1875,-1.17188 z m 2.9906,6.125 v -9.5625 h 1.07812 v 0.89062 q 0.375,-0.53125 0.84375,-0.78125 0.48438,-0.26562 1.15625,-0.26562 0.875,0 1.54688,0.45312 0.6875,0.45313 1.03125,1.28125 0.34375,0.82813 0.34375,1.82813 0,1.04687 -0.375,1.90625 -0.375,0.84375 -1.10938,1.29687 -0.71875,0.45313 -1.53125,0.45313 -0.57812,0 -1.04687,-0.25 -0.46875,-0.25 -0.76563,-0.625 v 3.375 z m 1.0625,-6.07813 q 0,1.34375 0.53125,1.98438 0.54687,0.625 1.3125,0.625 0.78125,0 1.34375,-0.65625 0.5625,-0.65625 0.5625,-2.04688 0,-1.3125 -0.54688,-1.96875 -0.54687,-0.67187 -1.29687,-0.67187 -0.75,0 -1.32813,0.70312 -0.57812,0.70313 -0.57812,2.03125 z m 6.34997,3.42188 v -9.54688 h 1.17188 v 3.42188 q 0.82812,-0.9375 2.07812,-0.9375 0.76563,0 1.32813,0.29687 0.5625,0.29688 0.8125,0.84375 0.25,0.53125 0.25,1.54688 v 4.375 h -1.17188 v -4.375 q 0,-0.89063 -0.39062,-1.28125 -0.375,-0.40625 -1.07813,-0.40625 -0.51562,0 -0.98437,0.28125 -0.45313,0.26562 -0.65625,0.73437 -0.1875,0.45313 -0.1875,1.26563 v 3.78125 z m 10.67797,-3.45313 q 0,-1.92187 1.07812,-2.84375 0.89063,-0.76562 2.17188,-0.76562 1.42187,0 2.32812,0.9375 0.90625,0.92187 0.90625,2.57812 0,1.32813 -0.40625,2.09375 -0.39062,0.76563 -1.15625,1.1875 -0.76562,0.42188 -1.67187,0.42188 -1.45313,0 -2.35938,-0.92188 -0.89062,-0.9375 -0.89062,-2.6875 z m 1.20312,0 q 0,1.32813 0.57813,1.98438 0.59375,0.65625 1.46875,0.65625 0.875,0 1.45312,-0.65625 0.57813,-0.67188 0.57813,-2.03125 0,-1.28125 -0.59375,-1.9375 -0.57813,-0.65625 -1.4375,-0.65625 -0.875,0 -1.46875,0.65625 -0.57813,0.65625 -0.57813,1.98437 z m 7.72498,3.45313 h -1.07813 v -9.54688 h 1.17188 v 3.40625 q 0.73437,-0.92187 1.89062,-0.92187 0.64063,0 1.20313,0.26562 0.57812,0.25 0.9375,0.71875 0.375,0.45313 0.57812,1.10938 0.20313,0.65625 0.20313,1.40625 0,1.78125 -0.875,2.75 -0.875,0.96875 -2.10938,0.96875 -1.21875,0 -1.92187,-1.01563 z m 0,-3.5 q 0,1.23437 0.32812,1.78125 0.5625,0.90625 1.5,0.90625 0.76563,0 1.32813,-0.65625 0.5625,-0.67188 0.5625,-2 0,-1.34375 -0.54688,-1.98438 -0.53125,-0.65625 -1.29687,-0.65625 -0.76563,0 -1.32813,0.67188 -0.54687,0.67187 -0.54687,1.9375 z m 6.33435,-4.6875 v -1.35938 h 1.17187 v 1.35938 z m -1.48438,10.875 0.21875,-1 q 0.35938,0.0937 0.54688,0.0937 0.35937,0 0.53125,-0.25 0.1875,-0.23438 0.1875,-1.1875 v -7.25 h 1.17187 v 7.28125 q 0,1.28125 -0.32812,1.78125 -0.4375,0.65625 -1.40625,0.65625 -0.48438,0 -0.92188,-0.125 z m 9.17984,-4.90625 1.20313,0.14062 q -0.28125,1.0625 -1.0625,1.65625 -0.76563,0.57813 -1.96875,0.57813 -1.51563,0 -2.40625,-0.9375 -0.89063,-0.9375 -0.89063,-2.60938 0,-1.75 0.89063,-2.70312 0.90625,-0.96875 2.34375,-0.96875 1.39062,0 2.26562,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.15625 q 0.0625,1.14062 0.64063,1.75 0.57812,0.59375 1.4375,0.59375 0.65625,0 1.10937,-0.32813 0.45313,-0.34375 0.71875,-1.07812 z m -3.84375,-1.90625 h 3.85938 q -0.0781,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.45313,-0.6875 -0.8125,0 -1.35937,0.54688 -0.54688,0.53125 -0.60938,1.4375 z m 11.03748,1.59375 1.15625,0.15625 q -0.1875,1.1875 -0.96875,1.85937 -0.78125,0.67188 -1.92188,0.67188 -1.40625,0 -2.28125,-0.92188 -0.85937,-0.9375 -0.85937,-2.65625 0,-1.125 0.375,-1.96875 0.375,-0.84375 1.125,-1.25 0.76562,-0.42187 1.65625,-0.42187 1.125,0 1.84375,0.57812 0.71875,0.5625 0.92187,1.60938 l -1.14062,0.17187 q -0.17188,-0.70312 -0.59375,-1.04687 -0.40625,-0.35938 -0.98438,-0.35938 -0.89062,0 -1.45312,0.64063 -0.54688,0.64062 -0.54688,2 0,1.40625 0.53125,2.03125 0.54688,0.625 1.40625,0.625 0.6875,0 1.14063,-0.42188 0.46875,-0.42187 0.59375,-1.29687 z m 4.71094,1.48437 0.17187,1.03125 q -0.5,0.10938 -0.89062,0.10938 -0.64063,0 -1,-0.20313 -0.34375,-0.20312 -0.48438,-0.53125 -0.14062,-0.32812 -0.14062,-1.39062 v -3.96875 h -0.85938 v -0.90625 h 0.85938 v -1.71875 l 1.17187,-0.70313 v 2.42188 h 1.17188 v 0.90625 h -1.17188 v 4.04687 q 0,0.5 0.0469,0.64063 0.0625,0.14062 0.20312,0.23437 0.14063,0.0781 0.40625,0.0781 0.20313,0 0.51563,-0.0469 z m 4.84347,1.04688 v -6.90625 h 1.04688 v 0.96875 q 0.32812,-0.51563 0.85937,-0.8125 0.54688,-0.3125 1.23438,-0.3125 0.78125,0 1.26562,0.3125 0.48438,0.3125 0.6875,0.89062 0.82813,-1.20312 2.14063,-1.20312 1.03125,0 1.57812,0.57812 0.5625,0.5625 0.5625,1.73438 v 4.75 h -1.17187 v -4.35938 q 0,-0.70312 -0.125,-1 -0.10938,-0.3125 -0.40625,-0.5 -0.29688,-0.1875 -0.70313,-0.1875 -0.71875,0 -1.20312,0.48438 -0.48438,0.48437 -0.48438,1.54687 v 4.01563 h -1.17187 v -4.48438 q 0,-0.78125 -0.29688,-1.17187 -0.28125,-0.39063 -0.92187,-0.39063 -0.5,0 -0.92188,0.26563 -0.42187,0.25 -0.60937,0.75 -0.1875,0.5 -0.1875,1.45312 v 3.57813 z m 15.83681,-2.21875 1.20312,0.14062 q -0.28125,1.0625 -1.0625,1.65625 -0.76562,0.57813 -1.96875,0.57813 -1.51562,0 -2.40625,-0.9375 -0.89062,-0.9375 -0.89062,-2.60938 0,-1.75 0.89062,-2.70312 0.90625,-0.96875 2.34375,-0.96875 1.39063,0 2.26563,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.15625 q 0.0625,1.14062 0.64062,1.75 0.57813,0.59375 1.4375,0.59375 0.65625,0 1.10938,-0.32813 0.45312,-0.34375 0.71875,-1.07812 z m -3.8438,-1.90625 h 3.85937 q -0.0781,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.45312,-0.6875 -0.8125,0 -1.35938,0.54688 -0.54687,0.53125 -0.60937,1.4375 z m 6.52185,4.125 v -6.90625 h 1.04687 v 0.96875 q 0.32813,-0.51563 0.85938,-0.8125 0.54687,-0.3125 1.23437,-0.3125 0.78125,0 1.26563,0.3125 0.48437,0.3125 0.6875,0.89062 0.82812,-1.20312 2.14062,-1.20312 1.03125,0 1.57813,0.57812 0.5625,0.5625 0.5625,1.73438 v 4.75 h -1.17188 v -4.35938 q 0,-0.70312 -0.125,-1 -0.10937,-0.3125 -0.40625,-0.5 -0.29687,-0.1875 -0.70312,-0.1875 -0.71875,0 -1.20313,0.48438 -0.48437,0.48437 -0.48437,1.54687 v 4.01563 h -1.17188 v -4.48438 q 0,-0.78125 -0.29687,-1.17187 -0.28125,-0.39063 -0.92188,-0.39063 -0.5,0 -0.92187,0.26563 -0.42188,0.25 -0.60938,0.75 -0.1875,0.5 -0.1875,1.45312 v 3.57813 z m 10.66493,-3.45313 q 0,-1.92187 1.07813,-2.84375 0.89062,-0.76562 2.17187,-0.76562 1.42188,0 2.32813,0.9375 0.90625,0.92187 0.90625,2.57812 0,1.32813 -0.40625,2.09375 -0.39063,0.76563 -1.15625,1.1875 -0.76563,0.42188 -1.67188,0.42188 -1.45312,0 -2.35937,-0.92188 -0.89063,-0.9375 -0.89063,-2.6875 z m 1.20313,0 q 0,1.32813 0.57812,1.98438 0.59375,0.65625 1.46875,0.65625 0.875,0 1.45313,-0.65625 0.57812,-0.67188 0.57812,-2.03125 0,-1.28125 -0.59375,-1.9375 -0.57812,-0.65625 -1.4375,-0.65625 -0.875,0 -1.46875,0.65625 -0.57812,0.65625 -0.57812,1.98437 z m 6.63122,3.45313 v -6.90625 h 1.0625 v 1.04687 q 0.40625,-0.73437 0.73438,-0.96875 0.34375,-0.23437 0.76562,-0.23437 0.59375,0 1.20313,0.375 l -0.40625,1.07812 q -0.4375,-0.25 -0.85938,-0.25 -0.39062,0 -0.70312,0.23438 -0.29688,0.23437 -0.42188,0.64062 -0.20312,0.625 -0.20312,1.35938 v 3.625 z m 4.40712,2.65625 -0.125,-1.09375 q 0.375,0.10937 0.65625,0.10937 0.39063,0 0.625,-0.14062 0.23438,-0.125 0.39063,-0.35938 0.10937,-0.17187 0.35937,-0.875 0.0312,-0.0937 0.10938,-0.28125 l -2.625,-6.92187 h 1.26562 l 1.4375,4 q 0.28125,0.76562 0.5,1.59375 0.20313,-0.79688 0.46875,-1.57813 l 1.48438,-4.01562 h 1.17187 l -2.625,7.01562 q -0.42187,1.14063 -0.65625,1.57813 -0.3125,0.57812 -0.71875,0.84375 -0.40625,0.28125 -0.96875,0.28125 -0.32812,0 -0.75,-0.15625 z m 10.39832,-2.65625 v -9.54688 h 1.17187 v 9.54688 z m 7.49234,-0.85938 q -0.65625,0.5625 -1.26563,0.79688 -0.59375,0.21875 -1.28125,0.21875 -1.14062,0 -1.75,-0.54688 -0.60937,-0.5625 -0.60937,-1.4375 0,-0.5 0.21875,-0.92187 0.23437,-0.42188 0.60937,-0.67188 0.375,-0.25 0.84375,-0.39062 0.34375,-0.0781 1.04688,-0.17188 1.42187,-0.17187 2.09375,-0.40625 0,-0.23437 0,-0.29687 0,-0.71875 -0.32813,-1.01563 -0.45312,-0.39062 -1.34375,-0.39062 -0.8125,0 -1.21875,0.29687 -0.39062,0.28125 -0.57812,1.01563 l -1.14063,-0.15625 q 0.15625,-0.73438 0.51563,-1.1875 0.35937,-0.45313 1.03125,-0.6875 0.67187,-0.25 1.5625,-0.25 0.89062,0 1.4375,0.20312 0.5625,0.20313 0.8125,0.53125 0.26562,0.3125 0.375,0.79688 0.0469,0.29687 0.0469,1.07812 v 1.5625 q 0,1.625 0.0781,2.0625 0.0781,0.4375 0.29687,0.82813 h -1.21875 q -0.1875,-0.35938 -0.23437,-0.85938 z m -0.0937,-2.60937 q -0.64063,0.26562 -1.92188,0.4375 -0.71875,0.10937 -1.01562,0.25 -0.29688,0.125 -0.46875,0.375 -0.15625,0.25 -0.15625,0.54687 0,0.46875 0.34375,0.78125 0.35937,0.3125 1.04687,0.3125 0.67188,0 1.20313,-0.29687 0.53125,-0.29688 0.78125,-0.8125 0.1875,-0.39063 0.1875,-1.17188 z m 2.94372,6.125 -0.125,-1.09375 q 0.375,0.10937 0.65625,0.10937 0.39063,0 0.625,-0.14062 0.23438,-0.125 0.39063,-0.35938 0.10937,-0.17187 0.35937,-0.875 0.0312,-0.0937 0.10938,-0.28125 l -2.625,-6.92187 h 1.26562 l 1.4375,4 q 0.28125,0.76562 0.5,1.59375 0.20313,-0.79688 0.46875,-1.57813 l 1.48438,-4.01562 h 1.17187 l -2.625,7.01562 q -0.42187,1.14063 -0.65625,1.57813 -0.3125,0.57812 -0.71875,0.84375 -0.40625,0.28125 -0.96875,0.28125 -0.32812,0 -0.75,-0.15625 z m 6.27344,-6.10938 q 0,-1.92187 1.07812,-2.84375 0.89063,-0.76562 2.17188,-0.76562 1.42187,0 2.32812,0.9375 0.90625,0.92187 0.90625,2.57812 0,1.32813 -0.40625,2.09375 -0.39062,0.76563 -1.15625,1.1875 -0.76562,0.42188 -1.67187,0.42188 -1.45313,0 -2.35938,-0.92188 -0.89062,-0.9375 -0.89062,-2.6875 z m 1.20312,0 q 0,1.32813 0.57813,1.98438 0.59375,0.65625 1.46875,0.65625 0.875,0 1.45312,-0.65625 0.57813,-0.67188 0.57813,-2.03125 0,-1.28125 -0.59375,-1.9375 -0.57813,-0.65625 -1.4375,-0.65625 -0.875,0 -1.46875,0.65625 -0.57813,0.65625 -0.57813,1.98437 z m 11.17811,3.45313 v -1.01563 q -0.8125,1.17188 -2.1875,1.17188 -0.60938,0 -1.14063,-0.23438 -0.53125,-0.23437 -0.79687,-0.57812 -0.25,-0.35938 -0.35938,-0.875 -0.0625,-0.34375 -0.0625,-1.09375 v -4.28125 h 1.17188 v 3.82812 q 0,0.92188 0.0625,1.23438 0.10937,0.46875 0.46875,0.73437 0.35937,0.25 0.89062,0.25 0.51563,0 0.98438,-0.26562 0.46875,-0.26563 0.65625,-0.73438 0.1875,-0.46875 0.1875,-1.34375 v -3.70312 h 1.17187 v 6.90625 z m 5.44372,-1.04688 0.17188,1.03125 q -0.5,0.10938 -0.89063,0.10938 -0.64062,0 -1,-0.20313 -0.34375,-0.20312 -0.48437,-0.53125 -0.14063,-0.32812 -0.14063,-1.39062 v -3.96875 h -0.85937 v -0.90625 h 0.85937 v -1.71875 l 1.17188,-0.70313 v 2.42188 H 301.87 v 0.90625 h -1.17187 v 4.04687 q 0,0.5 0.0469,0.64063 0.0625,0.14062 0.20313,0.23437 0.14062,0.0781 0.40625,0.0781 0.20312,0 0.51562,-0.0469 z"
-       fill-rule="nonzero"
-       id="path280"
-       style="fill:#c8ab37" />
-    <path
-       fill="#000000"
-       fill-opacity="0"
-       d="m 141.69362,420.4057 c -7.18405,0 -13.00787,-0.97061 -13.00787,-2.16791 v -97.61697 c 0,-1.1973 -5.82383,-2.16788 -13.00788,-2.16788 v 0 c 7.18405,0 13.00788,-0.97061 13.00788,-2.16791 v -97.61696 0 c 0,-1.19729 5.82382,-2.16789 13.00787,-2.16789 z"
-       fill-rule="evenodd"
-       id="path282" />
-    <path
-       fill="#000000"
-       fill-opacity="0"
-       d="m 141.69362,420.4057 c -7.18405,0 -13.00787,-0.97061 -13.00787,-2.16791 v -97.61697 c 0,-1.1973 -5.82383,-2.16788 -13.00788,-2.16788 v 0 c 7.18405,0 13.00788,-0.97061 13.00788,-2.16791 v -97.61696 0 c 0,-1.19729 5.82382,-2.16789 13.00787,-2.16789"
-       fill-rule="evenodd"
-       id="path284" />
-    <path
-       stroke="#595959"
-       stroke-width="1"
-       stroke-linejoin="round"
-       stroke-linecap="butt"
-       d="m 141.69362,420.4057 c -7.18405,0 -13.00787,-0.97061 -13.00787,-2.16791 v -97.61697 c 0,-1.1973 -5.82383,-2.16788 -13.00788,-2.16788 v 0 c 7.18405,0 13.00788,-0.97061 13.00788,-2.16791 v -97.61696 0 c 0,-1.19729 5.82382,-2.16789 13.00787,-2.16789"
-       fill-rule="evenodd"
-       id="path286"
-       style="fill:none" />
-    <path
-       fill="#000000"
-       fill-opacity="0"
-       d="m 66.103062,278.3112 h 99.401568 v 27.46457 H 66.103062 Z"
-       fill-rule="evenodd"
-       id="path288" />
-    <path
-       fill="#000000"
-       d="m 75.899942,298.8312 v -6.21875 h 0.9375 v 0.875 q 0.6875,-1.01562 1.98437,-1.01562 0.5625,0 1.03125,0.20312 0.48438,0.20313 0.71875,0.53125 0.23438,0.32813 0.32813,0.76563 0.0469,0.29687 0.0469,1.03125 v 3.82812 h -1.04687 v -3.78125 q 0,-0.65625 -0.125,-0.96875 -0.125,-0.3125 -0.4375,-0.5 -0.3125,-0.20312 -0.73438,-0.20312 -0.67187,0 -1.17187,0.4375 -0.48438,0.42187 -0.48438,1.60937 v 3.40625 z m 7.64258,0 h -0.98438 v -8.59375 h 1.0625 v 3.0625 q 0.67188,-0.82812 1.70313,-0.82812 0.57812,0 1.07812,0.23437 0.51563,0.21875 0.84375,0.64063 0.34375,0.42187 0.53125,1.01562 0.1875,0.59375 0.1875,1.26563 0,1.59375 -0.79687,2.46875 -0.79688,0.875 -1.89063,0.875 -1.10937,0 -1.73437,-0.92188 z m -0.0156,-3.15625 q 0,1.10938 0.3125,1.60938 0.5,0.8125 1.34375,0.8125 0.6875,0 1.1875,-0.59375 0.51562,-0.59375 0.51562,-1.79688 0,-1.21875 -0.48437,-1.79687 -0.48438,-0.57813 -1.17188,-0.57813 -0.6875,0 -1.20312,0.60938 -0.5,0.59375 -0.5,1.73437 z m 4.73633,5.54688 v -0.76563 h 7 v 0.76563 z m 7.6582,-2.39063 v -6.21875 h 0.9375 v 0.875 q 0.6875,-1.01562 1.98437,-1.01562 0.5625,0 1.03125,0.20312 0.484378,0.20313 0.718748,0.53125 0.23438,0.32813 0.32813,0.76563 0.0469,0.29687 0.0469,1.03125 v 3.82812 h -1.046878 v -3.78125 q 0,-0.65625 -0.125,-0.96875 -0.125,-0.3125 -0.4375,-0.5 -0.3125,-0.20312 -0.73437,-0.20312 -0.67188,0 -1.17188,0.4375 -0.48437,0.42187 -0.48437,1.60937 v 3.40625 z m 6.283208,-3.10937 q 0,-1.73438 0.95312,-2.5625 0.79688,-0.6875 1.95313,-0.6875 1.28125,0 2.09375,0.84375 0.82812,0.82812 0.82812,2.3125 0,1.20312 -0.35937,1.89062 -0.35938,0.6875 -1.0625,1.07813 -0.6875,0.375 -1.5,0.375 -1.29688,0 -2.10938,-0.82813 -0.79687,-0.84375 -0.79687,-2.42187 z m 1.07812,0 q 0,1.1875 0.51563,1.78125 0.53125,0.59375 1.3125,0.59375 0.79687,0 1.3125,-0.59375 0.51562,-0.59375 0.51562,-1.8125 0,-1.15625 -0.53125,-1.75 -0.51562,-0.59375 -1.29687,-0.59375 -0.78125,0 -1.3125,0.59375 -0.51563,0.57812 -0.51563,1.78125 z m 10.01758,3.10937 v -0.78125 q -0.59375,0.92188 -1.73437,0.92188 -0.75,0 -1.375,-0.40625 -0.625,-0.42188 -0.96875,-1.15625 -0.34375,-0.73438 -0.34375,-1.6875 0,-0.92188 0.3125,-1.6875 0.3125,-0.76563 0.9375,-1.15625 0.625,-0.40625 1.39062,-0.40625 0.5625,0 1,0.23437 0.4375,0.23438 0.71875,0.60938 v -3.07813 h 1.04688 v 8.59375 z m -3.32812,-3.10937 q 0,1.20312 0.5,1.79687 0.5,0.57813 1.1875,0.57813 0.6875,0 1.17187,-0.5625 0.48438,-0.5625 0.48438,-1.71875 0,-1.28125 -0.5,-1.875 -0.48438,-0.59375 -1.20313,-0.59375 -0.70312,0 -1.17187,0.57812 -0.46875,0.5625 -0.46875,1.79688 z m 10.2207,1.10937 1.09375,0.125 q -0.25,0.95313 -0.95313,1.48438 -0.70312,0.53125 -1.78125,0.53125 -1.35937,0 -2.17187,-0.84375 -0.79688,-0.84375 -0.79688,-2.35938 0,-1.5625 0.8125,-2.42187 0.8125,-0.875 2.09375,-0.875 1.25,0 2.03125,0.84375 0.79688,0.84375 0.79688,2.39062 0,0.0937 0,0.28125 h -4.64063 q 0.0625,1.03125 0.57813,1.57813 0.51562,0.53125 1.29687,0.53125 0.57813,0 0.98438,-0.29688 0.42187,-0.3125 0.65625,-0.96875 z m -3.45313,-1.70312 h 3.46875 q -0.0625,-0.79688 -0.39062,-1.1875 -0.51563,-0.60938 -1.3125,-0.60938 -0.73438,0 -1.23438,0.48438 -0.48437,0.48437 -0.53125,1.3125 z m 5.45508,1.84375 1.03125,-0.15625 q 0.0937,0.625 0.48438,0.95312 0.40625,0.32813 1.14062,0.32813 0.71875,0 1.0625,-0.28125 0.35938,-0.29688 0.35938,-0.70313 0,-0.35937 -0.3125,-0.5625 -0.21875,-0.14062 -1.07813,-0.35937 -1.15625,-0.29688 -1.60937,-0.5 -0.4375,-0.21875 -0.67188,-0.59375 -0.23437,-0.375 -0.23437,-0.84375 0,-0.40625 0.1875,-0.76563 0.1875,-0.35937 0.51562,-0.59375 0.25,-0.17187 0.67188,-0.29687 0.42187,-0.125 0.92187,-0.125 0.71875,0 1.26563,0.21875 0.5625,0.20312 0.82812,0.5625 0.26563,0.35937 0.35938,0.95312 l -1.03125,0.14063 q -0.0625,-0.46875 -0.40625,-0.73438 -0.32813,-0.28125 -0.95313,-0.28125 -0.71875,0 -1.03125,0.25 -0.3125,0.23438 -0.3125,0.5625 0,0.20313 0.125,0.35938 0.14063,0.17187 0.40625,0.28125 0.15625,0.0625 0.9375,0.26562 1.125,0.3125 1.5625,0.5 0.4375,0.1875 0.6875,0.54688 0.25,0.35937 0.25,0.90625 0,0.53125 -0.3125,1 -0.29687,0.45312 -0.875,0.71875 -0.57812,0.25 -1.3125,0.25 -1.21875,0 -1.85937,-0.5 -0.625,-0.51563 -0.79688,-1.5 z"
-       fill-rule="nonzero"
-       id="path290" />
-    <path
-       stroke="#1155cc"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="M 688.20019,75.514867 V 360.08705"
-       fill-rule="nonzero"
-       id="path292" />
-    <path
-       stroke="#1155cc"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="M 816.64369,75.514867 V 360.08705"
-       fill-rule="nonzero"
-       id="path294" />
-    <path
-       stroke="#1155cc"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="m 687.70149,76.013557 h 129.441"
-       fill-rule="nonzero"
-       id="path296" />
-    <path
-       stroke="#1155cc"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="m 687.70149,111.21041 h 129.441"
-       fill-rule="nonzero"
-       id="path298" />
-    <path
-       stroke="#1155cc"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="m 687.70149,148.40726 h 129.441"
-       fill-rule="nonzero"
-       id="path300" />
-    <path
-       stroke="#1155cc"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="m 687.70149,183.60412 h 129.441"
-       fill-rule="nonzero"
-       id="path302" />
-    <path
-       stroke="#1155cc"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="m 687.70149,218.80095 h 129.441"
-       fill-rule="nonzero"
-       id="path304" />
-    <path
-       stroke="#1155cc"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="m 687.70149,253.99782 h 129.441"
-       fill-rule="nonzero"
-       id="path306" />
-    <path
-       stroke="#1155cc"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="m 687.70149,289.19466 h 129.441"
-       fill-rule="nonzero"
-       id="path308" />
-    <path
-       stroke="#1155cc"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="m 687.70149,324.3915 h 129.441"
-       fill-rule="nonzero"
-       id="path310" />
-    <path
-       stroke="#1155cc"
-       stroke-width="0.969816"
-       stroke-linecap="butt"
-       d="M 688.95796,420.60254 H 810.70284"
-       fill-rule="nonzero"
-       id="path310-0" />
-    <path
-       stroke="#1155cc"
-       stroke-width="0.9689"
-       stroke-linecap="butt"
-       d="M 689.29865,450.44943 H 810.81369"
-       fill-rule="nonzero"
-       id="path310-0-7" />
-    <path
-       stroke="#1155cc"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="m 687.70149,359.58837 h 129.441"
-       fill-rule="nonzero"
-       id="path312" />
-    <path
-       fill="#000000"
-       d="m 734.99429,97.813557 v -9.54688 h 6.4375 v 1.125 h -5.1719 v 2.96875 h 4.4688 v 1.125 h -4.4688 v 4.32813 z m 12.657,-2.21875 1.2031,0.14062 q -0.2812,1.0625 -1.0625,1.65625 -0.7656,0.57813 -1.9687,0.57813 -1.5157,0 -2.4063,-0.9375 -0.8906,-0.9375 -0.8906,-2.60938 0,-1.75 0.8906,-2.70312 0.9063,-0.96875 2.3438,-0.96875 1.3906,0 2.2656,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.1563 q 0.062,1.14062 0.6407,1.75 0.5781,0.59375 1.4375,0.59375 0.6562,0 1.1093,-0.32813 0.4532,-0.34375 0.7188,-1.07812 z m -3.8438,-1.90625 h 3.8594 q -0.078,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.4531,-0.6875 -0.8125,0 -1.3594,0.54688 -0.5469,0.53125 -0.6094,1.4375 z m 6.5219,4.125 v -6.90625 h 1.0625 v 0.98437 q 0.75,-1.14062 2.1875,-1.14062 0.625,0 1.1562,0.21875 0.5313,0.21875 0.7813,0.59375 0.2656,0.35937 0.375,0.85937 0.062,0.32813 0.062,1.14063 v 4.25 h -1.1719 v -4.20313 q 0,-0.71875 -0.1406,-1.0625 -0.1406,-0.35937 -0.4844,-0.5625 -0.3437,-0.21875 -0.8125,-0.21875 -0.75,0 -1.2969,0.46875 -0.5468,0.46875 -0.5468,1.79688 v 3.78125 z m 11.9281,-2.53125 1.1562,0.15625 q -0.1875,1.1875 -0.9687,1.85937 -0.7813,0.67188 -1.9219,0.67188 -1.4062,0 -2.2812,-0.92188 -0.8594,-0.9375 -0.8594,-2.65625 0,-1.125 0.375,-1.96875 0.375,-0.84375 1.125,-1.25 0.7656,-0.42187 1.6562,-0.42187 1.125,0 1.8438,0.57812 0.7187,0.5625 0.9219,1.60938 l -1.1407,0.17187 q -0.1718,-0.70312 -0.5937,-1.04687 -0.4063,-0.35938 -0.9844,-0.35938 -0.8906,0 -1.4531,0.64063 -0.5469,0.64062 -0.5469,2 0,1.40625 0.5313,2.03125 0.5468,0.625 1.4062,0.625 0.6875,0 1.1406,-0.42188 0.4688,-0.42187 0.5938,-1.29687 z m 6.8828,0.3125 1.2031,0.14062 q -0.2812,1.0625 -1.0625,1.65625 -0.7656,0.57813 -1.9687,0.57813 -1.5157,0 -2.4063,-0.9375 -0.8906,-0.9375 -0.8906,-2.60938 0,-1.75 0.8906,-2.70312 0.9063,-0.96875 2.3438,-0.96875 1.3906,0 2.2656,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.1563 q 0.062,1.14062 0.6407,1.75 0.5781,0.59375 1.4375,0.59375 0.6562,0 1.1093,-0.32813 0.4532,-0.34375 0.7188,-1.07812 z m -3.8438,-1.90625 h 3.8594 q -0.078,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.4531,-0.6875 -0.8125,0 -1.3594,0.54688 -0.5469,0.53125 -0.6094,1.4375 z"
-       fill-rule="nonzero"
-       id="path314" />
-    <path
-       fill="#000000"
-       d="m 710.41189,129.94791 1.2031,-0.10938 q 0.078,0.71875 0.3906,1.1875 0.3125,0.45313 0.9532,0.73438 0.6562,0.28125 1.4687,0.28125 0.7188,0 1.2656,-0.21875 0.5625,-0.21875 0.8282,-0.57813 0.2656,-0.375 0.2656,-0.82812 0,-0.45313 -0.2656,-0.78125 -0.25,-0.32813 -0.8438,-0.5625 -0.3906,-0.15625 -1.7031,-0.46875 -1.3125,-0.3125 -1.8438,-0.59375 -0.6718,-0.35938 -1.0156,-0.89063 -0.3281,-0.53125 -0.3281,-1.1875 0,-0.71875 0.4062,-1.34375 0.4063,-0.625 1.1875,-0.95312 0.7969,-0.32813 1.7657,-0.32813 1.0468,0 1.8593,0.34375 0.8125,0.34375 1.25,1.01563 0.4375,0.65625 0.4688,1.48437 l -1.2031,0.0937 q -0.1094,-0.90625 -0.6719,-1.35937 -0.5625,-0.46875 -1.6563,-0.46875 -1.1406,0 -1.6718,0.42187 -0.5157,0.42188 -0.5157,1.01563 0,0.51562 0.3594,0.84375 0.375,0.32812 1.9063,0.6875 1.5468,0.34375 2.1093,0.59375 0.8438,0.39062 1.2344,0.98437 0.3906,0.57813 0.3906,1.35938 0,0.75 -0.4375,1.4375 -0.4218,0.67187 -1.25,1.04687 -0.8125,0.35938 -1.8281,0.35938 -1.2969,0 -2.1719,-0.375 -0.875,-0.375 -1.375,-1.125 -0.5,-0.76563 -0.5312,-1.71875 z m 9.1553,3.0625 v -9.54688 h 1.1719 v 9.54688 z m 2.5393,-3.45313 q 0,-1.92187 1.0781,-2.84375 0.8906,-0.76562 2.1719,-0.76562 1.4218,0 2.3281,0.9375 0.9062,0.92187 0.9062,2.57812 0,1.32813 -0.4062,2.09375 -0.3906,0.76563 -1.1563,1.1875 -0.7656,0.42188 -1.6718,0.42188 -1.4532,0 -2.3594,-0.92188 -0.8906,-0.9375 -0.8906,-2.6875 z m 1.2031,0 q 0,1.32813 0.5781,1.98438 0.5938,0.65625 1.4688,0.65625 0.875,0 1.4531,-0.65625 0.5781,-0.67188 0.5781,-2.03125 0,-1.28125 -0.5937,-1.9375 -0.5782,-0.65625 -1.4375,-0.65625 -0.875,0 -1.4688,0.65625 -0.5781,0.65625 -0.5781,1.98437 z m 7.9281,3.45313 -2.125,-6.90625 h 1.2188 l 1.0937,3.98437 0.4219,1.48438 q 0.016,-0.10938 0.3594,-1.42188 l 1.0937,-4.04687 h 1.2031 l 1.0313,4 0.3437,1.32812 0.4063,-1.34375 1.1719,-3.98437 h 1.1406 l -2.1563,6.90625 h -1.2187 l -1.0938,-4.14063 -0.2656,-1.17187 -1.4062,5.3125 z m 8.3439,2.65625 v -9.5625 h 1.0781 v 0.89062 q 0.375,-0.53125 0.8437,-0.78125 0.4844,-0.26562 1.1563,-0.26562 0.875,0 1.5469,0.45312 0.6875,0.45313 1.0312,1.28125 0.3438,0.82813 0.3438,1.82813 0,1.04687 -0.375,1.90625 -0.375,0.84375 -1.1094,1.29687 -0.7188,0.45313 -1.5313,0.45313 -0.5781,0 -1.0468,-0.25 -0.4688,-0.25 -0.7657,-0.625 v 3.375 z m 1.0625,-6.07813 q 0,1.34375 0.5312,1.98438 0.5469,0.625 1.3125,0.625 0.7813,0 1.3438,-0.65625 0.5625,-0.65625 0.5625,-2.04688 0,-1.3125 -0.5469,-1.96875 -0.5469,-0.67187 -1.2969,-0.67187 -0.75,0 -1.3281,0.70312 -0.5781,0.70313 -0.5781,2.03125 z m 10.8656,2.5625 q -0.6563,0.5625 -1.2657,0.79688 -0.5937,0.21875 -1.2812,0.21875 -1.1406,0 -1.75,-0.54688 -0.6094,-0.5625 -0.6094,-1.4375 0,-0.5 0.2188,-0.92187 0.2343,-0.42188 0.6093,-0.67188 0.375,-0.25 0.8438,-0.39062 0.3437,-0.0781 1.0469,-0.17188 1.4218,-0.17187 2.0937,-0.40625 0,-0.23437 0,-0.29687 0,-0.71875 -0.3281,-1.01563 -0.4531,-0.39062 -1.3438,-0.39062 -0.8125,0 -1.2187,0.29687 -0.3906,0.28125 -0.5781,1.01563 l -1.1407,-0.15625 q 0.1563,-0.73438 0.5157,-1.1875 0.3593,-0.45313 1.0312,-0.6875 0.6719,-0.25 1.5625,-0.25 0.8906,0 1.4375,0.20312 0.5625,0.20313 0.8125,0.53125 0.2656,0.3125 0.375,0.79688 0.047,0.29687 0.047,1.07812 v 1.5625 q 0,1.625 0.078,2.0625 0.078,0.4375 0.2969,0.82813 h -1.2188 q -0.1875,-0.35938 -0.2343,-0.85938 z m -0.094,-2.60937 q -0.6407,0.26562 -1.9219,0.4375 -0.7188,0.10937 -1.0156,0.25 -0.2969,0.125 -0.4688,0.375 -0.1562,0.25 -0.1562,0.54687 0,0.46875 0.3437,0.78125 0.3594,0.3125 1.0469,0.3125 0.6719,0 1.2031,-0.29687 0.5313,-0.29688 0.7813,-0.8125 0.1875,-0.39063 0.1875,-1.17188 z m 5.5531,2.42187 0.1718,1.03125 q -0.5,0.10938 -0.8906,0.10938 -0.6406,0 -1,-0.20313 -0.3437,-0.20312 -0.4844,-0.53125 -0.1406,-0.32812 -0.1406,-1.39062 v -3.96875 h -0.8594 v -0.90625 h 0.8594 v -1.71875 l 1.1719,-0.70313 v 2.42188 h 1.1719 v 0.90625 h -1.1719 v 4.04687 q 0,0.5 0.047,0.64063 0.062,0.14062 0.2031,0.23437 0.1406,0.0781 0.4063,0.0781 0.2031,0 0.5156,-0.0469 z m 1.1405,1.04688 v -9.54688 h 1.1719 v 3.42188 q 0.8281,-0.9375 2.0781,-0.9375 0.7656,0 1.3281,0.29687 0.5625,0.29688 0.8125,0.84375 0.25,0.53125 0.25,1.54688 v 4.375 h -1.1719 v -4.375 q 0,-0.89063 -0.3906,-1.28125 -0.375,-0.40625 -1.0781,-0.40625 -0.5156,0 -0.9844,0.28125 -0.4531,0.26562 -0.6562,0.73437 -0.1875,0.45313 -0.1875,1.26563 v 3.78125 z m 15.6311,-0.85938 q -0.6563,0.5625 -1.2656,0.79688 -0.5938,0.21875 -1.2813,0.21875 -1.1406,0 -1.75,-0.54688 -0.6094,-0.5625 -0.6094,-1.4375 0,-0.5 0.2188,-0.92187 0.2344,-0.42188 0.6094,-0.67188 0.375,-0.25 0.8437,-0.39062 0.3438,-0.0781 1.0469,-0.17188 1.4219,-0.17187 2.0937,-0.40625 0,-0.23437 0,-0.29687 0,-0.71875 -0.3281,-1.01563 -0.4531,-0.39062 -1.3437,-0.39062 -0.8125,0 -1.2188,0.29687 -0.3906,0.28125 -0.5781,1.01563 l -1.1406,-0.15625 q 0.1562,-0.73438 0.5156,-1.1875 0.3594,-0.45313 1.0312,-0.6875 0.6719,-0.25 1.5625,-0.25 0.8907,0 1.4375,0.20312 0.5625,0.20313 0.8125,0.53125 0.2657,0.3125 0.375,0.79688 0.047,0.29687 0.047,1.07812 v 1.5625 q 0,1.625 0.078,2.0625 0.078,0.4375 0.2969,0.82813 h -1.2187 q -0.1875,-0.35938 -0.2344,-0.85938 z m -0.094,-2.60937 q -0.6406,0.26562 -1.9219,0.4375 -0.7187,0.10937 -1.0156,0.25 -0.2969,0.125 -0.4688,0.375 -0.1562,0.25 -0.1562,0.54687 0,0.46875 0.3437,0.78125 0.3594,0.3125 1.0469,0.3125 0.6719,0 1.2031,-0.29687 0.5313,-0.29688 0.7813,-0.8125 0.1875,-0.39063 0.1875,-1.17188 z m 2.975,3.46875 v -6.90625 h 1.0625 v 1.04687 q 0.4062,-0.73437 0.7343,-0.96875 0.3438,-0.23437 0.7657,-0.23437 0.5937,0 1.2031,0.375 l -0.4063,1.07812 q -0.4375,-0.25 -0.8593,-0.25 -0.3907,0 -0.7032,0.23438 -0.2968,0.23437 -0.4218,0.64062 -0.2032,0.625 -0.2032,1.35938 v 3.625 z m 9.1883,-2.21875 1.2031,0.14062 q -0.2812,1.0625 -1.0625,1.65625 -0.7656,0.57813 -1.9687,0.57813 -1.5156,0 -2.4063,-0.9375 -0.8906,-0.9375 -0.8906,-2.60938 0,-1.75 0.8906,-2.70312 0.9063,-0.96875 2.3438,-0.96875 1.3906,0 2.2656,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.1562 q 0.062,1.14062 0.6406,1.75 0.5781,0.59375 1.4375,0.59375 0.6562,0 1.1094,-0.32813 0.4531,-0.34375 0.7187,-1.07812 z m -3.8437,-1.90625 h 3.8593 q -0.078,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.4531,-0.6875 -0.8125,0 -1.3594,0.54688 -0.5468,0.53125 -0.6093,1.4375 z m 11.0374,3.26562 q -0.6562,0.5625 -1.2656,0.79688 -0.5937,0.21875 -1.2812,0.21875 -1.1407,0 -1.75,-0.54688 -0.6094,-0.5625 -0.6094,-1.4375 0,-0.5 0.2187,-0.92187 0.2344,-0.42188 0.6094,-0.67188 0.375,-0.25 0.8438,-0.39062 0.3437,-0.0781 1.0468,-0.17188 1.4219,-0.17187 2.0938,-0.40625 0,-0.23437 0,-0.29687 0,-0.71875 -0.3281,-1.01563 -0.4532,-0.39062 -1.3438,-0.39062 -0.8125,0 -1.2187,0.29687 -0.3907,0.28125 -0.5782,1.01563 l -1.1406,-0.15625 q 0.1563,-0.73438 0.5156,-1.1875 0.3594,-0.45313 1.0313,-0.6875 0.6719,-0.25 1.5625,-0.25 0.8906,0 1.4375,0.20312 0.5625,0.20313 0.8125,0.53125 0.2656,0.3125 0.375,0.79688 0.047,0.29687 0.047,1.07812 v 1.5625 q 0,1.625 0.078,2.0625 0.078,0.4375 0.2969,0.82813 h -1.2188 q -0.1875,-0.35938 -0.2344,-0.85938 z m -0.094,-2.60937 q -0.6406,0.26562 -1.9218,0.4375 -0.7188,0.10937 -1.0157,0.25 -0.2968,0.125 -0.4687,0.375 -0.1563,0.25 -0.1563,0.54687 0,0.46875 0.3438,0.78125 0.3594,0.3125 1.0469,0.3125 0.6718,0 1.2031,-0.29687 0.5312,-0.29688 0.7812,-0.8125 0.1875,-0.39063 0.1875,-1.17188 z"
-       fill-rule="nonzero"
-       id="path316" />
-    <path
-       fill="#000000"
-       d="m 711.36619,166.86352 1.2656,0.3125 q -0.3906,1.5625 -1.4219,2.375 -1.0312,0.8125 -2.5312,0.8125 -1.5313,0 -2.5,-0.625 -0.9688,-0.625 -1.4844,-1.8125 -0.5,-1.1875 -0.5,-2.5625 0,-1.48438 0.5625,-2.59375 0.5781,-1.10938 1.625,-1.6875 1.0625,-0.57813 2.3281,-0.57813 1.4219,0 2.3907,0.73438 0.9843,0.71875 1.375,2.04687 l -1.25,0.29688 q -0.3282,-1.04688 -0.9688,-1.51563 -0.625,-0.48437 -1.5781,-0.48437 -1.0938,0 -1.8438,0.53125 -0.7343,0.53125 -1.0312,1.42187 -0.2969,0.875 -0.2969,1.82813 0,1.21875 0.3438,2.125 0.3593,0.90625 1.1093,1.35937 0.75,0.4375 1.625,0.4375 1.0625,0 1.7969,-0.60937 0.7344,-0.60938 0.9844,-1.8125 z m 2.2345,-0.10938 q 0,-1.92187 1.0781,-2.84375 0.8906,-0.76562 2.1719,-0.76562 1.4219,0 2.3281,0.9375 0.9063,0.92187 0.9063,2.57812 0,1.32813 -0.4063,2.09375 -0.3906,0.76563 -1.1562,1.1875 -0.7657,0.42188 -1.6719,0.42188 -1.4531,0 -2.3594,-0.92188 -0.8906,-0.9375 -0.8906,-2.6875 z m 1.2031,0 q 0,1.32813 0.5781,1.98438 0.5938,0.65625 1.4688,0.65625 0.875,0 1.4531,-0.65625 0.5781,-0.67188 0.5781,-2.03125 0,-1.28125 -0.5937,-1.9375 -0.5781,-0.65625 -1.4375,-0.65625 -0.875,0 -1.4688,0.65625 -0.5781,0.65625 -0.5781,1.98437 z m 6.6469,3.45313 v -6.90625 h 1.0625 v 0.98437 q 0.75,-1.14062 2.1875,-1.14062 0.625,0 1.1562,0.21875 0.5313,0.21875 0.7813,0.59375 0.2656,0.35937 0.375,0.85937 0.062,0.32813 0.062,1.14063 v 4.25 h -1.1719 v -4.20313 q 0,-0.71875 -0.1406,-1.0625 -0.1407,-0.35937 -0.4844,-0.5625 -0.3438,-0.21875 -0.8125,-0.21875 -0.75,0 -1.2969,0.46875 -0.5469,0.46875 -0.5469,1.79688 v 3.78125 z m 9.9749,-1.04688 0.1719,1.03125 q -0.5,0.10938 -0.8906,0.10938 -0.6406,0 -1,-0.20313 -0.3438,-0.20312 -0.4844,-0.53125 -0.1406,-0.32812 -0.1406,-1.39062 v -3.96875 h -0.8594 v -0.90625 h 0.8594 v -1.71875 l 1.1719,-0.70313 v 2.42188 h 1.1718 v 0.90625 h -1.1718 v 4.04687 q 0,0.5 0.047,0.64063 0.062,0.14062 0.2031,0.23437 0.1406,0.0781 0.4062,0.0781 0.2032,0 0.5157,-0.0469 z m 5.8749,-1.17187 1.2031,0.14062 q -0.2812,1.0625 -1.0625,1.65625 -0.7656,0.57813 -1.9687,0.57813 -1.5156,0 -2.4063,-0.9375 -0.8906,-0.9375 -0.8906,-2.60938 0,-1.75 0.8906,-2.70312 0.9063,-0.96875 2.3438,-0.96875 1.3906,0 2.2656,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.1562 q 0.062,1.14062 0.6406,1.75 0.5781,0.59375 1.4375,0.59375 0.6562,0 1.1094,-0.32813 0.4531,-0.34375 0.7187,-1.07812 z m -3.8437,-1.90625 h 3.8593 q -0.078,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.4531,-0.6875 -0.8125,0 -1.3594,0.54688 -0.5468,0.53125 -0.6093,1.4375 z m 5.7406,4.125 2.5312,-3.59375 -2.3437,-3.3125 h 1.4687 l 1.0625,1.60937 q 0.2969,0.46875 0.4844,0.78125 0.2812,-0.4375 0.5156,-0.76562 l 1.1719,-1.625 h 1.4062 l -2.3906,3.25 2.5625,3.65625 h -1.4375 l -1.4219,-2.14063 -0.375,-0.59375 -1.8125,2.73438 z m 10.0078,-1.04688 0.1719,1.03125 q -0.5,0.10938 -0.8907,0.10938 -0.6406,0 -1,-0.20313 -0.3437,-0.20312 -0.4843,-0.53125 -0.1407,-0.32812 -0.1407,-1.39062 v -3.96875 h -0.8593 v -0.90625 h 0.8593 v -1.71875 l 1.1719,-0.70313 v 2.42188 h 1.1719 v 0.90625 h -1.1719 v 4.04687 q 0,0.5 0.047,0.64063 0.062,0.14062 0.2031,0.23437 0.1407,0.0781 0.4063,0.0781 0.2031,0 0.5156,-0.0469 z m 4.8434,1.04688 v -6.90625 h 1.0469 v 0.96875 q 0.3281,-0.51563 0.8594,-0.8125 0.5468,-0.3125 1.2343,-0.3125 0.7813,0 1.2657,0.3125 0.4843,0.3125 0.6875,0.89062 0.8281,-1.20312 2.1406,-1.20312 1.0312,0 1.5781,0.57812 0.5625,0.5625 0.5625,1.73438 v 4.75 h -1.1719 v -4.35938 q 0,-0.70312 -0.125,-1 -0.1093,-0.3125 -0.4062,-0.5 -0.2969,-0.1875 -0.7031,-0.1875 -0.7188,0 -1.2032,0.48438 -0.4843,0.48437 -0.4843,1.54687 v 4.01563 h -1.1719 v -4.48438 q 0,-0.78125 -0.2969,-1.17187 -0.2812,-0.39063 -0.9219,-0.39063 -0.5,0 -0.9218,0.26563 -0.4219,0.25 -0.6094,0.75 -0.1875,0.5 -0.1875,1.45312 v 3.57813 z m 15.8369,-2.21875 1.2031,0.14062 q -0.2812,1.0625 -1.0625,1.65625 -0.7656,0.57813 -1.9687,0.57813 -1.5157,0 -2.4063,-0.9375 -0.8906,-0.9375 -0.8906,-2.60938 0,-1.75 0.8906,-2.70312 0.9063,-0.96875 2.3438,-0.96875 1.3906,0 2.2656,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.1563 q 0.062,1.14062 0.6407,1.75 0.5781,0.59375 1.4375,0.59375 0.6562,0 1.1093,-0.32813 0.4532,-0.34375 0.7188,-1.07812 z m -3.8438,-1.90625 h 3.8594 q -0.078,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.4531,-0.6875 -0.8125,0 -1.3594,0.54688 -0.5469,0.53125 -0.6094,1.4375 z m 6.5219,4.125 v -6.90625 h 1.0468 v 0.96875 q 0.3282,-0.51563 0.8594,-0.8125 0.5469,-0.3125 1.2344,-0.3125 0.7812,0 1.2656,0.3125 0.4844,0.3125 0.6875,0.89062 0.8281,-1.20312 2.1406,-1.20312 1.0313,0 1.5782,0.57812 0.5625,0.5625 0.5625,1.73438 v 4.75 h -1.1719 v -4.35938 q 0,-0.70312 -0.125,-1 -0.1094,-0.3125 -0.4063,-0.5 -0.2968,-0.1875 -0.7031,-0.1875 -0.7187,0 -1.2031,0.48438 -0.4844,0.48437 -0.4844,1.54687 v 4.01563 h -1.1719 v -4.48438 q 0,-0.78125 -0.2968,-1.17187 -0.2813,-0.39063 -0.9219,-0.39063 -0.5,0 -0.9219,0.26563 -0.4219,0.25 -0.6094,0.75 -0.1875,0.5 -0.1875,1.45312 v 3.57813 z m 10.6649,-3.45313 q 0,-1.92187 1.0781,-2.84375 0.8906,-0.76562 2.1719,-0.76562 1.4219,0 2.3281,0.9375 0.9063,0.92187 0.9063,2.57812 0,1.32813 -0.4063,2.09375 -0.3906,0.76563 -1.1562,1.1875 -0.7657,0.42188 -1.6719,0.42188 -1.4531,0 -2.3594,-0.92188 -0.8906,-0.9375 -0.8906,-2.6875 z m 1.2031,0 q 0,1.32813 0.5781,1.98438 0.5938,0.65625 1.4688,0.65625 0.875,0 1.4531,-0.65625 0.5781,-0.67188 0.5781,-2.03125 0,-1.28125 -0.5937,-1.9375 -0.5781,-0.65625 -1.4375,-0.65625 -0.875,0 -1.4688,0.65625 -0.5781,0.65625 -0.5781,1.98437 z m 6.6313,3.45313 v -6.90625 h 1.0625 v 1.04687 q 0.4062,-0.73437 0.7343,-0.96875 0.3438,-0.23437 0.7657,-0.23437 0.5937,0 1.2031,0.375 l -0.4063,1.07812 q -0.4375,-0.25 -0.8593,-0.25 -0.3907,0 -0.7032,0.23438 -0.2968,0.23437 -0.4218,0.64062 -0.2032,0.625 -0.2032,1.35938 v 3.625 z m 4.407,2.65625 -0.125,-1.09375 q 0.375,0.10937 0.6563,0.10937 0.3906,0 0.625,-0.14062 0.2344,-0.125 0.3906,-0.35938 0.1094,-0.17187 0.3594,-0.875 0.031,-0.0937 0.1094,-0.28125 l -2.625,-6.92187 h 1.2656 l 1.4375,4 q 0.2812,0.76562 0.5,1.59375 0.2031,-0.79688 0.4687,-1.57813 l 1.4844,-4.01562 h 1.1719 l -2.625,7.01562 q -0.4219,1.14063 -0.6563,1.57813 -0.3125,0.57812 -0.7187,0.84375 -0.4063,0.28125 -0.9688,0.28125 -0.3281,0 -0.75,-0.15625 z"
-       fill-rule="nonzero"
-       id="path318" />
-    <path
-       fill="#000000"
-       d="m 712.39569,205.4041 v -9.54688 h 6.4375 v 1.125 h -5.1719 v 2.96875 h 4.4688 v 1.125 h -4.4688 v 4.32813 z m 12.4382,-0.85938 q -0.6562,0.5625 -1.2656,0.79688 -0.5937,0.21875 -1.2812,0.21875 -1.1407,0 -1.75,-0.54688 -0.6094,-0.5625 -0.6094,-1.4375 0,-0.5 0.2187,-0.92187 0.2344,-0.42188 0.6094,-0.67188 0.375,-0.25 0.8438,-0.39062 0.3437,-0.0781 1.0468,-0.17188 1.4219,-0.17187 2.0938,-0.40625 0,-0.23437 0,-0.29687 0,-0.71875 -0.3281,-1.01563 -0.4532,-0.39062 -1.3438,-0.39062 -0.8125,0 -1.2187,0.29687 -0.3907,0.28125 -0.5782,1.01563 l -1.1406,-0.15625 q 0.1563,-0.73438 0.5156,-1.1875 0.3594,-0.45313 1.0313,-0.6875 0.6719,-0.25 1.5625,-0.25 0.8906,0 1.4375,0.20312 0.5625,0.20313 0.8125,0.53125 0.2656,0.3125 0.375,0.79688 0.047,0.29687 0.047,1.07812 v 1.5625 q 0,1.625 0.078,2.0625 0.078,0.4375 0.2969,0.82813 h -1.2188 q -0.1875,-0.35938 -0.2344,-0.85938 z m -0.094,-2.60937 q -0.6406,0.26562 -1.9218,0.4375 -0.7188,0.10937 -1.0157,0.25 -0.2968,0.125 -0.4687,0.375 -0.1563,0.25 -0.1563,0.54687 0,0.46875 0.3438,0.78125 0.3594,0.3125 1.0469,0.3125 0.6718,0 1.2031,-0.29687 0.5312,-0.29688 0.7812,-0.8125 0.1875,-0.39063 0.1875,-1.17188 z m 2.5219,1.40625 1.1562,-0.1875 q 0.1094,0.70312 0.5469,1.07812 0.4531,0.35938 1.25,0.35938 0.8125,0 1.2031,-0.32813 0.3907,-0.32812 0.3907,-0.76562 0,-0.39063 -0.3594,-0.625 -0.2344,-0.15625 -1.1875,-0.39063 -1.2969,-0.32812 -1.7969,-0.5625 -0.4844,-0.25 -0.75,-0.65625 -0.25,-0.42187 -0.25,-0.9375 0,-0.45312 0.2031,-0.84375 0.2188,-0.40625 0.5782,-0.67187 0.2812,-0.1875 0.75,-0.32813 0.4687,-0.14062 1.0156,-0.14062 0.8125,0 1.4219,0.23437 0.6093,0.23438 0.9062,0.64063 0.2969,0.39062 0.4063,1.0625 l -1.1407,0.15625 q -0.078,-0.53125 -0.4531,-0.82813 -0.375,-0.3125 -1.0625,-0.3125 -0.8125,0 -1.1562,0.26563 -0.3438,0.26562 -0.3438,0.625 0,0.23437 0.1406,0.42187 0.1563,0.1875 0.4532,0.3125 0.1718,0.0625 1.0312,0.29688 1.25,0.32812 1.7344,0.54687 0.5,0.20313 0.7812,0.60938 0.2813,0.40625 0.2813,1 0,0.59375 -0.3438,1.10937 -0.3437,0.51563 -1,0.79688 -0.6406,0.28125 -1.4531,0.28125 -1.3437,0 -2.0469,-0.5625 -0.7031,-0.5625 -0.9062,-1.65625 z m 9.6953,1.01562 0.1719,1.03125 q -0.5,0.10938 -0.8907,0.10938 -0.6406,0 -1,-0.20313 -0.3437,-0.20312 -0.4843,-0.53125 -0.1407,-0.32812 -0.1407,-1.39062 v -3.96875 h -0.8593 v -0.90625 h 0.8593 v -1.71875 l 1.1719,-0.70313 v 2.42188 h 1.1719 v 0.90625 h -1.1719 v 4.04687 q 0,0.5 0.047,0.64063 0.062,0.14062 0.2031,0.23437 0.1407,0.0781 0.4063,0.0781 0.2031,0 0.5156,-0.0469 z m 1.1405,3.70313 v -9.5625 h 1.0781 v 0.89062 q 0.375,-0.53125 0.8438,-0.78125 0.4843,-0.26562 1.1562,-0.26562 0.875,0 1.5469,0.45312 0.6875,0.45313 1.0312,1.28125 0.3438,0.82813 0.3438,1.82813 0,1.04687 -0.375,1.90625 -0.375,0.84375 -1.1094,1.29687 -0.7187,0.45313 -1.5312,0.45313 -0.5782,0 -1.0469,-0.25 -0.4688,-0.25 -0.7656,-0.625 v 3.375 z m 1.0625,-6.07813 q 0,1.34375 0.5312,1.98438 0.5469,0.625 1.3125,0.625 0.7813,0 1.3438,-0.65625 0.5625,-0.65625 0.5625,-2.04688 0,-1.3125 -0.5469,-1.96875 -0.5469,-0.67187 -1.2969,-0.67187 -0.75,0 -1.3281,0.70312 -0.5781,0.70313 -0.5781,2.03125 z m 10.8656,2.5625 q -0.6563,0.5625 -1.2656,0.79688 -0.5938,0.21875 -1.2813,0.21875 -1.1406,0 -1.75,-0.54688 -0.6094,-0.5625 -0.6094,-1.4375 0,-0.5 0.2188,-0.92187 0.2344,-0.42188 0.6094,-0.67188 0.375,-0.25 0.8437,-0.39062 0.3438,-0.0781 1.0469,-0.17188 1.4219,-0.17187 2.0937,-0.40625 0,-0.23437 0,-0.29687 0,-0.71875 -0.3281,-1.01563 -0.4531,-0.39062 -1.3437,-0.39062 -0.8125,0 -1.2188,0.29687 -0.3906,0.28125 -0.5781,1.01563 l -1.1406,-0.15625 q 0.1562,-0.73438 0.5156,-1.1875 0.3594,-0.45313 1.0312,-0.6875 0.6719,-0.25 1.5625,-0.25 0.8907,0 1.4375,0.20312 0.5625,0.20313 0.8125,0.53125 0.2657,0.3125 0.375,0.79688 0.047,0.29687 0.047,1.07812 v 1.5625 q 0,1.625 0.078,2.0625 0.078,0.4375 0.2969,0.82813 h -1.2187 q -0.1875,-0.35938 -0.2344,-0.85938 z m -0.094,-2.60937 q -0.6406,0.26562 -1.9219,0.4375 -0.7187,0.10937 -1.0156,0.25 -0.2969,0.125 -0.4688,0.375 -0.1562,0.25 -0.1562,0.54687 0,0.46875 0.3437,0.78125 0.3594,0.3125 1.0469,0.3125 0.6719,0 1.2031,-0.29687 0.5313,-0.29688 0.7813,-0.8125 0.1875,-0.39063 0.1875,-1.17188 z m 5.5531,2.42187 0.1719,1.03125 q -0.5,0.10938 -0.8907,0.10938 -0.6406,0 -1,-0.20313 -0.3437,-0.20312 -0.4843,-0.53125 -0.1407,-0.32812 -0.1407,-1.39062 v -3.96875 h -0.8593 v -0.90625 h 0.8593 v -1.71875 l 1.1719,-0.70313 v 2.42188 h 1.1719 v 0.90625 h -1.1719 v 4.04687 q 0,0.5 0.047,0.64063 0.062,0.14062 0.2031,0.23437 0.1407,0.0781 0.4063,0.0781 0.2031,0 0.5156,-0.0469 z m 1.1405,1.04688 v -9.54688 h 1.1719 v 3.42188 q 0.8281,-0.9375 2.0781,-0.9375 0.7656,0 1.3281,0.29687 0.5625,0.29688 0.8125,0.84375 0.25,0.53125 0.25,1.54688 v 4.375 h -1.1719 v -4.375 q 0,-0.89063 -0.3906,-1.28125 -0.375,-0.40625 -1.0781,-0.40625 -0.5156,0 -0.9844,0.28125 -0.4531,0.26562 -0.6562,0.73437 -0.1875,0.45313 -0.1875,1.26563 v 3.78125 z m 15.631,-0.85938 q -0.6562,0.5625 -1.2656,0.79688 -0.5937,0.21875 -1.2812,0.21875 -1.1407,0 -1.75,-0.54688 -0.6094,-0.5625 -0.6094,-1.4375 0,-0.5 0.2187,-0.92187 0.2344,-0.42188 0.6094,-0.67188 0.375,-0.25 0.8438,-0.39062 0.3437,-0.0781 1.0468,-0.17188 1.4219,-0.17187 2.0938,-0.40625 0,-0.23437 0,-0.29687 0,-0.71875 -0.3281,-1.01563 -0.4532,-0.39062 -1.3438,-0.39062 -0.8125,0 -1.2187,0.29687 -0.3907,0.28125 -0.5782,1.01563 l -1.1406,-0.15625 q 0.1563,-0.73438 0.5156,-1.1875 0.3594,-0.45313 1.0313,-0.6875 0.6719,-0.25 1.5625,-0.25 0.8906,0 1.4375,0.20312 0.5625,0.20313 0.8125,0.53125 0.2656,0.3125 0.375,0.79688 0.047,0.29687 0.047,1.07812 v 1.5625 q 0,1.625 0.078,2.0625 0.078,0.4375 0.2969,0.82813 h -1.2188 q -0.1875,-0.35938 -0.2344,-0.85938 z m -0.094,-2.60937 q -0.6406,0.26562 -1.9218,0.4375 -0.7188,0.10937 -1.0157,0.25 -0.2968,0.125 -0.4687,0.375 -0.1563,0.25 -0.1563,0.54687 0,0.46875 0.3438,0.78125 0.3594,0.3125 1.0469,0.3125 0.6718,0 1.2031,-0.29687 0.5312,-0.29688 0.7812,-0.8125 0.1875,-0.39063 0.1875,-1.17188 z m 2.975,3.46875 v -6.90625 h 1.0625 v 1.04687 q 0.4063,-0.73437 0.7344,-0.96875 0.3437,-0.23437 0.7656,-0.23437 0.5938,0 1.2031,0.375 l -0.4062,1.07812 q -0.4375,-0.25 -0.8594,-0.25 -0.3906,0 -0.7031,0.23438 -0.2969,0.23437 -0.4219,0.64062 -0.2031,0.625 -0.2031,1.35938 v 3.625 z m 9.1884,-2.21875 1.2031,0.14062 q -0.2812,1.0625 -1.0625,1.65625 -0.7656,0.57813 -1.9687,0.57813 -1.5156,0 -2.4063,-0.9375 -0.8906,-0.9375 -0.8906,-2.60938 0,-1.75 0.8906,-2.70312 0.9063,-0.96875 2.3438,-0.96875 1.3906,0 2.2656,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.1562 q 0.062,1.14062 0.6406,1.75 0.5781,0.59375 1.4375,0.59375 0.6562,0 1.1094,-0.32813 0.4531,-0.34375 0.7187,-1.07812 z m -3.8437,-1.90625 h 3.8593 q -0.078,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.4531,-0.6875 -0.8125,0 -1.3594,0.54688 -0.5468,0.53125 -0.6093,1.4375 z m 11.0374,3.26562 q -0.6562,0.5625 -1.2656,0.79688 -0.5937,0.21875 -1.2812,0.21875 -1.1407,0 -1.75,-0.54688 -0.6094,-0.5625 -0.6094,-1.4375 0,-0.5 0.2187,-0.92187 0.2344,-0.42188 0.6094,-0.67188 0.375,-0.25 0.8438,-0.39062 0.3437,-0.0781 1.0468,-0.17188 1.4219,-0.17187 2.0938,-0.40625 0,-0.23437 0,-0.29687 0,-0.71875 -0.3281,-1.01563 -0.4532,-0.39062 -1.3438,-0.39062 -0.8125,0 -1.2187,0.29687 -0.3907,0.28125 -0.5782,1.01563 l -1.1406,-0.15625 q 0.1563,-0.73438 0.5156,-1.1875 0.3594,-0.45313 1.0313,-0.6875 0.6719,-0.25 1.5625,-0.25 0.8906,0 1.4375,0.20312 0.5625,0.20313 0.8125,0.53125 0.2656,0.3125 0.375,0.79688 0.047,0.29687 0.047,1.07812 v 1.5625 q 0,1.625 0.078,2.0625 0.078,0.4375 0.2969,0.82813 h -1.2188 q -0.1875,-0.35938 -0.2344,-0.85938 z m -0.094,-2.60937 q -0.6406,0.26562 -1.9218,0.4375 -0.7188,0.10937 -1.0157,0.25 -0.2968,0.125 -0.4687,0.375 -0.1563,0.25 -0.1563,0.54687 0,0.46875 0.3438,0.78125 0.3594,0.3125 1.0469,0.3125 0.6718,0 1.2031,-0.29687 0.5312,-0.29688 0.7812,-0.8125 0.1875,-0.39063 0.1875,-1.17188 z"
-       fill-rule="nonzero"
-       id="path320" />
-    <path
-       fill="#000000"
-       d="m 707.87269,240.60097 v -9.54689 h 1.2969 l 5.0156,7.50002 v -7.50002 h 1.2031 v 9.54689 h -1.2969 l -5.0156,-7.5 v 7.5 z m 14.2189,-2.21875 1.2032,0.14063 q -0.2813,1.0625 -1.0625,1.65625 -0.7657,0.57812 -1.9688,0.57812 -1.5156,0 -2.4062,-0.9375 -0.8907,-0.9375 -0.8907,-2.60937 0,-1.75 0.8907,-2.70313 0.9062,-0.96875 2.3437,-0.96875 1.3906,0 2.2656,0.9375 0.875,0.9375 0.875,2.65625 0,0.10938 0,0.3125 h -5.1562 q 0.062,1.14063 0.6406,1.75 0.5781,0.59375 1.4375,0.59375 0.6563,0 1.1094,-0.32812 0.4531,-0.34375 0.7187,-1.07813 z m -3.8437,-1.90625 h 3.8594 q -0.078,-0.85937 -0.4375,-1.29687 -0.5625,-0.6875 -1.4532,-0.6875 -0.8125,0 -1.3593,0.54687 -0.5469,0.53125 -0.6094,1.4375 z m 5.7406,4.125 2.5312,-3.59375 -2.3437,-3.3125 h 1.4687 l 1.0625,1.60938 q 0.2969,0.46875 0.4844,0.78125 0.2813,-0.4375 0.5156,-0.76563 l 1.1719,-1.625 h 1.4063 l -2.3907,3.25 2.5625,3.65625 h -1.4375 l -1.4218,-2.14062 -0.375,-0.59375 -1.8125,2.73437 z m 10.0078,-1.04687 0.1719,1.03125 q -0.5,0.10937 -0.8907,0.10937 -0.6406,0 -1,-0.20312 -0.3437,-0.20313 -0.4843,-0.53125 -0.1407,-0.32813 -0.1407,-1.39063 v -3.96875 h -0.8593 v -0.90625 h 0.8593 v -1.71875 l 1.1719,-0.70314 v 2.42189 h 1.1719 v 0.90625 h -1.1719 v 4.04688 q 0,0.5 0.047,0.64062 0.062,0.14063 0.2031,0.23438 0.1407,0.0781 0.4063,0.0781 0.2031,0 0.5156,-0.0469 z m 4.8434,1.04687 v -6.90625 h 1.0625 v 0.98438 q 0.75,-1.14063 2.1875,-1.14063 0.625,0 1.1563,0.21875 0.5312,0.21875 0.7812,0.59375 0.2657,0.35938 0.375,0.85938 0.062,0.32812 0.062,1.14062 v 4.25 h -1.1718 v -4.20312 q 0,-0.71875 -0.1407,-1.0625 -0.1406,-0.35938 -0.4843,-0.5625 -0.3438,-0.21875 -0.8125,-0.21875 -0.75,0 -1.2969,0.46875 -0.5469,0.46875 -0.5469,1.79687 v 3.78125 z m 6.975,-3.45312 q 0,-1.92188 1.0781,-2.84375 0.8907,-0.76563 2.1719,-0.76563 1.4219,0 2.3281,0.9375 0.9063,0.92188 0.9063,2.57813 0,1.32812 -0.4063,2.09375 -0.3906,0.76562 -1.1562,1.1875 -0.7656,0.42187 -1.6719,0.42187 -1.4531,0 -2.3594,-0.92187 -0.8906,-0.9375 -0.8906,-2.6875 z m 1.2031,0 q 0,1.32812 0.5782,1.98437 0.5937,0.65625 1.4687,0.65625 0.875,0 1.4531,-0.65625 0.5782,-0.67187 0.5782,-2.03125 0,-1.28125 -0.5938,-1.9375 -0.5781,-0.65625 -1.4375,-0.65625 -0.875,0 -1.4687,0.65625 -0.5782,0.65625 -0.5782,1.98438 z m 11.1313,3.45312 v -0.875 q -0.6563,1.03125 -1.9375,1.03125 -0.8125,0 -1.5157,-0.45312 -0.6875,-0.45313 -1.0781,-1.26563 -0.375,-0.82812 -0.375,-1.89062 0,-1.03125 0.3438,-1.875 0.3437,-0.84375 1.0312,-1.28125 0.7031,-0.45313 1.5469,-0.45313 0.625,0 1.1094,0.26563 0.5,0.25 0.7968,0.67187 v -3.42189 h 1.1719 v 9.54689 z m -3.7032,-3.45312 q 0,1.32812 0.5625,1.98437 0.5625,0.65625 1.3282,0.65625 0.7656,0 1.2968,-0.625 0.5313,-0.625 0.5313,-1.90625 0,-1.42187 -0.5469,-2.07812 -0.5469,-0.67188 -1.3437,-0.67188 -0.7813,0 -1.3125,0.64063 -0.5157,0.625 -0.5157,2 z m 11.3656,1.23437 1.2032,0.14063 q -0.2813,1.0625 -1.0625,1.65625 -0.7657,0.57812 -1.9688,0.57812 -1.5156,0 -2.4062,-0.9375 -0.8907,-0.9375 -0.8907,-2.60937 0,-1.75 0.8907,-2.70313 0.9062,-0.96875 2.3437,-0.96875 1.3906,0 2.2656,0.9375 0.875,0.9375 0.875,2.65625 0,0.10938 0,0.3125 h -5.1562 q 0.062,1.14063 0.6406,1.75 0.5781,0.59375 1.4375,0.59375 0.6563,0 1.1094,-0.32812 0.4531,-0.34375 0.7187,-1.07813 z m -3.8437,-1.90625 h 3.8594 q -0.078,-0.85937 -0.4375,-1.29687 -0.5625,-0.6875 -1.4532,-0.6875 -0.8125,0 -1.3593,0.54687 -0.5469,0.53125 -0.6094,1.4375 z m 9.8967,-0.57812 q 0,-1.6875 0.3438,-2.71875 0.3593,-1.03125 1.0468,-1.59375 0.6875,-0.56252 1.7188,-0.56252 0.7812,0 1.3594,0.3125 0.5781,0.29689 0.9531,0.89064 0.375,0.57813 0.5937,1.42188 0.2188,0.82812 0.2188,2.25 0,1.67187 -0.3594,2.70312 -0.3437,1.03125 -1.0312,1.59375 -0.6719,0.5625 -1.7344,0.5625 -1.375,0 -2.1563,-0.98437 -0.9531,-1.1875 -0.9531,-3.875 z m 1.2031,0 q 0,2.34375 0.5469,3.125 0.5625,0.78125 1.3594,0.78125 0.8125,0 1.3594,-0.78125 0.5625,-0.78125 0.5625,-3.125 0,-2.35938 -0.5625,-3.125 -0.5469,-0.78125 -1.3594,-0.78125 -0.8125,0 -1.2969,0.6875 -0.6094,0.875 -0.6094,3.21875 z m 10.2405,7.35937 v -9.5625 h 1.0781 v 0.89063 q 0.375,-0.53125 0.8438,-0.78125 0.4844,-0.26563 1.1562,-0.26563 0.875,0 1.5469,0.45313 0.6875,0.45312 1.0313,1.28125 0.3437,0.82812 0.3437,1.82812 0,1.04688 -0.375,1.90625 -0.375,0.84375 -1.1094,1.29688 -0.7187,0.45312 -1.5312,0.45312 -0.5781,0 -1.0469,-0.25 -0.4687,-0.25 -0.7656,-0.625 v 3.375 z m 1.0625,-6.07812 q 0,1.34375 0.5313,1.98437 0.5468,0.625 1.3125,0.625 0.7812,0 1.3437,-0.65625 0.5625,-0.65625 0.5625,-2.04687 0,-1.3125 -0.5469,-1.96875 -0.5468,-0.67188 -1.2968,-0.67188 -0.75,0 -1.3282,0.70313 -0.5781,0.70312 -0.5781,2.03125 z m 8.9125,2.375 0.1719,1.03125 q -0.5,0.10937 -0.8907,0.10937 -0.6406,0 -1,-0.20312 -0.3437,-0.20313 -0.4843,-0.53125 -0.1407,-0.32813 -0.1407,-1.39063 v -3.96875 h -0.8593 v -0.90625 h 0.8593 v -1.71875 l 1.1719,-0.70314 v 2.42189 h 1.1719 v 0.90625 h -1.1719 v 4.04688 q 0,0.5 0.047,0.64062 0.062,0.14063 0.2032,0.23438 0.1406,0.0781 0.4062,0.0781 0.2031,0 0.5156,-0.0469 z m 1.1248,1.04687 v -6.90625 h 1.0625 v 1.04688 q 0.4063,-0.73438 0.7344,-0.96875 0.3437,-0.23438 0.7656,-0.23438 0.5938,0 1.2031,0.375 l -0.4062,1.07813 q -0.4375,-0.25 -0.8594,-0.25 -0.3906,0 -0.7031,0.23437 -0.2969,0.23438 -0.4219,0.64063 -0.2031,0.625 -0.2031,1.35937 v 3.625 z"
-       fill-rule="nonzero"
-       id="path322" />
-    <path
-       fill="#000000"
-       d="m 707.87269,275.7978 v -9.54688 h 1.2969 l 5.0156,7.5 v -7.5 h 1.2031 v 9.54688 h -1.2969 l -5.0156,-7.5 v 7.5 z m 14.2189,-2.21875 1.2032,0.14062 q -0.2813,1.0625 -1.0625,1.65625 -0.7657,0.57813 -1.9688,0.57813 -1.5156,0 -2.4062,-0.9375 -0.8907,-0.9375 -0.8907,-2.60938 0,-1.75 0.8907,-2.70312 0.9062,-0.96875 2.3437,-0.96875 1.3906,0 2.2656,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.1562 q 0.062,1.14062 0.6406,1.75 0.5781,0.59375 1.4375,0.59375 0.6563,0 1.1094,-0.32813 0.4531,-0.34375 0.7187,-1.07812 z m -3.8437,-1.90625 h 3.8594 q -0.078,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.4532,-0.6875 -0.8125,0 -1.3593,0.54688 -0.5469,0.53125 -0.6094,1.4375 z m 5.7406,4.125 2.5312,-3.59375 -2.3437,-3.3125 h 1.4687 l 1.0625,1.60937 q 0.2969,0.46875 0.4844,0.78125 0.2813,-0.4375 0.5156,-0.76562 l 1.1719,-1.625 h 1.4063 l -2.3907,3.25 2.5625,3.65625 h -1.4375 l -1.4218,-2.14063 -0.375,-0.59375 -1.8125,2.73438 z m 10.0078,-1.04688 0.1719,1.03125 q -0.5,0.10938 -0.8907,0.10938 -0.6406,0 -1,-0.20313 -0.3437,-0.20312 -0.4843,-0.53125 -0.1407,-0.32812 -0.1407,-1.39062 v -3.96875 h -0.8593 v -0.90625 h 0.8593 v -1.71875 l 1.1719,-0.70313 v 2.42188 h 1.1719 v 0.90625 h -1.1719 v 4.04687 q 0,0.5 0.047,0.64063 0.062,0.14062 0.2031,0.23437 0.1407,0.0781 0.4063,0.0781 0.2031,0 0.5156,-0.0469 z m 4.8434,1.04688 v -6.90625 h 1.0625 v 0.98437 q 0.75,-1.14062 2.1875,-1.14062 0.625,0 1.1563,0.21875 0.5312,0.21875 0.7812,0.59375 0.2657,0.35937 0.375,0.85937 0.062,0.32813 0.062,1.14063 v 4.25 h -1.1718 v -4.20313 q 0,-0.71875 -0.1407,-1.0625 -0.1406,-0.35937 -0.4843,-0.5625 -0.3438,-0.21875 -0.8125,-0.21875 -0.75,0 -1.2969,0.46875 -0.5469,0.46875 -0.5469,1.79688 v 3.78125 z m 6.975,-3.45313 q 0,-1.92187 1.0781,-2.84375 0.8907,-0.76562 2.1719,-0.76562 1.4219,0 2.3281,0.9375 0.9063,0.92187 0.9063,2.57812 0,1.32813 -0.4063,2.09375 -0.3906,0.76563 -1.1562,1.1875 -0.7656,0.42188 -1.6719,0.42188 -1.4531,0 -2.3594,-0.92188 -0.8906,-0.9375 -0.8906,-2.6875 z m 1.2031,0 q 0,1.32813 0.5782,1.98438 0.5937,0.65625 1.4687,0.65625 0.875,0 1.4531,-0.65625 0.5782,-0.67188 0.5782,-2.03125 0,-1.28125 -0.5938,-1.9375 -0.5781,-0.65625 -1.4375,-0.65625 -0.875,0 -1.4687,0.65625 -0.5782,0.65625 -0.5782,1.98437 z m 11.1313,3.45313 v -0.875 q -0.6563,1.03125 -1.9375,1.03125 -0.8125,0 -1.5157,-0.45313 -0.6875,-0.45312 -1.0781,-1.26562 -0.375,-0.82813 -0.375,-1.89063 0,-1.03125 0.3438,-1.875 0.3437,-0.84375 1.0312,-1.28125 0.7031,-0.45312 1.5469,-0.45312 0.625,0 1.1094,0.26562 0.5,0.25 0.7968,0.67188 v -3.42188 h 1.1719 v 9.54688 z m -3.7032,-3.45313 q 0,1.32813 0.5625,1.98438 0.5625,0.65625 1.3282,0.65625 0.7656,0 1.2968,-0.625 0.5313,-0.625 0.5313,-1.90625 0,-1.42188 -0.5469,-2.07813 -0.5469,-0.67187 -1.3437,-0.67187 -0.7813,0 -1.3125,0.64062 -0.5157,0.625 -0.5157,2 z m 11.3656,1.23438 1.2032,0.14062 q -0.2813,1.0625 -1.0625,1.65625 -0.7657,0.57813 -1.9688,0.57813 -1.5156,0 -2.4062,-0.9375 -0.8907,-0.9375 -0.8907,-2.60938 0,-1.75 0.8907,-2.70312 0.9062,-0.96875 2.3437,-0.96875 1.3906,0 2.2656,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.1562 q 0.062,1.14062 0.6406,1.75 0.5781,0.59375 1.4375,0.59375 0.6563,0 1.1094,-0.32813 0.4531,-0.34375 0.7187,-1.07812 z m -3.8437,-1.90625 h 3.8594 q -0.078,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.4532,-0.6875 -0.8125,0 -1.3593,0.54688 -0.5469,0.53125 -0.6094,1.4375 z m 14.3186,4.125 h -1.1719 v -7.46875 q -0.4219,0.40625 -1.1094,0.8125 -0.6875,0.40625 -1.2343,0.60937 v -1.14062 q 0.9843,-0.45313 1.7187,-1.10938 0.7344,-0.67187 1.0313,-1.28125 h 0.7656 z m 7.0217,2.65625 v -9.5625 h 1.0781 v 0.89062 q 0.375,-0.53125 0.8438,-0.78125 0.4844,-0.26562 1.1562,-0.26562 0.875,0 1.5469,0.45312 0.6875,0.45313 1.0313,1.28125 0.3437,0.82813 0.3437,1.82813 0,1.04687 -0.375,1.90625 -0.375,0.84375 -1.1094,1.29687 -0.7187,0.45313 -1.5312,0.45313 -0.5781,0 -1.0469,-0.25 -0.4687,-0.25 -0.7656,-0.625 v 3.375 z m 1.0625,-6.07813 q 0,1.34375 0.5313,1.98438 0.5468,0.625 1.3125,0.625 0.7812,0 1.3437,-0.65625 0.5625,-0.65625 0.5625,-2.04688 0,-1.3125 -0.5469,-1.96875 -0.5468,-0.67187 -1.2968,-0.67187 -0.75,0 -1.3282,0.70312 -0.5781,0.70313 -0.5781,2.03125 z m 8.9125,2.375 0.1719,1.03125 q -0.5,0.10938 -0.8907,0.10938 -0.6406,0 -1,-0.20313 -0.3437,-0.20312 -0.4843,-0.53125 -0.1407,-0.32812 -0.1407,-1.39062 v -3.96875 h -0.8593 v -0.90625 h 0.8593 v -1.71875 l 1.1719,-0.70313 v 2.42188 h 1.1719 v 0.90625 h -1.1719 v 4.04687 q 0,0.5 0.047,0.64063 0.062,0.14062 0.2032,0.23437 0.1406,0.0781 0.4062,0.0781 0.2031,0 0.5156,-0.0469 z m 1.1248,1.04688 v -6.90625 h 1.0625 v 1.04687 q 0.4063,-0.73437 0.7344,-0.96875 0.3437,-0.23437 0.7656,-0.23437 0.5938,0 1.2031,0.375 l -0.4062,1.07812 q -0.4375,-0.25 -0.8594,-0.25 -0.3906,0 -0.7031,0.23438 -0.2969,0.23437 -0.4219,0.64062 -0.2031,0.625 -0.2031,1.35938 v 3.625 z"
-       fill-rule="nonzero"
-       id="path324" />
-    <path
-       fill="#000000"
-       d="m 707.87269,310.99465 v -9.54688 h 1.2969 l 5.0156,7.5 v -7.5 h 1.2031 v 9.54688 h -1.2969 l -5.0156,-7.5 v 7.5 z m 14.2189,-2.21875 1.2032,0.14062 q -0.2813,1.0625 -1.0625,1.65625 -0.7657,0.57813 -1.9688,0.57813 -1.5156,0 -2.4062,-0.9375 -0.8907,-0.9375 -0.8907,-2.60938 0,-1.75 0.8907,-2.70312 0.9062,-0.96875 2.3437,-0.96875 1.3906,0 2.2656,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.1562 q 0.062,1.14062 0.6406,1.75 0.5781,0.59375 1.4375,0.59375 0.6563,0 1.1094,-0.32813 0.4531,-0.34375 0.7187,-1.07812 z m -3.8437,-1.90625 h 3.8594 q -0.078,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.4532,-0.6875 -0.8125,0 -1.3593,0.54688 -0.5469,0.53125 -0.6094,1.4375 z m 5.7406,4.125 2.5312,-3.59375 -2.3437,-3.3125 h 1.4687 l 1.0625,1.60937 q 0.2969,0.46875 0.4844,0.78125 0.2813,-0.4375 0.5156,-0.76562 l 1.1719,-1.625 h 1.4063 l -2.3907,3.25 2.5625,3.65625 h -1.4375 l -1.4218,-2.14063 -0.375,-0.59375 -1.8125,2.73438 z m 10.0078,-1.04688 0.1719,1.03125 q -0.5,0.10938 -0.8907,0.10938 -0.6406,0 -1,-0.20313 -0.3437,-0.20312 -0.4843,-0.53125 -0.1407,-0.32812 -0.1407,-1.39062 v -3.96875 h -0.8593 v -0.90625 h 0.8593 v -1.71875 l 1.1719,-0.70313 v 2.42188 h 1.1719 v 0.90625 h -1.1719 v 4.04687 q 0,0.5 0.047,0.64063 0.062,0.14062 0.2031,0.23437 0.1407,0.0781 0.4063,0.0781 0.2031,0 0.5156,-0.0469 z m 4.8434,1.04688 v -6.90625 h 1.0625 v 0.98437 q 0.75,-1.14062 2.1875,-1.14062 0.625,0 1.1563,0.21875 0.5312,0.21875 0.7812,0.59375 0.2657,0.35937 0.375,0.85937 0.062,0.32813 0.062,1.14063 v 4.25 h -1.1718 v -4.20313 q 0,-0.71875 -0.1407,-1.0625 -0.1406,-0.35937 -0.4843,-0.5625 -0.3438,-0.21875 -0.8125,-0.21875 -0.75,0 -1.2969,0.46875 -0.5469,0.46875 -0.5469,1.79688 v 3.78125 z m 6.975,-3.45313 q 0,-1.92187 1.0781,-2.84375 0.8907,-0.76562 2.1719,-0.76562 1.4219,0 2.3281,0.9375 0.9063,0.92187 0.9063,2.57812 0,1.32813 -0.4063,2.09375 -0.3906,0.76563 -1.1562,1.1875 -0.7656,0.42188 -1.6719,0.42188 -1.4531,0 -2.3594,-0.92188 -0.8906,-0.9375 -0.8906,-2.6875 z m 1.2031,0 q 0,1.32813 0.5782,1.98438 0.5937,0.65625 1.4687,0.65625 0.875,0 1.4531,-0.65625 0.5782,-0.67188 0.5782,-2.03125 0,-1.28125 -0.5938,-1.9375 -0.5781,-0.65625 -1.4375,-0.65625 -0.875,0 -1.4687,0.65625 -0.5782,0.65625 -0.5782,1.98437 z m 11.1313,3.45313 v -0.875 q -0.6563,1.03125 -1.9375,1.03125 -0.8125,0 -1.5157,-0.45313 -0.6875,-0.45312 -1.0781,-1.26562 -0.375,-0.82813 -0.375,-1.89063 0,-1.03125 0.3438,-1.875 0.3437,-0.84375 1.0312,-1.28125 0.7031,-0.45312 1.5469,-0.45312 0.625,0 1.1094,0.26562 0.5,0.25 0.7968,0.67188 v -3.42188 h 1.1719 v 9.54688 z m -3.7032,-3.45313 q 0,1.32813 0.5625,1.98438 0.5625,0.65625 1.3282,0.65625 0.7656,0 1.2968,-0.625 0.5313,-0.625 0.5313,-1.90625 0,-1.42188 -0.5469,-2.07813 -0.5469,-0.67187 -1.3437,-0.67187 -0.7813,0 -1.3125,0.64062 -0.5157,0.625 -0.5157,2 z m 11.3656,1.23438 1.2032,0.14062 q -0.2813,1.0625 -1.0625,1.65625 -0.7657,0.57813 -1.9688,0.57813 -1.5156,0 -2.4062,-0.9375 -0.8907,-0.9375 -0.8907,-2.60938 0,-1.75 0.8907,-2.70312 0.9062,-0.96875 2.3437,-0.96875 1.3906,0 2.2656,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.1562 q 0.062,1.14062 0.6406,1.75 0.5781,0.59375 1.4375,0.59375 0.6563,0 1.1094,-0.32813 0.4531,-0.34375 0.7187,-1.07812 z m -3.8437,-1.90625 h 3.8594 q -0.078,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.4532,-0.6875 -0.8125,0 -1.3593,0.54688 -0.5469,0.53125 -0.6094,1.4375 z m 16.053,3 v 1.125 h -6.2969 q -0.016,-0.42188 0.1406,-0.8125 0.2344,-0.64063 0.7656,-1.26563 0.5313,-0.625 1.5313,-1.45312 1.5625,-1.26563 2.1094,-2.01563 0.5468,-0.75 0.5468,-1.40625 0,-0.70312 -0.5,-1.17187 -0.5,-0.48438 -1.2968,-0.48438 -0.8594,0 -1.375,0.51563 -0.5,0.5 -0.5,1.39062 l -1.2032,-0.10937 q 0.125,-1.35938 0.9219,-2.0625 0.8125,-0.70313 2.1719,-0.70313 1.375,0 2.1719,0.76563 0.8125,0.75 0.8125,1.875 0,0.57812 -0.2344,1.14062 -0.2344,0.54688 -0.7813,1.15625 -0.5468,0.60938 -1.8125,1.67188 -1.0468,0.89062 -1.3593,1.21875 -0.2969,0.3125 -0.4844,0.625 z m 5.2873,3.78125 v -9.5625 h 1.0781 v 0.89062 q 0.375,-0.53125 0.8438,-0.78125 0.4844,-0.26562 1.1562,-0.26562 0.875,0 1.5469,0.45312 0.6875,0.45313 1.0313,1.28125 0.3437,0.82813 0.3437,1.82813 0,1.04687 -0.375,1.90625 -0.375,0.84375 -1.1094,1.29687 -0.7187,0.45313 -1.5312,0.45313 -0.5781,0 -1.0469,-0.25 -0.4687,-0.25 -0.7656,-0.625 v 3.375 z m 1.0625,-6.07813 q 0,1.34375 0.5313,1.98438 0.5468,0.625 1.3125,0.625 0.7812,0 1.3437,-0.65625 0.5625,-0.65625 0.5625,-2.04688 0,-1.3125 -0.5469,-1.96875 -0.5468,-0.67187 -1.2968,-0.67187 -0.75,0 -1.3282,0.70312 -0.5781,0.70313 -0.5781,2.03125 z m 8.9125,2.375 0.1719,1.03125 q -0.5,0.10938 -0.8907,0.10938 -0.6406,0 -1,-0.20313 -0.3437,-0.20312 -0.4843,-0.53125 -0.1407,-0.32812 -0.1407,-1.39062 v -3.96875 h -0.8593 v -0.90625 h 0.8593 v -1.71875 l 1.1719,-0.70313 v 2.42188 h 1.1719 v 0.90625 h -1.1719 v 4.04687 q 0,0.5 0.047,0.64063 0.062,0.14062 0.2032,0.23437 0.1406,0.0781 0.4062,0.0781 0.2031,0 0.5156,-0.0469 z m 1.1248,1.04688 v -6.90625 h 1.0625 v 1.04687 q 0.4063,-0.73437 0.7344,-0.96875 0.3437,-0.23437 0.7656,-0.23437 0.5938,0 1.2031,0.375 l -0.4062,1.07812 q -0.4375,-0.25 -0.8594,-0.25 -0.3906,0 -0.7031,0.23438 -0.2969,0.23437 -0.4219,0.64062 -0.2031,0.625 -0.2031,1.35938 v 3.625 z"
-       fill-rule="nonzero"
-       id="path326" />
-    <path
-       fill="#000000"
-       d="m 706.76639,346.19152 v -9.54687 h 1.2968 l 5.0157,7.5 v -7.5 h 1.2031 v 9.54687 h -1.2969 l -5.0156,-7.5 v 7.5 z m 14.2188,-2.21875 1.2032,0.14063 q -0.2813,1.0625 -1.0625,1.65625 -0.7657,0.57812 -1.9688,0.57812 -1.5156,0 -2.4062,-0.9375 -0.8907,-0.9375 -0.8907,-2.60937 0,-1.75 0.8907,-2.70313 0.9062,-0.96875 2.3437,-0.96875 1.3906,0 2.2656,0.9375 0.875,0.9375 0.875,2.65625 0,0.10938 0,0.3125 h -5.1562 q 0.062,1.14063 0.6406,1.75 0.5781,0.59375 1.4375,0.59375 0.6563,0 1.1094,-0.32812 0.4531,-0.34375 0.7187,-1.07813 z m -3.8437,-1.90625 h 3.8594 q -0.078,-0.85937 -0.4375,-1.29687 -0.5625,-0.6875 -1.4532,-0.6875 -0.8125,0 -1.3593,0.54687 -0.5469,0.53125 -0.6094,1.4375 z m 5.7406,4.125 2.5312,-3.59375 -2.3437,-3.3125 h 1.4687 l 1.0625,1.60938 q 0.2969,0.46875 0.4844,0.78125 0.2812,-0.4375 0.5156,-0.76563 l 1.1719,-1.625 h 1.4062 l -2.3906,3.25 2.5625,3.65625 h -1.4375 l -1.4219,-2.14062 -0.375,-0.59375 -1.8125,2.73437 z m 10.0078,-1.04687 0.1719,1.03125 q -0.5,0.10937 -0.8907,0.10937 -0.6406,0 -1,-0.20312 -0.3437,-0.20313 -0.4843,-0.53125 -0.1407,-0.32813 -0.1407,-1.39063 v -3.96875 h -0.8593 v -0.90625 h 0.8593 v -1.71875 l 1.1719,-0.70312 v 2.42187 h 1.1719 v 0.90625 h -1.1719 v 4.04688 q 0,0.5 0.047,0.64062 0.062,0.14063 0.2031,0.23438 0.1407,0.0781 0.4063,0.0781 0.2031,0 0.5156,-0.0469 z m 4.8435,1.04687 v -6.90625 h 1.0625 v 0.98438 q 0.75,-1.14063 2.1875,-1.14063 0.625,0 1.1562,0.21875 0.5313,0.21875 0.7813,0.59375 0.2656,0.35938 0.375,0.85938 0.062,0.32812 0.062,1.14062 v 4.25 h -1.1719 v -4.20312 q 0,-0.71875 -0.1406,-1.0625 -0.1406,-0.35938 -0.4844,-0.5625 -0.3437,-0.21875 -0.8125,-0.21875 -0.75,0 -1.2969,0.46875 -0.5468,0.46875 -0.5468,1.79687 v 3.78125 z m 6.975,-3.45312 q 0,-1.92188 1.0781,-2.84375 0.8906,-0.76563 2.1719,-0.76563 1.4218,0 2.3281,0.9375 0.9062,0.92188 0.9062,2.57813 0,1.32812 -0.4062,2.09375 -0.3906,0.76562 -1.1563,1.1875 -0.7656,0.42187 -1.6718,0.42187 -1.4532,0 -2.3594,-0.92187 -0.8906,-0.9375 -0.8906,-2.6875 z m 1.2031,0 q 0,1.32812 0.5781,1.98437 0.5938,0.65625 1.4688,0.65625 0.875,0 1.4531,-0.65625 0.5781,-0.67187 0.5781,-2.03125 0,-1.28125 -0.5937,-1.9375 -0.5782,-0.65625 -1.4375,-0.65625 -0.875,0 -1.4688,0.65625 -0.5781,0.65625 -0.5781,1.98438 z m 11.1312,3.45312 v -0.875 q -0.6562,1.03125 -1.9375,1.03125 -0.8125,0 -1.5156,-0.45312 -0.6875,-0.45313 -1.0781,-1.26563 -0.375,-0.82812 -0.375,-1.89062 0,-1.03125 0.3437,-1.875 0.3438,-0.84375 1.0313,-1.28125 0.7031,-0.45313 1.5468,-0.45313 0.625,0 1.1094,0.26563 0.5,0.25 0.7969,0.67187 v -3.42187 h 1.1719 v 9.54687 z m -3.7031,-3.45312 q 0,1.32812 0.5625,1.98437 0.5625,0.65625 1.3281,0.65625 0.7656,0 1.2969,-0.625 0.5312,-0.625 0.5312,-1.90625 0,-1.42187 -0.5468,-2.07812 -0.5469,-0.67188 -1.3438,-0.67188 -0.7812,0 -1.3125,0.64063 -0.5156,0.625 -0.5156,2 z m 11.3656,1.23437 1.2031,0.14063 q -0.2812,1.0625 -1.0625,1.65625 -0.7656,0.57812 -1.9687,0.57812 -1.5157,0 -2.4063,-0.9375 -0.8906,-0.9375 -0.8906,-2.60937 0,-1.75 0.8906,-2.70313 0.9063,-0.96875 2.3438,-0.96875 1.3906,0 2.2656,0.9375 0.875,0.9375 0.875,2.65625 0,0.10938 0,0.3125 h -5.1563 q 0.062,1.14063 0.6407,1.75 0.5781,0.59375 1.4375,0.59375 0.6562,0 1.1093,-0.32812 0.4532,-0.34375 0.7188,-1.07813 z m -3.8438,-1.90625 h 3.8594 q -0.078,-0.85937 -0.4375,-1.29687 -0.5625,-0.6875 -1.4531,-0.6875 -0.8125,0 -1.3594,0.54687 -0.5469,0.53125 -0.6094,1.4375 z m 10.3655,4.125 v -9.54687 h 1.2969 l 5.0156,7.5 v -7.5 h 1.2031 v 9.54687 h -1.2968 l -5.0157,-7.5 v 7.5 z m 13.1875,2.65625 v -9.5625 h 1.0781 v 0.89063 q 0.375,-0.53125 0.8438,-0.78125 0.4844,-0.26563 1.1562,-0.26563 0.875,0 1.5469,0.45313 0.6875,0.45312 1.0313,1.28125 0.3437,0.82812 0.3437,1.82812 0,1.04688 -0.375,1.90625 -0.375,0.84375 -1.1094,1.29688 -0.7187,0.45312 -1.5312,0.45312 -0.5781,0 -1.0469,-0.25 -0.4687,-0.25 -0.7656,-0.625 v 3.375 z m 1.0625,-6.07812 q 0,1.34375 0.5313,1.98437 0.5468,0.625 1.3125,0.625 0.7812,0 1.3437,-0.65625 0.5625,-0.65625 0.5625,-2.04687 0,-1.3125 -0.5469,-1.96875 -0.5468,-0.67188 -1.2968,-0.67188 -0.75,0 -1.3282,0.70313 -0.5781,0.70312 -0.5781,2.03125 z m 8.9125,2.375 0.1719,1.03125 q -0.5,0.10937 -0.8906,0.10937 -0.6407,0 -1,-0.20312 -0.3438,-0.20313 -0.4844,-0.53125 -0.1406,-0.32813 -0.1406,-1.39063 v -3.96875 h -0.8594 v -0.90625 h 0.8594 v -1.71875 l 1.1718,-0.70312 v 2.42187 h 1.1719 v 0.90625 h -1.1719 v 4.04688 q 0,0.5 0.047,0.64062 0.062,0.14063 0.2031,0.23438 0.1407,0.0781 0.4063,0.0781 0.2031,0 0.5156,-0.0469 z m 1.1249,1.04687 v -6.90625 h 1.0625 v 1.04688 q 0.4062,-0.73438 0.7343,-0.96875 0.3438,-0.23438 0.7657,-0.23438 0.5937,0 1.2031,0.375 l -0.4063,1.07813 q -0.4375,-0.25 -0.8593,-0.25 -0.3907,0 -0.7032,0.23437 -0.2968,0.23438 -0.4218,0.64063 -0.2032,0.625 -0.2032,1.35937 v 3.625 z"
-       fill-rule="nonzero"
-       id="path328" />
-    <path
-       fill="#000000"
-       fill-opacity="0"
-       d="m 637.25669,45.783637 h 230.3306 v 27.46457 h -230.3306 z"
-       fill-rule="evenodd"
-       id="path330" />
-    <path
-       fill="#000000"
-       d="m 661.78699,67.583637 v -6.90625 h 1.0625 v 1.04687 q 0.4063,-0.73437 0.7344,-0.96875 0.3438,-0.23437 0.7656,-0.23437 0.5938,0 1.2032,0.375 l -0.4063,1.07812 q -0.4375,-0.25 -0.8594,-0.25 -0.3906,0 -0.7031,0.23438 -0.2969,0.23437 -0.4219,0.64062 -0.2031,0.625 -0.2031,1.35938 v 3.625 z m 7.0166,-1.04688 0.1719,1.03125 q -0.5,0.10938 -0.8907,0.10938 -0.6406,0 -1,-0.20313 -0.3437,-0.20312 -0.4843,-0.53125 -0.1407,-0.32812 -0.1407,-1.39062 v -3.96875 h -0.8593 v -0.90625 h 0.8593 v -1.71875 l 1.1719,-0.70313 v 2.42188 h 1.1719 v 0.90625 h -1.1719 v 4.04687 q 0,0.5 0.047,0.64063 0.062,0.14062 0.2031,0.23437 0.1407,0.0781 0.4063,0.0781 0.2031,0 0.5156,-0.0469 z m 5.8748,-1.17187 1.2031,0.14062 q -0.2812,1.0625 -1.0625,1.65625 -0.7656,0.57813 -1.9687,0.57813 -1.5156,0 -2.4063,-0.9375 -0.8906,-0.9375 -0.8906,-2.60938 0,-1.75 0.8906,-2.70312 0.9063,-0.96875 2.3438,-0.96875 1.3906,0 2.2656,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.1562 q 0.062,1.14062 0.6406,1.75 0.5781,0.59375 1.4375,0.59375 0.6562,0 1.1094,-0.32813 0.4531,-0.34375 0.7187,-1.07812 z m -3.8437,-1.90625 h 3.8593 q -0.078,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.4531,-0.6875 -0.8125,0 -1.3594,0.54688 -0.5468,0.53125 -0.6093,1.4375 z m 5.4437,6.78125 v -0.85938 h 7.7656 v 0.85938 z m 8.4906,-2.65625 v -6.90625 h 1.0625 v 0.98437 q 0.75,-1.14062 2.1875,-1.14062 0.625,0 1.1562,0.21875 0.5313,0.21875 0.7813,0.59375 0.2656,0.35937 0.375,0.85937 0.062,0.32813 0.062,1.14063 v 4.25 h -1.1719 v -4.20313 q 0,-0.71875 -0.1406,-1.0625 -0.1407,-0.35937 -0.4844,-0.5625 -0.3438,-0.21875 -0.8125,-0.21875 -0.75,0 -1.2969,0.46875 -0.5469,0.46875 -0.5469,1.79688 v 3.78125 z m 6.975,-3.45313 q 0,-1.92187 1.0781,-2.84375 0.8906,-0.76562 2.1719,-0.76562 1.4218,0 2.3281,0.9375 0.9062,0.92187 0.9062,2.57812 0,1.32813 -0.4062,2.09375 -0.3906,0.76563 -1.1563,1.1875 -0.7656,0.42188 -1.6718,0.42188 -1.4532,0 -2.3594,-0.92188 -0.8906,-0.9375 -0.8906,-2.6875 z m 1.2031,0 q 0,1.32813 0.5781,1.98438 0.5938,0.65625 1.4688,0.65625 0.875,0 1.4531,-0.65625 0.5781,-0.67188 0.5781,-2.03125 0,-1.28125 -0.5937,-1.9375 -0.5782,-0.65625 -1.4375,-0.65625 -0.875,0 -1.4688,0.65625 -0.5781,0.65625 -0.5781,1.98437 z m 11.1312,3.45313 v -0.875 q -0.6563,1.03125 -1.9375,1.03125 -0.8125,0 -1.5156,-0.45313 -0.6875,-0.45312 -1.0782,-1.26562 -0.375,-0.82813 -0.375,-1.89063 0,-1.03125 0.3438,-1.875 0.3437,-0.84375 1.0312,-1.28125 0.7032,-0.45312 1.5469,-0.45312 0.625,0 1.1094,0.26562 0.5,0.25 0.7969,0.67188 v -3.42188 h 1.1718 v 9.54688 z m -3.7031,-3.45313 q 0,1.32813 0.5625,1.98438 0.5625,0.65625 1.3281,0.65625 0.7656,0 1.2969,-0.625 0.5312,-0.625 0.5312,-1.90625 0,-1.42188 -0.5469,-2.07813 -0.5468,-0.67187 -1.3437,-0.67187 -0.7813,0 -1.3125,0.64062 -0.5156,0.625 -0.5156,2 z m 11.3656,1.23438 1.2031,0.14062 q -0.2813,1.0625 -1.0625,1.65625 -0.7656,0.57813 -1.9688,0.57813 -1.5156,0 -2.4062,-0.9375 -0.8906,-0.9375 -0.8906,-2.60938 0,-1.75 0.8906,-2.70312 0.9062,-0.96875 2.3437,-0.96875 1.3907,0 2.2657,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.1563 q 0.062,1.14062 0.6406,1.75 0.5782,0.59375 1.4375,0.59375 0.6563,0 1.1094,-0.32813 0.4531,-0.34375 0.7188,-1.07812 z m -3.8438,-1.90625 h 3.8594 q -0.078,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.4531,-0.6875 -0.8125,0 -1.3594,0.54688 -0.5469,0.53125 -0.6094,1.4375 z m 9.7874,0.67187 q 0,-1.92187 1.0781,-2.84375 0.8906,-0.76562 2.1719,-0.76562 1.4219,0 2.3281,0.9375 0.9063,0.92187 0.9063,2.57812 0,1.32813 -0.4063,2.09375 -0.3906,0.76563 -1.1562,1.1875 -0.7657,0.42188 -1.6719,0.42188 -1.4531,0 -2.3594,-0.92188 -0.8906,-0.9375 -0.8906,-2.6875 z m 1.2031,0 q 0,1.32813 0.5781,1.98438 0.5938,0.65625 1.4688,0.65625 0.875,0 1.4531,-0.65625 0.5781,-0.67188 0.5781,-2.03125 0,-1.28125 -0.5937,-1.9375 -0.5781,-0.65625 -1.4375,-0.65625 -0.875,0 -1.4688,0.65625 -0.5781,0.65625 -0.5781,1.98437 z m 7.725,3.45313 h -1.0781 v -9.54688 h 1.1718 v 3.40625 q 0.7344,-0.92187 1.8907,-0.92187 0.6406,0 1.2031,0.26562 0.5781,0.25 0.9375,0.71875 0.375,0.45313 0.5781,1.10938 0.2031,0.65625 0.2031,1.40625 0,1.78125 -0.875,2.75 -0.875,0.96875 -2.1093,0.96875 -1.2188,0 -1.9219,-1.01563 z m 0,-3.5 q 0,1.23437 0.3281,1.78125 0.5625,0.90625 1.5,0.90625 0.7656,0 1.3281,-0.65625 0.5625,-0.67188 0.5625,-2 0,-1.34375 -0.5468,-1.98438 -0.5313,-0.65625 -1.2969,-0.65625 -0.7656,0 -1.3281,0.67188 -0.5469,0.67187 -0.5469,1.9375 z m 6.3343,-4.6875 v -1.35938 h 1.1719 v 1.35938 z m -1.4843,10.875 0.2187,-1 q 0.3594,0.0937 0.5469,0.0937 0.3594,0 0.5312,-0.25 0.1875,-0.23438 0.1875,-1.1875 v -7.25 h 1.1719 v 7.28125 q 0,1.28125 -0.3281,1.78125 -0.4375,0.65625 -1.4063,0.65625 -0.4843,0 -0.9218,-0.125 z m 9.1798,-4.90625 1.2031,0.14062 q -0.2812,1.0625 -1.0625,1.65625 -0.7656,0.57813 -1.9687,0.57813 -1.5156,0 -2.4063,-0.9375 -0.8906,-0.9375 -0.8906,-2.60938 0,-1.75 0.8906,-2.70312 0.9063,-0.96875 2.3438,-0.96875 1.3906,0 2.2656,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.1562 q 0.062,1.14062 0.6406,1.75 0.5781,0.59375 1.4375,0.59375 0.6562,0 1.1094,-0.32813 0.4531,-0.34375 0.7187,-1.07812 z m -3.8437,-1.90625 h 3.8593 q -0.078,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.4531,-0.6875 -0.8125,0 -1.3594,0.54688 -0.5468,0.53125 -0.6093,1.4375 z m 11.0374,1.59375 1.1563,0.15625 q -0.1875,1.1875 -0.9688,1.85937 -0.7812,0.67188 -1.9218,0.67188 -1.4063,0 -2.2813,-0.92188 -0.8594,-0.9375 -0.8594,-2.65625 0,-1.125 0.375,-1.96875 0.375,-0.84375 1.125,-1.25 0.7657,-0.42187 1.6563,-0.42187 1.125,0 1.8437,0.57812 0.7188,0.5625 0.9219,1.60938 l -1.1406,0.17187 q -0.1719,-0.70312 -0.5938,-1.04687 -0.4062,-0.35938 -0.9843,-0.35938 -0.8907,0 -1.4532,0.64063 -0.5468,0.64062 -0.5468,2 0,1.40625 0.5312,2.03125 0.5469,0.625 1.4063,0.625 0.6875,0 1.1406,-0.42188 0.4687,-0.42187 0.5937,-1.29687 z m 4.711,1.48437 0.1719,1.03125 q -0.5,0.10938 -0.8907,0.10938 -0.6406,0 -1,-0.20313 -0.3437,-0.20312 -0.4843,-0.53125 -0.1407,-0.32812 -0.1407,-1.39062 v -3.96875 h -0.8593 v -0.90625 h 0.8593 v -1.71875 l 1.1719,-0.70313 v 2.42188 h 1.1719 v 0.90625 h -1.1719 v 4.04687 q 0,0.5 0.047,0.64063 0.062,0.14062 0.2031,0.23437 0.1407,0.0781 0.4063,0.0781 0.2031,0 0.5156,-0.0469 z m 4.8434,1.04688 v -6.90625 h 1.0469 v 0.96875 q 0.3281,-0.51563 0.8594,-0.8125 0.5469,-0.3125 1.2344,-0.3125 0.7812,0 1.2656,0.3125 0.4844,0.3125 0.6875,0.89062 0.8281,-1.20312 2.1406,-1.20312 1.0313,0 1.5781,0.57812 0.5625,0.5625 0.5625,1.73438 v 4.75 h -1.1718 v -4.35938 q 0,-0.70312 -0.125,-1 -0.1094,-0.3125 -0.4063,-0.5 -0.2969,-0.1875 -0.7031,-0.1875 -0.7188,0 -1.2031,0.48438 -0.4844,0.48437 -0.4844,1.54687 v 4.01563 h -1.1719 v -4.48438 q 0,-0.78125 -0.2969,-1.17187 -0.2812,-0.39063 -0.9218,-0.39063 -0.5,0 -0.9219,0.26563 -0.4219,0.25 -0.6094,0.75 -0.1875,0.5 -0.1875,1.45312 v 3.57813 z m 15.8369,-2.21875 1.2031,0.14062 q -0.2812,1.0625 -1.0625,1.65625 -0.7656,0.57813 -1.9687,0.57813 -1.5157,0 -2.4063,-0.9375 -0.8906,-0.9375 -0.8906,-2.60938 0,-1.75 0.8906,-2.70312 0.9063,-0.96875 2.3438,-0.96875 1.3906,0 2.2656,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.1563 q 0.062,1.14062 0.6407,1.75 0.5781,0.59375 1.4375,0.59375 0.6562,0 1.1093,-0.32813 0.4532,-0.34375 0.7188,-1.07812 z m -3.8438,-1.90625 h 3.8594 q -0.078,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.4531,-0.6875 -0.8125,0 -1.3594,0.54688 -0.5469,0.53125 -0.6094,1.4375 z m 6.5219,4.125 v -6.90625 h 1.0469 v 0.96875 q 0.3281,-0.51563 0.8593,-0.8125 0.5469,-0.3125 1.2344,-0.3125 0.7813,0 1.2656,0.3125 0.4844,0.3125 0.6875,0.89062 0.8282,-1.20312 2.1407,-1.20312 1.0312,0 1.5781,0.57812 0.5625,0.5625 0.5625,1.73438 v 4.75 h -1.1719 v -4.35938 q 0,-0.70312 -0.125,-1 -0.1094,-0.3125 -0.4062,-0.5 -0.2969,-0.1875 -0.7032,-0.1875 -0.7187,0 -1.2031,0.48438 -0.4844,0.48437 -0.4844,1.54687 v 4.01563 h -1.1718 v -4.48438 q 0,-0.78125 -0.2969,-1.17187 -0.2813,-0.39063 -0.9219,-0.39063 -0.5,0 -0.9219,0.26563 -0.4218,0.25 -0.6093,0.75 -0.1875,0.5 -0.1875,1.45312 v 3.57813 z m 10.6649,-3.45313 q 0,-1.92187 1.0781,-2.84375 0.8907,-0.76562 2.1719,-0.76562 1.4219,0 2.3281,0.9375 0.9063,0.92187 0.9063,2.57812 0,1.32813 -0.4063,2.09375 -0.3906,0.76563 -1.1562,1.1875 -0.7656,0.42188 -1.6719,0.42188 -1.4531,0 -2.3594,-0.92188 -0.8906,-0.9375 -0.8906,-2.6875 z m 1.2031,0 q 0,1.32813 0.5782,1.98438 0.5937,0.65625 1.4687,0.65625 0.875,0 1.4531,-0.65625 0.5782,-0.67188 0.5782,-2.03125 0,-1.28125 -0.5938,-1.9375 -0.5781,-0.65625 -1.4375,-0.65625 -0.875,0 -1.4687,0.65625 -0.5782,0.65625 -0.5782,1.98437 z m 6.6313,3.45313 v -6.90625 h 1.0625 v 1.04687 q 0.4062,-0.73437 0.7343,-0.96875 0.3438,-0.23437 0.7657,-0.23437 0.5937,0 1.2031,0.375 l -0.4063,1.07812 q -0.4375,-0.25 -0.8593,-0.25 -0.3907,0 -0.7032,0.23438 -0.2968,0.23437 -0.4218,0.64062 -0.2032,0.625 -0.2032,1.35938 v 3.625 z m 4.4071,2.65625 -0.125,-1.09375 q 0.375,0.10937 0.6562,0.10937 0.3906,0 0.625,-0.14062 0.2344,-0.125 0.3906,-0.35938 0.1094,-0.17187 0.3594,-0.875 0.031,-0.0937 0.1094,-0.28125 l -2.625,-6.92187 h 1.2656 l 1.4375,4 q 0.2813,0.76562 0.5,1.59375 0.2031,-0.79688 0.4688,-1.57813 l 1.4843,-4.01562 h 1.1719 l -2.625,7.01562 q -0.4219,1.14063 -0.6562,1.57813 -0.3125,0.57812 -0.7188,0.84375 -0.4062,0.28125 -0.9687,0.28125 -0.3282,0 -0.75,-0.15625 z m 10.3983,-2.65625 v -9.54688 h 1.1718 v 9.54688 z m 7.4923,-0.85938 q -0.6563,0.5625 -1.2656,0.79688 -0.5938,0.21875 -1.2813,0.21875 -1.1406,0 -1.75,-0.54688 -0.6094,-0.5625 -0.6094,-1.4375 0,-0.5 0.2188,-0.92187 0.2344,-0.42188 0.6094,-0.67188 0.375,-0.25 0.8437,-0.39062 0.3438,-0.0781 1.0469,-0.17188 1.4219,-0.17187 2.0937,-0.40625 0,-0.23437 0,-0.29687 0,-0.71875 -0.3281,-1.01563 -0.4531,-0.39062 -1.3437,-0.39062 -0.8125,0 -1.2188,0.29687 -0.3906,0.28125 -0.5781,1.01563 l -1.1406,-0.15625 q 0.1562,-0.73438 0.5156,-1.1875 0.3594,-0.45313 1.0312,-0.6875 0.6719,-0.25 1.5625,-0.25 0.8907,0 1.4375,0.20312 0.5625,0.20313 0.8125,0.53125 0.2657,0.3125 0.375,0.79688 0.047,0.29687 0.047,1.07812 v 1.5625 q 0,1.625 0.078,2.0625 0.078,0.4375 0.2969,0.82813 h -1.2187 q -0.1875,-0.35938 -0.2344,-0.85938 z m -0.094,-2.60937 q -0.6406,0.26562 -1.9219,0.4375 -0.7187,0.10937 -1.0156,0.25 -0.2969,0.125 -0.4688,0.375 -0.1562,0.25 -0.1562,0.54687 0,0.46875 0.3437,0.78125 0.3594,0.3125 1.0469,0.3125 0.6719,0 1.2031,-0.29687 0.5313,-0.29688 0.7813,-0.8125 0.1875,-0.39063 0.1875,-1.17188 z m 2.9437,6.125 -0.125,-1.09375 q 0.375,0.10937 0.6563,0.10937 0.3906,0 0.625,-0.14062 0.2343,-0.125 0.3906,-0.35938 0.1094,-0.17187 0.3594,-0.875 0.031,-0.0937 0.1093,-0.28125 l -2.625,-6.92187 h 1.2657 l 1.4375,4 q 0.2812,0.76562 0.5,1.59375 0.2031,-0.79688 0.4687,-1.57813 l 1.4844,-4.01562 h 1.1719 l -2.625,7.01562 q -0.4219,1.14063 -0.6563,1.57813 -0.3125,0.57812 -0.7187,0.84375 -0.4063,0.28125 -0.9688,0.28125 -0.3281,0 -0.75,-0.15625 z m 6.2735,-6.10938 q 0,-1.92187 1.0781,-2.84375 0.8906,-0.76562 2.1719,-0.76562 1.4218,0 2.3281,0.9375 0.9062,0.92187 0.9062,2.57812 0,1.32813 -0.4062,2.09375 -0.3906,0.76563 -1.1563,1.1875 -0.7656,0.42188 -1.6718,0.42188 -1.4532,0 -2.3594,-0.92188 -0.8906,-0.9375 -0.8906,-2.6875 z m 1.2031,0 q 0,1.32813 0.5781,1.98438 0.5938,0.65625 1.4688,0.65625 0.875,0 1.4531,-0.65625 0.5781,-0.67188 0.5781,-2.03125 0,-1.28125 -0.5937,-1.9375 -0.5782,-0.65625 -1.4375,-0.65625 -0.875,0 -1.4688,0.65625 -0.5781,0.65625 -0.5781,1.98437 z m 11.1781,3.45313 v -1.01563 q -0.8125,1.17188 -2.1875,1.17188 -0.6094,0 -1.1406,-0.23438 -0.5313,-0.23437 -0.7969,-0.57812 -0.25,-0.35938 -0.3594,-0.875 -0.062,-0.34375 -0.062,-1.09375 v -4.28125 h 1.1719 v 3.82812 q 0,0.92188 0.062,1.23438 0.1094,0.46875 0.4687,0.73437 0.3594,0.25 0.8907,0.25 0.5156,0 0.9843,-0.26562 0.4688,-0.26563 0.6563,-0.73438 0.1875,-0.46875 0.1875,-1.34375 v -3.70312 h 1.1719 v 6.90625 z m 5.4437,-1.04688 0.1719,1.03125 q -0.5,0.10938 -0.8906,0.10938 -0.6407,0 -1,-0.20313 -0.3438,-0.20312 -0.4844,-0.53125 -0.1406,-0.32812 -0.1406,-1.39062 v -3.96875 h -0.8594 v -0.90625 h 0.8594 v -1.71875 l 1.1718,-0.70313 v 2.42188 h 1.1719 v 0.90625 h -1.1719 v 4.04687 q 0,0.5 0.047,0.64063 0.062,0.14062 0.2032,0.23437 0.1406,0.0781 0.4062,0.0781 0.2031,0 0.5156,-0.0469 z"
-       fill-rule="nonzero"
-       id="path332"
-       style="fill:#008033" />
-    <path
-       fill="#000000"
-       fill-opacity="0"
-       d="m 816.20809,219.40832 c 7.1841,0 13.0079,2.83072 13.0079,6.3226 v 53.98471 c 0,3.49188 5.8238,6.3226 13.0078,6.3226 v 0 c -7.184,0 -13.0078,2.83072 -13.0078,6.3226 v 53.98471 0 c 0,3.49189 -5.8238,6.32261 -13.0079,6.32261 z"
-       fill-rule="evenodd"
-       id="path334" />
-    <path
-       fill="#000000"
-       fill-opacity="0"
-       d="m 816.20809,219.40832 c 7.1841,0 13.0079,2.83072 13.0079,6.3226 v 53.98471 c 0,3.49188 5.8238,6.3226 13.0078,6.3226 v 0 c -7.184,0 -13.0078,2.83072 -13.0078,6.3226 v 53.98471 0 c 0,3.49189 -5.8238,6.32261 -13.0079,6.32261"
-       fill-rule="evenodd"
-       id="path336" />
-    <path
-       stroke="#595959"
-       stroke-width="1"
-       stroke-linejoin="round"
-       stroke-linecap="butt"
-       d="m 816.20809,219.40832 c 7.1841,0 13.0079,2.83072 13.0079,6.3226 v 53.98471 c 0,3.49188 5.8238,6.3226 13.0078,6.3226 v 0 c -7.184,0 -13.0078,2.83072 -13.0078,6.3226 v 53.98471 0 c 0,3.49189 -5.8238,6.32261 -13.0079,6.32261"
-       fill-rule="evenodd"
-       id="path338"
-       style="fill:none" />
-    <path
-       fill="#000000"
-       fill-opacity="0"
-       d="m 823.16869,253.99886 h 99.4015 v 27.46457 h -99.4015 z"
-       fill-rule="evenodd"
-       id="path340" />
-    <path
-       fill="#000000"
-       d="m 832.96559,274.51885 v -6.21875 h 0.9375 v 0.875 q 0.6875,-1.01563 1.9844,-1.01563 0.5625,0 1.0312,0.20313 0.4844,0.20312 0.7188,0.53125 0.2343,0.32812 0.3281,0.76562 0.047,0.29688 0.047,1.03125 v 3.82813 h -1.0469 v -3.78125 q 0,-0.65625 -0.125,-0.96875 -0.125,-0.3125 -0.4375,-0.5 -0.3125,-0.20313 -0.7344,-0.20313 -0.6718,0 -1.1718,0.4375 -0.4844,0.42188 -0.4844,1.60938 v 3.40625 z m 7.6426,0 h -0.9844 v -8.59375 h 1.0625 v 3.0625 q 0.6719,-0.82813 1.7031,-0.82813 0.5781,0 1.0781,0.23438 0.5157,0.21875 0.8438,0.64062 0.3437,0.42188 0.5312,1.01563 0.1875,0.59375 0.1875,1.26562 0,1.59375 -0.7968,2.46875 -0.7969,0.875 -1.8907,0.875 -1.1093,0 -1.7343,-0.92187 z m -0.016,-3.15625 q 0,1.10937 0.3125,1.60937 0.5,0.8125 1.3437,0.8125 0.6875,0 1.1875,-0.59375 0.5157,-0.59375 0.5157,-1.79687 0,-1.21875 -0.4844,-1.79688 -0.4844,-0.57812 -1.1719,-0.57812 -0.6875,0 -1.2031,0.60937 -0.5,0.59375 -0.5,1.73438 z m 4.7363,5.54687 v -0.76562 h 7 v 0.76562 z m 11.9082,-4.39062 1.0938,0.125 q -0.25,0.95312 -0.9532,1.48437 -0.7031,0.53125 -1.7812,0.53125 -1.3594,0 -2.1719,-0.84375 -0.7969,-0.84375 -0.7969,-2.35937 0,-1.5625 0.8125,-2.42188 0.8125,-0.875 2.0938,-0.875 1.25,0 2.0312,0.84375 0.7969,0.84375 0.7969,2.39063 0,0.0937 0,0.28125 h -4.6406 q 0.062,1.03125 0.5781,1.57812 0.5156,0.53125 1.2969,0.53125 0.5781,0 0.9844,-0.29687 0.4218,-0.3125 0.6562,-0.96875 z m -3.4531,-1.70313 h 3.4687 q -0.062,-0.79687 -0.3906,-1.1875 -0.5156,-0.60937 -1.3125,-0.60937 -0.7344,0 -1.2344,0.48437 -0.4843,0.48438 -0.5312,1.3125 z m 9.9082,3.70313 v -0.78125 q -0.5938,0.92187 -1.7344,0.92187 -0.75,0 -1.375,-0.40625 -0.625,-0.42187 -0.9687,-1.15625 -0.3438,-0.73437 -0.3438,-1.6875 0,-0.92187 0.3125,-1.6875 0.3125,-0.76562 0.9375,-1.15625 0.625,-0.40625 1.3906,-0.40625 0.5625,0 1,0.23438 0.4375,0.23437 0.7188,0.60937 v -3.07812 h 1.0469 v 8.59375 z m -3.3281,-3.10938 q 0,1.20313 0.5,1.79688 0.5,0.57812 1.1875,0.57812 0.6875,0 1.1718,-0.5625 0.4844,-0.5625 0.4844,-1.71875 0,-1.28125 -0.5,-1.875 -0.4844,-0.59375 -1.2031,-0.59375 -0.7031,0 -1.1719,0.57813 -0.4687,0.5625 -0.4687,1.79687 z m 5.7675,3.625 1.0313,0.15625 q 0.062,0.46875 0.3594,0.6875 0.3906,0.29688 1.0625,0.29688 0.7343,0 1.125,-0.29688 0.4062,-0.29687 0.5468,-0.8125 0.094,-0.32812 0.078,-1.35937 -0.6875,0.8125 -1.7187,0.8125 -1.2813,0 -1.9844,-0.92188 -0.7031,-0.9375 -0.7031,-2.21875 0,-0.89062 0.3125,-1.64062 0.3281,-0.76563 0.9375,-1.17188 0.6093,-0.40625 1.4375,-0.40625 1.1093,0 1.8281,0.89063 v -0.75 h 0.9687 v 5.375 q 0,1.45312 -0.2968,2.0625 -0.2969,0.60937 -0.9375,0.95312 -0.6407,0.35938 -1.5782,0.35938 -1.1093,0 -1.7968,-0.5 -0.6875,-0.5 -0.6719,-1.51563 z m 0.875,-3.73437 q 0,1.21875 0.4844,1.78125 0.4844,0.5625 1.2188,0.5625 0.7343,0 1.2187,-0.5625 0.5,-0.5625 0.5,-1.75 0,-1.14063 -0.5156,-1.71875 -0.5,-0.57813 -1.2188,-0.57813 -0.7031,0 -1.2031,0.57813 -0.4844,0.5625 -0.4844,1.6875 z m 10.252,1.21875 1.0937,0.125 q -0.25,0.95312 -0.9531,1.48437 -0.7031,0.53125 -1.7812,0.53125 -1.3594,0 -2.1719,-0.84375 -0.7969,-0.84375 -0.7969,-2.35937 0,-1.5625 0.8125,-2.42188 0.8125,-0.875 2.0938,-0.875 1.25,0 2.0312,0.84375 0.7969,0.84375 0.7969,2.39063 0,0.0937 0,0.28125 h -4.6406 q 0.062,1.03125 0.5781,1.57812 0.5156,0.53125 1.2969,0.53125 0.5781,0 0.9843,-0.29687 0.4219,-0.3125 0.6563,-0.96875 z m -3.4531,-1.70313 h 3.4687 q -0.062,-0.79687 -0.3906,-1.1875 -0.5156,-0.60937 -1.3125,-0.60937 -0.7344,0 -1.2344,0.48437 -0.4844,0.48438 -0.5312,1.3125 z m 5.455,1.84375 1.0313,-0.15625 q 0.094,0.625 0.4844,0.95313 0.4062,0.32812 1.1406,0.32812 0.7187,0 1.0625,-0.28125 0.3594,-0.29687 0.3594,-0.70312 0,-0.35938 -0.3125,-0.5625 -0.2188,-0.14063 -1.0782,-0.35938 -1.1562,-0.29687 -1.6093,-0.5 -0.4375,-0.21875 -0.6719,-0.59375 -0.2344,-0.375 -0.2344,-0.84375 0,-0.40625 0.1875,-0.76562 0.1875,-0.35938 0.5156,-0.59375 0.25,-0.17188 0.6719,-0.29688 0.4219,-0.125 0.9219,-0.125 0.7187,0 1.2656,0.21875 0.5625,0.20313 0.8281,0.5625 0.2657,0.35938 0.3594,0.95313 l -1.0312,0.14062 q -0.062,-0.46875 -0.4063,-0.73437 -0.3281,-0.28125 -0.9531,-0.28125 -0.7188,0 -1.0313,0.25 -0.3125,0.23437 -0.3125,0.5625 0,0.20312 0.125,0.35937 0.1407,0.17188 0.4063,0.28125 0.1562,0.0625 0.9375,0.26563 1.125,0.3125 1.5625,0.5 0.4375,0.1875 0.6875,0.54687 0.25,0.35938 0.25,0.90625 0,0.53125 -0.3125,1 -0.2969,0.45313 -0.875,0.71875 -0.5781,0.25 -1.3125,0.25 -1.2188,0 -1.8594,-0.5 -0.625,-0.51562 -0.7969,-1.5 z"
-       fill-rule="nonzero"
-       id="path342" />
-    <path
-       stroke="#1155cc"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="M 360.61488,75.514867 V 322.89017"
-       fill-rule="nonzero"
-       id="path344" />
-    <path
-       stroke="#1155cc"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="M 521.53879,75.514867 V 322.89017"
-       fill-rule="nonzero"
-       id="path346" />
-    <path
-       stroke="#1155cc"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="M 360.11618,76.013557 H 522.03739"
-       fill-rule="nonzero"
-       id="path348" />
-    <path
-       stroke="#1155cc"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="M 360.11618,111.21041 H 522.03739"
-       fill-rule="nonzero"
-       id="path350" />
-    <path
-       stroke="#1155cc"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="M 360.11618,146.40726 H 522.03739"
-       fill-rule="nonzero"
-       id="path352" />
-    <path
-       stroke="#1155cc"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="M 360.11618,181.60412 H 522.03739"
-       fill-rule="nonzero"
-       id="path354" />
-    <path
-       stroke="#1155cc"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="M 360.11618,216.80095 H 522.03739"
-       fill-rule="nonzero"
-       id="path356" />
-    <path
-       stroke="#1155cc"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="M 360.11618,251.99782 H 522.03739"
-       fill-rule="nonzero"
-       id="path358" />
-    <path
-       stroke="#1155cc"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="M 360.11618,287.19466 H 522.03739"
-       fill-rule="nonzero"
-       id="path360" />
-    <path
-       stroke="#1155cc"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="M 360.11618,322.3915 H 522.03739"
-       fill-rule="nonzero"
-       id="path362" />
-    <path
-       fill="#000000"
-       d="m 381.0367,94.751057 1.20312,-0.10938 q 0.0781,0.71875 0.39063,1.1875 0.3125,0.45313 0.95312,0.73438 0.65625,0.28125 1.46875,0.28125 0.71875,0 1.26563,-0.21875 0.5625,-0.21875 0.82812,-0.57813 0.26563,-0.375 0.26563,-0.82812 0,-0.45313 -0.26563,-0.78125 -0.25,-0.32813 -0.84375,-0.5625 -0.39062,-0.15625 -1.70312,-0.46875 -1.3125,-0.3125 -1.84375,-0.59375 -0.67188,-0.35938 -1.01563,-0.89063 -0.32812,-0.53125 -0.32812,-1.1875 0,-0.71875 0.40625,-1.34375 0.40625,-0.625 1.1875,-0.95312 0.79687,-0.32813 1.76562,-0.32813 1.04688,0 1.85938,0.34375 0.8125,0.34375 1.25,1.01563 0.4375,0.65625 0.46875,1.48437 l -1.20313,0.0937 q -0.10937,-0.90625 -0.67187,-1.35937 -0.5625,-0.46875 -1.65625,-0.46875 -1.14063,0 -1.67188,0.42187 -0.51562,0.42188 -0.51562,1.01563 0,0.51562 0.35937,0.84375 0.375,0.32812 1.90625,0.6875 1.54688,0.34375 2.10938,0.59375 0.84375,0.39062 1.23437,0.98437 0.39063,0.57813 0.39063,1.35938 0,0.75 -0.4375,1.4375 -0.42188,0.67187 -1.25,1.04687 -0.8125,0.35938 -1.82813,0.35938 -1.29687,0 -2.17187,-0.375 -0.875,-0.375 -1.375,-1.125 -0.5,-0.76563 -0.53125,-1.71875 z m 8.73352,-0.39063 q 0,-1.92187 1.07813,-2.84375 0.89062,-0.76562 2.17187,-0.76562 1.42188,0 2.32813,0.9375 0.90625,0.92187 0.90625,2.57812 0,1.32813 -0.40625,2.09375 -0.39063,0.76563 -1.15625,1.1875 -0.76563,0.42188 -1.67188,0.42188 -1.45312,0 -2.35937,-0.92188 -0.89063,-0.9375 -0.89063,-2.6875 z m 1.20313,0 q 0,1.32813 0.57812,1.98438 0.59375,0.65625 1.46875,0.65625 0.875,0 1.45313,-0.65625 0.57812,-0.67188 0.57812,-2.03125 0,-1.28125 -0.59375,-1.9375 -0.57812,-0.65625 -1.4375,-0.65625 -0.875,0 -1.46875,0.65625 -0.57812,0.65625 -0.57812,1.98437 z m 11.1781,3.45313 v -1.01563 q -0.8125,1.17188 -2.1875,1.17188 -0.60938,0 -1.14063,-0.23438 -0.53125,-0.23437 -0.79687,-0.57812 -0.25,-0.35938 -0.35938,-0.875 -0.0625,-0.34375 -0.0625,-1.09375 v -4.28125 h 1.17188 v 3.82812 q 0,0.92188 0.0625,1.23438 0.10937,0.46875 0.46875,0.73437 0.35937,0.25 0.89062,0.25 0.51563,0 0.98438,-0.26562 0.46875,-0.26563 0.65625,-0.73438 0.1875,-0.46875 0.1875,-1.34375 v -3.70312 h 1.17187 v 6.90625 z m 2.8656,0 v -6.90625 h 1.0625 v 1.04687 q 0.40625,-0.73437 0.73437,-0.96875 0.34375,-0.23437 0.76563,-0.23437 0.59375,0 1.20312,0.375 l -0.40625,1.07812 q -0.4375,-0.25 -0.85937,-0.25 -0.39063,0 -0.70313,0.23438 -0.29687,0.23437 -0.42187,0.64062 -0.20313,0.625 -0.20313,1.35938 v 3.625 z m 8.9696,-2.53125 1.15625,0.15625 q -0.1875,1.1875 -0.96875,1.85937 -0.78125,0.67188 -1.92187,0.67188 -1.40625,0 -2.28125,-0.92188 -0.85938,-0.9375 -0.85938,-2.65625 0,-1.125 0.375,-1.96875 0.375,-0.84375 1.125,-1.25 0.76563,-0.42187 1.65625,-0.42187 1.125,0 1.84375,0.57812 0.71875,0.5625 0.92188,1.60938 l -1.14063,0.17187 q -0.17187,-0.70312 -0.59375,-1.04687 -0.40625,-0.35938 -0.98437,-0.35938 -0.89063,0 -1.45313,0.64063 -0.54687,0.64062 -0.54687,2 0,1.40625 0.53125,2.03125 0.54687,0.625 1.40625,0.625 0.6875,0 1.14062,-0.42188 0.46875,-0.42187 0.59375,-1.29687 z m 6.88281,0.3125 1.20313,0.14062 q -0.28125,1.0625 -1.0625,1.65625 -0.76563,0.57813 -1.96875,0.57813 -1.51563,0 -2.40625,-0.9375 -0.89063,-0.9375 -0.89063,-2.60938 0,-1.75 0.89063,-2.70312 0.90625,-0.96875 2.34375,-0.96875 1.39062,0 2.26562,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.15625 q 0.0625,1.14062 0.64063,1.75 0.57812,0.59375 1.4375,0.59375 0.65625,0 1.10937,-0.32813 0.45313,-0.34375 0.71875,-1.07812 z m -3.84375,-1.90625 h 3.85938 q -0.0781,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.45313,-0.6875 -0.8125,0 -1.35937,0.54688 -0.54688,0.53125 -0.60938,1.4375 z m 10.36548,4.125 v -9.54688 h 1.29688 l 5.01562,7.5 v -7.5 h 1.20313 v 9.54688 h -1.29688 l -5.01562,-7.5 v 7.5 z m 9.04703,-3.45313 q 0,-1.92187 1.07813,-2.84375 0.89062,-0.76562 2.17187,-0.76562 1.42188,0 2.32813,0.9375 0.90625,0.92187 0.90625,2.57812 0,1.32813 -0.40625,2.09375 -0.39063,0.76563 -1.15625,1.1875 -0.76563,0.42188 -1.67188,0.42188 -1.45312,0 -2.35937,-0.92188 -0.89063,-0.9375 -0.89063,-2.6875 z m 1.20313,0 q 0,1.32813 0.57812,1.98438 0.59375,0.65625 1.46875,0.65625 0.875,0 1.45313,-0.65625 0.57812,-0.67188 0.57812,-2.03125 0,-1.28125 -0.59375,-1.9375 -0.57812,-0.65625 -1.4375,-0.65625 -0.875,0 -1.46875,0.65625 -0.57812,0.65625 -0.57812,1.98437 z m 11.13122,3.45313 v -0.875 q -0.65625,1.03125 -1.9375,1.03125 -0.8125,0 -1.51562,-0.45313 -0.6875,-0.45312 -1.07813,-1.26562 -0.375,-0.82813 -0.375,-1.89063 0,-1.03125 0.34375,-1.875 0.34375,-0.84375 1.03125,-1.28125 0.70313,-0.45312 1.54688,-0.45312 0.625,0 1.10937,0.26562 0.5,0.25 0.79688,0.67188 v -3.42188 h 1.17187 v 9.54688 z m -3.70312,-3.45313 q 0,1.32813 0.5625,1.98438 0.5625,0.65625 1.32812,0.65625 0.76563,0 1.29688,-0.625 0.53125,-0.625 0.53125,-1.90625 0,-1.42188 -0.54688,-2.07813 -0.54687,-0.67187 -1.34375,-0.67187 -0.78125,0 -1.3125,0.64062 -0.51562,0.625 -0.51562,2 z m 11.3656,1.23438 1.20312,0.14062 q -0.28125,1.0625 -1.0625,1.65625 -0.76562,0.57813 -1.96875,0.57813 -1.51562,0 -2.40625,-0.9375 -0.89062,-0.9375 -0.89062,-2.60938 0,-1.75 0.89062,-2.70312 0.90625,-0.96875 2.34375,-0.96875 1.39063,0 2.26563,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.15625 q 0.0625,1.14062 0.64062,1.75 0.57813,0.59375 1.4375,0.59375 0.65625,0 1.10938,-0.32813 0.45312,-0.34375 0.71875,-1.07812 z m -3.84375,-1.90625 h 3.85937 q -0.0781,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.45312,-0.6875 -0.8125,0 -1.35938,0.54688 -0.54687,0.53125 -0.60937,1.4375 z m 6.19372,-0.57813 q 0,-1.6875 0.34375,-2.71875 0.35938,-1.03125 1.04688,-1.59375 0.6875,-0.5625 1.71875,-0.5625 0.78125,0 1.35937,0.3125 0.57813,0.29688 0.95313,0.89063 0.375,0.57812 0.59375,1.42187 0.21875,0.82813 0.21875,2.25 0,1.67188 -0.35938,2.70313 -0.34375,1.03125 -1.03125,1.59375 -0.67187,0.5625 -1.73437,0.5625 -1.375,0 -2.15625,-0.98438 -0.95313,-1.1875 -0.95313,-3.875 z m 1.20313,0 q 0,2.34375 0.54687,3.125 0.5625,0.78125 1.35938,0.78125 0.8125,0 1.35937,-0.78125 0.5625,-0.78125 0.5625,-3.125 0,-2.35937 -0.5625,-3.125 -0.54687,-0.78125 -1.35937,-0.78125 -0.8125,0 -1.29688,0.6875 -0.60937,0.875 -0.60937,3.21875 z m 9.80295,1.25 q 0,-1.92187 1.07812,-2.84375 0.89063,-0.76562 2.17188,-0.76562 1.42187,0 2.32812,0.9375 0.90625,0.92187 0.90625,2.57812 0,1.32813 -0.40625,2.09375 -0.39062,0.76563 -1.15625,1.1875 -0.76562,0.42188 -1.67187,0.42188 -1.45313,0 -2.35938,-0.92188 -0.89062,-0.9375 -0.89062,-2.6875 z m 1.20312,0 q 0,1.32813 0.57813,1.98438 0.59375,0.65625 1.46875,0.65625 0.875,0 1.45312,-0.65625 0.57813,-0.67188 0.57813,-2.03125 0,-1.28125 -0.59375,-1.9375 -0.57813,-0.65625 -1.4375,-0.65625 -0.875,0 -1.46875,0.65625 -0.57813,0.65625 -0.57813,1.98437 z m 6.9281,3.45313 v -6 h -1.03125 v -0.90625 h 1.03125 v -0.73438 q 0,-0.70312 0.125,-1.04687 0.17188,-0.45313 0.59375,-0.73438 0.42188,-0.28125 1.20313,-0.28125 0.48437,0 1.09375,0.10938 l -0.1875,1.03125 q -0.35938,-0.0625 -0.6875,-0.0625 -0.53125,0 -0.75,0.23437 -0.21875,0.21875 -0.21875,0.84375 v 0.64063 h 1.34375 v 0.90625 h -1.34375 v 6 z m 3.4621,0 v -6 h -1.03125 v -0.90625 h 1.03125 v -0.73438 q 0,-0.70312 0.125,-1.04687 0.17187,-0.45313 0.59375,-0.73438 0.42187,-0.28125 1.20312,-0.28125 0.48438,0 1.09375,0.10938 l -0.1875,1.03125 q -0.35937,-0.0625 -0.6875,-0.0625 -0.53125,0 -0.75,0.23437 -0.21875,0.21875 -0.21875,0.84375 v 0.64063 h 1.34375 v 0.90625 h -1.34375 v 6 z m 2.953,-2.0625 1.15625,-0.1875 q 0.10938,0.70312 0.54688,1.07812 0.45312,0.35938 1.25,0.35938 0.8125,0 1.20312,-0.32813 0.39063,-0.32812 0.39063,-0.76562 0,-0.39063 -0.35938,-0.625 -0.23437,-0.15625 -1.1875,-0.39063 -1.29687,-0.32812 -1.79687,-0.5625 -0.48438,-0.25 -0.75,-0.65625 -0.25,-0.42187 -0.25,-0.9375 0,-0.45312 0.20312,-0.84375 0.21875,-0.40625 0.57813,-0.67187 0.28125,-0.1875 0.75,-0.32813 0.46875,-0.14062 1.01562,-0.14062 0.8125,0 1.42188,0.23437 0.60937,0.23438 0.90625,0.64063 0.29687,0.39062 0.40625,1.0625 l -1.14063,0.15625 q -0.0781,-0.53125 -0.45312,-0.82813 -0.375,-0.3125 -1.0625,-0.3125 -0.8125,0 -1.15625,0.26563 -0.34375,0.26562 -0.34375,0.625 0,0.23437 0.14062,0.42187 0.15625,0.1875 0.45313,0.3125 0.17187,0.0625 1.03125,0.29688 1.25,0.32812 1.73437,0.54687 0.5,0.20313 0.78125,0.60938 0.28125,0.40625 0.28125,1 0,0.59375 -0.34375,1.10937 -0.34375,0.51563 -1,0.79688 -0.64062,0.28125 -1.45312,0.28125 -1.34375,0 -2.04688,-0.5625 -0.70312,-0.5625 -0.90625,-1.65625 z m 11.86719,-0.15625 1.20312,0.14062 q -0.28125,1.0625 -1.0625,1.65625 -0.76562,0.57813 -1.96875,0.57813 -1.51562,0 -2.40625,-0.9375 -0.89062,-0.9375 -0.89062,-2.60938 0,-1.75 0.89062,-2.70312 0.90625,-0.96875 2.34375,-0.96875 1.39063,0 2.26563,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.15625 q 0.0625,1.14062 0.64062,1.75 0.57813,0.59375 1.4375,0.59375 0.65625,0 1.10938,-0.32813 0.45312,-0.34375 0.71875,-1.07812 z m -3.84375,-1.90625 h 3.85937 q -0.0781,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.45312,-0.6875 -0.8125,0 -1.35938,0.54688 -0.54687,0.53125 -0.60937,1.4375 z m 9.08435,3.07812 0.17188,1.03125 q -0.5,0.10938 -0.89063,0.10938 -0.64062,0 -1,-0.20313 -0.34375,-0.20312 -0.48437,-0.53125 -0.14063,-0.32812 -0.14063,-1.39062 v -3.96875 h -0.85937 v -0.90625 h 0.85937 v -1.71875 l 1.17188,-0.70313 v 2.42188 h 1.17187 v 0.90625 h -1.17187 v 4.04687 q 0,0.5 0.0469,0.64063 0.0625,0.14062 0.20313,0.23437 0.14062,0.0781 0.40625,0.0781 0.20312,0 0.51562,-0.0469 z"
-       fill-rule="nonzero"
-       id="path364" />
-    <path
-       fill="#000000"
-       d="m 381.0367,129.94791 1.20312,-0.10938 q 0.0781,0.71875 0.39063,1.1875 0.3125,0.45313 0.95312,0.73438 0.65625,0.28125 1.46875,0.28125 0.71875,0 1.26563,-0.21875 0.5625,-0.21875 0.82812,-0.57813 0.26563,-0.375 0.26563,-0.82812 0,-0.45313 -0.26563,-0.78125 -0.25,-0.32813 -0.84375,-0.5625 -0.39062,-0.15625 -1.70312,-0.46875 -1.3125,-0.3125 -1.84375,-0.59375 -0.67188,-0.35938 -1.01563,-0.89063 -0.32812,-0.53125 -0.32812,-1.1875 0,-0.71875 0.40625,-1.34375 0.40625,-0.625 1.1875,-0.95312 0.79687,-0.32813 1.76562,-0.32813 1.04688,0 1.85938,0.34375 0.8125,0.34375 1.25,1.01563 0.4375,0.65625 0.46875,1.48437 l -1.20313,0.0937 q -0.10937,-0.90625 -0.67187,-1.35937 -0.5625,-0.46875 -1.65625,-0.46875 -1.14063,0 -1.67188,0.42187 -0.51562,0.42188 -0.51562,1.01563 0,0.51562 0.35937,0.84375 0.375,0.32812 1.90625,0.6875 1.54688,0.34375 2.10938,0.59375 0.84375,0.39062 1.23437,0.98437 0.39063,0.57813 0.39063,1.35938 0,0.75 -0.4375,1.4375 -0.42188,0.67187 -1.25,1.04687 -0.8125,0.35938 -1.82813,0.35938 -1.29687,0 -2.17187,-0.375 -0.875,-0.375 -1.375,-1.125 -0.5,-0.76563 -0.53125,-1.71875 z m 8.73352,-0.39063 q 0,-1.92187 1.07813,-2.84375 0.89062,-0.76562 2.17187,-0.76562 1.42188,0 2.32813,0.9375 0.90625,0.92187 0.90625,2.57812 0,1.32813 -0.40625,2.09375 -0.39063,0.76563 -1.15625,1.1875 -0.76563,0.42188 -1.67188,0.42188 -1.45312,0 -2.35937,-0.92188 -0.89063,-0.9375 -0.89063,-2.6875 z m 1.20313,0 q 0,1.32813 0.57812,1.98438 0.59375,0.65625 1.46875,0.65625 0.875,0 1.45313,-0.65625 0.57812,-0.67188 0.57812,-2.03125 0,-1.28125 -0.59375,-1.9375 -0.57812,-0.65625 -1.4375,-0.65625 -0.875,0 -1.46875,0.65625 -0.57812,0.65625 -0.57812,1.98437 z m 11.1781,3.45313 v -1.01563 q -0.8125,1.17188 -2.1875,1.17188 -0.60938,0 -1.14063,-0.23438 -0.53125,-0.23437 -0.79687,-0.57812 -0.25,-0.35938 -0.35938,-0.875 -0.0625,-0.34375 -0.0625,-1.09375 v -4.28125 h 1.17188 v 3.82812 q 0,0.92188 0.0625,1.23438 0.10937,0.46875 0.46875,0.73437 0.35937,0.25 0.89062,0.25 0.51563,0 0.98438,-0.26562 0.46875,-0.26563 0.65625,-0.73438 0.1875,-0.46875 0.1875,-1.34375 v -3.70312 h 1.17187 v 6.90625 z m 2.8656,0 v -6.90625 h 1.0625 v 1.04687 q 0.40625,-0.73437 0.73437,-0.96875 0.34375,-0.23437 0.76563,-0.23437 0.59375,0 1.20312,0.375 l -0.40625,1.07812 q -0.4375,-0.25 -0.85937,-0.25 -0.39063,0 -0.70313,0.23438 -0.29687,0.23437 -0.42187,0.64062 -0.20313,0.625 -0.20313,1.35938 v 3.625 z m 8.9696,-2.53125 1.15625,0.15625 q -0.1875,1.1875 -0.96875,1.85937 -0.78125,0.67188 -1.92187,0.67188 -1.40625,0 -2.28125,-0.92188 -0.85938,-0.9375 -0.85938,-2.65625 0,-1.125 0.375,-1.96875 0.375,-0.84375 1.125,-1.25 0.76563,-0.42187 1.65625,-0.42187 1.125,0 1.84375,0.57812 0.71875,0.5625 0.92188,1.60938 l -1.14063,0.17187 q -0.17187,-0.70312 -0.59375,-1.04687 -0.40625,-0.35938 -0.98437,-0.35938 -0.89063,0 -1.45313,0.64063 -0.54687,0.64062 -0.54687,2 0,1.40625 0.53125,2.03125 0.54687,0.625 1.40625,0.625 0.6875,0 1.14062,-0.42188 0.46875,-0.42187 0.59375,-1.29687 z m 6.88281,0.3125 1.20313,0.14062 q -0.28125,1.0625 -1.0625,1.65625 -0.76563,0.57813 -1.96875,0.57813 -1.51563,0 -2.40625,-0.9375 -0.89063,-0.9375 -0.89063,-2.60938 0,-1.75 0.89063,-2.70312 0.90625,-0.96875 2.34375,-0.96875 1.39062,0 2.26562,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.15625 q 0.0625,1.14062 0.64063,1.75 0.57812,0.59375 1.4375,0.59375 0.65625,0 1.10937,-0.32813 0.45313,-0.34375 0.71875,-1.07812 z m -3.84375,-1.90625 h 3.85938 q -0.0781,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.45313,-0.6875 -0.8125,0 -1.35937,0.54688 -0.54688,0.53125 -0.60938,1.4375 z m 10.36548,4.125 v -9.54688 h 1.29688 l 5.01562,7.5 v -7.5 h 1.20313 v 9.54688 h -1.29688 l -5.01562,-7.5 v 7.5 z m 9.04703,-3.45313 q 0,-1.92187 1.07813,-2.84375 0.89062,-0.76562 2.17187,-0.76562 1.42188,0 2.32813,0.9375 0.90625,0.92187 0.90625,2.57812 0,1.32813 -0.40625,2.09375 -0.39063,0.76563 -1.15625,1.1875 -0.76563,0.42188 -1.67188,0.42188 -1.45312,0 -2.35937,-0.92188 -0.89063,-0.9375 -0.89063,-2.6875 z m 1.20313,0 q 0,1.32813 0.57812,1.98438 0.59375,0.65625 1.46875,0.65625 0.875,0 1.45313,-0.65625 0.57812,-0.67188 0.57812,-2.03125 0,-1.28125 -0.59375,-1.9375 -0.57812,-0.65625 -1.4375,-0.65625 -0.875,0 -1.46875,0.65625 -0.57812,0.65625 -0.57812,1.98437 z m 11.13122,3.45313 v -0.875 q -0.65625,1.03125 -1.9375,1.03125 -0.8125,0 -1.51562,-0.45313 -0.6875,-0.45312 -1.07813,-1.26562 -0.375,-0.82813 -0.375,-1.89063 0,-1.03125 0.34375,-1.875 0.34375,-0.84375 1.03125,-1.28125 0.70313,-0.45312 1.54688,-0.45312 0.625,0 1.10937,0.26562 0.5,0.25 0.79688,0.67188 v -3.42188 h 1.17187 v 9.54688 z m -3.70312,-3.45313 q 0,1.32813 0.5625,1.98438 0.5625,0.65625 1.32812,0.65625 0.76563,0 1.29688,-0.625 0.53125,-0.625 0.53125,-1.90625 0,-1.42188 -0.54688,-2.07813 -0.54687,-0.67187 -1.34375,-0.67187 -0.78125,0 -1.3125,0.64062 -0.51562,0.625 -0.51562,2 z m 11.3656,1.23438 1.20312,0.14062 q -0.28125,1.0625 -1.0625,1.65625 -0.76562,0.57813 -1.96875,0.57813 -1.51562,0 -2.40625,-0.9375 -0.89062,-0.9375 -0.89062,-2.60938 0,-1.75 0.89062,-2.70312 0.90625,-0.96875 2.34375,-0.96875 1.39063,0 2.26563,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.15625 q 0.0625,1.14062 0.64062,1.75 0.57813,0.59375 1.4375,0.59375 0.65625,0 1.10938,-0.32813 0.45312,-0.34375 0.71875,-1.07812 z m -3.84375,-1.90625 h 3.85937 q -0.0781,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.45312,-0.6875 -0.8125,0 -1.35938,0.54688 -0.54687,0.53125 -0.60937,1.4375 z m 10.6156,4.125 h -1.17188 v -7.46875 q -0.42187,0.40625 -1.10937,0.8125 -0.6875,0.40625 -1.23438,0.60937 v -1.14062 q 0.98438,-0.45313 1.71875,-1.10938 0.73438,-0.67187 1.03125,-1.28125 h 0.76563 z m 6.5842,-3.45313 q 0,-1.92187 1.07812,-2.84375 0.89063,-0.76562 2.17188,-0.76562 1.42187,0 2.32812,0.9375 0.90625,0.92187 0.90625,2.57812 0,1.32813 -0.40625,2.09375 -0.39062,0.76563 -1.15625,1.1875 -0.76562,0.42188 -1.67187,0.42188 -1.45313,0 -2.35938,-0.92188 -0.89062,-0.9375 -0.89062,-2.6875 z m 1.20312,0 q 0,1.32813 0.57813,1.98438 0.59375,0.65625 1.46875,0.65625 0.875,0 1.45312,-0.65625 0.57813,-0.67188 0.57813,-2.03125 0,-1.28125 -0.59375,-1.9375 -0.57813,-0.65625 -1.4375,-0.65625 -0.875,0 -1.46875,0.65625 -0.57813,0.65625 -0.57813,1.98437 z m 6.9281,3.45313 v -6 h -1.03125 v -0.90625 h 1.03125 v -0.73438 q 0,-0.70312 0.125,-1.04687 0.17188,-0.45313 0.59375,-0.73438 0.42188,-0.28125 1.20313,-0.28125 0.48437,0 1.09375,0.10938 l -0.1875,1.03125 q -0.35938,-0.0625 -0.6875,-0.0625 -0.53125,0 -0.75,0.23437 -0.21875,0.21875 -0.21875,0.84375 v 0.64063 h 1.34375 v 0.90625 h -1.34375 v 6 z m 3.4621,0 v -6 h -1.03125 v -0.90625 h 1.03125 v -0.73438 q 0,-0.70312 0.125,-1.04687 0.17187,-0.45313 0.59375,-0.73438 0.42187,-0.28125 1.20312,-0.28125 0.48438,0 1.09375,0.10938 l -0.1875,1.03125 q -0.35937,-0.0625 -0.6875,-0.0625 -0.53125,0 -0.75,0.23437 -0.21875,0.21875 -0.21875,0.84375 v 0.64063 h 1.34375 v 0.90625 h -1.34375 v 6 z m 2.953,-2.0625 1.15625,-0.1875 q 0.10938,0.70312 0.54688,1.07812 0.45312,0.35938 1.25,0.35938 0.8125,0 1.20312,-0.32813 0.39063,-0.32812 0.39063,-0.76562 0,-0.39063 -0.35938,-0.625 -0.23437,-0.15625 -1.1875,-0.39063 -1.29687,-0.32812 -1.79687,-0.5625 -0.48438,-0.25 -0.75,-0.65625 -0.25,-0.42187 -0.25,-0.9375 0,-0.45312 0.20312,-0.84375 0.21875,-0.40625 0.57813,-0.67187 0.28125,-0.1875 0.75,-0.32813 0.46875,-0.14062 1.01562,-0.14062 0.8125,0 1.42188,0.23437 0.60937,0.23438 0.90625,0.64063 0.29687,0.39062 0.40625,1.0625 l -1.14063,0.15625 q -0.0781,-0.53125 -0.45312,-0.82813 -0.375,-0.3125 -1.0625,-0.3125 -0.8125,0 -1.15625,0.26563 -0.34375,0.26562 -0.34375,0.625 0,0.23437 0.14062,0.42187 0.15625,0.1875 0.45313,0.3125 0.17187,0.0625 1.03125,0.29688 1.25,0.32812 1.73437,0.54687 0.5,0.20313 0.78125,0.60938 0.28125,0.40625 0.28125,1 0,0.59375 -0.34375,1.10937 -0.34375,0.51563 -1,0.79688 -0.64062,0.28125 -1.45312,0.28125 -1.34375,0 -2.04688,-0.5625 -0.70312,-0.5625 -0.90625,-1.65625 z m 11.86719,-0.15625 1.20312,0.14062 q -0.28125,1.0625 -1.0625,1.65625 -0.76562,0.57813 -1.96875,0.57813 -1.51562,0 -2.40625,-0.9375 -0.89062,-0.9375 -0.89062,-2.60938 0,-1.75 0.89062,-2.70312 0.90625,-0.96875 2.34375,-0.96875 1.39063,0 2.26563,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.15625 q 0.0625,1.14062 0.64062,1.75 0.57813,0.59375 1.4375,0.59375 0.65625,0 1.10938,-0.32813 0.45312,-0.34375 0.71875,-1.07812 z m -3.84375,-1.90625 h 3.85937 q -0.0781,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.45312,-0.6875 -0.8125,0 -1.35938,0.54688 -0.54687,0.53125 -0.60937,1.4375 z m 9.08435,3.07812 0.17188,1.03125 q -0.5,0.10938 -0.89063,0.10938 -0.64062,0 -1,-0.20313 -0.34375,-0.20312 -0.48437,-0.53125 -0.14063,-0.32812 -0.14063,-1.39062 v -3.96875 h -0.85937 v -0.90625 h 0.85937 v -1.71875 l 1.17188,-0.70313 v 2.42188 h 1.17187 v 0.90625 h -1.17187 v 4.04687 q 0,0.5 0.0469,0.64063 0.0625,0.14062 0.20313,0.23437 0.14062,0.0781 0.40625,0.0781 0.20312,0 0.51562,-0.0469 z"
-       fill-rule="nonzero"
-       id="path366" />
-    <path
-       fill="#000000"
-       d="m 378.07888,165.14477 1.20313,-0.10938 q 0.0781,0.71875 0.39062,1.1875 0.3125,0.45313 0.95313,0.73438 0.65625,0.28125 1.46875,0.28125 0.71875,0 1.26562,-0.21875 0.5625,-0.21875 0.82813,-0.57813 0.26562,-0.375 0.26562,-0.82812 0,-0.45313 -0.26562,-0.78125 -0.25,-0.32813 -0.84375,-0.5625 -0.39063,-0.15625 -1.70313,-0.46875 -1.3125,-0.3125 -1.84375,-0.59375 -0.67187,-0.35938 -1.01562,-0.89063 -0.32813,-0.53125 -0.32813,-1.1875 0,-0.71875 0.40625,-1.34375 0.40625,-0.625 1.1875,-0.95312 0.79688,-0.32813 1.76563,-0.32813 1.04687,0 1.85937,0.34375 0.8125,0.34375 1.25,1.01563 0.4375,0.65625 0.46875,1.48437 l -1.20312,0.0937 q -0.10938,-0.90625 -0.67188,-1.35937 -0.5625,-0.46875 -1.65625,-0.46875 -1.14062,0 -1.67187,0.42187 -0.51563,0.42188 -0.51563,1.01563 0,0.51562 0.35938,0.84375 0.375,0.32812 1.90625,0.6875 1.54687,0.34375 2.10937,0.59375 0.84375,0.39062 1.23438,0.98437 0.39062,0.57813 0.39062,1.35938 0,0.75 -0.4375,1.4375 -0.42187,0.67187 -1.25,1.04687 -0.8125,0.35938 -1.82812,0.35938 -1.29688,0 -2.17188,-0.375 -0.875,-0.375 -1.375,-1.125 -0.5,-0.76563 -0.53125,-1.71875 z m 8.73352,-0.39063 q 0,-1.92187 1.07813,-2.84375 0.89062,-0.76562 2.17187,-0.76562 1.42188,0 2.32813,0.9375 0.90625,0.92187 0.90625,2.57812 0,1.32813 -0.40625,2.09375 -0.39063,0.76563 -1.15625,1.1875 -0.76563,0.42188 -1.67188,0.42188 -1.45312,0 -2.35937,-0.92188 -0.89063,-0.9375 -0.89063,-2.6875 z m 1.20313,0 q 0,1.32813 0.57812,1.98438 0.59375,0.65625 1.46875,0.65625 0.875,0 1.45313,-0.65625 0.57812,-0.67188 0.57812,-2.03125 0,-1.28125 -0.59375,-1.9375 -0.57812,-0.65625 -1.4375,-0.65625 -0.875,0 -1.46875,0.65625 -0.57812,0.65625 -0.57812,1.98437 z m 11.1781,3.45313 v -1.01563 q -0.8125,1.17188 -2.1875,1.17188 -0.60938,0 -1.14063,-0.23438 -0.53125,-0.23437 -0.79687,-0.57812 -0.25,-0.35938 -0.35938,-0.875 -0.0625,-0.34375 -0.0625,-1.09375 v -4.28125 h 1.17188 v 3.82812 q 0,0.92188 0.0625,1.23438 0.10937,0.46875 0.46875,0.73437 0.35937,0.25 0.89062,0.25 0.51563,0 0.98438,-0.26562 0.46875,-0.26563 0.65625,-0.73438 0.1875,-0.46875 0.1875,-1.34375 v -3.70312 h 1.17187 v 6.90625 z m 2.8656,0 v -6.90625 h 1.0625 v 1.04687 q 0.40625,-0.73437 0.73437,-0.96875 0.34375,-0.23437 0.76563,-0.23437 0.59375,0 1.20312,0.375 l -0.40625,1.07812 q -0.4375,-0.25 -0.85937,-0.25 -0.39063,0 -0.70313,0.23438 -0.29687,0.23437 -0.42187,0.64062 -0.20313,0.625 -0.20313,1.35938 v 3.625 z m 8.9696,-2.53125 1.15625,0.15625 q -0.1875,1.1875 -0.96875,1.85937 -0.78125,0.67188 -1.92187,0.67188 -1.40625,0 -2.28125,-0.92188 -0.85938,-0.9375 -0.85938,-2.65625 0,-1.125 0.375,-1.96875 0.375,-0.84375 1.125,-1.25 0.76563,-0.42187 1.65625,-0.42187 1.125,0 1.84375,0.57812 0.71875,0.5625 0.92188,1.60938 l -1.14063,0.17187 q -0.17187,-0.70312 -0.59375,-1.04687 -0.40625,-0.35938 -0.98437,-0.35938 -0.89063,0 -1.45313,0.64063 -0.54687,0.64062 -0.54687,2 0,1.40625 0.53125,2.03125 0.54687,0.625 1.40625,0.625 0.6875,0 1.14062,-0.42188 0.46875,-0.42187 0.59375,-1.29687 z m 6.88281,0.3125 1.20313,0.14062 q -0.28125,1.0625 -1.0625,1.65625 -0.76563,0.57813 -1.96875,0.57813 -1.51563,0 -2.40625,-0.9375 -0.89063,-0.9375 -0.89063,-2.60938 0,-1.75 0.89063,-2.70312 0.90625,-0.96875 2.34375,-0.96875 1.39062,0 2.26562,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.15625 q 0.0625,1.14062 0.64063,1.75 0.57812,0.59375 1.4375,0.59375 0.65625,0 1.10937,-0.32813 0.45313,-0.34375 0.71875,-1.07812 z m -3.84375,-1.90625 h 3.85938 q -0.0781,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.45313,-0.6875 -0.8125,0 -1.35937,0.54688 -0.54688,0.53125 -0.60938,1.4375 z m 10.36548,4.125 v -9.54688 h 1.29688 l 5.01562,7.5 v -7.5 h 1.20313 v 9.54688 h -1.29688 l -5.01562,-7.5 v 7.5 z m 9.04703,-3.45313 q 0,-1.92187 1.07813,-2.84375 0.89062,-0.76562 2.17187,-0.76562 1.42188,0 2.32813,0.9375 0.90625,0.92187 0.90625,2.57812 0,1.32813 -0.40625,2.09375 -0.39063,0.76563 -1.15625,1.1875 -0.76563,0.42188 -1.67188,0.42188 -1.45312,0 -2.35937,-0.92188 -0.89063,-0.9375 -0.89063,-2.6875 z m 1.20313,0 q 0,1.32813 0.57812,1.98438 0.59375,0.65625 1.46875,0.65625 0.875,0 1.45313,-0.65625 0.57812,-0.67188 0.57812,-2.03125 0,-1.28125 -0.59375,-1.9375 -0.57812,-0.65625 -1.4375,-0.65625 -0.875,0 -1.46875,0.65625 -0.57812,0.65625 -0.57812,1.98437 z m 11.13122,3.45313 v -0.875 q -0.65625,1.03125 -1.9375,1.03125 -0.8125,0 -1.51562,-0.45313 -0.6875,-0.45312 -1.07813,-1.26562 -0.375,-0.82813 -0.375,-1.89063 0,-1.03125 0.34375,-1.875 0.34375,-0.84375 1.03125,-1.28125 0.70313,-0.45312 1.54688,-0.45312 0.625,0 1.10937,0.26562 0.5,0.25 0.79688,0.67188 v -3.42188 h 1.17187 v 9.54688 z m -3.70312,-3.45313 q 0,1.32813 0.5625,1.98438 0.5625,0.65625 1.32812,0.65625 0.76563,0 1.29688,-0.625 0.53125,-0.625 0.53125,-1.90625 0,-1.42188 -0.54688,-2.07813 -0.54687,-0.67187 -1.34375,-0.67187 -0.78125,0 -1.3125,0.64062 -0.51562,0.625 -0.51562,2 z m 11.3656,1.23438 1.20312,0.14062 q -0.28125,1.0625 -1.0625,1.65625 -0.76562,0.57813 -1.96875,0.57813 -1.51562,0 -2.40625,-0.9375 -0.89062,-0.9375 -0.89062,-2.60938 0,-1.75 0.89062,-2.70312 0.90625,-0.96875 2.34375,-0.96875 1.39063,0 2.26563,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.15625 q 0.0625,1.14062 0.64062,1.75 0.57813,0.59375 1.4375,0.59375 0.65625,0 1.10938,-0.32813 0.45312,-0.34375 0.71875,-1.07812 z m -3.84375,-1.90625 h 3.85937 q -0.0781,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.45312,-0.6875 -0.8125,0 -1.35938,0.54688 -0.54687,0.53125 -0.60937,1.4375 z m 10.36545,4.125 v -9.54688 h 1.29687 l 5.01563,7.5 v -7.5 h 1.20312 v 9.54688 h -1.29687 l -5.01563,-7.5 v 7.5 z m 12.75003,-3.45313 q 0,-1.92187 1.07812,-2.84375 0.89063,-0.76562 2.17188,-0.76562 1.42187,0 2.32812,0.9375 0.90625,0.92187 0.90625,2.57812 0,1.32813 -0.40625,2.09375 -0.39062,0.76563 -1.15625,1.1875 -0.76562,0.42188 -1.67187,0.42188 -1.45313,0 -2.35938,-0.92188 -0.89062,-0.9375 -0.89062,-2.6875 z m 1.20312,0 q 0,1.32813 0.57813,1.98438 0.59375,0.65625 1.46875,0.65625 0.875,0 1.45312,-0.65625 0.57813,-0.67188 0.57813,-2.03125 0,-1.28125 -0.59375,-1.9375 -0.57813,-0.65625 -1.4375,-0.65625 -0.875,0 -1.46875,0.65625 -0.57813,0.65625 -0.57813,1.98437 z m 6.9281,3.45313 v -6 h -1.03125 v -0.90625 h 1.03125 v -0.73438 q 0,-0.70312 0.125,-1.04687 0.17188,-0.45313 0.59375,-0.73438 0.42188,-0.28125 1.20313,-0.28125 0.48437,0 1.09375,0.10938 l -0.1875,1.03125 q -0.35938,-0.0625 -0.6875,-0.0625 -0.53125,0 -0.75,0.23437 -0.21875,0.21875 -0.21875,0.84375 v 0.64063 h 1.34375 v 0.90625 h -1.34375 v 6 z m 3.4621,0 v -6 h -1.03125 v -0.90625 h 1.03125 v -0.73438 q 0,-0.70312 0.125,-1.04687 0.17187,-0.45313 0.59375,-0.73438 0.42187,-0.28125 1.20312,-0.28125 0.48438,0 1.09375,0.10938 l -0.1875,1.03125 q -0.35937,-0.0625 -0.6875,-0.0625 -0.53125,0 -0.75,0.23437 -0.21875,0.21875 -0.21875,0.84375 v 0.64063 h 1.34375 v 0.90625 h -1.34375 v 6 z m 2.95297,-2.0625 1.15625,-0.1875 q 0.10938,0.70312 0.54688,1.07812 0.45312,0.35938 1.25,0.35938 0.8125,0 1.20312,-0.32813 0.39063,-0.32812 0.39063,-0.76562 0,-0.39063 -0.35938,-0.625 -0.23437,-0.15625 -1.1875,-0.39063 -1.29687,-0.32812 -1.79687,-0.5625 -0.48438,-0.25 -0.75,-0.65625 -0.25,-0.42187 -0.25,-0.9375 0,-0.45312 0.20312,-0.84375 0.21875,-0.40625 0.57813,-0.67187 0.28125,-0.1875 0.75,-0.32813 0.46875,-0.14062 1.01562,-0.14062 0.8125,0 1.42188,0.23437 0.60937,0.23438 0.90625,0.64063 0.29687,0.39062 0.40625,1.0625 l -1.14063,0.15625 q -0.0781,-0.53125 -0.45312,-0.82813 -0.375,-0.3125 -1.0625,-0.3125 -0.8125,0 -1.15625,0.26563 -0.34375,0.26562 -0.34375,0.625 0,0.23437 0.14062,0.42187 0.15625,0.1875 0.45313,0.3125 0.17187,0.0625 1.03125,0.29688 1.25,0.32812 1.73437,0.54687 0.5,0.20313 0.78125,0.60938 0.28125,0.40625 0.28125,1 0,0.59375 -0.34375,1.10937 -0.34375,0.51563 -1,0.79688 -0.64062,0.28125 -1.45312,0.28125 -1.34375,0 -2.04688,-0.5625 -0.70312,-0.5625 -0.90625,-1.65625 z m 11.86719,-0.15625 1.20312,0.14062 q -0.28125,1.0625 -1.0625,1.65625 -0.76562,0.57813 -1.96875,0.57813 -1.51562,0 -2.40625,-0.9375 -0.89062,-0.9375 -0.89062,-2.60938 0,-1.75 0.89062,-2.70312 0.90625,-0.96875 2.34375,-0.96875 1.39063,0 2.26563,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.15625 q 0.0625,1.14062 0.64062,1.75 0.57813,0.59375 1.4375,0.59375 0.65625,0 1.10938,-0.32813 0.45312,-0.34375 0.71875,-1.07812 z m -3.84375,-1.90625 h 3.85937 q -0.0781,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.45312,-0.6875 -0.8125,0 -1.35938,0.54688 -0.54687,0.53125 -0.60937,1.4375 z m 9.08435,3.07812 0.17185,1.03125 q -0.49998,0.10938 -0.8906,0.10938 -0.64063,0 -1,-0.20313 -0.34375,-0.20312 -0.48438,-0.53125 -0.14062,-0.32812 -0.14062,-1.39062 v -3.96875 h -0.85938 v -0.90625 h 0.85938 v -1.71875 l 1.17187,-0.70313 v 2.42188 h 1.17188 v 0.90625 h -1.17188 v 4.04687 q 0,0.5 0.0469,0.64063 0.0625,0.14062 0.20312,0.23437 0.14063,0.0781 0.40625,0.0781 0.20313,0 0.51563,-0.0469 z"
-       fill-rule="nonzero"
-       id="path368" />
-    <path
-       fill="#000000"
-       d="m 374.07084,203.4041 v -9.54688 h 6.90625 v 1.125 h -5.64062 v 2.92188 h 5.28125 v 1.125 h -5.28125 v 3.25 h 5.85937 v 1.125 z m 8.71787,0 v -6.90625 h 1.0625 v 0.98437 q 0.75,-1.14062 2.1875,-1.14062 0.625,0 1.15625,0.21875 0.53125,0.21875 0.78125,0.59375 0.26562,0.35937 0.375,0.85937 0.0625,0.32813 0.0625,1.14063 v 4.25 h -1.17188 v -4.20313 q 0,-0.71875 -0.14062,-1.0625 -0.14063,-0.35937 -0.48438,-0.5625 -0.34375,-0.21875 -0.8125,-0.21875 -0.75,0 -1.29687,0.46875 -0.54688,0.46875 -0.54688,1.79688 v 3.78125 z m 11.81872,2.65625 v -3.39063 q -0.26562,0.39063 -0.76562,0.64063 -0.48438,0.25 -1.04688,0.25 -1.21875,0 -2.10937,-0.98438 -0.89063,-0.98437 -0.89063,-2.6875 0,-1.04687 0.35938,-1.875 0.35937,-0.82812 1.04687,-1.25 0.6875,-0.42187 1.51563,-0.42187 1.28125,0 2.01562,1.07812 v -0.92187 h 1.04688 v 9.5625 z m -3.60937,-6.125 q 0,1.32812 0.5625,2 0.5625,0.65625 1.34375,0.65625 0.75,0 1.28125,-0.625 0.54687,-0.64063 0.54687,-1.9375 0,-1.375 -0.57812,-2.0625 -0.5625,-0.70313 -1.32813,-0.70313 -0.76562,0 -1.29687,0.65625 -0.53125,0.64063 -0.53125,2.01563 z m 11.14685,3.46875 v -1.01563 q -0.8125,1.17188 -2.1875,1.17188 -0.60938,0 -1.14063,-0.23438 -0.53125,-0.23437 -0.79687,-0.57812 -0.25,-0.35938 -0.35938,-0.875 -0.0625,-0.34375 -0.0625,-1.09375 v -4.28125 h 1.17188 v 3.82812 q 0,0.92188 0.0625,1.23438 0.10937,0.46875 0.46875,0.73437 0.35937,0.25 0.89062,0.25 0.51563,0 0.98438,-0.26562 0.46875,-0.26563 0.65625,-0.73438 0.1875,-0.46875 0.1875,-1.34375 v -3.70312 h 1.17187 v 6.90625 z m 7.6156,-2.21875 1.20312,0.14062 q -0.28125,1.0625 -1.0625,1.65625 -0.76562,0.57813 -1.96875,0.57813 -1.51562,0 -2.40625,-0.9375 -0.89062,-0.9375 -0.89062,-2.60938 0,-1.75 0.89062,-2.70312 0.90625,-0.96875 2.34375,-0.96875 1.39063,0 2.26563,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.15625 q 0.0625,1.14062 0.64062,1.75 0.57813,0.59375 1.4375,0.59375 0.65625,0 1.10938,-0.32813 0.45312,-0.34375 0.71875,-1.07812 z m -3.84375,-1.90625 h 3.85937 q -0.0781,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.45312,-0.6875 -0.8125,0 -1.35938,0.54688 -0.54687,0.53125 -0.60937,1.4375 z m 11.0531,4.125 v -1.01563 q -0.8125,1.17188 -2.1875,1.17188 -0.60938,0 -1.14063,-0.23438 -0.53125,-0.23437 -0.79687,-0.57812 -0.25,-0.35938 -0.35938,-0.875 -0.0625,-0.34375 -0.0625,-1.09375 v -4.28125 h 1.17188 v 3.82812 q 0,0.92188 0.0625,1.23438 0.10937,0.46875 0.46875,0.73437 0.35937,0.25 0.89062,0.25 0.51563,0 0.98438,-0.26562 0.46875,-0.26563 0.65625,-0.73438 0.1875,-0.46875 0.1875,-1.34375 v -3.70312 h 1.17187 v 6.90625 z m 7.6156,-2.21875 1.20312,0.14062 q -0.28125,1.0625 -1.0625,1.65625 -0.76562,0.57813 -1.96875,0.57813 -1.51562,0 -2.40625,-0.9375 -0.89062,-0.9375 -0.89062,-2.60938 0,-1.75 0.89062,-2.70312 0.90625,-0.96875 2.34375,-0.96875 1.39063,0 2.26563,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.15625 q 0.0625,1.14062 0.64062,1.75 0.57813,0.59375 1.4375,0.59375 0.65625,0 1.10938,-0.32813 0.45312,-0.34375 0.71875,-1.07812 z m -3.84375,-1.90625 h 3.85937 q -0.0781,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.45312,-0.6875 -0.8125,0 -1.35938,0.54688 -0.54687,0.53125 -0.60937,1.4375 z m 10.36548,4.125 v -9.54688 h 1.29687 l 5.01563,7.5 v -7.5 h 1.20312 v 9.54688 h -1.29687 l -5.01563,-7.5 v 7.5 z m 9.04703,-3.45313 q 0,-1.92187 1.07812,-2.84375 0.89063,-0.76562 2.17188,-0.76562 1.42187,0 2.32812,0.9375 0.90625,0.92187 0.90625,2.57812 0,1.32813 -0.40625,2.09375 -0.39062,0.76563 -1.15625,1.1875 -0.76562,0.42188 -1.67187,0.42188 -1.45313,0 -2.35938,-0.92188 -0.89062,-0.9375 -0.89062,-2.6875 z m 1.20312,0 q 0,1.32813 0.57813,1.98438 0.59375,0.65625 1.46875,0.65625 0.875,0 1.45312,-0.65625 0.57813,-0.67188 0.57813,-2.03125 0,-1.28125 -0.59375,-1.9375 -0.57813,-0.65625 -1.4375,-0.65625 -0.875,0 -1.46875,0.65625 -0.57813,0.65625 -0.57813,1.98437 z m 11.13123,3.45313 v -0.875 q -0.65625,1.03125 -1.9375,1.03125 -0.8125,0 -1.51563,-0.45313 -0.6875,-0.45312 -1.07812,-1.26562 -0.375,-0.82813 -0.375,-1.89063 0,-1.03125 0.34375,-1.875 0.34375,-0.84375 1.03125,-1.28125 0.70312,-0.45312 1.54687,-0.45312 0.625,0 1.10938,0.26562 0.5,0.25 0.79687,0.67188 v -3.42188 h 1.17188 v 9.54688 z m -3.70313,-3.45313 q 0,1.32813 0.5625,1.98438 0.5625,0.65625 1.32813,0.65625 0.76562,0 1.29687,-0.625 0.53125,-0.625 0.53125,-1.90625 0,-1.42188 -0.54687,-2.07813 -0.54688,-0.67187 -1.34375,-0.67187 -0.78125,0 -1.3125,0.64062 -0.51563,0.625 -0.51563,2 z m 11.3656,1.23438 1.20313,0.14062 q -0.28125,1.0625 -1.0625,1.65625 -0.76563,0.57813 -1.96875,0.57813 -1.51563,0 -2.40625,-0.9375 -0.89063,-0.9375 -0.89063,-2.60938 0,-1.75 0.89063,-2.70312 0.90625,-0.96875 2.34375,-0.96875 1.39062,0 2.26562,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.15625 q 0.0625,1.14062 0.64063,1.75 0.57812,0.59375 1.4375,0.59375 0.65625,0 1.10937,-0.32813 0.45313,-0.34375 0.71875,-1.07812 z m -3.84375,-1.90625 h 3.85938 q -0.0781,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.45313,-0.6875 -0.8125,0 -1.35937,0.54688 -0.54688,0.53125 -0.60938,1.4375 z m 9.8967,-0.57813 q 0,-1.6875 0.34375,-2.71875 0.35938,-1.03125 1.04688,-1.59375 0.6875,-0.5625 1.71875,-0.5625 0.78125,0 1.35937,0.3125 0.57813,0.29688 0.95313,0.89063 0.375,0.57812 0.59375,1.42187 0.21875,0.82813 0.21875,2.25 0,1.67188 -0.35938,2.70313 -0.34375,1.03125 -1.03125,1.59375 -0.67187,0.5625 -1.73437,0.5625 -1.375,0 -2.15625,-0.98438 -0.95313,-1.1875 -0.95313,-3.875 z m 1.20313,0 q 0,2.34375 0.54687,3.125 0.5625,0.78125 1.35938,0.78125 0.8125,0 1.35937,-0.78125 0.5625,-0.78125 0.5625,-3.125 0,-2.35937 -0.5625,-3.125 -0.54687,-0.78125 -1.35937,-0.78125 -0.8125,0 -1.29688,0.6875 -0.60937,0.875 -0.60937,3.21875 z m 9.80297,1.25 q 0,-1.92187 1.07813,-2.84375 0.89062,-0.76562 2.17187,-0.76562 1.42188,0 2.32813,0.9375 0.90625,0.92187 0.90625,2.57812 0,1.32813 -0.40625,2.09375 -0.39063,0.76563 -1.15625,1.1875 -0.76563,0.42188 -1.67188,0.42188 -1.45312,0 -2.35937,-0.92188 -0.89063,-0.9375 -0.89063,-2.6875 z m 1.20313,0 q 0,1.32813 0.57812,1.98438 0.59375,0.65625 1.46875,0.65625 0.875,0 1.45313,-0.65625 0.57812,-0.67188 0.57812,-2.03125 0,-1.28125 -0.59375,-1.9375 -0.57812,-0.65625 -1.4375,-0.65625 -0.875,0 -1.46875,0.65625 -0.57812,0.65625 -0.57812,1.98437 z m 6.9281,3.45313 v -6 h -1.03125 v -0.90625 h 1.03125 v -0.73438 q 0,-0.70312 0.125,-1.04687 0.17187,-0.45313 0.59375,-0.73438 0.42187,-0.28125 1.20312,-0.28125 0.48438,0 1.09375,0.10938 l -0.1875,1.03125 q -0.35937,-0.0625 -0.6875,-0.0625 -0.53125,0 -0.75,0.23437 -0.21875,0.21875 -0.21875,0.84375 v 0.64063 h 1.34375 v 0.90625 h -1.34375 v 6 z m 3.4621,0 v -6 h -1.03125 v -0.90625 h 1.03125 v -0.73438 q 0,-0.70312 0.125,-1.04687 0.17187,-0.45313 0.59375,-0.73438 0.42187,-0.28125 1.20312,-0.28125 0.48438,0 1.09375,0.10938 l -0.1875,1.03125 q -0.35937,-0.0625 -0.6875,-0.0625 -0.53125,0 -0.75,0.23437 -0.21875,0.21875 -0.21875,0.84375 v 0.64063 h 1.34375 v 0.90625 h -1.34375 v 6 z m 2.95297,-2.0625 1.15625,-0.1875 q 0.10937,0.70312 0.54687,1.07812 0.45313,0.35938 1.25,0.35938 0.8125,0 1.20313,-0.32813 0.39062,-0.32812 0.39062,-0.76562 0,-0.39063 -0.35937,-0.625 -0.23438,-0.15625 -1.1875,-0.39063 -1.29688,-0.32812 -1.79688,-0.5625 -0.48437,-0.25 -0.75,-0.65625 -0.25,-0.42187 -0.25,-0.9375 0,-0.45312 0.20313,-0.84375 0.21875,-0.40625 0.57812,-0.67187 0.28125,-0.1875 0.75,-0.32813 0.46875,-0.14062 1.01563,-0.14062 0.8125,0 1.42187,0.23437 0.60938,0.23438 0.90625,0.64063 0.29688,0.39062 0.40625,1.0625 l -1.14062,0.15625 q -0.0781,-0.53125 -0.45313,-0.82813 -0.375,-0.3125 -1.0625,-0.3125 -0.8125,0 -1.15625,0.26563 -0.34375,0.26562 -0.34375,0.625 0,0.23437 0.14063,0.42187 0.15625,0.1875 0.45312,0.3125 0.17188,0.0625 1.03125,0.29688 1.25,0.32812 1.73438,0.54687 0.5,0.20313 0.78125,0.60938 0.28125,0.40625 0.28125,1 0,0.59375 -0.34375,1.10937 -0.34375,0.51563 -1,0.79688 -0.64063,0.28125 -1.45313,0.28125 -1.34375,0 -2.04687,-0.5625 -0.70313,-0.5625 -0.90625,-1.65625 z m 11.86719,-0.15625 1.20311,0.14062 q -0.2812,1.0625 -1.06249,1.65625 -0.76562,0.57813 -1.96875,0.57813 -1.51562,0 -2.40625,-0.9375 -0.89062,-0.9375 -0.89062,-2.60938 0,-1.75 0.89062,-2.70312 0.90625,-0.96875 2.34375,-0.96875 1.39063,0 2.26563,0.9375 0.87501,0.9375 0.87501,2.65625 0,0.10937 0,0.3125 h -5.15626 q 0.0625,1.14062 0.64062,1.75 0.57813,0.59375 1.4375,0.59375 0.65625,0 1.10938,-0.32813 0.45312,-0.34375 0.71875,-1.07812 z m -3.84375,-1.90625 h 3.85937 q -0.0781,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.45312,-0.6875 -0.8125,0 -1.35938,0.54688 -0.54687,0.53125 -0.60937,1.4375 z m 9.08436,3.07812 0.1719,1.03125 q -0.5,0.10938 -0.8907,0.10938 -0.6406,0 -1,-0.20313 -0.3437,-0.20312 -0.4843,-0.53125 -0.1407,-0.32812 -0.1407,-1.39062 v -3.96875 h -0.8593 v -0.90625 h 0.8593 v -1.71875 l 1.1719,-0.70313 v 2.42188 h 1.1719 v 0.90625 h -1.1719 v 4.04687 q 0,0.5 0.047,0.64063 0.062,0.14062 0.2031,0.23437 0.1407,0.0781 0.4063,0.0781 0.2031,0 0.5156,-0.0469 z"
-       fill-rule="nonzero"
-       id="path370" />
-    <path
-       fill="#000000"
-       d="m 374.07084,238.60097 v -9.54689 h 6.90625 v 1.125 h -5.64062 v 2.92189 h 5.28125 v 1.125 h -5.28125 v 3.25 h 5.85937 v 1.125 z m 8.71787,0 v -6.90625 h 1.0625 v 0.98438 q 0.75,-1.14063 2.1875,-1.14063 0.625,0 1.15625,0.21875 0.53125,0.21875 0.78125,0.59375 0.26562,0.35938 0.375,0.85938 0.0625,0.32812 0.0625,1.14062 v 4.25 h -1.17188 v -4.20312 q 0,-0.71875 -0.14062,-1.0625 -0.14063,-0.35938 -0.48438,-0.5625 -0.34375,-0.21875 -0.8125,-0.21875 -0.75,0 -1.29687,0.46875 -0.54688,0.46875 -0.54688,1.79687 v 3.78125 z m 11.81872,2.65625 v -3.39062 q -0.26562,0.39062 -0.76562,0.64062 -0.48438,0.25 -1.04688,0.25 -1.21875,0 -2.10937,-0.98437 -0.89063,-0.98438 -0.89063,-2.6875 0,-1.04688 0.35938,-1.875 0.35937,-0.82813 1.04687,-1.25 0.6875,-0.42188 1.51563,-0.42188 1.28125,0 2.01562,1.07813 v -0.92188 h 1.04688 v 9.5625 z m -3.60937,-6.125 q 0,1.32813 0.5625,2 0.5625,0.65625 1.34375,0.65625 0.75,0 1.28125,-0.625 0.54687,-0.64062 0.54687,-1.9375 0,-1.375 -0.57812,-2.0625 -0.5625,-0.70312 -1.32813,-0.70312 -0.76562,0 -1.29687,0.65625 -0.53125,0.64062 -0.53125,2.01562 z m 11.14685,3.46875 v -1.01562 q -0.8125,1.17187 -2.1875,1.17187 -0.60938,0 -1.14063,-0.23437 -0.53125,-0.23438 -0.79687,-0.57813 -0.25,-0.35937 -0.35938,-0.875 -0.0625,-0.34375 -0.0625,-1.09375 v -4.28125 h 1.17188 v 3.82813 q 0,0.92187 0.0625,1.23437 0.10937,0.46875 0.46875,0.73438 0.35937,0.25 0.89062,0.25 0.51563,0 0.98438,-0.26563 0.46875,-0.26562 0.65625,-0.73437 0.1875,-0.46875 0.1875,-1.34375 v -3.70313 h 1.17187 v 6.90625 z m 7.6156,-2.21875 1.20312,0.14063 q -0.28125,1.0625 -1.0625,1.65625 -0.76562,0.57812 -1.96875,0.57812 -1.51562,0 -2.40625,-0.9375 -0.89062,-0.9375 -0.89062,-2.60937 0,-1.75 0.89062,-2.70313 0.90625,-0.96875 2.34375,-0.96875 1.39063,0 2.26563,0.9375 0.875,0.9375 0.875,2.65625 0,0.10938 0,0.3125 h -5.15625 q 0.0625,1.14063 0.64062,1.75 0.57813,0.59375 1.4375,0.59375 0.65625,0 1.10938,-0.32812 0.45312,-0.34375 0.71875,-1.07813 z m -3.84375,-1.90625 h 3.85937 q -0.0781,-0.85937 -0.4375,-1.29687 -0.5625,-0.6875 -1.45312,-0.6875 -0.8125,0 -1.35938,0.54687 -0.54687,0.53125 -0.60937,1.4375 z m 11.0531,4.125 v -1.01562 q -0.8125,1.17187 -2.1875,1.17187 -0.60938,0 -1.14063,-0.23437 -0.53125,-0.23438 -0.79687,-0.57813 -0.25,-0.35937 -0.35938,-0.875 -0.0625,-0.34375 -0.0625,-1.09375 v -4.28125 h 1.17188 v 3.82813 q 0,0.92187 0.0625,1.23437 0.10937,0.46875 0.46875,0.73438 0.35937,0.25 0.89062,0.25 0.51563,0 0.98438,-0.26563 0.46875,-0.26562 0.65625,-0.73437 0.1875,-0.46875 0.1875,-1.34375 v -3.70313 h 1.17187 v 6.90625 z m 7.6156,-2.21875 1.20312,0.14063 q -0.28125,1.0625 -1.0625,1.65625 -0.76562,0.57812 -1.96875,0.57812 -1.51562,0 -2.40625,-0.9375 -0.89062,-0.9375 -0.89062,-2.60937 0,-1.75 0.89062,-2.70313 0.90625,-0.96875 2.34375,-0.96875 1.39063,0 2.26563,0.9375 0.875,0.9375 0.875,2.65625 0,0.10938 0,0.3125 h -5.15625 q 0.0625,1.14063 0.64062,1.75 0.57813,0.59375 1.4375,0.59375 0.65625,0 1.10938,-0.32812 0.45312,-0.34375 0.71875,-1.07813 z m -3.84375,-1.90625 h 3.85937 q -0.0781,-0.85937 -0.4375,-1.29687 -0.5625,-0.6875 -1.45312,-0.6875 -0.8125,0 -1.35938,0.54687 -0.54687,0.53125 -0.60937,1.4375 z m 10.36548,4.125 v -9.54689 h 1.29687 l 5.01563,7.50002 v -7.50002 h 1.20312 v 9.54689 h -1.29687 l -5.01563,-7.50002 v 7.50002 z m 9.04703,-3.45312 q 0,-1.92188 1.07812,-2.84375 0.89063,-0.76563 2.17188,-0.76563 1.42187,0 2.32812,0.9375 0.90625,0.92188 0.90625,2.57813 0,1.32812 -0.40625,2.09375 -0.39062,0.76562 -1.15625,1.1875 -0.76562,0.42187 -1.67187,0.42187 -1.45313,0 -2.35938,-0.92187 -0.89062,-0.9375 -0.89062,-2.6875 z m 1.20312,0 q 0,1.32812 0.57813,1.98437 0.59375,0.65625 1.46875,0.65625 0.875,0 1.45312,-0.65625 0.57813,-0.67187 0.57813,-2.03125 0,-1.28125 -0.59375,-1.9375 -0.57813,-0.65625 -1.4375,-0.65625 -0.875,0 -1.46875,0.65625 -0.57813,0.65625 -0.57813,1.98438 z m 11.13123,3.45312 v -0.875 q -0.65625,1.03125 -1.9375,1.03125 -0.8125,0 -1.51563,-0.45312 -0.6875,-0.45313 -1.07812,-1.26563 -0.375,-0.82812 -0.375,-1.89062 0,-1.03125 0.34375,-1.875 0.34375,-0.84375 1.03125,-1.28125 0.70312,-0.45313 1.54687,-0.45313 0.625,0 1.10938,0.26563 0.5,0.25 0.79687,0.67187 v -3.42189 h 1.17188 v 9.54689 z m -3.70313,-3.45312 q 0,1.32812 0.5625,1.98437 0.5625,0.65625 1.32813,0.65625 0.76562,0 1.29687,-0.625 0.53125,-0.625 0.53125,-1.90625 0,-1.42187 -0.54687,-2.07812 -0.54688,-0.67188 -1.34375,-0.67188 -0.78125,0 -1.3125,0.64063 -0.51563,0.625 -0.51563,2 z m 11.3656,1.23437 1.20313,0.14063 q -0.28125,1.0625 -1.0625,1.65625 -0.76563,0.57812 -1.96875,0.57812 -1.51563,0 -2.40625,-0.9375 -0.89063,-0.9375 -0.89063,-2.60937 0,-1.75 0.89063,-2.70313 0.90625,-0.96875 2.34375,-0.96875 1.39062,0 2.26562,0.9375 0.875,0.9375 0.875,2.65625 0,0.10938 0,0.3125 h -5.15625 q 0.0625,1.14063 0.64063,1.75 0.57812,0.59375 1.4375,0.59375 0.65625,0 1.10937,-0.32812 0.45313,-0.34375 0.71875,-1.07813 z m -3.84375,-1.90625 h 3.85938 q -0.0781,-0.85937 -0.4375,-1.29687 -0.5625,-0.6875 -1.45313,-0.6875 -0.8125,0 -1.35937,0.54687 -0.54688,0.53125 -0.60938,1.4375 z m 14.31858,4.125 h -1.17188 v -7.46877 q -0.42187,0.40627 -1.10937,0.81252 -0.6875,0.40625 -1.23438,0.60937 v -1.14064 q 0.98438,-0.45312 1.71875,-1.10937 0.73438,-0.67188 1.03125,-1.28125 h 0.76563 z m 6.58422,-3.45312 q 0,-1.92188 1.07813,-2.84375 0.89062,-0.76563 2.17187,-0.76563 1.42188,0 2.32813,0.9375 0.90625,0.92188 0.90625,2.57813 0,1.32812 -0.40625,2.09375 -0.39063,0.76562 -1.15625,1.1875 -0.76563,0.42187 -1.67188,0.42187 -1.45312,0 -2.35937,-0.92187 -0.89063,-0.9375 -0.89063,-2.6875 z m 1.20313,0 q 0,1.32812 0.57812,1.98437 0.59375,0.65625 1.46875,0.65625 0.875,0 1.45313,-0.65625 0.57812,-0.67187 0.57812,-2.03125 0,-1.28125 -0.59375,-1.9375 -0.57812,-0.65625 -1.4375,-0.65625 -0.875,0 -1.46875,0.65625 -0.57812,0.65625 -0.57812,1.98438 z m 6.9281,3.45312 v -6 h -1.03125 v -0.90625 h 1.03125 v -0.73439 q 0,-0.70313 0.125,-1.04688 0.17187,-0.45312 0.59375,-0.73437 0.42187,-0.28125 1.20312,-0.28125 0.48438,0 1.09375,0.10937 l -0.1875,1.03125 q -0.35937,-0.0625 -0.6875,-0.0625 -0.53125,0 -0.75,0.23438 -0.21875,0.21875 -0.21875,0.84375 v 0.64064 h 1.34375 v 0.90625 h -1.34375 v 6 z m 3.4621,0 v -6 h -1.03125 v -0.90625 h 1.03125 v -0.73439 q 0,-0.70313 0.125,-1.04688 0.17187,-0.45312 0.59375,-0.73437 0.42187,-0.28125 1.20312,-0.28125 0.48438,0 1.09375,0.10937 l -0.1875,1.03125 q -0.35937,-0.0625 -0.6875,-0.0625 -0.53125,0 -0.75,0.23438 -0.21875,0.21875 -0.21875,0.84375 v 0.64064 h 1.34375 v 0.90625 h -1.34375 v 6 z m 2.95297,-2.0625 1.15625,-0.1875 q 0.10937,0.70313 0.54687,1.07813 0.45313,0.35937 1.25,0.35937 0.8125,0 1.20313,-0.32812 0.39062,-0.32813 0.39062,-0.76563 0,-0.39062 -0.35937,-0.625 -0.23438,-0.15625 -1.1875,-0.39062 -1.29688,-0.32813 -1.79688,-0.5625 -0.48437,-0.25 -0.75,-0.65625 -0.25,-0.42188 -0.25,-0.9375 0,-0.45313 0.20313,-0.84375 0.21875,-0.40625 0.57812,-0.67188 0.28125,-0.1875 0.75,-0.32812 0.46875,-0.14063 1.01563,-0.14063 0.8125,0 1.42187,0.23438 0.60938,0.23437 0.90625,0.64062 0.29688,0.39063 0.40625,1.0625 l -1.14062,0.15625 q -0.0781,-0.53125 -0.45313,-0.82812 -0.375,-0.3125 -1.0625,-0.3125 -0.8125,0 -1.15625,0.26562 -0.34375,0.26563 -0.34375,0.625 0,0.23438 0.14063,0.42188 0.15625,0.1875 0.45312,0.3125 0.17188,0.0625 1.03125,0.29687 1.25,0.32813 1.73438,0.54688 0.5,0.20312 0.78125,0.60937 0.28125,0.40625 0.28125,1 0,0.59375 -0.34375,1.10938 -0.34375,0.51562 -1,0.79687 -0.64063,0.28125 -1.45313,0.28125 -1.34375,0 -2.04687,-0.5625 -0.70313,-0.5625 -0.90625,-1.65625 z m 11.86719,-0.15625 1.20311,0.14063 q -0.2812,1.0625 -1.06249,1.65625 -0.76562,0.57812 -1.96875,0.57812 -1.51562,0 -2.40625,-0.9375 -0.89062,-0.9375 -0.89062,-2.60937 0,-1.75 0.89062,-2.70313 0.90625,-0.96875 2.34375,-0.96875 1.39063,0 2.26563,0.9375 0.87501,0.9375 0.87501,2.65625 0,0.10938 0,0.3125 h -5.15626 q 0.0625,1.14063 0.64062,1.75 0.57813,0.59375 1.4375,0.59375 0.65625,0 1.10938,-0.32812 0.45312,-0.34375 0.71875,-1.07813 z m -3.84375,-1.90625 h 3.85937 q -0.0781,-0.85937 -0.4375,-1.29687 -0.5625,-0.6875 -1.45312,-0.6875 -0.8125,0 -1.35938,0.54687 -0.54687,0.53125 -0.60937,1.4375 z m 9.08436,3.07813 0.1719,1.03125 q -0.5,0.10937 -0.8907,0.10937 -0.6406,0 -1,-0.20312 -0.3437,-0.20313 -0.4843,-0.53125 -0.1407,-0.32813 -0.1407,-1.39063 v -3.96875 h -0.8593 v -0.90625 h 0.8593 v -1.71877 l 1.1719,-0.70312 v 2.42189 h 1.1719 v 0.90625 h -1.1719 v 4.04688 q 0,0.5 0.047,0.64062 0.062,0.14063 0.2031,0.23438 0.1407,0.0781 0.4063,0.0781 0.2031,0 0.5156,-0.0469 z"
-       fill-rule="nonzero"
-       id="path372" />
-    <path
-       fill="#000000"
-       d="m 374.07084,273.7978 v -9.54688 h 6.90625 v 1.125 h -5.64062 v 2.92188 h 5.28125 v 1.125 h -5.28125 v 3.25 h 5.85937 v 1.125 z m 8.71787,0 v -6.90625 h 1.0625 v 0.98437 q 0.75,-1.14062 2.1875,-1.14062 0.625,0 1.15625,0.21875 0.53125,0.21875 0.78125,0.59375 0.26562,0.35937 0.375,0.85937 0.0625,0.32813 0.0625,1.14063 v 4.25 h -1.17188 v -4.20313 q 0,-0.71875 -0.14062,-1.0625 -0.14063,-0.35937 -0.48438,-0.5625 -0.34375,-0.21875 -0.8125,-0.21875 -0.75,0 -1.29687,0.46875 -0.54688,0.46875 -0.54688,1.79688 v 3.78125 z m 11.81872,2.65625 v -3.39063 q -0.26562,0.39063 -0.76562,0.64063 -0.48438,0.25 -1.04688,0.25 -1.21875,0 -2.10937,-0.98438 -0.89063,-0.98437 -0.89063,-2.6875 0,-1.04687 0.35938,-1.875 0.35937,-0.82812 1.04687,-1.25 0.6875,-0.42187 1.51563,-0.42187 1.28125,0 2.01562,1.07812 v -0.92187 h 1.04688 v 9.5625 z m -3.60937,-6.125 q 0,1.32812 0.5625,2 0.5625,0.65625 1.34375,0.65625 0.75,0 1.28125,-0.625 0.54687,-0.64063 0.54687,-1.9375 0,-1.375 -0.57812,-2.0625 -0.5625,-0.70313 -1.32813,-0.70313 -0.76562,0 -1.29687,0.65625 -0.53125,0.64063 -0.53125,2.01563 z m 11.14685,3.46875 v -1.01563 q -0.8125,1.17188 -2.1875,1.17188 -0.60938,0 -1.14063,-0.23438 -0.53125,-0.23437 -0.79687,-0.57812 -0.25,-0.35938 -0.35938,-0.875 -0.0625,-0.34375 -0.0625,-1.09375 v -4.28125 h 1.17188 v 3.82812 q 0,0.92188 0.0625,1.23438 0.10937,0.46875 0.46875,0.73437 0.35937,0.25 0.89062,0.25 0.51563,0 0.98438,-0.26562 0.46875,-0.26563 0.65625,-0.73438 0.1875,-0.46875 0.1875,-1.34375 v -3.70312 h 1.17187 v 6.90625 z m 7.6156,-2.21875 1.20312,0.14062 q -0.28125,1.0625 -1.0625,1.65625 -0.76562,0.57813 -1.96875,0.57813 -1.51562,0 -2.40625,-0.9375 -0.89062,-0.9375 -0.89062,-2.60938 0,-1.75 0.89062,-2.70312 0.90625,-0.96875 2.34375,-0.96875 1.39063,0 2.26563,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.15625 q 0.0625,1.14062 0.64062,1.75 0.57813,0.59375 1.4375,0.59375 0.65625,0 1.10938,-0.32813 0.45312,-0.34375 0.71875,-1.07812 z m -3.84375,-1.90625 h 3.85937 q -0.0781,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.45312,-0.6875 -0.8125,0 -1.35938,0.54688 -0.54687,0.53125 -0.60937,1.4375 z m 11.0531,4.125 v -1.01563 q -0.8125,1.17188 -2.1875,1.17188 -0.60938,0 -1.14063,-0.23438 -0.53125,-0.23437 -0.79687,-0.57812 -0.25,-0.35938 -0.35938,-0.875 -0.0625,-0.34375 -0.0625,-1.09375 v -4.28125 h 1.17188 v 3.82812 q 0,0.92188 0.0625,1.23438 0.10937,0.46875 0.46875,0.73437 0.35937,0.25 0.89062,0.25 0.51563,0 0.98438,-0.26562 0.46875,-0.26563 0.65625,-0.73438 0.1875,-0.46875 0.1875,-1.34375 v -3.70312 h 1.17187 v 6.90625 z m 7.6156,-2.21875 1.20312,0.14062 q -0.28125,1.0625 -1.0625,1.65625 -0.76562,0.57813 -1.96875,0.57813 -1.51562,0 -2.40625,-0.9375 -0.89062,-0.9375 -0.89062,-2.60938 0,-1.75 0.89062,-2.70312 0.90625,-0.96875 2.34375,-0.96875 1.39063,0 2.26563,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.15625 q 0.0625,1.14062 0.64062,1.75 0.57813,0.59375 1.4375,0.59375 0.65625,0 1.10938,-0.32813 0.45312,-0.34375 0.71875,-1.07812 z m -3.84375,-1.90625 h 3.85937 q -0.0781,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.45312,-0.6875 -0.8125,0 -1.35938,0.54688 -0.54687,0.53125 -0.60937,1.4375 z m 10.36548,4.125 v -9.54688 h 1.29687 l 5.01563,7.5 v -7.5 h 1.20312 v 9.54688 h -1.29687 l -5.01563,-7.5 v 7.5 z m 9.04703,-3.45313 q 0,-1.92187 1.07812,-2.84375 0.89063,-0.76562 2.17188,-0.76562 1.42187,0 2.32812,0.9375 0.90625,0.92187 0.90625,2.57812 0,1.32813 -0.40625,2.09375 -0.39062,0.76563 -1.15625,1.1875 -0.76562,0.42188 -1.67187,0.42188 -1.45313,0 -2.35938,-0.92188 -0.89062,-0.9375 -0.89062,-2.6875 z m 1.20312,0 q 0,1.32813 0.57813,1.98438 0.59375,0.65625 1.46875,0.65625 0.875,0 1.45312,-0.65625 0.57813,-0.67188 0.57813,-2.03125 0,-1.28125 -0.59375,-1.9375 -0.57813,-0.65625 -1.4375,-0.65625 -0.875,0 -1.46875,0.65625 -0.57813,0.65625 -0.57813,1.98437 z m 11.13123,3.45313 v -0.875 q -0.65625,1.03125 -1.9375,1.03125 -0.8125,0 -1.51563,-0.45313 -0.6875,-0.45312 -1.07812,-1.26562 -0.375,-0.82813 -0.375,-1.89063 0,-1.03125 0.34375,-1.875 0.34375,-0.84375 1.03125,-1.28125 0.70312,-0.45312 1.54687,-0.45312 0.625,0 1.10938,0.26562 0.5,0.25 0.79687,0.67188 v -3.42188 h 1.17188 v 9.54688 z m -3.70313,-3.45313 q 0,1.32813 0.5625,1.98438 0.5625,0.65625 1.32813,0.65625 0.76562,0 1.29687,-0.625 0.53125,-0.625 0.53125,-1.90625 0,-1.42188 -0.54687,-2.07813 -0.54688,-0.67187 -1.34375,-0.67187 -0.78125,0 -1.3125,0.64062 -0.51563,0.625 -0.51563,2 z m 11.3656,1.23438 1.20313,0.14062 q -0.28125,1.0625 -1.0625,1.65625 -0.76563,0.57813 -1.96875,0.57813 -1.51563,0 -2.40625,-0.9375 -0.89063,-0.9375 -0.89063,-2.60938 0,-1.75 0.89063,-2.70312 0.90625,-0.96875 2.34375,-0.96875 1.39062,0 2.26562,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.15625 q 0.0625,1.14062 0.64063,1.75 0.57812,0.59375 1.4375,0.59375 0.65625,0 1.10937,-0.32813 0.45313,-0.34375 0.71875,-1.07812 z m -3.84375,-1.90625 h 3.85938 q -0.0781,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.45313,-0.6875 -0.8125,0 -1.35937,0.54688 -0.54688,0.53125 -0.60938,1.4375 z m 16.05295,3 v 1.125 h -6.29687 q -0.0156,-0.42188 0.14062,-0.8125 0.23438,-0.64063 0.76563,-1.26563 0.53125,-0.625 1.53125,-1.45312 1.5625,-1.26563 2.10937,-2.01563 0.54688,-0.75 0.54688,-1.40625 0,-0.70312 -0.5,-1.17187 -0.5,-0.48438 -1.29688,-0.48438 -0.85937,0 -1.375,0.51563 -0.5,0.5 -0.5,1.39062 l -1.20312,-0.10937 q 0.125,-1.35938 0.92187,-2.0625 0.8125,-0.70313 2.17188,-0.70313 1.375,0 2.17187,0.76563 0.8125,0.75 0.8125,1.875 0,0.57812 -0.23437,1.14062 -0.23438,0.54688 -0.78125,1.15625 -0.54688,0.60938 -1.8125,1.67188 -1.04688,0.89062 -1.35938,1.21875 -0.29687,0.3125 -0.48437,0.625 z m 4.84985,-2.32813 q 0,-1.92187 1.07813,-2.84375 0.89062,-0.76562 2.17187,-0.76562 1.42188,0 2.32813,0.9375 0.90625,0.92187 0.90625,2.57812 0,1.32813 -0.40625,2.09375 -0.39063,0.76563 -1.15625,1.1875 -0.76563,0.42188 -1.67188,0.42188 -1.45312,0 -2.35937,-0.92188 -0.89063,-0.9375 -0.89063,-2.6875 z m 1.20313,0 q 0,1.32813 0.57812,1.98438 0.59375,0.65625 1.46875,0.65625 0.875,0 1.45313,-0.65625 0.57812,-0.67188 0.57812,-2.03125 0,-1.28125 -0.59375,-1.9375 -0.57812,-0.65625 -1.4375,-0.65625 -0.875,0 -1.46875,0.65625 -0.57812,0.65625 -0.57812,1.98437 z m 6.9281,3.45313 v -6 h -1.03125 v -0.90625 h 1.03125 v -0.73438 q 0,-0.70312 0.125,-1.04687 0.17187,-0.45313 0.59375,-0.73438 0.42187,-0.28125 1.20312,-0.28125 0.48438,0 1.09375,0.10938 l -0.1875,1.03125 q -0.35937,-0.0625 -0.6875,-0.0625 -0.53125,0 -0.75,0.23437 -0.21875,0.21875 -0.21875,0.84375 v 0.64063 h 1.34375 v 0.90625 h -1.34375 v 6 z m 3.4621,0 v -6 h -1.03125 v -0.90625 h 1.03125 v -0.73438 q 0,-0.70312 0.125,-1.04687 0.17187,-0.45313 0.59375,-0.73438 0.42187,-0.28125 1.20312,-0.28125 0.48438,0 1.09375,0.10938 l -0.1875,1.03125 q -0.35937,-0.0625 -0.6875,-0.0625 -0.53125,0 -0.75,0.23437 -0.21875,0.21875 -0.21875,0.84375 v 0.64063 h 1.34375 v 0.90625 h -1.34375 v 6 z m 2.95297,-2.0625 1.15625,-0.1875 q 0.10937,0.70312 0.54687,1.07812 0.45313,0.35938 1.25,0.35938 0.8125,0 1.20313,-0.32813 0.39062,-0.32812 0.39062,-0.76562 0,-0.39063 -0.35937,-0.625 -0.23438,-0.15625 -1.1875,-0.39063 -1.29688,-0.32812 -1.79688,-0.5625 -0.48437,-0.25 -0.75,-0.65625 -0.25,-0.42187 -0.25,-0.9375 0,-0.45312 0.20313,-0.84375 0.21875,-0.40625 0.57812,-0.67187 0.28125,-0.1875 0.75,-0.32813 0.46875,-0.14062 1.01563,-0.14062 0.8125,0 1.42187,0.23437 0.60938,0.23438 0.90625,0.64063 0.29688,0.39062 0.40625,1.0625 l -1.14062,0.15625 q -0.0781,-0.53125 -0.45313,-0.82813 -0.375,-0.3125 -1.0625,-0.3125 -0.8125,0 -1.15625,0.26563 -0.34375,0.26562 -0.34375,0.625 0,0.23437 0.14063,0.42187 0.15625,0.1875 0.45312,0.3125 0.17188,0.0625 1.03125,0.29688 1.25,0.32812 1.73438,0.54687 0.5,0.20313 0.78125,0.60938 0.28125,0.40625 0.28125,1 0,0.59375 -0.34375,1.10937 -0.34375,0.51563 -1,0.79688 -0.64063,0.28125 -1.45313,0.28125 -1.34375,0 -2.04687,-0.5625 -0.70313,-0.5625 -0.90625,-1.65625 z m 11.86719,-0.15625 1.20311,0.14062 q -0.2812,1.0625 -1.06249,1.65625 -0.76562,0.57813 -1.96875,0.57813 -1.51562,0 -2.40625,-0.9375 -0.89062,-0.9375 -0.89062,-2.60938 0,-1.75 0.89062,-2.70312 0.90625,-0.96875 2.34375,-0.96875 1.39063,0 2.26563,0.9375 0.87501,0.9375 0.87501,2.65625 0,0.10937 0,0.3125 h -5.15626 q 0.0625,1.14062 0.64062,1.75 0.57813,0.59375 1.4375,0.59375 0.65625,0 1.10938,-0.32813 0.45312,-0.34375 0.71875,-1.07812 z m -3.84375,-1.90625 h 3.85937 q -0.0781,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.45312,-0.6875 -0.8125,0 -1.35938,0.54688 -0.54687,0.53125 -0.60937,1.4375 z m 9.08436,3.07812 0.1719,1.03125 q -0.5,0.10938 -0.8907,0.10938 -0.6406,0 -1,-0.20313 -0.3437,-0.20312 -0.4843,-0.53125 -0.1407,-0.32812 -0.1407,-1.39062 v -3.96875 h -0.8593 v -0.90625 h 0.8593 v -1.71875 l 1.1719,-0.70313 v 2.42188 h 1.1719 v 0.90625 h -1.1719 v 4.04687 q 0,0.5 0.047,0.64063 0.062,0.14062 0.2031,0.23437 0.1407,0.0781 0.4063,0.0781 0.2031,0 0.5156,-0.0469 z"
-       fill-rule="nonzero"
-       id="path374" />
-    <path
-       fill="#000000"
-       d="m 372.96448,308.99465 v -9.54688 h 6.90625 v 1.125 h -5.64062 v 2.92188 h 5.28125 v 1.125 h -5.28125 v 3.25 h 5.85937 v 1.125 z m 8.7179,0 v -6.90625 h 1.0625 v 0.98437 q 0.75,-1.14062 2.1875,-1.14062 0.625,0 1.15625,0.21875 0.53125,0.21875 0.78125,0.59375 0.26562,0.35937 0.375,0.85937 0.0625,0.32813 0.0625,1.14063 v 4.25 h -1.17188 v -4.20313 q 0,-0.71875 -0.14062,-1.0625 -0.14063,-0.35937 -0.48438,-0.5625 -0.34375,-0.21875 -0.8125,-0.21875 -0.75,0 -1.29687,0.46875 -0.54688,0.46875 -0.54688,1.79688 v 3.78125 z m 11.81872,2.65625 v -3.39063 q -0.26562,0.39063 -0.76562,0.64063 -0.48438,0.25 -1.04688,0.25 -1.21875,0 -2.10937,-0.98438 -0.89063,-0.98437 -0.89063,-2.6875 0,-1.04687 0.35938,-1.875 0.35937,-0.82812 1.04687,-1.25 0.6875,-0.42187 1.51563,-0.42187 1.28125,0 2.01562,1.07812 v -0.92187 h 1.04688 v 9.5625 z m -3.60937,-6.125 q 0,1.32812 0.5625,2 0.5625,0.65625 1.34375,0.65625 0.75,0 1.28125,-0.625 0.54687,-0.64063 0.54687,-1.9375 0,-1.375 -0.57812,-2.0625 -0.5625,-0.70313 -1.32813,-0.70313 -0.76562,0 -1.29687,0.65625 -0.53125,0.64063 -0.53125,2.01563 z m 11.14685,3.46875 v -1.01563 q -0.8125,1.17188 -2.1875,1.17188 -0.60938,0 -1.14063,-0.23438 -0.53125,-0.23437 -0.79687,-0.57812 -0.25,-0.35938 -0.35938,-0.875 -0.0625,-0.34375 -0.0625,-1.09375 v -4.28125 h 1.17188 v 3.82812 q 0,0.92188 0.0625,1.23438 0.10937,0.46875 0.46875,0.73437 0.35937,0.25 0.89062,0.25 0.51563,0 0.98438,-0.26562 0.46875,-0.26563 0.65625,-0.73438 0.1875,-0.46875 0.1875,-1.34375 v -3.70312 h 1.17187 v 6.90625 z m 7.6156,-2.21875 1.20312,0.14062 q -0.28125,1.0625 -1.0625,1.65625 -0.76562,0.57813 -1.96875,0.57813 -1.51562,0 -2.40625,-0.9375 -0.89062,-0.9375 -0.89062,-2.60938 0,-1.75 0.89062,-2.70312 0.90625,-0.96875 2.34375,-0.96875 1.39063,0 2.26563,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.15625 q 0.0625,1.14062 0.64062,1.75 0.57813,0.59375 1.4375,0.59375 0.65625,0 1.10938,-0.32813 0.45312,-0.34375 0.71875,-1.07812 z m -3.84375,-1.90625 h 3.85937 q -0.0781,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.45312,-0.6875 -0.8125,0 -1.35938,0.54688 -0.54687,0.53125 -0.60937,1.4375 z m 11.0531,4.125 v -1.01563 q -0.8125,1.17188 -2.1875,1.17188 -0.60938,0 -1.14063,-0.23438 -0.53125,-0.23437 -0.79687,-0.57812 -0.25,-0.35938 -0.35938,-0.875 -0.0625,-0.34375 -0.0625,-1.09375 v -4.28125 h 1.17188 v 3.82812 q 0,0.92188 0.0625,1.23438 0.10937,0.46875 0.46875,0.73437 0.35937,0.25 0.89062,0.25 0.51563,0 0.98438,-0.26562 0.46875,-0.26563 0.65625,-0.73438 0.1875,-0.46875 0.1875,-1.34375 v -3.70312 h 1.17187 v 6.90625 z m 7.6156,-2.21875 1.20312,0.14062 q -0.28125,1.0625 -1.0625,1.65625 -0.76562,0.57813 -1.96875,0.57813 -1.51562,0 -2.40625,-0.9375 -0.89062,-0.9375 -0.89062,-2.60938 0,-1.75 0.89062,-2.70312 0.90625,-0.96875 2.34375,-0.96875 1.39063,0 2.26563,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.15625 q 0.0625,1.14062 0.64062,1.75 0.57813,0.59375 1.4375,0.59375 0.65625,0 1.10938,-0.32813 0.45312,-0.34375 0.71875,-1.07812 z m -3.84375,-1.90625 h 3.85937 q -0.0781,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.45312,-0.6875 -0.8125,0 -1.35938,0.54688 -0.54687,0.53125 -0.60937,1.4375 z m 10.36545,4.125 v -9.54688 h 1.29687 l 5.01563,7.5 v -7.5 h 1.20312 v 9.54688 h -1.29687 l -5.01563,-7.5 v 7.5 z m 9.04703,-3.45313 q 0,-1.92187 1.07812,-2.84375 0.89063,-0.76562 2.17188,-0.76562 1.42187,0 2.32812,0.9375 0.90625,0.92187 0.90625,2.57812 0,1.32813 -0.40625,2.09375 -0.39062,0.76563 -1.15625,1.1875 -0.76562,0.42188 -1.67187,0.42188 -1.45313,0 -2.35938,-0.92188 -0.89062,-0.9375 -0.89062,-2.6875 z m 1.20312,0 q 0,1.32813 0.57813,1.98438 0.59375,0.65625 1.46875,0.65625 0.875,0 1.45312,-0.65625 0.57813,-0.67188 0.57813,-2.03125 0,-1.28125 -0.59375,-1.9375 -0.57813,-0.65625 -1.4375,-0.65625 -0.875,0 -1.46875,0.65625 -0.57813,0.65625 -0.57813,1.98437 z m 11.13123,3.45313 v -0.875 q -0.65625,1.03125 -1.9375,1.03125 -0.8125,0 -1.51563,-0.45313 -0.6875,-0.45312 -1.07812,-1.26562 -0.375,-0.82813 -0.375,-1.89063 0,-1.03125 0.34375,-1.875 0.34375,-0.84375 1.03125,-1.28125 0.70312,-0.45312 1.54687,-0.45312 0.625,0 1.10938,0.26562 0.5,0.25 0.79687,0.67188 v -3.42188 h 1.17188 v 9.54688 z m -3.70313,-3.45313 q 0,1.32813 0.5625,1.98438 0.5625,0.65625 1.32813,0.65625 0.76562,0 1.29687,-0.625 0.53125,-0.625 0.53125,-1.90625 0,-1.42188 -0.54687,-2.07813 -0.54688,-0.67187 -1.34375,-0.67187 -0.78125,0 -1.3125,0.64062 -0.51563,0.625 -0.51563,2 z m 11.3656,1.23438 1.20313,0.14062 q -0.28125,1.0625 -1.0625,1.65625 -0.76563,0.57813 -1.96875,0.57813 -1.51563,0 -2.40625,-0.9375 -0.89063,-0.9375 -0.89063,-2.60938 0,-1.75 0.89063,-2.70312 0.90625,-0.96875 2.34375,-0.96875 1.39062,0 2.26562,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.15625 q 0.0625,1.14062 0.64063,1.75 0.57812,0.59375 1.4375,0.59375 0.65625,0 1.10937,-0.32813 0.45313,-0.34375 0.71875,-1.07812 z m -3.84375,-1.90625 h 3.85938 q -0.0781,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.45313,-0.6875 -0.8125,0 -1.35937,0.54688 -0.54688,0.53125 -0.60938,1.4375 z m 10.36548,4.125 v -9.54688 h 1.29688 l 5.01562,7.5 v -7.5 h 1.20313 v 9.54688 h -1.29688 l -5.01562,-7.5 v 7.5 z m 12.75,-3.45313 q 0,-1.92187 1.07813,-2.84375 0.89062,-0.76562 2.17187,-0.76562 1.42188,0 2.32813,0.9375 0.90625,0.92187 0.90625,2.57812 0,1.32813 -0.40625,2.09375 -0.39063,0.76563 -1.15625,1.1875 -0.76563,0.42188 -1.67188,0.42188 -1.45312,0 -2.35937,-0.92188 -0.89063,-0.9375 -0.89063,-2.6875 z m 1.20313,0 q 0,1.32813 0.57812,1.98438 0.59375,0.65625 1.46875,0.65625 0.875,0 1.45313,-0.65625 0.57812,-0.67188 0.57812,-2.03125 0,-1.28125 -0.59375,-1.9375 -0.57812,-0.65625 -1.4375,-0.65625 -0.875,0 -1.46875,0.65625 -0.57812,0.65625 -0.57812,1.98437 z m 6.9281,3.45313 v -6 h -1.03125 v -0.90625 h 1.03125 v -0.73438 q 0,-0.70312 0.125,-1.04687 0.17187,-0.45313 0.59375,-0.73438 0.42187,-0.28125 1.20312,-0.28125 0.48438,0 1.09375,0.10938 l -0.1875,1.03125 q -0.35937,-0.0625 -0.6875,-0.0625 -0.53125,0 -0.75,0.23437 -0.21875,0.21875 -0.21875,0.84375 v 0.64063 h 1.34375 v 0.90625 h -1.34375 v 6 z m 3.46209,0 v -6 h -1.03125 v -0.90625 h 1.03125 v -0.73438 q 0,-0.70312 0.125,-1.04687 0.17188,-0.45313 0.59375,-0.73438 0.42188,-0.28125 1.20313,-0.28125 0.48437,0 1.09375,0.10938 l -0.1875,1.03125 q -0.35938,-0.0625 -0.6875,-0.0625 -0.53125,0 -0.75,0.23437 -0.21875,0.21875 -0.21875,0.84375 v 0.64063 h 1.34375 v 0.90625 h -1.34375 v 6 z m 2.95301,-2.0625 1.15625,-0.1875 q 0.10937,0.70312 0.54687,1.07812 0.45313,0.35938 1.25,0.35938 0.8125,0 1.20313,-0.32813 0.39062,-0.32812 0.39062,-0.76562 0,-0.39063 -0.35937,-0.625 -0.23438,-0.15625 -1.1875,-0.39063 -1.29688,-0.32812 -1.79688,-0.5625 -0.48437,-0.25 -0.75,-0.65625 -0.25,-0.42187 -0.25,-0.9375 0,-0.45312 0.20313,-0.84375 0.21875,-0.40625 0.57812,-0.67187 0.28125,-0.1875 0.75,-0.32813 0.46875,-0.14062 1.01563,-0.14062 0.8125,0 1.42187,0.23437 0.60938,0.23438 0.90625,0.64063 0.29688,0.39062 0.40625,1.0625 l -1.14062,0.15625 q -0.0781,-0.53125 -0.45313,-0.82813 -0.375,-0.3125 -1.0625,-0.3125 -0.8125,0 -1.15625,0.26563 -0.34375,0.26562 -0.34375,0.625 0,0.23437 0.14063,0.42187 0.15625,0.1875 0.45312,0.3125 0.17188,0.0625 1.03125,0.29688 1.25,0.32812 1.73438,0.54687 0.5,0.20313 0.78125,0.60938 0.28125,0.40625 0.28125,1 0,0.59375 -0.34375,1.10937 -0.34375,0.51563 -1,0.79688 -0.64063,0.28125 -1.45313,0.28125 -1.34375,0 -2.04687,-0.5625 -0.70313,-0.5625 -0.90625,-1.65625 z m 11.86715,-0.15625 1.2032,0.14062 q -0.2813,1.0625 -1.0625,1.65625 -0.76567,0.57813 -1.96879,0.57813 -1.51563,0 -2.40625,-0.9375 -0.89063,-0.9375 -0.89063,-2.60938 0,-1.75 0.89063,-2.70312 0.90625,-0.96875 2.34375,-0.96875 1.39062,0 2.26559,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.15622 q 0.0625,1.14062 0.64063,1.75 0.57812,0.59375 1.4375,0.59375 0.65625,0 1.10937,-0.32813 0.45313,-0.34375 0.71872,-1.07812 z m -3.84372,-1.90625 h 3.85942 q -0.078,-0.85938 -0.43754,-1.29688 -0.5625,-0.6875 -1.45313,-0.6875 -0.8125,0 -1.35937,0.54688 -0.54688,0.53125 -0.60938,1.4375 z m 9.08432,3.07812 0.1719,1.03125 q -0.5,0.10938 -0.8906,0.10938 -0.6406,0 -1,-0.20313 -0.3438,-0.20312 -0.4844,-0.53125 -0.1406,-0.32812 -0.1406,-1.39062 v -3.96875 h -0.8594 v -0.90625 h 0.8594 v -1.71875 l 1.1719,-0.70313 v 2.42188 h 1.1718 v 0.90625 h -1.1718 v 4.04687 q 0,0.5 0.047,0.64063 0.062,0.14062 0.2031,0.23437 0.1406,0.0781 0.4062,0.0781 0.2032,0 0.5157,-0.0469 z"
-       fill-rule="nonzero"
-       id="path376" />
-    <path
-       fill="#000000"
-       fill-opacity="0"
-       d="m 327.9666,40.550037 h 280.09449 v 27.46457 H 327.9666 Z"
-       fill-rule="evenodd"
-       id="path378" />
-    <path
-       fill="#000000"
-       d="m 346.58571,59.006287 1.26562,0.3125 q -0.39062,1.5625 -1.42187,2.375 -1.03125,0.8125 -2.53125,0.8125 -1.53125,0 -2.5,-0.625 -0.96875,-0.625 -1.48438,-1.8125 -0.5,-1.1875 -0.5,-2.5625 0,-1.48438 0.5625,-2.59375 0.57813,-1.10938 1.625,-1.6875 1.0625,-0.57813 2.32813,-0.57813 1.42187,0 2.39062,0.73438 0.98438,0.71875 1.375,2.04687 l -1.25,0.29688 q -0.32812,-1.04688 -0.96875,-1.51563 -0.625,-0.48437 -1.57812,-0.48437 -1.09375,0 -1.84375,0.53125 -0.73438,0.53125 -1.03125,1.42187 -0.29688,0.875 -0.29688,1.82813 0,1.21875 0.34375,2.125 0.35938,0.90625 1.10938,1.35937 0.75,0.4375 1.625,0.4375 1.0625,0 1.79687,-0.60937 0.73438,-0.60938 0.98438,-1.8125 z m 2.68765,-4.84375 v -1.35938 h 1.17188 v 1.35938 z m 0,8.1875 v -6.90625 h 1.17188 v 6.90625 z m 2.92984,0 v -6.90625 h 1.0625 v 1.04687 q 0.40625,-0.73437 0.73438,-0.96875 0.34375,-0.23437 0.76562,-0.23437 0.59375,0 1.20313,0.375 l -0.40625,1.07812 q -0.4375,-0.25 -0.85938,-0.25 -0.39062,0 -0.70312,0.23438 -0.29688,0.23437 -0.42188,0.64062 -0.20312,0.625 -0.20312,1.35938 v 3.625 z m 8.96964,-2.53125 1.15625,0.15625 q -0.1875,1.1875 -0.96875,1.85937 -0.78125,0.67188 -1.92188,0.67188 -1.40625,0 -2.28125,-0.92188 -0.85937,-0.9375 -0.85937,-2.65625 0,-1.125 0.375,-1.96875 0.375,-0.84375 1.125,-1.25 0.76562,-0.42187 1.65625,-0.42187 1.125,0 1.84375,0.57812 0.71875,0.5625 0.92187,1.60938 l -1.14062,0.17187 q -0.17188,-0.70312 -0.59375,-1.04687 -0.40625,-0.35938 -0.98438,-0.35938 -0.89062,0 -1.45312,0.64063 -0.54688,0.64062 -0.54688,2 0,1.40625 0.53125,2.03125 0.54688,0.625 1.40625,0.625 0.6875,0 1.14063,-0.42188 0.46875,-0.42187 0.59375,-1.29687 z m 6.67969,2.53125 v -1.01563 q -0.8125,1.17188 -2.1875,1.17188 -0.60938,0 -1.14063,-0.23438 -0.53125,-0.23437 -0.79687,-0.57812 -0.25,-0.35938 -0.35938,-0.875 -0.0625,-0.34375 -0.0625,-1.09375 v -4.28125 h 1.17188 v 3.82812 q 0,0.92188 0.0625,1.23438 0.10937,0.46875 0.46875,0.73437 0.35937,0.25 0.89062,0.25 0.51563,0 0.98438,-0.26562 0.46875,-0.26563 0.65625,-0.73438 0.1875,-0.46875 0.1875,-1.34375 v -3.70312 h 1.17187 v 6.90625 z m 2.8656,0 v -9.54688 H 371.89 v 9.54688 z m 7.49234,-0.85938 q -0.65625,0.5625 -1.26563,0.79688 -0.59375,0.21875 -1.28125,0.21875 -1.14062,0 -1.75,-0.54688 -0.60937,-0.5625 -0.60937,-1.4375 0,-0.5 0.21875,-0.92187 0.23437,-0.42188 0.60937,-0.67188 0.375,-0.25 0.84375,-0.39062 0.34375,-0.0781 1.04688,-0.17188 1.42187,-0.17187 2.09375,-0.40625 0,-0.23437 0,-0.29687 0,-0.71875 -0.32813,-1.01563 -0.45312,-0.39062 -1.34375,-0.39062 -0.8125,0 -1.21875,0.29687 -0.39062,0.28125 -0.57812,1.01563 l -1.14063,-0.15625 q 0.15625,-0.73438 0.51563,-1.1875 0.35937,-0.45313 1.03125,-0.6875 0.67187,-0.25 1.5625,-0.25 0.89062,0 1.4375,0.20312 0.5625,0.20313 0.8125,0.53125 0.26562,0.3125 0.375,0.79688 0.0469,0.29687 0.0469,1.07812 v 1.5625 q 0,1.625 0.0781,2.0625 0.0781,0.4375 0.29687,0.82813 h -1.21875 q -0.1875,-0.35938 -0.23437,-0.85938 z m -0.0937,-2.60937 q -0.64063,0.26562 -1.92188,0.4375 -0.71875,0.10937 -1.01562,0.25 -0.29688,0.125 -0.46875,0.375 -0.15625,0.25 -0.15625,0.54687 0,0.46875 0.34375,0.78125 0.35937,0.3125 1.04687,0.3125 0.67188,0 1.20313,-0.29687 0.53125,-0.29688 0.78125,-0.8125 0.1875,-0.39063 0.1875,-1.17188 z m 2.97497,3.46875 v -6.90625 h 1.0625 v 1.04687 q 0.40625,-0.73437 0.73438,-0.96875 0.34375,-0.23437 0.76562,-0.23437 0.59375,0 1.20313,0.375 l -0.40625,1.07812 q -0.4375,-0.25 -0.85938,-0.25 -0.39062,0 -0.70312,0.23438 -0.29688,0.23437 -0.42188,0.64062 -0.20312,0.625 -0.20312,1.35938 v 3.625 z m 8.15698,0 v -6.90625 h 1.04688 v 0.96875 q 0.32812,-0.51563 0.85937,-0.8125 0.54688,-0.3125 1.23438,-0.3125 0.78125,0 1.26562,0.3125 0.48438,0.3125 0.6875,0.89062 0.82813,-1.20312 2.14063,-1.20312 1.03125,0 1.57812,0.57812 0.5625,0.5625 0.5625,1.73438 v 4.75 h -1.17187 v -4.35938 q 0,-0.70312 -0.125,-1 -0.10938,-0.3125 -0.40625,-0.5 -0.29688,-0.1875 -0.70313,-0.1875 -0.71875,0 -1.20312,0.48438 -0.48438,0.48437 -0.48438,1.54687 v 4.01563 h -1.17187 v -4.48438 q 0,-0.78125 -0.29688,-1.17187 -0.28125,-0.39063 -0.92187,-0.39063 -0.5,0 -0.92188,0.26563 -0.42187,0.25 -0.60937,0.75 -0.1875,0.5 -0.1875,1.45312 v 3.57813 z m 15.8368,-2.21875 1.20312,0.14062 q -0.28125,1.0625 -1.0625,1.65625 -0.76562,0.57813 -1.96875,0.57813 -1.51562,0 -2.40625,-0.9375 -0.89062,-0.9375 -0.89062,-2.60938 0,-1.75 0.89062,-2.70312 0.90625,-0.96875 2.34375,-0.96875 1.39063,0 2.26563,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.15625 q 0.0625,1.14062 0.64062,1.75 0.57813,0.59375 1.4375,0.59375 0.65625,0 1.10938,-0.32813 0.45312,-0.34375 0.71875,-1.07812 z m -3.84375,-1.90625 h 3.85937 q -0.0781,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.45312,-0.6875 -0.8125,0 -1.35938,0.54688 -0.54687,0.53125 -0.60937,1.4375 z m 6.52185,4.125 v -6.90625 h 1.04687 v 0.96875 q 0.32813,-0.51563 0.85938,-0.8125 0.54687,-0.3125 1.23437,-0.3125 0.78125,0 1.26563,0.3125 0.48437,0.3125 0.6875,0.89062 0.82812,-1.20312 2.14062,-1.20312 1.03125,0 1.57813,0.57812 0.5625,0.5625 0.5625,1.73438 v 4.75 h -1.17188 v -4.35938 q 0,-0.70312 -0.125,-1 -0.10937,-0.3125 -0.40625,-0.5 -0.29687,-0.1875 -0.70312,-0.1875 -0.71875,0 -1.20313,0.48438 -0.48437,0.48437 -0.48437,1.54687 v 4.01563 h -1.17188 v -4.48438 q 0,-0.78125 -0.29687,-1.17187 -0.28125,-0.39063 -0.92188,-0.39063 -0.5,0 -0.92187,0.26563 -0.42188,0.25 -0.60938,0.75 -0.1875,0.5 -0.1875,1.45312 v 3.57813 z m 10.66494,-3.45313 q 0,-1.92187 1.07813,-2.84375 0.89062,-0.76562 2.17187,-0.76562 1.42188,0 2.32813,0.9375 0.90625,0.92187 0.90625,2.57812 0,1.32813 -0.40625,2.09375 -0.39063,0.76563 -1.15625,1.1875 -0.76563,0.42188 -1.67188,0.42188 -1.45312,0 -2.35937,-0.92188 -0.89063,-0.9375 -0.89063,-2.6875 z m 1.20313,0 q 0,1.32813 0.57812,1.98438 0.59375,0.65625 1.46875,0.65625 0.875,0 1.45313,-0.65625 0.57812,-0.67188 0.57812,-2.03125 0,-1.28125 -0.59375,-1.9375 -0.57812,-0.65625 -1.4375,-0.65625 -0.875,0 -1.46875,0.65625 -0.57812,0.65625 -0.57812,1.98437 z m 6.63122,3.45313 v -6.90625 h 1.0625 v 1.04687 q 0.40625,-0.73437 0.73438,-0.96875 0.34375,-0.23437 0.76562,-0.23437 0.59375,0 1.20313,0.375 l -0.40625,1.07812 q -0.4375,-0.25 -0.85938,-0.25 -0.39062,0 -0.70312,0.23438 -0.29688,0.23437 -0.42188,0.64062 -0.20312,0.625 -0.20312,1.35938 v 3.625 z m 4.40711,2.65625 -0.125,-1.09375 q 0.375,0.10937 0.65625,0.10937 0.39062,0 0.625,-0.14062 0.23437,-0.125 0.39062,-0.35938 0.10938,-0.17187 0.35938,-0.875 0.0312,-0.0937 0.10937,-0.28125 l -2.625,-6.92187 h 1.26563 l 1.4375,4 q 0.28125,0.76562 0.5,1.59375 0.20312,-0.79688 0.46875,-1.57813 l 1.48437,-4.01562 h 1.17188 l -2.625,7.01562 q -0.42188,1.14063 -0.65625,1.57813 -0.3125,0.57812 -0.71875,0.84375 -0.40625,0.28125 -0.96875,0.28125 -0.32813,0 -0.75,-0.15625 z m 10.39831,-2.65625 v -9.54688 h 1.17188 v 9.54688 z m 7.49234,-0.85938 q -0.65625,0.5625 -1.26562,0.79688 -0.59375,0.21875 -1.28125,0.21875 -1.14063,0 -1.75,-0.54688 -0.60938,-0.5625 -0.60938,-1.4375 0,-0.5 0.21875,-0.92187 0.23438,-0.42188 0.60938,-0.67188 0.375,-0.25 0.84375,-0.39062 0.34375,-0.0781 1.04687,-0.17188 1.42188,-0.17187 2.09375,-0.40625 0,-0.23437 0,-0.29687 0,-0.71875 -0.32812,-1.01563 -0.45313,-0.39062 -1.34375,-0.39062 -0.8125,0 -1.21875,0.29687 -0.39063,0.28125 -0.57813,1.01563 l -1.14062,-0.15625 q 0.15625,-0.73438 0.51562,-1.1875 0.35938,-0.45313 1.03125,-0.6875 0.67188,-0.25 1.5625,-0.25 0.89063,0 1.4375,0.20312 0.5625,0.20313 0.8125,0.53125 0.26563,0.3125 0.375,0.79688 0.0469,0.29687 0.0469,1.07812 v 1.5625 q 0,1.625 0.0781,2.0625 0.0781,0.4375 0.29688,0.82813 h -1.21875 q -0.1875,-0.35938 -0.23438,-0.85938 z m -0.0937,-2.60937 q -0.64062,0.26562 -1.92187,0.4375 -0.71875,0.10937 -1.01563,0.25 -0.29687,0.125 -0.46875,0.375 -0.15625,0.25 -0.15625,0.54687 0,0.46875 0.34375,0.78125 0.35938,0.3125 1.04688,0.3125 0.67187,0 1.20312,-0.29687 0.53125,-0.29688 0.78125,-0.8125 0.1875,-0.39063 0.1875,-1.17188 z m 2.94373,6.125 -0.125,-1.09375 q 0.375,0.10937 0.65625,0.10937 0.39062,0 0.625,-0.14062 0.23437,-0.125 0.39062,-0.35938 0.10938,-0.17187 0.35938,-0.875 0.0312,-0.0937 0.10937,-0.28125 l -2.625,-6.92187 h 1.26563 l 1.4375,4 q 0.28125,0.76562 0.5,1.59375 0.20312,-0.79688 0.46875,-1.57813 l 1.48437,-4.01562 h 1.17188 l -2.625,7.01562 q -0.42188,1.14063 -0.65625,1.57813 -0.3125,0.57812 -0.71875,0.84375 -0.40625,0.28125 -0.96875,0.28125 -0.32813,0 -0.75,-0.15625 z m 6.27344,-6.10938 q 0,-1.92187 1.07812,-2.84375 0.89063,-0.76562 2.17188,-0.76562 1.42187,0 2.32812,0.9375 0.90625,0.92187 0.90625,2.57812 0,1.32813 -0.40625,2.09375 -0.39062,0.76563 -1.15625,1.1875 -0.76562,0.42188 -1.67187,0.42188 -1.45313,0 -2.35938,-0.92188 -0.89062,-0.9375 -0.89062,-2.6875 z m 1.20312,0 q 0,1.32813 0.57813,1.98438 0.59375,0.65625 1.46875,0.65625 0.875,0 1.45312,-0.65625 0.57813,-0.67188 0.57813,-2.03125 0,-1.28125 -0.59375,-1.9375 -0.57813,-0.65625 -1.4375,-0.65625 -0.875,0 -1.46875,0.65625 -0.57813,0.65625 -0.57813,1.98437 z m 11.1781,3.45313 v -1.01563 q -0.8125,1.17188 -2.1875,1.17188 -0.60937,0 -1.14062,-0.23438 -0.53125,-0.23437 -0.79688,-0.57812 -0.25,-0.35938 -0.35937,-0.875 -0.0625,-0.34375 -0.0625,-1.09375 v -4.28125 h 1.17187 v 3.82812 q 0,0.92188 0.0625,1.23438 0.10938,0.46875 0.46875,0.73437 0.35938,0.25 0.89063,0.25 0.51562,0 0.98437,-0.26562 0.46875,-0.26563 0.65625,-0.73438 0.1875,-0.46875 0.1875,-1.34375 v -3.70312 h 1.17188 v 6.90625 z m 5.44373,-1.04688 0.17187,1.03125 q -0.5,0.10938 -0.89062,0.10938 -0.64063,0 -1,-0.20313 -0.34375,-0.20312 -0.48438,-0.53125 -0.14062,-0.32812 -0.14062,-1.39062 v -3.96875 h -0.85938 v -0.90625 h 0.85938 v -1.71875 l 1.17187,-0.70313 v 2.42188 h 1.17188 v 0.90625 h -1.17188 v 4.04687 q 0,0.5 0.0469,0.64063 0.0625,0.14062 0.20312,0.23437 0.14063,0.0781 0.40625,0.0781 0.20313,0 0.51563,-0.0469 z m 5.12472,1.04688 v -6 h -1.03125 v -0.90625 h 1.03125 v -0.73438 q 0,-0.70312 0.125,-1.04687 0.17188,-0.45313 0.59375,-0.73438 0.42188,-0.28125 1.20313,-0.28125 0.48437,0 1.09375,0.10938 l -0.1875,1.03125 q -0.35938,-0.0625 -0.6875,-0.0625 -0.53125,0 -0.75,0.23437 -0.21875,0.21875 -0.21875,0.84375 v 0.64063 h 1.34375 v 0.90625 h -1.34375 v 6 z m 2.98423,-3.45313 q 0,-1.92187 1.07812,-2.84375 0.89063,-0.76562 2.17188,-0.76562 1.42187,0 2.32812,0.9375 0.90625,0.92187 0.90625,2.57812 0,1.32813 -0.40625,2.09375 -0.39062,0.76563 -1.15625,1.1875 -0.76562,0.42188 -1.67187,0.42188 -1.45313,0 -2.35938,-0.92188 -0.89062,-0.9375 -0.89062,-2.6875 z m 1.20312,0 q 0,1.32813 0.57813,1.98438 0.59375,0.65625 1.46875,0.65625 0.875,0 1.45312,-0.65625 0.57813,-0.67188 0.57813,-2.03125 0,-1.28125 -0.59375,-1.9375 -0.57813,-0.65625 -1.4375,-0.65625 -0.875,0 -1.46875,0.65625 -0.57813,0.65625 -0.57813,1.98437 z m 6.63123,3.45313 v -6.90625 h 1.0625 v 1.04687 q 0.40625,-0.73437 0.73437,-0.96875 0.34375,-0.23437 0.76563,-0.23437 0.59375,0 1.20312,0.375 l -0.40625,1.07812 q -0.4375,-0.25 -0.85937,-0.25 -0.39063,0 -0.70313,0.23438 -0.29687,0.23437 -0.42187,0.64062 -0.20313,0.625 -0.20313,1.35938 v 3.625 z m 8.15698,2.65625 v -9.5625 h 1.07812 v 0.89062 q 0.375,-0.53125 0.84375,-0.78125 0.48438,-0.26562 1.15625,-0.26562 0.875,0 1.54688,0.45312 0.68752,0.45313 1.03122,1.28125 0.3438,0.82813 0.3438,1.82813 0,1.04687 -0.375,1.90625 -0.375,0.84375 -1.1094,1.29687 -0.71875,0.45313 -1.53125,0.45313 -0.57812,0 -1.04687,-0.25 -0.46875,-0.25 -0.76563,-0.625 v 3.375 z m 1.0625,-6.07813 q 0,1.34375 0.53125,1.98438 0.54687,0.625 1.3125,0.625 0.78125,0 1.34375,-0.65625 0.5625,-0.65625 0.5625,-2.04688 0,-1.3125 -0.54688,-1.96875 -0.54687,-0.67187 -1.29687,-0.67187 -0.75,0 -1.32813,0.70312 -0.57812,0.70313 -0.57812,2.03125 z m 11.08432,1.20313 1.2031,0.14062 q -0.2812,1.0625 -1.0625,1.65625 -0.7656,0.57813 -1.9687,0.57813 -1.5156,0 -2.4063,-0.9375 -0.8906,-0.9375 -0.8906,-2.60938 0,-1.75 0.8906,-2.70312 0.9063,-0.96875 2.3438,-0.96875 1.3906,0 2.2656,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.1562 q 0.062,1.14062 0.6406,1.75 0.5781,0.59375 1.4375,0.59375 0.6562,0 1.1094,-0.32813 0.4531,-0.34375 0.7187,-1.07812 z m -3.8437,-1.90625 h 3.8593 q -0.078,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.4531,-0.6875 -0.8125,0 -1.3594,0.54688 -0.5468,0.53125 -0.6093,1.4375 z m 6.5219,4.125 v -6.90625 h 1.0625 v 0.98437 q 0.75,-1.14062 2.1875,-1.14062 0.625,0 1.1562,0.21875 0.5313,0.21875 0.7813,0.59375 0.2656,0.35937 0.375,0.85937 0.062,0.32813 0.062,1.14063 v 4.25 h -1.1719 v -4.20313 q 0,-0.71875 -0.1406,-1.0625 -0.1407,-0.35937 -0.4844,-0.5625 -0.3438,-0.21875 -0.8125,-0.21875 -0.75,0 -1.2969,0.46875 -0.5469,0.46875 -0.5469,1.79688 v 3.78125 z m 11.8968,0 v -0.875 q -0.6562,1.03125 -1.9375,1.03125 -0.8125,0 -1.5156,-0.45313 -0.6875,-0.45312 -1.0781,-1.26562 -0.375,-0.82813 -0.375,-1.89063 0,-1.03125 0.3437,-1.875 0.3438,-0.84375 1.0313,-1.28125 0.7031,-0.45312 1.5468,-0.45312 0.625,0 1.1094,0.26562 0.5,0.25 0.7969,0.67188 v -3.42188 h 1.1719 v 9.54688 z m -3.7031,-3.45313 q 0,1.32813 0.5625,1.98438 0.5625,0.65625 1.3281,0.65625 0.7656,0 1.2969,-0.625 0.5312,-0.625 0.5312,-1.90625 0,-1.42188 -0.5468,-2.07813 -0.5469,-0.67187 -1.3438,-0.67187 -0.7812,0 -1.3125,0.64062 -0.5156,0.625 -0.5156,2 z m 6.6468,-4.73437 v -1.35938 h 1.1719 v 1.35938 z m 0,8.1875 v -6.90625 h 1.1719 v 6.90625 z m 2.9455,0 v -6.90625 h 1.0625 v 0.98437 q 0.75,-1.14062 2.1875,-1.14062 0.625,0 1.1562,0.21875 0.5313,0.21875 0.7813,0.59375 0.2656,0.35937 0.375,0.85937 0.062,0.32813 0.062,1.14063 v 4.25 h -1.1719 v -4.20313 q 0,-0.71875 -0.1406,-1.0625 -0.1407,-0.35937 -0.4844,-0.5625 -0.3438,-0.21875 -0.8125,-0.21875 -0.75,0 -1.2969,0.46875 -0.5469,0.46875 -0.5469,1.79688 v 3.78125 z m 7.1937,0.57812 1.1406,0.15625 q 0.078,0.53125 0.4063,0.78125 0.4375,0.3125 1.1875,0.3125 0.8125,0 1.25,-0.32812 0.4531,-0.3125 0.6093,-0.90625 0.094,-0.35938 0.078,-1.5 -0.7656,0.90625 -1.9062,0.90625 -1.4375,0 -2.2188,-1.03125 -0.7812,-1.03125 -0.7812,-2.46875 0,-0.98438 0.3594,-1.8125 0.3593,-0.84375 1.0312,-1.29688 0.6875,-0.45312 1.6094,-0.45312 1.2187,0 2.0156,0.98437 v -0.82812 h 1.0781 v 5.96875 q 0,1.60937 -0.3281,2.28125 -0.3281,0.6875 -1.0469,1.07812 -0.7031,0.39063 -1.75,0.39063 -1.2343,0 -2,-0.5625 -0.75,-0.5625 -0.7343,-1.67188 z m 0.9844,-4.15625 q 0,1.35938 0.5312,1.98438 0.5469,0.625 1.3594,0.625 0.7969,0 1.3437,-0.625 0.5469,-0.625 0.5469,-1.95313 0,-1.26562 -0.5625,-1.90625 -0.5625,-0.64062 -1.3594,-0.64062 -0.7656,0 -1.3125,0.64062 -0.5468,0.625 -0.5468,1.875 z m 9.8811,1.51563 1.1562,-0.1875 q 0.1094,0.70312 0.5469,1.07812 0.4531,0.35938 1.25,0.35938 0.8125,0 1.2031,-0.32813 0.3907,-0.32812 0.3907,-0.76562 0,-0.39063 -0.3594,-0.625 -0.2344,-0.15625 -1.1875,-0.39063 -1.2969,-0.32812 -1.7969,-0.5625 -0.4844,-0.25 -0.75,-0.65625 -0.25,-0.42187 -0.25,-0.9375 0,-0.45312 0.2031,-0.84375 0.2188,-0.40625 0.5782,-0.67187 0.2812,-0.1875 0.75,-0.32813 0.4687,-0.14062 1.0156,-0.14062 0.8125,0 1.4219,0.23437 0.6093,0.23438 0.9062,0.64063 0.2969,0.39062 0.4063,1.0625 l -1.1407,0.15625 q -0.078,-0.53125 -0.4531,-0.82813 -0.375,-0.3125 -1.0625,-0.3125 -0.8125,0 -1.1562,0.26563 -0.3438,0.26562 -0.3438,0.625 0,0.23437 0.1406,0.42187 0.1563,0.1875 0.4532,0.3125 0.1718,0.0625 1.0312,0.29688 1.25,0.32812 1.7344,0.54687 0.5,0.20313 0.7812,0.60938 0.2813,0.40625 0.2813,1 0,0.59375 -0.3438,1.10937 -0.3437,0.51563 -1,0.79688 -0.6406,0.28125 -1.4531,0.28125 -1.3437,0 -2.0469,-0.5625 -0.7031,-0.5625 -0.9062,-1.65625 z m 9.6953,1.01562 0.1719,1.03125 q -0.5,0.10938 -0.8907,0.10938 -0.6406,0 -1,-0.20313 -0.3437,-0.20312 -0.4843,-0.53125 -0.1407,-0.32812 -0.1407,-1.39062 v -3.96875 h -0.8593 v -0.90625 h 0.8593 v -1.71875 l 1.1719,-0.70313 v 2.42188 h 1.1719 v 0.90625 h -1.1719 v 4.04687 q 0,0.5 0.047,0.64063 0.062,0.14062 0.2031,0.23437 0.1407,0.0781 0.4063,0.0781 0.2031,0 0.5156,-0.0469 z m 1.1249,1.04688 v -6.90625 h 1.0625 v 1.04687 q 0.4062,-0.73437 0.7343,-0.96875 0.3438,-0.23437 0.7657,-0.23437 0.5937,0 1.2031,0.375 l -0.4063,1.07812 q -0.4375,-0.25 -0.8593,-0.25 -0.3907,0 -0.7032,0.23438 -0.2968,0.23437 -0.4218,0.64062 -0.2032,0.625 -0.2032,1.35938 v 3.625 z m 9.1883,-2.21875 1.2031,0.14062 q -0.2812,1.0625 -1.0625,1.65625 -0.7656,0.57813 -1.9687,0.57813 -1.5156,0 -2.4063,-0.9375 -0.8906,-0.9375 -0.8906,-2.60938 0,-1.75 0.8906,-2.70312 0.9063,-0.96875 2.3438,-0.96875 1.3906,0 2.2656,0.9375 0.875,0.9375 0.875,2.65625 0,0.10937 0,0.3125 h -5.1562 q 0.062,1.14062 0.6406,1.75 0.5781,0.59375 1.4375,0.59375 0.6562,0 1.1094,-0.32813 0.4531,-0.34375 0.7187,-1.07812 z m -3.8437,-1.90625 h 3.8593 q -0.078,-0.85938 -0.4375,-1.29688 -0.5625,-0.6875 -1.4531,-0.6875 -0.8125,0 -1.3594,0.54688 -0.5468,0.53125 -0.6093,1.4375 z m 11.0374,3.26562 q -0.6562,0.5625 -1.2656,0.79688 -0.5937,0.21875 -1.2812,0.21875 -1.1407,0 -1.75,-0.54688 -0.6094,-0.5625 -0.6094,-1.4375 0,-0.5 0.2187,-0.92187 0.2344,-0.42188 0.6094,-0.67188 0.375,-0.25 0.8438,-0.39062 0.3437,-0.0781 1.0468,-0.17188 1.4219,-0.17187 2.0938,-0.40625 0,-0.23437 0,-0.29687 0,-0.71875 -0.3281,-1.01563 -0.4532,-0.39062 -1.3438,-0.39062 -0.8125,0 -1.2187,0.29687 -0.3907,0.28125 -0.5782,1.01563 l -1.1406,-0.15625 q 0.1563,-0.73438 0.5156,-1.1875 0.3594,-0.45313 1.0313,-0.6875 0.6719,-0.25 1.5625,-0.25 0.8906,0 1.4375,0.20312 0.5625,0.20313 0.8125,0.53125 0.2656,0.3125 0.375,0.79688 0.047,0.29687 0.047,1.07812 v 1.5625 q 0,1.625 0.078,2.0625 0.078,0.4375 0.2969,0.82813 h -1.2188 q -0.1875,-0.35938 -0.2344,-0.85938 z m -0.094,-2.60937 q -0.6406,0.26562 -1.9218,0.4375 -0.7188,0.10937 -1.0157,0.25 -0.2968,0.125 -0.4687,0.375 -0.1563,0.25 -0.1563,0.54687 0,0.46875 0.3438,0.78125 0.3594,0.3125 1.0469,0.3125 0.6718,0 1.2031,-0.29687 0.5312,-0.29688 0.7812,-0.8125 0.1875,-0.39063 0.1875,-1.17188 z m 2.9906,3.46875 v -6.90625 h 1.0469 v 0.96875 q 0.3281,-0.51563 0.8594,-0.8125 0.5469,-0.3125 1.2344,-0.3125 0.7812,0 1.2656,0.3125 0.4844,0.3125 0.6875,0.89062 0.8281,-1.20312 2.1406,-1.20312 1.0313,0 1.5781,0.57812 0.5625,0.5625 0.5625,1.73438 v 4.75 h -1.1718 v -4.35938 q 0,-0.70312 -0.125,-1 -0.1094,-0.3125 -0.4063,-0.5 -0.2969,-0.1875 -0.7031,-0.1875 -0.7188,0 -1.2031,0.48438 -0.4844,0.48437 -0.4844,1.54687 v 4.01563 h -1.1719 v -4.48438 q 0,-0.78125 -0.2969,-1.17187 -0.2812,-0.39063 -0.9218,-0.39063 -0.5,0 -0.9219,0.26563 -0.4219,0.25 -0.6094,0.75 -0.1875,0.5 -0.1875,1.45312 v 3.57813 z m 10.6337,-2.0625 1.1563,-0.1875 q 0.1093,0.70312 0.5468,1.07812 0.4532,0.35938 1.25,0.35938 0.8125,0 1.2032,-0.32813 0.3906,-0.32812 0.3906,-0.76562 0,-0.39063 -0.3594,-0.625 -0.2344,-0.15625 -1.1875,-0.39063 -1.2969,-0.32812 -1.7969,-0.5625 -0.4843,-0.25 -0.75,-0.65625 -0.25,-0.42187 -0.25,-0.9375 0,-0.45312 0.2032,-0.84375 0.2187,-0.40625 0.5781,-0.67187 0.2812,-0.1875 0.75,-0.32813 0.4687,-0.14062 1.0156,-0.14062 0.8125,0 1.4219,0.23437 0.6094,0.23438 0.9062,0.64063 0.2969,0.39062 0.4063,1.0625 l -1.1406,0.15625 q -0.078,-0.53125 -0.4532,-0.82813 -0.375,-0.3125 -1.0625,-0.3125 -0.8125,0 -1.1562,0.26563 -0.3438,0.26562 -0.3438,0.625 0,0.23437 0.1407,0.42187 0.1562,0.1875 0.4531,0.3125 0.1719,0.0625 1.0312,0.29688 1.25,0.32812 1.7344,0.54687 0.5,0.20313 0.7813,0.60938 0.2812,0.40625 0.2812,1 0,0.59375 -0.3437,1.10937 -0.3438,0.51563 -1,0.79688 -0.6407,0.28125 -1.4532,0.28125 -1.3437,0 -2.0468,-0.5625 -0.7032,-0.5625 -0.9063,-1.65625 z"
-       fill-rule="nonzero"
-       id="path380"
-       style="fill:#88aa00" />
-    <path
-       fill="#000000"
-       fill-opacity="0"
-       d="m 517.42329,154.1406 h 115.4646 v 27.46455 h -115.4646 z"
-       fill-rule="evenodd"
-       id="path382" />
-    <path
-       fill="#000000"
-       d="m 533.48579,171.64496 1.125,0.29687 q -0.3594,1.39063 -1.2813,2.125 -0.9218,0.73438 -2.2656,0.73438 -1.3906,0 -2.2656,-0.5625 -0.875,-0.5625 -1.3281,-1.625 -0.4532,-1.07813 -0.4532,-2.3125 0,-1.34375 0.5157,-2.34375 0.5156,-1 1.4531,-1.51563 0.9531,-0.51562 2.0937,-0.51562 1.2813,0 2.1563,0.65625 0.8906,0.65625 1.2344,1.84375 l -1.125,0.26562 q -0.2969,-0.9375 -0.875,-1.35937 -0.5625,-0.4375 -1.4219,-0.4375 -0.9844,0 -1.6563,0.48437 -0.6562,0.46875 -0.9375,1.26563 -0.2656,0.79687 -0.2656,1.65625 0,1.09375 0.3125,1.90625 0.3281,0.8125 1,1.21875 0.6719,0.40625 1.4688,0.40625 0.9531,0 1.6093,-0.54688 0.6719,-0.54687 0.9063,-1.64062 z m 2.4004,-4.35938 v -1.21875 h 1.0625 v 1.21875 z m 0,7.375 v -6.21875 h 1.0625 v 6.21875 z m 2.6504,0 v -6.21875 h 0.9531 v 0.9375 q 0.3594,-0.65625 0.6563,-0.85937 0.3125,-0.21875 0.6875,-0.21875 0.5312,0 1.0781,0.32812 l -0.3594,0.98438 q -0.3906,-0.23438 -0.7656,-0.23438 -0.3594,0 -0.6406,0.21875 -0.2657,0.20313 -0.375,0.57813 -0.1875,0.5625 -0.1875,1.21875 v 3.26562 z m 8.0742,-2.28125 1.0312,0.14063 q -0.1718,1.0625 -0.875,1.67187 -0.7031,0.60938 -1.7187,0.60938 -1.2813,0 -2.0625,-0.82813 -0.7656,-0.84375 -0.7656,-2.40625 0,-1 0.3281,-1.75 0.3437,-0.76562 1.0156,-1.14062 0.6875,-0.375 1.5,-0.375 1,0 1.6406,0.51562 0.6563,0.5 0.8438,1.45313 l -1.0313,0.15625 q -0.1406,-0.625 -0.5156,-0.9375 -0.375,-0.32813 -0.9062,-0.32813 -0.7969,0 -1.2969,0.57813 -0.5,0.5625 -0.5,1.79687 0,1.26563 0.4844,1.82813 0.4843,0.5625 1.25,0.5625 0.625,0 1.0312,-0.375 0.4219,-0.375 0.5469,-1.17188 z m 6.0156,2.28125 v -0.92187 q -0.7344,1.0625 -1.9844,1.0625 -0.5468,0 -1.0312,-0.20313 -0.4688,-0.21875 -0.7031,-0.53125 -0.2344,-0.32812 -0.3282,-0.79687 -0.062,-0.29688 -0.062,-0.98438 v -3.84375 h 1.0625 v 3.45313 q 0,0.8125 0.062,1.10937 0.094,0.40625 0.4063,0.65625 0.3281,0.23438 0.8125,0.23438 0.4687,0 0.875,-0.23438 0.4219,-0.25 0.5937,-0.67187 0.1875,-0.42188 0.1875,-1.21875 v -3.32813 h 1.0469 v 6.21875 z m 2.5645,0 v -8.59375 h 1.0625 v 8.59375 z m 6.7597,-0.76562 q -0.5937,0.5 -1.1406,0.70312 -0.5312,0.20313 -1.1562,0.20313 -1.0313,0 -1.5782,-0.5 -0.5468,-0.5 -0.5468,-1.28125 0,-0.45313 0.2031,-0.82813 0.2031,-0.39062 0.5469,-0.60937 0.3437,-0.23438 0.7656,-0.34375 0.2969,-0.0937 0.9375,-0.17188 1.2656,-0.14062 1.875,-0.35937 0,-0.21875 0,-0.26563 0,-0.65625 -0.2969,-0.92187 -0.4062,-0.34375 -1.2031,-0.34375 -0.7344,0 -1.0938,0.26562 -0.3593,0.25 -0.5312,0.90625 l -1.0313,-0.14062 q 0.1407,-0.65625 0.4688,-1.0625 0.3281,-0.40625 0.9375,-0.625 0.6094,-0.21875 1.4062,-0.21875 0.7969,0 1.2969,0.1875 0.5,0.1875 0.7344,0.46875 0.2344,0.28125 0.3281,0.71875 0.047,0.26562 0.047,0.96875 v 1.40625 q 0,1.46875 0.062,1.85937 0.078,0.39063 0.2813,0.75 h -1.1094 q -0.1563,-0.32812 -0.2031,-0.76562 z m -0.094,-2.35938 q -0.5781,0.23438 -1.7187,0.40625 -0.6563,0.0937 -0.9219,0.21875 -0.2656,0.10938 -0.4219,0.32813 -0.1406,0.21875 -0.1406,0.5 0,0.42187 0.3125,0.70312 0.3281,0.28125 0.9375,0.28125 0.6094,0 1.0781,-0.26562 0.4844,-0.26563 0.7032,-0.73438 0.1718,-0.35937 0.1718,-1.04687 z m 2.6895,3.125 v -6.21875 h 0.9531 v 0.9375 q 0.3594,-0.65625 0.6563,-0.85937 0.3125,-0.21875 0.6875,-0.21875 0.5312,0 1.0781,0.32812 l -0.3594,0.98438 q -0.3906,-0.23438 -0.7656,-0.23438 -0.3594,0 -0.6406,0.21875 -0.2657,0.20313 -0.375,0.57813 -0.1875,0.5625 -0.1875,1.21875 v 3.26562 z m 8.3144,0 h -0.9843 v -8.59375 h 1.0625 v 3.0625 q 0.6718,-0.82812 1.7031,-0.82812 0.5781,0 1.0781,0.23437 0.5156,0.21875 0.8438,0.64063 0.3437,0.42187 0.5312,1.01562 0.1875,0.59375 0.1875,1.26563 0,1.59375 -0.7969,2.46875 -0.7968,0.875 -1.8906,0.875 -1.1094,0 -1.7344,-0.92188 z m -0.016,-3.15625 q 0,1.10938 0.3125,1.60938 0.5,0.8125 1.3438,0.8125 0.6875,0 1.1875,-0.59375 0.5156,-0.59375 0.5156,-1.79688 0,-1.21875 -0.4844,-1.79687 -0.4843,-0.57813 -1.1718,-0.57813 -0.6875,0 -1.2032,0.60938 -0.5,0.59375 -0.5,1.73437 z m 9.7989,3.15625 v -0.92187 q -0.7344,1.0625 -1.9844,1.0625 -0.5469,0 -1.0313,-0.20313 -0.4687,-0.21875 -0.7031,-0.53125 -0.2344,-0.32812 -0.3281,-0.79687 -0.062,-0.29688 -0.062,-0.98438 v -3.84375 h 1.0625 v 3.45313 q 0,0.8125 0.062,1.10937 0.094,0.40625 0.4062,0.65625 0.3282,0.23438 0.8125,0.23438 0.4688,0 0.875,-0.23438 0.4219,-0.25 0.5938,-0.67187 0.1875,-0.42188 0.1875,-1.21875 v -3.32813 h 1.0469 v 6.21875 z m 2.8457,0 v -5.40625 h -0.9375 v -0.8125 h 0.9375 v -0.67187 q 0,-0.625 0.1093,-0.92188 0.1563,-0.42187 0.5313,-0.67187 0.3906,-0.25 1.0781,-0.25 0.4531,0 0.9844,0.10937 l -0.1563,0.90625 q -0.3281,-0.0469 -0.625,-0.0469 -0.4843,0 -0.6875,0.20312 -0.1875,0.20313 -0.1875,0.76563 v 0.57812 h 1.2188 v 0.8125 h -1.2188 v 5.40625 z m 5.9961,-1.85937 1.0312,-0.15625 q 0.094,0.625 0.4844,0.95312 0.4062,0.32813 1.1406,0.32813 0.7188,0 1.0625,-0.28125 0.3594,-0.29688 0.3594,-0.70313 0,-0.35937 -0.3125,-0.5625 -0.2188,-0.14062 -1.0781,-0.35937 -1.1563,-0.29688 -1.6094,-0.5 -0.4375,-0.21875 -0.6719,-0.59375 -0.2344,-0.375 -0.2344,-0.84375 0,-0.40625 0.1875,-0.76563 0.1875,-0.35937 0.5157,-0.59375 0.25,-0.17187 0.6718,-0.29687 0.4219,-0.125 0.9219,-0.125 0.7188,0 1.2656,0.21875 0.5625,0.20312 0.8282,0.5625 0.2656,0.35937 0.3593,0.95312 l -1.0312,0.14063 q -0.062,-0.46875 -0.4063,-0.73438 -0.3281,-0.28125 -0.9531,-0.28125 -0.7187,0 -1.0312,0.25 -0.3125,0.23438 -0.3125,0.5625 0,0.20313 0.125,0.35938 0.1406,0.17187 0.4062,0.28125 0.1563,0.0625 0.9375,0.26562 1.125,0.3125 1.5625,0.5 0.4375,0.1875 0.6875,0.54688 0.25,0.35937 0.25,0.90625 0,0.53125 -0.3125,1 -0.2969,0.45312 -0.875,0.71875 -0.5781,0.25 -1.3125,0.25 -1.2187,0 -1.8594,-0.5 -0.625,-0.51563 -0.7968,-1.5 z m 8.7187,0.92187 0.1563,0.92188 q -0.4532,0.0937 -0.7969,0.0937 -0.5781,0 -0.8906,-0.17188 -0.3125,-0.1875 -0.4532,-0.48437 -0.125,-0.29688 -0.125,-1.25 v -3.57813 h -0.7656 v -0.8125 h 0.7656 v -1.54687 l 1.0469,-0.625 v 2.17187 h 1.0625 v 0.8125 h -1.0625 v 3.64063 q 0,0.45312 0.047,0.57812 0.062,0.125 0.1875,0.20313 0.125,0.0781 0.3594,0.0781 0.1875,0 0.4687,-0.0312 z m 5.0996,0.17188 q -0.5937,0.5 -1.1406,0.70312 -0.5313,0.20313 -1.1563,0.20313 -1.0312,0 -1.5781,-0.5 -0.5469,-0.5 -0.5469,-1.28125 0,-0.45313 0.2032,-0.82813 0.2031,-0.39062 0.5468,-0.60937 0.3438,-0.23438 0.7657,-0.34375 0.2968,-0.0937 0.9375,-0.17188 1.2656,-0.14062 1.875,-0.35937 0,-0.21875 0,-0.26563 0,-0.65625 -0.2969,-0.92187 -0.4063,-0.34375 -1.2031,-0.34375 -0.7344,0 -1.0938,0.26562 -0.3594,0.25 -0.5312,0.90625 l -1.0313,-0.14062 q 0.1406,-0.65625 0.4688,-1.0625 0.3281,-0.40625 0.9375,-0.625 0.6093,-0.21875 1.4062,-0.21875 0.7969,0 1.2969,0.1875 0.5,0.1875 0.7344,0.46875 0.2343,0.28125 0.3281,0.71875 0.047,0.26562 0.047,0.96875 v 1.40625 q 0,1.46875 0.062,1.85937 0.078,0.39063 0.2812,0.75 h -1.1093 q -0.1563,-0.32812 -0.2032,-0.76562 z m -0.094,-2.35938 q -0.5781,0.23438 -1.7187,0.40625 -0.6563,0.0937 -0.9219,0.21875 -0.2656,0.10938 -0.4219,0.32813 -0.1406,0.21875 -0.1406,0.5 0,0.42187 0.3125,0.70312 0.3281,0.28125 0.9375,0.28125 0.6094,0 1.0781,-0.26562 0.4844,-0.26563 0.7031,-0.73438 0.1719,-0.35937 0.1719,-1.04687 z m 2.6895,3.125 v -6.21875 h 0.9531 v 0.9375 q 0.3594,-0.65625 0.6563,-0.85937 0.3125,-0.21875 0.6875,-0.21875 0.5312,0 1.0781,0.32812 l -0.3594,0.98438 q -0.3906,-0.23438 -0.7656,-0.23438 -0.3594,0 -0.6406,0.21875 -0.2657,0.20313 -0.375,0.57813 -0.1875,0.5625 -0.1875,1.21875 v 3.26562 z m 6.3086,-0.9375 0.1562,0.92188 q -0.4531,0.0937 -0.7969,0.0937 -0.5781,0 -0.8906,-0.17188 -0.3125,-0.1875 -0.4531,-0.48437 -0.125,-0.29688 -0.125,-1.25 v -3.57813 h -0.7656 v -0.8125 h 0.7656 v -1.54687 l 1.0469,-0.625 v 2.17187 h 1.0625 v 0.8125 h -1.0625 v 3.64063 q 0,0.45312 0.047,0.57812 0.062,0.125 0.1875,0.20313 0.125,0.0781 0.3594,0.0781 0.1875,0 0.4687,-0.0312 z"
-       fill-rule="nonzero"
-       id="path384" />
-    <path
-       fill="#000000"
-       fill-opacity="0"
-       d="m 590.79859,181.60515 h -61.2598"
-       fill-rule="evenodd"
-       id="path386" />
-    <path
-       stroke="#595959"
-       stroke-width="1"
-       stroke-linejoin="round"
-       stroke-linecap="butt"
-       stroke-dasharray="8, 3"
-       d="m 590.79859,181.60515 h -55.2598"
-       fill-rule="evenodd"
-       id="path388"
-       style="fill:#00ffcc" />
-    <path
-       fill="#595959"
-       stroke="#595959"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="m 535.53879,179.95344 -4.5381,1.65172 4.5381,1.65173 z"
-       fill-rule="evenodd"
-       id="path390" />
-    <path
-       fill="#000000"
-       fill-opacity="0"
-       d="m 521.92459,298.1406 h 115.4645 v 27.46457 h -115.4645 z"
-       fill-rule="evenodd"
-       id="path392" />
-    <path
-       fill="#000000"
-       d="m 537.98709,315.64498 1.125,0.29687 q -0.3594,1.39063 -1.2813,2.125 -0.9218,0.73438 -2.2656,0.73438 -1.3906,0 -2.2656,-0.5625 -0.875,-0.5625 -1.3281,-1.625 -0.4532,-1.07813 -0.4532,-2.3125 0,-1.34375 0.5157,-2.34375 0.5156,-1 1.4531,-1.51563 0.9531,-0.51562 2.0937,-0.51562 1.2813,0 2.1563,0.65625 0.8906,0.65625 1.2344,1.84375 l -1.125,0.26562 q -0.2969,-0.9375 -0.875,-1.35937 -0.5625,-0.4375 -1.4219,-0.4375 -0.9844,0 -1.6563,0.48437 -0.6562,0.46875 -0.9375,1.26563 -0.2656,0.79687 -0.2656,1.65625 0,1.09375 0.3125,1.90625 0.3281,0.8125 1,1.21875 0.6719,0.40625 1.4688,0.40625 0.9531,0 1.6093,-0.54688 0.6719,-0.54687 0.9063,-1.64062 z m 2.4004,-4.35938 v -1.21875 h 1.0625 v 1.21875 z m 0,7.375 v -6.21875 h 1.0625 v 6.21875 z m 2.6504,0 v -6.21875 h 0.9531 v 0.9375 q 0.3594,-0.65625 0.6563,-0.85937 0.3125,-0.21875 0.6875,-0.21875 0.5312,0 1.0781,0.32812 l -0.3594,0.98438 q -0.3906,-0.23438 -0.7656,-0.23438 -0.3594,0 -0.6406,0.21875 -0.2657,0.20313 -0.375,0.57813 -0.1875,0.5625 -0.1875,1.21875 v 3.26562 z m 8.0742,-2.28125 1.0312,0.14063 q -0.1718,1.0625 -0.875,1.67187 -0.7031,0.60938 -1.7187,0.60938 -1.2813,0 -2.0625,-0.82813 -0.7656,-0.84375 -0.7656,-2.40625 0,-1 0.3281,-1.75 0.3437,-0.76562 1.0156,-1.14062 0.6875,-0.375 1.5,-0.375 1,0 1.6406,0.51562 0.6563,0.5 0.8438,1.45313 l -1.0313,0.15625 q -0.1406,-0.625 -0.5156,-0.9375 -0.375,-0.32813 -0.9062,-0.32813 -0.7969,0 -1.2969,0.57813 -0.5,0.5625 -0.5,1.79687 0,1.26563 0.4844,1.82813 0.4843,0.5625 1.25,0.5625 0.625,0 1.0312,-0.375 0.4219,-0.375 0.5469,-1.17188 z m 6.0156,2.28125 v -0.92187 q -0.7344,1.0625 -1.9844,1.0625 -0.5468,0 -1.0312,-0.20313 -0.4688,-0.21875 -0.7031,-0.53125 -0.2344,-0.32812 -0.3282,-0.79687 -0.062,-0.29688 -0.062,-0.98438 v -3.84375 h 1.0625 v 3.45313 q 0,0.8125 0.062,1.10937 0.094,0.40625 0.4063,0.65625 0.3281,0.23438 0.8125,0.23438 0.4687,0 0.875,-0.23438 0.4219,-0.25 0.5937,-0.67187 0.1875,-0.42188 0.1875,-1.21875 v -3.32813 h 1.0469 v 6.21875 z m 2.5645,0 v -8.59375 h 1.0625 v 8.59375 z m 6.7597,-0.76562 q -0.5937,0.5 -1.1406,0.70312 -0.5312,0.20313 -1.1562,0.20313 -1.0313,0 -1.5782,-0.5 -0.5468,-0.5 -0.5468,-1.28125 0,-0.45313 0.2031,-0.82813 0.2031,-0.39062 0.5469,-0.60937 0.3437,-0.23438 0.7656,-0.34375 0.2969,-0.0937 0.9375,-0.17188 1.2656,-0.14062 1.875,-0.35937 0,-0.21875 0,-0.26563 0,-0.65625 -0.2969,-0.92187 -0.4062,-0.34375 -1.2031,-0.34375 -0.7344,0 -1.0938,0.26562 -0.3593,0.25 -0.5312,0.90625 l -1.0313,-0.14062 q 0.1407,-0.65625 0.4688,-1.0625 0.3281,-0.40625 0.9375,-0.625 0.6094,-0.21875 1.4062,-0.21875 0.7969,0 1.2969,0.1875 0.5,0.1875 0.7344,0.46875 0.2344,0.28125 0.3281,0.71875 0.047,0.26562 0.047,0.96875 v 1.40625 q 0,1.46875 0.062,1.85937 0.078,0.39063 0.2813,0.75 h -1.1094 q -0.1563,-0.32812 -0.2031,-0.76562 z m -0.094,-2.35938 q -0.5781,0.23438 -1.7187,0.40625 -0.6563,0.0937 -0.9219,0.21875 -0.2656,0.10938 -0.4219,0.32813 -0.1406,0.21875 -0.1406,0.5 0,0.42187 0.3125,0.70312 0.3281,0.28125 0.9375,0.28125 0.6094,0 1.0781,-0.26562 0.4844,-0.26563 0.7032,-0.73438 0.1718,-0.35937 0.1718,-1.04687 z m 2.6895,3.125 v -6.21875 h 0.9531 v 0.9375 q 0.3594,-0.65625 0.6563,-0.85937 0.3125,-0.21875 0.6875,-0.21875 0.5312,0 1.0781,0.32812 l -0.3594,0.98438 q -0.3906,-0.23438 -0.7656,-0.23438 -0.3594,0 -0.6406,0.21875 -0.2657,0.20313 -0.375,0.57813 -0.1875,0.5625 -0.1875,1.21875 v 3.26562 z m 8.3144,0 h -0.9843 v -8.59375 h 1.0625 v 3.0625 q 0.6718,-0.82812 1.7031,-0.82812 0.5781,0 1.0781,0.23437 0.5156,0.21875 0.8438,0.64063 0.3437,0.42187 0.5312,1.01562 0.1875,0.59375 0.1875,1.26563 0,1.59375 -0.7969,2.46875 -0.7968,0.875 -1.8906,0.875 -1.1094,0 -1.7344,-0.92188 z m -0.016,-3.15625 q 0,1.10938 0.3125,1.60938 0.5,0.8125 1.3438,0.8125 0.6875,0 1.1875,-0.59375 0.5156,-0.59375 0.5156,-1.79688 0,-1.21875 -0.4844,-1.79687 -0.4843,-0.57813 -1.1718,-0.57813 -0.6875,0 -1.2032,0.60938 -0.5,0.59375 -0.5,1.73437 z m 9.7989,3.15625 v -0.92187 q -0.7344,1.0625 -1.9844,1.0625 -0.5469,0 -1.0313,-0.20313 -0.4687,-0.21875 -0.7031,-0.53125 -0.2344,-0.32812 -0.3281,-0.79687 -0.062,-0.29688 -0.062,-0.98438 v -3.84375 h 1.0625 v 3.45313 q 0,0.8125 0.062,1.10937 0.094,0.40625 0.4062,0.65625 0.3282,0.23438 0.8125,0.23438 0.4688,0 0.875,-0.23438 0.4219,-0.25 0.5938,-0.67187 0.1875,-0.42188 0.1875,-1.21875 v -3.32813 h 1.0469 v 6.21875 z m 2.8457,0 v -5.40625 h -0.9375 v -0.8125 h 0.9375 v -0.67187 q 0,-0.625 0.1093,-0.92188 0.1563,-0.42187 0.5313,-0.67187 0.3906,-0.25 1.0781,-0.25 0.4531,0 0.9844,0.10937 l -0.1563,0.90625 q -0.3281,-0.0469 -0.625,-0.0469 -0.4843,0 -0.6875,0.20312 -0.1875,0.20313 -0.1875,0.76563 v 0.57812 h 1.2188 v 0.8125 h -1.2188 v 5.40625 z m 10.6679,-2 1.0938,0.125 q -0.25,0.95313 -0.9531,1.48438 -0.7032,0.53125 -1.7813,0.53125 -1.3594,0 -2.1719,-0.84375 -0.7968,-0.84375 -0.7968,-2.35938 0,-1.5625 0.8125,-2.42187 0.8125,-0.875 2.0937,-0.875 1.25,0 2.0313,0.84375 0.7968,0.84375 0.7968,2.39062 0,0.0937 0,0.28125 h -4.6406 q 0.062,1.03125 0.5781,1.57813 0.5157,0.53125 1.2969,0.53125 0.5781,0 0.9844,-0.29688 0.4219,-0.3125 0.6562,-0.96875 z m -3.4531,-1.70312 h 3.4688 q -0.062,-0.79688 -0.3907,-1.1875 -0.5156,-0.60938 -1.3125,-0.60938 -0.7343,0 -1.2343,0.48438 -0.4844,0.48437 -0.5313,1.3125 z m 5.877,3.70312 v -6.21875 h 0.9375 v 0.875 q 0.6875,-1.01562 1.9843,-1.01562 0.5625,0 1.0313,0.20312 0.4844,0.20313 0.7187,0.53125 0.2344,0.32813 0.3282,0.76563 0.047,0.29687 0.047,1.03125 v 3.82812 h -1.0469 v -3.78125 q 0,-0.65625 -0.125,-0.96875 -0.125,-0.3125 -0.4375,-0.5 -0.3125,-0.20312 -0.7344,-0.20312 -0.6719,0 -1.1719,0.4375 -0.4843,0.42187 -0.4843,1.60937 v 3.40625 z m 10.705,0 v -0.78125 q -0.5937,0.92188 -1.7343,0.92188 -0.75,0 -1.375,-0.40625 -0.625,-0.42188 -0.9688,-1.15625 -0.3437,-0.73438 -0.3437,-1.6875 0,-0.92188 0.3125,-1.6875 0.3125,-0.76563 0.9375,-1.15625 0.625,-0.40625 1.3906,-0.40625 0.5625,0 1,0.23437 0.4375,0.23438 0.7187,0.60938 v -3.07813 h 1.0469 v 8.59375 z m -3.3281,-3.10937 q 0,1.20312 0.5,1.79687 0.5,0.57813 1.1875,0.57813 0.6875,0 1.1719,-0.5625 0.4844,-0.5625 0.4844,-1.71875 0,-1.28125 -0.5,-1.875 -0.4844,-0.59375 -1.2032,-0.59375 -0.7031,0 -1.1718,0.57812 -0.4688,0.5625 -0.4688,1.79688 z"
-       fill-rule="nonzero"
-       id="path394" />
-    <path
-       fill="#000000"
-       fill-opacity="0"
-       d="m 587.53349,322.39257 h -61.2598"
-       fill-rule="evenodd"
-       id="path396" />
-    <path
-       stroke="#595959"
-       stroke-width="1"
-       stroke-linejoin="round"
-       stroke-linecap="butt"
-       stroke-dasharray="8, 3"
-       d="m 587.53349,322.39257 h -55.2598"
-       fill-rule="evenodd"
-       id="path398"
-       style="fill:#00ffcc" />
-    <path
-       fill="#595959"
-       stroke="#595959"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="m 532.27369,320.74084 -4.5381,1.65173 4.5381,1.65174 z"
-       fill-rule="evenodd"
-       id="path400" />
-    <path
-       fill="#000000"
-       fill-opacity="0"
-       d="M 272.64375,180.18784 358.15556,77.542157"
-       fill-rule="evenodd"
-       id="path402" />
-    <path
-       stroke="#a61c00"
-       stroke-width="1"
-       stroke-linejoin="round"
-       stroke-linecap="butt"
-       stroke-dasharray="1, 3"
-       d="M 272.64375,180.18784 354.31514,82.152067"
-       fill-rule="evenodd"
-       id="path404" />
-    <path
-       fill="#a61c00"
-       stroke="#a61c00"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="m 355.58421,83.209287 1.63562,-4.54392 -4.17374,2.42948 z"
-       fill-rule="evenodd"
-       id="path406" />
-    <path
-       fill="#000000"
-       fill-opacity="0"
-       d="m 272.24478,215.52642 88,105.60629"
-       fill-rule="evenodd"
-       id="path408" />
-    <path
-       stroke="#a61c00"
-       stroke-width="1"
-       stroke-linejoin="round"
-       stroke-linecap="butt"
-       stroke-dasharray="1, 3"
-       d="m 272.24478,215.52642 84.15903,100.99686"
-       fill-rule="evenodd"
-       id="path410" />
-    <path
-       fill="#a61c00"
-       stroke="#a61c00"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="m 355.1349,317.58065 4.17404,2.42899 -1.6362,-4.54374 z"
-       fill-rule="evenodd"
-       id="path412" />
-    <path
-       fill="#000000"
-       fill-opacity="0"
-       d="M 272.24478,368.30334 684.11879,77.531667"
-       fill-rule="evenodd"
-       id="path414" />
-    <path
-       stroke="#274e13"
-       stroke-width="1"
-       stroke-linejoin="round"
-       stroke-linecap="butt"
-       stroke-dasharray="1, 3"
-       d="M 272.24478,368.30334 679.21719,80.992057"
-       fill-rule="evenodd"
-       id="path416" />
-    <path
-       fill="#274e13"
-       stroke="#274e13"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="m 680.16979,82.341417 2.7547,-3.96662 -4.6599,1.2679 z"
-       fill-rule="evenodd"
-       id="path418" />
-    <path
-       fill="#000000"
-       fill-opacity="0"
-       d="M 272.24478,417.58678 688.21329,356.48442"
-       fill-rule="evenodd"
-       id="path420" />
-    <path
-       stroke="#595959"
-       stroke-width="1"
-       stroke-linejoin="round"
-       stroke-linecap="butt"
-       stroke-dasharray="1, 3"
-       d="M 272.24478,417.58678 682.27699,357.35643"
-       fill-rule="evenodd"
-       id="path422" />
-    <path
-       fill="#595959"
-       stroke="#595959"
-       stroke-width="1"
-       stroke-linecap="butt"
-       d="m 682.51709,358.99062 4.2499,-2.29373 -4.73,-0.97467 z"
-       fill-rule="evenodd"
-       id="path424" />
-    <rect
-       style="fill:none;fill-opacity:1;stroke:#741b47;stroke-width:1.1461;stroke-opacity:1"
-       id="rect1"
-       width="860.90546"
-       height="529.77783"
-       x="51.046341"
-       y="34.574326" />
-    <text
-       xml:space="preserve"
-       id="text1"
-       style="white-space:pre;shape-inside:url(#rect2);fill:none;stroke:#741b47;stroke-width:1.151" />
-    <text
-       xml:space="preserve"
-       style="fill:none;stroke:#741b47;stroke-width:1.151"
-       x="159.96594"
-       y="437.608"
-       id="text3"><tspan
-         sodipodi:role="line"
-         id="tspan3"
-         x="159.96594"
-         y="437.608" /></text>
-    <text
-       xml:space="preserve"
-       id="text4"
-       style="fill:none;stroke:#741b47;stroke-width:1.151;white-space:pre;shape-inside:url(#rect5)" />
-    <text
-       xml:space="preserve"
-       id="text6"
-       style="fill:none;stroke:#741b47;stroke-width:1.151;-inkscape-font-specification:Arial;font-family:Arial;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;line-height:0;white-space:pre;shape-inside:url(#rect7)" />
-    <use
-       x="0"
-       y="0"
-       xlink:href="#path290"
-       id="use8" />
-    <text
-       xml:space="preserve"
-       id="text16"
-       style="fill:#000000;-inkscape-font-specification:Arial;font-family:Arial;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;line-height:0;fill-rule:evenodd;fill-opacity:1;white-space:pre;shape-inside:url(#rect16)" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0;font-family:Arial;-inkscape-font-specification:'Arial, Normal';fill:#000000;fill-opacity:1;fill-rule:evenodd;font-size:12px;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
-       x="171.56448"
-       y="438.474"
-       id="text17"><tspan
-         sodipodi:role="line"
-         id="tspan17"
-         x="171.56448"
-         y="438.474">Node 1 xstats</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;fill-opacity:1;fill-rule:evenodd"
-       x="646.48962"
-       y="409.63776"
-       id="text17-1"><tspan
-         sodipodi:role="line"
-         id="tspan17-02"
-         x="646.48962"
-         y="409.63776">Node 1 </tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.33333px;line-height:0;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke-width:0.820641"
-       x="717.65833"
-       y="393.14011"
-       id="text17-1-3"
-       transform="scale(0.96355962,1.0378185)"><tspan
-         sodipodi:role="line"
-         id="tspan17-02-9"
-         x="717.65833"
-         y="393.14011"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.33333px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.820641">xstat 1 </tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.33333px;line-height:0;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke-width:0.820641"
-       x="731.20496"
-       y="421.08084"
-       id="text17-1-3-4"
-       transform="scale(0.96355962,1.0378185)"><tspan
-         sodipodi:role="line"
-         id="tspan17-02-9-9"
-         x="731.20496"
-         y="421.08084"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.33333px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.820641">xstat 1 </tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.33333px;line-height:0;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke-width:0.820641"
-       x="723.08594"
-       y="450.06653"
-       id="text17-1-3-4-5"
-       transform="scale(0.96355962,1.0378185)"><tspan
-         sodipodi:role="line"
-         id="tspan17-02-9-9-6"
-         x="723.08594"
-         y="450.06653"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.33333px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.820641">xstat 1 </tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.33333px;line-height:0;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke-width:0.820641"
-       x="748.5882"
-       y="393.18039"
-       id="text17-1-3-5"
-       transform="scale(0.96355962,1.0378185)"><tspan
-         sodipodi:role="line"
-         id="tspan17-02-9-3"
-         x="748.5882"
-         y="393.18039"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.33333px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.820641">xstat 2 </tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.33333333px;line-height:0;font-family:Arial;-inkscape-font-specification:'Arial, Normal';fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke-width:0.820641;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
-       x="793.07227"
-       y="421.1171"
-       id="text17-1-3-5-7"
-       transform="scale(0.96355962,1.0378185)"><tspan
-         sodipodi:role="line"
-         id="tspan17-02-9-3-6"
-         x="793.07227"
-         y="421.1171"
-         style="stroke-width:0.820641;-inkscape-font-specification:'Arial, Normal';font-family:Arial;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:9.33333333px;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">xstat 2 </tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.33333px;line-height:0;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke-width:0.820641"
-       x="765.38727"
-       y="450.09952"
-       id="text17-1-3-5-7-6"
-       transform="scale(0.96355962,1.0378185)"><tspan
-         sodipodi:role="line"
-         id="tspan17-02-9-3-6-0"
-         x="765.38727"
-         y="450.09952"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.33333px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.820641">xstat 2 </tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.33333333px;line-height:0;font-family:Arial;-inkscape-font-specification:'Arial, Normal';fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke-width:0.820641;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
-       x="763.57843"
-       y="479.1445"
-       id="text17-1-3-5-7-6-7"
-       transform="scale(0.96355962,1.0378185)"><tspan
-         sodipodi:role="line"
-         id="tspan17-02-9-3-6-0-5"
-         x="763.57843"
-         y="479.1445"
-         style="stroke-width:0.820641;-inkscape-font-specification:'Arial, Normal';font-family:Arial;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;font-size:9.33333333px;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">xstat N </tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.33333px;line-height:0;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke-width:0.820641"
-       x="779.73914"
-       y="393.17386"
-       id="text17-1-3-5-6"
-       transform="scale(0.96355962,1.0378185)"><tspan
-         sodipodi:role="line"
-         id="tspan17-02-9-3-5"
-         x="779.73914"
-         y="393.17386"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.33333px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.820641">xstat 3 </tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.33333px;line-height:0;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke-width:0.820641"
-       x="807.05823"
-       y="450.12637"
-       id="text17-1-3-5-6-0"
-       transform="scale(0.96355962,1.0378185)"><tspan
-         sodipodi:role="line"
-         id="tspan17-02-9-3-5-6"
-         x="807.05823"
-         y="450.12637"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.33333px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.820641">xstat 3 </tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.33333px;line-height:0;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke-width:0.820641"
-       x="811.46503"
-       y="393.10345"
-       id="text17-1-3-5-6-9"
-       transform="scale(0.96355962,1.0378185)"><tspan
-         sodipodi:role="line"
-         id="tspan17-02-9-3-5-9"
-         x="811.46503"
-         y="393.10345"
-         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.33333px;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.820641">xstat 4 </tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;fill-opacity:1;fill-rule:evenodd"
-       x="647.08496"
-       y="438.59705"
-       id="text17-1-2"><tspan
-         sodipodi:role="line"
-         id="tspan17-02-6"
-         x="647.08496"
-         y="438.59705">Node 4 </tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;fill-opacity:1;fill-rule:evenodd"
-       x="647.08643"
-       y="468.59579"
-       id="text17-1-2-4"><tspan
-         sodipodi:role="line"
-         id="tspan17-02-6-2"
-         x="647.08643"
-         y="468.59579">Node 8 </tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12px;line-height:0;font-family:Arial;-inkscape-font-specification:'Arial, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#000000;fill-opacity:1;fill-rule:evenodd"
-       x="647.08948"
-       y="498.58841"
-       id="text17-1-2-4-2"><tspan
-         sodipodi:role="line"
-         id="tspan17-02-6-2-1"
-         x="647.08948"
-         y="498.58841">Node N </tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0;font-family:Arial;-inkscape-font-specification:'Arial, Normal';fill:#000000;fill-opacity:1;fill-rule:evenodd;font-size:12px;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
-       x="171.51901"
-       y="463.50073"
-       id="text17-9"><tspan
-         sodipodi:role="line"
-         id="tspan17-0"
-         x="171.51901"
-         y="463.50073">Node 4 xstats</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0;font-family:Arial;-inkscape-font-specification:'Arial, Normal';fill:#000000;fill-opacity:1;fill-rule:evenodd;font-size:12px;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
-       x="171.66028"
-       y="488.6954"
-       id="text17-9-7"><tspan
-         sodipodi:role="line"
-         id="tspan17-0-6"
-         x="171.66028"
-         y="488.6954">Node 8 xstats</tspan></text>
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0;font-family:Arial;-inkscape-font-specification:'Arial, Normal';fill:#000000;fill-opacity:1;fill-rule:evenodd;font-size:12px;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal"
-       x="171.61055"
-       y="513.5614"
-       id="text17-9-7-1"><tspan
-         sodipodi:role="line"
-         id="tspan17-0-6-1"
-         x="171.61055"
-         y="513.5614">Node N xstats</tspan></text>
-    <text
-       xml:space="preserve"
-       id="text18"
-       style="fill:#000000;-inkscape-font-specification:Arial;font-family:Arial;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;line-height:0;fill-rule:evenodd;fill-opacity:1;white-space:pre;shape-inside:url(#rect18)" />
-    <text
-       xml:space="preserve"
-       id="text19"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:0;font-family:Arial;-inkscape-font-specification:Arial;white-space:pre;shape-inside:url(#rect19);fill:#008033;fill-opacity:1;fill-rule:evenodd"
-       transform="translate(9.7511214,-22.752617)"><tspan
-         x="656.57617"
-         y="403.47359"
-         id="tspan2">rte_node xstat memory layout</tspan></text>
-    <text
-       xml:space="preserve"
-       id="text19-3"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:0;font-family:Arial;-inkscape-font-specification:Arial;white-space:pre;shape-inside:url(#rect19-5);fill:#008033;fill-opacity:1;fill-rule:evenodd"
-       transform="matrix(1,0,0,1.3775713,-86.925353,-93.357559)" />
-    <rect
-       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1155cc;stroke-width:0.975519;stroke-opacity:1"
-       id="rect20"
-       width="121.46339"
-       height="119.3132"
-       x="689.06696"
-       y="390.52017" />
-    <path
-       stroke="#1155cc"
-       stroke-width="0.969816"
-       stroke-linecap="butt"
-       d="M 689.31334,480.57387 H 811.05822"
-       fill-rule="nonzero"
-       id="path310-0-5" />
-    <path
-       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#595959;stroke-dasharray:1, 3;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Triangle)"
-       d="M 274.42435,420.14046 C 682.15366,393.93914 683.99234,393.65184 683.99234,393.65184"
-       id="path20"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#595959;stroke-dasharray:1, 3;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#Triangle-0)"
-       d="M 273.95206,520.01368 C 680.76203,508.98154 685.1289,509.15392 685.1289,509.15392"
-       id="path20-9"
-       sodipodi:nodetypes="cc" />
-    <path
-       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1155cc;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 719.87654,390.57304 c -0.0406,30.30974 -0.0406,30.30974 -0.0406,30.30974 v 0"
-       id="path21" />
-    <path
-       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1155cc;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 749.50421,420.67017 c -0.0406,30.30974 -0.0406,30.30974 -0.0406,30.30974 v 0"
-       id="path21-8" />
-    <path
-       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1155cc;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 729.7747,450.11771 c -0.0406,30.30974 -0.0406,30.30974 -0.0406,30.30974 v 0"
-       id="path21-8-6" />
-    <path
-       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1155cc;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 770.41929,450.27903 c -0.0406,30.30974 -0.0406,30.30974 -0.0406,30.30974 v 0"
-       id="path21-8-6-2" />
-    <path
-       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1155cc;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 749.58061,390.87575 c -0.0406,30.30974 -0.0406,30.30974 -0.0406,30.30974 v 0"
-       id="path21-3" />
-    <path
-       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1155cc;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       d="m 779.67339,389.9164 c -0.0406,30.30974 -0.0406,30.30974 -0.0406,30.30974 v 0"
-       id="path21-3-4" />
-    <text
-       xml:space="preserve"
-       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:0;font-family:Arial;-inkscape-font-specification:Arial;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#1155cc;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
-       x="615.2713"
-       y="435.30963"
-       id="text21"><tspan
-         sodipodi:role="line"
-         id="tspan21"
-         x="615.2713"
-         y="435.30963" /></text>
-  </g>
+  <sodipodi:namedview
+     id="namedview56"
+     pagecolor="#505050"
+     bordercolor="#ffffff"
+     borderopacity="1"
+     inkscape:showpageshadow="0"
+     inkscape:pageopacity="0"
+     inkscape:pagecheckerboard="1"
+     inkscape:deskcolor="#d1d1d1"
+     showgrid="false"
+     inkscape:zoom="1.3717872"
+     inkscape:cx="356.83377"
+     inkscape:cy="244.20697"
+     inkscape:window-width="2556"
+     inkscape:window-height="1394"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg56" />
+  <style
+     id="style1">
+    text { font-family: sans-serif; font-size: 12px; }
+    text.title { font-size: 13px; fill: #009900; font-weight: bold; }
+    text.label { fill: #000000; }
+    text.italic { font-style: italic; fill: #666666; font-size: 11px; }
+    text.brace { font-size: 12px; fill: #000000; }
+    rect.cell { fill: #ffffff; stroke: #333333; stroke-width: 1; }
+    rect.header { fill: #f8f8f0; stroke: #333333; stroke-width: 1; }
+    line.arrow { stroke: #999999; stroke-width: 1; stroke-dasharray: 5,3; }
+    line.brace-line { stroke: #000000; stroke-width: 1; }
+  </style>
+  <rect
+     style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-linecap:round;stroke-dasharray:4, 8;stroke-opacity:1;paint-order:markers fill stroke"
+     id="rect2"
+     width="820"
+     height="540"
+     x="0"
+     y="0"
+     sodipodi:insensitive="true" />
+  <path
+     style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#009900;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 8;stroke-dashoffset:0;stroke-opacity:0.733333;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
+     d="m 215.11719,269.87695 365.21484,-112"
+     id="path56"
+     sodipodi:nodetypes="cc" />
+  <!-- ========================== -->
+  <!-- rte_graph object memory layout (left column) -->
+  <!-- ========================== -->
+  <text
+     x="19.517578"
+     y="21.559082"
+     class="title"
+     id="text1"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#3e3e3e;fill-opacity:1">rte_graph object memory layout</text>
+  <!-- Graph Header -->
+  <rect
+     x="35.117188"
+     y="29.876953"
+     width="180"
+     height="40"
+     class="header"
+     id="rect1"
+     style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+  <text
+     x="125.11719"
+     y="44.876953"
+     class="label"
+     text-anchor="middle"
+     id="text2">Graph Header</text>
+  <text
+     x="125.11719"
+     y="59.876953"
+     class="italic"
+     text-anchor="middle"
+     id="text3"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11px;font-family:Monospace;-inkscape-font-specification:'Monospace, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">struct rte_graph</text>
+  <!-- Scheduling table -->
+  <rect
+     x="35.117188"
+     y="109.87695"
+     width="180"
+     height="28"
+     class="cell"
+     id="rect3"
+     style="fill:#b3e7f6;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+  <text
+     x="125.11719"
+     y="128.87695"
+     class="label"
+     text-anchor="middle"
+     id="text4">Scheduling table</text>
+  <!-- Pending bitmap -->
+  <rect
+     x="35.117188"
+     y="137.87695"
+     width="180"
+     height="44.834362"
+     class="cell"
+     id="rect4"
+     style="fill:#fffbda;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+  <text
+     x="125.11719"
+     y="156.87695"
+     class="label"
+     text-anchor="middle"
+     id="text5">Pending bitmap</text>
+  <!-- Source pending bitmap -->
+  <rect
+     x="35.117188"
+     y="182.71132"
+     width="180"
+     height="41.165638"
+     class="cell"
+     id="rect5"
+     style="fill:#fffbda;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+  <text
+     x="125.11719"
+     y="200.87695"
+     class="label"
+     text-anchor="middle"
+     id="text6">Source nodes bitmap</text>
+  <!-- Fence -->
+  <rect
+     x="35.117188"
+     y="69.876953"
+     width="180"
+     height="36"
+     class="header"
+     id="rect6"
+     style="fill:#ffa6a6;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+  <text
+     x="125.11719"
+     y="83.876953"
+     class="label"
+     text-anchor="middle"
+     id="text7">Fence</text>
+  <text
+     x="125.11719"
+     y="97.876953"
+     class="italic"
+     text-anchor="middle"
+     id="text8"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11px;font-family:Monospace;-inkscape-font-specification:'Monospace, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">RTE_GRAPH_FENCE</text>
+  <!-- Node 0 -->
+  <rect
+     x="35.117188"
+     y="229.87695"
+     width="180"
+     height="40"
+     class="cell"
+     id="rect8"
+     style="fill:#d7fbe0;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+  <text
+     x="125.11719"
+     y="246.87695"
+     class="label"
+     text-anchor="middle"
+     id="text9">Node 0</text>
+  <text
+     x="125.11719"
+     y="261.87695"
+     class="italic"
+     text-anchor="middle"
+     id="text10"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11px;font-family:Monospace;-inkscape-font-specification:'Monospace, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">struct rte_node</text>
+  <!-- Node 1 -->
+  <rect
+     x="35.117188"
+     y="269.87695"
+     width="180"
+     height="40"
+     class="cell"
+     id="rect10"
+     style="fill:#d7fbe0;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+  <text
+     x="125.11719"
+     y="286.87695"
+     class="label"
+     text-anchor="middle"
+     id="text11">Node 1</text>
+  <text
+     x="125.11719"
+     y="301.87695"
+     class="italic"
+     text-anchor="middle"
+     id="text12"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11px;font-family:Monospace;-inkscape-font-specification:'Monospace, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">struct rte_node</text>
+  <!-- Node 2 -->
+  <rect
+     x="35.117188"
+     y="309.87695"
+     width="180"
+     height="40"
+     class="cell"
+     id="rect12"
+     style="fill:#d7fbe0;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+  <text
+     x="125.11719"
+     y="326.87695"
+     class="label"
+     text-anchor="middle"
+     id="text13">Node 2</text>
+  <text
+     x="125.11719"
+     y="341.87695"
+     class="italic"
+     text-anchor="middle"
+     id="text14"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11px;font-family:Monospace;-inkscape-font-specification:'Monospace, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">struct rte_node</text>
+  <!-- Node N -->
+  <rect
+     x="35.117188"
+     y="357.87695"
+     width="180"
+     height="40"
+     class="cell"
+     id="rect14"
+     style="fill:#d7fbe0;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+  <text
+     x="125.11719"
+     y="374.87695"
+     class="label"
+     text-anchor="middle"
+     id="text15">Node N</text>
+  <text
+     x="125.11719"
+     y="389.87695"
+     class="italic"
+     text-anchor="middle"
+     id="text16"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11px;font-family:Monospace;-inkscape-font-specification:'Monospace, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">struct rte_node</text>
+  <!-- dots between Node 2 and Node N -->
+  <text
+     x="125.11719"
+     y="353.87695"
+     class="label"
+     text-anchor="middle"
+     id="text17">...</text>
+  <!-- nb_nodes brace -->
+  <line
+     x1="25.117188"
+     y1="229.87695"
+     x2="25.117188"
+     y2="397.87695"
+     class="brace-line"
+     id="line17" />
+  <line
+     x1="25.117188"
+     y1="229.87695"
+     x2="30.117188"
+     y2="229.87695"
+     class="brace-line"
+     id="line18" />
+  <line
+     x1="25.117188"
+     y1="397.87695"
+     x2="30.117188"
+     y2="397.87695"
+     class="brace-line"
+     id="line19" />
+  <text
+     x="-313.87695"
+     y="17.117188"
+     class="brace"
+     text-anchor="middle"
+     transform="rotate(-90)"
+     id="text19">nb_nodes</text>
+  <!-- Node xstats -->
+  <rect
+     x="35.117188"
+     y="405.87695"
+     width="180"
+     height="38.393005"
+     class="cell"
+     id="rect19"
+     style="fill:#fbccff;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+  <text
+     x="125.11719"
+     y="429.54709"
+     class="label"
+     text-anchor="middle"
+     id="text20">Node 1 xstats</text>
+  <!-- ========================== -->
+  <!-- Bitmap scheduling layout (center column) -->
+  <!-- ========================== -->
+  <text
+     x="350.58447"
+     y="19.876953"
+     class="title"
+     id="text24"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#1f297a;fill-opacity:1">Scheduling table</text>
+  <!-- Arrow from scheduling table to bitmap layout -->
+  <rect
+     x="305.11719"
+     y="29.876953"
+     width="200"
+     height="28"
+     class="cell"
+     id="rect24"
+     style="fill:#b3e7f6;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+  <text
+     x="405.11719"
+     y="47.876953"
+     class="label"
+     text-anchor="middle"
+     id="text25">Node 0 offset (prio min)</text>
+  <rect
+     x="305.11719"
+     y="57.876953"
+     width="200"
+     height="28"
+     class="cell"
+     id="rect25"
+     style="fill:#b3e7f6;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+  <text
+     x="405.11719"
+     y="75.876953"
+     class="label"
+     text-anchor="middle"
+     id="text26">Node 1 offset</text>
+  <rect
+     x="305.11719"
+     y="85.876953"
+     width="200"
+     height="28"
+     class="cell"
+     id="rect26"
+     style="fill:#b3e7f6;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+  <text
+     x="405.11719"
+     y="103.87695"
+     class="label"
+     text-anchor="middle"
+     id="text27">Node 2 offset</text>
+  <text
+     x="405.11719"
+     y="121.87695"
+     class="label"
+     text-anchor="middle"
+     id="text28">...</text>
+  <rect
+     x="305.11719"
+     y="127.87695"
+     width="200"
+     height="28"
+     class="cell"
+     id="rect28"
+     style="fill:#b3e7f6;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+  <text
+     x="405.11719"
+     y="145.87695"
+     class="label"
+     text-anchor="middle"
+     id="text29">Node N offset (prio max)</text>
+  <!-- ========================== -->
+  <!-- rte_node object memory layout (right column) -->
+  <!-- ========================== -->
+  <text
+     x="555.31494"
+     y="146.68994"
+     class="title"
+     id="text30"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">rte_node object memory layout</text>
+  <!-- Arrow from Node N to rte_node layout -->
+  <rect
+     x="580.33203"
+     y="157.87695"
+     width="155.55365"
+     height="28"
+     class="cell"
+     id="rect30"
+     style="fill:#d7fbe0;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+  <text
+     x="657.83936"
+     y="175.87695"
+     class="label"
+     text-anchor="middle"
+     id="text31">Fence</text>
+  <rect
+     x="580.33203"
+     y="185.87695"
+     width="155.55365"
+     height="36"
+     class="cell"
+     id="rect31"
+     style="fill:#d7fbe0;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+  <text
+     x="658.2583"
+     y="200.87695"
+     class="label"
+     text-anchor="middle"
+     id="text32">Slowpath area</text>
+  <text
+     x="658.24585"
+     y="214.87695"
+     class="italic"
+     text-anchor="middle"
+     id="text33">(incl. sched_idx)</text>
+  <rect
+     x="580.33203"
+     y="221.87695"
+     width="155.55365"
+     height="28"
+     class="cell"
+     id="rect33"
+     style="fill:#d7fbe0;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+  <text
+     x="657.95068"
+     y="239.87695"
+     class="label"
+     text-anchor="middle"
+     id="text34">Context memory</text>
+  <rect
+     x="580.33203"
+     y="249.87695"
+     width="155.55365"
+     height="28"
+     class="cell"
+     id="rect34"
+     style="fill:#d7fbe0;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+  <text
+     x="658.06494"
+     y="267.87695"
+     class="label"
+     text-anchor="middle"
+     id="text35">Fastpath area</text>
+  <rect
+     x="580.33203"
+     y="277.87695"
+     width="155.55365"
+     height="28"
+     class="cell"
+     id="rect35"
+     style="fill:#d7fbe0;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+  <text
+     x="657.52002"
+     y="295.87695"
+     class="label"
+     text-anchor="middle"
+     id="text36">Next node 0 ptr</text>
+  <rect
+     x="580.33203"
+     y="305.87695"
+     width="155.55365"
+     height="28"
+     class="cell"
+     id="rect36"
+     style="fill:#d7fbe0;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+  <text
+     x="657.52002"
+     y="323.87695"
+     class="label"
+     text-anchor="middle"
+     id="text37">Next node 1 ptr</text>
+  <rect
+     x="580.33203"
+     y="347.87695"
+     width="155.55365"
+     height="28"
+     class="cell"
+     id="rect38"
+     style="fill:#d7fbe0;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+  <text
+     x="657.52002"
+     y="365.87695"
+     class="label"
+     text-anchor="middle"
+     id="text39">Next node N ptr</text>
+  <!-- nb_edges brace -->
+  <line
+     x1="746.33203"
+     y1="277.8587"
+     x2="746.33203"
+     y2="375.8952"
+     class="brace-line"
+     id="line39" />
+  <line
+     x1="741.33203"
+     y1="277.8587"
+     x2="746.33203"
+     y2="277.8587"
+     class="brace-line"
+     id="line40" />
+  <line
+     x1="741.33203"
+     y1="375.8952"
+     x2="746.33203"
+     y2="375.8952"
+     class="brace-line"
+     id="line41" />
+  <text
+     x="784.33203"
+     y="329.87695"
+     class="brace"
+     text-anchor="middle"
+     id="text41">nb_edges</text>
+  <!-- ========================== -->
+  <!-- rte_node xstat memory layout (bottom right) -->
+  <!-- ========================== -->
+  <text
+     x="382.12714"
+     y="403.88254"
+     class="title"
+     id="text42"
+     style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#990091;fill-opacity:1">rte_node xstats memory layout</text>
+  <!-- Arrow from Node N xstats -->
+  <!-- Node 1 xstats: 4 xstats -->
+  <!-- Node 4 xstats: 2 xstats -->
+  <!-- Node 8 xstats: 3 xstats -->
+  <!-- Node N xstats: 1 xstat -->
+  <path
+     style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#009900;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 8;stroke-dashoffset:0;stroke-opacity:0.733333;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
+     d="m 215.11719,309.87695 365.21484,66"
+     id="path57"
+     sodipodi:nodetypes="cc" />
+  <path
+     style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#215fe5;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 8;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
+     d="m 215.11719,109.87695 90,-79.999997"
+     id="path58"
+     sodipodi:nodetypes="cc" />
+  <path
+     style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#215fe5;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 8;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
+     d="m 215.11719,137.87695 90,18"
+     id="path59"
+     sodipodi:nodetypes="cc" />
+  <text
+     x="125.68945"
+     y="172.06445"
+     class="italic"
+     text-anchor="middle"
+     id="text59"
+     style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-anchor:middle;fill:#666666">one uint64_t word per node</text>
+  <text
+     x="125.11719"
+     y="214.87695"
+     class="label"
+     text-anchor="middle"
+     id="text60"
+     style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Italic';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-anchor:middle;fill:#666666;fill-opacity:1">Seeded to pending on walk start</text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-dasharray:4.00001, 8;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke"
+     id="rect22"
+     width="90.698799"
+     height="112.00012"
+     x="439.24158"
+     y="414.93521" />
+  <rect
+     x="439.24158"
+     y="414.93527"
+     width="90.698799"
+     height="22"
+     class="cell"
+     style="fill:#fbccff;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+     id="rect23" />
+  <text
+     x="484.77899"
+     y="429.57541"
+     class="label"
+     text-anchor="middle"
+     style="font-size:10px"
+     id="text23">xstat0</text>
+  <path
+     style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#f04dff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 8;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
+     d="M 215.11719,483.66296 439.24158,526.9353"
+     id="path54"
+     sodipodi:nodetypes="cc" />
+  <rect
+     x="35.117188"
+     y="445.26996"
+     width="180"
+     height="38.393005"
+     class="cell"
+     id="rect54"
+     style="fill:#fbccff;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+  <text
+     x="125.11719"
+     y="468.94009"
+     class="label"
+     text-anchor="middle"
+     id="text56">Node 7 xstats</text>
+  <rect
+     x="35.117188"
+     y="491.9743"
+     width="180"
+     height="38.393005"
+     class="cell"
+     id="rect56"
+     style="fill:#fbccff;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+  <text
+     x="125.11719"
+     y="515.64447"
+     class="label"
+     text-anchor="middle"
+     id="text57">Node N xstats</text>
+  <text
+     x="120.69043"
+     y="488.99603"
+     class="label"
+     text-anchor="middle"
+     id="text58">...</text>
+  <line
+     x1="542.88934"
+     y1="414.93527"
+     x2="542.88934"
+     y2="526.9353"
+     class="brace-line"
+     id="line61" />
+  <line
+     x1="537.88934"
+     y1="414.93527"
+     x2="542.88934"
+     y2="414.93527"
+     class="brace-line"
+     id="line62" />
+  <line
+     x1="537.88934"
+     y1="526.9353"
+     x2="542.88934"
+     y2="526.9353"
+     class="brace-line"
+     id="line63" />
+  <text
+     x="576.78027"
+     y="467.90891"
+     class="brace"
+     text-anchor="middle"
+     id="text63"><tspan
+       sodipodi:role="line"
+       id="tspan63"
+       x="576.78027"
+       y="467.90891">cache</tspan><tspan
+       sodipodi:role="line"
+       id="tspan64"
+       x="576.78027"
+       y="482.90891">line</tspan></text>
+  <rect
+     x="439.24158"
+     y="436.93527"
+     width="90.698799"
+     height="22"
+     class="cell"
+     style="fill:#fbccff;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+     id="rect64" />
+  <text
+     x="484.77899"
+     y="451.57541"
+     class="label"
+     text-anchor="middle"
+     style="font-size:10px"
+     id="text64">xstat1</text>
+  <rect
+     x="439.24158"
+     y="470.93527"
+     width="90.698799"
+     height="22"
+     class="cell"
+     style="fill:#fbccff;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+     id="rect65" />
+  <text
+     x="484.77899"
+     y="485.57541"
+     class="label"
+     text-anchor="middle"
+     style="font-size:10px"
+     id="text65">xstatN</text>
+  <text
+     x="485.8313"
+     y="465.24936"
+     class="label"
+     text-anchor="middle"
+     id="text66">...</text>
+  <path
+     style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#f04dff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 8;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
+     d="M 215.11719,445.26996 439.24158,414.93527"
+     id="path66"
+     sodipodi:nodetypes="cc" />
+  <text
+     x="669.32764"
+     y="342.00354"
+     class="label"
+     text-anchor="middle"
+     id="text67">...</text>
+  <path
+     style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffbb4c;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4, 8;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;marker-end:url(#Triangle);stop-color:#000000;stop-opacity:1"
+     d="M 272.58698,191.75977 221.56049,164.4668"
+     id="path67"
+     sodipodi:nodetypes="cc" />
+  <text
+     x="318.07004"
+     y="192.13014"
+     class="label"
+     text-anchor="middle"
+     id="text68"><tspan
+       sodipodi:role="line"
+       id="tspan68"
+       x="318.07004"
+       y="192.13014">bit set to 1</tspan><tspan
+       sodipodi:role="line"
+       id="tspan69"
+       x="318.07004"
+       y="207.13014">when node has work</tspan></text>
 </svg>
diff --git a/lib/graph/graph.c b/lib/graph/graph.c
index 6911ea8abeed..4bf54e8db74a 100644
--- a/lib/graph/graph.c
+++ b/lib/graph/graph.c
@@ -334,20 +334,6 @@ graph_mem_fixup_secondary(struct rte_graph *graph)
 	return graph_mem_fixup_node_ctx(graph);
 }
 
-static bool
-graph_src_node_avail(struct graph *graph)
-{
-	struct graph_node *graph_node;
-
-	STAILQ_FOREACH(graph_node, &graph->node_list, next)
-		if ((graph_node->node->flags & RTE_NODE_SOURCE_F) &&
-		    (graph_node->node->lcore_id == RTE_MAX_LCORE ||
-		     graph->lcore_id == graph_node->node->lcore_id))
-			return true;
-
-	return false;
-}
-
 RTE_EXPORT_SYMBOL(rte_graph_model_mcore_dispatch_core_bind)
 int
 rte_graph_model_mcore_dispatch_core_bind(rte_graph_t id, int lcore)
@@ -375,9 +361,8 @@ rte_graph_model_mcore_dispatch_core_bind(rte_graph_t id, int lcore)
 	graph->graph->dispatch.lcore_id = graph->lcore_id;
 	graph->socket = rte_lcore_to_socket_id(lcore);
 
-	/* check the availability of source node */
-	if (!graph_src_node_avail(graph))
-		graph->graph->head = 0;
+	/* Rebuild source bitmap with only source nodes bound to this lcore */
+	graph_src_bitmap_rebuild(graph);
 
 	return 0;
 
@@ -484,6 +469,10 @@ rte_graph_create(const char *name, struct rte_graph_param *prm)
 	if (graph_has_isolated_node(graph))
 		goto graph_cleanup;
 
+	/* Compute topological depth for priority-based scheduling */
+	if (graph_topo_order_compute(graph))
+		goto graph_cleanup;
+
 	/* Initialize pcap config. */
 	graph_pcap_enable(prm->pcap_enable);
 
@@ -598,6 +587,10 @@ graph_clone(struct graph *parent_graph, const char *name, struct rte_graph_param
 	if (graph_adjacency_list_update(graph))
 		goto graph_cleanup;
 
+	/* Compute topological depth for priority-based scheduling */
+	if (graph_topo_order_compute(graph))
+		goto graph_cleanup;
+
 	/* Initialize the graph object */
 	graph->src_node_count = parent_graph->src_node_count;
 	graph->node_count = parent_graph->node_count;
diff --git a/lib/graph/graph_debug.c b/lib/graph/graph_debug.c
index e3b8cccdc1f0..8e99fa1b0fb8 100644
--- a/lib/graph/graph_debug.c
+++ b/lib/graph/graph_debug.c
@@ -15,8 +15,8 @@ graph_dump(FILE *f, struct graph *g)
 
 	fprintf(f, "graph <%s>\n", g->name);
 	fprintf(f, "  id=%" PRIu32 "\n", g->id);
-	fprintf(f, "  cir_start=%" PRIu32 "\n", g->cir_start);
-	fprintf(f, "  cir_mask=%" PRIu32 "\n", g->cir_mask);
+	fprintf(f, "  sched_table_off=%" PRIu32 "\n", g->sched_table_off);
+	fprintf(f, "  nb_sched_words=%" PRIu16 "\n", g->nb_sched_words);
 	fprintf(f, "  addr=%p\n", g);
 	fprintf(f, "  graph=%p\n", g->graph);
 	fprintf(f, "  mem_sz=%zu\n", g->mem_sz);
@@ -63,14 +63,14 @@ rte_graph_obj_dump(FILE *f, struct rte_graph *g, bool all)
 
 	fprintf(f, "graph <%s> @ %p\n", g->name, g);
 	fprintf(f, "  id=%" PRIu32 "\n", g->id);
-	fprintf(f, "  head=%" PRId32 "\n", (int32_t)g->head);
-	fprintf(f, "  tail=%" PRId32 "\n", (int32_t)g->tail);
-	fprintf(f, "  cir_mask=0x%" PRIx32 "\n", g->cir_mask);
 	fprintf(f, "  nb_nodes=%" PRId32 "\n", g->nb_nodes);
+	fprintf(f, "  nb_sched_words=%" PRIu16 "\n", g->nb_sched_words);
 	fprintf(f, "  socket=%d\n", g->socket);
 	fprintf(f, "  fence=0x%" PRIx64 "\n", g->fence);
 	fprintf(f, "  nodes_start=0x%" PRIx32 "\n", g->nodes_start);
-	fprintf(f, "  cir_start=%p\n", g->cir_start);
+	fprintf(f, "  sched_table=%p\n", g->sched_table);
+	fprintf(f, "  pending=%p\n", g->pending);
+	fprintf(f, "  src_pending=%p\n", g->src_pending);
 
 	rte_graph_foreach_node(count, off, g, n) {
 		if (!all && n->idx == 0)
diff --git a/lib/graph/graph_ops.c b/lib/graph/graph_ops.c
index a3548ec804f6..6e114ff667be 100644
--- a/lib/graph/graph_ops.c
+++ b/lib/graph/graph_ops.c
@@ -167,3 +167,49 @@ graph_has_isolated_node(struct graph *graph)
 fail:
 	return 1;
 }
+
+int
+graph_topo_order_compute(struct graph *graph)
+{
+	struct graph_node **queue, *v;
+	uint16_t head = 0, tail = 0;
+	struct graph_node *graph_node;
+	rte_node_t nb_nodes;
+	rte_edge_t i;
+	size_t sz;
+
+	nb_nodes = graph_nodes_count(graph);
+	/* Queue may contain duplicates in diamond-shaped graphs */
+	sz = sizeof(struct graph_node *) * nb_nodes * nb_nodes;
+	queue = malloc(sz);
+	if (queue == NULL)
+		SET_ERR_JMP(ENOMEM, fail, "Failed to alloc topo queue");
+
+	STAILQ_FOREACH(graph_node, &graph->node_list, next)
+		graph_node->topo_order = 0;
+
+	STAILQ_FOREACH(graph_node, &graph->node_list, next) {
+		if (graph_node->node->flags & RTE_NODE_SOURCE_F)
+			queue[tail++] = graph_node;
+	}
+
+	while (head != tail) {
+		v = queue[head++];
+		for (i = 0; i < v->node->nb_edges; i++) {
+			struct graph_node *child = v->adjacency_list[i];
+			uint32_t depth = v->topo_order + 1;
+
+			/* Cap depth at nb_nodes to handle cycles */
+			if (depth > child->topo_order && depth <= nb_nodes) {
+				child->topo_order = depth;
+				queue[tail++] = child;
+			}
+		}
+	}
+
+	free(queue);
+	return 0;
+
+fail:
+	return -rte_errno;
+}
diff --git a/lib/graph/graph_populate.c b/lib/graph/graph_populate.c
index 026daecb2122..a05d59a91058 100644
--- a/lib/graph/graph_populate.c
+++ b/lib/graph/graph_populate.c
@@ -3,6 +3,8 @@
  */
 
 
+#include <stdlib.h>
+
 #include <rte_common.h>
 #include <rte_errno.h>
 #include <rte_malloc.h>
@@ -15,19 +17,27 @@ static size_t
 graph_fp_mem_calc_size(struct graph *graph)
 {
 	struct graph_node *graph_node;
-	rte_node_t val;
+	uint16_t nwords;
 	size_t sz;
 
 	/* Graph header */
 	sz = sizeof(struct rte_graph);
-	/* Source nodes list */
-	sz += sizeof(rte_graph_off_t) * graph->src_node_count;
-	/* Circular buffer for pending streams of size number of nodes */
-	val = rte_align32pow2(graph->node_count * sizeof(rte_graph_off_t));
-	sz = RTE_ALIGN(sz, val);
-	graph->cir_start = sz;
-	graph->cir_mask = rte_align32pow2(graph->node_count) - 1;
-	sz += val;
+
+	/* Schedule table: node offset indexed by sched_idx */
+	sz = RTE_ALIGN(sz, RTE_CACHE_LINE_SIZE);
+	graph->sched_table_off = sz;
+	sz += sizeof(rte_graph_off_t) * graph->node_count;
+
+	/* Pending and source pending bitmaps */
+	nwords = (graph->node_count + 63) / 64;
+	graph->nb_sched_words = nwords;
+	sz = RTE_ALIGN(sz, RTE_CACHE_LINE_SIZE);
+	graph->pending_off = sz;
+	sz += sizeof(uint64_t) * nwords;
+	sz = RTE_ALIGN(sz, RTE_CACHE_LINE_SIZE);
+	graph->src_pending_off = sz;
+	sz += sizeof(uint64_t) * nwords;
+
 	/* Fence */
 	sz += sizeof(RTE_GRAPH_FENCE);
 	sz = RTE_ALIGN(sz, RTE_CACHE_LINE_SIZE);
@@ -54,20 +64,46 @@ graph_fp_mem_calc_size(struct graph *graph)
 }
 
 static void
-graph_header_popluate(struct graph *_graph)
+graph_header_populate(struct graph *_graph)
 {
 	struct rte_graph *graph = _graph->graph;
 
-	graph->tail = 0;
-	graph->head = (int32_t)-_graph->src_node_count;
-	graph->cir_mask = _graph->cir_mask;
 	graph->nb_nodes = _graph->node_count;
-	graph->cir_start = RTE_PTR_ADD(graph, _graph->cir_start);
+	graph->nb_sched_words = _graph->nb_sched_words;
+	graph->sched_table = RTE_PTR_ADD(graph, _graph->sched_table_off);
+	graph->pending = RTE_PTR_ADD(graph, _graph->pending_off);
+	graph->src_pending = RTE_PTR_ADD(graph, _graph->src_pending_off);
 	graph->nodes_start = _graph->nodes_start;
 	graph->socket = _graph->socket;
 	graph->id = _graph->id;
 	memcpy(graph->name, _graph->name, RTE_GRAPH_NAMESIZE);
 	graph->fence = RTE_GRAPH_FENCE;
+
+	memset(graph->pending, 0, sizeof(uint64_t) * _graph->nb_sched_words);
+	memset(graph->src_pending, 0, sizeof(uint64_t) * _graph->nb_sched_words);
+}
+
+static int16_t
+graph_node_effective_priority(const struct graph_node *gn)
+{
+	if (gn->node->flags & RTE_NODE_SOURCE_F)
+		return INT16_MIN;
+	return gn->node->priority;
+}
+
+static int
+graph_node_priority_cmp(const void *a, const void *b)
+{
+	const struct graph_node *const *na = a;
+	const struct graph_node *const *nb = b;
+	int16_t pa = graph_node_effective_priority(*na);
+	int16_t pb = graph_node_effective_priority(*nb);
+
+	if (pa != pb)
+		return (int)pa - (int)pb;
+	if ((*na)->topo_order != (*nb)->topo_order)
+		return (int)(*na)->topo_order - (int)(*nb)->topo_order;
+	return (int)(*na)->node->id - (int)(*nb)->node->id;
 }
 
 static void
@@ -76,15 +112,26 @@ graph_nodes_populate(struct graph *_graph)
 	rte_graph_off_t xstat_off = _graph->xstats_start;
 	rte_graph_off_t off = _graph->nodes_start;
 	struct rte_graph *graph = _graph->graph;
-	struct graph_node *graph_node;
+	struct graph_node **sorted, *graph_node;
 	rte_edge_t count, nb_edges;
 	rte_node_t pid;
+	uint32_t n;
 
-	STAILQ_FOREACH(graph_node, &_graph->node_list, next) {
+	/* Build a sorted array of graph_node pointers by (priority, id) */
+	sorted = calloc(_graph->node_count, sizeof(*sorted));
+	RTE_VERIFY(sorted != NULL);
+	n = 0;
+	STAILQ_FOREACH(graph_node, &_graph->node_list, next)
+		sorted[n++] = graph_node;
+	qsort(sorted, n, sizeof(*sorted), graph_node_priority_cmp);
+
+	for (n = 0; n < _graph->node_count; n++) {
+		graph_node = sorted[n];
 		struct rte_node *node = RTE_PTR_ADD(graph, off);
 		memset(node, 0, sizeof(*node));
 		node->fence = RTE_GRAPH_FENCE;
 		node->off = off;
+		node->sched_idx = n;
 		if (graph_pcap_is_enable()) {
 			node->process = graph_pcap_dispatch;
 			node->original_process = graph_node->node->process;
@@ -123,8 +170,14 @@ graph_nodes_populate(struct graph *_graph)
 		off += sizeof(struct rte_node *) * nb_edges;
 		off = RTE_ALIGN(off, RTE_CACHE_LINE_SIZE);
 		node->next = off;
+
+		/* Fill the schedule table */
+		graph->sched_table[n] = node->off;
+
 		__rte_node_stream_alloc(graph, node);
 	}
+
+	free(sorted);
 }
 
 struct rte_node *
@@ -179,12 +232,11 @@ graph_node_nexts_populate(struct graph *_graph)
 }
 
 static int
-graph_src_nodes_offset_populate(struct graph *_graph)
+graph_src_bitmap_populate(struct graph *_graph)
 {
 	struct rte_graph *graph = _graph->graph;
 	struct graph_node *graph_node;
 	struct rte_node *node;
-	int32_t head = -1;
 	const char *name;
 
 	STAILQ_FOREACH(graph_node, &_graph->node_list, next) {
@@ -195,7 +247,7 @@ graph_src_nodes_offset_populate(struct graph *_graph)
 				SET_ERR_JMP(EINVAL, fail, "%s not found", name);
 
 			__rte_node_stream_alloc(graph, node);
-			graph->cir_start[head--] = node->off;
+			__rte_node_pending_set(graph->src_pending, node);
 		}
 	}
 
@@ -204,17 +256,42 @@ graph_src_nodes_offset_populate(struct graph *_graph)
 	return -rte_errno;
 }
 
+void
+graph_src_bitmap_rebuild(struct graph *_graph)
+{
+	struct rte_graph *graph = _graph->graph;
+	struct graph_node *graph_node;
+	struct rte_node *node;
+	const char *name;
+
+	memset(graph->src_pending, 0,
+	       sizeof(uint64_t) * graph->nb_sched_words);
+
+	STAILQ_FOREACH(graph_node, &_graph->node_list, next) {
+		if (!(graph_node->node->flags & RTE_NODE_SOURCE_F))
+			continue;
+		if (graph_node->node->lcore_id != RTE_MAX_LCORE &&
+		    graph_node->node->lcore_id != _graph->lcore_id)
+			continue;
+		name = graph_node->node->name;
+		node = graph_node_name_to_ptr(graph, name);
+		if (node == NULL)
+			continue;
+		__rte_node_pending_set(graph->src_pending, node);
+	}
+}
+
 static int
 graph_fp_mem_populate(struct graph *graph)
 {
 	int rc;
 
-	graph_header_popluate(graph);
+	graph_header_populate(graph);
 	if (graph_pcap_is_enable())
 		graph_pcap_init(graph);
 	graph_nodes_populate(graph);
 	rc = graph_node_nexts_populate(graph);
-	rc |= graph_src_nodes_offset_populate(graph);
+	rc |= graph_src_bitmap_populate(graph);
 
 	return rc;
 }
diff --git a/lib/graph/graph_private.h b/lib/graph/graph_private.h
index 26cdc6637192..2c51a808d3b5 100644
--- a/lib/graph/graph_private.h
+++ b/lib/graph/graph_private.h
@@ -49,6 +49,7 @@ struct node {
 	STAILQ_ENTRY(node) next;      /**< Next node in the list. */
 	char name[RTE_NODE_NAMESIZE]; /**< Name of the node. */
 	uint64_t flags;		      /**< Node configuration flag. */
+	int16_t priority;	      /**< Scheduling priority. */
 	unsigned int lcore_id;
 	/**< Node runs on the Lcore ID used for mcore dispatch model. */
 	rte_node_process_t process;   /**< Node process function. */
@@ -82,6 +83,7 @@ struct graph_node {
 	STAILQ_ENTRY(graph_node) next; /**< Next graph node in the list. */
 	struct node *node; /**< Pointer to internal node. */
 	bool visited;      /**< Flag used in BFS to mark node visited. */
+	uint32_t topo_order; /**< Topological depth from source nodes. */
 	struct graph_node *adjacency_list[]; /**< Adjacency list of the node. */
 };
 
@@ -98,19 +100,23 @@ struct graph {
 	const struct rte_memzone *mz;
 	/**< Memzone to store graph data. */
 	rte_graph_off_t nodes_start;
-	/**< Node memory start offset in graph reel. */
+	/**< Node memory start offset in graph memory. */
 	rte_graph_off_t xstats_start;
-	/**< Node xstats memory start offset in graph reel. */
+	/**< Node xstats memory start offset in graph memory. */
 	rte_node_t src_node_count;
 	/**< Number of source nodes in a graph. */
 	struct rte_graph *graph;
 	/**< Pointer to graph data. */
 	rte_node_t node_count;
 	/**< Total number of nodes. */
-	uint32_t cir_start;
-	/**< Circular buffer start offset in graph reel. */
-	uint32_t cir_mask;
-	/**< Circular buffer mask for wrap around. */
+	uint32_t sched_table_off;
+	/**< Schedule table start offset in graph memory. */
+	uint32_t pending_off;
+	/**< Pending bitmap start offset in graph memory. */
+	uint32_t src_pending_off;
+	/**< Source pending bitmap start offset in graph memory. */
+	uint16_t nb_sched_words;
+	/**< Number of uint64_t words in pending bitmaps. */
 	rte_graph_t id;
 	/**< Graph identifier. */
 	rte_graph_t parent_id;
@@ -347,6 +353,20 @@ rte_node_t graph_nodes_count(struct graph *graph);
  */
 void graph_mark_nodes_as_not_visited(struct graph *graph);
 
+/**
+ * @internal
+ *
+ * Compute topological depth for all nodes via BFS from source nodes.
+ *
+ * @param graph
+ *   Pointer to the internal graph object.
+ *
+ * @return
+ *   - 0: Success.
+ *   - <0: Not enough memory for BFS queue.
+ */
+int graph_topo_order_compute(struct graph *graph);
+
 /* Fast path graph memory populate unctions */
 
 /**
@@ -378,6 +398,16 @@ int graph_fp_mem_create(struct graph *graph);
  */
 int graph_fp_mem_destroy(struct graph *graph);
 
+/**
+ * @internal
+ *
+ * Rebuild the source pending bitmap based on lcore affinity.
+ *
+ * @param graph
+ *   Pointer to the internal graph object.
+ */
+void graph_src_bitmap_rebuild(struct graph *graph);
+
 /* Lookup functions */
 /**
  * @internal
diff --git a/lib/graph/node.c b/lib/graph/node.c
index e3359fe490a5..b5599143b37b 100644
--- a/lib/graph/node.c
+++ b/lib/graph/node.c
@@ -153,6 +153,7 @@ __rte_node_register(const struct rte_node_register *reg)
 	if (rte_strscpy(node->name, reg->name, RTE_NODE_NAMESIZE) < 0)
 		goto free_xstat;
 	node->flags = reg->flags;
+	node->priority = reg->priority;
 	node->process = reg->process;
 	node->init = reg->init;
 	node->fini = reg->fini;
@@ -216,6 +217,7 @@ node_clone(struct node *node, const char *name)
 
 	/* Clone the source node */
 	reg->flags = node->flags;
+	reg->priority = node->priority;
 	reg->process = node->process;
 	reg->init = node->init;
 	reg->fini = node->fini;
diff --git a/lib/graph/rte_graph.h b/lib/graph/rte_graph.h
index 7e433f466129..6cd32ec22284 100644
--- a/lib/graph/rte_graph.h
+++ b/lib/graph/rte_graph.h
@@ -496,6 +496,7 @@ struct rte_node_register {
 	char name[RTE_NODE_NAMESIZE]; /**< Name of the node. */
 	uint64_t flags;		      /**< Node configuration flag. */
 #define RTE_NODE_SOURCE_F (1ULL << 0) /**< Node type is source. */
+	int16_t priority; /**< Scheduling priority (lower = visited first, default 0). */
 	rte_node_process_t process; /**< Node process function. */
 	rte_node_init_t init;       /**< Node init function. */
 	rte_node_fini_t fini;       /**< Node fini function. */
diff --git a/lib/graph/rte_graph_model_mcore_dispatch.h b/lib/graph/rte_graph_model_mcore_dispatch.h
index f9ff3daa88ec..50a473564b56 100644
--- a/lib/graph/rte_graph_model_mcore_dispatch.h
+++ b/lib/graph/rte_graph_model_mcore_dispatch.h
@@ -77,9 +77,13 @@ int rte_graph_model_mcore_dispatch_node_lcore_affinity_set(const char *name,
 							   unsigned int lcore_id);
 
 /**
- * Perform graph walk on the circular buffer and invoke the process function
+ * Perform graph walk on the pending bitmap and invoke the process function
  * of the nodes and collect the stats.
  *
+ * Nodes are visited in scheduling order (lowest priority value first).
+ * Source nodes are seeded into the pending bitmap at the start of each walk.
+ * Nodes with different lcore affinity are dispatched to their target lcore.
+ *
  * @param graph
  *   Graph pointer returned from rte_graph_lookup function.
  *
@@ -88,20 +92,28 @@ int rte_graph_model_mcore_dispatch_node_lcore_affinity_set(const char *name,
 static inline void
 rte_graph_walk_mcore_dispatch(struct rte_graph *graph)
 {
-	const rte_graph_off_t *cir_start = graph->cir_start;
-	const rte_node_t mask = graph->cir_mask;
-	uint32_t head = graph->head;
+	const uint16_t nwords = graph->nb_sched_words;
 	struct rte_node *node;
+	uint16_t word, bit;
 
 	if (graph->dispatch.wq != NULL)
 		__rte_graph_mcore_dispatch_sched_wq_process(graph);
 
-	while (likely(head != graph->tail)) {
-		node = (struct rte_node *)RTE_PTR_ADD(graph, cir_start[(int32_t)head++]);
+	/* Seed pending bitmap with source nodes bound to this lcore */
+	for (word = 0; word < nwords; word++)
+		graph->pending[word] |= graph->src_pending[word];
 
-		/* skip the src nodes which not bind with current worker */
-		if ((int32_t)head < 1 && node->dispatch.lcore_id != graph->dispatch.lcore_id)
-			continue;
+	for (;;) {
+		/* find first word with any pending bit */
+		for (word = 0; word < nwords; word++)
+			if (graph->pending[word])
+				break;
+		if (word == nwords)
+			break; /* no more pending nodes */
+
+		bit = rte_ctz64(graph->pending[word]);
+		graph->pending[word] &= ~(1ULL << bit);
+		node = __rte_graph_pending_node(graph, word, bit);
 
 		/* Schedule the node until all task/objs are done */
 		if (node->dispatch.lcore_id != RTE_MAX_LCORE &&
@@ -111,11 +123,7 @@ rte_graph_walk_mcore_dispatch(struct rte_graph *graph)
 			continue;
 
 		__rte_node_process(graph, node);
-
-		head = likely((int32_t)head > 0) ? head & mask : head;
 	}
-
-	graph->tail = 0;
 }
 
 #ifdef __cplusplus
diff --git a/lib/graph/rte_graph_model_rtc.h b/lib/graph/rte_graph_model_rtc.h
index 4b6236e301e3..38feb3e1ca88 100644
--- a/lib/graph/rte_graph_model_rtc.h
+++ b/lib/graph/rte_graph_model_rtc.h
@@ -6,9 +6,12 @@
 #include "rte_graph_worker_common.h"
 
 /**
- * Perform graph walk on the circular buffer and invoke the process function
+ * Perform graph walk on the pending bitmap and invoke the process function
  * of the nodes and collect the stats.
  *
+ * Nodes are visited in scheduling order (lowest priority value first).
+ * Source nodes are seeded into the pending bitmap at the start of each walk.
+ *
  * @param graph
  *   Graph pointer returned from rte_graph_lookup function.
  *
@@ -17,30 +20,52 @@
 static inline void
 rte_graph_walk_rtc(struct rte_graph *graph)
 {
-	const rte_graph_off_t *cir_start = graph->cir_start;
-	const rte_node_t mask = graph->cir_mask;
-	uint32_t head = graph->head;
+	const uint16_t nwords = graph->nb_sched_words;
 	struct rte_node *node;
+	uint16_t word, bit;
 
 	/*
-	 * Walk on the source node(s) ((cir_start - head) -> cir_start) and then
-	 * on the pending streams (cir_start -> (cir_start + mask) -> cir_start)
-	 * in a circular buffer fashion.
+	 * Nodes are assigned a bit position (sched_idx) sorted by (priority,
+	 * node_id) at graph creation time. Source nodes are forced to INT16_MIN
+	 * priority so they always come first.
 	 *
-	 *	+-----+ <= cir_start - head [number of source nodes]
-	 *	|     |
-	 *	| ... | <= source nodes
-	 *	|     |
-	 *	+-----+ <= cir_start [head = 0] [tail = 0]
-	 *	|     |
-	 *	| ... | <= pending streams
-	 *	|     |
-	 *	+-----+ <= cir_start + mask
+	 * sched_table[] maps bit positions to node offsets:
+	 *
+	 *   pending[]         sched_table[]
+	 *   +----------+      +------------------+
+	 *   | word 0   | ---> | src_node_0       | bit 0 (prio=INT16_MIN)
+	 *   | 1100...1 |      | src_node_1       | bit 1 (prio=INT16_MIN)
+	 *   |          |      | mpls_input       | bit 2 (prio=-10)
+	 *   |          |      | ipv4_input       | bit 3 (prio=0)
+	 *   |          |      | ...              |
+	 *   +----------+      +------------------+
+	 *   | word 1   | ---> | ip4_rewrite      | bit 64 (prio=10)
+	 *   | ...      |      | ...              |
+	 *   +----------+      +------------------+
+	 *
+	 * Walk: for each word, find lowest set bit (rte_ctz64), process that
+	 * node, clear the bit, re-read the word (processing may have set new
+	 * bits), repeat.
+	 *
+	 * After each node is processed, restart scanning from word 0 since
+	 * processing may set bits in any word, including earlier ones.
 	 */
-	while (likely(head != graph->tail)) {
-		node = (struct rte_node *)RTE_PTR_ADD(graph, cir_start[(int32_t)head++]);
+
+	/* Seed pending bitmap with source nodes */
+	for (word = 0; word < nwords; word++)
+		graph->pending[word] |= graph->src_pending[word];
+
+	for (;;) {
+		/* find first word with any pending bit */
+		for (word = 0; word < nwords; word++)
+			if (graph->pending[word])
+				break;
+		if (word == nwords)
+			break; /* no more pending nodes */
+
+		bit = rte_ctz64(graph->pending[word]);
+		graph->pending[word] &= ~(1ULL << bit);
+		node = __rte_graph_pending_node(graph, word, bit);
 		__rte_node_process(graph, node);
-		head = likely((int32_t)head > 0) ? head & mask : head;
 	}
-	graph->tail = 0;
 }
diff --git a/lib/graph/rte_graph_worker.h b/lib/graph/rte_graph_worker.h
index b0f952a82cc9..e513d7a655d9 100644
--- a/lib/graph/rte_graph_worker.h
+++ b/lib/graph/rte_graph_worker.h
@@ -14,7 +14,7 @@ extern "C" {
 #endif
 
 /**
- * Perform graph walk on the circular buffer and invoke the process function
+ * Perform graph walk on the pending bitmap and invoke the process function
  * of the nodes and collect the stats.
  *
  * @param graph
diff --git a/lib/graph/rte_graph_worker_common.h b/lib/graph/rte_graph_worker_common.h
index 4ab53a533e4c..0e60486043d8 100644
--- a/lib/graph/rte_graph_worker_common.h
+++ b/lib/graph/rte_graph_worker_common.h
@@ -49,15 +49,14 @@ SLIST_HEAD(rte_graph_rq_head, rte_graph);
  */
 struct __rte_cache_aligned rte_graph {
 	/* Fast path area. */
-	uint32_t tail;		     /**< Tail of circular buffer. */
-	uint32_t head;		     /**< Head of circular buffer. */
-	uint32_t cir_mask;	     /**< Circular buffer wrap around mask. */
 	rte_node_t nb_nodes;	     /**< Number of nodes in the graph. */
-	rte_graph_off_t *cir_start;  /**< Pointer to circular buffer. */
 	rte_graph_off_t nodes_start; /**< Offset at which node memory starts. */
+	rte_graph_off_t *sched_table; /**< Node offset indexed by sched_idx. */
+	uint64_t *pending;	     /**< Bitmap of pending nodes. */
+	uint64_t *src_pending;	     /**< Bitmap of source nodes (constant). */
+	uint16_t nb_sched_words;     /**< Number of uint64_t words in pending bitmaps. */
 	uint8_t model;		     /**< graph model */
-	uint8_t reserved1;	     /**< Reserved for future use. */
-	uint16_t reserved2;	     /**< Reserved for future use. */
+	/* 26 bytes padding */
 	union {
 		/* Fast schedule area for mcore dispatch model */
 		struct {
@@ -98,6 +97,7 @@ struct __rte_cache_aligned rte_node {
 	rte_node_t id;		/**< Node identifier. */
 	rte_node_t parent_id;	/**< Parent Node identifier. */
 	rte_edge_t nb_edges;	/**< Number of edges from this node. */
+	uint16_t sched_idx;	/**< Bit position in pending bitmap. */
 	uint32_t realloc_count;	/**< Number of times realloced. */
 
 	char parent[RTE_NODE_NAMESIZE];	/**< Parent node name. */
@@ -132,7 +132,7 @@ struct __rte_cache_aligned rte_node {
 		}; /**< Node Context. */
 		uint16_t size;		/**< Total number of objects available. */
 		uint16_t idx;		/**< Number of objects used. */
-		rte_graph_off_t off;	/**< Offset of node in the graph reel. */
+		rte_graph_off_t off;	/**< Offset of node in the graph memory. */
 		uint64_t total_cycles;	/**< Cycles spent in this node. */
 		uint64_t total_calls;	/**< Calls done to this node. */
 		uint64_t total_objs;	/**< Objects processed by this node. */
@@ -187,12 +187,12 @@ void __rte_node_stream_alloc_size(struct rte_graph *graph,
 /**
  * @internal
  *
- * Enqueue a given node to the tail of the graph reel.
+ * Process a node's pending objects and collect stats.
  *
  * @param graph
  *   Pointer Graph object.
  * @param node
- *   Pointer to node object to be enqueued.
+ *   Pointer to node object to be processed.
  */
 static __rte_always_inline void
 __rte_node_process(struct rte_graph *graph, struct rte_node *node)
@@ -220,21 +220,42 @@ __rte_node_process(struct rte_graph *graph, struct rte_node *node)
 /**
  * @internal
  *
- * Enqueue a given node to the tail of the graph reel.
+ * Get a pointer to a node from the scheduling table.
  *
  * @param graph
  *   Pointer Graph object.
+ * @param word
+ *   Offset in the pending bitmap.
+ * @param bit
+ *   Bit number.
+ *
+ * @return
+ *   Pointer to the node.
+ */
+static __rte_always_inline struct rte_node *
+__rte_graph_pending_node(struct rte_graph *graph, uint16_t word, uint16_t bit)
+{
+	const uint16_t index = (word * sizeof(*graph->pending) * CHAR_BIT) + bit;
+	const rte_graph_off_t node_offset = graph->sched_table[index];
+	return RTE_PTR_ADD(graph, node_offset);
+}
+
+/**
+ * @internal
+ *
+ * Mark a node as pending in the graph scheduling bitmap.
+ *
+ * @param bitmap
+ *   Either graph->pending or graph->src_pending.
  * @param node
- *   Pointer to node object to be enqueued.
+ *   Pointer to node object to be marked pending.
  */
 static __rte_always_inline void
-__rte_node_enqueue_tail_update(struct rte_graph *graph, struct rte_node *node)
+__rte_node_pending_set(uint64_t *bitmap, struct rte_node *node)
 {
-	uint32_t tail;
-
-	tail = graph->tail;
-	graph->cir_start[tail++] = node->off;
-	graph->tail = tail & graph->cir_mask;
+	const uint16_t word = node->sched_idx / (sizeof(*bitmap) * CHAR_BIT);
+	const uint16_t bit = node->sched_idx % (sizeof(*bitmap) * CHAR_BIT);
+	bitmap[word] |= 1ULL << bit;
 }
 
 /**
@@ -242,8 +263,8 @@ __rte_node_enqueue_tail_update(struct rte_graph *graph, struct rte_node *node)
  *
  * Enqueue sequence prologue function.
  *
- * Updates the node to tail of graph reel and resizes the number of objects
- * available in the stream as needed.
+ * Marks the node as pending in the scheduling bitmap and resizes the number
+ * of objects available in the stream as needed.
  *
  * @param graph
  *   Pointer to the graph object.
@@ -259,9 +280,8 @@ __rte_node_enqueue_prologue(struct rte_graph *graph, struct rte_node *node,
 			    const uint16_t idx, const uint16_t space)
 {
 
-	/* Add to the pending stream list if the node is new */
 	if (idx == 0)
-		__rte_node_enqueue_tail_update(graph, node);
+		__rte_node_pending_set(graph->pending, node);
 
 	if (unlikely(node->size < (idx + space)))
 		__rte_node_stream_alloc_size(graph, node, node->size + space);
@@ -293,7 +313,7 @@ __rte_node_next_node_get(struct rte_node *node, rte_edge_t next)
 
 /**
  * Enqueue the objs to next node for further processing and set
- * the next node to pending state in the circular buffer.
+ * the next node to pending state in the scheduling bitmap.
  *
  * @param graph
  *   Graph pointer returned from rte_graph_lookup().
@@ -321,7 +341,7 @@ rte_node_enqueue(struct rte_graph *graph, struct rte_node *node,
 
 /**
  * Enqueue only one obj to next node for further processing and
- * set the next node to pending state in the circular buffer.
+ * set the next node to pending state in the scheduling bitmap.
  *
  * @param graph
  *   Graph pointer returned from rte_graph_lookup().
@@ -347,7 +367,7 @@ rte_node_enqueue_x1(struct rte_graph *graph, struct rte_node *node,
 
 /**
  * Enqueue only two objs to next node for further processing and
- * set the next node to pending state in the circular buffer.
+ * set the next node to pending state in the scheduling bitmap.
  * Same as rte_node_enqueue_x1 but enqueue two objs.
  *
  * @param graph
@@ -377,7 +397,7 @@ rte_node_enqueue_x2(struct rte_graph *graph, struct rte_node *node,
 
 /**
  * Enqueue only four objs to next node for further processing and
- * set the next node to pending state in the circular buffer.
+ * set the next node to pending state in the scheduling bitmap.
  * Same as rte_node_enqueue_x1 but enqueue four objs.
  *
  * @param graph
@@ -414,7 +434,7 @@ rte_node_enqueue_x4(struct rte_graph *graph, struct rte_node *node,
 
 /**
  * Enqueue objs to multiple next nodes for further processing and
- * set the next nodes to pending state in the circular buffer.
+ * set the next nodes to pending state in the scheduling bitmap.
  * objs[i] will be enqueued to nexts[i].
  *
  * @param graph
@@ -472,7 +492,7 @@ rte_node_next_stream_get(struct rte_graph *graph, struct rte_node *node,
 }
 
 /**
- * Put the next stream to pending state in the circular buffer
+ * Put the next stream to pending state in the scheduling bitmap
  * for further processing. Should be invoked after rte_node_next_stream_get().
  *
  * @param graph
@@ -496,8 +516,7 @@ rte_node_next_stream_put(struct rte_graph *graph, struct rte_node *node,
 
 	node = __rte_node_next_node_get(node, next);
 	if (node->idx == 0)
-		__rte_node_enqueue_tail_update(graph, node);
-
+		__rte_node_pending_set(graph->pending, node);
 	node->idx += idx;
 }
 
@@ -530,7 +549,7 @@ rte_node_next_stream_move(struct rte_graph *graph, struct rte_node *src,
 		src->objs = dobjs;
 		src->size = dsz;
 		dst->idx = src->idx;
-		__rte_node_enqueue_tail_update(graph, dst);
+		__rte_node_pending_set(graph->pending, dst);
 	} else { /* Move the objects from src node to dst node */
 		rte_node_enqueue(graph, src, next, src->objs, src->idx);
 	}
-- 
2.54.0


^ permalink raw reply related

* [PATCH dpdk v2 1/2] graph: add diamond topology performance test
From: Robin Jarry @ 2026-05-19 21:38 UTC (permalink / raw)
  To: dev, Jerin Jacob, Kiran Kumar K, Nithin Dabilpuram, Zhirun Yan
In-Reply-To: <20260519213822.735891-1-rjarry@redhat.com>

Add a fan-out-then-converge test case to graph_perf_autotest. The
fan_out node sends 50% of objects to a converge node (edge 0) and
50% to a branch node (edge 1). The branch node forwards everything
to the same converge node.

Because converge is edge 0, a FIFO scheduler visits it before the
branch has run, causing two visits at 128 objs/call each. This
topology is used in a follow-up patch to demonstrate the benefit of
priority-based scheduling.

Signed-off-by: Robin Jarry <rjarry@redhat.com>
---
 app/test/test_graph_perf.c | 130 ++++++++++++++++++++++++++++++++++++-
 1 file changed, 129 insertions(+), 1 deletion(-)

diff --git a/app/test/test_graph_perf.c b/app/test/test_graph_perf.c
index 983735c2d9c4..c509d364b826 100644
--- a/app/test/test_graph_perf.c
+++ b/app/test/test_graph_perf.c
@@ -263,7 +263,7 @@ graph_perf_teardown(void)
 }
 
 static inline rte_node_t
-graph_node_get(const char *pname, char *nname)
+graph_node_get(const char *pname, const char *nname)
 {
 	rte_node_t pnode_id = rte_node_from_name(pname);
 	char lookup_name[RTE_NODE_NAMESIZE];
@@ -1042,6 +1042,132 @@ graph_init_parallel_tree(void)
  *	snk_map[][2] = { {50, 50}, {50, 50}, {0, 0}, {0, 0} }
  */
 
+/* Graph Topology: fan-out-then-converge (diamond)
+ *
+ *   src --> fan_out --(50%)-------------------+-> converge --(100%)--> sink
+ *                   `-(50%)--> branch -(100%)-'
+ *
+ * The fan_out node enqueues to converge (edge 0) before branch (edge 1).
+ * With a FIFO scheduler, converge is visited first with only 50% of the
+ * objects, then branch runs and re-enqueues to converge for a second visit.
+ * With priority-based bitmap scheduling, branch (priority -1) runs before
+ * converge (priority 0), so converge accumulates all objects and is visited
+ * only once.
+ */
+static inline int
+graph_init_diamond(void)
+{
+	rte_node_t fan_out, branch, converge, src, snk;
+	struct test_graph_perf *graph_data;
+	struct rte_graph_param gconf = {0};
+	struct test_node_data *node_data;
+	const struct rte_memzone *mz;
+	const char *edge_names[2];
+	char *node_patterns[5];
+	rte_graph_t graph_id;
+
+	mz = rte_memzone_reserve(TEST_GRAPH_PERF_MZ,
+				 sizeof(struct test_graph_perf), 0, 0);
+	if (mz == NULL) {
+		printf("Failed to allocate graph common memory\n");
+		return -ENOMEM;
+	}
+	graph_data = mz->addr;
+	graph_data->nb_nodes = 5;
+	graph_data->node_data = calloc(5, sizeof(struct test_node_data));
+	if (graph_data->node_data == NULL)
+		goto memzone_free;
+
+	/* Clone all nodes */
+	src = graph_node_get(TEST_GRAPH_SRC_NAME, "0");
+	fan_out = graph_node_get(TEST_GRAPH_WRK_NAME, "fan");
+	/* converge must be edge 0 from fan_out so FIFO visits it first */
+	converge = graph_node_get(TEST_GRAPH_WRK_NAME, "conv");
+	branch = graph_node_get(TEST_GRAPH_WRK_NAME, "br");
+	snk = graph_node_get(TEST_GRAPH_SNK_NAME, "0");
+
+	if (src == RTE_NODE_ID_INVALID || fan_out == RTE_NODE_ID_INVALID ||
+	    converge == RTE_NODE_ID_INVALID || branch == RTE_NODE_ID_INVALID ||
+	    snk == RTE_NODE_ID_INVALID) {
+		printf("Failed to create nodes\n");
+		goto data_free;
+	}
+
+	/* src -> fan_out (100%) */
+	edge_names[0] = rte_node_id_to_name(fan_out);
+	rte_node_edge_update(src, 0, edge_names, 1);
+	node_data = &graph_data->node_data[0];
+	node_data->node_id = src;
+	node_data->is_sink = false;
+	node_data->next_nodes[0] = fan_out;
+	node_data->next_percentage[0] = 100;
+
+	/* fan_out: edge 0 -> converge (50%), edge 1 -> branch (50%) */
+	edge_names[0] = rte_node_id_to_name(converge);
+	edge_names[1] = rte_node_id_to_name(branch);
+	rte_node_edge_update(fan_out, 0, edge_names, 2);
+	node_data = &graph_data->node_data[1];
+	node_data->node_id = fan_out;
+	node_data->is_sink = false;
+	node_data->next_nodes[0] = converge;
+	node_data->next_percentage[0] = 50;
+	node_data->next_nodes[1] = branch;
+	node_data->next_percentage[1] = 50;
+
+	/* branch -> converge (100%) */
+	edge_names[0] = rte_node_id_to_name(converge);
+	rte_node_edge_update(branch, 0, edge_names, 1);
+	node_data = &graph_data->node_data[2];
+	node_data->node_id = branch;
+	node_data->is_sink = false;
+	node_data->next_nodes[0] = converge;
+	node_data->next_percentage[0] = 100;
+
+	/* converge -> sink (100%) */
+	edge_names[0] = rte_node_id_to_name(snk);
+	rte_node_edge_update(converge, 0, edge_names, 1);
+	node_data = &graph_data->node_data[3];
+	node_data->node_id = converge;
+	node_data->is_sink = false;
+	node_data->next_nodes[0] = snk;
+	node_data->next_percentage[0] = 100;
+
+	/* sink */
+	node_data = &graph_data->node_data[4];
+	node_data->node_id = snk;
+	node_data->is_sink = true;
+
+	node_patterns[0] = rte_node_id_to_name(src);
+	node_patterns[1] = rte_node_id_to_name(fan_out);
+	node_patterns[2] = rte_node_id_to_name(converge);
+	node_patterns[3] = rte_node_id_to_name(branch);
+	node_patterns[4] = rte_node_id_to_name(snk);
+
+	gconf.socket_id = SOCKET_ID_ANY;
+	gconf.nb_node_patterns = 5;
+	gconf.node_patterns = (const char **)(uintptr_t)node_patterns;
+
+	graph_id = rte_graph_create("graph_diamond", &gconf);
+	if (graph_id == RTE_GRAPH_ID_INVALID) {
+		printf("Graph creation failed with error = %d\n", rte_errno);
+		goto data_free;
+	}
+	graph_data->graph_id = graph_id;
+	return 0;
+
+data_free:
+	free(graph_data->node_data);
+memzone_free:
+	rte_memzone_free(mz);
+	return -ENOMEM;
+}
+
+static inline int
+graph_diamond_1src_1snk(void)
+{
+	return measure_perf();
+}
+
 static struct unit_test_suite graph_perf_testsuite = {
 	.suite_name = "Graph library performance test suite",
 	.setup = graph_perf_setup,
@@ -1061,6 +1187,8 @@ static struct unit_test_suite graph_perf_testsuite = {
 			     graph_reverse_tree_3s_4n_1src_1snk),
 		TEST_CASE_ST(graph_init_parallel_tree, graph_fini,
 			     graph_parallel_tree_5s_4n_4src_4snk),
+		TEST_CASE_ST(graph_init_diamond, graph_fini,
+			     graph_diamond_1src_1snk),
 		TEST_CASES_END(), /**< NULL terminate unit test array */
 	},
 };
-- 
2.54.0


^ permalink raw reply related

* [PATCH dpdk v2 0/2] graph: priority-based bitmap scheduling
From: Robin Jarry @ 2026-05-19 21:38 UTC (permalink / raw)
  To: dev
  Cc: Christophe Fontaine, David Marchand, Jerin Jacob,
	Kiran Kumar Kokkilagadda, Konstantin Ananyev, Maxime Leroy,
	Nithin Kumar Dabilpuram, Vladimir Medvedkin, Zhirun Yan
In-Reply-To: <20260519101232.541102-2-rjarry@redhat.com>

Replace the FIFO circular buffer in rte_graph with a bitmap and a
priority-sorted schedule table. Nodes with lower priority values are
visited first during the graph walk. Source nodes are forced to
INT16_MIN. Topological depth from BFS ensures upstream-before-downstream
ordering when all priorities are equal.

In fan-out-then-converge topologies, setting a higher priority (lower
value) on branch nodes avoids redundant visits to the converge node.
The diamond perf test shows a ~10% throughput improvement (converge
visited once at 256 objs/call instead of twice at 128).

Changes v1 -> v2:
 - added diamond perf test into separate preparatory patch
 - added topological depth (topo_order) as secondary sort key to preserve
   FIFO-like upstream-before-downstream ordering for default priorities,
   preventing a regression in the reverse tree test
 - restored idx == 0 guard on bitmap set in the enqueue path to avoid a
   ~15% throughput regression caused by touching the pending bitmap
   cache line on every enqueue call
 - use hiprio worker nodes in diamond test to demonstrate the actual
   priority-based scheduling benefit
 - added performance numbers measured before and after

Cc: Christophe Fontaine <cfontain@redhat.com>
Cc: David Marchand <david.marchand@redhat.com>
Cc: Jerin Jacob <jerinj@marvell.com>
Cc: Kiran Kumar Kokkilagadda <kirankumark@marvell.com>
Cc: Konstantin Ananyev <konstantin.ananyev@huawei.com>
Cc: Maxime Leroy <maxime@leroys.fr>
Cc: Nithin Kumar Dabilpuram <ndabilpuram@marvell.com>
Cc: Vladimir Medvedkin <vladimir.medvedkin@intel.com>
Cc: Zhirun Yan <yanzhirun_163@163.com>

Robin Jarry (2):
  graph: add diamond topology performance test
  graph: replace circular buffer with priority-based bitmap

 app/test/test_graph_perf.c                    |  140 +-
 doc/guides/prog_guide/graph_lib.rst           |   37 +-
 .../prog_guide/img/graph_mem_layout.svg       | 1823 +++++++----------
 lib/graph/graph.c                             |   27 +-
 lib/graph/graph_debug.c                       |   12 +-
 lib/graph/graph_ops.c                         |   46 +
 lib/graph/graph_populate.c                    |  119 +-
 lib/graph/graph_private.h                     |   42 +-
 lib/graph/node.c                              |    2 +
 lib/graph/rte_graph.h                         |    1 +
 lib/graph/rte_graph_model_mcore_dispatch.h    |   34 +-
 lib/graph/rte_graph_model_rtc.h               |   65 +-
 lib/graph/rte_graph_worker.h                  |    2 +-
 lib/graph/rte_graph_worker_common.h           |   79 +-
 14 files changed, 1194 insertions(+), 1235 deletions(-)

-- 
2.54.0


^ permalink raw reply

* Re: [EXTERNAL] [PATCH dpdk] graph: replace circular buffer with priority-based bitmap scheduling
From: Robin Jarry @ 2026-05-19 21:32 UTC (permalink / raw)
  To: Jerin Jacob, dev@dpdk.org, Kiran Kumar Kokkilagadda,
	Nithin Kumar Dabilpuram, Zhirun Yan
  Cc: Vladimir Medvedkin, Christophe Fontaine, David Marchand,
	Konstantin Ananyev, Maxime Leroy
In-Reply-To: <PH7PR18MB507823DB7B8D54E605C4437CC8002@PH7PR18MB5078.namprd18.prod.outlook.com>

Hi Jerin,

Jerin Jacob, May 19, 2026 at 12:25:
> Some high-level comments:
>
> 1)What will be the performance overhead for graph walk.  Try
>   app/test/test_graph_perf.c and l3fwd_graph

I have made some measurements. There was a regression caused by
systematic access to a cache line. This will be fixed in v2.

> 2)If priorities are same, Does it have similar performance with
>   existing code?

Yes with v2. I have added a topo order as a fallback when all priorities
are equal so that it behaves as previously.

> 3)Does it have any effect on packet ordering on egress.i.e for a given
>   flow ingress order != egress order

Some independent flows "may" be reordered but that depends on the
topology, not the graph walk algorithm.

For example, the following graph:

        +--------+
        | eth_in |
        +--------+
        /        \
       v          v
   +-------+     +---------+
   | ip_in | <-- | mpls_in |
   +-------+     +---------+
       |
       |  ,------------.
       v  v            |
   +--------+     +----------+
   | ip_out | --> | ipip_out |
   +--------+     +----------+
       |
       v
   +---------+
   | eth_out |
   +---------+

If you receive the following stream of packets in "eth_in":

   1. Eth/IP
   2. Eth/IP
   3. Eth/MPLS/IP
   4. Eth/MPLS/IP
   5. Eth/MPLS/IP
   6. Eth/IP (needs IPIP encap)
   7. Eth/IP (needs IPIP encap)
   8. Eth/IP

The "eth_out" node will see:

   1. Eth/IP
   2. Eth/IP
   3. Eth/IP
   4. Eth/IP
   5. Eth/IP
 * 8. Eth/IP <----------- reordered before 6 and 7
   6. Eth/IP/IP
   7. Eth/IP/IP

With the FIFO circular buffer and with the new bitmap priority scheduler.

The only difference with the bitmap system is that If you set "mpls_in"
and "ip_out" higher priorities, the "ip_in" and "eth_out" nodes will be
visited only once.

> If there is performance regression we may need to consider new
> RTE_GRAPH_MODEL_XXXXX to enable this feature


-- 
Robin

> Times approximate.


^ permalink raw reply

* Re: [PATCH 1/2] net/bnxt/tf_core: fix ignored return of EM delete
From: Kishore Padmanabha @ 2026-05-19 21:02 UTC (permalink / raw)
  To: Denis Sergeev; +Cc: dev, ajit.khaparde, stable
In-Reply-To: <20260519044344.9544-2-denserg.edu@gmail.com>


[-- Attachment #1.1: Type: text/plain, Size: 1940 bytes --]

On Tue, May 19, 2026 at 12:44 AM Denis Sergeev <denserg.edu@gmail.com>
wrote:

> The return value of tfc_em_delete_raw() in tfc_em_delete() was
> silently discarded: rc was unconditionally overwritten by the
> subsequent tfc_cpm_get_cmm_inst() call without any error check.
>
> If tfc_em_delete_raw() fails, the HW EM entry is not removed but
> the function continues to free the corresponding SW pool entry,
> creating a HW/SW state inconsistency that can lead to stale flow
> matches or incorrect pool slot reuse.
>
> Add an error check after the call and return -EINVAL on failure.
>
> Found by Linux Verification Center (linuxtesting.org) with SVACE.
>
> Fixes: 80317ff6adfd ("net/bnxt/tf_core: support Thor2")
> Cc: stable@dpdk.org
>
> Signed-off-by: Denis Sergeev <denserg.edu@gmail.com>
> ---
>  drivers/net/bnxt/tf_core/v3/tfc_em.c | 5 +++++
>  1 file changed, 5 insertions(+)
>
> diff --git a/drivers/net/bnxt/tf_core/v3/tfc_em.c
> b/drivers/net/bnxt/tf_core/v3/tfc_em.c
> index 3fe4dbe3fe..4c126dc2f4 100644
> --- a/drivers/net/bnxt/tf_core/v3/tfc_em.c
> +++ b/drivers/net/bnxt/tf_core/v3/tfc_em.c
> @@ -661,6 +661,11 @@ int tfc_em_delete(struct tfc *tfcp, struct
> tfc_em_delete_parms *parms)
>                                &db_offset
>  #endif
>                                );
> +       if (rc != 0) {
> +               PMD_DRV_LOG_LINE(ERR, "tfc_em_delete_raw() failed: %s",
> +                                strerror(-rc));
> +               return -EINVAL;
> +       }
>
>         record_offset = REMOVE_POOL_FROM_OFFSET(pi.lkup_pool_sz_exp,
>                                                 record_offset);
>
This change is not required, even if deletion of the HW entry fails, it
should continue to delete the SW state, since at the end all the HW entries
are invalidated. Have you been able to reproduce a scenario where this
failure is seen.

> --
> 2.50.1
>
>

[-- Attachment #1.2: Type: text/html, Size: 2800 bytes --]

[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 5493 bytes --]

^ permalink raw reply

* Re: [RFC PATCH 0/8] remove use of rte_memcpy from net/intel
From: Stephen Hemminger @ 2026-05-19 19:43 UTC (permalink / raw)
  To: Bruce Richardson; +Cc: dev
In-Reply-To: <20260519160823.1004973-1-bruce.richardson@intel.com>

On Tue, 19 May 2026 16:05:57 +0000
Bruce Richardson <bruce.richardson@intel.com> wrote:

> This RFC proposed to replace all instances of rte_memcpy in Intel
> (and former-Intel) net drivers with just regular memcpy. This is
> done on the basis that the memcpy use is not datapath, but is used
> for flow configuration, virt-channel (to firmware or PF) messaging
> and other control path functions.

Makes sense. You might also want to look for where structure
assignment can be used instead of memcpy. Keeping data types
is a good thing.

^ permalink raw reply

* Re: [PATCH] net/ice: improve log messages for DDP loading
From: Bruce Richardson @ 2026-05-19 17:58 UTC (permalink / raw)
  To: David Marchand; +Cc: dev, patrick.mahan, Anatoly Burakov
In-Reply-To: <20260516101942.443871-1-david.marchand@redhat.com>

On Sat, May 16, 2026 at 12:19:41PM +0200, David Marchand wrote:
> Some nics may not provide a serial number (PCI capability
> RTE_PCI_EXT_CAP_ID_DSN).
> 
> This results in a confusing ERROR log:
> ICE_INIT: ice_dev_init(): Failed to read device serial number
> 
> This is confusing as DDP loading does *not* require the serial number to
> be present for the port to be functional afterwards.
> 
> Besides, after trying various path, if the default DDP is not present on
> the runtime system, the port initialisation ends up with a vague error:
> ICE_INIT: ice_load_pkg(): failed to search file path
> 
> Improve the situation with adjusting the log level when reading the
> SN fails, then add more debug context to DDP file loading and end up
> with a ERROR log mentioning the expected file.
> 
> ICE_INIT: ice_firmware_read(): Cannot read DDP file
> 	/lib/firmware/updates/intel/ice/ddp/ice-b49691ffffe6e69c.pkg
> ICE_INIT: ice_firmware_read(): Cannot read DDP file
> 	/lib/firmware/intel/ice/ddp/ice-b49691ffffe6e69c.pkg
> ICE_INIT: ice_firmware_read(): Cannot read DDP file
> 	/lib/firmware/updates/intel/ice/ddp/ice.pkg
> ICE_INIT: ice_firmware_read(): Cannot read DDP file
> 	/lib/firmware/intel/ice/ddp/ice.pkg
> ICE_INIT: ice_load_pkg(): Failed to load default DDP package
> 	/lib/firmware/intel/ice/ddp/ice.pkg
> 
> Signed-off-by: David Marchand <david.marchand@redhat.com>
> ---
>  drivers/net/intel/ice/ice_ethdev.c | 31 ++++++++++++++++++++----------
>  1 file changed, 21 insertions(+), 10 deletions(-)
> 
On top of the changes made in this patch, how about something like the
below to extend things?

Rather than just debug logging the failed paths, we change the debug logs
to always log each load attempt. We also record the path as it's attempted,
and then on failure to load any path we use that record to print out an
error message for each failure, so the user can see in the error logs ALL
the failed paths, rather than having to re-run the app at debug level to
find them.

WDYT?

/Bruce

diff --git a/drivers/net/intel/ice/ice_ethdev.c b/drivers/net/intel/ice/ice_ethdev.c
index e065581ccf..926b0febea 100644
--- a/drivers/net/intel/ice/ice_ethdev.c
+++ b/drivers/net/intel/ice/ice_ethdev.c
@@ -8,6 +8,7 @@
 #include <ctype.h>
 #include <fcntl.h>
 #include <stdio.h>
+#include <sys/queue.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <unistd.h>
@@ -2003,15 +2004,23 @@ static int ice_read_customized_path(char *pkg_file, uint16_t buff_len)
        return n;
 }
 
+struct ddp_path_list_entry {
+       TAILQ_ENTRY(ddp_path_list_entry) next;
+       char path[ICE_MAX_PKG_FILENAME_SIZE];
+};
+TAILQ_HEAD(ddp_paths_head, ddp_path_list_entry);
+
 static int
-ice_firmware_read(const char *file, void *buf, size_t *bufsz)
+ice_firmware_read(const char *file, void *buf, size_t *bufsz, struct ddp_paths_head *searched_paths)
 {
-       int ret = rte_firmware_read(file, buf, bufsz);
-
-       if (ret < 0)
-               PMD_INIT_LOG(DEBUG, "Cannot read DDP file %s", file);
-
-       return ret;
+       /* record paths searched for DDP files */
+       struct ddp_path_list_entry *path = malloc(sizeof(struct ddp_path_list_entry));
+       if (path) {
+               strlcpy(path->path, file, sizeof(path->path));
+               TAILQ_INSERT_TAIL(searched_paths, path, next);
+       }
+       PMD_INIT_LOG(DEBUG, "Trying to load DDP file from: %s", file);
+       return rte_firmware_read(file, buf, bufsz);
 }
 
 int ice_load_pkg(struct ice_adapter *adapter, bool use_dsn, uint64_t dsn)
@@ -2020,6 +2029,8 @@ int ice_load_pkg(struct ice_adapter *adapter, bool use_dsn, uint64_t dsn)
        char pkg_file[ICE_MAX_PKG_FILENAME_SIZE];
        char customized_path[ICE_MAX_PKG_FILENAME_SIZE];
        char opt_ddp_filename[ICE_MAX_PKG_FILENAME_SIZE];
+       struct ddp_paths_head searched_paths = TAILQ_HEAD_INITIALIZER(searched_paths);
+       struct ddp_path_list_entry *path, *tmp;  /* used to free the paths list */
        void *buf;
        size_t bufsz;
        int err;
@@ -2027,9 +2038,14 @@ int ice_load_pkg(struct ice_adapter *adapter, bool use_dsn, uint64_t dsn)
        /* first read any explicitly referenced DDP file*/
        if (adapter->devargs.ddp_filename != NULL) {
                strlcpy(pkg_file, adapter->devargs.ddp_filename, sizeof(pkg_file));
-               if (ice_firmware_read(pkg_file, &buf, &bufsz) == 0) {
+               if (ice_firmware_read(pkg_file, &buf, &bufsz, &searched_paths) == 0) {
                        goto load_fw;
                } else {
+                       /* free the searched paths list */
+                       RTE_TAILQ_FOREACH_SAFE(path, &searched_paths, next, tmp) {
+                               TAILQ_REMOVE(&searched_paths, path, next);
+                               free(path);
+                       }
                        PMD_INIT_LOG(ERR, "Cannot load DDP file: %s", pkg_file);
                        return -1;
                }
@@ -2043,11 +2059,11 @@ int ice_load_pkg(struct ice_adapter *adapter, bool use_dsn, uint64_t dsn)
                if (use_dsn) {
                        snprintf(pkg_file, RTE_DIM(pkg_file), "%s/%s",
                                        customized_path, opt_ddp_filename);
-                       if (ice_firmware_read(pkg_file, &buf, &bufsz) == 0)
+                       if (ice_firmware_read(pkg_file, &buf, &bufsz, &searched_paths) == 0)
                                goto load_fw;
                }
                snprintf(pkg_file, RTE_DIM(pkg_file), "%s/%s", customized_path, "ice.pkg");
-               if (ice_firmware_read(pkg_file, &buf, &bufsz) == 0)
+               if (ice_firmware_read(pkg_file, &buf, &bufsz, &searched_paths) == 0)
                        goto load_fw;
        }
 
@@ -2057,27 +2073,39 @@ int ice_load_pkg(struct ice_adapter *adapter, bool use_dsn, uint64_t dsn)
        strncpy(pkg_file, ICE_PKG_FILE_SEARCH_PATH_UPDATES,
                ICE_MAX_PKG_FILENAME_SIZE);
        strcat(pkg_file, opt_ddp_filename);
-       if (ice_firmware_read(pkg_file, &buf, &bufsz) == 0)
+       if (ice_firmware_read(pkg_file, &buf, &bufsz, &searched_paths) == 0)
                goto load_fw;
 
        strncpy(pkg_file, ICE_PKG_FILE_SEARCH_PATH_DEFAULT,
                ICE_MAX_PKG_FILENAME_SIZE);
        strcat(pkg_file, opt_ddp_filename);
-       if (ice_firmware_read(pkg_file, &buf, &bufsz) == 0)
+       if (ice_firmware_read(pkg_file, &buf, &bufsz, &searched_paths) == 0)
                goto load_fw;
 
 no_dsn:
        strncpy(pkg_file, ICE_PKG_FILE_UPDATES, ICE_MAX_PKG_FILENAME_SIZE);
-       if (ice_firmware_read(pkg_file, &buf, &bufsz) == 0)
+       if (ice_firmware_read(pkg_file, &buf, &bufsz, &searched_paths) == 0)
                goto load_fw;
 
        strncpy(pkg_file, ICE_PKG_FILE_DEFAULT, ICE_MAX_PKG_FILENAME_SIZE);
-       if (ice_firmware_read(pkg_file, &buf, &bufsz) < 0) {
-               PMD_INIT_LOG(ERR, "Failed to load default DDP package " ICE_PKG_FILE_DEFAULT);
+       if (ice_firmware_read(pkg_file, &buf, &bufsz, &searched_paths) < 0) {
+               /* list out all the failed package reads, emptying the list */
+               RTE_TAILQ_FOREACH_SAFE(path, &searched_paths, next, tmp) {
+                       PMD_INIT_LOG(ERR, "Failed to load DDP package from: %s", path->path);
+                       TAILQ_REMOVE(&searched_paths, path, next);
+                       free(path);
+               }
+               PMD_INIT_LOG(ERR, "Error: Cannot load any DDP package");
                return -1;
        }
 
 load_fw:
+       /* we have success opening a package, so clear the load list */
+       RTE_TAILQ_FOREACH_SAFE(path, &searched_paths, next, tmp) {
+               TAILQ_REMOVE(&searched_paths, path, next);
+               free(path);
+       }
+
        PMD_INIT_LOG(DEBUG, "DDP package name: %s", pkg_file);
 
        err = ice_copy_and_init_pkg(hw, buf, bufsz, adapter->devargs.ddp_load_sched);

^ permalink raw reply related

* RE: [RFC PATCH 0/8] remove use of rte_memcpy from net/intel
From: Morten Brørup @ 2026-05-19 17:57 UTC (permalink / raw)
  To: Bruce Richardson, stephen; +Cc: dev
In-Reply-To: <20260519160823.1004973-1-bruce.richardson@intel.com>

> From: Bruce Richardson [mailto:bruce.richardson@intel.com]
> Sent: Tuesday, 19 May 2026 18.06
> 
> This RFC proposed to replace all instances of rte_memcpy in Intel
> (and former-Intel) net drivers with just regular memcpy. This is
> done on the basis that the memcpy use is not datapath, but is used
> for flow configuration, virt-channel (to firmware or PF) messaging
> and other control path functions.
> 

Series-acked-by: Morten Brørup <mb@smartsharesystems.com>

Interesting that using rte_memcpy() emits stringop-overflow warnings when not disabled [1], while using memcpy() doesn't [2].
The warnings are not correct, but still an interesting difference.

[1]: https://github.com/ovsrobot/dpdk/actions/runs/25104438552/job/74968218420
[2]: https://github.com/ovsrobot/dpdk/actions/runs/26110738743/job/76786987619


^ permalink raw reply

* Re: [PATCH v17 07/11] common/sxe2: add ioctl interface for DMA map and unmap
From: Stephen Hemminger @ 2026-05-19 17:41 UTC (permalink / raw)
  To: liujie5; +Cc: dev
In-Reply-To: <20260519030132.3780057-8-liujie5@linkdatatechnology.com>

On Tue, 19 May 2026 11:01:28 +0800
liujie5@linkdatatechnology.com wrote:

> +RTE_EXPORT_INTERNAL_SYMBOL(sxe2_drv_dev_dma_unmap)
> +int32_t
> +sxe2_drv_dev_dma_unmap(struct sxe2_common_device *cdev, uint64_t iova)
> +{
> +	int32_t ret = 0;
> +	int32_t cmd_fd = 0;
> +	struct sxe2_ioctl_iommu_dma_unmap cmd_params;
> +
> +	if (cdev->config.kernel_reset) {
> +		ret = -EPERM;
> +		PMD_LOG_WARN(COM, "kernel reset, need restart app.");
> +		goto l_end;
> +	}
> +
> +	if (!cdev->config.support_iommu)
> +		goto l_end;
> +
> +	cmd_fd = SXE2_CDEV_TO_CMD_FD(cdev);
> +	if (cmd_fd < 0) {
> +		ret = -EBADF;
> +		PMD_LOG_ERR(COM, "Failed to exec cmd, fd=%d", cmd_fd);
> +		goto l_end;
> +	}
> +
> +	PMD_LOG_DEBUG(COM, "fd %d dma unmap iova=0x%"PRIX64"",
> +		cmd_fd, iova);
> +
> +	memset(&cmd_params, 0, sizeof(struct sxe2_ioctl_iommu_dma_unmap));
> +	cmd_params.iova = iova;
> +
> +	(void)pthread_mutex_lock(&cdev->config.lock);
> +	ret = ioctl(cmd_fd, SXE2_COM_CMD_DMA_UNMAP, &cmd_params);
> +	if (ret < 0) {
> +		PMD_LOG_INFO(COM, "Failed to dma unmap, fd=%d, ret=%d, err:%s",
> +				cmd_fd, ret, strerror(errno));
> +		ret = -EIO;
> +		(void)pthread_mutex_unlock(&cdev->config.lock);
> +		goto l_end;
> +	}
> +	(void)pthread_mutex_unlock(&cdev->config.lock);
> +
> +l_end:
> +	return ret;
> +}
> +

You shouldn't need the cast void cast around pthread_mutex_lock/unlock;
other drivers don't do that.

Also, git complains about this when doing merge.
Applying: common/sxe2: add ioctl interface for DMA map and unmap
/home/shemminger/DPDK/main/.git/worktrees/sxe2/rebase-apply/patch:192: new blank line at EOF.
+


^ permalink raw reply

* Re: [PATCH v1 2/2] doc: update recommended matching versions for cpfl and idpf
From: Bruce Richardson @ 2026-05-19 17:05 UTC (permalink / raw)
  To: Soumyadeep Hore; +Cc: manoj.kumar.subbarao, aman.deep.singh, dev
In-Reply-To: <20260509015408.29188-3-soumyadeep.hore@intel.com>

On Fri, May 08, 2026 at 09:54:08PM -0400, Soumyadeep Hore wrote:
> Update the recommended MEV-ts release version corresponding to DPDK
> release in the cpfl and idpf drivers documentation.
> 
> Signed-off-by: Soumyadeep Hore <soumyadeep.hore@intel.com>
> ---
>  doc/guides/nics/cpfl.rst | 2 ++
>  doc/guides/nics/idpf.rst | 2 ++
>  2 files changed, 4 insertions(+)
> 
> diff --git a/doc/guides/nics/cpfl.rst b/doc/guides/nics/cpfl.rst
> index bc42c524ea..da884f5e3b 100644
> --- a/doc/guides/nics/cpfl.rst
> +++ b/doc/guides/nics/cpfl.rst
> @@ -41,6 +41,8 @@ Here is the suggested matching list which has been tested and verified.
>     +------------+------------------+
>     |    25.07   |       2.0        |
>     +------------+------------------+
> +   |    26.07   |       2.2        |
> +   +------------+------------------+
>  

This is strange, having just the .07 releases listed in the table. Is the
same version for 25.07 applicable for 25.11? Perhaps we can update the
table to cover that, so that only LTS versions are listed apart from the
latest release.

Other feedback, to help align with e.g. tables in ice and i40e drivers.
This is not mandatory for this patch, but it would be nice to have IMHO:

* list only LTS releases (i.e. remove 23.07)
* list releases in descending order, so that latest is on top
* rework table to use the new RST table format (see ice.rst for example).

Regards,
/Bruce
>  
>  Configuration
> diff --git a/doc/guides/nics/idpf.rst b/doc/guides/nics/idpf.rst
> index c7c76190c8..a6f611c09b 100644
> --- a/doc/guides/nics/idpf.rst
> +++ b/doc/guides/nics/idpf.rst
> @@ -37,6 +37,8 @@ Here is the suggested matching list which has been tested and verified.
>     +------------+---------------+------------------+
>     |    25.07   |    0.0.772    |       2.0        |
>     +------------+---------------+------------------+
> +   |    26.07   |    0.0.780    |       2.2        |
> +   +------------+---------------+------------------+
>  
>  
>  Configuration
> -- 
> 2.47.1
> 

^ permalink raw reply

* Re: [PATCH v2] net/ixgbe: fix MAC/VLAN item validation for ntuple
From: Bruce Richardson @ 2026-05-19 17:00 UTC (permalink / raw)
  To: Daniil Iskhakov
  Cc: Anatoly Burakov, Vladimir Medvedkin, Wei Zhao, Wenzhuo Lu, dev,
	stable, Daniil Agalakov, sdl.dpdk, rrv
In-Reply-To: <20260507132117.1449179-1-dish@amicon.ru>

On Thu, May 07, 2026 at 04:21:17PM +0300, Daniil Iskhakov wrote:
> When parsing an ntuple filter, the code attempts to ensure that if the
> first item is ETH or VLAN, its spec and mask are either absent or
> contain only zero fields. The current check is:
> 
>   if ((item->spec || item->mask) &&
>       (memcmp(spec, &null_struct, size) ||
>        memcmp(mask, &null_struct, size)))
> 
> This condition is logically incorrect. If item->spec points to a
> zero-filled structure and item->mask is NULL, memcmp(mask) would
> dereference a NULL pointer.
> 
> The intended behavior is to reject any non-zero spec or mask.
> 
> Guard each memcmp() call with a check of the corresponding pointer while
> keeping a single error path.
> 
> Found by Linux Verification Center (linuxtesting.org) with SVACE.
> 
> Fixes: 46ea969177f3 ("net/ixgbe: add ntuple support to flow parser")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Daniil Agalakov <ade@amicon.ru>
> Signed-off-by: Daniil Iskhakov <dish@amicon.ru>
> ---
Acked-by: Bruce Richardson <bruce.richardson@intel.com>

Applied to dpdk-next-net-intel.
Thanks,
/Bruce

^ permalink raw reply

* Re: [PATCH v3] net/idpf: harden PTP frequency adjustment
From: Bruce Richardson @ 2026-05-19 16:30 UTC (permalink / raw)
  To: Soumyadeep Hore; +Cc: manoj.kumar.subbarao, aman.deep.singh, dev, rajesh3.kumar
In-Reply-To: <20260506204134.18634-1-soumyadeep.hore@intel.com>

On Wed, May 06, 2026 at 04:41:33PM -0400, Soumyadeep Hore wrote:
> Use the direct __int128 calculation on 64-bit builds to keep the
> frequency adjustment path short and readable, while preserving the
> portable split-and-scale calculation on 32-bit builds where __int128
> may be unavailable.
> 
> Both paths avoid the INT64_MIN negation issue in the original code.
> 
> Coverity issue: 501832
> 
Fixes: 1c6e2737fd3e ("net/idpf: support timesync")

> Signed-off-by: Soumyadeep Hore <soumyadeep.hore@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>

Applied to dpdk-next-net-intel,
Thanks,
/Bruce

^ permalink raw reply

* Re: [PATCH v1 1/1] net/iavf: fix large VF IRQ mapping
From: Bruce Richardson @ 2026-05-19 16:12 UTC (permalink / raw)
  To: Anatoly Burakov; +Cc: dev, Vladimir Medvedkin, david.marchand, mb
In-Reply-To: <c50ef6c3d4ecaa7902d325d5e8a7fd4c92c8eeb6.1778076415.git.anatoly.burakov@intel.com>

On Wed, May 06, 2026 at 03:07:03PM +0100, Anatoly Burakov wrote:
> The PF will check buffer size for being too big, and the chunk sizing code
> correctly calls that out. However, the size was actually still too big
> because `struct virtchnl_queue_vector_maps` already had one queue vector
> as part of its definition, so `chunk_sz` was too big by 1.
> 
> Fixes: 292d3b781ac4 ("net/iavf: replace unnecessary hugepage memory allocations")
> 
> Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
> ---

Acked-by: Bruce Richardson <bruce.richardson@intel.com>

Although there is discussion on-list about this patch, none of it concerns
this patch being wrong in itself, but rather future cleanup work done.
Therefore, I'm considering this patch for merge to next-net-intel shortly.

/Bruce

>  drivers/net/intel/iavf/iavf_vchnl.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/net/intel/iavf/iavf_vchnl.c b/drivers/net/intel/iavf/iavf_vchnl.c
> index c2f340db81..dd09b0fa61 100644
> --- a/drivers/net/intel/iavf/iavf_vchnl.c
> +++ b/drivers/net/intel/iavf/iavf_vchnl.c
> @@ -1528,7 +1528,7 @@ iavf_config_irq_map_lv_chunk(struct iavf_adapter *adapter,
>  
>  	/* for some reason PF side checks for buffer being too big, so adjust it down */
>  	buf_len = sizeof(struct virtchnl_queue_vector_maps) +
> -		  sizeof(struct virtchnl_queue_vector) * chunk_sz;
> +		  sizeof(struct virtchnl_queue_vector) * (chunk_sz - 1);
>  
>  	args.ops = VIRTCHNL_OP_MAP_QUEUE_VECTOR;
>  	args.in_args = (u8 *)map_info;
> -- 
> 2.47.3
> 

^ permalink raw reply

* [RFC PATCH 8/8] net/ipn3ke: replace use of DPDK-specific memcpy function
From: Bruce Richardson @ 2026-05-19 16:06 UTC (permalink / raw)
  To: dev; +Cc: Bruce Richardson
In-Reply-To: <20260519160823.1004973-1-bruce.richardson@intel.com>

The driver use of memcpy is for control path work, for example, flow
configuration and so is fine using the standard libc memcpy function in
place of the DPDK-specific rte_memcpy version.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 drivers/net/intel/ipn3ke/ipn3ke_ethdev.h      |  1 -
 drivers/net/intel/ipn3ke/ipn3ke_flow.c        | 26 +++++++++----------
 drivers/net/intel/ipn3ke/ipn3ke_representor.c |  8 +++---
 drivers/net/intel/ipn3ke/ipn3ke_tm.c          |  6 ++---
 4 files changed, 20 insertions(+), 21 deletions(-)

diff --git a/drivers/net/intel/ipn3ke/ipn3ke_ethdev.h b/drivers/net/intel/ipn3ke/ipn3ke_ethdev.h
index 4b93d2649e..0105fc9056 100644
--- a/drivers/net/intel/ipn3ke/ipn3ke_ethdev.h
+++ b/drivers/net/intel/ipn3ke/ipn3ke_ethdev.h
@@ -18,7 +18,6 @@
 #include <ethdev_driver.h>
 #include <ethdev_vdev.h>
 #include <rte_malloc.h>
-#include <rte_memcpy.h>
 #include <bus_vdev_driver.h>
 #include <rte_kvargs.h>
 #include <rte_spinlock.h>
diff --git a/drivers/net/intel/ipn3ke/ipn3ke_flow.c b/drivers/net/intel/ipn3ke/ipn3ke_flow.c
index a2f76268b5..941d2921fb 100644
--- a/drivers/net/intel/ipn3ke/ipn3ke_flow.c
+++ b/drivers/net/intel/ipn3ke/ipn3ke_flow.c
@@ -100,7 +100,7 @@ ipn3ke_pattern_vxlan(const struct rte_flow_item patterns[],
 		case RTE_FLOW_ITEM_TYPE_ETH:
 			eth = item->spec;
 
-			rte_memcpy(&parser->key[0],
+			memcpy(&parser->key[0],
 					eth->hdr.src_addr.addr_bytes,
 					RTE_ETHER_ADDR_LEN);
 			break;
@@ -108,7 +108,7 @@ ipn3ke_pattern_vxlan(const struct rte_flow_item patterns[],
 		case RTE_FLOW_ITEM_TYPE_VXLAN:
 			vxlan = item->spec;
 
-			rte_memcpy(&parser->key[6], vxlan->hdr.vni, 3);
+			memcpy(&parser->key[6], vxlan->hdr.vni, 3);
 			break;
 
 		default:
@@ -164,7 +164,7 @@ ipn3ke_pattern_mac(const struct rte_flow_item patterns[],
 		case RTE_FLOW_ITEM_TYPE_ETH:
 			eth = item->spec;
 
-			rte_memcpy(parser->key,
+			memcpy(parser->key,
 					eth->hdr.src_addr.addr_bytes,
 					RTE_ETHER_ADDR_LEN);
 			break;
@@ -369,13 +369,13 @@ ipn3ke_pattern_ip_tcp(const struct rte_flow_item patterns[],
 		case RTE_FLOW_ITEM_TYPE_IPV4:
 			ipv4 = item->spec;
 
-			rte_memcpy(&parser->key[0], &ipv4->hdr.src_addr, 4);
+			memcpy(&parser->key[0], &ipv4->hdr.src_addr, 4);
 			break;
 
 		case RTE_FLOW_ITEM_TYPE_TCP:
 			tcp = item->spec;
 
-			rte_memcpy(&parser->key[4], &tcp->hdr.src_port, 2);
+			memcpy(&parser->key[4], &tcp->hdr.src_port, 2);
 			break;
 
 		default:
@@ -434,13 +434,13 @@ ipn3ke_pattern_ip_udp(const struct rte_flow_item patterns[],
 		case RTE_FLOW_ITEM_TYPE_IPV4:
 			ipv4 = item->spec;
 
-			rte_memcpy(&parser->key[0], &ipv4->hdr.src_addr, 4);
+			memcpy(&parser->key[0], &ipv4->hdr.src_addr, 4);
 			break;
 
 		case RTE_FLOW_ITEM_TYPE_UDP:
 			udp = item->spec;
 
-			rte_memcpy(&parser->key[4], &udp->hdr.src_port, 2);
+			memcpy(&parser->key[4], &udp->hdr.src_port, 2);
 			break;
 
 		default:
@@ -502,19 +502,19 @@ ipn3ke_pattern_ip_nvgre(const struct rte_flow_item patterns[],
 		case RTE_FLOW_ITEM_TYPE_IPV4:
 			ipv4 = item->spec;
 
-			rte_memcpy(&parser->key[0], &ipv4->hdr.src_addr, 4);
+			memcpy(&parser->key[0], &ipv4->hdr.src_addr, 4);
 			break;
 
 		case RTE_FLOW_ITEM_TYPE_UDP:
 			udp = item->spec;
 
-			rte_memcpy(&parser->key[4], &udp->hdr.src_port, 2);
+			memcpy(&parser->key[4], &udp->hdr.src_port, 2);
 			break;
 
 		case RTE_FLOW_ITEM_TYPE_NVGRE:
 			nvgre = item->spec;
 
-			rte_memcpy(&parser->key[6], nvgre->tni, 3);
+			memcpy(&parser->key[6], nvgre->tni, 3);
 			break;
 
 		default:
@@ -576,19 +576,19 @@ ipn3ke_pattern_vxlan_ip_udp(const struct rte_flow_item patterns[],
 		case RTE_FLOW_ITEM_TYPE_VXLAN:
 			vxlan = item->spec;
 
-			rte_memcpy(&parser->key[0], vxlan->hdr.vni, 3);
+			memcpy(&parser->key[0], vxlan->hdr.vni, 3);
 			break;
 
 		case RTE_FLOW_ITEM_TYPE_IPV4:
 			ipv4 = item->spec;
 
-			rte_memcpy(&parser->key[3], &ipv4->hdr.src_addr, 4);
+			memcpy(&parser->key[3], &ipv4->hdr.src_addr, 4);
 			break;
 
 		case RTE_FLOW_ITEM_TYPE_UDP:
 			udp = item->spec;
 
-			rte_memcpy(&parser->key[7], &udp->hdr.src_port, 2);
+			memcpy(&parser->key[7], &udp->hdr.src_port, 2);
 			break;
 
 		default:
diff --git a/drivers/net/intel/ipn3ke/ipn3ke_representor.c b/drivers/net/intel/ipn3ke/ipn3ke_representor.c
index cd34d08055..281c025820 100644
--- a/drivers/net/intel/ipn3ke/ipn3ke_representor.c
+++ b/drivers/net/intel/ipn3ke/ipn3ke_representor.c
@@ -137,7 +137,7 @@ ipn3ke_rpst_dev_start(struct rte_eth_dev *dev)
 
 	if (hw->retimer.mac_type == IFPGA_RAWDEV_RETIMER_MAC_TYPE_10GE_XFI) {
 		/* Set mac address */
-		rte_memcpy(((char *)(&val)),
+		memcpy(((char *)(&val)),
 			(char *)&dev->data->mac_addrs->addr_bytes[0],
 			sizeof(uint32_t));
 		(*hw->f_mac_write)(hw,
@@ -145,7 +145,7 @@ ipn3ke_rpst_dev_start(struct rte_eth_dev *dev)
 				IPN3KE_MAC_PRIMARY_MAC_ADDR0,
 				rpst->port_id,
 				0);
-		rte_memcpy(((char *)(&val)),
+		memcpy(((char *)(&val)),
 			(char *)&dev->data->mac_addrs->addr_bytes[4],
 			sizeof(uint16_t));
 		(*hw->f_mac_write)(hw,
@@ -2746,13 +2746,13 @@ ipn3ke_rpst_mac_addr_set(struct rte_eth_dev *ethdev,
 		rte_ether_addr_copy(&mac_addr[0], &rpst->mac_addr);
 
 		/* Set mac address */
-		rte_memcpy(((char *)(&val)), &mac_addr[0], sizeof(uint32_t));
+		memcpy(((char *)(&val)), &mac_addr[0], sizeof(uint32_t));
 		(*hw->f_mac_write)(hw,
 				val,
 				IPN3KE_MAC_PRIMARY_MAC_ADDR0,
 				rpst->port_id,
 				0);
-		rte_memcpy(((char *)(&val)), &mac_addr[4], sizeof(uint16_t));
+		memcpy(((char *)(&val)), &mac_addr[4], sizeof(uint16_t));
 		(*hw->f_mac_write)(hw,
 				val,
 				IPN3KE_MAC_PRIMARY_MAC_ADDR0,
diff --git a/drivers/net/intel/ipn3ke/ipn3ke_tm.c b/drivers/net/intel/ipn3ke/ipn3ke_tm.c
index 04677138e1..47b7734d4f 100644
--- a/drivers/net/intel/ipn3ke/ipn3ke_tm.c
+++ b/drivers/net/intel/ipn3ke/ipn3ke_tm.c
@@ -814,7 +814,7 @@ ipn3ke_tm_shaper_profile_add(struct rte_eth_dev *dev,
 				rte_strerror(EINVAL));
 	} else {
 		sp->valid = 1;
-		rte_memcpy(&sp->params, profile, sizeof(sp->params));
+		memcpy(&sp->params, profile, sizeof(sp->params));
 	}
 
 	tm->h.n_shaper_profiles++;
@@ -960,7 +960,7 @@ ipn3ke_tm_tdrop_profile_add(struct rte_eth_dev *dev,
 			IPN3KE_TDROP_TH2_MASK);
 	tp->th1 = th1;
 	tp->th2 = th2;
-	rte_memcpy(&tp->params, profile, sizeof(tp->params));
+	memcpy(&tp->params, profile, sizeof(tp->params));
 
 	/* Add to list */
 	tm->h.n_tdrop_profiles++;
@@ -1308,7 +1308,7 @@ ipn3ke_tm_node_add(struct rte_eth_dev *dev,
 		n->tdrop_profile = ipn3ke_hw_tm_tdrop_profile_search(hw,
 			params->leaf.wred.wred_profile_id);
 
-	rte_memcpy(&n->params, params, sizeof(n->params));
+	memcpy(&n->params, params, sizeof(n->params));
 
 	return 0;
 }
-- 
2.51.0


^ permalink raw reply related

* [RFC PATCH 7/8] net/cpfl: replace use of DPDK-specific memcpy function
From: Bruce Richardson @ 2026-05-19 16:06 UTC (permalink / raw)
  To: dev; +Cc: Bruce Richardson
In-Reply-To: <20260519160823.1004973-1-bruce.richardson@intel.com>

The driver use of memcpy is for control path work, and so is fine using
the standard libc memcpy function in place of the DPDK-specific
rte_memcpy version.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 drivers/net/intel/cpfl/cpfl_ethdev.c | 4 ++--
 drivers/net/intel/cpfl/cpfl_vchnl.c  | 6 +++---
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/net/intel/cpfl/cpfl_ethdev.c b/drivers/net/intel/cpfl/cpfl_ethdev.c
index 617b823f5a..552d1feb27 100644
--- a/drivers/net/intel/cpfl/cpfl_ethdev.c
+++ b/drivers/net/intel/cpfl/cpfl_ethdev.c
@@ -2112,7 +2112,7 @@ int vcpf_save_chunk_in_cfgq(struct cpfl_adapter_ext *adapter)
 		PMD_DRV_LOG(ERR, "Failed to allocate memory for add_q");
 		return -ENOMEM;
 	}
-	rte_memcpy(adapter->cfgq_in.cfgq_add, add_q, struct_size);
+	memcpy(adapter->cfgq_in.cfgq_add, add_q, struct_size);
 
 	num_chunks = add_q->chunks.num_chunks;
 	for (u16 i = 0; i < num_chunks; i++) {
@@ -2536,7 +2536,7 @@ cpfl_adapter_ext_init(struct rte_pci_device *pci_dev, struct cpfl_adapter_ext *a
 
 	strncpy(adapter->name, pci_dev->device.name, PCI_PRI_STR_SIZE);
 
-	rte_memcpy(&base->caps, &req_caps, sizeof(struct virtchnl2_get_capabilities));
+	memcpy(&base->caps, &req_caps, sizeof(struct virtchnl2_get_capabilities));
 
 	ret = idpf_adapter_init(base);
 	if (ret != 0) {
diff --git a/drivers/net/intel/cpfl/cpfl_vchnl.c b/drivers/net/intel/cpfl/cpfl_vchnl.c
index 9c842b60df..c9d122d2c3 100644
--- a/drivers/net/intel/cpfl/cpfl_vchnl.c
+++ b/drivers/net/intel/cpfl/cpfl_vchnl.c
@@ -32,7 +32,7 @@ cpfl_cc_vport_list_get(struct cpfl_adapter_ext *adapter,
 		return err;
 	}
 
-	rte_memcpy(response, args.out_buffer, IDPF_DFLT_MBX_BUF_SIZE);
+	memcpy(response, args.out_buffer, IDPF_DFLT_MBX_BUF_SIZE);
 
 	return 0;
 }
@@ -66,7 +66,7 @@ cpfl_cc_vport_info_get(struct cpfl_adapter_ext *adapter,
 		return err;
 	}
 
-	rte_memcpy(response, args.out_buffer, sizeof(*response));
+	memcpy(response, args.out_buffer, sizeof(*response));
 
 	return 0;
 }
@@ -139,7 +139,7 @@ vcpf_add_queues(struct cpfl_adapter_ext *adapter)
 		return err;
 	}
 
-	rte_memcpy(adapter->addq_recv_info, args.out_buffer, IDPF_DFLT_MBX_BUF_SIZE);
+	memcpy(adapter->addq_recv_info, args.out_buffer, IDPF_DFLT_MBX_BUF_SIZE);
 
 	return err;
 }
-- 
2.51.0


^ permalink raw reply related

* [RFC PATCH 6/8] net/idpf: replace use of DPDK-specific memcpy function
From: Bruce Richardson @ 2026-05-19 16:06 UTC (permalink / raw)
  To: dev; +Cc: Bruce Richardson
In-Reply-To: <20260519160823.1004973-1-bruce.richardson@intel.com>

The driver use of memcpy is for control path work, for example, flow
configuration and so is fine using the standard libc memcpy function in
place of the DPDK-specific rte_memcpy version.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 drivers/net/intel/idpf/base/idpf_osdep.h      |  5 ++---
 drivers/net/intel/idpf/idpf_common_device.c   |  2 +-
 drivers/net/intel/idpf/idpf_common_virtchnl.c | 20 +++++++++----------
 drivers/net/intel/idpf/idpf_ethdev.c          | 10 +++++-----
 drivers/net/intel/idpf/idpf_rxtx.c            |  8 ++++----
 5 files changed, 22 insertions(+), 23 deletions(-)

diff --git a/drivers/net/intel/idpf/base/idpf_osdep.h b/drivers/net/intel/idpf/base/idpf_osdep.h
index 47b95d0da6..67bc33f2e6 100644
--- a/drivers/net/intel/idpf/base/idpf_osdep.h
+++ b/drivers/net/intel/idpf/base/idpf_osdep.h
@@ -14,7 +14,6 @@
 #include <stdbool.h>
 
 #include <rte_common.h>
-#include <rte_memcpy.h>
 #include <rte_malloc.h>
 #include <rte_memzone.h>
 #include <rte_byteorder.h>
@@ -199,8 +198,8 @@ struct __rte_packed_begin idpf_virt_mem {
 #define idpf_free(h, m)		rte_free(m)
 
 #define idpf_memset(a, b, c, d)	memset((a), (b), (c))
-#define idpf_memcpy(a, b, c, d)	rte_memcpy((a), (b), (c))
-#define idpf_memdup(a, b, c, d)	rte_memcpy(idpf_malloc(a, c), b, c)
+#define idpf_memcpy(a, b, c, d)	memcpy((a), (b), (c))
+#define idpf_memdup(a, b, c, d)	memcpy(idpf_malloc(a, c), b, c)
 
 #define CPU_TO_BE16(o) rte_cpu_to_be_16(o)
 #define CPU_TO_BE32(o) rte_cpu_to_be_32(o)
diff --git a/drivers/net/intel/idpf/idpf_common_device.c b/drivers/net/intel/idpf/idpf_common_device.c
index 24ee00db23..f27a911977 100644
--- a/drivers/net/intel/idpf/idpf_common_device.c
+++ b/drivers/net/intel/idpf/idpf_common_device.c
@@ -496,7 +496,7 @@ idpf_vport_init(struct idpf_vport *vport,
 	vport->num_rx_q = vport_info->num_rx_q;
 	vport->num_rx_bufq = vport_info->num_rx_bufq;
 	vport->max_mtu = vport_info->max_mtu;
-	rte_memcpy(vport->default_mac_addr,
+	memcpy(vport->default_mac_addr,
 		   vport_info->default_mac_addr, ETH_ALEN);
 	vport->rss_algorithm = vport_info->rss_algorithm;
 	vport->rss_key_size = RTE_MIN(IDPF_RSS_KEY_LEN,
diff --git a/drivers/net/intel/idpf/idpf_common_virtchnl.c b/drivers/net/intel/idpf/idpf_common_virtchnl.c
index f8c487c537..4befd5fc83 100644
--- a/drivers/net/intel/idpf/idpf_common_virtchnl.c
+++ b/drivers/net/intel/idpf/idpf_common_virtchnl.c
@@ -141,7 +141,7 @@ idpf_read_msg_from_cp(struct idpf_adapter *adapter, uint16_t buf_len,
 		return result;
 	}
 
-	rte_memcpy(buf, ctlq_msg.ctx.indirect.payload->va, buf_len);
+	memcpy(buf, ctlq_msg.ctx.indirect.payload->va, buf_len);
 
 	opcode = rte_le_to_cpu_32(ctlq_msg.cookie.mbx.chnl_opcode);
 	adapter->cmd_retval = rte_le_to_cpu_32(ctlq_msg.cookie.mbx.chnl_retval);
@@ -323,7 +323,7 @@ idpf_vc_caps_get(struct idpf_adapter *adapter)
 		return err;
 	}
 
-	rte_memcpy(&adapter->caps, args.out_buffer, sizeof(struct virtchnl2_get_capabilities));
+	memcpy(&adapter->caps, args.out_buffer, sizeof(struct virtchnl2_get_capabilities));
 
 	return 0;
 }
@@ -361,7 +361,7 @@ idpf_vc_vport_create(struct idpf_vport *vport,
 		return err;
 	}
 
-	rte_memcpy(&(vport->vport_info.info), args.out_buffer, IDPF_DFLT_MBX_BUF_SIZE);
+	memcpy(&(vport->vport_info.info), args.out_buffer, IDPF_DFLT_MBX_BUF_SIZE);
 	return 0;
 }
 
@@ -419,7 +419,7 @@ idpf_vc_queue_grps_add(struct idpf_vport *vport,
 		return err;
 	}
 
-	rte_memcpy(p2p_queue_grps_out, args.out_buffer, IDPF_DFLT_MBX_BUF_SIZE);
+	memcpy(p2p_queue_grps_out, args.out_buffer, IDPF_DFLT_MBX_BUF_SIZE);
 	return 0;
 }
 
@@ -475,7 +475,7 @@ idpf_vc_rss_key_set(struct idpf_vport *vport)
 
 	rss_key->vport_id = vport->vport_id;
 	rss_key->key_len = vport->rss_key_size;
-	rte_memcpy(rss_key->key, vport->rss_key,
+	memcpy(rss_key->key, vport->rss_key,
 		   sizeof(rss_key->key[0]) * vport->rss_key_size);
 
 	memset(&args, 0, sizeof(args));
@@ -528,7 +528,7 @@ int idpf_vc_rss_key_get(struct idpf_vport *vport)
 				return -ENOMEM;
 			}
 		}
-		rte_memcpy(vport->rss_key, rss_key_ret->key, vport->rss_key_size);
+		memcpy(vport->rss_key, rss_key_ret->key, vport->rss_key_size);
 	} else {
 		DRV_LOG(ERR, "Failed to execute command of VIRTCHNL2_OP_GET_RSS_KEY");
 	}
@@ -553,7 +553,7 @@ idpf_vc_rss_lut_set(struct idpf_vport *vport)
 
 	rss_lut->vport_id = vport->vport_id;
 	rss_lut->lut_entries = vport->rss_lut_size;
-	rte_memcpy(rss_lut->lut, vport->rss_lut,
+	memcpy(rss_lut->lut, vport->rss_lut,
 		   sizeof(rss_lut->lut[0]) * vport->rss_lut_size);
 
 	memset(&args, 0, sizeof(args));
@@ -605,7 +605,7 @@ idpf_vc_rss_lut_get(struct idpf_vport *vport)
 				return -ENOMEM;
 			}
 		}
-		rte_memcpy(vport->rss_lut, rss_lut_ret->lut, rss_lut_ret->lut_entries);
+		memcpy(vport->rss_lut, rss_lut_ret->lut, rss_lut_ret->lut_entries);
 		vport->rss_lut_size = rss_lut_ret->lut_entries;
 	} else {
 		DRV_LOG(ERR, "Failed to execute command of VIRTCHNL2_OP_GET_RSS_LUT");
@@ -742,7 +742,7 @@ idpf_vc_vectors_alloc(struct idpf_vport *vport, uint16_t num_vectors)
 	if (err != 0)
 		DRV_LOG(ERR, "Failed to execute command VIRTCHNL2_OP_ALLOC_VECTORS");
 
-	rte_memcpy(vport->recv_vectors, args.out_buffer, len);
+	memcpy(vport->recv_vectors, args.out_buffer, len);
 	rte_free(alloc_vec);
 	return err;
 }
@@ -1007,7 +1007,7 @@ idpf_vc_ptype_info_query(struct idpf_adapter *adapter,
 	if (err != 0)
 		DRV_LOG(ERR, "Failed to execute command of VIRTCHNL2_OP_GET_PTYPE_INFO");
 
-	rte_memcpy(recv_ptype_info, args.out_buffer, IDPF_DFLT_MBX_BUF_SIZE);
+	memcpy(recv_ptype_info, args.out_buffer, IDPF_DFLT_MBX_BUF_SIZE);
 	return err;
 }
 
diff --git a/drivers/net/intel/idpf/idpf_ethdev.c b/drivers/net/intel/idpf/idpf_ethdev.c
index 5e57a45775..6b3016ba77 100644
--- a/drivers/net/intel/idpf/idpf_ethdev.c
+++ b/drivers/net/intel/idpf/idpf_ethdev.c
@@ -439,7 +439,7 @@ idpf_init_rss(struct idpf_vport *vport)
 			     vport->rss_key_size);
 		return -EINVAL;
 	} else {
-		rte_memcpy(vport->rss_key, rss_conf->rss_key,
+		memcpy(vport->rss_key, rss_conf->rss_key,
 			   vport->rss_key_size);
 	}
 
@@ -558,7 +558,7 @@ idpf_rss_hash_update(struct rte_eth_dev *dev,
 		return -EINVAL;
 	}
 
-	rte_memcpy(vport->rss_key, rss_conf->rss_key,
+	memcpy(vport->rss_key, rss_conf->rss_key,
 		   vport->rss_key_size);
 	ret = idpf_vc_rss_key_set(vport);
 	if (ret != 0) {
@@ -631,7 +631,7 @@ idpf_rss_hash_conf_get(struct rte_eth_dev *dev,
 	if (rss_conf->rss_key_len > vport->rss_key_size)
 		rss_conf->rss_key_len = vport->rss_key_size;
 
-	rte_memcpy(rss_conf->rss_key, vport->rss_key, rss_conf->rss_key_len);
+	memcpy(rss_conf->rss_key, vport->rss_key, rss_conf->rss_key_len);
 
 	return 0;
 }
@@ -1363,7 +1363,7 @@ idpf_handle_virtchnl_msg(struct idpf_adapter_ext *adapter_ex)
 			return;
 		}
 
-		rte_memcpy(adapter->mbx_resp, ctlq_msg.ctx.indirect.payload->va,
+		memcpy(adapter->mbx_resp, ctlq_msg.ctx.indirect.payload->va,
 			   IDPF_DFLT_MBX_BUF_SIZE);
 
 		mbx_op = rte_le_to_cpu_16(ctlq_msg.opcode);
@@ -1477,7 +1477,7 @@ idpf_adapter_ext_init(struct rte_pci_device *pci_dev, struct idpf_adapter_ext *a
 
 	strncpy(adapter->name, pci_dev->device.name, PCI_PRI_STR_SIZE);
 
-	rte_memcpy(&base->caps, &req_caps, sizeof(struct virtchnl2_get_capabilities));
+	memcpy(&base->caps, &req_caps, sizeof(struct virtchnl2_get_capabilities));
 
 	ret = idpf_adapter_init(base);
 	if (ret != 0) {
diff --git a/drivers/net/intel/idpf/idpf_rxtx.c b/drivers/net/intel/idpf/idpf_rxtx.c
index b316c77b62..07f3df4a80 100644
--- a/drivers/net/intel/idpf/idpf_rxtx.c
+++ b/drivers/net/intel/idpf/idpf_rxtx.c
@@ -74,7 +74,7 @@ idpf_dma_zone_reserve(struct rte_eth_dev *dev, uint16_t queue_idx,
 		else
 			ring_size = RTE_ALIGN(len * sizeof(struct ci_tx_desc),
 					      IDPF_DMA_MEM_ALIGN);
-		rte_memcpy(ring_name, "idpf Tx ring", sizeof("idpf Tx ring"));
+		memcpy(ring_name, "idpf Tx ring", sizeof("idpf Tx ring"));
 		break;
 	case VIRTCHNL2_QUEUE_TYPE_RX:
 		if (splitq)
@@ -83,17 +83,17 @@ idpf_dma_zone_reserve(struct rte_eth_dev *dev, uint16_t queue_idx,
 		else
 			ring_size = RTE_ALIGN(len * sizeof(struct virtchnl2_singleq_rx_buf_desc),
 					      IDPF_DMA_MEM_ALIGN);
-		rte_memcpy(ring_name, "idpf Rx ring", sizeof("idpf Rx ring"));
+		memcpy(ring_name, "idpf Rx ring", sizeof("idpf Rx ring"));
 		break;
 	case VIRTCHNL2_QUEUE_TYPE_TX_COMPLETION:
 		ring_size = RTE_ALIGN(len * sizeof(struct idpf_splitq_tx_compl_desc),
 				      IDPF_DMA_MEM_ALIGN);
-		rte_memcpy(ring_name, "idpf Tx compl ring", sizeof("idpf Tx compl ring"));
+		memcpy(ring_name, "idpf Tx compl ring", sizeof("idpf Tx compl ring"));
 		break;
 	case VIRTCHNL2_QUEUE_TYPE_RX_BUFFER:
 		ring_size = RTE_ALIGN(len * sizeof(struct virtchnl2_splitq_rx_buf_desc),
 				      IDPF_DMA_MEM_ALIGN);
-		rte_memcpy(ring_name, "idpf Rx buf ring", sizeof("idpf Rx buf ring"));
+		memcpy(ring_name, "idpf Rx buf ring", sizeof("idpf Rx buf ring"));
 		break;
 	default:
 		PMD_INIT_LOG(ERR, "Invalid queue type");
-- 
2.51.0


^ permalink raw reply related

* [RFC PATCH 5/8] net/e1000: replace use of DPDK-specific memcpy function
From: Bruce Richardson @ 2026-05-19 16:06 UTC (permalink / raw)
  To: dev; +Cc: Bruce Richardson
In-Reply-To: <20260519160823.1004973-1-bruce.richardson@intel.com>

The driver use of memcpy is for control path work, for example, flow
configuration and so is fine using the standard libc memcpy function in
place of the DPDK-specific rte_memcpy version.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 drivers/net/intel/e1000/em_rxtx.c  | 1 -
 drivers/net/intel/e1000/igb_flow.c | 8 ++++----
 drivers/net/intel/e1000/igb_pf.c   | 5 ++---
 drivers/net/intel/e1000/igb_rxtx.c | 1 -
 4 files changed, 6 insertions(+), 9 deletions(-)

diff --git a/drivers/net/intel/e1000/em_rxtx.c b/drivers/net/intel/e1000/em_rxtx.c
index 54971fe285..5879013a1d 100644
--- a/drivers/net/intel/e1000/em_rxtx.c
+++ b/drivers/net/intel/e1000/em_rxtx.c
@@ -20,7 +20,6 @@
 #include <rte_pci.h>
 #include <bus_pci_driver.h>
 #include <rte_memory.h>
-#include <rte_memcpy.h>
 #include <rte_memzone.h>
 #include <rte_launch.h>
 #include <rte_eal.h>
diff --git a/drivers/net/intel/e1000/igb_flow.c b/drivers/net/intel/e1000/igb_flow.c
index ea9b290e1c..ca76bf5ae4 100644
--- a/drivers/net/intel/e1000/igb_flow.c
+++ b/drivers/net/intel/e1000/igb_flow.c
@@ -1484,7 +1484,7 @@ igb_flow_create(struct rte_eth_dev *dev,
 				goto out;
 			}
 
-			rte_memcpy(&ntuple_filter_ptr->filter_info,
+			memcpy(&ntuple_filter_ptr->filter_info,
 				&ntuple_filter,
 				sizeof(struct rte_eth_ntuple_filter));
 			TAILQ_INSERT_TAIL(&igb_filter_ntuple_list,
@@ -1511,7 +1511,7 @@ igb_flow_create(struct rte_eth_dev *dev,
 				goto out;
 			}
 
-			rte_memcpy(&ethertype_filter_ptr->filter_info,
+			memcpy(&ethertype_filter_ptr->filter_info,
 				&ethertype_filter,
 				sizeof(struct rte_eth_ethertype_filter));
 			TAILQ_INSERT_TAIL(&igb_filter_ethertype_list,
@@ -1536,7 +1536,7 @@ igb_flow_create(struct rte_eth_dev *dev,
 				goto out;
 			}
 
-			rte_memcpy(&syn_filter_ptr->filter_info,
+			memcpy(&syn_filter_ptr->filter_info,
 				&syn_filter,
 				sizeof(struct rte_eth_syn_filter));
 			TAILQ_INSERT_TAIL(&igb_filter_syn_list,
@@ -1562,7 +1562,7 @@ igb_flow_create(struct rte_eth_dev *dev,
 				goto out;
 			}
 
-			rte_memcpy(&flex_filter_ptr->filter_info,
+			memcpy(&flex_filter_ptr->filter_info,
 				&flex_filter,
 				sizeof(struct igb_flex_filter));
 			TAILQ_INSERT_TAIL(&igb_filter_flex_list,
diff --git a/drivers/net/intel/e1000/igb_pf.c b/drivers/net/intel/e1000/igb_pf.c
index c7588ea57e..a3327e0bf0 100644
--- a/drivers/net/intel/e1000/igb_pf.c
+++ b/drivers/net/intel/e1000/igb_pf.c
@@ -17,7 +17,6 @@
 #include <rte_eal.h>
 #include <rte_ether.h>
 #include <ethdev_driver.h>
-#include <rte_memcpy.h>
 #include <rte_malloc.h>
 #include <rte_random.h>
 
@@ -290,7 +289,7 @@ igb_vf_reset(struct rte_eth_dev *dev, uint16_t vf, uint32_t *msgbuf)
 
 	/* reply to reset with ack and vf mac address */
 	msgbuf[0] = E1000_VF_RESET | E1000_VT_MSGTYPE_ACK;
-	rte_memcpy(new_mac, vf_mac, RTE_ETHER_ADDR_LEN);
+	memcpy(new_mac, vf_mac, RTE_ETHER_ADDR_LEN);
 	e1000_write_mbx(hw, msgbuf, 3, vf);
 
 	return 0;
@@ -308,7 +307,7 @@ igb_vf_set_mac_addr(struct rte_eth_dev *dev, uint32_t vf, uint32_t *msgbuf)
 
 	if (rte_is_unicast_ether_addr((struct rte_ether_addr *)new_mac)) {
 		if (!rte_is_zero_ether_addr((struct rte_ether_addr *)new_mac))
-			rte_memcpy(vfinfo[vf].vf_mac_addresses, new_mac,
+			memcpy(vfinfo[vf].vf_mac_addresses, new_mac,
 				sizeof(vfinfo[vf].vf_mac_addresses));
 		hw->mac.ops.rar_set(hw, new_mac, rar_entry);
 		rah = E1000_READ_REG(hw, E1000_RAH(rar_entry));
diff --git a/drivers/net/intel/e1000/igb_rxtx.c b/drivers/net/intel/e1000/igb_rxtx.c
index 14b2858817..4fda5d57a0 100644
--- a/drivers/net/intel/e1000/igb_rxtx.c
+++ b/drivers/net/intel/e1000/igb_rxtx.c
@@ -19,7 +19,6 @@
 #include <rte_debug.h>
 #include <rte_pci.h>
 #include <rte_memory.h>
-#include <rte_memcpy.h>
 #include <rte_memzone.h>
 #include <rte_launch.h>
 #include <rte_eal.h>
-- 
2.51.0


^ permalink raw reply related

* [RFC PATCH 4/8] net/ixgbe: replace use of DPDK-specific memcpy function
From: Bruce Richardson @ 2026-05-19 16:06 UTC (permalink / raw)
  To: dev; +Cc: Bruce Richardson
In-Reply-To: <20260519160823.1004973-1-bruce.richardson@intel.com>

The driver use of memcpy is for control path work, for example, flow
configuration and so is fine using the standard libc memcpy function in
place of the DPDK-specific rte_memcpy version.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
---
 drivers/net/intel/ixgbe/ixgbe_ethdev.c  |  4 ++--
 drivers/net/intel/ixgbe/ixgbe_fdir.c    |  6 ++---
 drivers/net/intel/ixgbe/ixgbe_flow.c    | 32 ++++++++++++-------------
 drivers/net/intel/ixgbe/ixgbe_ipsec.c   |  4 ++--
 drivers/net/intel/ixgbe/ixgbe_pf.c      |  5 ++--
 drivers/net/intel/ixgbe/ixgbe_tm.c      |  6 ++---
 drivers/net/intel/ixgbe/rte_pmd_ixgbe.c |  2 +-
 7 files changed, 29 insertions(+), 30 deletions(-)

diff --git a/drivers/net/intel/ixgbe/ixgbe_ethdev.c b/drivers/net/intel/ixgbe/ixgbe_ethdev.c
index 57d929cf2c..d4e3d643f8 100644
--- a/drivers/net/intel/ixgbe/ixgbe_ethdev.c
+++ b/drivers/net/intel/ixgbe/ixgbe_ethdev.c
@@ -6805,7 +6805,7 @@ ixgbe_add_del_ntuple_filter(struct rte_eth_dev *dev,
 				sizeof(struct ixgbe_5tuple_filter), 0);
 		if (filter == NULL)
 			return -ENOMEM;
-		rte_memcpy(&filter->filter_info,
+		memcpy(&filter->filter_info,
 				 &filter_5tuple,
 				 sizeof(struct ixgbe_5tuple_filter_info));
 		filter->queue = ntuple_filter->queue;
@@ -7867,7 +7867,7 @@ ixgbe_dev_l2_tunnel_filter_add(struct rte_eth_dev *dev,
 		if (!node)
 			return -ENOMEM;
 
-		rte_memcpy(&node->key,
+		memcpy(&node->key,
 				 &key,
 				 sizeof(struct ixgbe_l2_tn_key));
 		node->pool = l2_tunnel->pool;
diff --git a/drivers/net/intel/ixgbe/ixgbe_fdir.c b/drivers/net/intel/ixgbe/ixgbe_fdir.c
index 0bdfbd411a..003f8240bd 100644
--- a/drivers/net/intel/ixgbe/ixgbe_fdir.c
+++ b/drivers/net/intel/ixgbe/ixgbe_fdir.c
@@ -53,7 +53,7 @@
 #define IPV6_ADDR_TO_MASK(ipaddr, ipv6m) do { \
 	uint8_t ipv6_addr[16]; \
 	uint8_t i; \
-	rte_memcpy(ipv6_addr, (ipaddr), sizeof(ipv6_addr));\
+	memcpy(ipv6_addr, (ipaddr), sizeof(ipv6_addr));\
 	(ipv6m) = 0; \
 	for (i = 0; i < sizeof(ipv6_addr); i++) { \
 		if (ipv6_addr[i] == UINT8_MAX) \
@@ -73,7 +73,7 @@
 		else \
 			ipv6_addr[i] = 0; \
 	} \
-	rte_memcpy((ipaddr), ipv6_addr, sizeof(ipv6_addr));\
+	memcpy((ipaddr), ipv6_addr, sizeof(ipv6_addr));\
 } while (0)
 
 #define IXGBE_FDIRIP6M_INNER_MAC_SHIFT 4
@@ -1219,7 +1219,7 @@ ixgbe_fdir_filter_program(struct rte_eth_dev *dev,
 				   0);
 		if (!node)
 			return -ENOMEM;
-		rte_memcpy(&node->ixgbe_fdir,
+		memcpy(&node->ixgbe_fdir,
 				 &rule->ixgbe_fdir,
 				 sizeof(union ixgbe_atr_input));
 		node->fdirflags = fdircmd_flags;
diff --git a/drivers/net/intel/ixgbe/ixgbe_flow.c b/drivers/net/intel/ixgbe/ixgbe_flow.c
index 01cd4f9bde..8671761bc5 100644
--- a/drivers/net/intel/ixgbe/ixgbe_flow.c
+++ b/drivers/net/intel/ixgbe/ixgbe_flow.c
@@ -2024,9 +2024,9 @@ ixgbe_parse_fdir_filter_normal(struct rte_eth_dev *dev,
 		if (item->spec) {
 			rule->b_spec = TRUE;
 			ipv6_spec = item->spec;
-			rte_memcpy(rule->ixgbe_fdir.formatted.src_ip,
+			memcpy(rule->ixgbe_fdir.formatted.src_ip,
 				   &ipv6_spec->hdr.src_addr, 16);
-			rte_memcpy(rule->ixgbe_fdir.formatted.dst_ip,
+			memcpy(rule->ixgbe_fdir.formatted.dst_ip,
 				   &ipv6_spec->hdr.dst_addr, 16);
 		}
 
@@ -2581,13 +2581,13 @@ ixgbe_parse_fdir_filter_tunnel(const struct rte_flow_attr *attr,
 			return -rte_errno;
 		}
 
-		rte_memcpy(&rule->mask.tunnel_id_mask, vxlan_mask->hdr.vni,
+		memcpy(&rule->mask.tunnel_id_mask, vxlan_mask->hdr.vni,
 			RTE_DIM(vxlan_mask->hdr.vni));
 
 		if (item->spec) {
 			rule->b_spec = TRUE;
 			vxlan_spec = item->spec;
-			rte_memcpy(((uint8_t *)
+			memcpy(((uint8_t *)
 				&rule->ixgbe_fdir.formatted.tni_vni),
 				vxlan_spec->hdr.vni, RTE_DIM(vxlan_spec->hdr.vni));
 		}
@@ -2658,7 +2658,7 @@ ixgbe_parse_fdir_filter_tunnel(const struct rte_flow_attr *attr,
 			return -rte_errno;
 		}
 		/* tni is a 24-bits bit field */
-		rte_memcpy(&rule->mask.tunnel_id_mask, nvgre_mask->tni,
+		memcpy(&rule->mask.tunnel_id_mask, nvgre_mask->tni,
 			RTE_DIM(nvgre_mask->tni));
 		rule->mask.tunnel_id_mask <<= 8;
 
@@ -2684,7 +2684,7 @@ ixgbe_parse_fdir_filter_tunnel(const struct rte_flow_attr *attr,
 				return -rte_errno;
 			}
 			/* tni is a 24-bits bit field */
-			rte_memcpy(&rule->ixgbe_fdir.formatted.tni_vni,
+			memcpy(&rule->ixgbe_fdir.formatted.tni_vni,
 			nvgre_spec->tni, RTE_DIM(nvgre_spec->tni));
 		}
 	}
@@ -3155,7 +3155,7 @@ ixgbe_flow_create(struct rte_eth_dev *dev,
 				PMD_DRV_LOG(ERR, "failed to allocate memory");
 				goto out;
 			}
-			rte_memcpy(&ntuple_filter_ptr->filter_info,
+			memcpy(&ntuple_filter_ptr->filter_info,
 				&ntuple_filter,
 				sizeof(struct rte_eth_ntuple_filter));
 			TAILQ_INSERT_TAIL(&filter_ntuple_list,
@@ -3181,7 +3181,7 @@ ixgbe_flow_create(struct rte_eth_dev *dev,
 				PMD_DRV_LOG(ERR, "failed to allocate memory");
 				goto out;
 			}
-			rte_memcpy(&ethertype_filter_ptr->filter_info,
+			memcpy(&ethertype_filter_ptr->filter_info,
 				&ethertype_filter,
 				sizeof(struct rte_eth_ethertype_filter));
 			TAILQ_INSERT_TAIL(&filter_ethertype_list,
@@ -3205,7 +3205,7 @@ ixgbe_flow_create(struct rte_eth_dev *dev,
 				PMD_DRV_LOG(ERR, "failed to allocate memory");
 				goto out;
 			}
-			rte_memcpy(&syn_filter_ptr->filter_info,
+			memcpy(&syn_filter_ptr->filter_info,
 				&syn_filter,
 				sizeof(struct rte_eth_syn_filter));
 			TAILQ_INSERT_TAIL(&filter_syn_list,
@@ -3268,7 +3268,7 @@ ixgbe_flow_create(struct rte_eth_dev *dev,
 					PMD_DRV_LOG(ERR, "failed to allocate memory");
 					goto out;
 				}
-				rte_memcpy(&fdir_rule_ptr->filter_info,
+				memcpy(&fdir_rule_ptr->filter_info,
 					&fdir_rule,
 					sizeof(struct ixgbe_fdir_rule));
 				TAILQ_INSERT_TAIL(&filter_fdir_list,
@@ -3305,7 +3305,7 @@ ixgbe_flow_create(struct rte_eth_dev *dev,
 				PMD_DRV_LOG(ERR, "failed to allocate memory");
 				goto out;
 			}
-			rte_memcpy(&l2_tn_filter_ptr->filter_info,
+			memcpy(&l2_tn_filter_ptr->filter_info,
 				&l2_tn_filter,
 				sizeof(struct ixgbe_l2_tunnel_conf));
 			TAILQ_INSERT_TAIL(&filter_l2_tunnel_list,
@@ -3447,7 +3447,7 @@ ixgbe_flow_destroy(struct rte_eth_dev *dev,
 	case RTE_ETH_FILTER_NTUPLE:
 		ntuple_filter_ptr = (struct ixgbe_ntuple_filter_ele *)
 					pmd_flow->rule;
-		rte_memcpy(&ntuple_filter,
+		memcpy(&ntuple_filter,
 			&ntuple_filter_ptr->filter_info,
 			sizeof(struct rte_eth_ntuple_filter));
 		ret = ixgbe_add_del_ntuple_filter(dev, &ntuple_filter, FALSE);
@@ -3460,7 +3460,7 @@ ixgbe_flow_destroy(struct rte_eth_dev *dev,
 	case RTE_ETH_FILTER_ETHERTYPE:
 		ethertype_filter_ptr = (struct ixgbe_ethertype_filter_ele *)
 					pmd_flow->rule;
-		rte_memcpy(&ethertype_filter,
+		memcpy(&ethertype_filter,
 			&ethertype_filter_ptr->filter_info,
 			sizeof(struct rte_eth_ethertype_filter));
 		ret = ixgbe_add_del_ethertype_filter(dev,
@@ -3474,7 +3474,7 @@ ixgbe_flow_destroy(struct rte_eth_dev *dev,
 	case RTE_ETH_FILTER_SYN:
 		syn_filter_ptr = (struct ixgbe_eth_syn_filter_ele *)
 				pmd_flow->rule;
-		rte_memcpy(&syn_filter,
+		memcpy(&syn_filter,
 			&syn_filter_ptr->filter_info,
 			sizeof(struct rte_eth_syn_filter));
 		ret = ixgbe_syn_filter_set(dev, &syn_filter, FALSE);
@@ -3486,7 +3486,7 @@ ixgbe_flow_destroy(struct rte_eth_dev *dev,
 		break;
 	case RTE_ETH_FILTER_FDIR:
 		fdir_rule_ptr = (struct ixgbe_fdir_rule_ele *)pmd_flow->rule;
-		rte_memcpy(&fdir_rule,
+		memcpy(&fdir_rule,
 			&fdir_rule_ptr->filter_info,
 			sizeof(struct ixgbe_fdir_rule));
 		ret = ixgbe_fdir_filter_program(dev, &fdir_rule, TRUE, FALSE);
@@ -3501,7 +3501,7 @@ ixgbe_flow_destroy(struct rte_eth_dev *dev,
 	case RTE_ETH_FILTER_L2_TUNNEL:
 		l2_tn_filter_ptr = (struct ixgbe_eth_l2_tunnel_conf_ele *)
 				pmd_flow->rule;
-		rte_memcpy(&l2_tn_filter, &l2_tn_filter_ptr->filter_info,
+		memcpy(&l2_tn_filter, &l2_tn_filter_ptr->filter_info,
 			sizeof(struct ixgbe_l2_tunnel_conf));
 		ret = ixgbe_dev_l2_tunnel_filter_del(dev, &l2_tn_filter);
 		if (!ret) {
diff --git a/drivers/net/intel/ixgbe/ixgbe_ipsec.c b/drivers/net/intel/ixgbe/ixgbe_ipsec.c
index fe9a96c54d..fd3d7a6689 100644
--- a/drivers/net/intel/ixgbe/ixgbe_ipsec.c
+++ b/drivers/net/intel/ixgbe/ixgbe_ipsec.c
@@ -674,9 +674,9 @@ ixgbe_crypto_add_ingress_sa_from_flow(struct rte_security_session *sess,
 			const struct rte_flow_item_ipv6 *ipv6 = &spec->spec.ipv6;
 			ic_session->src_ip.type = IPv6;
 			ic_session->dst_ip.type = IPv6;
-			rte_memcpy(ic_session->src_ip.ipv6,
+			memcpy(ic_session->src_ip.ipv6,
 				   &ipv6->hdr.src_addr, 16);
-			rte_memcpy(ic_session->dst_ip.ipv6,
+			memcpy(ic_session->dst_ip.ipv6,
 				   &ipv6->hdr.dst_addr, 16);
 		} else {
 			const struct rte_flow_item_ipv4 *ipv4 = &spec->spec.ipv4;
diff --git a/drivers/net/intel/ixgbe/ixgbe_pf.c b/drivers/net/intel/ixgbe/ixgbe_pf.c
index d9a775f99a..d3db571918 100644
--- a/drivers/net/intel/ixgbe/ixgbe_pf.c
+++ b/drivers/net/intel/ixgbe/ixgbe_pf.c
@@ -16,7 +16,6 @@
 #include <rte_eal.h>
 #include <rte_ether.h>
 #include <ethdev_driver.h>
-#include <rte_memcpy.h>
 #include <rte_malloc.h>
 #include <rte_random.h>
 
@@ -452,7 +451,7 @@ ixgbe_vf_reset(struct rte_eth_dev *dev, uint16_t vf, uint32_t *msgbuf)
 
 	/* reply to reset with success and vf mac address */
 	msgbuf[0] = IXGBE_VF_RESET | IXGBE_VT_MSGTYPE_SUCCESS;
-	rte_memcpy(new_mac, vf_mac, RTE_ETHER_ADDR_LEN);
+	memcpy(new_mac, vf_mac, RTE_ETHER_ADDR_LEN);
 	/*
 	 * Piggyback the multicast filter type so VF can compute the
 	 * correct vectors
@@ -474,7 +473,7 @@ ixgbe_vf_set_mac_addr(struct rte_eth_dev *dev, uint32_t vf, uint32_t *msgbuf)
 
 	if (rte_is_valid_assigned_ether_addr(
 			(struct rte_ether_addr *)new_mac)) {
-		rte_memcpy(vfinfo[vf].vf_mac_addresses, new_mac, 6);
+		memcpy(vfinfo[vf].vf_mac_addresses, new_mac, 6);
 		return hw->mac.ops.set_rar(hw, rar_entry, new_mac, vf, IXGBE_RAH_AV);
 	}
 	return -1;
diff --git a/drivers/net/intel/ixgbe/ixgbe_tm.c b/drivers/net/intel/ixgbe/ixgbe_tm.c
index 27a821285d..e1d8364f46 100644
--- a/drivers/net/intel/ixgbe/ixgbe_tm.c
+++ b/drivers/net/intel/ixgbe/ixgbe_tm.c
@@ -289,7 +289,7 @@ ixgbe_shaper_profile_add(struct rte_eth_dev *dev,
 	if (!shaper_profile)
 		return -ENOMEM;
 	shaper_profile->shaper_profile_id = shaper_profile_id;
-	rte_memcpy(&shaper_profile->profile, profile,
+	memcpy(&shaper_profile->profile, profile,
 			 sizeof(struct rte_tm_shaper_params));
 	TAILQ_INSERT_TAIL(&tm_conf->shaper_profile_list,
 			  shaper_profile, node);
@@ -637,7 +637,7 @@ ixgbe_node_add(struct rte_eth_dev *dev, uint32_t node_id,
 		tm_node->no = 0;
 		tm_node->parent = NULL;
 		tm_node->shaper_profile = shaper_profile;
-		rte_memcpy(&tm_node->params, params,
+		memcpy(&tm_node->params, params,
 				 sizeof(struct rte_tm_node_params));
 		tm_conf->root = tm_node;
 
@@ -718,7 +718,7 @@ ixgbe_node_add(struct rte_eth_dev *dev, uint32_t node_id,
 	tm_node->reference_count = 0;
 	tm_node->parent = parent_node;
 	tm_node->shaper_profile = shaper_profile;
-	rte_memcpy(&tm_node->params, params,
+	memcpy(&tm_node->params, params,
 			 sizeof(struct rte_tm_node_params));
 	if (parent_node_type == IXGBE_TM_NODE_TYPE_PORT) {
 		tm_node->no = parent_node->reference_count;
diff --git a/drivers/net/intel/ixgbe/rte_pmd_ixgbe.c b/drivers/net/intel/ixgbe/rte_pmd_ixgbe.c
index c2300a8955..30dec57be8 100644
--- a/drivers/net/intel/ixgbe/rte_pmd_ixgbe.c
+++ b/drivers/net/intel/ixgbe/rte_pmd_ixgbe.c
@@ -39,7 +39,7 @@ rte_pmd_ixgbe_set_vf_mac_addr(uint16_t port, uint16_t vf,
 
 	if (rte_is_valid_assigned_ether_addr(
 			(struct rte_ether_addr *)new_mac)) {
-		rte_memcpy(vfinfo[vf].vf_mac_addresses, new_mac,
+		memcpy(vfinfo[vf].vf_mac_addresses, new_mac,
 			   RTE_ETHER_ADDR_LEN);
 		return hw->mac.ops.set_rar(hw, rar_entry, new_mac, vf,
 					   IXGBE_RAH_AV);
-- 
2.51.0


^ permalink raw reply related


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox